在本地把 Chatbox + MCP 集成进 Unity
在本地把 Chatbox + MCP 集成进 Unity
环境:Windows 11,Node.js 22,Unity(Editor),Chatbox 本地部署
最终效果是
在 Chatbox 里输入指令,让 MCP 调用工具
工具经由本地 Node MCP Server 转发到 Unity
Unity Editor 收到命令,在编辑器里执行静态方法,例如打印日志等等


1. 整体架构
1 | Chatbox (MCP Client) |
- Chatbox:作为 MCP 客户端,通过 STDIO 启动 MCP 服务器,并调用工具。
- Node MCP Server:本地 server,暴露 MCP 工具
unity_ping、unity_log等,把调用转成 HTTP 请求发给 Unity。 - Unity Editor:打开项目时自动启动一个本地 HTTP Bridge,接受 MCP Server 的
/command请求,然后在主线程调用静态类UnityMCPTools里的方法。
2. 准备 Node 工程:unity-mcp-server
2.1 初始化项目
在本地创建 MCP Server 目录:
1 | mkdir D:\tools\unity-mcp-server |
然后在 package.json 里加上 ESM 标记和 CLI 声明:
1 | { |
type: "module":使用 ES Module 语法(import)。bin.unity-mcp-server:以后可以通过unity-mcp-server作为命令行入口。
2.2 server.mjs:Node 侧 MCP Server
在 D:\tools\unity-mcp-server 下创建 server.mjs,内容如下:
1 | import { Server } from '@modelcontextprotocol/sdk/server/index.js'; |
这里有几个关键点:
- 使用
StdioServerTransport,通过 stdin/stdout 与 Chatbox 通讯。 - 暴露两个工具:
unity_ping和unity_log。 - 所有调用都会转成 HTTP POST 到 Unity 本地 Bridge 的
/command接口。
手动测试时,可以直接在目录下执行:
1 | node .\server.mjs |
正常情况下会打印几行初始化日志,然后进程“挂住”——这是在等 MCP 客户端发请求,属于正常状态。
3. Unity 侧:桥接与静态工具
Unity 这边的目标有两个:
- 打开项目时自动启动一个本地 HTTP 服务作为 Bridge。
- 把 HTTP body 里的 JSON 映射成对静态类
UnityMCPTools的方法调用。
3.1 MCPCommand & UnityMCPTools:静态工具类
先创建一个脚本 Assets/Editor/MCP/UnityMCPTools.cs:
1 | using UnityEngine; |
这里的设计是:
- MCP 端只需要传一个 JSON:
{"method":"Log","message":"hello"}。 - Unity 解析成
MCPCommand,然后由UnityMCPTools.HandleCommand路由到具体方法。
3.2 Unity Bridge:Editor 启动时自动监听 HTTP
再创建 Assets/Editor/MCP/UnityMCPBridge.cs:
1 | using UnityEditor; |
要点:
- 使用
[InitializeOnLoad],只要打开这个 Unity 工程,编辑器就自动启动 HTTP 监听。 - 使用
commandQueue把后台线程收到的命令交给主线程处理,避免在非主线程使用 Unity API。 /ping用于简单健康检查;/command用于 MCP 调用。
此时只要打开 Unity 工程,在 Console 里应该能看到:
1 | [MCP] Unity bridge listening at http://127.0.0.1:58888/ |
可以用 curl 测一下:
1 | curl http://127.0.0.1:58888/ping |
4. Chatbox 端:配置 MCP Server
Chatbox 作为 MCP 客户端,需要在配置里加入一个 server,指向刚刚写的 server.mjs。
关键点只有两条:
使用绝对路径,不要用相对路径,否则会出现类似:
1
Cannot find module 'D:\tools\Chatbox\toolsunity-mcp-serverserver.mjs'
Windows 下在 JSON 里写路径要用
\\转义。
MCP 配置:
1 | { |
之后重启 Chatbox,在对应会话中启用 unity-local 这个 MCP server,就可以从 Chatbox 里调用 unity_ping、unity_log 工具。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Europa Superman 's blog!
