Minimal headless parametric-CAD server (build123d + REST + MCP)
Partsmith demonstrates solid tool design with consistent naming (verb_noun pattern), comprehensive descriptions (avg 180 chars), and well-structured JSON schemas. All 18 tools have explicit input schemas with typed parameters and descriptions. However, output schemas are not documented in the visible code, and error handling lacks recovery guidance. Tool composition is excellent, each tool has a single responsibility and chains naturally (e.g., create_model → render_3d → export_model). Security is well-handled with no exposed credentials and path validation via Pydantic. Main gaps: missing output schema documentation, no enum constraints on view/format parameters, and error responses lack actionable guidance for LLM recovery.
Check a model for 3D-printing readiness: watertight, manifold, wall thickness.
Execute build123d Python code and register the resulting shape. Execution namespace includes ``from build123d import *``, ``import numpy as np``, plus seven partsmith_helpers (through_hole, screw_hole, hex_hole, slot, chamfer_edges, fillet_top_edges, screw_pattern). Models are in-memory only. Use partsmith_save_design to persist source code that survives container restart (versioned).
Delete a saved design and all its versions from persistent storage.
Compare two versions of a design and report differences in code and geometry.
Export a loaded model to STL, STEP, or 3MF format.
Liveness check. Returns server status, version, and transport.
Output schemas not documented. Tools return complex objects (geometry summaries, render data, version metadata) but no schema is visible in code. LLMs cannot plan downstream calls or extract fields reliably.
Enum constraints missing on view/format parameters. 'view' accepts 'front|back|left|right|top|bottom|iso|iso_back' but is typed as free-form string. 'format' in export_model accepts 'stl|step|3mf' but no enum. LLMs may hallucinate invalid values.
Error handling lacks recovery guidance. No visible error responses with actionable next steps (e.g., 'Model not found. Call partsmith_list_models to see available models'). Agents cannot self-correct on failures.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 69 | 2026-07-28+ | v2 |
List all saved designs with metadata.
List all currently-loaded models with summary geometry.
List all versions of a saved design.
Load a saved design from persistent storage into a model.
Return bounding box, volume, surface area, and topology counts.
Re-execute build123d code under an existing model name. See partsmith_create_model for ``include_preview`` (default False; opt in for a small inline preview).
Render a 2D orthographic projection of a loaded model.
Render a 3D shaded view of a loaded model.
Render an engineering drawing with overall dimension lines and title block.
Render a 2x2 composite -- front + right + top + iso shaded.
Render a 2D cross-section of a loaded model at a plane.
Save a design (build123d source code) to persistent storage with versioning.
Destructive operations lack confirmation step. partsmith_delete_design is irreversible but has no dry-run or confirmation mechanism. Agents can accidentally delete all versions of a design.
Parameter 'plane' in render_section accepts 'XY|XZ|YZ' but is typed as free-form string. No enum constraint. LLMs may pass invalid plane names.