cad_mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| FREECADCMD | No | Absolute path to the headless FreeCAD binary (freecadcmd). Defaults to freecadcmd on PATH. | freecadcmd |
| FREECAD_MCP_LIBRARY | No | Local folder of STEP files used by list_library and insert_library_part. | ./library |
| FREECAD_MCP_TIMEOUT | No | Seconds allowed per FreeCAD call. | 240 |
| FREECAD_MCP_LAUNCHER | No | Command prefix for each FreeCAD subprocess, e.g. 'systemd-run --user --scope -p MemoryMax=8G' to cap memory on a shared machine. | |
| FREECAD_MCP_WORKSPACE | No | Where documents, renders and exports are written. Default ./workspace inside the repo. | ./workspace |
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 |
|---|---|
| new_documentA | Create an empty FreeCAD document |
| list_documentsA | List all documents in the workspace with size and modification time. |
| document_infoB | Summary of a document: file size, object names, overall bounding box, undo depth and the last 5 modifying operations. |
| undoA | Undo the last |
| list_historyC | Journal of modifying operations applied to |
| object_historyB | All journal entries whose arguments mention object |
| list_objectsA | List every solid/shape object in |
| add_primitiveA | Add a primitive solid. |
| extrude_polygonA | Extrude a closed 2D polygon (list of [a,b] points, no need to repeat the first) by |
| booleanA | Boolean combine objects. cut: base minus all |
| transformA | Rotate then translate an object (mm, degrees). Rotation is about |
| filletA | Round edges of a solid with |
| chamferB | Bevel edges of a solid by |
| delete_objectC | Delete one object from the document. |
| set_propertiesB | Set metadata on an object. These feed mass_properties, run_fem, bom and the renders. material is one of aluminium_6061, steel, stainless_304, pa12, pla, pom (see the freecad://materials resource). color is [r,g,b] 0..1 (defaults to the material's colour). quantity is used by the BOM. |
| list_facesA | List faces of an object with 1-based index, surface type, area, centre, normal (planes) or radius/axis
(cylinders). Indices are what run_fem and fillet need; they change after any geometry edit, so list again.
|
| list_edgesA | List edges with 1-based index, curve type, length, midpoint, direction (lines) or radius (circles).
|
| import_stepC | Import a STEP file (absolute path) as a new object |
| exportA | Export objects (default all solids) to workspace/exports// as STEP, STL, OBJ, 3MF or a FCStd copy. Returns the absolute path. For DXF (laser cutting) use export_dxf. |
| mass_propertiesA | Volume, mass (g), centre of mass (mm) per object and for the set, plus the combined inertia tensor (g*mm2, about the
combined centre of mass, world axes). Density comes from each object's material (set_properties) unless |
| check_interferenceA | Pairwise interference test: for every pair of solids whose bounding boxes touch, compute the volume of their
intersection. Pairs above |
| run_femA | Linear-static FEM (Gmsh 2nd-order tetrahedra + CalculiX) on ONE solid. Returns max von Mises (MPa), max displacement
(mm), yield safety factor, mesh size, and a colour plot of von Mises (returned as an image and saved as PNG).
|
| mate_facesA | Placement-based assembly joint: move object |
| mate_coaxialA | Make a cylindrical face of |
| add_fastenerA | Generate a parametric ISO-style fastener (steel, with part number and description set for the BOM): shcs = ISO 4762 socket
head cap screw, hex_bolt = ISO 4017, hex_nut = ISO 4032, washer = ISO 7089. |
| list_libraryA | List STEP files (.step/.stp) in the local parts library folder (env FREECAD_MCP_LIBRARY, default ./library), optionally filtered by a case-insensitive substring. Use the returned relative path with insert_library_part. |
| insert_library_partB | Insert a STEP file from the parts library (see list_library) as object |
| check_clearanceA | Minimum distance between every pair of solids (exact), returning the pairs closer than |
| export_dxfA | Export a 2D DXF outline for laser/waterjet cutting. Either |
| create_sketchA | Create a 2D sketch (FreeCAD Sketcher with a real constraint solver). |
| padA | Extrude the closed loops of a sketch by |
| pocketA | Cut the sketch profile out of solid |
| revolveA | Revolve the sketch's closed profile about a world-space axis (point + direction) by |
| loftA | Loft a solid through two or more closed sketch profiles in order (e.g. sketches on parallel planes with different
|
| sweepA | Sweep a closed profile sketch along a path (a sketch of connected edges, or a 3D polyline |
| holeA | Drill a hole into solid |
| shellA | Hollow out a solid leaving walls of |
| mirrorA | Mirror an object across a world-aligned plane (XY mirrors Z, XZ mirrors Y, YZ mirrors X) at |
| linear_patternA | Repeat an object |
| polar_patternA | Rotate copies of an object about an axis through |
| make_drawingA | Make a third-angle engineering drawing (front, top, right, isometric) with hidden-line removal via TechDraw's
projection, overall dimensions on each orthographic view, diameter callouts for round holes seen face-on, and a title block
(title, material, mass, scale, date). Writes SVG, PDF and PNG into workspace/drawings// and returns the paths plus the
PNG as an image. |
| bomB | Bill of materials from object metadata (set_properties: part_no, description, material, supplier, quantity). Identical part_no+material+description lines are merged and quantities summed. Returns the rows and writes CSV and Markdown under workspace/bom//. Mass is volume x material density. |
| render_viewA | Render the document (or the listed objects) to a PNG you can look at. views: iso, front (looking along +Y), back,
top, bottom, right, left, or grid (iso+front+top+right in one image). Objects are coloured by their color/material.
|
| section_viewA | Cut the model with the plane axis=offset (e.g. z=10), discard the half on the |
| run_scriptA | Escape hatch: run arbitrary FreeCAD Python in the worker on |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| design_and_validate_bracket | A PROMPT is a reusable instruction template the user selects in the client (e.g. as a slash command). |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| documents_resource | Workspace documents (JSON list). A RESOURCE is read-only context the client can attach, unlike a tool it has no side effects. |
| materials_resource | Built-in materials with density (kg/m3), Young's modulus (MPa), Poisson ratio and yield strength (MPa). |
TDQS
Scored across 45 tools
The tools mostly target clearly distinct CAD actions and resources, with detailed descriptions clarifying boundaries. Minor overlaps exist between export/export_dxf, import_step/insert_library_part, list_history/object_history, and check_interference/check_clearance, but they are semantically separable.
All names use snake_case consistently and many follow a verb_noun pattern such as list_objects, create_sketch, and check_clearance. A few core CAD operations are noun-only or bare verbs (fillet, pad, boolean, export), but the convention remains readable and predictable.
45 tools is a large surface for a single MCP server, well above the typical 3-15 range and into the 25+ category that risks overwhelming selection. While the CAD domain is broad, many operations could be grouped or exposed more selectively.
The surface covers document management, modeling, assembly mating, measurement, FEM, drawings, BOM, rendering, and export, giving strong lifecycle coverage. Minor gaps include direct STL/OBJ import and sketch editing, though run_script provides an escape hatch.