root-ext-cad
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@root-ext-cadvalidate DFM for flange.step"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
root-ext-cad
CAD-engineering MCP tool server — code-CAD builds (build123d/CadQuery), model inspection, meshing, DFM-lite validation, and mechanical calculators. Built as the mechanical-engineering pack for [ROOT Workspace], but it speaks plain MCP stdio and works with any MCP host.
The workspace client stays domain-free by doctrine; this repo is where the CAD knowledge lives. Tools reach both ROOT runtimes (the brain-governed deployment and the lite Tier-0 harness) through the client's mcp-bridge, and every call is governed — write-class tools gate like any write; network tools park for approval.
The charter (binding)
Source is truth; artifacts are derived. The pack never overwrites
a user's file in place: geometry writes land in a caller-named output
directory (default derived/ beside the source), and every write tool
refuses an output path that collides with its input.
tests/test_server.py::test_no_inplace_mutation_tools_exist and the
collision-refusal tests enforce this in CI, not just in prose.
Parametric source (a build123d or CadQuery .py script) is the
model; STEP/STL/glTF/3MF are exports. model_build executes scripts —
it says so plainly, runs them in this pack's own venv as a
resource-capped subprocess, and is classed write, never read.
Related MCP server: build123d-mcp
Tools
Tool | Class* | What it does |
| read | STEP/BREP/STL → bounding box, volume/area, mass (given density), topology counts, per-solid summary |
| read | DFM-lite lint: open (non-watertight) shells, invalid B-rep, tiny edges/faces, pairwise interference & clearance — every finding carries its evidence and threshold |
| write | Run a build123d/CadQuery parametric script (sandboxed subprocess, CPU/memory/wall caps) → STEP/STL/glTF/3MF into the output dir + a build report |
| write | STEP/BREP → tessellated STL/glTF/3MF with linear + angular tolerance controls |
| read | ISO 286 limits & fits (hole-basis subset), clearance/interference verdicts |
| read | Metric coarse threads: pitch, stress area, tap & clearance drills, preload/torque first-cut |
| read | Beam bending first-cut: cantilever / simply-supported, point / UDL, rect / round / tube sections |
| read | Assembly mass + 3D center of gravity from a component list, envelope check |
| read | Geometric diff of two revisions: volume/area/bbox deltas, bodies unchanged/moved/added/removed by shape signature — geometry, not a feature tree, and the report says so |
| write | Named-view (front/top/…/iso) SVG or DXF projection: visible edges + dashed hidden layer — a silhouette for hand-off, not a dimensioned drawing |
| external | Starter model from a text prompt via Zoo's ML-ephant API (+ its editable KCL source when returned); needs |
* Classes derive fail-safe from annotations in the ROOT client:
read tools declare readOnlyHint: true, openWorldHint: false; write
tools declare readOnlyHint: false, openWorldHint: false (the
closed-world write class); network tools (Phase CAD-D: text_to_cad)
will declare openWorldHint: true and refuse by name without their
key.
Connect it to ROOT Workspace
Settings → Connected tools → the connect form:
Name:
cad-engCommand:
uv run --project /path/to/root-ext-cad root-ext-cad(a local checkout), or once published:uvx root-ext-cad
Run the row's Check (doctor) after connecting. Keep model files
and build scripts inside granted folders so the agent can cross-read
them with fs.*. Builds must finish inside the bridge's call ceiling
(120 s; 90 s once promoted) — the default subprocess wall cap is 75 s.
Development
uv venv .venv
uv pip install --python .venv/bin/python -e ".[dev]"
.venv/bin/pytestLayering rule: server.py is wiring only; every capability lives in a
plain-Python module (inspection.py, meshing.py, validate.py,
buildrun.py, calc.py, geometry.py) with logic separated from
I/O so the rules stay unit-testable on synthetic shapes — no fixture
model files required.
Roadmap
Later, each behind its own ADR: FreeCAD GUI-bridge companion, Onshape connector, KCL as a second source dialect, FEA hand-off recipes, PMI/GD&T presence reporting
Available Tools
11 toolscalc_beamARead-only
Beam bending first-cut (Euler–Bernoulli): case one of cantilever_point, cantilever_udl, simply_point_center, simply_udl; section rect {b_mm,h_mm}, round {d_mm}, or tube {d_outer_mm,d_inner_mm}. Point loads in N, distributed in N/mm, E in GPa (default 200, steel). Returns I, max deflection, moment, bending stress, and a safety factor when you pass yield_mpa. No shear deflection, buckling, or stress concentration.
| Name | Required | Description | Default |
|---|---|---|---|
| case | Yes | ||
| e_gpa | No | ||
| load_n | No | ||
| dims_mm | Yes | ||
| section | Yes | ||
| udl_n_mm | No | ||
| length_mm | Yes | ||
| yield_mpa | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as read-only (readOnlyHint=true). The description adds value by detailing the outputs (I, deflection, moment, stress, safety factor) and the mathematical model used (Euler-Bernoulli), as well as limitations (no shear, buckling). This provides behavioral context beyond what annotations offer.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise (three sentences) and front-loaded with core purpose. It packs significant detail but lacks bullet points or clear separation of input/output sections, which marginally reduces readability. Still, it is efficient without fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (8 parameters, nested objects, no output schema), the description covers the main inputs, supported cases and sections, units, and outputs. It mentions the return values. However, it does not include an example or explicitly map dims_mm keys for each section type, which would enhance completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description compensates partly by explaining case types, section geometries, units, and the default E value. However, it does not explicitly describe all parameters (e.g., load_n, udl_n_mm) or clarify that dims_mm keys depend on the section type. The explanation is helpful but incomplete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it performs Euler-Bernoulli beam bending analysis for first-cut design. It lists supported cases (cantilever_point, etc.) and section types (rect, round, tube), making it distinct from sibling tools like calc_fits or calc_fastener. The explicit mention of what it does not include further differentiates it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear context on when to use this tool for simple beam bending and explicitly excludes shear deflection, buckling, and stress concentration, implying those are not computed. However, it does not explicitly state 'use this for first-cut estimates' or mention alternative tools for advanced cases, which would improve guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calc_fastenerARead-only
Metric coarse-thread fastener numbers for M1.6–M30: pitch, tensile stress area, tap drill, ISO 273 clearance holes (close/medium/coarse), proof stress for the property class, 75% preload, and a T = K·F·d torque first-cut (K default 0.2, dry) — lubrication changes K dramatically.
| Name | Required | Description | Default |
|---|---|---|---|
| size_m | Yes | ||
| friction_k | No | ||
| property_class | No | 8.8 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, so no side effects exist. The description adds context about the friction coefficient (K) and torque formula, noting that lubrication changes K dramatically, which is valuable beyond the annotation-only info.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that packs many outputs, making it dense. It lacks front-loading or structure (e.g., bullet points) that would improve readability for an agent.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description must convey return format. It lists several computed values (pitch, area, clearance holes, etc.), but does not present them as structured keys or explain the exact output object, leaving gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, but the description adds meaning to friction_k (default 0.2 dry, lubrication effect) and property_class (proof stress). size_m is implied by the range but not explicitly described, leaving some ambiguity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific purpose: computing metric coarse-thread fastener numbers for a size range (M1.6–M30). It lists discrete outputs (pitch, tensile stress area, etc.), distinguishing it from sibling calculation tools like calc_fits or calc_beam.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives is provided. The domain is implied through the list of outputs, but there is no comparison with siblings or conditions for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calc_fitsARead-only
ISO 286 limits and fits, hole-basis subset: hole H5–H11 against shaft letters d e f g h js k m n p s, sizes to 500 mm. Returns deviations (µm), min/max clearance, and the fit kind (clearance/transition/interference). Computed from the standard's deviation formulas — verify critical fits against the ISO 286-2 tables.
| Name | Required | Description | Default |
|---|---|---|---|
| hole | No | H7 | |
| shaft | No | g6 | |
| size_mm | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description adds context: it computes from standard formulas, returns specific outputs (deviations in µm, clearance, fit type), and advises verification against ISO 286-2 tables. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the main purpose and key constraints. Every word serves a purpose with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's engineering complexity, no output schema, and three parameters, the description adequately explains what the tool computes and returns, mentions the standard basis, and includes a verification caution. It covers essential context for an agent to use it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 0% description coverage, so the description must compensate. It explains valid ranges for hole (H5–H11) and shaft letters (d e f g h js k m n p s) but does not detail default values or format. It provides some semantic context beyond the schema but is not comprehensive for all three parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool computes ISO 286 limits and fits for hole-basis subset, specifying hole grades H5–H11, shaft letters, size range to 500 mm, and outputs deviations, clearance, and fit type. This specific verb-resource combination distinguishes it from sibling tools like calc_beam or calc_fastener.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for hole-basis fits but does not explicitly state when to use vs. alternatives or provide exclusions. It mentions verifying critical fits against official tables, but no guidance on when not to use this tool or mention of sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calc_mass_rollupARead-only
Total mass and 3D center of gravity from a component list — each item {name, mass_g, x_mm, y_mm, z_mm} measured from one datum. Pass envelope {x_min_mm, x_max_mm, y_min_mm, y_max_mm, z_min_mm, z_max_mm} (any subset of axes) to get a CG-within-envelope verdict.
| Name | Required | Description | Default |
|---|---|---|---|
| envelope | No | ||
| components | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true. The description adds behavioral context by detailing the envelope verdict, which goes beyond annotations. No contradictions or missing side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences efficiently convey purpose and optional usage. No redundancy, front-loaded with main action.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description covers input details and behavior well. It lacks return format or error conditions, but is sufficient for a read-only calculation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema coverage, the description compensates well by specifying component fields (name, mass_g, x_mm, y_mm, z_mm) and envelope fields. It adds meaning beyond the unannotated schema, but could be more precise about envelope structure.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool computes total mass and 3D center of gravity from a component list, with an optional envelope for a CG-within-envelope verdict. It uses specific terms and distinguishes from siblings like calc_fits and calc_fastener.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains input format and envelope usage, but does not explicitly state when to use this tool vs alternatives. It implies context by focusing on mass properties, but lacks explicit when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
drawing_projectAIdempotent
Project a B-rep model (STEP/BREP/IGES) to a 2D SVG or DXF (by out_path suffix) from a named view — front, back, top, bottom, left, right, iso. Visible edges on one layer, hidden edges dashed on another. A silhouette for hand-off, NOT a dimensioned drawing. Refuses an out_path that collides with the input (charter).
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| view | No | front | |
| scale | No | ||
| out_path | Yes | ||
| include_hidden | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Behaviors such as separate layers for visible/hidden edges, output format selection by suffix, and refusal of colliding paths are disclosed. The idempotentHint annotation is consistent, and no contradictions exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured paragraph with no redundancy. Each sentence conveys essential information efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity, the description covers input types, output formats, views, layers, and a safety check. It could explicitly state the output is a file or data, but overall it is adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 0% schema description coverage, the description explains the role of path, out_path, view, scale, and include_hidden by implication. For example, it mentions hidden edges are dashed, linking to include_hidden. This adds value beyond the schema titles.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the tool projects B-rep models (STEP/BREP/IGES) to 2D SVG/DXF from named views, distinguishing it from sibling tools like model_inspect or model_mesh. It specifies input formats, output formats, and view options.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description notes this is 'a silhouette for hand-off, NOT a dimensioned drawing,' clarifying when to use. It also mentions the collision refusal behavior, but does not explicitly compare to sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
model_buildAIdempotent
EXECUTES a parametric CAD script (build123d or CadQuery Python)
in this pack's own venv as a resource-capped subprocess (CPU
rlimit + wall timeout, default 75 s), then exports the script's
module-level result shape to the requested formats (default
step+glb) in out_dir — default derived/ beside the script, and
never a directory containing the script itself (charter: source is
truth, artifacts are derived). PARAMS (your params dict) is
available inside the script. Returns the written files and a build
report: volume, area, bbox, center of mass, the script's own
prints.
| Name | Required | Description | Default |
|---|---|---|---|
| params | No | ||
| wall_s | No | ||
| formats | No | ||
| out_dir | No | ||
| script_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations that already indicate idempotency and non-destructiveness, the description adds rich behavioral context: it details the subprocess execution, CPU and timeout limits, default export formats, directory constraints ('never a directory containing the script itself'), and the return of a build report. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense sentence that packs significant information. It is front-loaded with the primary action. While every part is relevant, the density slightly harms readability. Breaking into multiple sentences would improve structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (executing scripts, exporting, subprocess management), the description covers the core workflow, safety constraints, and return value. It could mention error handling or script failure behavior, but overall it is sufficiently complete for an agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description provides essential meaning for all 5 parameters: it explains script_path is required, params is available inside the script, wall_s defaults to 75, formats default to step+glb, and out_dir defaults to 'derived/' beside the script with discussed constraints. This compensates for the missing schema descriptions, though not with per-parameter detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool executes a parametric CAD script and exports the result. It uses specific verbs ('EXECUTES', 'exports') and identifies the resource (script, result shape). It distinguishes from siblings like model_inspect and model_validate by focusing on generating geometry from scripts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains the execution context (subprocess, resource limits) but does not explicitly state when to use this tool versus alternatives like model_inspect or text_to_cad. It implies usage for building models from code, but lacks direct exclusions or recommendations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
model_diffARead-only
Geometric diff of two B-rep revisions (STEP/BREP/IGES): volume, area, and bbox deltas, plus per-body matching by shape signature — unchanged, moved (with the displacement), added, removed. This is geometry, not a feature tree: a reshaped body reports as removed+added, and the report says so.
| Name | Required | Description | Default |
|---|---|---|---|
| path_a | Yes | ||
| path_b | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, and the description adds valuable context: that the tool works on geometry (not feature trees) and that reshaped bodies are reported as removed+added. This extra behavioral detail helps the agent understand limitations beyond the annotation's safety flag.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences long, front-loaded with the core purpose, and adds only essential clarifications. Every sentence adds value without redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description explains the tool's outputs and limitations well, but lacks details on parameter semantics and return format (no output schema). For a tool with two required parameters and no output schema, more completeness would be beneficial, but the description covers the core functionality adequately.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The two parameters (path_a, path_b) have 0% schema description coverage. The description mentions 'Two B-rep revisions (STEP/BREP/IGES)' but does not explicitly describe the parameters' meaning, format, or constraints (e.g., local vs URL, file extension requirements). More parameter-level guidance is needed to compensate for the missing schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool computes a geometric diff of two B-rep revisions and lists specific outputs (volume, area, bbox deltas, per-body matching). It distinguishes itself from a feature tree diff and implicitly from sibling tools like model_inspect (which inspects a single model) by specifying the diffing functionality.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for geometric comparison of B-rep files and clarifies it is not for feature tree diffs, but it does not explicitly state when to use this tool over siblings like model_inspect or model_validate. No direct exclusions or alternative tool names are given, leaving some ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
model_inspectARead-only
Summarize a CAD model: bounding box, volume, surface area, topology counts, per-solid volumes and centers of mass — plus mass when you pass a density (g/cm³). Reads STEP/STP, BREP, IGES/IGS (B-rep, kernel-exact) and STL/3MF (mesh — triangle sums; volume is only reported for watertight meshes, and the summary names which world it measured). Reads the file on this machine; nothing leaves it.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| density_g_cm3 | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=true, and the description adds important behavioral details: file types, local processing, and volume reporting conditions (watertight for mesh). No contradictions, and disclosures go beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is a single paragraph with three sentences, each earning its place. It is front-loaded with the main action and efficiently covers supported formats, computed properties, and privacy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (multiple formats, optional density, per-solid data) and no output schema, the description thoroughly explains what the tool returns and under what conditions, making it complete for agent decision-making.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 0% description coverage; the description fully compensates by explaining that 'density_g_cm3' is for mass calculation and 'path' is for the model file. It adds semantic value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool summarizes a CAD model with specific outputs (bounding box, volume, etc.) and lists supported file formats. It contrasts with sibling tools like model_validate and model_build, making its purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for inspection without explicit when-to-use vs siblings, but it provides context such as 'Reads the file on this machine; nothing leaves it,' which guides on privacy. A more explicit comparison would improve clarity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
model_meshAIdempotent
Tessellate a B-rep model (STEP/BREP/IGES) into a mesh file — STL, GLB, GLTF, or 3MF by out_path suffix — at explicit linear (mm) and angular (degrees) tolerances, echoed in the report. Refuses an out_path that collides with the input (charter). Writes only the one output file.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| out_path | Yes | ||
| linear_tolerance_mm | No | ||
| angular_tolerance_deg | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate idempotent and non-destructive. Description adds constraints: refuses collision with input (safety check) and writes only one output file. It also mentions tolerances are echoed in report. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences covering all critical aspects: action, inputs, outputs, constraints, and tolerances. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers input formats, output formats, tolerances, and collision constraint. Lacks explicit description of the report output (echoed but not defined) and error handling, but is sufficient for a simple file conversion tool with no output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 0% parameter descriptions. Description compensates by defining linear_tolerance_mm and angular_tolerance_deg with units, implying path/out_path are file paths, and clarifying output format determined by suffix. Could be more explicit about input/output roles.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description specifies the exact verb (Tessellate), source (B-rep models: STEP/BREP/IGES), and output (mesh files: STL, GLB, GLTF, 3MF by suffix). It clearly distinguishes from siblings like model_inspect or model_validate which have different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Clearly implies use when converting a B-rep model to a mesh at given tolerances. Does not explicitly state when not to use or compare with alternatives, but the sibling tools are sufficiently different that context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
model_validateARead-only
DFM-lite lint for a B-rep model (STEP/BREP/IGES): kernel validity per solid, non-manifold topology, open (no-solid) surface models, tiny edges/faces (sliver artifacts), and pairwise interference + clearance between bodies against clearance_mm. Every finding carries its evidence and threshold so you can disagree with the rule. Wall thickness, draft, threads, and GD&T are NOT checked — absent, not hidden.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| clearance_mm | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already set readOnlyHint=true, confirming safety. Description adds significant behavioral context: every finding includes evidence and threshold, and it clarifies that missing checks are 'absent, not hidden'. This fully informs the agent about tool behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each adding value: first states the core purpose, second adds transparency about findings, third clarifies exclusions. Front-loaded with 'DFM-lite lint', no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite no output schema, the description covers purpose, parameter usage (clearance_mm), limitations, and behavioral transparency. Sibling tools are sufficiently diverse, so no risk of confusion. Complete for a linting/validation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description partially compensates by clarifying that clearance_mm is used for pairwise interference and clearance checks. However, it does not explain the 'path' parameter, which is self-explanatory but still relies on schema for name/type.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'DFM-lite lint for a B-rep model' and enumerates specific checks (kernel validity, non-manifold topology, etc.), distinguishing it from siblings that perform different operations like building, inspecting, or meshing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context for when to use (for B-rep model linting) and explicitly lists what it does NOT check (wall thickness, draft, threads, GD&T), implying when it should not be used. However, it does not name alternative sibling tools for those exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
text_to_cadA
Generate a STARTER CAD model from a text prompt via Zoo's ML-ephant API (zoo.dev) — files land in out_dir like any derived artifact, with the editable KCL source beside them when returned. Needs ZOO_API_KEY in this server's environment; answers with a named refusal when it is not set. Verify dimensions before use. Reaches the network.
| Name | Required | Description | Default |
|---|---|---|---|
| prompt | Yes | ||
| out_dir | Yes | ||
| timeout_s | No | ||
| output_format | No | step |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Discloses network call (consistent with openWorldHint), file output location, editable source, and the STARTER quality warning. Exceeds annotation alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences front-loaded with purpose, covering prerequisites, side effects, and a warning. No redundant phrases.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Good context on output (files in out_dir, KCL source) and network usage, but missing explanation for two parameters and no return value details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and description only outlines prompt and out_dir, ignoring timeout_s and output_format. Insufficient for an agent to understand all parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool generates a STARTER CAD model from a text prompt via a specific API, which differentiates it from inspection/validation sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly mentions required environment variable (ZOO_API_KEY) and the need to verify dimensions, but does not compare to alternatives like model_build for manual modeling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
11 tool updates
v0.2.0- First observed
calc_beam - First observed
calc_fastener - First observed
calc_fits - First observed
calc_mass_rollup - First observed
drawing_project - First observed
model_build - First observed
model_diff - First observed
model_inspect - First observed
model_mesh - First observed
model_validate - First observed
text_to_cad
TDQS
Each tool has a clearly distinct purpose: model_inspect summarizes, model_validate checks manufacturability, model_build executes scripts, model_mesh tessellates, model_diff compares, drawing_project projects to 2D, text_to_cad generates from text, and the calc_* tools cover specific engineering calculations with no overlap.
Tool names consistently use a verb_noun pattern with model_ and calc_ prefixes. Minor deviations: drawing_project uses noun_verb, and text_to_cad uses a different form, but they are still clear and fit the overall scheme.
11 tools is well-scoped for a CAD server covering both model operations and engineering calculations. Each tool serves a specific need without being overwhelming or too sparse.
Covers core CAD workflows: inspect, validate, build, mesh, diff, project, and text generation. Calculation tools cover common mechanical engineering needs. Minor gaps like direct export to common formats or more advanced analysis, but overall complete for its stated purpose.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
MCP server for progressive tool usage at any scale (see https://klavis.ai)
QuLab MCP remote server (Streamable HTTP) for computational science and lab tools.
Lean 4 MCP server: compile, prove theorems, and formalize math with Mathlib.
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceMCP server that exposes CAD geometry reasoning over STEP files to LLMs, allowing natural language queries about parts, assemblies, dimensions, holes, and mass properties.-
- AlicenseAqualityAmaintenanceMCP server for Python build123d to help AIs develop and reason about 3D models and CAD3875Apache 2.0
- AlicenseNot gradedqualityAmaintenanceMCP server for interacting with Creo Parametric CAD software. Enables tool calls like file_open, feature_set, and J-Link execution through a Python-based server and optional Java gateway.MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to programmatically build, analyze, and export 3D CAD geometry using FreeCAD through REST or MCP tools.1MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/graphgrow/root-ext-cad'
If you have feedback or need assistance with the MCP directory API, please join our Discord server