Provides 3D rendering capabilities for OpenSCAD models, allowing for the generation of single views with precise camera control, standard perspective views, and 360-degree turntable animations.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@OpenSCAD MCP ServerRender a 3D gear model from multiple perspectives"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
OpenSCAD MCP Server
A production-ready Model Context Protocol (MCP) server that provides OpenSCAD 3D rendering capabilities to AI assistants and LLM applications. Built with FastMCP for robust, scalable performance.
๐ฏ Zero-Installation Execution
Run directly from GitHub without any setup:
uv run --with git+https://github.com/Abhishekv87bit/openscad-mcp.git openscad-mcpPerfect for MCP clients, CI/CD pipelines, and instant deployment scenarios!
๐ Quick Start
Zero-Installation Execution with uv
No installation required! Run directly from GitHub:
# Run via script entry point (recommended)
uv run --with git+https://github.com/Abhishekv87bit/openscad-mcp.git openscad-mcp
# Or run as Python module
uv run --with git+https://github.com/Abhishekv87bit/openscad-mcp.git python -m openscad_mcpTraditional Installation (Optional)
# Clone and run locally
git clone https://github.com/Abhishekv87bit/openscad-mcp.git
cd openscad-mcp
uv run openscad-mcpConfigure with Claude Desktop
Add to your Claude Desktop configuration (~/Library/Application Support/Claude/claude_desktop_config.json on macOS):
Option 1: Direct from GitHub (Recommended)
{
"mcpServers": {
"openscad": {
"command": "uv",
"args": ["run", "--with", "git+https://github.com/Abhishekv87bit/openscad-mcp.git", "openscad-mcp"],
"env": {
"OPENSCAD_PATH": "/usr/bin/openscad"
}
}
}
}Option 2: Local Installation
{
"mcpServers": {
"openscad": {
"command": "uv",
"args": ["run", "openscad-mcp"],
"cwd": "/path/to/openscad-mcp",
"env": {
"OPENSCAD_PATH": "/usr/bin/openscad"
}
}
}
}๐ Security: --allowedTools Requirement
IMPORTANT: When using the OpenSCAD MCP server with Claude CLI or other MCP clients, you MUST explicitly grant permissions using the --allowedTools flag for security. This prevents unauthorized tool usage and ensures controlled access to server capabilities.
Required Permissions
The OpenSCAD MCP server requires explicit permission for each tool:
openscad-mcp:check_openscad- Permission to check OpenSCAD installationopenscad-mcp:render_single- Permission to render single viewsopenscad-mcp:render_perspectives- Permission to render multiple perspectives
Example Usage with Claude CLI
# Start the server with uv and grant permissions
# (Create mcp-config.json with uv configuration first)
# Grant permission for a single tool
claude --config mcp-config.json \
--allowedTools openscad-mcp:check_openscad \
"Check if OpenSCAD is installed"
# Grant permission for multiple tools
claude --config mcp-config.json \
--allowedTools openscad-mcp:check_openscad,openscad-mcp:render_single \
"Render a cube with dimensions 30x30x30"
# Grant full permissions for all OpenSCAD tools
claude --config mcp-config.json \
--allowedTools openscad-mcp:check_openscad,openscad-mcp:render_single,openscad-mcp:render_perspectives \
"Create a gear model and show it from multiple angles"Create
{
"mcpServers": {
"openscad-mcp": {
"command": "uv",
"args": ["run", "--with", "git+https://github.com/Abhishekv87bit/openscad-mcp.git", "openscad-mcp"],
"env": {
"OPENSCAD_PATH": "/usr/bin/openscad"
}
}
}
}Testing with Permissions
Use the provided test script to verify proper permission configuration:
# Run all permission tests
./test_claude_with_permissions.sh all
# Test individual tools
./test_claude_with_permissions.sh check # Test check_openscad only
./test_claude_with_permissions.sh single # Test render_single only
./test_claude_with_permissions.sh perspectives # Test render_perspectives only
# Launch interactive session with full permissions
./test_claude_with_permissions.sh interactive
# Show usage examples
./test_claude_with_permissions.sh examplesโจ Features
๐ฏ Production-Ready: 100% test success rate with comprehensive integration testing
๐ง Single View Rendering: Render OpenSCAD models from any camera angle with full control
๐ Multiple Perspectives: Generate standard orthographic and isometric views automatically
๐ฌ Animation Support: Create turntable animations for 360ยฐ model visualization
โก Async Processing: Non-blocking renders using FastMCP framework for optimal performance
๐ผ๏ธ Base64 Encoding: Images returned as base64-encoded PNGs for seamless integration
โ Verified Compatibility: Fully compatible with FastMCP 2.11.3 and Pydantic 2.11.7
๐ Prerequisites
Python 3.10+ (required for FastMCP 2.11.3)
OpenSCAD (Download from openscad.org)
uv (Install from docs.astral.sh) - Only needed for zero-installation execution
No additional Python packages required when using
๐ฆ Installation
Method 1: Zero-Installation with uv (Recommended)
No installation required! Just run directly:
# Run directly from GitHub - uv handles everything automatically
uv run --with git+https://github.com/Abhishekv87bit/openscad-mcp.git openscad-mcp
# All dependencies (FastMCP 2.11.3, Pydantic 2.11.7, etc.) are resolved and installed automaticallyMethod 2: Local Development with uv
# Clone for local development
git clone https://github.com/Abhishekv87bit/openscad-mcp.git
cd openscad-mcp
# Run with uv (installs dependencies automatically)
uv run openscad-mcp
# Or run as module
uv run python -m openscad_mcpMethod 3: Traditional pip Installation
# Only if you can't use uv
git clone https://github.com/Abhishekv87bit/openscad-mcp.git
cd openscad-mcp
pip install -e .
python -m openscad_mcpโ๏ธ Configuration
Environment Variables
Create a .env file in the project root:
# OpenSCAD Configuration
OPENSCAD_PATH=/usr/bin/openscad # Path to OpenSCAD executable
OPENSCAD_TIMEOUT=30 # Timeout for rendering operations (seconds)
# Server Configuration
MCP_SERVER_NAME=openscad-mcp
MCP_SERVER_VERSION=1.0.0
MCP_SERVER_TRANSPORT=stdio # Transport: stdio, sse, or http
# Rendering Configuration
MCP_RENDER_MAX_CONCURRENT=4 # Max concurrent renders
MCP_RENDER_DEFAULT_WIDTH=800 # Default image width
MCP_RENDER_DEFAULT_HEIGHT=600 # Default image heightConfiguration File (Optional)
Create config.yaml for advanced configuration:
server:
name: "OpenSCAD MCP Server"
version: "1.0.0"
transport: stdio
openscad:
timeout: 30
default_color_scheme: "Cornfield"
rendering:
max_concurrent: 4
default_width: 800
default_height: 600๐ ๏ธ Available MCP Tools
1. render_single
Render a single view of an OpenSCAD model with complete camera control.
Parameters:
Parameter | Type | Required | Description |
| string | No* | OpenSCAD code to render |
| string | No* | Path to .scad file |
| [x,y,z] | No | Camera position (default: [30,30,30]) |
| [x,y,z] | No | Look-at point (default: [0,0,0]) |
| [x,y,z] | No | Up vector (default: [0,0,1]) |
| [w,h] | No | Image dimensions in pixels |
| string | No | OpenSCAD color scheme |
| dict | No | Variables to pass to OpenSCAD |
| bool | No | Auto-center the model |
*Either scad_content or scad_file must be provided
Example Request:
{
"tool": "render_single",
"arguments": {
"scad_content": "cube([10, 10, 10]);",
"camera_position": [30, 30, 30],
"image_size": [800, 600],
"color_scheme": "Cornfield"
}
}Example Response:
{
"success": true,
"image": "data:image/png;base64,iVBORw0KGgo...",
"metadata": {
"width": 800,
"height": 600,
"render_time": 1.23
}
}2. render_perspectives
Generate multiple standard views of a model (front, back, left, right, top, bottom, isometric).
Parameters:
Parameter | Type | Required | Description |
| string | No* | OpenSCAD code to render |
| string | No* | Path to .scad file |
| float | No | Camera distance from origin |
| [w,h] | No | Image dimensions for each view |
| dict | No | Variables to pass to OpenSCAD |
| list | No | Specific views to render |
Example Request:
{
"tool": "render_perspectives",
"arguments": {
"scad_file": "model.scad",
"views": ["front", "isometric", "top"],
"distance": 200,
"image_size": [400, 400]
}
}3. check_openscad
Verify OpenSCAD installation and get version information.
Parameters:
Parameter | Type | Required | Description |
| bool | No | Include searched paths in response |
Example Request:
{
"tool": "check_openscad",
"arguments": {
"include_paths": true
}
}๐ MCP Resources
resource://server/info
Get server configuration and capabilities.
Returns:
Server version and status
OpenSCAD version and path
Rendering capabilities
Active operations count
Configuration details
๐๏ธ Architecture
The server implements a clean architecture pattern:
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ MCP Client (Claude) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ FastMCP Server (Presentation) โ
โ - MCP Protocol Handler โ
โ - Tool Decorators โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Application Layer (Business) โ
โ - Rendering Logic โ
โ - Parameter Validation โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Infrastructure Layer (External) โ
โ - OpenSCAD CLI โ
โ - File I/O Operations โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ๐งช Testing
The server has achieved 100% test success rate across all integration tests:
# Run comprehensive test suite
python comprehensive_test.py
# Run MCP tools integration test
python test_mcp_tools.py
# Run server startup test
python test_server_startup.pySee Test Report for detailed results.
๐ง Development
Project Structure
openscad-mcp-server/
โโโ src/
โ โโโ openscad_mcp/
โ โโโ __init__.py # Package initialization
โ โโโ __main__.py # Entry point
โ โโโ server.py # FastMCP server implementation
โ โโโ types.py # Pydantic models & types
โ โโโ utils/
โ โโโ config.py # Configuration management
โโโ tests/ # Test suite
โโโ pyproject.toml # Project configuration
โโโ README.md # This file
โโโ CHANGELOG.md # Version history
โโโ API.md # Detailed API documentation
โโโ .env.example # Environment templateExtending the Server
To add new rendering capabilities:
Define parameter types in
types.py:
class CustomRenderParams(BaseModel):
# Your parameters here
passAdd tool function in
server.py:
@mcp.tool
async def custom_render(params: CustomRenderParams) -> RenderResult:
"""Your custom rendering logic"""
# Implementation
passUpdate documentation in
API.md
๐ Troubleshooting
OpenSCAD Not Found
# Check OpenSCAD installation
which openscad
# Set environment variable
export OPENSCAD_PATH=/path/to/openscad
# Or add to .env file
OPENSCAD_PATH=/usr/local/bin/openscadPermission Errors
# Ensure execute permissions
chmod +x /path/to/openscadRendering Timeouts
Increase timeout in configuration:
export OPENSCAD_TIMEOUT=60 # 60 secondsFastMCP Compatibility Issues
Ensure correct versions:
pip install fastmcp==2.11.3 pydantic==2.11.7๐ Performance
Single view rendering: ~1-3 seconds (complexity dependent)
Multiple perspectives: ~5-10 seconds for 8 views
Base64 encoding: < 0.1s overhead
Memory footprint: ~50 MB base + 10-20 MB per render
Concurrent renders: Up to 4 (configurable)
๐ฆ Production Status
โ Ready for Production
All tests passing (100% success rate)
FastMCP 2.11.3 compatibility verified
Comprehensive error handling
Async operation support
Resource management implemented
Documentation complete
๐ License
MIT License - See LICENSE file for details
๐ค Contributing
Contributions are welcome! Please:
Fork the repository
Create a feature branch (
git checkout -b feature/amazing-feature)Commit your changes (
git commit -m 'Add amazing feature')Push to the branch (
git push origin feature/amazing-feature)Open a Pull Request
๐ฎ Support
Issues: GitHub Issues
Documentation: Full API Documentation
Test Report: Integration Test Results
๐ Acknowledgments
FastMCP - The excellent MCP framework
OpenSCAD - The programmable CAD software
Model Context Protocol - The MCP specification
Version: 1.0.0 | Status: Production Ready | Last Updated: 2025-08-25
This server cannot be installed
Resources
Looking for Admin?
Admins can modify the Dockerfile, update the server description, and track usage metrics. If you are the server author, to access the admin panel.