trackmcp
Back to directory
jhacksman

openscad-mcp-server

View on GitHub

Devin's attempt at creating an OpenSCAD MCP Server that takes a user prompt and generates a preview image and 3d file.

88 stars PythonDeveloper Kits Updated Oct 17, 2025

Documentation

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:

code
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:

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

2. Create a virtual environment:

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

3. Install dependencies:

code
pip install -r requirements.txt

4. Install OpenSCAD:

    5. Install CUDA Multi-View Stereo:

    code
    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:

      code
      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:

      code
      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:

      code
      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:

      code
      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:

      code
      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:

      code
      python src/main.py

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

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

        json
        {
               "prompt": "A low-poly rabbit with black background",
               "model": "gemini-2.0-flash-exp-image-generation"
             }
          json
          {
                 "prompt": "A low-poly rabbit",
                 "num_views": 4
               }
            json
            {
                   "image_ids": ["view_1", "view_2", "view_3", "view_4"],
                   "output_name": "rabbit_model"
                 }
              json
              {
                     "prompt": "A low-poly rabbit",
                     "num_views": 4
                   }
                json
                {
                       "model_id": "your-model-id",
                       "format": "obj"  // or "stl", "ply", "scad", etc.
                     }
                  json
                  {
                         "timeout": 5
                       }
                    json
                    {
                           "server_id": "server-id",
                           "job_id": "job-id"
                         }
                      json
                      {
                             "server_id": "server-id",
                             "job_id": "job-id",
                             "output_name": "model-name"
                           }
                        json
                        {}
                          json
                          {
                                 "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

                            2. Venice.ai API (Optional): Alternative image generation service

                              3. User-Provided Images: Skip image generation and use your own images

                                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

                                  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.

                                  Frequently asked questions

                                  What is openscad-mcp-server?

                                  openscad-mcp-server is Devin's attempt at creating an OpenSCAD MCP Server that takes a user prompt and generates a preview image and 3d file.

                                  How do I install openscad-mcp-server?

                                  Open the GitHub repository and follow its README. Most MCP servers are added to your client's MCP config, then called by your agent.

                                  Is openscad-mcp-server open source?

                                  Yes — it is hosted on GitHub at https://github.com/jhacksman/OpenSCAD-MCP-Server and has 88 stars.

                                  Related MCP tools

                                  Run your own MCP server? See who uses it and what to fix.

                                  Measure it with TrackMCP