Blender Open MCP
Controls a live Blender session via the Blender add-on over TCP, enabling scene and object operations (create, modify, delete, inspect), material assignment, rendering, PolyHaven asset search/download/texture setup, and arbitrary Blender Python code execution.
Integrates with Ollama as an LLM backend, allowing AI prompts to be sent to Ollama models and available models to be listed via its API. The active provider can be configured at startup or switched at runtime.
Integrates with OpenAI and OpenAI-compatible chat completion endpoints as an LLM backend, allowing prompts to be sent, models to be listed, and provider settings such as base URL, API key, and model to be configured or switched at runtime.
Click on "Deploy 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 Open MCPcreate a cube and render an image"
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.
Blender Open MCP
Local-first Model Context Protocol (MCP) server for controlling a live Blender session from AI agents, with a provider-agnostic LLM backend:
Ollama
LM Studio
llama.cpp server
OpenAI (and every OpenAI-compatible endpoint: vLLM, TGI, OpenRouter, Groq, Together, Azure AI Foundry via its OpenAI-compatible surface, …)
any server that speaks
POST /chat/completionswith an optional base URL and API key
Providers are configured at startup (CLI flags or environment variables) and can be switched at runtime through MCP tools, so an agent can hop between backends without restarting the server.
MCP Client ──▶ FastMCP Server ──▶ (TCP 9876) ──▶ Blender add-on (addon.py) ──▶ bpy
│
└──────────────▶ (HTTP) ──▶ LLM provider (Ollama / LM Studio /
llama.cpp / OpenAI-compatible / Azure)Repository layout
Path | Purpose |
| Single-file Blender add-on: TCP server + scene/render/PolyHaven handlers + sidebar panel |
| MCP server: Blender tools, PolyHaven tools, LLM prompt + provider tools |
| Provider-agnostic LLM layer (registry, adapters, model listing) |
| Canonical async MCP client + CLI |
| Thin compat wrapper so |
| pytest suites (server, client, addon) |
Related MCP server: Blender Universal & Token-Efficient MCP Server
Quick start
1. Install
Requires Python ≥ 3.10.
python -m venv .venv
.venv/Scripts/pip install -e ".[dev]" # Windows (bash/PowerShell)
# or: source .venv/bin/activate && pip install -e ".[dev]" # macOS/Linux2. Enable the Blender add-on
Open Blender.
Edit → Preferences → Add-ons → Install…, chooseaddon.py.Enable Blender MCP.
In the 3D Viewport press
N, open the Blender MCP tab and click Start MCP Server (listens onlocalhost:9876by default).
3. Start the MCP server
Default LLM backend is Ollama:
blender-mcp # Ollama at http://localhost:11434, model llama3.2Or pick a different backend at startup:
# LM Studio (OpenAI-compatible, default localhost:1234/v1)
blender-mcp --llm-provider lmstudio --llm-model "local-model"
# llama.cpp server (default localhost:8080/v1)
blender-mcp --llm-provider llamacpp --llm-model qwen2.5-coder
# OpenAI-compatible generic endpoint
blender-mcp --llm-provider openai_compat --llm-base-url http://my-server:8000/v1 \
--llm-api-key sk-... --llm-model my-model
# OpenAI
blender-mcp --llm-provider openai --llm-api-key "$OPENAI_API_KEY" --llm-model gpt-4o-mini
# Azure AI Foundry / Azure OpenAI
blender-mcp --llm-provider azure --llm-api-key "$AZURE_API_KEY" \
--llm-base-url https://my-resource.openai.azure.com \
--llm-model my-deployment \
--llm-extra '{"resource":"my-resource","deployment":"my-deployment","api_version":"2024-06-01"}'Environment variables are honored: BLENDER_OPEN_MCP_PROVIDER,
BLENDER_OPEN_MCP_BASE_URL, BLENDER_OPEN_MCP_MODEL,
BLENDER_OPEN_MCP_API_KEY.
Other useful flags: --host, --port (MCP endpoint, default 0.0.0.0:8000),
--blender-host, --blender-port, --transport streamable_http|http|stdio.
4. Register with an MCP client
Point your MCP client at http://localhost:8000/mcp (streamable HTTP) or run
blender-mcp --transport stdio.
Example Claude/Cursor-style config:
{
"mcpServers": {
"blender": {
"url": "http://localhost:8000/mcp"
}
}
}Available MCP tools
Scene / object control (forwarded to the Blender add-on over TCP):
blender_get_scene_info, blender_get_object_info, blender_create_object,
blender_modify_object, blender_delete_object, blender_set_material,
blender_render_image, blender_execute_code.
PolyHaven assets: blender_get_polyhaven_categories,
blender_search_polyhaven_assets, blender_download_polyhaven_asset,
blender_set_texture.
LLM / provider control:
blender_ai_prompt– send a prompt to the active backend (per-callprovider/base_url/model/api_keyoverrides supported).blender_get_llm_provider– show active provider config (API key masked).blender_set_llm_provider– switch/configure the backend at runtime.blender_list_llm_models– list models (Ollama/api/tagsor OpenAI-compatible/models).
Legacy aliases: blender_set_ollama_model, blender_set_ollama_url,
blender_get_ollama_models keep old Ollama-only clients working.
MCP Prompts (prompts/list / prompts/get):
blender_build_scene– guided plan for building a scene from a description.blender_review_scene– read-only inspection workflow.blender_configure_llm– provider-switching instructions with examples.
Prompts are registered in src/blender_open_mcp/prompts.py.
Runtime provider switching (examples)
# Switch to LM Studio
tool blender_set_llm_provider {"provider":"lmstudio","base_url":"http://localhost:1234/v1","model":"local-model"}
# Switch to llama.cpp
tool blender_set_llm_provider {"provider":"llamacpp","base_url":"http://localhost:8080/v1"}
# Back to Ollama
tool blender_set_llm_provider {"provider":"ollama","base_url":"http://localhost:11434","model":"llama3.2"}Azure AI Foundry (worked example)
Azure's OpenAI-compatible endpoint is deployment-scoped, so three values from
your Azure AI Foundry project are required — all of them go into the extra
parameter, and the model you name in model must match the deployment name:
Resource name — in the Azure portal, open your resource (e.g. Azure OpenAI or AI Foundry project) and take the short name from its endpoint URL:
https://<resource>.openai.azure.com/....Deployment name — on the Deployments page, e.g.
gpt-4o-mini. This is what you pass asmodel(it is not the base model name).API key — on the resource's Keys and Endpoint page.
API version (optional) — e.g.
2024-06-01(the adapter defaults to it).
Switch to Azure at runtime with a single call (CLI form):
blender-mcp-client --host http://localhost:8000 tool blender_set_llm_provider \
'{"provider":"azure","api_key":"YOUR_AZURE_API_KEY","model":"gpt-4o-mini",' \
'"extra":{"resource":"my-openai-resource","deployment":"gpt-4o-mini","api_version":"2024-06-01"}}'The same call through the Python API:
import asyncio
from blender_open_mcp.client.client import BlenderMCPClient
async def main():
async with BlenderMCPClient("http://localhost:8000") as c:
# Switch to Azure AI Foundry
print(await c.set_llm_provider(
provider="azure",
api_key="YOUR_AZURE_API_KEY",
model="gpt-4o-mini",
extra={
"resource": "my-openai-resource",
"deployment": "gpt-4o-mini",
"api_version": "2024-06-01",
},
))
# Confirm the active config (API key is masked)
print(await c.get_llm_provider())
# Use it
print(await c.ai_prompt("Create a red cube at the origin"))
asyncio.run(main())What the adapter does with those values — it builds the deployment-scoped
request and sends the key in the api-key header:
POST https://my-openai-resource.openai.azure.com/openai/deployments/gpt-4o-mini/chat/completions?api-version=2024-06-01
api-key: YOUR_AZURE_API_KEY
{"model": "gpt-4o-mini", "messages": [...], "stream": false}Notes:
You may omit
base_urlentirely (the placeholderhttps://RESOURCE.openai.azure.comis filled in fromextra.resource) or pass the full base URL explicitly.If you use an AI Foundry serverless model endpoint (the
*.services.ai.azure.com/modelssurface) instead of a deployment-scoped resource, pointproviderat the generic OpenAI-compatible adapter with the serverless base URL:provider="openai_compat",base_url="https://<resource>.services.ai.azure.com/models".The same configuration can be applied at startup instead of at runtime:
blender-mcp --llm-provider azure \
--llm-api-key "$AZURE_API_KEY" \
--llm-model gpt-4o-mini \
--llm-extra '{"resource":"my-openai-resource","deployment":"gpt-4o-mini","api_version":"2024-06-01"}'
---
## Client CLI
```bash
blender-mcp-client --host http://localhost:8000 tools
blender-mcp-client --host http://localhost:8000 tool blender_get_scene_info
blender-mcp-client --host http://localhost:8000 tool blender_set_llm_provider '{"provider":"lmstudio"}'
blender-mcp-client --host http://localhost:8000 prompt "Create a metallic sphere at 0,0,2"
blender-mcp-client --host http://localhost:8000 interactiveAs a library:
import asyncio
from blender_open_mcp.client.client import BlenderMCPClient
async def main():
async with BlenderMCPClient("http://localhost:8000") as c:
print(await c.get_scene_info())
await c.create_object("SPHERE", location=(0, 0, 2))
print(await c.ai_prompt("What should I build next?"))
asyncio.run(main())Provider layer internals
src/blender_open_mcp/llm.py keeps a registry of provider specs and routes
every request through one chat helper:
OpenAI-style providers post to
<base_url>/chat/completionswith aBearertoken when an API key is set, and parsechoices[0].message.content.Ollama posts to
/api/chatnatively (or to its/v1/chat/completionssurface when the base URL ends in/v1).Azure posts to
https://<resource>.openai.azure.com/openai/deployments/<deployment>/chat/completions?api-version=…using theapi-keyheader.Model listing: Ollama
/api/tags, others/models(Azure deployments are managed in the portal and not listed).
Add new backends by inserting an entry in PROVIDERS (plus an alias in
PROVIDER_ALIASES); nothing else changes.
Development
.venv/Scripts/python -m pytest tests -qThe suites mock bpy (addon tests), httpx (provider/PolyHaven routing),
and the MCP client wire format, so they run without Blender or a live LLM.
tests/test_integration.py additionally proves the layers work together:
an in-process
fastmcp.Clientsession lists tools/prompts and calls provider tools over the real MCP protocol;the actual
addon.pyTCP server loop is started on a local port (bpy mocked) and driven through the MCP server's Blender bridge, soblender_get_scene_infoandblender_execute_coderound-trip over a real socket;a parity test pins every bridge command to a registered addon handler and every
blender_*tool to a registered MCP tool.
Notes / known gaps
Tests exercise the server without a live Blender; run them against a real Blender session to validate
addon.pyend to end.See
ARCHITECTURE.mdfor the component diagram andAGENTS.mdfor contributor conventions.
This server cannot be deployed
Maintenance
Related MCP Connectors
Blender-as-a-service for agents: search 3D assets, run Blender Python, or brief the studio agent.
Cloud Blender for AI agents: build, inspect, render and animate 3D scenes over remote MCP. Keep editable .blend projects and export GLB or STL. Make your first 3D asset free—30 compute minutes per UTC month, no credit card. First 100 eligible Free account owners to use all 30 minutes in one UTC month by December 31, 2026 UTC receive one calendar month of beta free: 4 compute hours per UTC month, 2 concurrent workers per deployment, 2 deployments, 2048×2048 renders at up to 256 samples, and 10 GiB storage. Existing usage counts toward the 4-hour allowance. Limited to 100 rewards; expires January 1, 2027 00:00 UTC. Free resumes afterward without an automatic charge. Examples, eligibility and terms: https://sceneplane.online/launch?utm_source=glama&utm_medium=directory&utm_campaign=first100
Blender and GLB/FBX/USD/STL rendered on cloud GPUs for AI agents: product shots, turntables, MP4
Generate and edit images, video, voice, lip-sync and 3D models from your AI agent.
Related MCP Servers
- AlicenseCqualityAmaintenanceEnables AI agents to control Blender through 150+ tools across 24 modules, including modeling, materials, lighting, animation, rendering, mesh quality analysis, and visual feedback, plus expert prompts and goal-first workflow management.209MIT
- FlicenseAqualityCmaintenanceEnables AI agents to inspect and drive Blender scenes directly, either through a live editor bridge on port 8190 or automatically via headless background CLI when Blender is closed. Provides token-efficient tools for scene outlining, object creation and modification, modifiers, materials, rendering, asset export, and arbitrary bpy script execution.11-
- AlicenseAqualityNot gradedmaintenanceEnables AI-driven 3D modeling and scene creation in Blender, allowing LLMs to create, modify, and manipulate objects, materials, and assets through natural language.31MIT
- AlicenseAqualityBmaintenanceEnables AI agents to drive Blender 5.1+ for modeling, sculpting, mesh editing, scene management, and rendering through live Python execution.26MIT