blender-meta-mcp
Provides tools to interact with a running Blender instance, enabling execution of bpy scripts, scene and object inspection, and 3D viewport PNG capture.
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-meta-mcpAdd a cube at (0,0,0) and rename it 'MetaCube'"
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-meta-mcp
轻量 Blender MCP:Cursor Agent 用 blender_exec 在已经打开的 Blender 里执行 bpy。心智模型和 ae-meta-mcp 的 ae_exec 一样。
Cursor Agent ──stdio MCP──▶ Node mcp/index ──HTTP :11588──▶ Addon HTTP 线程
│ 入队
▼
bpy.app.timers(主线程)
│ temp_override + exec
▼
Blender bpybpy 只能在主线程调用。HTTP 跑在 addon 的守护线程里,主线程定时器取出任务再执行。
工具
Tool | 作用 |
| 桥是否可达,以及 Blender 版本、文件、场景 |
| 执行任意 Python,最后一行表达式作为 JSON 结果 |
| 场景、模式、集合、最多 200 个物体 |
| 当前 3D 视口的 OpenGL PNG,不是完整渲染 |
Related MCP server: blender-ai-mcp
环境
Blender 4.2 及以上(本仓库在 Blender 5.2.2 LTS / macOS 上跑过
npm run test:smoke)Node.js >= 18
安装
cd blender_meta_mcp
npm install
npm run install:addon在 Blender 里:Edit → Preferences → Add-ons → blender-meta-mcp,启用后保持 Blender 开着。侧栏 MCP 页会显示 127.0.0.1:11588。
接到 Cursor
npm run setup:cursor把输出贴进 ~/.cursor/mcp.json(或项目 .cursor/mcp.json),然后在 MCP 设置里关掉再打开 blender-meta-mcp。样例见 examples/cursor-mcp.json。
验收
npm run test:smoke会另开一个 Blender 窗口(配置写在临时目录,不动本机偏好),依次检查:
blender_health返回版本号,并且有 3D 视口blender_exec创建名为MCP Test的立方体blender_scene_info列表里有它撤消后立方体消失
语法错误返回 traceback,Blender 不退出
blender_viewport返回 PNG关掉这个 Blender 后,health 变为不可达
手测也可以:
import bpy
bpy.ops.mesh.primitive_cube_add(size=2, location=(0, 0, 1))
obj = bpy.context.active_object
obj.name = "MCP Test"
{"name": obj.name, "type": obj.type}写脚本
最后一行写成表达式。bpy 已经在作用域里。约束和对象模型见 skills/blender-bpy/SKILL.md。
目录
mcp/ Node stdio MCP(index、core、context、bridge-client)
addon/ Blender addon(HTTP 线程 + 主线程定时器)
scripts/ install-addon、setup-cursor、smoke-test
skills/ blender-bpy agent skill
examples/ cursor-mcp.json
docs/ DEV.md故障
现象 | 处理 |
health 连接被拒绝 | Blender 没开,或 addon 没启用;看侧栏 MCP 是否在监听 |
端口占用 | 改 addon 偏好里的端口,并设置 |
context is incorrect | 打开一个 3D 视口。桥会套第一个 |
主线程没取走任务 | Blender 正在渲染或处于模态操作;等它结束再调 |
界面卡住 |
|
安全
桥只绑定 127.0.0.1。blender_exec 是本机 Python,能改 Blender 文件,也能动这台机器上的文件。只在本机开发时开。
环境变量
变量 | 默认 | 说明 |
|
| MCP 连 addon 的地址 |
|
| addon 监听端口(优先于偏好) |
|
| 主线程取任务的等待秒数 |
| 启用 | 设为 |
| 自动查找 |
|
License
MIT
Available Tools
4 toolsblender_execA
Execute Python inside the running Blender (bpy), like ae_exec / cocosmcp_exec.
The snippet runs on Blender's main thread with a VIEW_3D temp_override when one exists.
bpy and mathutils are already in scope. The value of the last expression is returned as JSON
(Vector/Euler/Color/Matrix become lists; bpy data-blocks become {type, name}).
Assign result if the last line is not an expression. A top-level return is also accepted.
Prefer the data API over bpy.ops. Do not return raw bpy objects.
Successful calls push an undo step unless undo is false.
Example: bpy.context.scene.name
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | Python snippet. Last expression is the result. | |
| undo | No | Push an undo step before running. Defaults to true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully carries the behavioral burden and does so thoroughly: it discloses main-thread execution, temp_override behavior, return serialization, the need to assign result, acceptance of top-level return, and undo-step behavior. This is rich, concrete behavioral context that goes well beyond the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact yet information-dense, with the core action front-loaded and every subsequent sentence adding necessary execution semantics. The example at the end is useful without padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that there is no output schema and no annotations, the description covers everything an agent needs to invoke the tool correctly: execution context, scope, return formatting, result assignment, undo semantics, and an example. Nothing critical is missing for a general code-execution tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaningful nuance beyond the schema: the last expression becomes the returned value, result must be assigned for non-expression snippets, and the undo step is only pushed on successful calls unless undo is false. This goes beyond the simple 'defaults to true' schema note.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening clause 'Execute Python inside the running Blender (bpy)' clearly states the verb and resource. It does not explicitly differentiate from the sibling tools blender_health, blender_viewport, or blender_scene_info, though the general-purpose nature is evident from the first sentence.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives strong coding guidance ('Prefer the data API over bpy.ops', 'Do not return raw bpy objects') and explains execution context. However, it never states when to choose blender_exec over the sibling tools or when not to use it, so alternative-selection guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
blender_healthA
Check whether the Blender addon bridge is reachable. Returns Blender version, file, and scene.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that the tool is non-mutating (a reachability check) and lists the return contents, but it does not mention behavior on failure, response format, or whether any state is modified. This is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short sentences with no filler. The core action is front-loaded, and the return-value note is directly useful to an agent deciding whether to call this tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a nullary, low-complexity health check, the description provides the essential context: what it verifies and what it returns. There is no output schema, so the explicit return-value summary is valuable, though failure semantics are left unspecified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters/scenario, and the schema is empty, so parameter documentation is not needed. The baseline of 4 applies because there is nothing for the description to compensate for.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Check'), names the resource ('Blender addon bridge'), and clearly distinguishes this from siblings like blender_exec or blender_viewport by framing it as a reachability probe. It also states what it returns, leaving no ambiguity about the tool's purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'Check whether the Blender addon bridge is reachable' implies this is a health/preflight check, but the description does not explicitly say when to use it versus siblings or when not to use it. Usage context is inferable rather than directly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
blender_scene_infoA
Summarize the open Blender file: scene, mode, collections, and up to 200 objects.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It communicates the read-only nature through 'Summarize', scopes the operation to the open file, and reveals a concrete limit ('up to 200 objects'). It does not describe failure behavior when no file is open, but the core behavior is transparent enough.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with zero filler. It efficiently communicates the verb, target resource, scope, and a relevant limit in a compact form.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with no output schema, the description is substantially complete: it states what information is summarized and the object cap. Minor details such as exact return structure or error behavior are not specified, but this is acceptable for a simple inspection tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
This tool has zero parameters and the schema has no properties, so there are no parameter semantics for the description to compensate for. The baseline of 4 applies because there is nothing missing on the parameter side.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action ('Summarize'), the specific resource ('the open Blender file'), and exactly what it covers (scene, mode, collections, and up to 200 objects). This is specific enough to distinguish it from siblings like blender_exec or blender_viewport, even without naming them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when the tool should be used: when a summary of the current Blender scene/collections is needed. However, it does not explicitly state when to use this tool instead of siblings like blender_health or blender_viewport, nor does it mention any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
blender_viewportA
Capture the current 3D viewport as a PNG (OpenGL, longest edge capped). Does not run a full render.
| Name | Required | Description | Default |
|---|---|---|---|
| maxEdge | No | Longest edge in pixels. Default 1280. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries full responsibility. It discloses key behavior: uses OpenGL viewport capture, not a full render engine, and caps the longest edge. As a capture, side effects are minimal, and the non-render clarification is the most important behavioral trait; nothing contradicts.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences that front-load the action and then add the essential 'not a full render' caveat. No filler words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter, read-only capture tool, the description covers what it does and what it avoids. The only minor gap is the lack of explicit output carry-back (file path vs. data), but the PNG output is stated, so it is adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with a full explanation of maxEdge (default, max, exclusive minimum). The description adds no parameter details, which is fine under the baseline; no compensation needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Capture') and resource ('current 3D viewport') with the output format ('PNG') and method ('OpenGL'). The clarification 'Does not run a full render' distinguishes it from a render tool, and the sibling list (health, exec, scene_info) makes it clearly a snapshot utility.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context that it captures the viewport rather than executing a full render, which implies use for quick previews. It does not explicitly name an alternative tool or condition, but the scope statement is sufficient given how different the siblings are.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
4 tool updates
v0.1.0- First observed
blender_exec - First observed
blender_health - First observed
blender_scene_info - First observed
blender_viewport
TDQS
Scored across 4 tools
Each tool has a clear primary purpose: health checking, viewport capture, Python execution, and scene summary. Some minor overlap exists between health and scene_info since both report the current scene name, but descriptions make the distinction clear.
All tools use snake_case with the blender_ prefix, which creates a clear family. Naming blends nouns (blender_health, blender_viewport, blender_scene_info) with a verb (blender_exec), but the pattern remains predictable and readable.
Four tools is a reasonable size for a Blender bridge server. It is slightly lean, but the presence of blender_exec as a general-purpose escape hatch means the small count does not feel restrictive.
The tool surface is essentially complete because blender_exec allows arbitrary bpy Python execution, covering any missing operation. The dedicated health, viewport, and scene_info tools handle the most common inspection and interaction workflows without dead ends.
Maintenance
Related MCP Connectors
Control Unreal Engine to browse assets, import content, and manage levels and sequences. Automate…
Cloud Blender for AI agents: scenes, assets, renders, MP4, STL, GLB — over hosted remote MCP.
Drive real devices from your AI Coding tool. Embed a client SDK (Unity, Godot, Flutter, iOS/macOS, Android, React Native, Web) in your app, then capture screenshots, traverse the UI tree, inject taps and key events, and run automated test tasks on the physical device over a secure relay.
Securely control computers you explicitly pair through files, terminals, processes, screenshots, desktop UI/input, clipboard, browser automation, diagnostics, and document tools.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceA lightweight HTTP server that exposes Blender's camera system for real-time image capture and scene interaction from external applications.1Apache 2.0
- AlicenseNot gradedqualityDmaintenanceConnects MCP-compatible clients to a live Blender scene for AI-assisted 3D workflows, enabling inspection and controlled operations on objects, materials, cameras, lights, render settings, animation, UVs, Geometry Nodes, imports, exports, and Python execution.1MIT
- AlicenseAqualityBmaintenanceConnects MCP clients to a local Blender + Bonsai (BlenderBIM) session for scene inspection, IFC project querying, viewport screenshots, and executing Python code in Blender.86MIT
- AlicenseNot gradedqualityCmaintenanceEnables LLM clients like Claude to control Blender remotely, including scene inspection, object creation/modification, and Python code execution, via a socket-based MCP server.227 npmMIT