OCCTMCP
 
部分 OCCTSwift生态系统 --请参阅生态系统图,了解此包如何位于内核、视口、网桥和AIS层之上。SemVer从v1.0.0开始稳定。
Swift实现直接在进程内调用OCCT——没有子进程,也没有JSONL编组——并公开了50个类型化的MCP工具,这些工具涵盖了创作、场景读取、变异、内省、构造、分析、I/O、网格、绘图、选择/重映射和维度覆盖。
运作原理
LLM picks a typed tool (boolean_op, transform_body, render_preview, …)
→ OCCTMCP runs the OCCT operation directly via OCCTSwift / Tools / AIS / Mesh
→ Writes BREP/STEP/PNG + manifest.json + annotations.json
→ OCCTSwiftViewport (optional) auto-reloads the 3D model对于新型几何体,键入的工具无法覆盖,LLM回落到 execute_script:任意Swift代码,带有完整的OCCTSwift API,编译并在进程内运行。
工具
50个工具,组织如下。呼叫 get_api_reference({ category: "mcp_tools" }) 一次性转储每个工具的JSON模式——这对LLM自动发现很有用。大多数流可以回答“体积是多少?”、“使其变红”、“布尔减去这些”、“渲染预览”、“在这两个面之间添加维度”、“导出到STEP”和“绘制此图”,而无需触摸 execute_script.
创作
| 工具 | 目的 |
|---|---|
execute_script | 编写并执行任意Swift CAD代码(完整的OCCTSwift API) |
get_script | 阅读最新脚本的源代码 |
get_api_reference | 按类别浏览OCCTSwift API |
场景阅读
| 工具 | 目的 |
|---|---|
get_scene | 读取当前场景清单(主体、颜色、材质) |
export_model | 列出导出的BREP/STEP/STL/OBJ文件路径 |
compare_versions | 当前场景与N个运行前场景的差异(添加/删除/外观/文件更改) |
场景突变
| 工具 | 目的 |
|---|---|
remove_body | 从场景中删除实体(manifest+BREP文件) |
clear_scene | 擦拭所有物体,可选择保留差异历史记录 |
rename_body | 更改身体的id |
set_appearance | 更新颜色/不透明度/粗糙度/金属/显示名称 |
内省
| 工具 | 目的 |
|---|---|
validate_geometry | 逐体拓扑验证(isValid,错误计数) |
compute_metrics | 体积、面积、质心、边界框、主轴 |
query_topology | 查找面/边/顶点匹配条件,返回稳定的ID |
measure_distance | 两个物体之间的最小距离+接触 |
recognize_features | 通过AAG启发式算法识别口袋和洞 |
inspect_assembly | 浏览XCAF装配树(STEP/IGES/XBF) |
建筑
| 工具 | 目的 |
|---|---|
apply_feature | 钻孔/圆角/倒角/拉伸/旋转/螺纹/布尔(FeatureSpec) |
transform_body | 平移/旋转/均匀缩放(记录重新映射的身份历史) |
boolean_op | 并集/相减/相交/拆分(每个输入历史记录用于重新映射) |
mirror_or_pattern | 镜像/线性/圆形图案→ N个新机构 |
工程分析
| 工具 | 目的 |
|---|---|
check_thickness | 薄区域标志的壁厚分析 |
analyze_clearance | 成对干扰/最小间隙 |
heal_shape | 修复进口/非水密几何形状;统计数据之前/之后 |
选择和重新映射
| 工具 | 目的 |
|---|---|
select_topology | 拾取面/边/顶点,获得稳定的 selectionId |
remap_selection | 携带 selectionIds跨越同一身体的突变(基于转换/愈合/布尔/应用特征的历史;否则采用质心启发式回退) |
find_correspondences | 地图 selectionIds从源体到目标体,这是源体的已知变换-- mirror_or_pattern 输出是典型情况 |
select_by_feature | 按特征类型批量挑选(例如所有孔边缘) |
list_selections | 检查内存中的选择注册表 |
clear_selections | 擦除注册表 |
注释和覆盖
| 工具 | 目的 |
|---|---|
add_dimension | 添加线性/角度/径向尺寸;渲染在 render_preview |
add_scene_primitive | 添加三面体/工作平面/轴/点云/边界框/diffMarker |
auto_dimension | 主范围的启发式降维 |
show_bounding_box | 添加车身的AABB作为覆盖层 |
diff_overlay | 可视化两个快照之间的差异 |
remove_scene_annotation | 按id删除维度或图元 |
list_annotations | 检查sidecar的注释 |
输入/输出
| 工具 | 目的 |
|---|---|
read_brep | 加载a .brep 从磁盘到场景 |
import_file | 多格式导入(STEP/IGES/STL/OBJ);可选XCAF组件 |
export_scene | 导出到STEP/IGES/BREP/STL/OBJ/glTF/GLB |
set_assembly_metadata | 修改XCAF文档或每个组件的元数据 |
网格和可视化
| 工具 | 目的 |
|---|---|
generate_mesh | 细分为三角形+质量指标 |
simplify_mesh | QEM网格抽取为.stl/.obj——封装OCCTSwiftMesh的 Mesh.simplified (供应商提供的网格优化器) |
render_preview | 使用测量标签和基本体覆盖进行单次PNG渲染 |
generate_drawing | 多视图ISO 128-30 DXF技术图 |
拓扑图(低级)
| 工具 | 目的 |
|---|---|
graph_validate | 验证BREP的拓扑图(原始路径) |
graph_compact | 删除未引用的图形节点;写入重建的BREP |
graph_dedup | 消除共享曲面/曲线几何图形的重复 |
graph_ml | 将拓扑+UV/边缘样本导出为ML友好的JSON |
feature_recognize | 口袋+孔(原始BREP路径; recognize_features 是场景感知包装器) |
实现
此仓库并排提供了两个实现:
- 迅速 (
Sources/,Package.swift)--那个 主要的,重要的 服务器。正在使用以下工具对OCCTSwift/OCCTSwiftMesh/OCCTSwiftTools/OCCTwiftAIS/DrawingComposer进行处理 官方Swift MCP SDK.50个工具。macOS 15+(OCCT.xcframework arm64平台)。 - 节点/TypeScript (
src/,dist/)——最初的实施。炮弹发射到occtkitCLI适用于Swift端的所有内容。36个工具(v0.4之前的曲面;选择/重映射/注释仅限Swift)。如果您无法运行macOS二进制文件,则很有用。
两者都使用stdio MCP,读/写相同的清单格式。
先决条件
- macOS 15+(用于Swift实现)
- Swift 6.1+/Xcode 16+
- 仅适用于Node实现:Node.js 18+,以及 OCCTSwiftScripts 所以
occtkit开着$PATH(或make install它
设置
快速实施(推荐)
git clone https://github.com/gsdali/OCCTMCP.git
cd OCCTMCP
swift build -c release在克劳德代码的 .mcp.json:
{
"mcpServers": {
"occtmcp": {
"command": "/path/to/OCCTMCP/.build/release/occtmcp-server"
}
}
}Swift包发布在 Swift包索引.
节点实现
git clone https://github.com/gsdali/OCCTMCP.git
cd OCCTMCP
npm install
npm run build在 .mcp.json:
{
"mcpServers": {
"occtmcp": {
"command": "node",
"args": ["/path/to/OCCTMCP/dist/index.js"]
}
}
}示例
LLM可以通过编写键入工具来创建CAD模型——大多数日常流程从未涉及 execute_script:
boolean_op(op: "subtract", aBodyId: "block", bBodyId: "hole", outputBodyId: "drilled")
→ "drilled" body added to the scene
select_topology(bodyId: "drilled", kind: "face", limit: 1)
→ returns selectionId "sel:drilled#face[12]"
add_dimension(kind: "linear", anchors: [...]) ; render_preview()对于新颖的几何,请进入 execute_script 使用完整的OCCTSwift API:
import OCCTSwift
import ScriptHarness
let ctx = ScriptContext()
let C = ScriptContext.Colors.self
let box = Shape.box(width: 40, height: 30, depth: 20)!
let hole = Shape.cylinder(radius: 5, height: 30)!
.translated(by: SIMD3(20, -1, 10))!
let result = box.subtracting(hole)!
let filleted = result.filleted(radius: 2.0)!
try ctx.add(filleted, id: "part", color: C.steel, name: "Bracket")
try ctx.emit(description: "Filleted bracket with mounting hole")API类别
这 get_api_reference 该工具提供以下文档:
- 原语 --盒子、圆柱体、球体、圆锥体、环面、楔形
- 清扫 --拉伸、旋转、扫管、放样、直尺
- 布尔运算 --并集、相减、相交、剖分
- 修改 --圆角、倒角、外壳、偏移、拔模斜度、缺陷
- 变换 --平移、旋转、缩放、镜像
- 电线 --矩形、圆形、多边形、样条曲线、螺旋、偏移
- 曲线2d/3d --直线、圆弧、椭圆、B样条曲线、贝塞尔曲线、插值
- 表面 --平面、圆柱体、圆锥体、球体、挤压、旋转、板
- 分析 --体积、面积、距离、边界、验证
- 进出口 --STL、STEP、IGES、BREP、OBJ、PLY
- mcp_tools --每个MCP工具的JSON模式(便于LLM自动发现)
版本控制
OCCTMCP如下 语义化版本Swift港口到达 v1.0.0 2026年5月9日,与原始Node实现相比,功能完成,加上一层仅限Swift的选择/重映射/注释工具。
发布在GitHub上标记。这 main SPI跟踪的是分支。
许可证
LGPL-2.1或更高版本——与 OCCTSwift.
