FreeCAD Tutor MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
You are connected to a live FreeCAD 1.0/1.1+ instance via FreeCAD Tutor MCP.
Workflow rules:
Inspect before acting: use
get_document_graph,get_sketch_diagnostics,get_selection,get_recent_activity, andget_console_outputto observe the student's real model state.Search for specialized tools before scripting: Claude Desktop may defer some tools behind tool search. Before falling back to
execute_script, search for and load matching 1-to-1 tools (partdesign_*,find_edges,find_faces,measure_distance,set_view,save_document/open_document/close_document/export_document,set_property,set_appearance,create_datum_plane,create_varset,add_techdraw_*,export_techdraw_page,explain_freecad_error).Never guess FreeCAD menu or toolbar locations: call
find_ui_commandto get exact live menu paths, shortcuts, and why a button might be greyed out, and usehighlight_ui_elementto put a temporary spotlight on the button, menu, or panel in the live FreeCAD window.Do not mutate the student's active coursework file unless explicitly asked; prefer
create_document(name="Tutor_Demo")for demonstrations, and never discard unsaved changes without consent.All editing tools are wrapped in FreeCAD undo transactions (
Ctrl+Z/undo).
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
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_rpc_statusA | Check connection health, addon protocol version, FreeCAD PID, and dispatch status. |
| list_documentsA | List all open FreeCAD documents ( |
| get_document_graphB | Inspect the feature tree, dependencies, error messages, UI edit state, and TNP warnings. Args: doc_name: Document name; empty string uses the active document. include_properties: Keep False (default) for a compact graph; set True for all properties. |
| inspect_objectB | Dump all properties, validity state, error description, and shape metadata for one object. |
| analyze_shapeA | Inspect face/edge topology, bounding box, volume, and validity (optional OCC BOPCheck). Args:
name: Object name in the document.
deep_check: Set True to run OCC's slower deep |
| find_edgesC | Find EdgeN names on a shape matching direction ('X'/'Y'/'Z'/'+Z'/'-Z'), length, or location. |
| find_facesC | Find FaceN names on a shape matching normal ('+Z', '-Z', 'X'), area, surface type, or point. |
| measure_distanceB | Measure minimum 3D distance and delta vector between two objects or Face/Edge/Vertex refs. |
| get_sketch_diagnosticsB | Inspect Sketch DoF, OpenVertices, missing/conflicting/redundant constraints, and tutor hints. |
| tracked_recomputeB | Recompute the document and report new, resolved, and persistent object errors. |
| get_console_outputA | Read recent lines from FreeCAD's Report view / console log (1-1000 lines). |
| get_recent_activityB | Read recent student/model events recorded by the FreeCAD observer (edits, undos, dialogs). |
| explain_freecad_errorA | Translate a cryptic FreeCAD/OpenCASCADE error message into beginner causes and fixes. |
| find_ui_commandA | Search live FreeCAD commands for menu paths, toolbars, shortcuts, and why a button is greyed out. Args: query: Keyword such as 'Pad', 'Fillet', 'Sketch', or 'TechDraw'. workbench_filter: Optional command prefix filter (e.g. 'PartDesign', 'Sketcher'). limit: Max results (1-50). |
| highlight_ui_elementA | Put a temporary, click-through visual spotlight on a FreeCAD button, menu, panel, or workbench selector. Args: target: Command name (e.g. 'PartDesign_Pad'), button label ('Pad'), or panel name ('Model', 'Tasks', 'Report view', 'Workbench'). label: Optional short callout text shown next to the highlight frame. duration_s: Auto-dismiss time in seconds (1.0-20.0). clear: Set True to immediately remove any active highlight. |
| list_workbenchesA | List all FreeCAD workbenches and show which one is currently active. |
| activate_workbenchB | Switch FreeCAD's active workbench (e.g., 'PartDesignWorkbench', 'PartWorkbench', 'TechDrawWorkbench'). |
| get_selectionA | Get objects and sub-elements (Face1, Edge2, etc.) currently selected by the user in FreeCAD. |
| set_selectionC | Highlight/select objects or sub-elements (e.g. ['Pad', 'Pad.Face1']) in FreeCAD's viewport. |
| set_viewA | Orient and zoom the 3D camera (Isometric, Front, Top, Right, Back/Rear, Left, Bottom) without screenshot. |
| get_viewA | Capture the 3D viewport ( Args: view_name: 'Current', 'Isometric', 'Front', 'Top', 'Right', 'Back', 'Left', 'Bottom', 'Dimetric', or 'Trimetric'. width: Optional explicit image width (auto-scaled <=1024px viewport / <=1280px window). height: Optional explicit image height. focus_object: Optional object name to zoom/fit before capturing. capture_scope: 'viewport' for clean 3D render, or 'window' to include Task panels, Combo View, and dialogs. |
| create_documentB | Create a new FreeCAD document (defaults to a safe 'Tutor_Demo' scratch file for demonstrations). |
| save_documentB | Save an open document to its existing |
| open_documentA | Open a |
| close_documentA | Close a document safely (refuses if modified unless |
| export_documentB | Export Bodies or solids to |
| undoB | Undo the most recent FreeCAD transaction. |
| redoB | Redo the most recently undone FreeCAD transaction. |
| get_undo_redo_statusB | Check available undo/redo steps and transaction names. |
| create_partdesign_bodyC | Create a PartDesign::Body container (undoable). |
| create_sketchB | Create a Sketcher::SketchObject on an Origin plane or face (undoable). |
| edit_sketchC | Add/edit/delete Sketch geometry & constraints with automatic Coincident/H/V constraining (undoable). |
| pad_sketchB | Extrude a Sketch inside a PartDesign Body using Pad (undoable; rolls back if invalid). |
| pocket_sketchC | Cut material from a PartDesign Body using Pocket (undoable; rolls back if invalid). |
| partdesign_thicknessB | Hollow out a PartDesign solid by opening selected faces and setting wall thickness (undoable). |
| partdesign_holeB | Drill parametric simple, counterbore, countersink, or threaded holes from a Sketch (undoable). |
| partdesign_revolutionB | Revolve a Sketch around an axis to add solid material in PartDesign (undoable). |
| partdesign_grooveB | Revolve a Sketch around an axis to subtract/cut material in PartDesign (undoable). |
| partdesign_loftC | Loft between two or more Sketches (AdditiveLoft or SubtractiveLoft) (undoable). |
| partdesign_sweepB | Sweep a profile Sketch along a spine path (AdditivePipe or SubtractivePipe) (undoable). |
| partdesign_mirroredC | Mirror PartDesign feature(s) across a plane (PartDesign::Mirrored) (undoable). |
| partdesign_linear_patternC | Repeat PartDesign feature(s) along a line (PartDesign::LinearPattern) (undoable). |
| partdesign_polar_patternC | Repeat PartDesign feature(s) around an axis (PartDesign::PolarPattern) (undoable). |
| partdesign_draftC | Taper selected solid faces by a draft angle (PartDesign::Draft) (undoable). |
| create_datum_planeC | Create a PartDesign::Plane Datum Plane inside a Body (TNP-safe sketch plane) (undoable). |
| create_varsetB | Create a FreeCAD 1.0/1.1 App::VarSet parametric variable table (undoable). |
| set_propertyB | Update a Data-tab property (Pad.Length, Fillet.Radius, VarSet fields) or bind an expression (undoable). |
| set_appearanceB | Set object Visibility, Transparency (0-100), or ShapeColor [r, g, b] in the View tab (undoable). |
| create_part_primitiveC | Create a Part CSG primitive ('Box', 'Cylinder', 'Sphere', or 'Cone') (undoable). |
| boolean_operationB | Run a Part CSG Boolean ('Fuse', 'Cut', or 'Common') between two objects (undoable). |
| fillet_edgesB | Round selected edges (e.g. ['Edge1', 'Edge2']) on a feature or shape (undoable). |
| chamfer_edgesC | Bevel selected edges (e.g. ['Edge1']) on a feature or shape (undoable). |
| create_techdraw_pageB | Create a TechDraw 2D drawing sheet with an SVG template (undoable). |
| add_techdraw_viewB | Add an orthographic view or multi-view Projection Group to a TechDraw page (undoable). |
| add_techdraw_dimensionB | Add a 2D TechDraw dimension (Distance, Radius, Diameter, Angle) referencing view edges/vertices (undoable). |
| add_techdraw_sectionB | Add a TechDraw cross-section view (DrawViewSection) cutting through a BaseView (undoable). |
| export_techdraw_pageC | Export a TechDraw drawing page to PDF or SVG. |
| execute_scriptA | Execute Python inside FreeCAD's main thread (escape hatch; undoable when wrap_transaction=True). |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| tutor_mode | Activate FreeCAD 1.0/1.1+ CAD Tutor mode for coursework. |
| diagnose_broken_model | Run a full diagnostic sweep on the active FreeCAD document. |
| compare_workflows | Demonstrate PartDesign vs. Part CSG side-by-side in a safe Tutor_Demo doc. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| guide_partdesign_vs_part | Compare PartDesign (feature-based single solid) vs. Part (CSG booleans). |
| guide_sketcher_constraints | Guide to Sketcher constraints, Degrees of Freedom (DOF), and conflicts. |
| guide_tnp_best_practices | Guide to avoiding the Topological Naming Problem (TNP) in FreeCAD. |
| guide_techdraw_basics | Guide to creating 2D engineering drawings in the TechDraw workbench. |
TDQS
Scored across 58 tools
Most tools target clearly distinct CAD actions or resources, especially across document, sketch, PartDesign, TechDraw, and UI-guidance domains. There is some potential confusion among diagnostic tools like get_document_graph, inspect_object, analyze_shape, and get_sketch_diagnostics, but their descriptions define different scopes.
The set is predominantly snake_case and mostly follows a verb_noun pattern such as create_sketch, list_documents, and export_document. Deviations like partdesign_thickness, boolean_operation, and tracked_recompute are readable but keep it from being fully uniform.
At 58 tools, the surface is far beyond the typical 3-15 range and almost certainly overwhelms an agent choosing among many partially adjacent operations. Even for a complex CAD application, the tool set is excessively large and would benefit from consolidation or higher-level composite tools.
Coverage is broad: document lifecycle, sketching, PartDesign features, Part primitives/booleans, TechDraw, exports, diagnostics, undo/redo, and UI tutoring are all represented. Notable gaps remain, such as an explicit delete-object/delete-feature tool and broader assembly or datum-line/point coverage.