FreeCAD MCP for Codex
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| FREECAD_MODE | No | Connection mode for FreeCAD. Defaults to 'xmlrpc'. | xmlrpc |
| FREECAD_XMLRPC_PORT | No | Port for the FreeCAD XML-RPC bridge. Defaults to 9875. | 9875 |
| FREECAD_ALLOW_EXECUTE_PYTHON | No | Set to 'true' to enable the execute_freecad_python escape hatch. Disabled by default. | false |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| freecad_healthA | Return structured bridge, FreeCAD version, and GUI health. |
| get_operation_statusA | Poll a timed-out FreeCAD operation until it is definitively complete. |
| list_documentsA | List open FreeCAD documents. |
| open_documentA | Open an FCStd document and return its identity. |
| create_documentC | Create an empty FreeCAD document. |
| save_documentC | Save a document to its existing path. |
| save_document_asC | Save a document to a new FCStd path. |
| close_documentC | Close a FreeCAD document without saving it automatically. |
| list_objectsC | List object names, labels, types, and visibility. |
| inspect_objectB | Inspect an object's properties, links, and shape summary. |
| inspect_shapeB | Return shape type, validity, topology counts, mass properties, and bounds. |
| get_bounding_boxB | Return an object's axis-aligned bounding box in document coordinates. |
| measure_distanceA | Measure Euclidean distance between two XYZ points. |
| check_collisionB | Check whether two shapes overlap and report intersection volume. |
| check_geometryC | Validate an object's BRep and return structured geometry diagnostics. |
| capture_viewB | Capture a PNG of the active FreeCAD 3D view. |
| create_boxC | Create and validate a Part box. |
| create_cylinderC | Create and validate a Part cylinder. |
| create_shellC | Create a rectangular open-top shell from [length,width,height]. |
| set_placementB | Set an object's XYZ placement and optional yaw/pitch/roll Euler angles. |
| boolean_cutB | Subtract object_b from object_a in one validated transaction. |
| boolean_fuseC | Fuse two shapes in one validated transaction. |
| boolean_commonA | Intersect two shapes in one validated transaction. |
| fillet_edgesC | Fillet selected edges, or all edges when edge_indices is omitted. |
| chamfer_edgesB | Chamfer selected edges, or all edges when edge_indices is omitted. |
| split_by_planeC | Split a shape by an axis-aligned plane and return two new objects. |
| create_screw_bossC | Create a hollow cylindrical screw boss. |
| create_heatset_insert_bossB | Create a hollow boss sized for a heat-set insert. |
| create_fan_mountB | Create a square fan mounting plate with four clearance holes. |
| create_vent_patternB | Create a vent plate with a regular array of through-slots. |
| split_for_print_bedC | Split a long object into print-bed-sized axis-aligned pieces. |
| import_stepC | Import a STEP file into the target document. |
| export_stepC | Export selected or all shaped objects to STEP. |
| import_stlB | Import an STL mesh into the target document. |
| export_stlC | Export selected or all shaped objects to STL. |
| execute_freecad_pythonC | Execute FreeCAD Python only when FREECAD_ALLOW_EXECUTE_PYTHON=true. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 36 tools
Most tools target distinct resources and actions, so an agent can usually tell them apart. A few pairs overlap in scope — inspect_shape and get_bounding_box both return bounds, and split_by_plane and split_for_print_bed both split shapes — but the descriptions make the intended use reasonably clear.
The set is predominantly lower_snake_case with an action+object pattern like list_documents, create_box, and export_step. It is not perfect because freecad_health is a noun-style outlier and the boolean_* tools use an adjective prefix instead of a clear verb.
At 36 tools this is well past the 25+ threshold for an over-large set, and several niche print-preparation helpers such as screw boss, heatset boss, fan mount, vent pattern, and print-bed splitter broaden the surface beyond a tight CAD API. The count is not an extreme 50+ disaster, but it should be trimmed or consolidated for a more focused server.
The set covers document lifecycle, object inspection, primitive modeling, boolean operations, filleting/chamfering, splitting, and STEP/STL import/export, so the primary solid-modeling workflow is usable. Missing first-class operations like delete/rename/copy objects and any sketch/extrude/parametric capabilities leave notable gaps for general FreeCAD use, partially papered over by execute_freecad_python.