OpenSCAD render-and-sweep loop exposed as an MCP server
Server has 6 well-defined tools with complete input schemas and descriptions. Naming follows verb_noun convention (render_*, validate_*, list_*, compute_*). Descriptions are adequate (50-150 chars) but lack actionable context for LLM selection. Parameter schemas are properly typed with defaults. Output schemas are documented in code but not formally exposed. Error handling returns structured responses but lacks recovery guidance. No tool annotations (readOnlyHint/destructiveHint) despite clear risk profiles. Missing parameter constraints (enums for camera presets, bounds for timeout/image_size). Composition is sound, each tool has single responsibility.
Bounding box, volume, surface area, triangle count for an STL.
Extract top-level module and function signatures with parameter defaults.
Cartesian sweep over parameter ranges. Returns a manifest of rendered STLs.
Render a PNG preview. `camera` is one of: iso, top, front, right, or a 6-vector string.
Render .scad source (file path or inline) to STL with parameter overrides.
Syntax-check .scad source without rendering geometry.
Missing tool annotations (readOnlyHint/destructiveHint). render_stl, render_png, parametric_sweep are destructive (WRITE risk); validate_scad, list_modules, compute_metrics are read-only. LLMs cannot infer safety profile without explicit hints.
Parameter 'camera' in render_png accepts free-form strings but should declare enum constraint. Description mentions presets (iso, top, front, right) but no formal enum in schema, LLMs may hallucinate invalid values.
Error responses lack recovery guidance. render_stl/render_png return {ok: false, stderr, exit_code} but do not suggest next steps (e.g., 'Check syntax with validate_scad()' or 'Increase timeout_sec').
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | 2026-07-28+ | v2 |
Output schemas not formally documented in tool definitions. Descriptions mention return fields (ok, output_path, size_bytes, parameters) but no structured schema declaration visible in @mcp.tool() decorators.
Descriptions lack context for LLM selection. 'Render .scad source to STL' does not explain when to use render_stl vs render_png, or what parametric_sweep adds. Missing dependency hints (e.g., 'Call validate_scad first to check syntax').