Toolspace sidecar (cad) — a co-located per-chat helper container that reads, edits, and authors CAD drawings (DXF format via ezdxf), exposed as MCP tools over Streamable HTTP. Supports floor plans, camera diagrams, and technical drawing reconstruction from PDFs.
14 tools with consistent verb_noun naming (cad_read, cad_list_entities, cad_extract_geometry, etc.). All tools have descriptions (avg ~150 chars, within 10-1024 baseline). Input schemas present with type declarations and parameter descriptions. However, output schemas are NOT documented, responses are inferred from descriptions only. No error handling guidance (recovery steps, retryability classification). No tool annotations (readOnlyHint/destructiveHint). Risk labels present in metadata but not in schema. Composition is strong: single responsibility per tool, clear chaining (read → extract → measure). Parameter naming is consistent (src, path, layer, position). Missing: output schema documentation, error recovery patterns, tool annotations.
Add an ARC entity to a DXF being authored.
Add a block reference (INSERT) to a DXF being authored — a placed symbol (e.g. a camera, fixture, or annotation block).
Add a CIRCLE entity to a DXF being authored.
Add a named layer (e.g. ``"WALLS"``, ``"CAMERAS"``) to a DXF being authored, so later ``cad_add_*`` calls can target it.
Add a LINE entity to a DXF being authored.
Add a LWPOLYLINE entity to a DXF being authored.
Add a TEXT entity to a DXF being authored.
Output schemas not documented. Tool descriptions infer return structure (e.g., 'Returns the drawing's DXF version, layer names...') but no formal schema definition visible. LLMs cannot plan downstream calls or extract fields reliably without documented output types.
No error handling guidance. Tools lack recovery instructions (e.g., 'If file not found, check path syntax' or 'Retryable: yes/no'). Errors will be raw exceptions without actionable next steps for the agent.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Risk labels exist in metadata (READ_ONLY, WRITE) but are not exposed in MCP schema. Agents cannot infer which tools are safe to retry or have side effects.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | B | 79 | <=2025-11-25 | v2 |
Create a new, empty DXF — the starting point for authoring a drawing entity-by-entity with the other ``cad_add_*`` tools (e.g. reconstructing a technical drawing from a PDF via ``pdf_extract_text``/``pdf_to_images``; see the ``pdf-to-cad-reconstruction`` skill). If this is for PDF-to-CAD reconstruction: that whole pipeline is a free, best-effort aid, NOT a commercial-grade vectorization product — tell the user plainly that the result is a starting point to verify, not a certified redraw (see the skill for why, incl. a confirmed real failure case).
Extract coordinates + lengths of the geometric primitives (LINE, LWPOLYLINE, CIRCLE, ARC) in a DXF — walls, room outlines, camera cones. Use this for spatial reasoning (distances, coverage, run lengths) instead of installing ezdxf to parse the file yourself.
List the entities in a DXF drawing, optionally filtered to one type. Use this to inventory what's on a plan — how many cameras (INSERT block refs), text labels, lines, etc. — without installing any CAD library.
Measure a DXF drawing: overall bounding box (extents + size), per-type entity counts, per-layer counts, and the layer list — the one-call "how big is this plan and what's in it" overview.
Read the content of a DXF CAD drawing (floor plan, camera diagram). Returns the drawing's DXF version, layer names, a per-type entity count, and all text labels (TEXT/MTEXT) — the content to reason about on a tender plan (camera labels, room names, notes).
Rename a layer in a DXF (entities on it follow). Writes ``<stem>.edited.dxf`` next to the source.
Replace text in a DXF: every TEXT/MTEXT whose value equals ``old`` becomes ``new``. Writes ``<stem>.edited.dxf`` next to the source (never writes over it).
Geometry tools (cad_add_line, cad_add_polyline, cad_add_circle, cad_add_arc, cad_add_text) have minimal descriptions (~70 chars). Descriptions lack context on when to use each primitive, coordinate system conventions, or unit assumptions. LLMs may misuse tools without clearer guidance.
cad_create_document description includes a disclaimer about PDF-to-CAD reconstruction being 'best-effort' and 'not commercial-grade'. While user-facing context is valuable, this is verbose for tool selection. Consider moving disclaimer to a separate resource or skill documentation.