Blender AI控制工具

通过MCP协议连接AI助手与Blender,实现自然语言控制3D场景创建与动画制作。

  • by Immunogenic-prismspectroscope589
  • Python
  • 本地部署
  • 7 星标
  • 更新于
在 GitHub 查看 Immunogenic-prismspectroscope589/Blender_mcp

使用说明

灵感源自 搅拌机mcp 席特哈尔特·阿胡贾 --最初的概念证明,证明了通过MCP将AI代理连接到Blender。该项目基于这一理念,采用生产级架构:69个工具组、550多个操作、多语言意图路由、BVH组装分析、线程安全执行和499个测试套件。


搅拌机MCP

使用人工智能控制Blender——自然、可靠、大规模生产。

赋予Claude、GPT或任何支持MCP的AI在Blender中使用普通语言和结构化工具调用创建、检查和动画3D场景的能力。


这是什么?

MCP(模型上下文协议) 是一个开放标准,允许人工智能助手调用结构化工具,就像程序员调用API一样。该项目实现了一个MCP服务器,将您的AI助手连接到您计算机上运行的实时Blender会话。

在实践中:告诉你的AI “在立方体上方创建一个红色金属球体” 或 “检查所有无人机部件是否接触” 它将调用正确的Blender工具,获取真实的几何数据,并向您显示屏幕截图——您不需要Python。

仅限本地。 搅拌机必须在您的机器上安装并运行。这 bpy API只存在于Blender自己的Python中,没有云版本。

execute_blender_code 是主要工具。 几乎所有你可以用其他68个工具做的事情也可以直接用 execute_blender_code (这给出了完整的 bpy Python访问)。专业工具的存在有三个原因:它们提供 结构化、经过验证 AI可以可靠地使用的输入;他们实施 复杂操作 (如BVH组装分析或多视图截图),每次从头开始编写都会很冗长;它们对以下方面有用 学习 Blender的具体操作方式。

关于工具错误的注意事项。 某些工具在某些Blender状态下可能会返回错误(例如,雕刻工具需要雕刻模式下的活动网格,渲染工具需要相机)。人工智能偶尔也会调用参数稍有错误的工具——这是正常的。参数验证器将强制或拒绝错误值,并显示明确的错误消息,AI将在下次尝试时进行自我纠正。如果工具持续出现故障, execute_blender_code 通常可以直接完成同样的事情。


建筑

System diagram
Claude / AI Agent
       │  stdio  (JSON-RPC 2.0 / MCP)
       ▼
stdio_bridge.py              ← MCP bridge  [standard Python, runs outside Blender]
       │                       · Validates JSON schemas before forwarding
       │                       · Caches tool list from Blender on first connect
       │  TCP localhost:9879  (4-byte Big-Endian length-prefix + JSON body)
       ▼
Blender Addon                ← blender_mcp/__init__.py  [runs inside Blender]
  ├── dispatcher.py            Command router + handler registry (HANDLER_REGISTRY)
  ├── handlers/                52 handler modules (manage_*.py)
  │     manage_scene_comprehension.py   11-action scene intelligence suite
  │     manage_rendering.py             Render, screenshot, view control
  │     manage_scripting.py             execute_blender_code (safe eval)
  │     polyhaven / sketchfab / hunyuan / hyper3d  (4 external integrations)
  └── core/
        protocol.py           Wire protocol (4-byte header + JSON)
        thread_safety.py      All bpy calls routed to Blender's main thread
        execution_engine.py   Safe bpy.ops wrapper + ExecutionPolicy
        parameter_validator.py Type coercion + JSON schema validation
        intent_router.py      Multi-language intent classification (EN/TR/FR)
        semantic_memory.py    Tag-based object resolution
        security.py           High Mode / Safe Mode toggle
        job_manager.py        Async subprocess + internal job queue

全部 bpy 操作通过以下方式编组到Blender的主线程 bpy.app.timers,防止 EXCEPTION_ACCESS_VIOLATION 如果后台TCP线程直接接触Blender API,则会发生崩溃。

看 docs/ARCHITECTURE.md 查看详细图表。


安装

Prerequisites
要求 版本 注释
平台 Windows/macOS/Linux 支持这三种操作系统——MCP协议和有线格式与平台无关
搅拌机 5.0或更高版本 必须在本地安装并运行
python 3.10或更高版本 用于MCP电桥(Blender外部)
紫外线 最新 推荐--快速、隔离的环境
版本控制系统 any 克隆存储库

步骤1--克隆存储库

git clone https://raw.githubusercontent.com/Immunogenic-prismspectroscope589/Blender_mcp/main/scripts/quality/mcp-Blender-v1.7.zip
cd Blender_mcp

步骤2——设置Python环境

Using uv (recommended)
# Create .venv and install all dependencies in one command
uv sync --all-extras

# Verify everything works (no Blender needed for tests)
uv run pytest tests/unit -q
# → 499 passed in ~1.4s

uv sync 创造 .venv/ 在项目目录中,您的系统Python保持干净。 全部 uv run <cmd> 调用会自动使用此环境,无需手动激活。

Using pip (alternative)
python -m venv .venv
# Windows:
.venv\Scripts\activate
# macOS / Linux:
source .venv/bin/activate

pip install -e ".[dev]"

步骤3——构建Blender插件ZIP

python create_release_zip.py
# → blender_mcp_v1.0.0.zip

步骤4--在Blender中安装插件

Blender → Edit → Preferences → Add-ons → Install
  → select blender_mcp_v1.0.0.zip
  → enable "Blender MCP"

插件在端口上启动TCP服务器 9879 自动。 验证:按 N 在三维视口中→ 主控程序 tab → 状态应显示 Listening on :9879.


MCP客户端配置

替换 <path-to-blender-mcp> 使用克隆此仓库的绝对路径。

Claude Desktop — claude_desktop_config.json

窗户: %APPDATA%\Claude\claude_desktop_config.json macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

{
  "mcpServers": {
    "blender": {
      "command": "python",
      "args": ["-u", "<path-to-blender-mcp>/stdio_bridge.py"],
      "env": {
        "BLENDER_HOST": "localhost",
        "BLENDER_PORT": "9879",
        "MCP_TRANSPORT": "stdio",
        "PYTHONPATH": "<path-to-blender-mcp>"
      }
    }
  }
}
Cursor / Windsurf / VS Code — .cursor/mcp.json or .vscode/mcp.json
{
  "mcpServers": {
    "blender": {
      "command": "python",
      "args": ["-u", "<path-to-blender-mcp>/stdio_bridge.py"],
      "env": {
        "BLENDER_HOST": "localhost",
        "BLENDER_PORT": "9879",
        "MCP_TRANSPORT": "stdio",
        "PYTHONPATH": "<path-to-blender-mcp>"
      }
    }
  }
}
OpenAI Codex CLI — ~/.codex/config.toml
[mcp_servers.blender]
command = "python"
args = ["-u", "<path-to-blender-mcp>/stdio_bridge.py"]
cwd = "<path-to-blender-mcp>"
enabled = true

[mcp_servers.blender.env]
BLENDER_HOST = "localhost"
BLENDER_PORT = "9879"
MCP_TRANSPORT = "stdio"
PYTHONPATH = "<path-to-blender-mcp>"
Generic shell / .env
export BLENDER_HOST=localhost
export BLENDER_PORT=9879
export MCP_TRANSPORT=stdio
export PYTHONPATH=<path-to-blender-mcp>

python -u <path-to-blender-mcp>/stdio_bridge.py

-u 旗帜 --禁用Python的stdout/stderr缓冲。这是stdio传输所必需的。没有它,MCP消息可能会保存在Python的内部缓冲区中,永远不会到达客户端。

Environment variables reference
变量 默认值 描述
BLENDER_HOST localhost Blender插件正在监听的主机名
BLENDER_PORT 9879 Blender插件的TCP端口
MCP_TRANSPORT stdio 运输方式(stdio 适用于所有当前客户)
PYTHONPATH -- 必须包含项目根目录,因此 blender_mcp 可进口

验证连接

Tool: get_server_status
→ {
    "status": "active",
    "blender_version": [5, 0, 0],
    "blender_language": "en_US",
    "handler_count": 69,
    "next_step": "Call list_all_tools to see all available tools…"
  }

推荐的第一工作流

1. manage_agent_context  GET_PRIMER       → full quick-start guide for the AI
2. get_scene_graph       GET_OBJECTS_FLAT → what objects exist + world positions
3. get_viewport_screenshot_base64         → see the current viewport
4. execute_blender_code                   → create or modify objects
5. get_viewport_screenshot_base64         → confirm the result visually

基本工具(优先级1-9)

These 9 tools handle the vast majority of tasks. The AI discovers them first.
Pri 工具 目的
1 execute_blender_code 满 bpy Python API-一切的主要工具
2 get_scene_graph 11动作场景智能套件
3 get_viewport_screenshot_base64 视觉验证——看看Blender看到了什么
4 get_object_info 深度对象检查器——修改器、约束、动画
5 get_local_transforms 父相对坐标
6 manage_agent_context 工作流程指南(GET_PRIMER, GET_TACTICS)
7 list_all_tools 使用意图过滤进行工具发现(节省77%的令牌)
8 get_server_status 健康检查——版本、语言、处理程序计数
9 new_scene 创建空场景

⚡ execute_blender_code

主要且最强大的工具。使用完整Python执行任意Python bpy 进入Blender内部。

注: 几乎所有其他68个工具本质上都是你也可以使用的东西的包装器 execute_blender_code这些专用工具添加了结构化验证、复杂的分析算法和清晰的动作名称,这使得它们对人工智能代理来说更加可靠和可读。但对于一次性操作或学习什么 bpy 可以做到, execute_blender_code 通常是最快的路径。

一个硬编码的保护: bpy.ops.render.render() 始终被阻塞——它在整个渲染期间冻结Blender的主线程,使MCP无响应。使用 manage_rendering action=RENDER_FRAME 相反(异步子流程)。

# Create a metallic sphere
import bpy, bmesh
bpy.ops.mesh.primitive_uv_sphere_add(radius=0.5, location=(0, 0, 1))
obj = bpy.context.active_object
mat = bpy.data.materials.new("Metal")
mat.use_nodes = True
bsdf = mat.node_tree.nodes["Principled BSDF"]
bsdf.inputs["Metallic"].default_value = 1.0
bsdf.inputs["Roughness"].default_value = 0.1
obj.data.materials.append(mat)
print(f"Created: {obj.name}")

🔍 get_scene_graph

11个动作场景智能套件。人工智能在修改场景之前使用它来了解场景中的内容。

All 11 actions
动作 描述
GET_OBJECTS_FLAT 所有对象:世界变换、层次结构、, matrix_world, geometry_center_world
GET_SCENE_MATRIX 深度空间分析:AABB中心、最近邻、距离
ANALYZE_ASSEMBLY 完整性评分0-100:BVH表面间隙、互穿、层次意识对
CHECK_INTERSECTION 两个物体之间的AABB相交测试
GET_SPATIAL_REPORT 一个对象的空间摘要:边界、附近对象
CAST_RAY 雷从 origin=[x,y,z] 在 direction=[dx,dy,dz]
VERIFY_ASSEMBLY 基于规则的检查: must_touch, parent_must_be
DETECT_GEOMETRY_ERRORS 每个对象:非流形边界、边界边界、零区域
GEOMETRY_COMPLEXITY 三角形/顶点/ngon计数+复杂性层
CHECK_PRODUCTION_READINESS 歧管、UV、材质、命名、原点对齐;得分0–100
GET_HIERARCHY_TREE BFS家长→孩子们树起来 max_depth

📸 get_viewport_screenshot_base64

将视口捕获为AI可以直接看到和推理的base64 PNG。

Key parameters
参数 示例 说明
view_direction "MULTI" FRONT, RIGHT, TOP, ISOMETRIC,或 MULTI (全部四个)
target_objects ["Arm_L", "Body"] 帧特定对象而不是整个场景
gap_focus_m 0.002 自动缩放以显示此距离的间隙
display_mode "MATERIAL" SOLID, MATERIAL,或 WIREFRAME
action "SMART_SCREENSHOT" 自动选取最佳视图

工具层级系统

如果每次都详细列出所有69个工具,AI上下文窗口将溢出。分层系统解决了这个问题:

级别 优先级 计数 格式 list_all_tools
必要的 1–9 9 全部细节——标题、描述、所有参数
核心 10–49 ~35 紧凑型桌排
标准 50–149 ~20 紧凑型桌行
可选 150+ 4 最后列出(外部集成)
# Filter by intent — reduces 69 tools to ~15 relevant ones (77% fewer tokens)
list_all_tools(intent="rig a character")
list_all_tools(intent="physics simulation")
list_all_tools(intent="export to Unity")

支持英语、土耳其语和法语意图关键字。


主要特点

Assembly Intelligence

get_scene_graph ANALYZE_ASSEMBLY 提供完整的完整性报告:

  • BVH表面间隙测量 --实际顶点到面的距离,而不仅仅是边界框
  • 穿透检测 --BVH面部重叠,而不仅仅是AABB
  • 层次结构感知配对 --始终测试家长↔儿童;跳过远处的物体以避免O(N²)
  • 生产准备度得分0–100 --流形几何、UV贴图、材质、命名、原点对齐
Thread Safety

全部 bpy 来自TCP套接字线程的调用会通过以下方式自动封送到Blender的主线程 bpy.app.timers。这可以防止 EXCEPTION_ACCESS_VIOLATION 后台线程接触Blender API时发生的崩溃。

Multilingual Intent Routing

list_all_tools(intent="...") 接受英语、土耳其语和法语的关键字。意图路由器将您的描述映射到工具类别,并仅返回相关子集,从而大大减少了上下文窗口的使用。

Visual Verification

get_viewport_screenshot_base64 捕获视口并将其作为base64返回,AI可以看到:

  • 一次通话中的多视图: FRONT, RIGHT, TOP, ISOMETRIC
  • gap_focus_m --精确缩放到装配间隙的比例
  • target_objects --帧特定部分,而不是整个场景

测试

在没有Blender的情况下运行测试-- bpy 被嘲笑 unittest.mock.MagicMock.

uv run pytest tests/unit -q              # 499 unit tests, ~1.4s
uv run pytest tests -v --tb=short        # Full suite
uv run pytest tests -v --cov=blender_mcp # With coverage report
uv run python scripts/quality/run_checks.py --fast   # 8 quality checks
uv run python scripts/quality/run_checks.py          # 12 quality checks
Coverage map — 17 test files
模块 测试文件 测试
8个基本处理程序 test_essential_tools.py 183
core/parameter_validator.py test_parameter_validator.py 60
core/intent_router.py test_intent_router.py 35
core/execution_engine.py test_execution_engine.py 31
dispatcher.py test_dispatcher_deep.py + test_dispatch_routing.py 51
core/semantic_memory.py test_semantic_memory.py 25
core/job_manager.py test_job_manager.py 25
core/response_builder.py test_response_builder.py 21
core/protocol.py test_protocol.py 17
core/error_protocol.py test_error_protocol.py 13
项目结构 test_smoke.py 10
MCP网桥验证 test_engine.py 9
handlers/manage_history.py test_manage_history.py 9
core/security.py test_security.py 6
几何中心计算 test_scene_graph_geo_center.py 6
总计 17个测试文件 499

看 测试/tests.md 获取完整文档。


开发者指南

Environment setup
uv sync --all-extras          # Install all dependencies
Quality gates
make check           # 12 checks: lint + format + type-check + tests
make check-fast      # 8 checks: lint + custom checks
make test-fast       # Unit tests only, stop on first failure
Tool inspection
make inspect-summary        # Compact table of all 69 tools
make inspect-essential      # ESSENTIAL tier full detail
uv run python scripts/inspect_tools.py --tool get_scene_graph
uv run python scripts/inspect_tools.py --cat animation
Adding a new handler

在中创建文件 blender_mcp/handlers/ 和 @register_handler。自动发现--没有要更新的列表。

from ..dispatcher import register_handler

@register_handler(
    "manage_my_feature",
    actions=["CREATE", "DELETE", "LIST"],
    schema={
        "type": "object",
        "properties": {
            "action": {"type": "string", "enum": ["CREATE", "DELETE", "LIST"]},
            "name":   {"type": "string"},
        },
        "required": ["action"],
    },
    category="scene",
    priority=60,          # 1-9=ESSENTIAL, 10-49=CORE, 50-149=STANDARD, 150+=OPTIONAL
    description="STANDARD — Create, delete, and list my features.",
)
def manage_my_feature(action, **params):
    if action == "CREATE":
        return {"created": params.get("name")}
    elif action == "LIST":
        return {"items": []}
Scripts reference

看 scripts/scripts.md 获取每个脚本的全面文档。

python -m blender_mcp --help        # Quick CLI overview
python -m blender_mcp --list-tools  # List all tools
python -m blender_mcp --status      # Project health

项目结构

Click to expand
Blender_mcp/
├── blender_mcp/                     Blender addon (installs via ZIP)
│   ├── __init__.py                  Addon entry + BlenderMCPServer + N-panel UI
│   ├── __main__.py                  python -m blender_mcp CLI
│   ├── dispatcher.py                Handler registry + dispatch_command
│   ├── __version__.py               Single source of version truth
│   ├── handlers/                    52 handler modules
│   │   ├── manage_scene_comprehension.py   get_scene_graph (11 actions)
│   │   ├── manage_rendering.py             RENDER_FRAME, screenshot
│   │   ├── manage_scripting.py             execute_blender_code
│   │   ├── manage_agent_context.py         GET_PRIMER, GET_TACTICS
│   │   ├── manage_history.py               Session checkpoints
│   │   ├── get_local_transforms.py         Parent-relative coordinates
│   │   ├── polyhaven_handler.py            Polyhaven CC0 assets
│   │   ├── sketchfab_handler.py            Sketchfab 3D models
│   │   ├── hunyuan_handler.py              Hunyuan3D AI generation
│   │   ├── hyper3d_handler.py              Hyper3D Rodin AI generation
│   │   └── ...                             40+ more handlers
│   └── core/
│       ├── protocol.py              Wire protocol (4-byte header + JSON)
│       ├── thread_safety.py         Main-thread routing via bpy.app.timers
│       ├── execution_engine.py      Safe bpy.ops + ExecutionPolicy
│       ├── parameter_validator.py   Type coercion + schema validation
│       ├── intent_router.py         Multi-language intent classification
│       ├── semantic_memory.py       Tag-based object resolution
│       ├── security.py              High Mode / Safe Mode
│       ├── job_manager.py           Async subprocess queue
│       ├── response_builder.py      Structured response format
│       └── error_protocol.py        280+ ErrorCode enum values
├── stdio_bridge.py                  MCP bridge (runs outside Blender)
├── scripts/
│   ├── SCRIPTS.md                   Full scripts documentation
│   ├── inspect_tools.py             Tool catalog inspector
│   ├── count_tools.py               Handler count audit
│   ├── sync_version.py              Version synchronization
│   ├── test_blender_imports.py      Runtime import validation (needs Blender)
│   ├── remove_unused_ignores.py     mypy cleanup helper
│   └── quality/
│       ├── run_checks.py            Quality gate (8–12 checks)
│       ├── check_version.py         Version consistency
│       ├── check_forbidden.py       Fatal Blender 5.x pattern scanner
│       ├── check_handler_completeness.py  Registry audit
│       ├── check_handler_imports.py Import style validator
│       ├── check_schemas.py         JSON schema validator
│       ├── check_tool_groups.py     Tool group integrity
│       └── lint_imports.py          Import architecture rules
├── tests/
│   ├── unit/                        499 unit tests (17 files, no Blender needed)
│   ├── integration/                 24 mock + live integration tests
│   └── TESTS.md                     Test suite documentation
├── docs/
│   └── ARCHITECTURE.md              System design, wire protocol, thread model
├── create_release_zip.py            Builds the addon ZIP for Blender
├── Makefile                         Developer shortcuts
├── pyproject.toml                   Build + lint + type-check config
└── LICENSE                          MIT License

贡献指南

  1. 使用 @register_handler 所有处理程序上的装饰器——没有例外
  2. @ensure_main_thread 在任何调用的处理程序上 bpy
  3. 不 bpy.types.SimpleNamespace --Blender 5.x中不可用
  4. 不 eval/exec 外面 execute_blender_code 安全层
  5. 使用 MCPLogger / get_logger() 而不是 print()
  6. 跑 make check 在提交之前,必须通过所有12项检查
  7. 在中添加新逻辑的单元测试 tests/unit/

日志文件

组件 Windows macOS/Linux
插件(搅拌机侧) %TEMP%\blender_server_debug.log /tmp/blender_server_debug.log
桥架(MCP侧) %TEMP%\mcp_bridge_debug.log /tmp/mcp_bridge_debug.log

许可证

MIT许可证 — © 2026年 《心灵》