Blender-MCP
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., "@Blender-MCPCreate a red cube with rounded edges"
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.
What it is · Why not the alternative · Tools · Quick start · Config · Docker · Architecture
Production-grade Blender automation over the Model Context Protocol. Pydantic-validated • Zero telemetry • Async-native • Pytest-covered • Plugin-extensible
Sibling project in the MCP-HUB collection.
🎯 What this is
blender-mcp connects Blender 3D to any MCP-compatible AI assistant
(Claude Desktop, Claude Code, Cursor, Continue, Cline, …). After a one-time
setup, you tell the assistant what you want, and it drives Blender for you —
creating objects, applying materials, lighting the scene, framing cameras,
rendering. The assistant takes the wheel; you watch it work.
flowchart LR
U["🧑 You<br/><i>natural language</i>"]:::user
AI["🤖 AI Client<br/>Claude · Cursor · Cline"]:::ai
B["🌉 Bridge Server<br/><i>this package</i>"]:::bridge
BL["🟠 Blender Addon<br/><i>main-thread exec</i>"]:::blender
U -->|prompt| AI
AI <-->|"MCP · stdio / http / sse"| B
B <-->|"TCP JSON · 127.0.0.1:9876"| BL
BL -.->|screenshot · render · scene data| B
B -.->|tool result| AI
AI -.->|answer| U
classDef user fill:#2d3436,stroke:#636e72,color:#fff
classDef ai fill:#0984e3,stroke:#74b9ff,color:#fff
classDef bridge fill:#6c5ce7,stroke:#a29bfe,color:#fff
classDef blender fill:#EA7600,stroke:#F5792A,color:#fffTwo halves:
Bridge server (this Python package, run via
uv) — speaks MCP to the AI client.Blender addon (
blender_addon/blender_mcp.py) — runs inside Blender, executes commands on the main thread.
Related MCP server: BlenderMCP
⚔️ Why use this instead of ahujasid/blender-mcp?
The blender-mcp project pioneered the space. We respect that. We're built
for a different audience: studios, technical artists, and pipeline engineers
who need verifiable, auditable, production-grade tooling.
Dimension | ✅ |
|
Telemetry | None. Zero phone-home. | Default-on Supabase telemetry |
Input validation | Pydantic v2 with | None — raw kwargs |
Async runtime | Native | Synchronous |
Tests | 207 passing, 90% coverage | None visible in repo |
CI | GitHub Actions on Python 3.10 / 3.11 / 3.12 | None |
Architecture | Modular package, ~8 files | Monolithic 1186-line |
Tool annotations | All 4 MCP hints on every tool | Mostly omitted |
Read-only mode |
| None |
Structured logging |
| Plain strings |
Protocol versioning |
| None |
Docker |
| None |
Hardcoded third-party keys | None — bring your own |
|
Asset integrations | Plugin packages (opt-in, separately versioned) | Baked into core |
If telemetry, validation, tests, audit-ability, or air-gapped deployment matter to you, this is the one to use.
🧰 Tools (v0.4.1)
15 core tools, all Pydantic-validated with full MCP annotations, plus opt-in plugin packs.
Tool | Purpose |
| Confirm Blender + addon reachable, returns versions and protocol |
| Scene name, frame range, render engine, object count |
| List objects, optional filter by type ( |
| Full per-object detail (transform, dimensions, materials, mesh/light/camera specifics) |
| Inline PNG of the active viewport |
Tool | Purpose |
| Cube / sphere / cylinder / cone / plane / torus / monkey |
| Set location / rotation / scale (any subset) |
| Remove by name (idempotent) |
| Principled BSDF: RGBA, metallic, roughness, optional emission |
| POINT / SUN / SPOT / AREA with per-type parameters |
| Location, aim target, focal length, set-active |
| Render a frame; returns metadata + inline PNG preview |
| Power-user escape hatch ( |
Tool | Purpose |
| Save the current |
| Open a |
🔌 Plugins — opt-in, separately installable
Each plugin is a pip package that registers additional tools via the entry-point system. Install only what you need. All require zero pre-configured secrets at server startup — keys are checked at call time, so the server always boots cleanly.
Tool | Purpose |
| Check plugin status and cache directory |
| List asset categories (hdris / textures / models) |
| Search PolyHaven's library |
| Download an asset to local cache |
| Download + apply texture to an object in Blender |
pip install blender-mcp-polyhavenTool | Purpose |
| Check plugin status and API key configuration |
| Text → 3D model via Rodin API |
| Image → 3D model (URL or local file) |
| Poll generation status with exponential backoff |
| Poll + download + import GLTF/FBX/OBJ/STL into Blender |
pip install blender-mcp-hyper3d
export HYPER3D_API_KEY="your-key" # https://hyper3d.aiTool | Purpose |
| Check plugin status and API key configuration |
| Search Sketchfab's 3D model library by keyword |
| Get full metadata for a model by UID |
| Download GLTF + import into Blender |
pip install blender-mcp-sketchfab
export SKETCHFAB_API_KEY="your-token" # https://sketchfab.com/settings#password🚀 Quick start
Prerequisites
Blender 3.0+ (3.6, 4.0, 4.2 LTS all tested)
Python 3.10+
uv package manager
# Windows powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"# macOS / Linux curl -LsSf https://astral.sh/uv/install.sh | sh
0 · Clone
git clone https://github.com/Aayushdubey101/Blender-MCP.git
cd Blender-MCP1 · Install dependencies
From the repo root:
uv sync2 · Install the Blender addon
Open Blender → Edit → Preferences → Add-ons → Install…
Pick
blender_addon/blender_mcp.pyTick the checkbox next to "Development: Blender MCP"
In the 3D viewport press N → MCP tab → ▶ Start MCP Bridge
You should see in Blender's system console:
[MCP Bridge] Listening on 127.0.0.1:98763 · Smoke-test the server
uv run blender-mcpIt will block on stdin — that's correct (MCP stdio transport). Press Ctrl-C. A clean run with no errors means you're good.
For a full interactive test, use the official inspector:
npx @modelcontextprotocol/inspector uv run blender-mcp4 · Wire it into your AI client
A ready-to-copy template is at .mcp.json.example.
Copy it, rename to .mcp.json (gitignored), and replace the path.
Replace <path-to-Blender-MCP> with the absolute path to this repo
(e.g. C:\Projects\Blender-MCP on Windows, /home/you/Blender-MCP on Linux/macOS).
%APPDATA%\Claude\claude_desktop_config.json (Windows) or
~/Library/Application Support/Claude/claude_desktop_config.json (macOS):
{
"mcpServers": {
"blender": {
"command": "uv",
"args": [
"--directory",
"<path-to-Blender-MCP>",
"run",
"blender-mcp"
]
}
}
}claude mcp add blender -- uv --directory <path-to-Blender-MCP> run blender-mcpOr add manually to ~/.claude/settings.json:
{
"mcpServers": {
"blender": {
"command": "uv",
"args": ["--directory", "<path-to-Blender-MCP>", "run", "blender-mcp"]
}
}
}.cursor/mcp.json (or the equivalent config file for your client):
{
"mcpServers": {
"blender": {
"command": "uv",
"args": ["--directory", "<path-to-Blender-MCP>", "run", "blender-mcp"]
}
}
}Same shape everywhere — command: uv, args: [--directory <path>, run, blender-mcp]. See your client's MCP docs for the exact config file.
5 · Drive Blender with natural language
With Blender open, addon enabled, Start MCP Bridge running, and your AI client restarted — just ask. The assistant picks the right tools, validates inputs, and executes. You sit back.
You: Build a still-life scene. Put a glossy red sphere on a matte grey plane,
light it with a warm key light from the right and a cool rim from behind,
frame a 50mm camera looking down at 30°, then render at 720p with EEVEE....and here is the exact tool flow the assistant drives:
sequenceDiagram
autonumber
actor You
participant AI as 🤖 AI Client
participant Bridge as 🌉 Bridge
participant Blender as 🟠 Blender
You->>AI: "Glossy red sphere on grey plane, warm key + cool rim, 50mm cam, 720p"
AI->>Bridge: blender_ping
Bridge->>Blender: ping
Blender-->>Bridge: pong · v4.2 · protocol 1.0
loop build the scene
AI->>Bridge: create_primitive · set_material · add_light · set_camera
Bridge->>Blender: execute on main thread
Blender-->>Bridge: status success
end
AI->>Bridge: blender_render_image (EEVEE, 720p)
Bridge->>Blender: render frame
Blender-->>Bridge: PNG preview + metadata
Bridge-->>AI: inline image
AI-->>You: "Done — here's your render ✨"⚙️ Configuration
Every option is an environment variable. None are required; all have
sensible defaults. Copy .env.example to .env to customize.
Variable | Default | Purpose |
|
| Where the Blender addon is listening |
|
| Same — match the N-panel value |
|
|
|
|
|
|
|
|
|
Read-only mode (safe demos)
BLENDER_MCP_READ_ONLY=true uv run blender-mcpblender_create_primitive, blender_render_image, blender_execute_python, etc.
all return a structured "read-only mode" error. Inspection tools still work.
JSON logging (log infra)
BLENDER_MCP_LOG_FORMAT=json uv run blender-mcpEach line is a single JSON object — ship straight to Loki / Datadog / CloudWatch.
🐳 Docker
For headless / render-farm setups. The container talks to a Blender instance running on the host:
docker compose up --buildThe Blender addon must be running on the host (host.docker.internal:9876
inside the container). On Linux the compose file already maps
host.docker.internal to host-gateway.
📂 Project layout
Blender-MCP/
├── src/blender_mcp/
│ ├── server.py # MCP entry point; transport (stdio / http / sse)
│ ├── client.py # Async TCP client, per-call + persistent modes
│ ├── schemas.py # Pydantic v2 input models
│ ├── utils.py # format_error / format_success / read-only guard
│ ├── plugins/ # Plugin loader + BlenderMCPPlugin Protocol
│ ├── _log_formatter.py # JSON log formatter
│ └── tools/
│ ├── scene.py # inspection + file-management tools
│ ├── objects.py # destructive object/material/light/camera tools
│ ├── render.py # blender_render_image
│ └── code.py # blender_execute_python (escape hatch)
├── blender_addon/
│ └── blender_mcp.py # Install this in Blender
├── plugins/
│ ├── polyhaven/ # pip install blender-mcp-polyhaven
│ ├── hyper3d/ # pip install blender-mcp-hyper3d
│ └── sketchfab/ # pip install blender-mcp-sketchfab
├── tests/ # core test suite
├── docs/
│ └── ARCHITECTURE.md # Process model, threading, response shape, extensibility
├── examples/
│ └── direct_client_test.py # Drive the bridge without an MCP client
├── Dockerfile
├── docker-compose.yml
├── pyproject.toml # uv / build configuration
├── .env.example
├── CHANGELOG.md
├── LICENSE
└── README.mdFor deeper internals see docs/ARCHITECTURE.md.
🧪 Development
uv sync --extra dev # install dev deps
uv run pytest # core tests, ~2s
uv run pytest --cov=src # with coverage
uv run ruff check src/ # lint
uv run ruff format src/ # format
uv run mypy src/ # type-check
# Run plugin tests
uv run pytest plugins/polyhaven/tests/ # 23 tests
uv run pytest plugins/hyper3d/tests/ # 44 tests
uv run pytest plugins/sketchfab/tests/ # 33 testsCI runs the same matrix on every push (Python 3.10 / 3.11 / 3.12).
🗺️ Roadmap
v0.3.0 ✅ — Plugin architecture, PolyHaven + Hyper3D + Sketchfab plugins, persistent connection, HTTP transport.
v0.4.x ✅ — SHA256 asset cache, headless
--backgroundBlender control, file management tools.v1.0.0 — Final polish, full comparison table green on every row.
🔧 Troubleshooting
Open Blender, Preferences → Add-ons, enable Blender MCP, then in the 3D viewport's N-panel → MCP tab → click ▶ Start MCP Bridge.
Change the port in the addon N-panel and set BLENDER_MCP_PORT to match.
Verify the absolute path in claude_desktop_config.json, then fully quit and
relaunch Claude Desktop (Cmd-Q / right-click tray icon → Quit).
Pass timeout_seconds=600 (or higher) on the blender_render_image call for
heavy Cycles renders. Default is 300s.
Re-install blender_addon/blender_mcp.py in Blender — your addon and
server are out of sync.
⭐ Star history
📜 License
MIT — see LICENSE.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseBqualityDmaintenanceConnects Blender to Claude AI through the Model Context Protocol, enabling AI-assisted 3D modeling, scene creation, and manipulation through natural language commands.172MIT
- AlicenseBqualityCmaintenanceConnects Blender to AI through the Model Context Protocol to enable prompt-assisted 3D modeling and scene manipulation. It supports object creation, material control, and arbitrary Python code execution directly within the Blender environment.22MIT
- Alicense-qualityDmaintenanceEnables AI assistants to control Blender 3D modeling and rendering through natural language commands via the Model Context Protocol.MIT
- Alicense-qualityDmaintenanceConnects Blender to AI assistants through the Model Context Protocol, enabling direct AI control of 3D modeling, scene creation, and manipulation via natural language.MIT
Related MCP Connectors
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to control Unreal E…
Connect AI agents to Replynodes over the Model Context Protocol.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Aayushdubey101/Blender-MCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server