Ottogeo — CAD MCP Server

io.github.ottonicPublished by GitHub account ottonicv0.10.1Updated Nov 7, 2026

Measure STEP CAD files with your AI assistant: walls, clearances, draft, and revision diffs.

VerifiedSTDIODesktop onlyDeveloper ToolsMedia & Design

Overview

AI-generated overview

Local MCP server that opens STEP CAD files with Open CASCADE so an assistant can inspect, measure and diff real B-rep geometry.

What you can do
  • Inspect a STEP file for dimensions, volume, area, assembly structure and B-rep health, returning a revision-bound reference
  • Find faces, edges, vertices and bodies by surface type, radius, axis or area
  • Measure distance, wall thickness, draft, rays, ray grids, point geometry, planar sections and edge continuity
  • Report declared PMI: dimensions, geometric tolerances and datums with the entity IDs they apply to
  • Compare two STEP revisions for geometry, topology and PMI deltas
When to use it
Useful when an assistant needs exact numbers from a STEP model rather than estimates from a screenshot: overall size, hole and boss diameters, wall thickness, clearances, draft, cross-sections, or what changed between two revisions. It suits design review and DFM-style questioning on a machine without CAD software.
Requirements
Runs locally over stdio, typically via npx cad-mcp-server. Needs Node.js 26+ on Windows x64, macOS ARM64 or Linux x64, plus STEP files exported from any CAD system. No CAD application, license, account or API key is required.
Before you install
Read-only and local: it reads files by path and does not upload or write CAD data. Results are measured geometry facts only, not manufacturability or design-intent conclusions, so engineering judgement is still needed. Treat CAD files as sensitive input.

Installation

In SourceWeft

  1. Open Ottogeo — CAD MCP Server in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

Ottogeo — CAD MCP Server

[npm version] [npm downloads] [license] [CI]

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.

[The assistant measures a pocket floor to cross-bore distance of 0.8 mm, sections the model to confirm it, and verifies 3.0 mm in the revised STEP file.]

Quick start

Add the server to your MCP client, then point your assistant at a STEP file:

json
{  "mcpServers": {    "cad": {      "command": "npx",      "args": ["-y", "cad-mcp-server"]    }  }}

Works with any MCP client — Claude Desktop, Cursor, VS Code, and the rest.

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

ToolReturns
inspectBounding-box dimensions, volume, surface area, body and assembly structure, B-rep health, and a revision-bound reference.
find_entitiesFaces, edges, vertices, and bodies, with filters for surface type, radius, axis, and area.
measureDistance between faces, wall thickness, draft, ray casts, ray grids, point analysis, planar sections, and edge continuity.
describe_pmiDeclared dimensions (nominal with deviations or bounds), geometric tolerances (value, zone, material modifier, datums), and datums, each with the entity IDs it applies to.
diffDimension, 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_pmi reports 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 26+
  • 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

License

MIT. Third-party licenses: THIRD_PARTY_NOTICES.md.

Source: README.md at commit f9ac1b1

Tools

5

inspect

Inspect Model Overview

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.

Parametersurirequiredinclude

find_entities

Find Model Entities

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.

Parameterslimitoffsetartifactrequiredmax_areamin_areacurve_typeentity_idsmax_lengthmax_radiusmin_lengthmin_radiusentity_typerequired+2 more

measure

Measure Geometry

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.

Parameterskindrequiredchecksdetailoriginpointssourcesspacingsummarytargetsartifactrequiredmax_raysdirection+10 more

describe_pmi

Describe Model PMI and GD&T

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 fro

Parametersurirequiredinclude

diff

Compare Step Versions

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.

Parametersbaselinerequiredcandidaterequired

Version history

1
  1. v0.10.1LatestOct 31, 2026

Score

90% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts
  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts