Atlas / MCP servers / spkane / FreeCAD Robust

FreeCAD RobustBLOCK

mcp/spkane/freecad-robust-1

The FreeCAD Robust MCP server and MCP Bridge Workbench/Addon

Verdict
BLOCK
Grade
D
Trust score
65 /100
Exposed tools
152 66r · 79w · 7d
Transport
streamable-http
License
MIT
Stars
247
01

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
Read from source at commit 09d7e57ed23cOBSERVED · 2026-10-06
02

Connect

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-code
claude mcp add freecad-robust-mcp -- uvx freecad-robust-mcp
claude-desktop
{
  "mcpServers": {
    "freecad-robust-mcp": {
      "command": "uvx",
      "args": [
        "freecad-robust-mcp"
      ]
    }
  }
}
03

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.

ToolRiskDescription
activate_workbenchreadActivate a FreeCAD workbench.
add_external_geometrywriteAdd external geometry reference to a sketch.
add_sketch_arcwriteAdd an arc to a sketch.
add_sketch_bsplinewriteAdd a B-spline curve to a sketch.
add_sketch_circlewriteAdd a circle to a sketch.
add_sketch_constraintwriteAdd a constraint to a sketch.
add_sketch_ellipsewriteAdd an ellipse to a sketch.
add_sketch_linewriteAdd a line to a sketch.
add_sketch_pointwriteAdd a point to a sketch.
add_sketch_polygonwriteAdd a regular polygon to a sketch.
add_sketch_rectanglewriteAdd a rectangle to a sketch.
add_sketch_slotwriteAdd a slot (obround/stadium shape) to a sketch.
boolean_operationreadPerform a boolean operation on two FreeCAD objects.
chamfer_edgeswriteAdd chamfer (beveled edges) to an object.
clear_selectiondestructiveClear the current selection in FreeCAD.
close_documentreadClose a FreeCAD document.
common_allreadFind the common (intersection) of multiple shapes.
constrain_anglereadConstrain angle of a line or between two lines.
constrain_coincidentreadConstrain two points to be coincident (same location).
constrain_distancewriteAdd a distance constraint.
constrain_distance_xreadConstrain horizontal distance from origin or between points.
constrain_distance_yreadConstrain vertical distance from origin or between points.
constrain_equalreadConstrain two elements to have equal size (length or radius).
constrain_fixreadFix (lock) a point or geometry in place.
constrain_horizontalreadConstrain a line to be horizontal.
constrain_parallelreadConstrain two lines to be parallel.
constrain_perpendicularreadConstrain two lines to be perpendicular.
constrain_radiusreadConstrain the radius of a circle or arc.
constrain_tangentreadConstrain two curves to be tangent.
constrain_verticalreadConstrain a line to be vertical.
copy_objectwriteCreate a copy of an object.
create_boxwriteCreate a Part Box primitive.
create_conewriteCreate a Part Cone primitive.
create_cylinderwriteCreate a Part Cylinder primitive.
create_datum_linewriteCreate a datum line (axis) in a PartDesign body.
create_datum_planewriteCreate a datum plane in a PartDesign body.
create_datum_pointwriteCreate a datum point in a PartDesign body.
create_documentwriteCreate a new FreeCAD document.
create_ellipsewriteCreate a Part Ellipse curve.
create_helixwriteCreate a Part Helix curve.
create_holewriteCreate a Hole feature from a sketch containing point(s).
create_linewriteCreate a Part Line (edge) between two points.
create_macrowriteCreate a new FreeCAD macro.
create_macro_from_templatewriteCreate a new macro from a predefined template.
create_objectwriteCreate a new FreeCAD object.
create_partdesign_bodywriteCreate a new PartDesign Body.
create_planewriteCreate a Part Plane (flat rectangular face).
create_prismwriteCreate a Part Prism (extruded regular polygon).
create_regular_polygonwriteCreate a Part Regular Polygon (2D wire).
create_sketchwriteCreate a new Sketch attached to a plane or body.
create_spherewriteCreate a Part Sphere primitive.
create_toruswriteCreate a Part Torus (donut shape) primitive.
create_wedgewriteCreate a Part Wedge primitive.
delete_macrodestructiveDelete a user macro.
delete_objectdestructiveDelete an object from a FreeCAD document.
delete_sketch_constraintdestructiveDelete a constraint from a sketch.
delete_sketch_geometrydestructiveDelete a geometry element from a sketch.
draft_extrude_shapestringwriteExtrude a ShapeString to create a 3D solid text object.
draft_featurewriteAdd draft angle to faces of an object.
draft_list_fontsreadList available font files on the system.
draft_shapestringwriteCreate a ShapeString (3D text geometry) using Draft workbench.
draft_shapestring_to_facereadConvert a ShapeString to a Face for direct use with Part operations.
draft_shapestring_to_sketchreadConvert a ShapeString to a Sketch for use with PartDesign.
draft_text_on_surfacewriteCreate embossed or engraved text on a surface.
edit_objectwriteEdit properties of an existing FreeCAD object.
execute_pythonwriteExecute Python code in FreeCAD
explode_compoundreadSeparate a compound into individual shape objects.
export_3mfreadExport objects to 3MF format.
export_igesreadExport objects to IGES format.
export_objreadExport objects to OBJ format.
export_stepreadExport objects to STEP format.
export_stlreadExport objects to STL format.
extrude_shapereadExtrude a wire or face along a direction vector.
fillet_edgeswriteAdd fillet (rounded edges) to an object.
fit_allreadFit all objects in the current view.
fuse_allreadFuse (union) multiple shapes into a single solid.
get_active_documentreadGet the currently active FreeCAD document.
get_connection_statusreadGet the current FreeCAD connection status.
get_console_logreadGet recent console output from FreeCAD.
get_console_outputreadGet recent FreeCAD console output.
get_freecad_versionreadGet FreeCAD version and build information.
get_mcp_server_environmentreadGet environment info about the MCP Server and FreeCAD connection.
get_screenshotreadCapture a screenshot of the FreeCAD 3D view.
get_selectionreadGet the current selection in FreeCAD.
get_sketch_inforeadGet detailed information about a sketch.
get_undo_redo_statusreadGet the current undo/redo status.
groove_sketchwriteCreate a Groove (subtractive revolution) from a sketch.
import_stepwriteImport a STEP file into FreeCAD.
import_stlwriteImport an STL file into FreeCAD.
insert_part_from_librarywriteInsert a part from the parts library into the document.
inspect_objectreadGet detailed information about a FreeCAD object.
linear_patternwriteCreate a Linear Pattern from a PartDesign feature.
list_documentsreadList all open FreeCAD documents.
list_macrosreadList all available FreeCAD macros.
list_objectsreadList all objects in a FreeCAD document.
list_parts_libraryreadList available parts from the FreeCAD parts library.
list_workbenchesreadList all available FreeCAD workbenches.
loft_sketcheswriteCreate a Loft (additive) through multiple sketches.
make_compoundreadCombine multiple shapes into a single compound.
make_facewriteCreate a face from a closed wire.
make_wirewriteCreate a wire (polyline) from a list of points.
mirror_objectreadMirror an object across a plane.
mirrored_featurewriteCreate a Mirrored feature from a PartDesign feature.
offset_3dwriteCreate a 3D offset of a shape.
open_documentreadOpen an existing FreeCAD document from file.
pad_sketchwriteCreate a Pad (extrusion) from a sketch.
part_loftwriteCreate a loft (transition shape) between multiple profiles.
part_sweepreadSweep a profile along a spine path.
pocket_sketchwriteCreate a Pocket (cut extrusion) from a sketch.
polar_patternwriteCreate a Polar (circular) Pattern from a PartDesign feature.
read_macroreadRead the contents of a FreeCAD macro.
recomputedestructiveForce recompute of all objects in a document.
recompute_documentwriteRecompute a FreeCAD document to update all dependent objects.
redoreadRedo the last undone operation.
revolution_sketchwriteCreate a Revolution (rotational extrusion) from a sketch.
revolve_shapereadRevolve a wire or face around an axis.
rotate_objectreadRotate an object around an axis.
run_macrowriteRun a FreeCAD macro by name.
safe_executewriteExecute Python code with automatic validation and rollback on failure.
save_documentwriteSave a FreeCAD document.
scale_objectreadScale an object uniformly or non-uniformly.
section_shapewriteCreate a cross-section of a shape at a standard plane.
set_camera_positionwriteSet the camera position and orientation.
set_display_modewriteSet the display mode of a FreeCAD object.
set_object_colorwriteSet the color of a FreeCAD object.
set_object_visibilitywriteSet the visibility of a FreeCAD object.
set_placementwriteSet the placement (position and rotation) of a FreeCAD object.
set_selectionwriteSet the selection in FreeCAD.
set_view_anglewriteSet the 3D view angle.
shell_objectwriteCreate a shell (hollow) version of a solid by removing faces.
slice_shapereadSlice a shape with a plane, returning the cross-section.
spreadsheet_bind_propertyreadBind an object property to a spreadsheet cell using expressions.
spreadsheet_clear_celldestructiveClear a cell in a spreadsheet.
spreadsheet_createwriteCreate a new Spreadsheet object.
spreadsheet_export_csvreadExport spreadsheet data to a CSV file.
spreadsheet_get_aliasesreadGet all aliases defined in a spreadsheet.
spreadsheet_get_cellreadGet the value of a cell in a spreadsheet.
spreadsheet_get_cell_rangereadGet values from a range of cells in a spreadsheet.
spreadsheet_import_csvwriteImport data from a CSV file into a spreadsheet.
spreadsheet_set_aliaswriteSet an alias for a cell in a spreadsheet.
spreadsheet_set_cellwriteSet the value of a cell in a spreadsheet.
subtractive_loftwriteCreate a subtractive loft (cut) through multiple sketches.
subtractive_pipewriteCreate a subtractive pipe (sweep cut) along a spine path.
sweep_sketchwriteCreate a Sweep (additive) along a spine path.
thickness_featurewriteCreate a thickness (shell) feature in PartDesign.
toggle_constructionreadToggle construction mode for a sketch geometry.
undoreadUndo the last operation.
undo_if_invalidreadCheck document health and undo the last operation if invalid objects exist.
validate_documentreadCheck the health of all objects in a FreeCAD document.
validate_objectreadCheck the health and validity of a FreeCAD object.
zoom_inreadZoom in the 3D view.
zoom_outreadZoom out the 3D view.
04

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.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codeFAIL
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfaceWARN
L4Behavioural (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)

HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
freecad/RobustMCPBridge/freecad_mcp_bridge/server.py:786
exec(compiled, exec_globals)  # noqa: S102
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
src/freecad_mcp/bridge/embedded.py:165
exec(compiled, exec_globals)  # noqa: S102
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
HIGHCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
src/freecad_mcp/tools/validation.py:558
exec(user_code, exec_globals)
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
MEDIUMFilesystem / path · mcp.destructive_tools · CWE-22, CWE-59
clear_selection, delete_macro, delete_object, delete_sketch_constraint, delete_sketch_geometry, recompute, spreadsheet_clear_cell
Why it matters. 7 tool(s) can delete or overwrite
Fix. prefer a read-only mode or scoped tokens; the page states the blast radius
MEDIUMAuth / authz · mcp.remote_no_auth · CWE-287, CWE-862
streamable-http
Why it matters. a network transport with no auth environment variable found
Fix. require a token
LOWInventory / provenance · inv.hidden_file · CWE-1104
.coderabbit.yaml
.coderabbit.yaml
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
.codespell-ignore-words.txt
.codespell-ignore-words.txt
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
.gitleaks.toml
.gitleaks.toml
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
.markdownlint.yaml
.markdownlint.yaml
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
LOWInventory / provenance · inv.hidden_file · CWE-1104
.mise.toml
.mise.toml
Why it matters. hidden member outside the usual dotfiles
Fix. review its purpose
INFOPrompt injection · prompt.authority_framing · CWE-94, CWE-1427
docs/development/architecture-detailed.md:5
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
INFOPrompt injection · prompt.authority_framing · CWE-94, CWE-1427
docs/development/architecture-detailed.md:139
- Full access to geometry, constraints, and document structure via Python
INFOPrompt injection · prompt.credential_read · CWE-94, CWE-1427
PLANNING.md:607
keychain access, and never expose certificates or passwords to pull-request
Why it matters. asks the agent to read credentials
INFOSupply chain · prompt.pipe_to_shell · CWE-829, CWE-1357
AGENTS.md:57
curl https://mise.run | sh
INFOSupply chain · prompt.pipe_to_shell · CWE-829, CWE-1357
README.md:130
curl https://mise.run | sh
INFOSupply chain · prompt.pipe_to_shell · CWE-829, CWE-1357
README.md:509
curl https://mise.run | sh
INFOSupply chain · prompt.pipe_to_shell · CWE-829, CWE-1357
docs/development/contributing.md:22
curl https://mise.run | sh
INFOSupply chain · prompt.pipe_to_shell · CWE-829, CWE-1357
docs/getting-started/installation.md:32
curl https://mise.run | sh

Gates applied: no_behavioural_pass.

Audited 2026-10-06 · audit v0.4.1 · source sha 09d7e57ed23cfull audit observations/trust-audit/mcp-server/spkane__freecad-robust-1.json · Report an issue / request a re-scan
05

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-0609d7e57ed23cBLOCKD65first audit
06

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.

Advertisement