CAD编程建模服务器

Onshape MCP服务器提供对Onshape REST API的全面编程访问,支持参数化草图、特征管理、装配分析和导出功能,适用于自动化CAD设计和工程分析。

  • by hedless
  • Python
  • 本地部署
  • 158 星标
  • 更新于
在 GitHub 查看 hedless/onshape-mcp

使用说明

Onshape MCP服务器

增强型模型上下文协议(MCP)服务器,用于使用Onshape进行程序化CAD建模。

特性

此MCP服务器提供对Onshape的REST API的全面编程访问,实现:

核心能力(45个工具)

  • 文档发现 -搜索并列出项目,查找Part Studios,浏览工作区
  • 参数化草图 -标准平面上的直角、圆、直线和圆弧
  • 功能管理 -拉伸、旋转、加厚、圆角、倒角、布尔和图案特征
  • 装配管理 -创建装配、添加实例、定位零件、创建配合(紧固、滑动、旋转、圆柱形)
  • 装配分析 -干涉检查、位置验证、面部坐标系、身体细节
  • 变量表 -用于参数化设计的Onshape变量表的读写
  • 功能脚本 -计算FeatureScript表达式,获取边界框
  • 出口 -将零件工作室和组件导出到STL、STEP、PARASOLID、GLTF、OBJ
  • 零件工作室管理 -以编程方式创建和管理零件工作室

安装

先决条件

  • Python 3.10或更高版本
  • 具有API访问权限的Onshape帐户
  • Onshape API密钥(访问密钥和密钥)

设置

  1. 克隆存储库:
git clone https://github.com/hedless/onshape-mcp.git
cd onshape-mcp
  1. 创建虚拟环境:
python -m venv venv
source venv/bin/activate  # On Windows: venv\Scripts\activate
  1. 安装依赖项:
pip install -e .
  1. 设置环境变量:
export ONSHAPE_ACCESS_KEY="your_access_key"
export ONSHAPE_SECRET_KEY="your_secret_key"

或者创建一个 .env 文件:

ONSHAPE_ACCESS_KEY=your_access_key
ONSHAPE_SECRET_KEY=your_secret_key

获取Onshape API键

  1. 首选 Onshape开发者门户
  2. 使用您的Onshape帐户登录
  3. 创建新的API密钥
  4. 复制访问密钥和密钥

用法

运行服务器

onshape-mcp

或者直接使用Python:

python -m onshape_mcp.server

使用Claude代码进行配置

添加到您的 ~/.claude/mcp.json:

{
  "mcpServers": {
    "onshape": {
      "command": "/absolute/path/to/onshape-mcp/venv/bin/python",
      "args": ["-m", "onshape_mcp.server"],
      "env": {
        "ONSHAPE_ACCESS_KEY": "your_access_key_here",
        "ONSHAPE_SECRET_KEY": "your_secret_key_here"
      }
    }
  }
}

重要提示:

  • 使用 绝对路径 到虚拟环境的Python可执行文件
  • 找到你的路: cd onshape-mcp && pwd 获取目录路径
  • 在Windows上:使用 C:/path/to/onshape-mcp/venv/Scripts/python.exe
  • 使用中的实际密钥替换API密钥 Onshape开发者门户
  • 重新启动Claude代码 编辑后 mcp.json

验证它是否有效: 问Claude Code:“你能列出我的Onshape文档吗?”

有关完整的设置说明,请参阅 docs/QUICK_START.md.

可用工具

文档和导航工具

工具 说明
list_documents 列出具有过滤和排序功能的文档
search_documents 按名称或描述搜索文档
get_document 获取详细的文档信息
get_document_summary 获取包含工作区和元素的全面摘要
find_part_studios 使用可选名称过滤查找零件工作室
get_elements 获取工作区中的所有元素(零件工作室、装配、BOM)
get_parts 从零件工作室获取所有零件
create_document 创建新的Onshape文档
create_part_studio 在文档中创建新的零件工作室

装配工具

工具 说明
create_assembly 在文档中创建新程序集
add_assembly_instance 将零件或子部件实例添加到部件中
get_assembly 获取包含实例和引用的程序集结构
transform_instance 应用相对变换(英寸/度)。在固定实例上失败。
set_instance_position 设置绝对位置(重置旋转)。在固定实例上失败。
align_instance_to_face 将一个实例与另一个实例的面对齐
create_mate_connector 在具有偏移的面上创建显式配合连接器
create_fastened_mate 在两个实例之间创建刚性(紧固)配合
create_slider_mate 创建线性运动伙伴。第一个实例相对于第二个实例滑动。
create_revolute_mate 创建旋转配合。第一个实例相对于第二个实例旋转。
create_cylindrical_mate 创建滑动+旋转配合。第一个实例相对于第二个实例移动。
delete_feature 从部件或零件工作室中删除特征(配合、配合连接器等)

装配分析工具

工具 说明
get_assembly_positions 获取所有实例的位置、大小和边界(以英寸为单位)
get_assembly_features 获取所有功能及其状态(OK/ERROR/SUPRESSED)
get_body_details 获取所有零件的面ID、曲面类型、法线和原点
get_face_coordinate_system 查询特定面的朝外坐标系
check_assembly_interference 使用边界框检测检查重叠/干涉部分

草图工具栏

工具 说明
create_sketch_rectangle 带有可选宽度/高度变量引用的矩形
create_sketch_circle 带圆心和半径的圆
create_sketch_line 从起点到终点的直线
create_sketch_arc 带圆心、半径、起始角和终止角的圆弧

支持所有草图工具 plane (正面/顶部/右侧)和 name 参数。尺寸单位为英寸。

特征工具

工具 说明
create_extrude 使用深度、可选变量引用和操作类型拉伸草图
create_thicken 将草图加厚为具有可选中平面/相反方向的实体
create_revolve 围绕具有角度和操作类型的轴(X/Y/Z)旋转草图
create_fillet 通过带半径的边ID对边进行圆角处理(支持可变引用)
create_chamfer 按带距离的边ID斜切边(支持可变参照)
create_linear_pattern 沿轴(X/Y/Z)重复特征,包括距离和计数
create_circular_pattern 围绕具有计数和角度分布的轴重复特征
create_boolean 通过确定性ID合并、相减或相交实体

变量和特征工具

工具 说明
get_variables 从Part Studio变量表中获取所有变量
set_variable 设置或更新变量(例如。, "0.75 in")
get_features 从Part Studio获取所有功能

功能脚本工具

工具 说明
eval_featurescript 计算FeatureScript lambda表达式(只读)
get_bounding_box 获取Part Studio中所有零件的严格边界框

导出工具

工具 说明
export_part_studio 导出到STL、STEP、PARASOLID、GLTF或OBJ(可选 partId 过滤器)
export_assembly 导出到STL、STEP或GLTF

建筑

onshape_mcp/
├── api/
│   ├── client.py         # HTTP client with HMAC authentication
│   ├── documents.py      # Document discovery & navigation
│   ├── partstudio.py     # Part Studio management
│   ├── variables.py      # Variable table management
│   ├── assemblies.py     # Assembly lifecycle, mates & features
│   ├── export.py         # Part Studio & Assembly export
│   └── featurescript.py  # FeatureScript evaluation
├── builders/
│   ├── sketch.py         # Sketch builder (rectangle, circle, line, arc, polygon)
│   ├── extrude.py        # Extrude feature builder
│   ├── revolve.py        # Revolve feature builder
│   ├── fillet.py         # Fillet feature builder
│   ├── chamfer.py        # Chamfer feature builder
│   ├── boolean.py        # Boolean operations (union, subtract, intersect)
│   ├── pattern.py        # Linear & circular pattern builders
│   ├── mate.py           # Mate connector & mate builders (face-based)
│   └── thicken.py        # Thicken feature builder
├── analysis/
│   ├── interference.py   # Bounding-box interference detection
│   ├── positioning.py    # Instance position queries & alignment
│   └── face_cs.py        # Face coordinate system queries
├── tools/
│   └── __init__.py       # MCP tool definitions
└── server.py             # Main MCP server (45 tools)

例子

示例1:查找并处理项目

# Search for your project
documents = await search_documents(query="robot arm", limit=5)

# Get the first matching document
doc_id = documents[0].id

# Get comprehensive summary
summary = await get_document_summary(doc_id)

# Find Part Studios in main workspace
workspace_id = summary['workspaces'][0].id
part_studios = await find_part_studios(doc_id, workspace_id, namePattern="base")

# Now work with the Part Studio
elem_id = part_studios[0].id

示例2:创建参数化文件柜

# Set variables
await set_variable(doc_id, ws_id, elem_id, "width", "39.5 in")
await set_variable(doc_id, ws_id, elem_id, "depth", "16 in")
await set_variable(doc_id, ws_id, elem_id, "height", "67.125 in")
await set_variable(doc_id, ws_id, elem_id, "wall_thickness", "0.75 in")

# Create side panel sketch
await create_sketch_rectangle(
    doc_id, ws_id, elem_id,
    name="Side Panel",
    plane="Front",
    corner1=[0, 0],
    corner2=[16, 67.125],
    variableWidth="depth",
    variableHeight="height"
)

# Extrude to create side
await create_extrude(
    doc_id, ws_id, elem_id,
    name="Side Extrude",
    sketchFeatureId="<sketch_id>",
    depth=0.75,
    variableDepth="wall_thickness"
)

发展

运行测试

该项目具有全面的测试覆盖率 471单元测试.

# Run all tests
pytest

# Run with coverage
pytest --cov

# Run specific module tests
pytest tests/api/test_documents.py -v

# Use make commands
make test
make test-cov
make coverage-html

有关详细的测试文档,请参阅 docs/TEST.md.

代码格式化

ruff format .
ruff check .

文档

入门指南

开发与测试

API与实施

项目分析与研究

知识库和示例

路线图

当前状态

  • 文档发现和导航(10个工具)
  • 使用矩形、圆形、直线和圆弧创建草图
  • 特征工具:拉伸、旋转、加厚、圆角、倒角、布尔值、图案
  • 全装配管理:紧固、滑动、旋转和圆柱形配合,带基于面的配合连接器
  • 装配分析:干涉检查、位置验证、面坐标系
  • 变量表管理
  • FeatureScript评估和边界框查询
  • 导出到STL、STEP、PARASOLID、GLTF、OBJ
  • 471综合单元测试
  • 在多部件组件上进行了现场测试(25个实例机柜,66个功能)

在研究

  • 几何图元参照的草图平面 -从现有特征在面上创建草图(请参见 文档/草图_平面图_参考资料_GUIDE.md)
  • 查询API调查-如何以编程方式引用几何图形
  • 实体ID映射-了解Onshape的内部ID系统

近期优先事项

  • []实施 create_sketch_on_geometry() 木工正确组装橱柜
  • []草图约束(重合、平行、相切等)
  • []细木工制品的口袋切割和轮廓(护墙板、榫眼)

长期目标

  • []绘图创建
  • []物料清单(BOM)生成
  • []高级约束和关系
  • []配置参数支持

木工特殊功能

  • []细木工库(护墙板、榫槽、榫卯、燕尾榫)
  • []标准硬件模式(货架销、抽屉滑轨)
  • []剪切列表生成
  • []材料优化(板材布局)
  • []组装指令生成

贡献

欢迎投稿!请随时提交拉取请求。

许可证

MIT许可证

致谢

支持

对于问题和疑问:

  • GitHub问题:https://github.com/hedless/onshape-mcp/issues
  • Onshape API论坛:https://forum.onshape.com/