Blender-MCP

Blender-MCP

Connects Blender 3D to AI assistants via the Model Context Protocol, enabling natural language driven 3D scene creation, manipulation, and rendering.

Category
访问服务器

README

<!-- ═══════════════════════════ HEADER ═══════════════════════════ --> <div align="center">

<a href="https://github.com/Aayushdubey101/Blender-MCP"> <img src="https://capsule-render.vercel.app/api?type=waving&color=0:EA7600,50:F5792A,100:1a1a2e&height=200&section=header&text=Blender-MCP&fontSize=60&fontColor=ffffff&fontAlignY=38&animation=fadeIn&desc=Drive%20Blender%203D%20with%20natural%20language%20over%20MCP&descSize=16&descAlignY=58" alt="Blender-MCP" /> </a>

<a href="https://github.com/Aayushdubey101/Blender-MCP"> <img src="https://readme-typing-svg.demolab.com?font=Fira+Code&weight=600&size=22&duration=3000&pause=800&color=F5792A&center=true&vCenter=true&width=720&height=45&lines=Pydantic-validated+%E2%80%A2+Zero+telemetry;Async-native+%E2%80%A2+Plugin-extensible;207+tests+%E2%80%A2+90%25+coverage;You+talk.+The+AI+drives+Blender." alt="Typing SVG" /> </a>

<br/>

<a href="https://github.com/Aayushdubey101/Blender-MCP/releases"><img src="https://img.shields.io/badge/version-0.4.1-F5792A?style=for-the-badge" alt="version" /></a> <img src="https://img.shields.io/badge/python-3.10+-3776AB?style=for-the-badge&logo=python&logoColor=white" alt="python" /> <img src="https://img.shields.io/badge/MCP-1.0-000000?style=for-the-badge" alt="mcp" /> <img src="https://img.shields.io/badge/tests-207%20passing-4CAF50?style=for-the-badge" alt="tests" /> <img src="https://img.shields.io/badge/coverage-90%25-4CAF50?style=for-the-badge" alt="coverage" /> <a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-yellow?style=for-the-badge" alt="license" /></a> <a href="https://docs.astral.sh/uv/"><img src="https://img.shields.io/badge/managed%20by-uv-6340AC?style=for-the-badge" alt="uv" /></a>

<br/><br/>

What it is · Why not the alternative · Tools · Quick start · Config · Docker · Architecture

</div>

<!-- ═══════════════════════════════════════════════════════════════ -->

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:#fff

Two 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.

⚔️ 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 ✅ blender-mcp (this) ahujasid/blender-mcp
Telemetry None. Zero phone-home. Default-on Supabase telemetry
Input validation Pydantic v2 with extra="forbid" everywhere None — raw kwargs
Async runtime Native asyncio, non-blocking Synchronous socket.recv
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 server.py
Tool annotations All 4 MCP hints on every tool Mostly omitted
Read-only mode BLENDER_MCP_READ_ONLY=true None
Structured logging BLENDER_MCP_LOG_FORMAT=json Plain strings
Protocol versioning BRIDGE_PROTOCOL_VERSION="1.0" enforced None
Docker Dockerfile + docker-compose.yml None
Hardcoded third-party keys None — bring your own RODIN_FREE_TRIAL_KEY baked into source
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.

<details open> <summary><b>🔍 Inspection — read-only (5)</b></summary>

<br/>

Tool Purpose
blender_ping Confirm Blender + addon reachable, returns versions and protocol
blender_get_scene_info Scene name, frame range, render engine, object count
blender_list_objects List objects, optional filter by type (MESH, LIGHT, CAMERA, …)
blender_get_object_info Full per-object detail (transform, dimensions, materials, mesh/light/camera specifics)
blender_get_viewport_screenshot Inline PNG of the active viewport

</details>

<details> <summary><b>🛠️ Authoring — destructive, disabled in read-only mode (8)</b></summary>

<br/>

Tool Purpose
blender_create_primitive Cube / sphere / cylinder / cone / plane / torus / monkey
blender_transform_object Set location / rotation / scale (any subset)
blender_delete_object Remove by name (idempotent)
blender_set_material Principled BSDF: RGBA, metallic, roughness, optional emission
blender_add_light POINT / SUN / SPOT / AREA with per-type parameters
blender_set_camera Location, aim target, focal length, set-active
blender_render_image Render a frame; returns metadata + inline PNG preview
blender_execute_python Power-user escape hatch (bpy available, set result to return)

</details>

<details> <summary><b>💾 File management (2)</b></summary>

<br/>

Tool Purpose
blender_save_file Save the current .blend (optional target path)
blender_open_file Open a .blend from disk

</details>

🔌 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.

<details> <summary><b>🟢 <code>blender-mcp-polyhaven</code> — free, no key needed (5)</b></summary>

<br/>

Tool Purpose
polyhaven_status Check plugin status and cache directory
polyhaven_categories List asset categories (hdris / textures / models)
polyhaven_search Search PolyHaven's library
polyhaven_download Download an asset to local cache
polyhaven_apply_texture Download + apply texture to an object in Blender
pip install blender-mcp-polyhaven

</details>

<details> <summary><b>🔷 <code>blender-mcp-hyper3d</code> — requires <code>HYPER3D_API_KEY</code> (5)</b></summary>

<br/>

Tool Purpose
hyper3d_status Check plugin status and API key configuration
hyper3d_generate_text Text → 3D model via Rodin API
hyper3d_generate_image Image → 3D model (URL or local file)
hyper3d_poll Poll generation status with exponential backoff
hyper3d_import Poll + download + import GLTF/FBX/OBJ/STL into Blender
pip install blender-mcp-hyper3d
export HYPER3D_API_KEY="your-key"  # https://hyper3d.ai

</details>

<details> <summary><b>🟣 <code>blender-mcp-sketchfab</code> — requires <code>SKETCHFAB_API_KEY</code> for downloads (4)</b></summary>

<br/>

Tool Purpose
sketchfab_status Check plugin status and API key configuration
sketchfab_search Search Sketchfab's 3D model library by keyword
sketchfab_preview Get full metadata for a model by UID
sketchfab_download Download GLTF + import into Blender
pip install blender-mcp-sketchfab
export SKETCHFAB_API_KEY="your-token"  # https://sketchfab.com/settings#password

</details>


🚀 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-MCP

1 · Install dependencies

From the repo root:

uv sync

2 · Install the Blender addon

  1. Open Blender → Edit → Preferences → Add-ons → Install…
  2. Pick blender_addon/blender_mcp.py
  3. Tick the checkbox next to "Development: Blender MCP"
  4. 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:9876

3 · Smoke-test the server

uv run blender-mcp

It 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-mcp

4 · 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).

<details> <summary><b>Claude Desktop</b></summary>

<br/>

%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"
      ]
    }
  }
}

</details>

<details> <summary><b>Claude Code (CLI)</b></summary>

<br/>

claude mcp add blender -- uv --directory <path-to-Blender-MCP> run blender-mcp

Or add manually to ~/.claude/settings.json:

{
  "mcpServers": {
    "blender": {
      "command": "uv",
      "args": ["--directory", "<path-to-Blender-MCP>", "run", "blender-mcp"]
    }
  }
}

</details>

<details> <summary><b>Cursor / Cline / Continue / any MCP client</b></summary>

<br/>

.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.

</details>

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
BLENDER_MCP_HOST 127.0.0.1 Where the Blender addon is listening
BLENDER_MCP_PORT 9876 Same — match the N-panel value
BLENDER_MCP_LOG_LEVEL INFO DEBUG / INFO / WARNING / ERROR
BLENDER_MCP_LOG_FORMAT text text for humans, json for log infra
BLENDER_MCP_READ_ONLY false true disables every destructive tool

Read-only mode (safe demos)

BLENDER_MCP_READ_ONLY=true uv run blender-mcp

blender_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-mcp

Each 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 --build

The 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.md

For 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 tests

CI 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 --background Blender control, file management tools.
  • v1.0.0 — Final polish, full comparison table green on every row.

🔧 Troubleshooting

<details> <summary><b>"Could not connect to Blender at 127.0.0.1:9876"</b></summary>

Open Blender, Preferences → Add-ons, enable Blender MCP, then in the 3D viewport's N-panel → MCP tab → click ▶ Start MCP Bridge.

</details>

<details> <summary><b>"Port already in use"</b></summary>

Change the port in the addon N-panel and set BLENDER_MCP_PORT to match.

</details>

<details> <summary><b>"Tools don't show up in Claude Desktop"</b></summary>

Verify the absolute path in claude_desktop_config.json, then fully quit and relaunch Claude Desktop (Cmd-Q / right-click tray icon → Quit).

</details>

<details> <summary><b>"Render timed out"</b></summary>

Pass timeout_seconds=600 (or higher) on the blender_render_image call for heavy Cycles renders. Default is 300s.

</details>

<details> <summary><b>"Protocol version mismatch"</b></summary>

Re-install blender_addon/blender_mcp.py in Blender — your addon and server are out of sync.

</details>


⭐ Star history

<div align="center">

<a href="https://star-history.com/#Aayushdubey101/Blender-MCP&Date"> <img src="https://api.star-history.com/svg?repos=Aayushdubey101/Blender-MCP&type=Date" alt="Star History Chart" width="600" /> </a>

</div>


📜 License

MIT — see LICENSE.

<div align="center">

<img src="https://capsule-render.vercel.app/api?type=waving&color=0:1a1a2e,50:F5792A,100:EA7600&height=100&section=footer" alt="footer" />

</div>

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选
mcp-server-qdrant

mcp-server-qdrant

这个仓库展示了如何为向量搜索引擎 Qdrant 创建一个 MCP (Managed Control Plane) 服务器的示例。

官方
精选
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选