MCP server for 3D-printable CAD modeling with build123d
5 tools with complete schemas and descriptions, but significant quality gaps. Tool names lack action verbs (estimate_print, section_view, export_drawing, analyze_overhangs, search_models). Descriptions are present but generic (avg ~80 chars, below 194-char baseline). Parameter descriptions exist but lack constraints, ranges, and format guidance. No output schemas documented. No error handling guidance. No tool annotations. Schemas are well-formed JSON Schema with types, but missing validation rules and examples. Tools are single-responsibility and composable, but naming ambiguity and missing output documentation limit LLM reasoning.
Analyze overhang faces that may need support material.
Estimate filament usage, weight, and cost for printing a model.
Generate a 2D technical drawing as SVG with multiple view projections.
Search for 3D models on Thingiverse.
Generate a 2D cross-section of a model and export as SVG.
Tool names lack action verbs. 'estimate_print', 'section_view', 'export_drawing', 'analyze_overhangs' are noun-heavy or ambiguous. Should be 'estimate_filament', 'generate_section', 'generate_drawing', 'detect_overhangs' to signal intent clearly.
No output schemas documented. LLMs cannot infer what fields are returned (e.g., does estimate_print return {filament_grams, cost_usd, weight_g} or a string?). This forces agents to guess and wastes tokens on clarification.
Parameter descriptions lack constraints and ranges. 'infill_percent' has no min/max (0-100?). 'layer_height' has no range (0.1-0.4mm?). 'max_angle' for overhangs has no bounds. LLMs will pass invalid values.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 43 | 2026-07-28+ | v2 |
No error handling guidance. If a model name is not found, or a section plane is invalid, what does the tool return? How should the LLM recover? No recovery hints provided.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). LLMs cannot distinguish safe reads from destructive writes. section_view and export_drawing are marked WRITE but lack annotation metadata.