occtmcp MCP Server

MCP server that gives LLMs the ability to author, inspect, and iterate on 3D CAD models with OpenCASCADE via the OCCTSwift family.

Local serverstdioLGPL-2.1-or-later

What is the occtmcp MCP Server?

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.

Local setup

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.

Source

Project documentation · Repository · Discovery listing. This profile records the public documentation checked on 2026-10-08.

Recorded tools

Check the linked publisher documentation and your connected client's tool list. Names and availability can vary with the server version and account permissions.

ToolWhat it does
execute_scriptWrite & execute arbitrary Swift CAD code (full OCCTSwift API)
get_scriptRead the most recent script's source
get_api_referenceBrowse OCCTSwift API by category
get_sceneRead current scene manifest (bodies, colors, materials)
export_modelList exported BREP / STEP / STL / OBJ file paths
compare_versionsDiff current scene vs N runs ago (added / removed / appearance / file changed)
remove_bodyDelete a body from the scene (manifest + BREP file)
clear_sceneWipe all bodies, optionally keep diff history
rename_bodyChange a body's id
set_appearanceUpdate color / opacity / roughness / metallic / display name
validate_geometryPer-body topology validation (isValid, error counts)
compute_metricsVolume, area, centroid, bounding box, principal axes
query_topologyFind faces / edges / vertices matching criteria, return stable IDs. Edge results (119) carry endpoints (every kind) plus a unit direction for LINE edges, and…
measure_distanceMin distance + contacts between two bodies
measure_deviationSigned, spatially-resolved surface deviation between two bodies — max / rms / mean / p95 / signedMean (systematic proud(+)/shy(−) bias) each way +…
recognize_featuresPockets and holes via AAG heuristics
inspect_assemblyWalk an XCAF assembly tree (STEP / IGES / XBF)
apply_featureDrill / fillet / chamfer / extrude / revolve / thread / boolean (FeatureSpec)
transform_bodyTranslate / rotate / uniform-scale (records identity history for remap)
boolean_opUnion / subtract / intersect / split (records per-input history for remap)
mirror_or_patternMirror / linear / circular pattern → N new bodies
check_thicknessWall-thickness analysis with thin-region flags
analyze_clearancePairwise interference / minimum clearance
heal_shapeHeal imported / non-watertight geometry; before/after stats
FamilyMeasures to
deviation_histogramSigned point-to-surface deviation distribution: μ / σ / median / p95 / proud-shy extremes, percent within ±tolerance, bucket histogram + optional PNG. A…
cross_section_compareSlice 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_heatmapRender the candidate surface coloured by signed distance (proud = red, shy = blue) through a diverging colormap with a colorbar legend. Triangles whose sign…
overlay_renderRender the reference mesh semi-transparent over the opaque candidate solid — see the departure in 3D
segment_mesh_zonesSplit 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_sweepSweep a zone (or whole body) along an axis; report maximal within-tolerance runs (loftable extents) and deviation intervals between them, each with world…
list_zonesInspect the zone registry ( /zones.json)
clear_zonesWipe the zone registry, optionally for one body
mesh_diagnosePrintability-check-list integrity report: watertight, edge/vertex-manifold, orientable, connected components, boundary loops, Euler characteristic / genus…
mesh_thicknessMesh-domain wall thickness via the ray method (normal-opposite, first-hit, optional cone-averaged median): the complement to check_thickness for raw meshes.…
detect_symmetryDetect reflective (mirror-plane) symmetry: 3 PCA candidate planes through the area-weighted centroid, each verified by reflecting sampled points and…
mesh_curvaturePer-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_topologyPick faces / edges / vertices, get a stable selectionId. Edge anchors (119) carry endpoints (every kind) plus a unit direction for LINE edges, and…
remap_selectionCarry selectionIds across mutations of the same body (history-based for transform / heal / boolean / apply_feature; centroid heuristic fallback otherwise)
find_correspondencesMap 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_featureBulk pick by feature kind (e.g. all hole edges)
list_selectionsInspect the in-memory selection registry
clear_selectionsWipe the registry
add_dimensionAdd a linear / angular / radial dimension; renders in render_preview
add_scene_primitiveAdd trihedron / workPlane / axis / pointCloud / boundingBox / diffMarker
auto_dimensionHeuristic dimension drop for the principal extents
show_bounding_boxAdd a body's AABB as an overlay
diff_overlayVisualize the diff between two snapshots
remove_scene_annotationRemove a dimension or primitive by id
list_annotationsInspect the annotations sidecar
read_brepLoad a .brep from disk into the scene (allowInvalid loads a loose-face / invalid shape for measurement)
import_fileMulti-format import (STEP / IGES / STL / OBJ); optional XCAF assembly; allowInvalid for in-progress reconstructions
export_sceneExport to STEP / IGES / BREP / STL / OBJ / glTF / GLB
set_assembly_metadataModify XCAF document or per-component metadata
generate_meshTessellate to triangles + quality metrics
simplify_meshQEM mesh decimation to .stl/.obj — wraps OCCTSwiftMesh's Mesh.simplified (vendored meshoptimizer)
render_previewOne-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_pointCast a render_preview-framed ray through a pixel → world surface point + selectionId (usable as an add_dimension anchor)
generate_drawingMulti-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_validateValidate a BREP's topology graph (raw path)
graph_compactDrop unreferenced graph nodes; write rebuilt BREP
graph_dedupDeduplicate shared surface / curve geometry
graph_mlExport topology + UV/edge samples as ML-friendly JSON
graph_selectLocal graph adjacency / selection: face neighbours (+ convexity), edge faces, vertex edges, face-adjacency (gAAG), edge classes
feature_recognizePockets + holes (raw BREP path; recognize_features is the scene-aware wrapper)
reconstruct_get_graphExport the attributed graph as JSON — topology counts, annotated nodes (with reconstruct. attributes), instance clusters. Starts a session from a bodyId or…
reconstruct_set_decisionAnnotate a node's decidedBy (geometric / ml / human) and/or accept-reject a proposed fit
reconstruct_force_fitOverride a node's fitted surface type (e.g. force cylinder)
reconstruct_confirm_instancesConfirm / reject a congruence cluster ("these N nodes are one part definition")
reconstruct_export_sessionWrite the session snapshot to disk (byte-stable JSON)
reconstruct_import_sessionReload a snapshot file into a session

How to install the occtmcp MCP Server

{
  "mcpServers": {
    "occtmcp": {
      "command": "/path/to/OCCTMCP/.build/release/occtmcp-server"
    }
  }
}

From the project documentation. Replace placeholders and example paths before connecting.