OpenSCAD 3D Model Generator

by jhacksman

19 stars
541 downloads
Not rated
GitHub

About

Transforms natural language descriptions into parametric 3D models through a pipeline of image generation, object segmentation, 3D modeling, and OpenSCAD code conversion for customizable 3D printing.

Details

Author
jhacksman
Repository
jhacksman/OpenSCAD-MCP-Server
GitHub stars
19
Downloads
541
Categories
AI, Developer Tools, Media, Infrastructure, Automation, Other

- AI Image Generation: Generate images from text descriptions using Google Gemini or Venice.ai APIs
- Multi-View Image Generation: Create multiple views of the same 3D object for reconstruction
- Image Approval Workflow: Review and approve/deny generated images before reconstruction
- 3D Reconstruction: Convert approved multi-view images into 3D models using CUDA Multi-View Stereo
- Remote Processing: Process computationally intensive tasks on remote servers within your LAN
- OpenSCAD Integration: Generate parametric 3D models using OpenSCAD
- Parametric Export: Export models in formats that preserve parametric properties (CSG, AMF, 3MF, SCAD)
- 3D Printer Discovery: Optional network printer discovery and direct printing

Setting up with Highlight

This MCP is not yet compatible with Highlight’s one-click setup. However, you can still use it with Highlight by following these steps:

  1. Download and install Highlight from highlightai.com/download
  2. Navigate to the plugins tab and select "Add Custom Plugin"
  3. Configure the plugin with the settings below
    Plugin Name OpenSCAD 3D Model Generator
    Command (node, npx, python, etc.) python
    Arguments
    • Argument 1 src/main.py

    Please refer to the README for specific instructions on how to obtain API keys or other required environment variables.

  4. Enable "Start Automatically" if you want the plugin to start when Highlight launches

From the repository

1. Start the server:

   python src/main.py

2. The server will start on http://localhost:8000

3. Use the MCP tools to interact with the server:

- generate_image_gemini: Generate an image using Google Gemini API

     {
"prompt": "A low-poly rabbit with black background",
"model": "gemini-2.0-flash-exp-image-generation"
}

- generate_multi_view_images: Generate multiple views of the same 3D object

     {
"prompt": "A low-poly rabbit",
"num_views": 4
}

- create_3d_model_from_images: Create a 3D model from approved multi-view images

     {
"image_ids": ["view_1", "view_2", "view_3", "view_4"],
"output_name": "rabbit_model"
}

- create_3d_model_from_text: Complete pipeline from text to 3D model

     {
"prompt": "A low-poly rabbit",
"num_views": 4
}

- export_model: Export a model to a specific format

     {
"model_id": "your-model-id",
"format": "obj" // or "stl", "ply", "scad", etc.
}

- discover_remote_cuda_mvs_servers: Find CUDA MVS servers on your network

     {
"timeout": 5
}

- get_remote_job_status: Check the status of a remote processing job

     {
"server_id": "server-id",
"job_id": "job-id"
}

- download_remote_model_result: Download a completed model from a remote server

     {
"server_id": "server-id",
"job_id": "job-id",
"output_name": "model-name"
}

- discover_printers: Discover 3D printers on the network

     {}

- print_model: Print a model on a connected printer

     {
"model_id": "your-model-id",
"printer_id": "your-printer-id"
}

The server supports remote processing of computationally intensive tasks, particularly CUDA Multi-View Stereo reconstruction. This allows you to offload processing to more powerful machines within your LAN.

1. Install CUDA Multi-View Stereo on the server machine:

   git clone https://github.com/fixstars/cuda-multi-view-stereo.git
cd cuda-multi-view-stereo
mkdir build && cd build
cmake ..
make

2. Start the remote CUDA MVS server:

   python src/main_remote.py

3. The server will automatically advertise itself on the local network using Zeroconf.

1. Configure remote processing in your .env file:

   REMOTE_CUDA_MVS_ENABLED=True
REMOTE_CUDA_MVS_USE_LAN_DISCOVERY=True
REMOTE_CUDA_MVS_API_KEY=your-shared-secret-key

2. Alternatively, you can specify a server URL directly:

   REMOTE_CUDA_MVS_ENABLED=True
REMOTE_CUDA_MVS_USE_LAN_DISCOVERY=False
REMOTE_CUDA_MVS_SERVER_URL=http://server-ip:8765
REMOTE_CUDA_MVS_API_KEY=your-shared-secret-key

generate_image_gemini

Generate an image using Google Gemini API. Parameters: prompt (string), model (optional string)

generate_multi_view_images

Generate multiple views of the same 3D object. Parameters: prompt (string), num_views (integer)

create_3d_model_from_images

Create a 3D model from approved multi-view images. Parameters: image_ids (array of strings), output_name (string)

create_3d_model_from_text

Complete pipeline from text to 3D model. Parameters: prompt (string), num_views (integer)

export_model

Export a model to a specific format. Parameters: model_id (string), format (string)

discover_remote_cuda_mvs_servers

Find CUDA MVS servers on your network. Parameters: timeout (integer)

get_remote_job_status

Check the status of a remote processing job. Parameters: server_id (string), job_id (string)

download_remote_model_result

Download a completed model from a remote server. Parameters: server_id (string), job_id (string), output_name (string)

discover_printers

Discover 3D printers on the network. Parameters: None

print_model

Print a model on a connected printer. Parameters: model_id (string), printer_id (string)

Claude Desktop / Cursor

Paste into your MCP client config file to install this server.

{
    "mcpServers": {
        "openscad 3d model generator": {
            "cwd": "OpenSCAD-MCP-Server",
            "env": {},
            "args": [
                "src/main.py"
            ],
            "command": "python"
        }
    }
}

Linux

{
    "cwd": "OpenSCAD-MCP-Server",
    "env": [],
    "args": [
        "src/main.py"
    ],
    "command": "python"
}

Macos

{
    "cwd": "OpenSCAD-MCP-Server",
    "env": [],
    "args": [
        "src/main.py"
    ],
    "command": "python"
}

Windows

{
    "cwd": "OpenSCAD-MCP-Server",
    "env": [],
    "args": [
        "src/main.py"
    ],
    "command": "python"
}

OpenSCAD MCP Server

A Model Context Protocol (MCP) server that enables users to generate 3D models from text descriptions or images, with a focus on creating parametric 3D models using multi-view reconstruction and OpenSCAD.

Features

- AI Image Generation: Generate images from text descriptions using Google Gemini or Venice.ai APIs
- Multi-View Image Generation: Create multiple views of the same 3D object for reconstruction
- Image Approval Workflow: Review and approve/deny generated images before reconstruction
- 3D Reconstruction: Convert approved multi-view images into 3D models using CUDA Multi-View Stereo
- Remote Processing: Process computationally intensive tasks on remote servers within your LAN
- OpenSCAD Integration: Generate parametric 3D models using OpenSCAD
- Parametric Export: Export models in formats that preserve parametric properties (CSG, AMF, 3MF, SCAD)
- 3D Printer Discovery: Optional network printer discovery and direct printing

Architecture

The server is built using the Python MCP SDK and follows a modular architecture:

openscad-mcp-server/
├── src/
│   ├── main.py                  # Main application
│   ├── main_remote.py           # Remote CUDA MVS server
│   ├── ai/                      # AI integrations
│   │   ├── gemini_api.py        # Google Gemini API for image generation
│   │   └── venice_api.py        # Venice.ai API for image generation (optional)
│   ├── models/                  # 3D model generation
│   │   ├── cuda_mvs.py          # CUDA Multi-View Stereo integration
│   │   └── code_generator.py    # OpenSCAD code generation
│   ├── workflow/                # Workflow components
│   │   ├── image_approval.py    # Image approval mechanism
│   │   └── multi_view_to_model_pipeline.py  # Complete pipeline
│   ├── remote/                  # Remote processing
│   │   ├── cuda_mvs_client.py   # Client for remote CUDA MVS processing
│   │   ├── cuda_mvs_server.py   # Server for remote CUDA MVS processing
│   │   ├── connection_manager.py # Remote connection management
│   │   └── error_handling.py    # Error handling for remote processing
│   ├── openscad_wrapper/        # OpenSCAD CLI wrapper
│   ├── visualization/           # Preview generation and web interface
│   ├── utils/                   # Utility functions
│   └── printer_discovery/       # 3D printer discovery
├── scad/                        # Generated OpenSCAD files
├── output/                      # Output files (models, previews)
│   ├── images/                  # Generated images
│   ├── multi_view/              # Multi-view images
│   ├── approved_images/         # Approved images for reconstruction
│   └── models/                  # Generated 3D models
├── templates/                   # Web interface templates
└── static/                      # Static files for web interface

Installation

1. Clone the repository:

   git clone https://github.com/jhacksman/OpenSCAD-MCP-Server.git
cd OpenSCAD-MCP-Server

2. Create a virtual environment:

   python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate

3. Install dependencies:

   pip install -r requirements.txt

4. Install OpenSCAD:
- Ubuntu/Debian: sudo apt-get install openscad
- macOS: brew install openscad
- Windows: Download from openscad.org

5. Install CUDA Multi-View Stereo:

   git clone https://github.com/fixstars/cuda-multi-view-stereo.git
cd cuda-multi-view-stereo
mkdir build && cd build
cmake ..
make

6. Set up API keys:
- Create a .env file in the root directory
- Add your API keys:

     GEMINI_API_KEY=your-gemini-api-key
VENICE_API_KEY=your-venice-api-key # Optional
REMOTE_CUDA_MVS_API_KEY=your-remote-api-key # For remote processing

Remote Processing Setup

The server supports remote processing of computationally intensive tasks, particularly CUDA Multi-View Stereo reconstruction. This allows you to offload processing to more powerful machines within your LAN.

Server Setup (on the machine with CUDA GPU)

1. Install CUDA Multi-View Stereo on the server machine:

   git clone https://github.com/fixstars/cuda-multi-view-stereo.git
cd cuda-multi-view-stereo
mkdir build && cd build
cmake ..
make

2. Start the remote CUDA MVS server:

   python src/main_remote.py

3. The server will automatically advertise itself on the local network using Zeroconf.

Client Configuration

1. Configure remote processing in your .env file:

   REMOTE_CUDA_MVS_ENABLED=True
REMOTE_CUDA_MVS_USE_LAN_DISCOVERY=True
REMOTE_CUDA_MVS_API_KEY=your-shared-secret-key

2. Alternatively, you can specify a server URL directly:

   REMOTE_CUDA_MVS_ENABLED=True
REMOTE_CUDA_MVS_USE_LAN_DISCOVERY=False
REMOTE_CUDA_MVS_SERVER_URL=http://server-ip:8765
REMOTE_CUDA_MVS_API_KEY=your-shared-secret-key

Remote Processing Features

- Automatic Server Discovery: Find CUDA MVS servers on your local network
- Job Management: Upload images, track job status, and download results
- Fault Tolerance: Automatic retries, circuit breaker pattern, and error tracking
- Authentication: Secure API key authentication for all remote operations
- Health Monitoring: Continuous server health checks and status reporting

Usage

1. Start the server:

   python src/main.py

2. The server will start on http://localhost:8000

3. Use the MCP tools to interact with the server:

- generate_image_gemini: Generate an image using Google Gemini API

     {
"prompt": "A low-poly rabbit with black background",
"model": "gemini-2.0-flash-exp-image-generation"
}

- generate_multi_view_images: Generate multiple views of the same 3D object

     {
"prompt": "A low-poly rabbit",
"num_views": 4
}

- create_3d_model_from_images: Create a 3D model from approved multi-view images

     {
"image_ids": ["view_1", "view_2", "view_3", "view_4"],
"output_name": "rabbit_model"
}

- create_3d_model_from_text: Complete pipeline from text to 3D model

     {
"prompt": "A low-poly rabbit",
"num_views": 4
}

- export_model: Export a model to a specific format

     {
"model_id": "your-model-id",
"format": "obj" // or "stl", "ply", "scad", etc.
}

- discover_remote_cuda_mvs_servers: Find CUDA MVS servers on your network

     {
"timeout": 5
}

- get_remote_job_status: Check the status of a remote processing job

     {
"server_id": "server-id",
"job_id": "job-id"
}

- download_remote_model_result: Download a completed model from a remote server

     {
"server_id": "server-id",
"job_id": "job-id",
"output_name": "model-name"
}

- discover_printers: Discover 3D printers on the network

     {}

- print_model: Print a model on a connected printer

     {
"model_id": "your-model-id",
"printer_id": "your-printer-id"
}

Image Generation Options

The server supports multiple image generation options:

1. Google Gemini API (Default): Uses the Gemini 2.0 Flash Experimental model for high-quality image generation
- Supports multi-view generation with consistent style
- Requires a Google Gemini API key

2. Venice.ai API (Optional): Alternative image generation service
- Supports various models including flux-dev and fluently-xl
- Requires a Venice.ai API key

3. User-Provided Images: Skip image generation and use your own images
- Upload images directly to the server
- Useful for working with existing photographs or renders

Multi-View Workflow

The server implements a multi-view workflow for 3D reconstruction:

1. Image Generation: Generate multiple views of the same 3D object
2. Image Approval: Review and approve/deny each generated image
3. 3D Reconstruction: Convert approved images into a 3D model using CUDA MVS
- Can be processed locally or on a remote server within your LAN
4. Model Refinement: Optionally refine the model using OpenSCAD

Remote Processing Workflow

The remote processing workflow allows you to offload computationally intensive tasks to more powerful machines:

1. Server Discovery: Automatically discover CUDA MVS servers on your network
2. Image Upload: Upload approved multi-view images to the remote server
3. Job Processing: Process the images on the remote server using CUDA MVS
4. Status Tracking: Monitor the job status and progress
5. Result Download: Download the completed 3D model when processing is finished

Supported Export Formats

The server supports exporting models in various formats:

- OBJ: Wavefront OBJ format (standard 3D model format)
- STL: Standard Triangle Language (for 3D printing)
- PLY: Polygon File Format (for point clouds and meshes)
- SCAD: OpenSCAD source code (for parametric models)
- CSG: OpenSCAD CSG format (preserves all parametric properties)
- AMF: Additive Manufacturing File Format (preserves some metadata)
- 3MF: 3D Manufacturing Format (modern replacement for STL with metadata)

Web Interface

The server provides a web interface for:

- Generating and approving multi-view images
- Previewing 3D models from different angles
- Downloading models in various formats

Access the interface at http://localhost:8000/ui/

License

MIT

Contributing

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

No reviews yet — be the first

Sign in to leave a review

Use Google, GitHub, or an email account so ratings stay tied to real people.

Email sign in

No reviews posted yet.