cad-mcp-server
Works with the STEP files exported from FreeCAD (as well as SolidWorks, Fusion 360, CATIA, or any other CAD system), inspecting and measuring 3D model geometry locally with deterministic OCCT-backed results.
Click on "Deploy 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., "@cad-mcp-serverWhat are the overall dimensions and volume?"
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.
Ottogeo — CAD MCP Server
Give any AI assistant the ability to measure real CAD geometry. The server opens STEP files with the Open CASCADE kernel and answers the questions an engineer actually asks — overall size and volume, hole and boss diameters, wall thickness, clearance, draft, cross-sections, and what changed between two revisions — with numbers computed from the model's own B-rep, not estimated from a screenshot.

Quick start
Add the server to your MCP client, then point your assistant at a STEP file:
{
"mcpServers": {
"cad": {
"command": "npx",
"args": ["-y", "cad-mcp-server"]
}
}
}Works with any MCP client — Claude Desktop, Cursor, VS Code, and the rest.
Related MCP server: step-modeler-mcp
Ask it anything about a part
"What are the overall dimensions and volume of this part?"
"Find the cylindrical faces and list their diameters and axes."
"Measure wall thickness on these faces."
"What is the minimum distance between this hole and the nearest wall?"
"Measure draft relative to the +Z direction and list faces with negative draft."
"Cut a section through this body at X = 40."
"What changed between revision A and revision B?"
More examples, including DFM-style review prompts, are in docs/EXAMPLE_PROMPTS.md.
Tools
Tool | Returns |
| Bounding-box dimensions, volume, surface area, body and assembly structure, B-rep health, and a revision-bound reference. |
| Faces, edges, vertices, and bodies, with filters for surface type, radius, axis, and area. |
| Distance between faces, wall thickness, draft, ray casts, ray grids, point analysis, planar sections, and edge continuity. |
| Declared dimensions (nominal with deviations or bounds), geometric tolerances (value, zone, material modifier, datums), and datums, each with the entity IDs it applies to. |
| Dimension, volume, area, and topology deltas between two STEP revisions, declared PMI counts, and parsed STEP metadata. |
Measurement kinds are distance, thickness, draft, ray, ray_grid,
point_analysis, section, and continuity. Lengths come back in the file's
declared unit, labelled on every result, so an inch model stays in inches and
nothing has to be converted by hand. Angles are in degrees.
Why the numbers hold up
Computed by Open CASCADE, not guessed. The same file and the same query return the same numbers, every time.
Revision-bound and self-verifying. Every result carries the entity IDs and the SHA-256 revision it came from, and stale IDs are rejected when a file changes underneath a session — so an answer can never be attached to the wrong geometry.
Reads the model's own callouts.
describe_pmireports the dimensions, geometric tolerances, and datums a file declares, each bound to the entities it applies to, so declared requirements can be checked against the geometry.Local and private. It runs over stdio and reads files by path. It is read-only and never uploads or writes your CAD data.
Requirements
Node.js 24+
Windows x64, macOS ARM64 (Apple Silicon), or Linux x64
STEP files, as exported by SolidWorks, Fusion 360, Onshape, FreeCAD, CATIA, or any other CAD system
FAQ
Does it need CAD software installed? No. It reads STEP files directly, so it works on a machine without a CAD application or license.
Do my files leave my machine? No. The server runs locally over stdio and reads files by path. It is read-only and never writes to your CAD data.
How is this different from asking an assistant to look at a screenshot? Measurements are computed from the model's B-rep geometry by Open CASCADE, so the same file and query return the same numbers. Each result also carries the entity IDs and revision it came from.
Development
Source setup, checks, packaging, and releases are in docs/DEVELOPMENT.md. The server targets Windows x64, macOS ARM64, and Linux x64, and builds its native sidecar from the pinned OCCT revision.
Packaging
npm pack builds first and includes the compiled server, the native sidecar, this
README, and the third-party notices. Tests and source maps are excluded. Install
the tarball to check the cad-mcp-server executable with a compatible MCP client.
Documentation
Architecture — tools, workflow, and limits
Security — local processing and handling CAD files as sensitive input
License
MIT. Third-party licenses: THIRD_PARTY_NOTICES.md.
Available Tools
5 toolsdescribe_pmiDescribe Model PMI and GD&TARead-onlyIdempotent
Report the dimensions, geometric tolerances, and datums that a STEP artifact declares, as data: nominal, deviations, and tolerance form for each dimension; value, zone shape, material requirement, and datum references for each geometric tolerance; and the entity IDs each annotation applies to. characteristics checks each dimensional callout against the faces it controls, and reports satisfied or violated where that is arithmetic — a diameter read from the cylindrical faces the callout names — and unresolved with a reason everywhere else, so a callout that was not checked cannot be mistaken for one that was. Check value_resolved before comparing anything yourself. It is false when the magnitude could not be read and is reported as 0.0, which is what a genuine zero callout also reports; a location dimension defining a tolerance frame has no value of its own. A basic dimension comes back not-applicable: it defines a tolerance frame and states no limit of its own. An angle or a location callout comes back unresolved with needs-frame, because the angle between two faces and a location dimension direction both depend on the frame the callout is stated in. A datum reference carries the entity IDs of the shapes its datum is attached to. Without them a tolerance naming that datum cannot be evaluated, so report the datum as unlocated rather than treating the tolerance as met. unlocated_datums names those references for you; a tolerance that carries it is not checkable, and saying which datum is missing is the useful answer.Counts report both datum references and distinct datums, because a frame names its references one by one and the same datum appears once per frame. Values are in the declared unit, the same unit this server uses for measurements. Read pmi_kind before describing what a file does or does not declare: semantic means the callouts are readable data; graphical-only means the file does show requirements, drawn rather than encoded, so say they must come from the drawing or the engineer instead of saying the model declares none; none means it declares nothing at all. Use the artifact reference from inspect; entity IDs are valid only for that revision.
| Name | Required | Description | Default |
|---|---|---|---|
| uri | Yes | STEP file to read, as a file: URI or an absolute filesystem path. | |
| include | No | Sections to include: dimensions, tolerances, datums. Default: all three. Example: ["tolerances"]. |
Output Schema
| Name | Required | Description |
|---|---|---|
| units | Yes | |
| counts | Yes | |
| datums | No | |
| artifact | Yes | |
| pmi_kind | Yes | |
| warnings | Yes | |
| unit_note | No | |
| dimensions | No | |
| characteristics | No | |
| coordinate_frame | Yes | |
| geometric_tolerances | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Although annotations already mark this as a safe read-only operation, the description adds substantial behavioral context: how unresolved values arise, why basic dimensions are not-applicable, why angles and location callouts need a frame, how unlocated datums affect checkability, and that entity IDs are revision-bound. This goes well beyond the 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 purpose is front-loaded in the first sentence and the rest is dense with necessary domain guidance. It is longer than typical, but most sentences carry checkable behavioral rules; a small amount of repetition around unresolved callouts could be trimmed.
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 of PMI/GD&T semantics, the description is complete enough for an agent to interpret the output correctly, especially alongside the existing output schema. It covers value resolution, frame dependence, datum location, pmi_kind distinctions, and unit assumptions.
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 100%, so both parameters are already documented. The description reinforces that the URI should come from inspect and that entity IDs are valid only for that revision, but it adds little about the include parameter beyond the schema's own enum values.
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 opens with a specific verb and resource: 'Report the dimensions, geometric tolerances, and datums that a STEP artifact declares, as data.' It clearly distinguishes this from sibling tools like inspect and measure by emphasizing declared PMI data rather than file discovery or measurement.
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 gives explicit usage guidance throughout: check value_resolved before comparing, treat unresolved callouts as not checkable, interpret pmi_kind before saying a file declares nothing, and use the artifact reference from inspect. These are direct when/when-not instructions tied to the tool's domain.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
diffCompare Step VersionsARead-onlyIdempotent
Compare baseline and candidate STEP artifacts, as filesystem paths or file: URIs. Returns both content revisions, geometry deltas in the baseline declared unit, declared PMI counts (dimensions, geometric tolerances, datums, and how many tolerance values could not be read), and parsed document facts: schema, product names/count, assembly flag, authoring system, and organization. The PMI counts show whether a revision added or dropped callouts; they compare how many callouts exist, not whether any is met. These are file-level facts; they do not explain design intent.
| Name | Required | Description | Default |
|---|---|---|---|
| baseline | Yes | Original STEP artifact. | |
| candidate | Yes | Modified STEP artifact. |
Output Schema
| Name | Required | Description |
|---|---|---|
| pmi | Yes | |
| units | Yes | |
| deltas | Yes | |
| inputs | Yes | |
| exchange | No | |
| providers | Yes | |
| unit_note | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, it discloses what is returned (deltas expressed in the baseline's declared unit, PMI counts, document facts) and adds interpretive caveats the annotations cannot carry: PMI counts show presence of callouts, not whether any is satisfied, and file-level facts do not explain design intent. That is real behavioral context an agent needs to avoid misreporting results.
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 core action and accepted input forms come first, then the return contents, then the interpretation caveats. Four dense sentences, each adding a distinct fact, with no redundant restatement of the name or schema.
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?
With an output schema present and both parameters documented, the description covers the remaining gaps: unit conventions for deltas, what is and isn't included in PMI counts, and the scope limit of the comparison. Nothing needed to call it correctly is absent.
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 description coverage is 100% and already documents that each uri is a file: URI or absolute path, so the description's repeat of that phrasing adds little. Baseline 3 applies since the schema carries the parameter burden.
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?
States a specific verb and resource ('Compare baseline and candidate STEP artifacts') plus the accepted input forms. The comparison framing clearly separates it from siblings like inspect, measure, and describe_pmi, which operate on a single artifact.
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 comparison intent implies when to use it, but the description never explicitly routes the agent: it doesn't say to use diff instead of running inspect twice, or state prerequisites (same unit system, both files must exist). Usage is inferable but not spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_entitiesFind Model EntitiesARead-onlyIdempotent
Find faces, edges, vertices, or solid bodies in the revision-bound artifact returned by inspect, optionally scoped to an assembly component_name. Use this before measure, because every measurement names entity IDs rather than coordinates, and follow pagination until has_more is false whenever a count or a minimum matters. Faces support surface_type, area, and radius filters (e.g. { surface_type: "cylinder", min_radius: 2 }); edges support curve_type, length, and radius; vertices return coordinates and bodies return volume. IDs are producer- and revision-scoped: they are valid only for this server and only for the artifact revision that returned them, so never reuse them after the file changes or in another tool. Occurrence IDs distinguish repeated component instances. distance takes sources/targets; every other measure kind takes entity_ids, and cad://help lists the required fields for each kind.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum entities to return in this page (default 50). | |
| offset | No | Entities to skip; follow pagination.has_more to page. | |
| artifact | Yes | Revision-bound STEP reference from inspect (uri + sha256 revision). The revision must still match the file on disk. | |
| max_area | No | Faces only: maximum face area in mm². | |
| min_area | No | Faces only: minimum face area in mm². | |
| curve_type | No | Edges only: keep edges of this curve type. | |
| entity_ids | No | Optional explicit ids to return; each must match entity_type (e.g. ["face:3"]). | |
| max_length | No | Edges only: maximum edge length in mm. | |
| max_radius | No | Faces/edges only: maximum radius in mm. | |
| min_length | No | Edges only: minimum edge length in mm. | |
| min_radius | No | Faces/edges only: minimum radius in mm. | |
| entity_type | Yes | Entity category to search. | |
| surface_type | No | Faces only: keep faces of this surface type. | |
| component_name | No | Optional component scope from inspect.structure.component_occurrences; use the base name for all repeated instances or the full name#instance ID for one occurrence. |
Output Schema
| Name | Required | Description |
|---|---|---|
| query | Yes | |
| units | Yes | |
| artifact | Yes | |
| entities | Yes | |
| unit_note | No | |
| pagination | Yes | |
| bounds_method | No | |
| coordinate_frame | Yes | |
| entity_id_scheme | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses revision-bound ID validity, producer/server scoping, pagination behavior, occurrence ID semantics, and the distinction between distance and other measure inputs. These are important behavioral constraints that are not captured by readOnlyHint, idempotentHint, or destructiveHint.
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 dense but generally front-loaded, starting with what the tool finds and when to use it. Most sentences earn their place, though the final measure-related guidance is tangential enough to keep it from being maximally concise.
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 14 parameters, nested artifact object, output schema, and annotations, the description provides enough context to call the tool correctly: it covers filters, pagination, revision binding, component scoping, and downstream use by measure. No critical agent-facing behavior appears missing.
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 100%, so the schema already documents all 14 parameters. The description adds useful semantic context by explaining face and edge filter combinations, giving an example such as { surface_type: "cylinder", min_radius: 2 }, and clarifying component_name occurrence scoping.
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 states a specific verb and resource: find faces, edges, vertices, or solid bodies in the revision-bound artifact returned by inspect. It also distinguishes the tool from its sibling measure by explaining that find_entities should be used first because measurements name entity IDs rather than coordinates.
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 gives explicit usage guidance: use before measure, follow pagination until has_more is false when counts or minimums matter, scope by component_name when needed, and never reuse IDs after the file changes or in another tool. It also explains that distance measurements use sources/targets while every other measure kind uses entity_ids, and points to cad://help for required fields.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inspectInspect Model OverviewARead-onlyIdempotent
Inspect a local STEP artifact by filesystem path or file: URI. Returns its content revision with dimensions, counts, and B-rep validity. Call this first; use the returned artifact reference for entity searches and measurements. Lengths are in the declared unit, which is labelled on every result. Bounding boxes are conservative envelopes, and volume is null when the file has no solid material. Use include to request only size, counts, and/or health sections.
| Name | Required | Description | Default |
|---|---|---|---|
| uri | Yes | STEP file to read, as a file: URI or an absolute filesystem path. | |
| include | No | Sections to return. Omit for all three; ask for fewer to save context on a large assembly. |
Output Schema
| Name | Required | Description |
|---|---|---|
| size | No | |
| health | No | |
| artifact | Yes | |
| structure | No | |
| coordinate_frame | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the safety profile is covered. The description still adds real behavioral context beyond them: unit labelling on every result, bounding boxes being conservative envelopes rather than tight fits, and volume returning null when there is no solid material. It does not mention failure modes for unreadable or missing paths, which keeps it short of a 5.
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?
Five sentences, none wasted, with the primary action and ordering constraint front-loaded before the caveats about units, bounding boxes, and null volume. Each sentence conveys a distinct fact an agent needs.
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?
An output schema exists, so return values need not be re-explained, and the description covers the non-obvious cases that output schemas typically do not convey: which unit lengths use, that bounding boxes are conservative, and when volume is null. Complete for a two-parameter read-only inspection 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?
Schema description coverage is 100%, so both parameters are already documented, including the enumeration of size/counts/health. The description's 'use include to request only size, counts, and/or health sections' restates the schema rather than adding new semantics. Baseline 3 applies when the schema carries the parameter burden.
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?
States a specific verb and resource ('Inspect a local STEP artifact') plus the accepted input forms (filesystem path or file: URI). It also names what is returned (content revision, dimensions, counts, B-rep validity), so an agent can distinguish it from find_entities or measure without opening the schema.
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 sequences the tool ('Call this first') and routes follow-up work to siblings by saying to use the returned artifact reference 'for entity searches and measurements.' That is a clear when-to-use signal tied to concrete alternatives rather than an inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
measureMeasure GeometryARead-onlyIdempotent
Measure distance, wall thickness, draft, rays/ray grids, point geometry, planar sections, or edge continuity. Use the artifact reference and entity IDs from the same find_entities result. Lengths are in the declared unit, which is labelled on every result. Ray grids report their grid size and can be refined with max_rays up to 20000. Fetch the cad://help resource for the required fields of each kind. Returns geometric measurements only, not engineering acceptance or design recommendations.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | Measurement to perform. Each kind takes a different argument set; see the field notes here and the per-kind requirements in cad://help. | |
| checks | No | point_analysis: one or more of contains_body, classify_face, closest_face_point, surface_curvature, edge_projection. | |
| detail | No | Per-sample detail to return: "stats" (default), "samples", or "hits". | |
| origin | No | ray and ray_grid: explicit ray origin [x, y, z]. Mutually exclusive with origin_mode. | |
| points | No | point_analysis: points to test, in model coordinates (mm), up to 100. | |
| sources | No | distance only: entities to measure from (face:N, edge:N, body:N, or a component-scoped form). | |
| spacing | No | ray_grid: grid pitch in the STEP artifact’s declared length units, at most 1000. | |
| summary | No | distance only: "all" returns every pair, "minimum" (default) returns the closest pair only. | minimum |
| targets | No | distance only: entities to measure to. | |
| artifact | Yes | Revision-bound STEP reference from inspect: { uri, revision, format, units }. Rejected if the file changed since inspect. | |
| max_rays | No | ray_grid and thickness: maximum ray casts, 1 to 20000. Default 4000. Raising it allows a finer grid at proportionally higher cost. | |
| direction | No | ray and ray_grid: ray direction as an explicit [x, y, z] vector. Mutually exclusive with direction_mode. | |
| tolerance | No | continuity and point checks: geometric tolerance in millimetres. | |
| entity_ids | No | Every kind except distance: the entities to measure. Faces for thickness, draft, ray and ray_grid; edges for continuity; faces or bodies for section and point_analysis. Up to 100 IDs. | |
| origin_mode | No | ray and ray_grid: place the origin at the entity extent instead of passing origin: extent_min, extent_center (default), or extent_max. | |
| max_distance | No | ray, ray_grid and thickness: ignore hits beyond this distance in the STEP artifact’s declared length units. | |
| plane_normal | No | section: cutting-plane normal. | |
| plane_origin | No | section: a point on the cutting plane. | |
| bidirectional | No | ray and ray_grid: also shoot from the origin in the opposite direction. | |
| direction_mode | No | ray and ray_grid: "axis" shoots along the entity axis, "normal" along the entity normal (faces only). Mutually exclusive with direction. | |
| pull_direction | No | draft only: mould pull direction as an explicit [x, y, z] vector. Mutually exclusive with pull_direction_mode. | |
| pull_direction_mode | No | draft only: "axis" or "normal" shortcut for the pull direction (faces only). Mutually exclusive with pull_direction. |
Output Schema
| Name | Required | Description |
|---|---|---|
| kind | Yes | |
| units | Yes | |
| artifact | Yes | |
| subjects | Yes | |
| coordinate_frame | Yes | |
| entity_id_scheme | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already establish that this is a read-only, idempotent, non-destructive operation. The description adds useful behavioral context beyond annotations: units are declared and labelled on every result, ray grids report their grid size, max_rays can be raised to 20000, and the tool deliberately returns geometric measurements rather than engineering judgments.
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 front-loaded with the measurement kinds and then adds only operational constraints, units, ray-grid behavior, help-resource guidance, and output scope. Every sentence contributes useful selection or invocation context without becoming a parameter manual.
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, the full input schema, the output schema, and the read-only annotations, the description provides enough context for correct selection and invocation. The cad://help pointer is especially important for the kind-specific argument sets, and the output schema can carry 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 description coverage is 100%, so the input schema already carries most parameter meaning. The description adds some useful context, including that artifact and entity IDs should come from find_entities, that lengths use the declared unit, that max_rays can reach 20000, and that cad://help documents per-kind required fields, but it does not substantially explain the 22-parameter surface 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?
The description starts with a specific verb, "Measure", and enumerates the exact measurement kinds the tool performs: distance, thickness, draft, rays, point geometry, sections, and continuity. It also clarifies the boundary that results are geometric measurements only, not engineering acceptance or design recommendations, which helps distinguish it from downstream analysis 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?
It gives clear prerequisite guidance: use the artifact reference and entity IDs from the same find_entities result, and fetch cad://help for the required fields of each kind. It does not explicitly compare when to use measure versus siblings like inspect, diff, or describe_pmi, so it stops short of full when/when-not guidance.
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.
5 tool updates
v0.8.1- First observed
describe_pmi - First observed
diff - First observed
find_entities - First observed
inspect - First observed
measure
TDQS
Scored across 5 tools
The five tools form a clear pipeline (inspect → find_entities → measure/describe_pmi → diff), and descriptions explicitly state ordering and dependencies. Minor overlap remains: inspect reports dimensions/counts and describe_pmi also reports dimensions, and vertex coordinates/body volume come back from find_entities while measure covers point geometry, which could cause a misselection in edge cases.
All names are lowercase snake_case with verb-led phrasing and no style mixing. Two tools use verb_noun (find_entities, describe_pmi) while three are bare verbs (inspect, measure, diff), a minor deviation that stays readable and predictable.
Five tools is tightly scoped to the domain: load, query entities, measure, read PMI, and compare revisions. Each tool covers a distinct stage of the workflow with no redundant members.
The surface covers the core lifecycle of STEP inspection: artifact intake, entity discovery, geometry measurement, PMI interpretation, and revision diffing, including scoping by assembly component and pagination. Gaps are minor, such as no export/conversion or assembly-tree browsing as a standalone operation, though component_name scoping partly compensates.
Maintenance
Related MCP Connectors
CAD in ChatGPT and Claude: editable parts, STEP/STL/drawings, in-chat 3D, automatic checks.
- OwlCADOAuthcom.owlcad
Parametric 3D CAD for AI agents: build print-ready parts, check them, export STL, 3MF or STEP.
AI Hub for AEC — 50+ 3D formats, clash detection, ACC integration via Autodesk Platform Services.
DXF and PDF/X-4 for AI agents: structured facts, PNG renders, an interactive in-chat viewer.
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.-
- AlicenseNot gradedqualityBmaintenanceEnables conversational creation and editing of STEP CAD models through MCP clients like Codex, Claude, or Cursor, with real-time 3D browser preview and tools for primitives, booleans, mounting holes, flanges, and gripper bases.1MIT
- AlicenseNot gradedqualityAmaintenanceEnables AI agents to design, modify, and verify exact B-rep 3D CAD models by running build123d scripts on an OpenCascade kernel, with live three.js preview, collision and FDM printability checks, text-based spatial perception, user notes/sketch annotations, version history, and one-click export to OrcaSlicer.1MIT
- AlicenseAqualityBmaintenanceEnables an AI assistant to open 3D model files (STL, 3MF, Bambu Studio and OrcaSlicer projects) in a local browser viewer where the user clicks exact spots to leave feedback. Each note comes back with the part name, millimetre coordinates, surface direction and a numbered screenshot, so the assistant can revise the design and show the new version.2MIT