Ottogeo — CAD MCP Server

io.github.ottonic由 GitHub 账号 ottonic 发布v0.10.1更新于 Nov 7, 2026

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

已验证STDIO仅桌面开发者工具媒体与设计

概览

AI 生成的概览

本地 MCP 服务器,用 Open CASCADE 打开 STEP CAD 文件,让助手检查、测量并对比真实 B-rep 几何。

可以做什么
  • 检查 STEP 文件的尺寸、体积、面积、装配结构与 B-rep 健康状况,并返回绑定版本的引用
  • 按曲面类型、半径、轴或面积查找面、边、顶点和实体
  • 测量距离、壁厚、拔模、射线与射线网格、点几何、平面剖切和边连续性
  • 读取文件声明的 PMI:尺寸、几何公差和基准,以及各自对应的实体 ID
  • 对比两个 STEP 版本之间的几何、拓扑和 PMI 差异
适用场景
当助手需要 STEP 模型的精确数值而非截图估算时适用:整体尺寸、孔与凸台直径、壁厚、间隙、拔模、剖面,或两个版本之间的变化。适合在没有 CAD 软件的机器上做设计评审和面向制造的问题排查。
运行要求
通过 stdio 在本地运行,通常使用 npx cad-mcp-server。需要 Node.js 26+,系统为 Windows x64、macOS ARM64 或 Linux x64,并需要由任意 CAD 系统导出的 STEP 文件。无需 CAD 软件、许可证、账号或 API 密钥。
安装前请注意
只读且本地运行:按路径读取文件,不上传也不写入 CAD 数据。结果仅为测量得到的几何事实,不包含可制造性或设计意图结论,仍需工程判断。CAD 文件应视为敏感输入。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Ottogeo — CAD MCP Server,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

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.

来源:README.md,提交 f9ac1b1

工具

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.

输入参数uri必填include

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.

输入参数limitoffsetartifact必填max_areamin_areacurve_typeentity_idsmax_lengthmax_radiusmin_lengthmin_radiusentity_type必填另有 2 个

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.

输入参数kind必填checksdetailoriginpointssourcesspacingsummarytargetsartifact必填max_raysdirection另有 10 个

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

输入参数uri必填include

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.

输入参数baseline必填candidate必填

版本历史

1
  1. v0.10.1最新Oct 31, 2026

评分

已满足适用检查项的 90%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分
  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具必需15 分
  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分