[![Archimedes Trust Report — VERIFIED 92/100](https://img.shields.io/badge/Archimedes_Trust-VERIFIED_92%2F100-10B981?style=flat-square)](https://archimedes.market/assets/46d1682f-6ceb-4288-97ae-8a05a4ab9c86) > Verified asset on [**Archimedes Market**](https://archimedes.market). View the full 4-dimension Trust Report (security · quality · license · complexity) and the curated catalog on the [asset page](https://archimedes.market/assets/46d1682f-6ceb-4288-97ae-8a05a4ab9c86). --- # MCP OpenSCAD Render Loop OpenSCAD wrapped as an MCP server so an agent can iterate on parametric CAD designs without bouncing in and out of the GUI. Render `.scad` source with parameter overrides, run parameter sweeps, validate syntax, extract module signatures, and compute STL geometry metrics. ## Tools - `render_stl` — render a `.scad` file or inline source to STL with `-D` parameter overrides - `render_png` — preview render to PNG with camera + image-size control - `parametric_sweep` — Cartesian sweep over one or more parameter ranges, returns a manifest of outputs - `validate_scad` — syntax check via `openscad --check` (no render) - `list_modules` — extract top-level `module foo(...)` and `function bar(...)` signatures with defaults - `compute_metrics` — bounding box, volume, surface area, triangle count from an STL ## Why this server exists OpenSCAD's CLI is well-designed but verbose. Most agent CAD workflows do the same loop: edit parameters → render → measure → adjust. This server collapses that to one tool call per iteration and returns geometry metrics directly so the agent doesn't have to parse STL bytes itself. ## Quick start ```bash # 1. Install OpenSCAD (must be on PATH) brew install openscad # macOS apt-get install openscad # Debian/Ubuntu # 2. Install the MCP server pip install mcp-openscad-render-loop # 3. Set output directory and run export MCP_OPENSCAD_OUTPUT_DIR="/tmp/scad-renders" mcp-openscad-render-loop serve ``` Claude Desktop config: ```json { "mcpServers": { "openscad": { "command": "mcp-openscad-render-loop", "args": ["serve"], "env": { "MCP_OPENSCAD_OUTPUT_DIR": "/tmp/scad-renders", "MCP_OPENSCAD_BINARY": "/usr/local/bin/openscad" } } } } ``` ## Typical agent workflow ``` Agent: "Design an enclosure for a 60x40x15mm PCB with 2mm walls and M3 mounting posts." ↓ 1. list_modules on enclosure.scad → finds module enclosure(pcb_l, pcb_w, pcb_h, wall, post_dia) 2. render_stl with pcb_l=60, pcb_w=40, pcb_h=15, wall=2, post_dia=3 → enclosure_v1.stl 3. compute_metrics on enclosure_v1.stl → bbox 66x46x21, volume 18.4cm³, 1,240 triangles 4. parametric_sweep on wall ∈ [1.5, 2.0, 2.5] → 3 STLs + metrics → wall=2 is the strength/weight knee 5. render_png at iso camera → preview image attached to agent's reply ``` ## Safety - `MCP_OPENSCAD_OUTPUT_DIR` is the only writable path. Any output path outside this dir is rejected. - Each render is hard-capped at 60 seconds (configurable). Long sweeps run renders sequentially, not in parallel — keeps memory bounded. - Inline `.scad` source is written to a temp file inside the output dir; nothing executes outside `openscad`. - No `import("/some/path.dxf")` traversal — relative paths in `.scad` are resolved against the output dir or the source file's dir, never against `/`. ## License MIT.