上周我接了一批批量建模的需求:把 20 多栋建筑按不同高度、不同配色摆到地坪上。放到以前,我至少得开着 Blender 点一晚上鼠标;这次我搭了 Blender 5.2.2 + MCP Server + VS Code Copilot 这条链路,大部分活让 AI 直接干完了。很多朋友一听到“AI 操作 Blender”就觉得不太现实,其实原理没有想象中复杂。这篇文章我会把从安装到实测的完整过程写清楚,包含 mcp.json 配置、插件安装、WebSocket 验证、真实任务演示和排错方案,你照着走一遍就能跑通。
1. 这条链路背后的原理:Copilot 凭什么能“动手”操作 Blender
1.1 MCP 是 Copilot 和 Blender 之间的翻译官
要理解这套组合,先要把 MCP(Model Context Protocol,模型上下文协议)这个概念掰开揉碎。MCP 是 2024 年底由 Anthropic 提出的开放协议标准,目的很简单:让 AI 模型能够通过统一的方式调用外部工具、读取外部数据。你可以把它理解成一个“USB-C 接口”——它定义了一套通用的插口规范,不管对面接的是文件系统、数据库,还是像 Blender 这样的 3D 软件,AI 只要支持这个规范,就能以同一种方式“伸手”进去操作。
在这个组合里,真正的执行者是 Blender 内部的一个插件,而 MCP Server 则是一个桥接进程。Copilot 发出的指令不会直接变成鼠标点击,而是通过标准协议封装成工具调用请求,由 MCP Server 接收,再通过本地的 WebSocket 通道转发给 Blender 插件,最后由插件调用 Blender 的 Python API(也就是 bpy)在场景里执行。这一整套转发流程,就是标题里“AI 操作 Blender”的技术内核。
1.2 一条指令从聊天框走到 3D 视口的完整路径
我用一个具体例子把链路走一遍。你在 VS Code 的 Copilot Chat 里输入:“在原点创建一个边长为 2 的立方体。”接下来发生的事情可以拆成五步:
- Copilot 的 Agent 模式识别到这是一个需要操作 Blender 的任务,于是从 MCP 工具列表里选中 create_object 这个工具,并填好参数 type="CUBE"、size=(2,2,2)。
- 工具调用请求通过标准输入/输出通道传给本地的 MCP Server 进程。
- MCP Server 把请求封装成 JSON 消息,通过 WebSocket 发送给 Blender 插件。
- Blender 插件收到消息后,调用 bpy.ops.mesh.primitive_cube_add() 在场景中生成立方体。
- 插件把执行结果(成功与否、物体名称、位置信息)原路返回给 MCP Server,再回到 Copilot 的对话流里。
关键在于最后一步的“反馈闭环”。AI 不只是发出指令,它还能读取执行结果,比如拿到新物体的名称、场景里有多少个物体、当前选中的是什么。这种双向通信让 Agent 能连续完成任务:先创建立方体,再查询它的信息,接着上材质、调位置,全程不需要你手动介入。
1.3 为什么不选择“让 AI 写脚本然后手动粘贴”
我猜很多人会问:既然 AI 本来就能写 bpy 代码,为什么不直接让它生成脚本,粘贴到 Blender 的脚本编辑器中运行?我一开始也是这么干的,但实践下来有几个明显的痛点。
首先是上下文丢失。脚本方式是一次性的——AI 写完代码就结束了,它不知道代码运行后场景发生了什么。如果在运行时报了错,你把错误信息贴回去让它修,它又对当前场景状态一无所知,改出来的代码大概率继续出错。而 MCP 方式是实时双向的,AI 能看到每次操作后的场景快照,能根据实际状态调整下一步动作。
其次是执行效率。手动粘贴脚本意味着你得在 Blender 和浏览器/编辑器之间来回切换,生成脚本、复制、切窗口、粘贴、运行、看结果、再切回来反馈错误。一次建模需求可能要来回十几趟。而 MCP 方案中,AI 连续调用工具,你只需要在聊天框里看进度,喝完一杯咖啡的功夫它就把重复劳动做完了。
最后是容错能力。脚本方案只要中途一步报错,整个脚本就停了;MCP 方案中 AI 会在每一步检查结果,失败就自动重试或换一种实现方式,更像一个真正的“操作员”而不是一台“脚本打印机”。
2. 环境准备:版本兼容性是这套组合最容易翻车的地方
2.1 Blender 5.2.2 的安装与检查
如果你是从官网下载的安装包,装完之后先在任意位置启动一次 Blender,让它生成完整的用户配置目录。这一步很多人会跳过,但其实很重要——MCP 插件要写入的用户偏好配置、脚本目录,只有在你至少启动过一次 Blender 之后才会创建。
启动之后,进 Edit(编辑)→ Preferences(偏好设置)→ About(关于),确认左下角显示的版本号是 5.2.2。这个版本的界面布局和快捷键在 5.x 系列里是稳定的,下面所有操作在 5.2.2 以及后续 5.x 小版本里都通用。
还有个容易被忽略的点:Blender 的插件安装路径在不同操作系统上差异很大,Windows 下插件默认放在C:\Users\<用户名>\AppData\Roaming\Blender Foundation\Blender\5.2\scripts\addons\,macOS 是~/Library/Application Support/Blender/5.2/scripts/addons/,Linux 是~/.config/blender/5.2/scripts/addons/。记下你这个路径,后面装插件要用。
2.2 VS Code、Copilot 扩展与 Python 的版本搭配
VS Code 建议直接用最新稳定版,扩展市场里安装 GitHub Copilot 和 GitHub Copilot Chat,登录账号后确认聊天面板能正常使用。这里要注意一点:MCP 工具只有在 Copilot Chat 的 Agent 模式下才会自动调用,普通的 Ask 模式只会“建议”你怎么操作,不会真正执行。安装完扩展后,先在聊天输入框左侧把模式切到 Agent,确认可用。
至于 Python 环境,这是整套配置里最容易踩坑的地方。MCP Server 是一个独立的 Python 进程,它依赖 mcp 库和 websocket-client 库,所以你需要一个能装第三方包的 Python。我统一建议用 Python 3.10 到 3.12 的某个稳定版本,3.13 的兼容性在部分插件上还不太稳。
2.3 系统 Python 和 Blender 内置 Python 到底该用哪个
这是个高频疑问。Blender 自带了一个 Python 解释器,很多初学者会想直接用这个。但这里有个关键限制:Blender 的内置 Python 是专用嵌入式环境,它虽然带 bpy 模块,但不保证有 pip、不保证能装 mcp 这些库,而且你怎么用它都依赖 Blender 的安装目录结构。更麻烦的是,如果你试图用 Blender 的 Python 去运行 mcp_server.py,大概率会遇到模块路径不一致、依赖缺失的问题。
所以我的做法是:系统装一个独立的 Python,用它来跑 MCP Server;Blender 内部的插件只负责监听 WebSocket 和执行 bpy 操作。这两个环境各司其职,互不干扰。你只需要确保 MCP Server 这一个进程用的是系统 Python,其他部分都由 Blender 插件自己处理。
| 角色 | 使用哪个 Python | 干什么用 |
|---|---|---|
| Blender 插件 | Blender 内置 Python | 接收 WebSocket 消息并执行 bpy |
| MCP Server | 系统 Python 3.10-3.12 | 与 Copilot 通信并转发指令 |
| 配置管理 | 系统 Python | 安装 mcp、websocket-client 等库 |
3. 让 Blender 打开耳朵:MCP 插件安装与 WebSocket 服务启动
3.1 下载插件并找到正确的 addons 目录
Blender 的 MCP 插件有很多开源实现,我最早用的是 GitHub 上的 blender-mcp 项目。下载源码压缩包后,解压出来会看到一个 addon 文件夹,里面是由__init__.py和一个或多个 Python 模块组成的完整插件结构。
把你的插件文件夹放到 2.1 节记录的 addons 目录下。如果你不确定文件夹结构是否正确,可以检查一下:addons 目录下的插件文件夹里必须能直接看到__init__.py,不能多套一层无关目录,否则 Blender 识别不到。
# Windows 下插件目录参考 C:\Users\你的用户名\AppData\Roaming\Blender Foundation\Blender\5.2\scripts\addons\blender-mcp-addon\ __init__.py mcp_controller.py toolbox.py ...放好之后重启 Blender。这一步也容易忽略:很多用户在放完插件文件后不重启,然后在偏好设置里找不到这个插件,以为是路径错了,其实就是没刷新插件列表。
3.2 在偏好设置里启用插件并启动 MCP 服务
打开 Edit → Preferences → Add-ons,在搜索框里输入“mcp”,应该能看到你的插件名字。勾选启用。如果搜索不到,点一下右上角的三条横线按钮,选 Refresh(刷新),然后再搜索。
启用之后,去 3D 视图,按 N 键打开右侧的侧边栏,找到 Blender MCP 这个选项卡。这个面板里一般会有一个服务器状态区域和启动按钮。点击 Start MCP Server(或者类似名字的按钮),看到状态变成 running 并显示监听端口,就说明插件端的服务起来了。
我这边默认端口是 9876,如果你的插件支持修改端口,建议保持默认。因为后面配置 mcp_server.py 时,连接参数也要用同一个端口,两边不一致是最常见的低级错误。
3.3 验证 WebSocket 端口是否正常监听
这一步很多人会跳过,但它能帮你省下后面大量排查时间。在启动 MCP 服务后,用命令行直接验证端口是否真的在监听:
# Windows 下用 netstat 检查 9876 端口 netstat -ano | findstr 9876 # Linux / macOS 下用 lsof 检查 lsof -i :9876如果看到处于 LISTENING 状态的进程,说明 Blender 插件端的 WebSocket 服务已经正常启动。这个验证很重要,因为之后如果 Copilot 那边提示工具调用失败,你就可以立刻判断问题不在 Blender 这一层,而在 MCP Server 的配置或网络层。
4. 把 Blender 拉到 Copilot 身边:MCP 服务器配置与工具可见性
4.1 mcp.json 的最小配置示例
现在到了核心配置环节。VS Code 的 Copilot 支持通过 mcp.json 文件来声明 MCP 服务器。把这个文件放在当前工作区的.vscode目录下,内容如下:
{ "servers": { "blender": { "type": "stdio", "command": "python", "args": ["D:/tools/blender-mcp/mcp_server.py"], "env": {} } } }注意 command 里的 python 必须能在终端中直接运行。如果你系统里有多个 Python 版本,建议用绝对路径,例如C:/Python312/python.exe,避免 VS Code 找到的 Python 和实际装依赖的不是同一个。args 里的路径则替换成你 mcp_server.py 的实际位置。
配置好后,在 VS Code 里打开命令面板(Ctrl+Shift+P),搜索 “MCP”,选择 MCP: List Connected Servers 或者直接用 MCP: Add New Server 来验证。能看到 blender 这个条目,且状态为 connected,就说明配置基本成功。
4.2 在 Copilot Chat 中切到 Agent 模式并检查工具列表
配置完 mcp.json 之后,打开 Copilot Chat 面板,在输入框下方确保选择了 Agent 模式。Agent 模式和普通模式的差别在于:Agent 拥有规划能力和工具调用能力,它会像一个小型自动驾驶系统一样,自主决定按什么顺序调用哪些 MCP 工具来完成任务。
切到 Agent 模式后,在输入框里输入/mcp或者查看 Chat 面板里的工具图标列表,应该能看到 blender 服务器下暴露的一长串工具,常见的有:
- create_object:创建几何体
- object_translate:移动物体
- object_rotate:旋转物体
- add_material:添加材质
- execute_blender_code:执行任意 bpy 代码
不同插件实现暴露的工具名不完全一样,但大体结构一致。看到这些工具,就说明链路已经从 Copilot 到 MCP Server 全部打通,只等 Blender 那边接指令了。
4.3 配置常见错位:为什么工具列表迟迟不出现
如果你严格按照上面的步骤走了,却发现工具列表里空空如也,最常见的原因有三个。
第一是模式不对。你在 Ask 或 Edit 模式下看不到任何 MCP 工具。必须先切到 Agent 模式,Chat 才会加载工具列表。第二是服务器没起来。在 4.1 的命令行验证步骤中,如果 MCP: List Connected Servers 显示错误或 disconnected,最常见的根因是 Python 路径配置错误,或者 mcp 库没有安装。第三是 Blender 插件没有启动监听服务。这种情况下即使 MCP Server 连接正常,工具调用也会报连接失败。
我的排查习惯是:先看 VS Code 输出面板有没有 MCP 服务器日志,再看 Blender 控制台有没有收到连接请求,最后看 WebSocket 端口是否活跃。按这个顺序走,绝大多数问题都能定位。
5. 实际跑一遍:用自然语言让 Copilot 搭建一个可渲染的小场景
5.1 从空场景到几何体:创建、移动、缩放
环境都搭好了,直接开工。我先删掉场景里默认的立方体,让 Copilot 从零开始搭建。在 Copilot Chat 里输入:
“帮我清空当前场景,然后在原点创建一个边长 2 米的立方体;再在立方体上方 3 米处创建一个半径 0.8 米的 UV 球体。”
Copilot 会先调用删除工具清理场景,然后依次创建两个物体。它会通过 get_object_info 之类的工具确认物体名称,再调用 object_translate 把球体移动到 (0, 0, 3) 位置。整个过程在主界面能看到 Blender 场景里的物体逐个出现,延时很短,视觉上的反馈跟在软件里手动操作几乎同步。
这里有个细节:AI 回复里会显示它调用了哪些工具、传了哪些参数。我会盯着这个输出看,确认它理解的“上方 3 米”是沿 Z 轴正方向,而不是 Y 轴。出现方向理解错误时,直接在对话里纠正一次,后续步骤它会一直参考这个修正。
5.2 材质与灯光:让物体“看起来”有内容
几何体有了,接着让场景具备基本的表现力。我继续发指令:
“给立方体添加一个红色金属材质,粗糙度 0.3;给球体添加一个玻璃材质。在场景中加一盏区域光,位置在 (5, 3, 6),强度 1000,并把摄像机移动到 (4, -6, 4),对准场景中心的物体。”
这条指令会触发 add_material、assign_material、create_light、object_translate 等多个工具。Copilot 会先把材质节点建好,再把材质赋给目标物体,然后创建灯光并设置能量。值得注意的是材质类操作依赖节点树,如果插件只实现了基础材质工具而不支持 Principled BSDF 节点配置,AI 可能会退而求其次用 execute_blender_code 直接执行 bpy 代码完成节点搭建。不管走哪条路径,最终效果是一致的。
这个阶段是验证 MCP 链路价值的黄金时刻。手动搭建这两个材质和灯光需要找材质面板、接节点、调参数,少说五六分钟;AI 连续调用工具,十几秒就完成了。而且每一步的状态都能通过工具返回值确认,不会出现“看着像设置了其实没生效”的情况。
5.3 渲染输出:切换引擎、调节参数、出图
最后一步,让 AI 把场景渲染出来:
“将渲染引擎切换到 Cycles,采样数设为 128,开启降噪,输出分辨率 1920×1080。渲染一张图,保存到 D:/render_output.png。”
执行到这里 AI 会调用 execute_blender_code 或者专门的渲染控制工具,修改渲染属性后直接触发渲染。Blender 窗口会进入渲染状态,进度条走完后图片落盘。我打开 D:/render_output.png 确认,立方体的红色金属和球体的玻璃效果都符合预期。
我在实际使用中发现,渲染阶段最容易出现的问题不是工具调用失败,而是 AI 对文件路径的理解。Windows 下路径中的反斜杠有时会被当成转义符,所以我会在指令里明确写正斜杠路径。如果你也遇到渲染输出到奇怪位置的问题,回来检查一下 Copilot 传的路径参数。
6. 故障排查:连接失败、工具不可见、指令不执行的完整链路
6.1 排错思路:先判断故障发生在哪一层
整套系统有四层:Copilot 客户端、MCP Server 进程、WebSocket 通道、Blender 插件。出问题时,第一反应不是去翻配置,而是用排除法确认故障层。
如果 Copilot Chat 里工具列表完全不可见,问题一定出在 Copilot→MCP Server 这一段,优先检查 mcp.json 和 Python 环境。如果工具列表可见,但每次调用都报“连接失败”,问题大概率出在 MCP Server→Blender 这一段,优先检查 Blender 插件有没有启动 WebSocket 服务。如果工具调用全部成功,但 Blender 场景没有变化,那可能是操作执行到了隐藏图层或不着色显示的层,用bpy.context状态类工具读取当前活跃图层,看 AI 是否操作在了你预期的位置。
这个分层排查思路听起来很简单,但实际排查效率极高。我建议你把它记下来,比对着报错信息到处摸黑要快得多。
6.2 高频故障表
下面这张表是我这段时间实际踩过的坑,按照出现频率排序:
| 故障现象 | 根本原因 | 解决方案 |
|---|---|---|
| MCP Server 显示 disconnected | mcp.json 中 python 路径错误或 mcp 库未装 | 终端手动执行命令,看报错;pip install mcp |
| 工具列表为空 | 没切 Agent 模式 | Chat 输入框切到 Agent |
| 调用工具报 Blender 连接失败 | Blender 插件未启动监听 | 回到侧边栏点击 Start MCP Server |
| AI 说执行成功但场景没变 | 操作到了隐藏图层 | 用工具读取活跃图层,或让 AI 先取消隐藏全部 |
| WebSocket 端口被占用 | 上一个服务进程没结束 | netstat 查 PID,结束残留进程 |
| ModuleNotFoundError: mcp | Python 环境和运行命令不一致 | 用同一解释器安装依赖并运行 |
第六行的教训很有意思:很多时候 VS Code 执行 python 命令时用的解释器和你自己终端里 pip 装的解释器不是同一个。解决方法是直接用绝对路径,并在终端里先跑一次python -c "import mcp"验证。
6.3 日志怎么看才有用
MCP 调试日志是排查的关键,但大多数用户不知道打开位置。VS Code 中菜单栏 View → Output,然后在右上角下拉列表里选择相关频道,比如 GitHub Copilot Chat 或者 MCP Server。这里会输出服务器启动过程、工具调用记录、错误堆栈。
Blender 这边也有日志窗口。通常按 Window → Toggle System Console(Windows 下)能看到插件打印的 Python 输出。插件执行了哪些 bpy 操作、WebSocket 消息收发情况、异常堆栈都会出现在这里。
我的做法是同时打开两边的日志窗口,然后故意发一个会失败的指令,比如让 AI 删除一个不存在的物体,对比两边的输出。谁能正确打印出“物体不存在”的错误信息,就说明那一层是通的。用这种“定点爆破”的方式排错,比反复改配置高效得多。
7. 这套组合的边界:什么样的建模任务适合交给 AI
7.1 适合 AI 批量化和参数化建模的场景
做了一阵子之后,我总结出这套组合真正擅长的领域,前提是任务可以被“参数化”和“规则化”。
批量生成就是典型场景。比如在一条街道两侧生成整排路灯,间距固定、高度统一,只要把规则描述清楚,AI 可以反复调用创建、定位工具把 30 盏灯全部生成完。这种工作我再手动做就是纯纯的体力劳动,交给 AI 是最划算的。参数化建模也一样,输入长宽高、分段数、倒角半径,AI 会比你更快地调整所有参数并重算结果。
还有一个容易被忽略的场景是“场景整理”。项目文件里经常有一堆没命名或命名混乱的物体。让 AI 把规则写清楚:“所有名字含有 Cube 的物体重命名为 Building 加序号”,它能把全场景几百个物体一遍过完。这种事手工做非常乏味,但 AI 毫无怨言地干,而且不会漏。
7.2 AI 现在玩不转的操作
边界也很明显。精细雕刻、拓扑调整、艺术构图这类依赖视觉判断和触觉直觉的操作,MCP 链路基本帮不上忙。AI 看不到视口上的实时高模细节,它对雕塑的感受力远不如你手拿压感笔快速修两下。
另外,需要连续按住鼠标拖拽完成的操作,比如在编辑模式下滑动顶点、拉拽贝塞尔曲线,AI 也没法直接做,只能靠 execute_blender_code 写命令去改数值。这种事不是不能干,但效率奇低,还不如自己上手。
我个人的判断标准是:如果这个操作可以用数字描述清楚,就给 AI;如果需要用眼睛判断“看起来顺不顺”,就留给自己。
7.3 我的使用习惯:把需求“翻译”成 AI 听得懂的话
最后分享一下我自己的使用习惯。和 AI 协作建模,最忌讳的是抛一个含糊的大任务,比如“给我建一个好一点的场景”。AI 不是神仙,它需要的是可拆解的指令。我一般会把任务拆成三到四个子步骤,每个子步骤一步到位,比如“先创建三个不同高度的圆柱体”“再给它们添加相同颜色的金属材质”“最后摆放一台摄像机对准场景中心”。
还有个提升成功率的小技巧:在任务描述里尽可能把单位、坐标系、方向说清楚。Blender 世界场景默认 Z 轴向上,但 AI 有时候会默认 Y 轴向上,特别是做建筑场景时。一旦发现方向理解偏差,立即在对话里纠正,并且不需要重开话题,后续任务它都会沿用你修正过的坐标系。
任务执行过程中我会一直开着 Blender,保证插件进程和 WebSocket 连接始终活跃。同时让它每执行完一个步骤,向它询问下一部计划,这样既能确认思路,也能减少错误操作对场景造成的破坏。
我个人在这些天的实操里体会最深的一点是:这套组合不是来替代建模师的,它把那些不需要审美判断、但非常耗时的“机械劳动”从你手里接走了。你省下来的时间,恰好应该花在 AI 做不了的部分上——也就是设计、构图和细化。最后再分享一个小技巧:把 mcp.json 提交到项目的 .vscode 目录,团队成员拉下代码后 MCP 配置自动生效,写代码的同时随手让 Copilot 批量生成 3D 资源,协作效率比单机操作高出一个档次。