MCP for Blender 安装实战:三步接通 AI 与 Blender,一句话在视口里造出 3D 场景
【免费下载链接】mcp-for-blenderCommunity plugin to control Blender 3D with any LLM of your choice. Not affiliated with the official Blender Foundation.项目地址: https://gitcode.com/GitHub_Trending/bl/mcp-for-blender
你在 Claude 里敲下"建一个低多边形小屋",转了十几秒,弹回来一行failed to start: spawn uvx ENOENT;换 Cursor 再试,Blender 侧边栏停在 "Not connected",指令石沉大海,视口纹丝不动。问题多半不在你,而在链路的某一环没对上——uv 没装好、客户端没找到uvx、插件没连上、端口两边不一样,每一种长出来的症状都长得像"AI 不行"。MCP for Blender 是一个开源插件:它在你常用的大模型客户端(Claude、Cursor、Codex 都行)和 Blender 之间架一座桥,你打自然语言,它在 Blender 里建物体、改材质、跑 Python、从素材库拉资源。这篇文章带你把这座桥架通,直到第一条指令真的在视口里变出东西。
先认识这条流水线:后厨传菜的比喻
装东西之前,先花一分钟记住下面这张表。后面所有排错,都是拿它对照"菜卡在哪一桌"。
| 组件 | 你可以把它理解成 | 干的事 |
|---|---|---|
| AI 客户端 | 点菜顾客 | 你开口下单的地方,菜好不好吃看它传话传得准不准 |
| MCP 服务端(mcp-for-blender) | 传菜服务员 | 把你的口头要求写成一张张 JSON 点菜单,端到传菜口 |
| 端口 9876 | 传菜口编号 | 服务员和厨师各写一个号,两边一致菜才递得过去 |
| Blender 插件(addon.py) | 掌勺厨师 | 在 Blender 内部真正动手:建网格、调节点、执行代码 |
| JSON 命令与回执 | 点菜单和回条 | 下单是{"type": ..., "params": ...},回来是status为success或error,你看到的一切都以它为凭据 |
第一关:把服务端从客户端拉起来
这一关只解决一件事:客户端一启动,能自己把 mcp-for-blender 服务端带起来。
安装 uv,拿到 uvx 启动器
目标:系统里有一个随时可用的uvx命令,它是后面一切的地基。分平台选一条装(官方安装脚本,别走 pip):
# macOS brew install uv # Linux curl -LsSf https://astral.sh/uv/install.sh | sh# Windows:装完把 %USERPROFILE%\.local\bin 加进 PATH,再重开终端 powershell -c "irm https://astral.sh/uv/install.ps1 | iex"⚠️ 别用pip install uv凑数:它常常不生成uvx命令,还会把 uv 塞进客户端看不见的虚拟环境里,等你下一步配置好了,客户端照样报找不到命令。
确认:终端里跑uvx --version,能吐出一个版本号才算过这一小步。
在客户端配置里挂上服务
目标:客户端配置里多一个blender条目。以 Claude 桌面版为例,打开设置 → 开发者 → 编辑配置,把下面这段合进claude_desktop_config.json(Cursor、VS Code 的 MCP 配置同构,照搬即可):
{ "mcpServers": { "blender": { "command": "uvx", "args": ["mcp-for-blender"] } } }注意 PyPI 包名已从blender-mcp改为mcp-for-blender,老配置里的旧名还能跑,但新装请用新名。
⚠️ 两个易踩的坑:一是配置文件只在客户端启动那一刻读一次,改完必须彻底退出重开(Windows 上要从系统托盘退出,关窗口不算);二是同一时间只挂一个客户端跑这个服务,两个客户端抢同一条 socket,回执会串到别人头上。
确认:重启后客户端的工具列表里出现blender条目、旁边带锤子图标,第一关通关。
第二关:把厨师请进 Blender
目标:Blender 里装上插件,并能在侧边栏找到它的操作面板。
一行命令装插件
uvx mcp-for-blender install-addon它把插件复制进 Blender 的 addons 目录(文件名blender_mcp.py),打印落盘位置,并给被替换的旧文件留一份.bak。
⚠️ 如果它找不到你机器上的 Blender,走手动路线:先git clone https://gitcode.com/GitHub_Trending/bl/mcp-for-blender,然后打开 Blender,编辑 → 偏好设置 → 插件 → 安装…,选仓库根目录下的addon.py(整个插件就是这一个文件),装完启用Interface: MCP for Blender。
确认:3D 视口按N键,侧边栏出现MCP for Blender标签页,能看到 Port 输入框(默认 9876)和Connect to MCP server按钮。
第三关:打通传菜口,发出第一条指令
目标:插件开始监听端口,客户端的点菜单能收到回条。
- 在侧边栏MCP for Blender标签里,按需要勾选资源库(比如免密钥的 Poly Haven)
- Port 保持默认
9876 - 点Connect to MCP server
- 回客户端发一句"建一个低多边形地牢,要火把和石柱"
⚠️ 第一条指令偶尔超时没回音,属已知行为:socket 通道是首条命令到达时才真正建起来的。直接重发一次,别急着怀疑前面装错了。
确认(通关判定,三条齐了才算过):面板从 "Not connected" 变成 "Connected on port 9876";客户端有正常的工具调用回执;视口里开始冒物体。到这里,桥已经架完。
实战三道菜:从建场景到导出 GLB
三道菜按"敢放手的程度"递进,每道都有验证标准和一句原理提炼。
菜一:一句话建场景,再让 AI 回看一眼
验证标准:AI 能根据视口截图说出场景里有什么,并按你的要求修正。
- 确认面板显示 "Connected on port 9876"
- 发送:"创建一个低多边形地牢:火把、石柱、一扇铁门"
- 追加:"用视口截图确认一下场景状态"
- 哪里不满意就说"把火把往左挪一点",再让它截图核对
⚠️ 截图走 base64 回传,场景很大时会慢一些,属正常现象,别在途中重发。
如果你用的是 Codex,可以顺手装它带在仓库里的插件(git clone之后执行codex plugin marketplace add ./blender-mcp/integrations/codex,重启后在插件目录安装MCP for Blender):聊天旁边直接开一块实时视口,点一下物体就能挂到下一条消息里,"回看一眼"都省了。
原理提炼:AI 改完会"回头看"视口,建模就从盲改变成了"操作 → 截图 → 修正"的闭环。
菜二:跑任意 Python,把立方体变成金色金属
验证标准:材质面板里 Principled BSDF 节点 Metallic 为 1、Roughness 为 0.2。
- 先把当前文件存盘(铁律,下面会解释为什么)
- 让 AI 新建一个立方体
- 发送:"把这个立方体变成金色金属材质,粗糙度 0.2"
- 切到材质面板核对节点参数
⚠️execute_blender_code能执行任意 Python,等于把 Blender 的控制权整个交给 AI。翻车时唯一的后悔药就是你存的那个文件,所以动手前先存盘;更保守一点,可以在服务端配置里设BLENDER_MCP_SAFE_MODE=1,让脚本先过一遍安全检查再执行,被拦下的脚本会带着原因退回给 AI 重试。
原理提炼:工具层之外还能直接写bpy,自由度没有上限,风险也没有上限——存盘是这两者的交换条件。
菜三:用 Poly Haven 铺一个海滩,再导出 GLB
验证标准:世界环境换成 HDRI 光照,场景里多出岩石和植被物体,最后拿到一个能打开的.glb文件。
- 侧边栏勾选Poly Haven(CC0 免费、免密钥、无账号,勾上就是全部设置)
- 发送:"用 Poly Haven 的 HDRI、岩石和植被做个海滩氛围"
- 检查世界环境节点和新增物体
- 追加:"把当前场景导出为 GLB",让
export_scene把文件交给下游应用
⚠️ 素材下载跑在 Blender 主线程上,UI 会卡到下载完成,这是现象不是死机;另外分辨率每上一档体积大约翻四倍,离镜头远的素材只要 1k 或 2k,别贪 4k。
原理提炼:插件把"搜索、下载、应用"做成了成套管道,AI 全程不用碰任何网页。
改参数之前:先对号入座
| 你的情况 | 看哪一节 |
|---|---|
| 什么都不想动,只要默认行为 | 默认值一览 |
| 9876 被占,或想同时开两个 Blender | 换端口:两端必须同号 |
| 服务端要跑在 Docker / 另一台机器 | Docker 跨机器连接 |
| uvx 起服务时报编译错、Python 打架 | 钉死 Python 版本 |
| 一条数据都不想上报 | 关掉遥测 |
默认值一览
BLENDER_HOST默认localhost:服务端只找本机的 BlenderBLENDER_PORT默认9876,插件面板的 Port 输入框默认也是 9876- 单次 socket 请求的超时上限 180 秒
- 遥测默认只发一条最小匿名用量记录(工具名、耗时、版本号之类);你的提示词、代码、截图默认不收集,除非你在插件偏好里明确勾选同意
换端口:两端必须同号
触发条件:9876 被别的程序占了,或你并排开着两个 Blender 实例。
改法:客户端配置的env里加"BLENDER_PORT": "9877",或在args里加--port 9877(命令行参数优先于环境变量);然后把插件面板的 Port 改成同一个号。两条路都走通后两边都要重连。
验证:面板显示 "Connected on port 9877",指令有回条。⚠️ 只改一边,等于往一个已停机的号码拨电话,永远没人接。
Docker 跨机器连接
触发条件:MCP 服务端跑在容器或另一台机器里(Blender 本体仍然在你自己机器上,容器只托管服务端)。
改法:仓库根目录自带 Dockerfile,docker build -t mcp-for-blender .之后,镜像默认BLENDER_HOST=host.docker.internal,macOS/Windows 的 Docker Desktop 开箱就能够到宿主机的 Blender。Linux 上这个域名不存在,改用 host 网络:
{ "command": "docker", "args": ["run", "-i", "--rm", "--network=host", "-e", "BLENDER_HOST=localhost", "mcp-for-blender"] }验证:让 AI 截一张视口图能正常返回,说明整条链路是通的。⚠️ 插件的 socket 没有认证也没有加密,任何够得到这个端口的人都能在你的 Blender 里跑 Python——跨机器请保持 localhost + SSH 隧道,别把端口直接挂到网络上。
钉死 Python 版本
触发条件:机器上有 conda/pyenv,或新 CPython 缺现成 wheel,uvx 一拉服务就刷编译报错。
改法:在客户端配置里锁住解释器,并让 uv 只用自己管理的 Python:
{ "command": "uvx", "args": ["--python", "3.11", "mcp-for-blender"], "env": { "UV_PYTHON_PREFERENCE": "only-managed" } }--python 3.11仍满足包要求的>=3.10;3.11 有现成 wheel,基本绕开编译。
仍怀疑旧缓存捣乱,就清掉重拉:
uv cache clean mcp-for-blender blender-mcp && uvx --refresh mcp-for-blender验证:客户端不再刷编译错误,锤子图标正常出现。
关掉遥测
触发条件:连那条最小匿名用量记录都不想发。
改法:终端export DISABLE_TELEMETRY=true后再启动,或写进客户端配置的env("DISABLE_TELEMETRY": "true")。
验证:服务端日志不再有任何上报动作,功能完全不受影响。
卡住了:先抄报错原文,再走对应路线
| 你看到的现象 | 走哪条路线 |
|---|---|
| 客户端起不来,报 spawn 错误 | 路线一 |
| 服务起来了,Blender 一直超时 | 路线二 |
| 简单指令正常、复杂请求超时或卡住 | 路线三 |
| 上面全试过了 | 终极动作 |
路线一:客户端根本起不来
报错原文(Ctrl+F 对号入座):
failed to start: spawn uvx ENOENT- 终端执行
which uvx(macOS/Linux)或where uvx(Windows)→ 预期:打印出 uvx 的完整路径 - 把这个绝对路径填进配置的
"command"(Windows 也可写成"command": "cmd", "args": ["/c", "uvx", "mcp-for-blender"])→ 预期:配置指向的是绝对路径。原理在此:图形界面客户端不继承终端的 PATH,"终端里明明能跑"和"客户端找不到"可以同时为真 - 彻底退出客户端再重启 → 预期:工具列表出现 blender 条目
兜底:重装 uv,重新确认uvx --version有版本号。
路线二:服务在跑,Blender 一直超时
报错原文:
Timeout waiting for Blender response - try simplifying your request. If Blender is running headless (blender -b), commands never execute; run Blender with a GUI or via 'xvfb-run -a blender' instead- 回 Blender 侧边栏看面板 → 预期:显示 "Connected on port …" 而不是 "Not connected";不是的话先点Connect to MCP server
- 核对面板 Port 与
BLENDER_PORT/--port的取值 → 预期:两边数字一致 - 确认 Blender 是带界面启动的 →
blender -b后台模式下命令永远不会执行,换 GUI 启动或xvfb-run -a blender→ 预期:指令开始有回条
兜底:侧边栏Disconnect再重连一次,端口数字再抄一遍。
路线三:简单指令正常,复杂请求卡死
触发条件:单条简单命令都正常,一到复杂请求就超时,或多条命令挤在一条 socket 上互相串线。
- 把大任务拆成小指令分步发(单条上限 180 秒)→ 预期:每步都有回执
- 检查是不是 Cursor 和 Claude 同时挂着这个服务 → 预期:同一时间只有一个客户端挂着它
- 侧边栏断开重连 → 预期:后续命令恢复正常
兜底:继续简化请求;再不行,重启 Blender。
终极动作
- 插件侧重连(Disconnect → Connect to MCP server)
- 客户端彻底退出再启动
- 把配置里的 blender 条目删掉、重新添加
这套基本覆盖九成"幽灵问题"。
往深里挖的三个入口
- addon.py:插件全部家底——侧边栏面板、端口逻辑、按
type字段分发命令的路由,都在这一个文件里 - src/blender_mcp/server.py:
BlenderConnection类在这里,一把锁加一条 socket 流保证两条命令不会在传菜口上撞车 - README.md:Environment Variables 与 Troubleshooting 两节,是官方口径的最终依据
今天就能勾完的清单
- ☐ 终端
uvx --version能打印出版本号 - ☐ 客户端 MCP 配置写好并彻底重启,工具列表出现带锤子图标的 blender 条目
- ☐
uvx mcp-for-blender install-addon装好插件,侧边栏出现 MCP for Blender 标签 - ☐ 面板显示 "Connected on port 9876",第一条指令在视口里变出物体
- ☐ 让 AI 建一个小场景,用视口截图自查一轮
- ☐ 勾选 Poly Haven 完成一次 HDRI 或模型导入,再用
export_scene导出 GLB
哪一步卡住了,直接带报错原文来:报错原文、操作系统版本、客户端类型,这三样凑齐,定位最快。
【免费下载链接】mcp-for-blenderCommunity plugin to control Blender 3D with any LLM of your choice. Not affiliated with the official Blender Foundation.项目地址: https://gitcode.com/GitHub_Trending/bl/mcp-for-blender
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考