FreeCAD MCP
[](https://mseep.ai/app/neka-nat-freecad-mcp)
# FreeCAD MCP
This repository is a FreeCAD MCP that allows you to control FreeCAD from Claude Desktop.
## Demo
### Design a flange

### Design a toy car

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

#### Demo

This is the conversation history.
https://claude.ai/share/7b48fd60-68ba-46fb-bb21-2fbb17399b48
## Install addon
FreeCAD Addon directory is
* Windows: `%APPDATA%\FreeCAD\Mod\`
* Mac: `~/Library/Application\ Support/FreeCAD/Mod/`
* Linux:
* Ubuntu: `~/.FreeCAD/Mod/` or `~/snap/freecad/common/Mod/` (if you install FreeCAD from snap)
* Debian: `~/.local/share/FreeCAD/Mod`
Please put `addon/FreeCADMCP` directory to the addon directory.
```bash
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.

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

### Auto-Start RPC Server
By default, the RPC server must be started manually each time FreeCAD opens. To start it automatically:
1. Open the **FreeCAD MCP** menu (switch to the MCP Addon workbench first)
2. Check **Auto-Start Server**
The setting is saved to `freecad_mcp_settings.json` and persists across sessions. On the next FreeCAD launch, the RPC server will start automatically once the application finishes loading.
You can disable it at any time by unchecking **Auto-Start Server** in the same menu.
## Setting up Claude Desktop
Pre-installation of the [uvx](https://docs.astral.sh/uv/guides/tools/) is required.
And you need to edit Claude Desktop config file, `claude_desktop_config.json`.
For user.
```json
{
"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.
```json
{
"mcpServers": {
"freecad": {
"command": "uvx",
"args": [
"freecad-mcp",
"--only-text-feedback"
]
}
}
}
```
For developer.
First, you need clone this repository.
```bash
git clone https://github.com/neka-nat/freecad-mcp.git
```
```json
{
"mcpServers": {
"freecad": {
"command": "uv",
"args": [
"--directory",
"/path/to/freecad-mcp/",
"run",
"freecad-mcp"
]
}
}
}
```
## Remote Connections
By default the RPC server does not accept remote connections and listens on `localhost`. To control FreeCAD from another machine on your network:
### 1. Enable remote connections in FreeCAD
In the **FreeCAD MCP** toolbar:
1. Check **Remote Connections** — the RPC server will bind to `0.0.0.0` (all interfaces) on the next restart. For security reasons, it only accepts connections from the IP addresses or CIDR subnets specified in the **Allowed IPs** field. By default this is `127.0.0.1`.
2. Click **Configure Allowed IPs** and enter a comma-separated list of IP addresses or CIDR subnets that are allowed to connect, e.g.:
```
192.168.1.100, 10.0.0.0/24
```
`127.0.0.1` is always the default. Invalid entries are rejected with an error dialog. Restart the RPC server after changing these settings.
### 2. Point the MCP server at the remote host
Pass the `--host` flag with the IP address or hostname of the machine running FreeCAD:
```json
{
"mcpServers": {
"freecad": {
"command": "uvx",
"args": [
"freecad-mcp",
"--host", "192.168.1.100"
]
}
}
}
```
The `--host` value is validated on startup — it must be a valid IPv4/IPv6 address or hostname.
## 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](https://github.com/FreeCAD/FreeCAD-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](https://github.com/FreeCAD/FreeCAD-library).
## Contributors
<a href="https://github.com/neka-nat/freecad-mcp/graphs/contributors">
<img src="https://contrib.rocks/image?repo=neka-nat/freecad-mcp" />
</a>
Made with [contrib.rocks](https://contrib.rocks).
TDQS
Scored across 11 tools
Most tools have distinct purposes (e.g., create_document vs. create_object vs. get_view), but some overlap exists: create_object and edit_object could be confusing since edit_object is described as a fallback for when create_object fails, and get_object vs. get_objects are similar but differentiated by singular vs. plural. Overall, descriptions help clarify boundaries, but minor ambiguity remains.
All tool names follow a consistent snake_case pattern with clear verb_noun structure (e.g., create_document, delete_object, list_documents). There are no deviations in naming conventions, making the set predictable and easy to understand at a glance.
With 11 tools, the count is well-scoped for a CAD modeling server like FreeCAD. It covers core operations (create, delete, edit, get, list) across documents, objects, and views, plus specialized tools (execute_code, insert_part_from_library), without feeling excessive or insufficient for the domain.
The toolset provides solid coverage for basic CAD operations, including document and object lifecycle (create, get, edit, delete) and view management. However, there are minor gaps: no explicit update or save operations for documents, and the execute_code tool might be a catch-all that could indicate missing specialized functions. Overall, agents can likely work around these gaps.