FreeCAD RobustBLOCK
The FreeCAD Robust MCP server and MCP Bridge Workbench/Addon
Overview
From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.
[](https://opensource.org/licenses/MIT) [](https://pypi.org/project/freecad-robust-mcp/) [](https://pypi.org/project/freecad-robust-mcp/) [](https://hub.docker.com/r/spkane/freecad-robust-mcp) [](https://spkane.github.io/freecad-addon-robust-mcp-server/)
[](https://github.com/spkane/freecad-addon-robust-mcp-server/actions/workflows/test.yaml) [](https://github.com/spkane/freecad-addon-robust-mcp-server/actions/workflows/docker.yaml) [](https://github.com/spkane/freecad-addon-robust-mcp-server/actions/workflows/pre-commit.yaml) [](https://github.com/spkane/freecad-addon-robust-mcp-server/actions/workflows/codeql.yaml)
An MCP (Model Context Protocol) server that enables integration between AI assistants (Claude, GPT, and other MCP-compatible tools) and FreeCAD, allowing AI-assisted development and debugging of 3D models, macros, and workbenches.
Table of Contents
- FreeCAD Robust MCP Server
- Table of Contents
- Features
- [Installation Requirements / Dependencies](#insta
09d7e57ed23cOBSERVED · 2026-10-06Connect
Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control.
claude mcp add freecad-robust-mcp -- uvx freecad-robust-mcp
{
"mcpServers": {
"freecad-robust-mcp": {
"command": "uvx",
"args": [
"freecad-robust-mcp"
]
}
}
}Exposed tools (152)
66 read · 79 write · 7 destructive. Blast radius: 7 tools can delete or overwrite — an agent that can be talked into calling a tool can be talked into calling this one.
| Tool | Risk | Description |
|---|---|---|
activate_workbench | read | Activate a FreeCAD workbench. |
add_external_geometry | write | Add external geometry reference to a sketch. |
add_sketch_arc | write | Add an arc to a sketch. |
add_sketch_bspline | write | Add a B-spline curve to a sketch. |
add_sketch_circle | write | Add a circle to a sketch. |
add_sketch_constraint | write | Add a constraint to a sketch. |
add_sketch_ellipse | write | Add an ellipse to a sketch. |
add_sketch_line | write | Add a line to a sketch. |
add_sketch_point | write | Add a point to a sketch. |
add_sketch_polygon | write | Add a regular polygon to a sketch. |
add_sketch_rectangle | write | Add a rectangle to a sketch. |
add_sketch_slot | write | Add a slot (obround/stadium shape) to a sketch. |
boolean_operation | read | Perform a boolean operation on two FreeCAD objects. |
chamfer_edges | write | Add chamfer (beveled edges) to an object. |
clear_selection | destructive | Clear the current selection in FreeCAD. |
close_document | read | Close a FreeCAD document. |
common_all | read | Find the common (intersection) of multiple shapes. |
constrain_angle | read | Constrain angle of a line or between two lines. |
constrain_coincident | read | Constrain two points to be coincident (same location). |
constrain_distance | write | Add a distance constraint. |
constrain_distance_x | read | Constrain horizontal distance from origin or between points. |
constrain_distance_y | read | Constrain vertical distance from origin or between points. |
constrain_equal | read | Constrain two elements to have equal size (length or radius). |
constrain_fix | read | Fix (lock) a point or geometry in place. |
constrain_horizontal | read | Constrain a line to be horizontal. |
constrain_parallel | read | Constrain two lines to be parallel. |
constrain_perpendicular | read | Constrain two lines to be perpendicular. |
constrain_radius | read | Constrain the radius of a circle or arc. |
constrain_tangent | read | Constrain two curves to be tangent. |
constrain_vertical | read | Constrain a line to be vertical. |
copy_object | write | Create a copy of an object. |
create_box | write | Create a Part Box primitive. |
create_cone | write | Create a Part Cone primitive. |
create_cylinder | write | Create a Part Cylinder primitive. |
create_datum_line | write | Create a datum line (axis) in a PartDesign body. |
create_datum_plane | write | Create a datum plane in a PartDesign body. |
create_datum_point | write | Create a datum point in a PartDesign body. |
create_document | write | Create a new FreeCAD document. |
create_ellipse | write | Create a Part Ellipse curve. |
create_helix | write | Create a Part Helix curve. |
create_hole | write | Create a Hole feature from a sketch containing point(s). |
create_line | write | Create a Part Line (edge) between two points. |
create_macro | write | Create a new FreeCAD macro. |
create_macro_from_template | write | Create a new macro from a predefined template. |
create_object | write | Create a new FreeCAD object. |
create_partdesign_body | write | Create a new PartDesign Body. |
create_plane | write | Create a Part Plane (flat rectangular face). |
create_prism | write | Create a Part Prism (extruded regular polygon). |
create_regular_polygon | write | Create a Part Regular Polygon (2D wire). |
create_sketch | write | Create a new Sketch attached to a plane or body. |
create_sphere | write | Create a Part Sphere primitive. |
create_torus | write | Create a Part Torus (donut shape) primitive. |
create_wedge | write | Create a Part Wedge primitive. |
delete_macro | destructive | Delete a user macro. |
delete_object | destructive | Delete an object from a FreeCAD document. |
delete_sketch_constraint | destructive | Delete a constraint from a sketch. |
delete_sketch_geometry | destructive | Delete a geometry element from a sketch. |
draft_extrude_shapestring | write | Extrude a ShapeString to create a 3D solid text object. |
draft_feature | write | Add draft angle to faces of an object. |
draft_list_fonts | read | List available font files on the system. |
draft_shapestring | write | Create a ShapeString (3D text geometry) using Draft workbench. |
draft_shapestring_to_face | read | Convert a ShapeString to a Face for direct use with Part operations. |
draft_shapestring_to_sketch | read | Convert a ShapeString to a Sketch for use with PartDesign. |
draft_text_on_surface | write | Create embossed or engraved text on a surface. |
edit_object | write | Edit properties of an existing FreeCAD object. |
execute_python | write | Execute Python code in FreeCAD |
explode_compound | read | Separate a compound into individual shape objects. |
export_3mf | read | Export objects to 3MF format. |
export_iges | read | Export objects to IGES format. |
export_obj | read | Export objects to OBJ format. |
export_step | read | Export objects to STEP format. |
export_stl | read | Export objects to STL format. |
extrude_shape | read | Extrude a wire or face along a direction vector. |
fillet_edges | write | Add fillet (rounded edges) to an object. |
fit_all | read | Fit all objects in the current view. |
fuse_all | read | Fuse (union) multiple shapes into a single solid. |
get_active_document | read | Get the currently active FreeCAD document. |
get_connection_status | read | Get the current FreeCAD connection status. |
get_console_log | read | Get recent console output from FreeCAD. |
get_console_output | read | Get recent FreeCAD console output. |
get_freecad_version | read | Get FreeCAD version and build information. |
get_mcp_server_environment | read | Get environment info about the MCP Server and FreeCAD connection. |
get_screenshot | read | Capture a screenshot of the FreeCAD 3D view. |
get_selection | read | Get the current selection in FreeCAD. |
get_sketch_info | read | Get detailed information about a sketch. |
get_undo_redo_status | read | Get the current undo/redo status. |
groove_sketch | write | Create a Groove (subtractive revolution) from a sketch. |
import_step | write | Import a STEP file into FreeCAD. |
import_stl | write | Import an STL file into FreeCAD. |
insert_part_from_library | write | Insert a part from the parts library into the document. |
inspect_object | read | Get detailed information about a FreeCAD object. |
linear_pattern | write | Create a Linear Pattern from a PartDesign feature. |
list_documents | read | List all open FreeCAD documents. |
list_macros | read | List all available FreeCAD macros. |
list_objects | read | List all objects in a FreeCAD document. |
list_parts_library | read | List available parts from the FreeCAD parts library. |
list_workbenches | read | List all available FreeCAD workbenches. |
loft_sketches | write | Create a Loft (additive) through multiple sketches. |
make_compound | read | Combine multiple shapes into a single compound. |
make_face | write | Create a face from a closed wire. |
make_wire | write | Create a wire (polyline) from a list of points. |
mirror_object | read | Mirror an object across a plane. |
mirrored_feature | write | Create a Mirrored feature from a PartDesign feature. |
offset_3d | write | Create a 3D offset of a shape. |
open_document | read | Open an existing FreeCAD document from file. |
pad_sketch | write | Create a Pad (extrusion) from a sketch. |
part_loft | write | Create a loft (transition shape) between multiple profiles. |
part_sweep | read | Sweep a profile along a spine path. |
pocket_sketch | write | Create a Pocket (cut extrusion) from a sketch. |
polar_pattern | write | Create a Polar (circular) Pattern from a PartDesign feature. |
read_macro | read | Read the contents of a FreeCAD macro. |
recompute | destructive | Force recompute of all objects in a document. |
recompute_document | write | Recompute a FreeCAD document to update all dependent objects. |
redo | read | Redo the last undone operation. |
revolution_sketch | write | Create a Revolution (rotational extrusion) from a sketch. |
revolve_shape | read | Revolve a wire or face around an axis. |
rotate_object | read | Rotate an object around an axis. |
run_macro | write | Run a FreeCAD macro by name. |
safe_execute | write | Execute Python code with automatic validation and rollback on failure. |
save_document | write | Save a FreeCAD document. |
scale_object | read | Scale an object uniformly or non-uniformly. |
section_shape | write | Create a cross-section of a shape at a standard plane. |
set_camera_position | write | Set the camera position and orientation. |
set_display_mode | write | Set the display mode of a FreeCAD object. |
set_object_color | write | Set the color of a FreeCAD object. |
set_object_visibility | write | Set the visibility of a FreeCAD object. |
set_placement | write | Set the placement (position and rotation) of a FreeCAD object. |
set_selection | write | Set the selection in FreeCAD. |
set_view_angle | write | Set the 3D view angle. |
shell_object | write | Create a shell (hollow) version of a solid by removing faces. |
slice_shape | read | Slice a shape with a plane, returning the cross-section. |
spreadsheet_bind_property | read | Bind an object property to a spreadsheet cell using expressions. |
spreadsheet_clear_cell | destructive | Clear a cell in a spreadsheet. |
spreadsheet_create | write | Create a new Spreadsheet object. |
spreadsheet_export_csv | read | Export spreadsheet data to a CSV file. |
spreadsheet_get_aliases | read | Get all aliases defined in a spreadsheet. |
spreadsheet_get_cell | read | Get the value of a cell in a spreadsheet. |
spreadsheet_get_cell_range | read | Get values from a range of cells in a spreadsheet. |
spreadsheet_import_csv | write | Import data from a CSV file into a spreadsheet. |
spreadsheet_set_alias | write | Set an alias for a cell in a spreadsheet. |
spreadsheet_set_cell | write | Set the value of a cell in a spreadsheet. |
subtractive_loft | write | Create a subtractive loft (cut) through multiple sketches. |
subtractive_pipe | write | Create a subtractive pipe (sweep cut) along a spine path. |
sweep_sketch | write | Create a Sweep (additive) along a spine path. |
thickness_feature | write | Create a thickness (shell) feature in PartDesign. |
toggle_construction | read | Toggle construction mode for a sketch geometry. |
undo | read | Undo the last operation. |
undo_if_invalid | read | Check document health and undo the last operation if invalid objects exist. |
validate_document | read | Check the health of all objects in a FreeCAD document. |
validate_object | read | Check the health and validity of a FreeCAD object. |
zoom_in | read | Zoom in the 3D view. |
zoom_out | read | Zoom out the 3D view. |
Trust audit
BLOCKgrade D · trust 65/100 Do not install this without reading the findings. The audit found something that could harm you or your machine.
| Layer | What it checks | Result |
|---|---|---|
| L0 | Provenance & inventory | PASS |
| L1 | Static analysis of the code | FAIL |
| L2 | Instruction surface (what it tells the agent) | PASS |
| L3 | Class-specific surface | WARN |
| L4 | Behavioural (sandbox) | SKIPPED |
What the source does
- Filesystem
- declared (2 observation(s))
- Network
- none-observed
- Shell
- declared (3 observation(s))
- Dependencies
- pinned
- Secrets in source
- none-found
Findings (18)
exec(compiled, exec_globals) # noqa: S102
exec(compiled, exec_globals) # noqa: S102
exec(user_code, exec_globals)
clear_selection, delete_macro, delete_object, delete_sketch_constraint, delete_sketch_geometry, recompute, spreadsheet_clear_cell
streamable-http
.coderabbit.yaml
.codespell-ignore-words.txt
.gitleaks.toml
.markdownlint.yaml
.mise.toml
This document describes the architecture for a Model Context Protocol (MCP) server that enables tight integration between AI assistants (Claude, GPT, and other MCP-compatible tools) and FreeCAD. The s
- Full access to geometry, constraints, and document structure via Python
keychain access, and never expose certificates or passwords to pull-request
curl https://mise.run | sh
curl https://mise.run | sh
curl https://mise.run | sh
curl https://mise.run | sh
curl https://mise.run | sh
Gates applied: no_behavioural_pass.
09d7e57ed23cfull audit observations/trust-audit/mcp-server/spkane__freecad-robust-1.json · Report an issue / request a re-scanAudit history
Every audit this server has had. A grade with a past is a grade somebody is still checking.
| Date | Source | Verdict | Grade | Score | Change |
|---|---|---|---|---|---|
| 2026-10-06 | 09d7e57ed23c | BLOCK | D | 65 | first audit |
Questions
What is the FreeCAD Robust MCP server?
The FreeCAD Robust MCP server and MCP Bridge Workbench/Addon
What tools does FreeCAD Robust expose?
152 in total: 66 read-only, 79 that write, and 7 that can delete or overwrite (clear_selection, delete_macro, delete_object, delete_sketch_constraint, delete_sketch_geometry). Every one is listed on this page with its risk.
Is FreeCAD Robust safe to connect to an agent?
No — not without reading the findings first. The audit graded it D (65/100) and found 3 critical or high issues in the source. Each one is listed on this page with the file and line it is on. Separately from the audit: 7 of its tools can destroy data, so scope the token you give it to what you actually need.
What credentials does FreeCAD Robust need?
No credential environment variables were found in its source, so it appears to need none.
How does FreeCAD Robust run?
It speaks streamable-http, so it runs as a service you connect to over the network. It is published on PyPI as freecad-robust-mcp.
How current is this page?
The grade is for one exact copy of the source (09d7e57ed23c), read on 2026-10-06. The repository is watched and re-audited when it changes.