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 mcp-config.json for Claude CLI:
{
"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 uv - all dependencies are handled automatically!
๐ฆ 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
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.