FreeCAD MCP: AI-Driven CAD with Claude (2026 Guide)
The FreeCAD MCP server lets Claude drive a running FreeCAD instance: create parametric parts, run Python in the FreeCAD console, and get a screenshot back after every operation so the model can see what it built. The catch most tutorials gloss over: it’s a two-part install — an addon inside FreeCAD plus an MCP server in your AI client — and skipping either half is the number-one reason it “doesn’t work.” This guide covers both halves precisely, every tool, four real recipes, and the token-cost gotcha you want to know before your first long session.

TL;DR + what you actually need
Four things that get you from zero to AI-driven CAD:
- FreeCAD itself — 1.0 or 1.1, running with the GUI open. There is no headless mode (it’s an open feature request).
- The FreeCADMCP addon — copied from the repo’s
addon/FreeCADMCPfolder into your FreeCADModdirectory. It adds an “MCP Addon” workbench with a Start RPC Server button. That button is the half everyone forgets. - The MCP server — the
freecad-mcpPython package, run viauvx(so you need uv installed). No API keys, no accounts — everything runs on your machine. - One flag worth knowing:
--only-text-feedback. By default every tool call returns a screenshot, which is great for accuracy and brutal on token usage. Add the flag for long sessions.
The client config, if you only came for the copy-paste:
{
"mcpServers": {
"freecad": {
"command": "uvx",
"args": ["freecad-mcp"]
}
}
}The rest of this guide explains the two-process architecture, walks every tool, and covers the failure modes pulled from the repo’s real GitHub issues. Canonical catalog entry with live install configs: /servers/freecad.
What FreeCAD MCP actually does
FreeCAD MCP, by neka-nat (MIT licensed), connects an MCP client — Claude Desktop in the README, but any MCP client works — to a live FreeCAD session. FreeCAD is the open-source parametric CAD application: parts are defined by editable parameters and a feature history, not frozen meshes. That matters here, because it means the agent isn’t generating a blob of triangles — it’s building real CAD objects you can keep editing by hand afterwards.
The README demos show the shape of what’s possible, and they’re worth watching before you install:
- Design a flange. An animated capture of Claude building a bolt-hole flange step by step — cylinders, boolean cuts, a hole circle — checking a screenshot after each operation.
- Design a toy car. A multi-part assembly (body, wheels) built conversationally in the same screenshot-verify loop.
- Design a part from a 2D drawing. The most striking one: the input is a PNG of a dimensioned 2D drawing, and Claude models the 3D part from it. The repo links the full Claude conversation so you can read exactly which tool calls it made.
The design choice that makes all three work is the screenshot feedback loop. Mutating tools (create_object, edit_object, execute_code…) return a rendered screenshot of the 3D view alongside the text result. The model sees the geometry it produced, notices the boss is on the wrong face, and fixes it in the next call. Without that loop, AI CAD is blind geometry generation; with it, it’s an iterate- and-verify workflow.
The maintainer, Kenta Tanaka (@neka_nat), is a robotics engineer, and his framing of why this matters goes beyond CAD — a few weeks after shipping freecad-mcp he drew the parallel between MCP and ROS, the robot operating system: one motor needs no framework, but dozens of components do, and the endgame is agents wielding hundreds of tools at once:
MCPはROSとかなり通ずるものがあると思ってる。
— Kenta Tanaka | WillRobotics | Physical AI (@neka_nat) April 9, 2025
ロボットもただ一個のモータやカメラを制御したいだけなら、都度専用コンポーネントを作れば良い。
けど実際には数十以上のコンポーネントが必要になってくる。
MCPが普及した先にあるのは何百個というツールを同時に使いこなすAIエージェントの姿。
Two processes, one bridge
Most MCP servers are a single process your client launches. FreeCAD MCP is two, and understanding the split saves you every debugging session later:
Claude Desktop / Cursor / Claude Code
│ MCP over stdio
▼
freecad-mcp (Python package, launched by your client via uvx)
│ XML-RPC on localhost:9875
▼
FreeCADMCP addon (workbench running INSIDE the FreeCAD GUI)
│ FreeCAD Python API
▼
Your open FreeCAD document + 3D viewThe named pieces:
- The MCP server (
freecad-mcpon PyPI) speaks MCP to your client over stdio and translates tool calls into XML-RPC requests. XML-RPC is an old, simple remote-procedure-call protocol — a good fit because FreeCAD bundles its own Python and you can’t pip-install MCP dependencies into it cleanly. - The addon (
FreeCADMCP) is a FreeCAD workbench that hosts the XML-RPC listener on port 9875 and executes operations on the GUI thread — object creation, property edits, screenshots of the active view. - The parts library (optional) is FreeCAD’s community parts library addon. With it installed, the agent can browse and insert ready-made parts — screws, bearings, profiles — instead of modeling them from primitives.
The consequence of the split: both halves must be alive. FreeCAD open but RPC server not started → connection errors. RPC running but the client config missing → no tools in Claude. Every “it doesn’t work” report in the repo’s issues resolves to one of those two states more often than anything else.
Setup part 1: the FreeCAD addon
Clone the repo and copy the addon folder into FreeCAD’s Mod directory. The directory moves around by platform and FreeCAD version — this table is the part to get right:
| Platform | Mod directory |
|---|---|
| Windows | %APPDATA%\FreeCAD\Mod\ |
| macOS (FreeCAD 1.1) | ~/Library/Application Support/FreeCAD/v1-1/Mod/ |
| macOS (FreeCAD 1.0) | ~/Library/Application Support/FreeCAD/v1-0/Mod/ |
| Ubuntu | ~/.FreeCAD/Mod/ (snap: ~/snap/freecad/common/Mod/) |
| Debian | ~/.local/share/FreeCAD/Mod/ |
| Arch / CachyOS (FreeCAD 1.1) | ~/.local/share/FreeCAD/v1-1/Mod/ |
git clone https://github.com/neka-nat/freecad-mcp.git
cd freecad-mcp
# macOS, FreeCAD 1.1:
cp -r addon/FreeCADMCP ~/Library/Application\ Support/FreeCAD/v1-1/Mod/
# Ubuntu:
cp -r addon/FreeCADMCP ~/.FreeCAD/Mod/Restart FreeCAD, pick MCP Addon from the workbench dropdown, and click Start RPC Server in the FreeCAD MCP toolbar. The listener binds to localhost:9875. Two settings worth enabling from the same menu:
- Auto-Start Server — starts the RPC server on every FreeCAD launch (saved to
freecad_mcp_settings.json). Turn this on; the manual button is the thing you will forget. - Remote Connections — rebinds to
0.0.0.0so another machine can drive this FreeCAD instance. Access is restricted to the IPs/CIDR ranges you whitelist under Configure Allowed IPs (default127.0.0.1). On the client side you pass--host 192.168.1.100in the server args. Useful for a CAD workstation + laptop setup; leave it off otherwise.
Setup part 2: the MCP server (every client)
The server is stdio-only — your client launches uvx freecad-mcp as a subprocess. The install panel below pulls configs from the canonical /servers/freecad catalog entry: pick your client, copy, paste, restart.
One-line install · FreeCAD
Open server pageInstall
Client-specific notes:
- Claude Desktop — add the JSON block to
claude_desktop_config.json(the README’s reference client). See /clients/claude-desktop for the file location per OS. - Claude Code —
claude mcp add freecad -- uvx freecad-mcp. Pair it with a CLAUDE.md note telling the agent to verify geometry withget_viewbefore declaring a part done. - Cursor / VS Code / Windsurf — same JSON shape in
~/.cursor/mcp.jsonor the client’s MCP settings. See /clients/cursor. - Token-saver variant — append
"--only-text-feedback"to the args array to suppress per-call screenshots. - Developer mode — run from a clone with
uv --directory /path/to/freecad-mcp run freecad-mcpif you want to hack on the server itself.
Verification: with FreeCAD running and the RPC server started, ask the agent “create a document called Test and put a 10×10×10 box in it.” You should see the box appear in FreeCAD and (without the text-only flag) a screenshot come back in the chat.
Tools walkthrough
Eleven tools, small enough to keep entirely in your head. Grouped by what they do:
Build and edit
create_document— new FreeCAD document. Everything else takes adoc_name.create_object— the workhorse. Creates typed objects:Part::Box,Part::Cylinder,Draft::Circle,PartDesign::Body, plus FEM types (analyses, constraints, materials, Gmsh meshes). Takes a properties dict — dimensions, placement with rotation, evenViewObjectcolor.edit_object— mutate properties of an existing object; the fallback when a shape needs adjusting rather than recreating.delete_object— remove an object by name.execute_code— run arbitrary Python inside FreeCAD. The escape hatch that makes everything not covered by the typed tools possible: booleans, sketches, exports, batch edits. More below — it’s both the most powerful tool and the security boundary.
Inspect
get_view— screenshot of the active 3D view from a named camera: Isometric, Front, Top, Right, Back, Left, Bottom, Dimetric, Trimetric.get_objects/get_object— the document tree and per-object properties. The agent uses these to re-orient mid-session instead of guessing what exists.
Reuse and simulate
get_parts_list/insert_part_from_library— browse and drop in parts from the FreeCAD parts library addon.run_fem_analysis— runs the CalculiX solver (FreeCAD’s bundled finite-element solver) on an existing analysis and returns max von Mises stress, max displacement, and node count. The repo’s cantilever example shows the full loop: geometry → material → constraints → mesh → solve.
Opinionated take: the typed tools exist so the model doesn’t have to write Python for the common 80%, and the screenshots they return are what keep it honest. But anything genuinely parametric — a bolt-hole circle, a swept profile — ends up in execute_code. Expect your sessions to be roughly half typed calls, half generated Python.
Recipes
Recipe 1 — Parametric part from a description
The flange demo, reproduced. Prompt: “Create a flange: outer diameter 120 mm, bore 40 mm, thickness 12 mm, with 6 M8 bolt holes on a 90 mm bolt circle. Show me the isometric view when done.” The agent creates the base cylinders via create_object, then drops to execute_code for the polar hole pattern and boolean cut. Give exact dimensions — the model is good at geometry construction and bad at inventing sensible engineering numbers.
Recipe 2 — Batch-modify an existing model
Parametric edits across many objects is where execute_code beats clicking. Prompt: “In the open document, find every cylinder with radius 4 mm and change it to 4.2 mm for clearance.” The agent runs get_objects to enumerate, then one Python loop:
doc = App.getDocument("MyPart")
for obj in doc.Objects:
if obj.TypeId == "Part::Cylinder" and abs(obj.Radius.Value - 4.0) < 1e-6:
obj.Radius = 4.2
doc.recompute()Recipe 3 — The screenshot verify loop
For anything non-trivial, make the loop explicit in your prompt: “After each feature, check the Front and Top views and confirm the geometry matches the drawing before continuing.” This is exactly how the 2D-drawing demo works — the model compares get_view output against the input drawing and corrects itself. It costs tokens (each view is an image) but multiplies reliability on multi-step parts. Run expensive sessions with screenshots on; do bulk scripted work with --only-text-feedback.
Recipe 4 — Export STEP / STL
No dedicated export tool exists yet (it’s an open feature request), but FreeCAD’s Python API covers it through execute_code:
import Part, Mesh
doc = App.getDocument("MyPart")
# STEP (exact CAD geometry, for other CAD tools):
Part.export([doc.Flange], "/Users/you/parts/flange.step")
# STL (mesh, for 3D printing):
Mesh.export([doc.Flange], "/Users/you/parts/flange.stl")Ask for it in plain language — “export the body as STEP to ~/parts/” — and the agent writes this for you.
Limits (read before you commit a workflow to it)
- Token burn from screenshots. Every mutating call returns an image by default. A long modeling session can eat a surprising share of a Claude usage limit — “Excessive Token Usage Due to Image Returns” was a real issue in the repo, and
--only-text-feedbackis the fix it produced. - GUI required. The addon lives in the FreeCAD GUI process and screenshots need an active 3D view. No headless / CI use today (open issue).
execute_codeis arbitrary code execution. By design. The model can write files, import modules, and touch anything your FreeCAD process can. Fine on your own workstation with your own prompts; think twice before combining it with Remote Connections on a shared network, and keep the allowed-IP list tight if you do.- Geometric reasoning has a ceiling. Models handle primitives, booleans, and patterns well; heavily constrained sketches and complex fillet chains far less so. Even the maintainer is clear-eyed here — in an April 2026 comparison of AI CAD-code accuracy he noted that tools with more training-data coverage, like CadQuery, tend to win on precision. Treat FreeCAD MCP as a fast drafting partner that produces editable parametric starts, not a substitute for a CAD engineer on tolerance-critical parts.
Our take
Use FreeCAD MCP if you already work in FreeCAD and want an agent that drafts, batch-edits, and sanity-checks parts in your real document — the screenshot loop makes it the most self-correcting AI CAD setup available for free. Skip it if you need headless generation, certified-accurate geometry on the first pass, or you’re modeling organic shapes — that’s Blender territory, not parametric CAD.
Troubleshooting
Every entry below traces back to a real issue in the repo’s tracker.
Claude says it can’t connect to FreeCAD
The RPC server isn’t running. FreeCAD must be open and Start RPC Server clicked (or Auto-Start enabled) before the agent’s first tool call. The MCP server only connects to localhost:9875 when a tool fires — so the config can look healthy in your client while FreeCAD sits unreachable.
MCP Addon missing from the workbench list (macOS especially)
Wrong Mod path for your FreeCAD version — 1.1 reads v1-1/Mod, 1.0 reads v1-0/Mod, and copying into the other one fails silently. Check Help → About for your version, re-copy to the matching directory from the table above, restart.
uvx fails to start or install dependencies
Install uv first (curl -LsSf https://astral.sh/uv/install.sh | sh) and make sure it’s on the PATH your MCP client sees — GUI apps on macOS don’t inherit your shell’s PATH. Using an absolute command path (e.g. ~/.local/bin/uvx) in the config sidesteps the whole class of problem.
Blank white screenshots on Windows
A known (now fixed) capture-pipeline issue where GPU/ OpenGL content wasn’t grabbed. Update the addon to the latest version from the repo — addon fixes ship with the repository, not through pip, so updating the freecad-mcp package alone doesn’t pick them up. Re-copy addon/FreeCADMCP after pulling.
Snap-installed FreeCAD: PySide2 / shiboken2 import errors
The snap’s sandboxed Python clashed with newer MCP package versions in a past issue. Two workarounds: install FreeCAD from the official AppImage instead of snap, or pin the addon side to the repo’s current main, which carries the compatibility fix. Note the snap’s Mod path also differs: ~/snap/freecad/common/Mod/.
Alternatives: Blender and OpenSCAD routes
FreeCAD MCP is the parametric-engineering option. Two adjacent tools cover the cases it handles poorly:
Blender — organic modeling and look-dev
If the goal is meshes, materials, animation, or anything sculptural, drive Blender instead. The blender-toolkit skill automates shape creation, materials, and Mixamo retargeting with real-time control; our Claude × Blender connector guide walks the full setup. The trade: Blender gives you no feature history — edits are destructive, where FreeCAD parts stay parametric.
OpenSCAD — code-first and headless
If you want deterministic, reviewable, version-controllable geometry — or generation without a GUI — the OpenSCAD skill is the better shape. OpenSCAD models are programs (CSG code), so the agent writes text, renders previews from multiple angles, validates syntax, and exports STL — no running desktop app required. That also makes it the workaround for FreeCAD MCP’s missing headless mode.
Within the FreeCAD MCP space itself there are other implementations (e.g. bonninr/freecad_mcp), but neka-nat’s is the most established and the one our catalog tracks. For the wider landscape of servers worth installing this year, see our awesome MCP servers roundup and the design category.
FAQ
What is the FreeCAD MCP server?
FreeCAD MCP (neka-nat/freecad-mcp) is an open-source MCP server that lets AI clients like Claude Desktop control a running FreeCAD instance. The agent can create documents, build parametric objects (Part, Draft, PartDesign, FEM types), run arbitrary Python in the FreeCAD console, insert parts from the FreeCAD parts library, and receive a screenshot of the 3D view after each operation so it can verify its own work.
How do I install FreeCAD MCP?
Two parts. First, copy the addon/FreeCADMCP folder from the GitHub repo into your FreeCAD Mod directory, restart FreeCAD, switch to the MCP Addon workbench, and click Start RPC Server. Second, register the MCP server in your AI client with command uvx and args ["freecad-mcp"] — the install card on this page generates the exact config for Claude Desktop, Claude Code, Cursor, and other clients. Both halves must be running.
Why can't Claude connect to FreeCAD?
The most common cause: FreeCAD is open but the RPC server inside it was never started. The MCP server connects to FreeCAD over XML-RPC on port 9875, and that listener only exists after you click Start RPC Server in the MCP Addon workbench (or enable Auto-Start Server). Check, in order: FreeCAD is running, the addon appears in the workbench list, the RPC server is started, and uvx is on your PATH.
How do I reduce token usage with FreeCAD MCP?
Add the --only-text-feedback flag to the server args in your client config. By default every tool call returns a screenshot of the 3D view, and images are expensive in tokens — heavy sessions can burn through limits fast (this was a real GitHub issue before the flag existed). With the flag set, tools return text only, and you call get_view explicitly when you want the model to look at the geometry.
Can FreeCAD MCP export STEP or STL files?
Yes, through the execute_code tool. There is no dedicated export tool yet (an open feature request asks for one), but the agent can run FreeCAD's standard Python API: Part.export([obj], "/path/part.step") for STEP, or Mesh.export / the Mesh workbench for STL. Ask Claude to "export the body as STEP to ~/parts/flange.step" and it writes and runs that code for you.
Does FreeCAD MCP work headless, without the GUI?
No. The addon runs inside the FreeCAD GUI process and the screenshot feedback loop depends on an active 3D view, so you need FreeCAD open on a desktop session. Headless support is an open GitHub issue. If you need server-side, GUI-free CAD generation, a code-first approach like the OpenSCAD skill is the better fit today.
Can FreeCAD MCP run FEM simulations?
Yes, within limits. create_object supports FEM types (Fem::AnalysisPython, constraints, materials, Gmsh meshes), and the run_fem_analysis tool runs the CalculiX solver on an existing analysis and returns summary results — max von Mises stress, max displacement, node count. The repo ships a cantilever beam example. Treat it as a first-pass sanity check, not a replacement for a reviewed simulation workflow.
Sources
- Primary — repository, README, and demo GIFs: github.com/neka-nat/freecad-mcp (MIT)
- Primary — shared Claude conversation for the 2D-drawing-to-part demo: claude.ai/share/7b48fd60…
- Primary — FEM example: examples/cantilever_fem.py
- Community — GitHub issues (token usage, connection failures, macOS workbench, snap/PySide2, Windows screenshots, headless request): github.com/neka-nat/freecad-mcp/issues
- Maintainer — MCP/ROS framing: @neka_nat, April 2025; AI CAD-code accuracy comparison: @neka_nat, April 2026
- Docs — uv/uvx installation: docs.astral.sh/uv/guides/tools; FreeCAD parts library: github.com/FreeCAD/FreeCAD-library
- Internal — canonical entry: /servers/freecad; skills: /skills/blender-toolkit, /skills/openscad
Deep dive
Claude × Blender: the connector guide
ReadComparison
Godot vs Unity vs Blender MCP & skills (2026)
ReadClient
Claude Desktop — MCP client reference
OpenFound an issue?
If something in this guide is out of date — a new tool, a changed install path, a headless mode finally landing — email [email protected] or read more on our about page. We keep these guides current.