Skip to main content
Glama

OpenSCAD MCP Server

by rahulgarg123

OpenSCAD MCP Server

A Model Context Protocol (MCP) server that provides OpenSCAD rendering capabilities. This server allows you to render OpenSCAD code to PNG images through a standardized MCP interface.

Features

  • Headless OpenSCAD Rendering: Execute OpenSCAD code and generate PNG images without a GUI
  • Flexible Camera Control: Support for custom camera positioning and orientation
  • Cross-Platform: Configurable OpenSCAD binary path for different operating systems

Prerequisites

  • Node.js: Version 18 or higher
  • OpenSCAD: Nightly (dev) version must be installed on your system. Download and install from OpenSCAD.org.

Installation

  1. Clone this repository:
    git clone https://github.com/rahulgarg123/openscad-mcp.git cd openscad-mcp
  2. Install dependencies:
    npm install
  3. Build the project:
    npm run build

Configuration

OpenSCAD Binary Path

By default, the server looks for OpenSCAD at /Applications/OpenSCAD.app/Contents/MacOS/OpenSCAD (macOS path). You can customize this by setting the OPENSCAD_BINARY environment variable.

Usage as MCP Server in Gemini-cli

In your gemini settings.json file, e.g., ~/.gemini/settings.json, add the following:

"mcpServers": { "openscad": { "command": "node", "args": ["/path/to/openscad-mcp/dist/index.js"], "env": { "OPENSCAD_BINARY": "/path/to/OpenSCAD/binary" } } }

Use included GEMINI.md file in the folder you want to generate openSCAD code in.

Available Tools

render_openscad

Renders OpenSCAD code to a PNG image file.

Parameters:

  • code (string, required): The OpenSCAD code to render
  • output_path (string, required): Path where the rendered PNG image should be saved
  • camera (string, optional): Camera parameters in one of these formats:
    • translate_x,y,z,rot_x,y,z,dist - Translation, rotation, and distance
    • eye_x,y,z,center_x,y,z - Eye position and center point

Example Request:

{ "jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": { "name": "render_openscad", "arguments": { "code": "cube([20, 30, 10]); translate([25, 0, 0]) sphere(r=8);", "output_path": "/tmp/my_render.png", "camera": "0,0,0,60,0,315,100" } } }

Response:

{ "jsonrpc": "2.0", "id": 1, "result": { "content": [ { "type": "text", "text": "OpenSCAD rendering completed successfully\n\nOutput:\n...\n\nRendered image saved to: /tmp/my_render.png" } ] } }

Examples with gemini-cli

Prompt:

Generate openscad code for a very beautiful and unique planter. Iterate as many times as possible on the design, looking at the rendering in each iteration and improving it. The goal is to generate a unique and aesthetic planter design amenable for 3D printing.
First Iteration
Final Iteration

Generated OpenSCAD code:

module unique_planter( height = 100, width = 50, wall_thickness = 4, twist = 90, freq = 8, amp = 2, drainage_hole_rad = 5 ) { $fn=100; difference() { linear_extrude(height = height, scale = 1.2, twist = twist, slices = 200) { polygon([ for (a = [0:360/$fn:359]) let (r = width/2 + amp*sin(a*freq) + amp*sin(a*freq/2)) [r*cos(a), r*sin(a)] ]); } translate([0,0,wall_thickness]) { linear_extrude(height = height, scale = 1.2, twist = twist, slices = 200) { polygon([ for (a = [0:360/$fn:359]) let (r = width/2 - wall_thickness + amp*sin(a*freq) + amp*sin(a*freq/2)) [r*cos(a), r*sin(a)] ]); } } translate([0,0,-1]) { cylinder(h = wall_thickness+2, r = drainage_hole_rad); } } } unique_planter();

Testing

Run the included tests to verify everything works:

node test_client.js

Development

Scripts

  • npm run build: Compile TypeScript to JavaScript
  • npm run start: Start the MCP server
  • npm run dev: Watch mode for development

Project Structure

openscad-mcp/ ├── src/ │ └── index.ts # Main MCP server implementation ├── dist/ # Compiled JavaScript output ├── test_client.js # Basic test client ├── test.scad # Sample OpenSCAD file ├── package.json # Node.js dependencies and scripts ├── tsconfig.json # TypeScript configuration └── README.md # This file

Troubleshooting

OpenSCAD Not Found

Error: spawn /Applications/OpenSCAD.app/Contents/MacOS/OpenSCAD ENOENT

Solution: Verify OpenSCAD is installed and set the correct OPENSCAD_BINARY path.

Permission Denied

Error: EACCES: permission denied, open '/path/to/output.png'

Solution: Ensure the output directory exists and is writable.

Rendering Timeout

Error: Command failed: timeout

Solution: Simplify your OpenSCAD code or increase the timeout in the source code.

Contributing

  1. Fork the repository
  2. Create a feature branch
  3. Make your changes
  4. Add tests for new functionality
  5. Submit a pull request
-
security - not tested
F
license - not found
-
quality - not tested

Provides OpenSCAD rendering capabilities through a Model Context Protocol interface, allowing users to generate PNG images from OpenSCAD code without a GUI.

  1. Features
    1. Prerequisites
      1. Installation
        1. Configuration
          1. OpenSCAD Binary Path
        2. Usage as MCP Server in Gemini-cli
          1. Available Tools
            1. render_openscad
          2. Examples with gemini-cli
            1. Testing
              1. Development
                1. Scripts
                2. Project Structure
              2. Troubleshooting
                1. OpenSCAD Not Found
                2. Permission Denied
                3. Rendering Timeout
              3. Contributing
                1. Links

                  Related MCP Servers

                  • A
                    security
                    F
                    license
                    A
                    quality
                    A Model Context Protocol server that converts PDF documents into PNG images through a simple MCP tool call.
                    Last updated -
                    1
                    5
                    Python
                    • Apple
                    • Linux
                  • A
                    security
                    F
                    license
                    A
                    quality
                    A Model Context Protocol server that provides API functionality for creating, managing, and exporting Excalidraw drawings in various formats like SVG, PNG, and JSON.
                    Last updated -
                    8
                    69
                    24
                    JavaScript
                  • -
                    security
                    A
                    license
                    -
                    quality
                    A Model Context Protocol server that provides tools for converting SVG code to high-quality PNG and JPG images with detailed customization options.
                    Last updated -
                    15
                    2
                    JavaScript
                    MIT License
                    • Apple
                  • -
                    security
                    F
                    license
                    -
                    quality
                    A Model Context Protocol server that converts SVG code to PNG images, offering two conversion methods (CairoSVG and Inkscape) with support for custom working directories.
                    Last updated -
                    3
                    Python
                    • Linux
                    • Apple

                  View all related MCP servers

                  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/rahulgarg123/openscad-mcp'

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