MCP server that gives LLMs the ability to author, inspect, and iterate on 3D CAD models with OpenCASCADE via the OCCTSwift family.
occtmcp is an MCP project maintained in the secondmouseau/occtmcp repository. The maintainer describes its purpose as “MCP server that gives LLMs the ability to author, inspect, and iterate on 3D CAD models with OpenCASCADE via the OCCTSwift family”. Read the project documentation for the complete scope.
The project provides a local client configuration using /path/to/OCCTMCP/.build/release/occtmcp-server. Follow the repository’s build and installation steps before copying it, and replace example paths with the paths on your own computer.
Project documentation · Repository · Discovery listing. This profile records the public documentation checked on 2026-10-08.
Check the linked publisher documentation and your connected client's tool list. Names and availability can vary with the server version and account permissions.
| Tool | What it does |
|---|---|
| execute_script | Write & execute arbitrary Swift CAD code (full OCCTSwift API) |
| get_script | Read the most recent script's source |
| get_api_reference | Browse OCCTSwift API by category |
| get_scene | Read current scene manifest (bodies, colors, materials) |
| export_model | List exported BREP / STEP / STL / OBJ file paths |
| compare_versions | Diff current scene vs N runs ago (added / removed / appearance / file changed) |
| remove_body | Delete a body from the scene (manifest + BREP file) |
| clear_scene | Wipe all bodies, optionally keep diff history |
| rename_body | Change a body's id |
| set_appearance | Update color / opacity / roughness / metallic / display name |
| validate_geometry | Per-body topology validation (isValid, error counts) |
| compute_metrics | Volume, area, centroid, bounding box, principal axes |
| query_topology | Find faces / edges / vertices matching criteria, return stable IDs. Edge results (119) carry endpoints (every kind) plus a unit direction for LINE edges, and… |
| measure_distance | Min distance + contacts between two bodies |
| measure_deviation | Signed, spatially-resolved surface deviation between two bodies — max / rms / mean / p95 / signedMean (systematic proud(+)/shy(−) bias) each way +… |
| recognize_features | Pockets and holes via AAG heuristics |
| inspect_assembly | Walk an XCAF assembly tree (STEP / IGES / XBF) |
| apply_feature | Drill / fillet / chamfer / extrude / revolve / thread / boolean (FeatureSpec) |
| transform_body | Translate / rotate / uniform-scale (records identity history for remap) |
| boolean_op | Union / subtract / intersect / split (records per-input history for remap) |
| mirror_or_pattern | Mirror / linear / circular pattern → N new bodies |
| check_thickness | Wall-thickness analysis with thin-region flags |
| analyze_clearance | Pairwise interference / minimum clearance |
| heal_shape | Heal imported / non-watertight geometry; before/after stats |
| Family | Measures to |
| deviation_histogram | Signed point-to-surface deviation distribution: μ / σ / median / p95 / proud-shy extremes, percent within ±tolerance, bucket histogram + optional PNG. A… |
| cross_section_compare | Slice both bodies at N stations across their shared axis-extent overlap; per-section signed-mean / RMS / area-ratio / centroid-offset + a pose-robust radial… |
| signed_deviation_heatmap | Render the candidate surface coloured by signed distance (proud = red, shy = blue) through a diverging colormap with a colorbar legend. Triangles whose sign… |
| overlay_render | Render the reference mesh semi-transparent over the opaque candidate solid — see the departure in 3D |
| segment_mesh_zones | Split a body's mesh into surface zones; each zone gets a stable zone: id, a fitted primitive (kind/params/residual), and (optionally) a categorical PNG… |
| zone_continuity_sweep | Sweep a zone (or whole body) along an axis; report maximal within-tolerance runs (loftable extents) and deviation intervals between them, each with world… |
| list_zones | Inspect the zone registry ( /zones.json) |
| clear_zones | Wipe the zone registry, optionally for one body |
| mesh_diagnose | Printability-check-list integrity report: watertight, edge/vertex-manifold, orientable, connected components, boundary loops, Euler characteristic / genus… |
| mesh_thickness | Mesh-domain wall thickness via the ray method (normal-opposite, first-hit, optional cone-averaged median): the complement to check_thickness for raw meshes.… |
| detect_symmetry | Detect reflective (mirror-plane) symmetry: 3 PCA candidate planes through the area-weighted centroid, each verified by reflecting sampled points and… |
| mesh_curvature | Per-vertex discrete curvature (Rusinkiewicz per-face tensor) over a body's own welded mesh: principal curvatures k1/k2, mean, gaussian, plus a colored render… |
| select_topology | Pick faces / edges / vertices, get a stable selectionId. Edge anchors (119) carry endpoints (every kind) plus a unit direction for LINE edges, and… |
| remap_selection | Carry selectionIds across mutations of the same body (history-based for transform / heal / boolean / apply_feature; centroid heuristic fallback otherwise) |
| find_correspondences | Map selectionIds from a source body onto a target body that's a known transform of the source — mirror_or_pattern outputs are the typical case |
| select_by_feature | Bulk pick by feature kind (e.g. all hole edges) |
| list_selections | Inspect the in-memory selection registry |
| clear_selections | Wipe the registry |
| add_dimension | Add a linear / angular / radial dimension; renders in render_preview |
| add_scene_primitive | Add trihedron / workPlane / axis / pointCloud / boundingBox / diffMarker |
| auto_dimension | Heuristic dimension drop for the principal extents |
| show_bounding_box | Add a body's AABB as an overlay |
| diff_overlay | Visualize the diff between two snapshots |
| remove_scene_annotation | Remove a dimension or primitive by id |
| list_annotations | Inspect the annotations sidecar |
| read_brep | Load a .brep from disk into the scene (allowInvalid loads a loose-face / invalid shape for measurement) |
| import_file | Multi-format import (STEP / IGES / STL / OBJ); optional XCAF assembly; allowInvalid for in-progress reconstructions |
| export_scene | Export to STEP / IGES / BREP / STL / OBJ / glTF / GLB |
| set_assembly_metadata | Modify XCAF document or per-component metadata |
| generate_mesh | Tessellate to triangles + quality metrics |
| simplify_mesh | QEM mesh decimation to .stl/.obj — wraps OCCTSwiftMesh's Mesh.simplified (vendored meshoptimizer) |
| render_preview | One-shot PNG render with measurement labels and primitive overlays. Mesh-scale bodies (imported scans, >10k edges) render via a linear path in seconds — edge… |
| pick_surface_point | Cast a render_preview-framed ray through a pixel → world surface point + selectionId (usable as an add_dimension anchor) |
| generate_drawing | Multi-view ISO 128-30 DXF technical drawing — bodyId for a single part, or bodyIds (2+) for a general-arrangement assembly sheet with a parts list + balloons |
| graph_validate | Validate a BREP's topology graph (raw path) |
| graph_compact | Drop unreferenced graph nodes; write rebuilt BREP |
| graph_dedup | Deduplicate shared surface / curve geometry |
| graph_ml | Export topology + UV/edge samples as ML-friendly JSON |
| graph_select | Local graph adjacency / selection: face neighbours (+ convexity), edge faces, vertex edges, face-adjacency (gAAG), edge classes |
| feature_recognize | Pockets + holes (raw BREP path; recognize_features is the scene-aware wrapper) |
| reconstruct_get_graph | Export the attributed graph as JSON — topology counts, annotated nodes (with reconstruct. attributes), instance clusters. Starts a session from a bodyId or… |
| reconstruct_set_decision | Annotate a node's decidedBy (geometric / ml / human) and/or accept-reject a proposed fit |
| reconstruct_force_fit | Override a node's fitted surface type (e.g. force cylinder) |
| reconstruct_confirm_instances | Confirm / reject a congruence cluster ("these N nodes are one part definition") |
| reconstruct_export_session | Write the session snapshot to disk (byte-stable JSON) |
| reconstruct_import_session | Reload a snapshot file into a session |
{
"mcpServers": {
"occtmcp": {
"command": "/path/to/OCCTMCP/.build/release/occtmcp-server"
}
}
}From the project documentation. Replace placeholders and example paths before connecting.
Give your coding agent the full DevTools toolbox: traces, network, console, heap snapshots and Lighthouse.
Workers, KV, R2 and D1 by conversation — Cloudflare's official remote servers for building and observability.
Dashboards, Prometheus and Loki queries, incidents and alerts — observability by conversation.
Errors with full context — stack traces, issue triage and AI-powered root-cause analysis from Sentry's server.
Connect Flutter applications with AI coding assistants via the Model Context Protocol.
Enables natural language interaction with Splunk Enterprise and Cloud for searching data and managing resources.