Skip to main content
Glama
jkoets

openscad-mcp

by jkoets

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

Related MCP server: OpenSCAD MCP Server

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

A
license - permissive license
-
quality - not tested
D
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/jkoets/OpenSCAD-MCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server