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.
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
bash
git clone https://github.com/jhacksman/OpenSCAD-MCP-Server.git
cd OpenSCAD-MCP-Server
bash
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
bash
pip install -r requirements.txt
Install OpenSCAD:
Ubuntu/Debian: sudo apt-get install openscad
brew install openscad
Windows: Download from openscad.org
Install CUDA Multi-View Stereo:
bash
git clone https://github.com/fixstars/cuda-multi-view-stereo.git
cd cuda-multi-view-stereo
mkdir build && cd build
cmake ..
make
Set up API keys:
Create a .env
file in the root directory
Add your API keys:
bash
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
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.
bash
git clone https://github.com/fixstars/cuda-multi-view-stereo.git
cd cuda-multi-view-stereo
mkdir build && cd build
cmake ..
make
bash
python src/main_remote.py
.env
file:bash
REMOTE_CUDA_MVS_ENABLED=True
REMOTE_CUDA_MVS_USE_LAN_DISCOVERY=True
REMOTE_CUDA_MVS_API_KEY=your-shared-secret-key
bash
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
bash
python src/main.py
The server will start on http://localhost:8000
Use the MCP tools to interact with the server:
generate_image_gemini: Generate an image using Google Gemini API
json
{
"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
json
{
"prompt": "A low-poly rabbit",
"num_views": 4
}
create_3d_model_from_images: Create a 3D model from approved multi-view images
json
{
"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
json
{
"prompt": "A low-poly rabbit",
"num_views": 4
}
export_model: Export a model to a specific format
json
{
"model_id": "your-model-id",
"format": "obj" // or "stl", "ply", "scad", etc.
}
discover_remote_cuda_mvs_servers: Find CUDA MVS servers on your network
json
{
"timeout": 5
}
get_remote_job_status: Check the status of a remote processing job
json
{
"server_id": "server-id",
"job_id": "job-id"
}
download_remote_model_result: Download a completed model from a remote server
json
{
"server_id": "server-id",
"job_id": "job-id",
"output_name": "model-name"
}
discover_printers: Discover 3D printers on the network
json
{}
print_model: Print a model on a connected printer
json
{
"model_id": "your-model-id",
"printer_id": "your-printer-id"
}
The server supports multiple image generation options:
The server implements a multi-view workflow for 3D reconstruction:
The remote processing workflow allows you to offload computationally intensive tasks to more powerful machines:
The server supports exporting models in various formats:
The server provides a web interface for:
Access the interface at http://localhost:8000/ui/
MIT
Contributions are welcome! Please feel free to submit a Pull Request.
Devin's attempt at creating an OpenSCAD MCP Server that takes a user prompt and generates a preview image and 3d file.
No releases published
No packages published