Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

OpenSCAD MCP Server

An MCP (Model Context Protocol) server that enables LLMs to create and manipulate 3D models using OpenSCAD.

Why OpenSCAD?

OpenSCAD's code-based CSG (Constructive Solid Geometry) approach is ideal for LLM integration:

  • Text-based: Models are defined in code, not GUI interactions
  • Deterministic: Same code always produces same geometry
  • Composable: CSG operations (union, difference, hull) map naturally to how LLMs describe shapes
  • Parametric: Easy to create adjustable designs

Features

Tool Description
openscad_create_model Create a new .scad model file
openscad_update_model Update existing model code
openscad_get_model Retrieve model source code
openscad_list_models List all models in workspace
openscad_delete_model Delete a model
openscad_render_preview Generate PNG preview image
openscad_render_code Render code directly without saving
openscad_export Export to STL, 3MF, AMF, etc.
openscad_get_info Get OpenSCAD version and config

Installation

Prerequisites

  1. OpenSCAD must be installed. Default path: C:\Program Files\OpenSCAD\openscad.exe

  2. Python 3.10+ with pip

Install the MCP Server

cd openscad-mcp
pip install -e .

Configure Claude Desktop

Add to your Claude Desktop config (%APPDATA%\Claude\claude_desktop_config.json):

{
  "mcpServers": {
    "openscad": {
      "command": "openscad-mcp"
    }
  }
}

Or if you installed in development mode and want to specify the path:

{
  "mcpServers": {
    "openscad": {
      "command": "python",
      "args": ["-m", "openscad_mcp.server"]
    }
  }
}

Usage Examples

Simple Cube

cube([20, 20, 20], center=true);

Rounded Box

$fn = 32;
minkowski() {
    cube([20, 20, 10], center=true);
    sphere(r=2);
}

Hollow Cylinder

$fn = 64;
difference() {
    cylinder(h=30, r=15);
    translate([0, 0, -1])
        cylinder(h=32, r=12);
}

Parametric Design

// Parameters
wall_thickness = 2;
inner_diameter = 30;
height = 50;

$fn = 64;

difference() {
    cylinder(h=height, d=inner_diameter + wall_thickness*2);
    translate([0, 0, wall_thickness])
        cylinder(h=height, d=inner_diameter);
}

Workspace

Models are stored in ./workspace/ relative to the server. The workspace is created automatically on first run.

Export Formats

  • STL: Standard format for 3D printing
  • 3MF: Modern 3D printing format with materials support
  • AMF: Additive Manufacturing File Format
  • OFF: Object File Format
  • DXF/SVG: 2D exports for laser cutting, etc.
  • PNG: Rendered images

Camera Control

Preview renders support camera positioning:

  • Rotation mode: translate_x,translate_y,translate_z,rot_x,rot_y,rot_z,distance

    • Example: "0,0,0,45,0,30,200" - view from 45° elevation, 30° rotation
  • Eye/center mode: eye_x,eye_y,eye_z,center_x,center_y,center_z

    • Example: "100,100,100,0,0,0" - camera at (100,100,100) looking at origin

Development

# Install dev dependencies
pip install -e ".[dev]"

# Run directly
python -m openscad_mcp.server

License

MIT

About

An MCP (Model Context Protocol) server that enables LLMs to create and manipulate 3D models using OpenSCAD.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages