Onshape MCP Server

Onshape MCP Server

Enables programmatic CAD modeling with Onshape's REST API, offering 45 tools for parametric sketches, feature management, assemblies, analysis, variables, and exports.

Category
访问服务器

README

Onshape MCP Server

Enhanced Model Context Protocol (MCP) server for programmatic CAD modeling with Onshape.

Features

This MCP server provides comprehensive programmatic access to Onshape's REST API, enabling:

Core Capabilities (45 tools)

  • Document Discovery - Search and list projects, find Part Studios, navigate workspaces
  • Parametric Sketches - Rectangles, circles, lines, and arcs on standard planes
  • Feature Management - Extrude, revolve, thicken, fillet, chamfer, boolean, and pattern features
  • Assembly Management - Create assemblies, add instances, position parts, create mates (fastened, slider, revolute, cylindrical)
  • Assembly Analysis - Interference checking, position verification, face coordinate systems, body details
  • Variable Tables - Read and write Onshape variable tables for parametric designs
  • FeatureScript - Evaluate FeatureScript expressions, get bounding boxes
  • Export - Export Part Studios and Assemblies to STL, STEP, PARASOLID, GLTF, OBJ
  • Part Studio Management - Create and manage Part Studios programmatically

Installation

Prerequisites

  • Python 3.10 or higher
  • Onshape account with API access
  • Onshape API keys (access key and secret key)

Setup

  1. Clone the repository:
git clone https://github.com/hedless/onshape-mcp.git
cd onshape-mcp
  1. Create a virtual environment:
python -m venv venv
source venv/bin/activate  # On Windows: venv\Scripts\activate
  1. Install dependencies:
pip install -e .
  1. Set up environment variables:
export ONSHAPE_ACCESS_KEY="your_access_key"
export ONSHAPE_SECRET_KEY="your_secret_key"

Or create a .env file:

ONSHAPE_ACCESS_KEY=your_access_key
ONSHAPE_SECRET_KEY=your_secret_key

Getting Onshape API Keys

  1. Go to Onshape Developer Portal
  2. Sign in with your Onshape account
  3. Create a new API key
  4. Copy the Access Key and Secret Key

Usage

Running the Server

onshape-mcp

Or directly with Python:

python -m onshape_mcp.server

Configuring with Claude Code

Add to your ~/.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"
      }
    }
  }
}

Important Notes:

  • Use the absolute path to your virtual environment's Python executable
  • Find your path: cd onshape-mcp && pwd to get the directory path
  • On Windows: Use C:/path/to/onshape-mcp/venv/Scripts/python.exe
  • Replace the API keys with your actual keys from Onshape Developer Portal
  • Restart Claude Code after editing mcp.json

Verify it works: Ask Claude Code: "Can you list my Onshape documents?"

For complete setup instructions, see docs/QUICK_START.md.

Available Tools

Document & Navigation Tools

Tool Description
list_documents List documents with filtering and sorting
search_documents Search documents by name or description
get_document Get detailed document information
get_document_summary Get comprehensive summary with workspaces and elements
find_part_studios Find Part Studios with optional name filtering
get_elements Get all elements (Part Studios, Assemblies, BOMs) in a workspace
get_parts Get all parts from a Part Studio
create_document Create a new Onshape document
create_part_studio Create a new Part Studio in a document

Assembly Tools

Tool Description
create_assembly Create a new Assembly in a document
add_assembly_instance Add a part or sub-assembly instance to an assembly
get_assembly Get assembly structure with instances and occurrences
transform_instance Apply a relative transform (inches/degrees). Fails on fixed instances.
set_instance_position Set absolute position (resets rotation). Fails on fixed instances.
align_instance_to_face Align one instance flush against a face of another
create_mate_connector Create an explicit mate connector on a face with offsets
create_fastened_mate Create a rigid (fastened) mate between two instances
create_slider_mate Create a linear motion mate. First instance slides relative to second.
create_revolute_mate Create a rotational mate. First instance rotates relative to second.
create_cylindrical_mate Create a slide+rotate mate. First instance moves relative to second.
delete_feature Delete a feature (mate, mate connector, etc.) from an assembly or Part Studio

Assembly Analysis Tools

Tool Description
get_assembly_positions Get positions, sizes, and bounds of all instances (in inches)
get_assembly_features Get all features with their state (OK/ERROR/SUPPRESSED)
get_body_details Get face IDs, surface types, normals, and origins for all parts
get_face_coordinate_system Query the outward-facing coordinate system for a specific face
check_assembly_interference Check for overlapping/interfering parts using bounding box detection

Sketch Tools

Tool Description
create_sketch_rectangle Rectangle with optional variable references for width/height
create_sketch_circle Circle with center point and radius
create_sketch_line Line from start point to end point
create_sketch_arc Arc with center, radius, start angle, and end angle

All sketch tools support plane (Front/Top/Right) and name parameters. Dimensions are in inches.

Feature Tools

Tool Description
create_extrude Extrude a sketch with depth, optional variable reference, and operation type
create_thicken Thicken a sketch into a solid with optional midplane/opposite direction
create_revolve Revolve a sketch around an axis (X/Y/Z) with angle and operation type
create_fillet Round edges by edge IDs with radius (supports variable references)
create_chamfer Bevel edges by edge IDs with distance (supports variable references)
create_linear_pattern Repeat features along an axis (X/Y/Z) with distance and count
create_circular_pattern Repeat features around an axis with count and angle spread
create_boolean Union, subtract, or intersect bodies by deterministic IDs

Variable & Feature Tools

Tool Description
get_variables Get all variables from a Part Studio variable table
set_variable Set or update a variable (e.g., "0.75 in")
get_features Get all features from a Part Studio

FeatureScript Tools

Tool Description
eval_featurescript Evaluate a FeatureScript lambda expression (read-only)
get_bounding_box Get the tight bounding box of all parts in a Part Studio

Export Tools

Tool Description
export_part_studio Export to STL, STEP, PARASOLID, GLTF, or OBJ (optional partId filter)
export_assembly Export to STL, STEP, or GLTF

Architecture

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)

Examples

Example 1: Finding and Working on a Project

# 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

Example 2: Creating a Parametric Cabinet

# 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"
)

Development

Running Tests

The project has comprehensive test coverage with 471 unit tests.

# 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

For detailed testing documentation, see docs/TESTING.md.

Code Formatting

ruff format .
ruff check .

Documentation

Getting Started

Development & Testing

API & Implementation

Project Analysis & Research

Knowledge Base & Examples

Roadmap

Current Status

  • Document discovery and navigation (10 tools)
  • Sketch creation with rectangles, circles, lines, and arcs
  • Feature tools: extrude, revolve, thicken, fillet, chamfer, boolean, patterns
  • Full assembly management: fastened, slider, revolute, and cylindrical mates with face-based mate connectors
  • Assembly analysis: interference checking, position verification, face coordinate systems
  • Variable table management
  • FeatureScript evaluation and bounding box queries
  • Export to STL, STEP, PARASOLID, GLTF, OBJ
  • 471 comprehensive unit tests
  • Live-tested on multi-part assemblies (25-instance cabinet with 66 features)

In Research

  • Geometry-referenced sketch planes - Create sketches on faces from existing features (see docs/SKETCH_PLANE_REFERENCE_GUIDE.md)
  • Query API investigation - How to programmatically reference geometry
  • Entity ID mapping - Understanding Onshape's internal ID system

Near-Term Priorities

  • [ ] Implement create_sketch_on_geometry() for carpentry-correct cabinet assembly
  • [ ] Sketch constraints (coincident, parallel, tangent, etc.)
  • [ ] Pocket cuts and profiles for joinery (dados, rabbets)

Long-Term Goals

  • [ ] Drawing creation
  • [ ] Bill of Materials (BOM) generation
  • [ ] Advanced constraints and relations
  • [ ] Configuration parameter support

Woodworking-Specific Features

  • [ ] Joinery library (dado, rabbet, mortise & tenon, dovetail)
  • [ ] Standard hardware patterns (shelf pins, drawer slides)
  • [ ] Cut list generation
  • [ ] Material optimization (sheet layout)
  • [ ] Assembly instructions generation

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

License

MIT License

Acknowledgments

Support

For issues and questions:

  • GitHub Issues: https://github.com/hedless/onshape-mcp/issues
  • Onshape API Forum: https://forum.onshape.com/

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选