Unified FreeCAD skill for 3D modeling via RPC. Covers document management, object CRUD, Python code execution, view capture, parts library operations, YAML layout pre-processing, and safe move workflows.
localhost:9875).base (where freecad-cli-tools is installed).freecad-exec-code only as a temporary workaround.Read the matching guide with the Read tool. Always prefer the highest-level workflow; use lower-level commands only as sub-steps.
| Intent | Guide |
|---|---|
| Document / object CRUD, parts library |
guides/crud-reference.md| Run arbitrary Python in FreeCAD | guides/execute-code.md |
| Capture screenshots / visual review | guides/get-view.md |
| Batch-create objects from YAML | guides/load-yaml-data.md |
| Create assembly from YAML | guides/create-assembly.md |
| Move a part (default entry point) | guides/safe-move-workflow.md |
| Document-only collision analysis (no YAML) | guides/check-collision.md |
create-doc → create-obj → get-viewsafe-move-workflow.md (handles YAML and document branches)create-assembly.md (only when user explicitly requests)All RPC commands accept --host <host> (default localhost) and --port <port> (default 9875). When FreeCAD runs inside WSL, pass these explicitly if Windows localhost forwarding is unstable.
freecad-yaml-safe-move is the preferred YAML-first move command; use it to overwrite the source YAML and sync/save the current CAD document instead of creating sibling output files.placement.mount_face identifies the component's own mounting face; placement.envelope_face identifies the envelope face the component is installed onto.safe-move-workflow.md as the default entry point.freecad-check-collision and freecad-move-obj are document-only fallbacks — use only when no YAML source exists.--install-face <0..11> rotates a component onto a target envelope face. Faces 0–5 are internal (inside the envelope); faces 6–11 are external (outside the envelope, requires envelope.outer_size in YAML).--spin <degrees> (multiples of 90) rotates in-place on the same face.freecad-create-assembly is for explicit rebuild only — do not use it as the default after a move.FCStd document in place.doc.recompute() after geometry changes.getGlobalPlacement() as the source of truth. Local Shape and BoundBox can be stale when a parent container moves.App::Part, etc.), analyze descendant solids in global coordinates.Path.home() / 'freecad_data' for file I/O inside FreeCAD.--file over inline code for complex scripts.freecad-exec-code workflow."success": false: Display the returned error details to the user.