FreeCAD MCP
by neka-nat
This repository provides a FreeCAD MCP (Message Control Protocol) that enables you to control FreeCAD from Claude Desktop. It allows for automated design and manipulation of FreeCAD models through external commands.
Last updated: N/A
FreeCAD MCP
This repository is a FreeCAD MCP that allows you to control FreeCAD from Claude Desktop.
Demo
Design a flange

demo
Design a toy car

demo
Design a part from 2D drawing
Input 2D drawing

input
Demo

demo
Install addon
FreeCAD Addon directory is
- Windows:
%APPDATA%\FreeCAD\Mod\
- Mac:
~/Library/Application Support/FreeCAD/Mod/
- Linux:
~/.FreeCAD/Mod/
or~/snap/freecad/common/Mod/
(if you install FreeCAD from snap)
Please put addon/FreeCADMCP
directory to the addon directory.
git clone https://github.com/neka-nat/freecad-mcp.git
cd freecad-mcp
cp -r addon/FreeCADMCP ~/.FreeCAD/Mod/
When you install addon, you need to restart FreeCAD. You can select "MCP Addon" from Workbench list and use it.

workbench_list
And you can start RPC server by "Start RPC Server" command in "FreeCAD MCP" toolbar.

start_rpc_server
Setting up Claude Desktop
Edit claude_desktop_config.json
file.
For user.
{
"mcpServers": {
"freecad": {
"command": "uvx",
"args": [
"freecad-mcp"
]
}
}
}
If you want to save token, you can set only_text_feedback
to true
and use only text feedback.
{
"mcpServers": {
"freecad": {
"command": "uvx",
"args": [
"freecad-mcp",
"--only-text-feedback"
]
}
}
}
For developer. First, you need clone this repository.
git clone https://github.com/neka-nat/freecad-mcp.git
{
"mcpServers": {
"freecad": {
"command": "uv",
"args": [
"--directory",
"/path/to/freecad-mcp/",
"run",
"freecad-mcp"
]
}
}
}
Tools
create_document
: Create a new document in FreeCAD.create_object
: Create a new object in FreeCAD.edit_object
: Edit an object in FreeCAD.delete_object
: Delete an object in FreeCAD.execute_code
: Execute arbitrary Python code in FreeCAD.insert_part_from_library
: Insert a part from the parts library.get_view
: Get a screenshot of the active view.get_objects
: Get all objects in a document.get_object
: Get an object in a document.get_parts_list
: Get the list of parts in the parts library.