3D MCP Server
MCP server for AI-driven 3D model generation using OpenSCAD. Create, combine, transform, and export 3D models through natural language via any MCP-compatible AI client.
Installation
npm install -g @jagjerez-org/3d-mcp-server
Prerequisites
Install OpenSCAD for export and preview rendering:
# Ubuntu/Debian
sudo apt install openscad
# macOS
brew install openscad
# Windows — download from https://openscad.org/downloads.html
Note: OpenSCAD is only required for
exportandpreviewtools. Scene building and SCAD code generation work without it.
Quick Start
With Claude Desktop
Add to your Claude Desktop config (~/.config/claude/claude_desktop_config.json):
{
"mcpServers": {
"3d": {
"command": "3d-mcp-server"
}
}
}
Then ask Claude: "Create a box with a cylindrical hole through the center and export it as STL"
With Cursor
Add to .cursor/mcp.json:
{
"mcpServers": {
"3d": {
"command": "3d-mcp-server"
}
}
}
Tools
Primitives
| Tool | Description |
|---|---|
create_primitive | Create cube, sphere, cylinder, cone, or torus |
create_text | Create 3D extruded text |
create_polyhedron | Create custom mesh from vertices and faces |
custom_scad | Add raw OpenSCAD code directly |
Transformations
| Tool | Description |
|---|---|
transform | Translate, rotate, scale, mirror, or color an object |
Boolean Operations
| Tool | Description |
|---|---|
boolean_op | Union, difference, or intersection of multiple objects |
Extrusions
| Tool | Description |
|---|---|
linear_extrude | Extrude 2D shape (circle, square, polygon) into 3D |
rotate_extrude | Create solid of revolution from 2D profile |
Scene Management
| Tool | Description |
|---|---|
status | Check OpenSCAD installation and scene info |
scene_list | List all objects in the scene |
scene_clear | Clear the entire scene |
remove_object | Remove a specific object |
Output
| Tool | Description |
|---|---|
get_scad | Get the full OpenSCAD source code |
save_scad | Save scene as .scad file |
export | Export to STL, OBJ, 3MF, AMF, OFF, DXF, SVG, CSG |
preview | Render a PNG preview image |
Examples
Box with hole
AI: "Create a 30x30x10 box with a 5mm radius hole through the center"
→ create_primitive(shape: "cube", width: 30, depth: 30, height: 10)
→ create_primitive(shape: "cylinder", radius: 5, height: 12)
→ boolean_op(operation: "difference", objectIds: ["abc", "def"])
→ export(format: "stl")
Phone stand
AI: "Make a phone stand at 60 degrees"
→ create_primitive(shape: "cube", width: 80, depth: 50, height: 5, name: "base")
→ create_primitive(shape: "cube", width: 80, depth: 5, height: 100, name: "back")
→ transform(objectId: "...", operation: "rotate", x: -60)
→ boolean_op(operation: "union", objectIds: [...])
→ preview()
→ export(format: "stl")
Gear
AI: "Create a simple gear with 12 teeth"
→ custom_scad(code: "...", name: "gear")
→ preview()
Environment Variables
| Variable | Default | Description |
|---|---|---|
OPENSCAD_BIN | openscad | Path to OpenSCAD binary |
SCAD_WORK_DIR | /tmp/3d-mcp-work | Working directory for files |
How It Works
- Scene graph — Objects are tracked in memory with unique IDs
- OpenSCAD codegen — Each operation generates clean OpenSCAD code
- Boolean CSG — Objects combine via union/difference/intersection
- Export — OpenSCAD CLI renders the final SCAD to STL/PNG/etc.
The AI builds models step by step: create shapes → transform → combine → export.
License
MIT