1. Windows 上跑通 Unity MCP + Codex CLI 到底卡在哪
Unity MCP 是让 AI 直接操作 Unity Editor 的桥梁,Codex CLI 是命令行里的 AI 编程代理,两者通过 MCP 协议对接后,你就能在终端里让 AI 帮你创建 GameObject、读 Console 报错、改 Prefab。听起来很顺,但 Windows 上真正动手时,大部分人卡在三个地方:uv 装完找不到 uvx、Unity 插件生成的启动命令参数写错、config.toml 里同一个 server 名重复导致 Codex 直接报 duplicate key 起不来。
这篇教程只聚焦一条链路:用 uv 把 Unity MCP Server 跑起来,再在 Codex CLI 的 config.toml 里写好骨架,让 Codex 能发现并调用 Unity MCP 的工具。适合已经在 Windows 上装了 Unity、想用 Codex CLI 做 Agent 式开发、但被环境变量和路径折腾过的开发者。下面每一步都给可复制的命令和配置,跟着做就能确认连接是否真的通了。
2. 前置准备:uv、Unity MCP 插件与 Codex CLI
2.1 安装 uv 并确认 uvx 的真实路径
uv 是 Python 的包管理和运行器,Unity MCP Server 底层靠它拉起。在 PowerShell 里执行官方安装脚本:
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"装完后新开一个终端,验证:
uv --version uvx --version正常会输出类似0.11.x的版本号。这里有个高频坑:很多人以为 uvx 在.dotnet\tools或 Python 的 Scripts 目录下,实际默认装在用户目录的.local\bin。用下面命令确认真实位置:
where.exe uvx典型输出是C:\Users\你的用户名\.local\bin\uvx.exe。把这个完整路径记下来,后面 config.toml 和启动命令都要用绝对路径,别依赖 PATH,否则 Codex 启动子进程时可能找不到。
2.2 安装 Unity MCP 插件
在 Unity 里打开Window > Package Manager,通过 Git URL 或本地包安装 CoplayDev 的 unity-mcp 插件。装好后菜单栏会出现MCP For Unity窗口。这个窗口负责生成 Server 启动命令、显示连接状态(No Session / Connected / Session Active)。
2.3 安装 Codex CLI
Codex CLI 通过 npm 全局安装:
npm install -g @openai/codex codex --version它的配置文件默认在C:\Users\你的用户名\.codex\config.toml。如果目录不存在就手动建一个。这个文件是后面注册 MCP Server 的核心。
3. 可复制配置:启动 Unity MCP Server 与 config.toml 骨架
3.1 正确的 Unity MCP 启动命令
Unity 插件面板上点 Start Server 时,早期版本会生成带--from的错误命令,报error: unexpected argument '--from' found。原因是--from是uvx的参数,不是uv的。正确形式必须用 uvx:
C:\Users\你的用户名\.local\bin\uvx.exe --from mcpforunityserver==9.7.1 mcp-for-unity --transport http --http-url http://127.0.0.1:8080 --project-scope-tools几个参数说明:--from mcpforunityserver==9.7.1指定包和版本,版本号按你插件实际提示的填;--transport http走 HTTP 传输;--http-url是监听地址,固定用127.0.0.1而不是localhost,因为 localhost 在部分 Windows 环境会解析成 IPv6 的::1,导致 Codex 连不上;--project-scope-tools限定工具作用域到当前项目。
执行后这个 PowerShell 窗口会一直挂着不退出,这是正常的,它就是 Server 进程,不能关。
3.2 config.toml 骨架
打开C:\Users\你的用户名\.codex\config.toml,写入:
[mcp_servers.unityMCP] url = "http://127.0.0.1:8080/mcp" startup_timeout_sec = 10 tool_timeout_sec = 60注意url结尾要带/mcp,这是 MCP 的 HTTP 端点路径,漏了会 404。startup_timeout_sec给 10 秒足够,tool_timeout_sec给 60 秒是因为 Unity 里创建对象、跑 PlayMode 这类操作耗时较长,给太短会中途超时。
如果你要同时接多个 Unity 项目,每个项目占一个端口,配置写成:
[mcp_servers.projectA] url = "http://127.0.0.1:8080/mcp" startup_timeout_sec = 10 tool_timeout_sec = 60 [mcp_servers.projectB] url = "http://127.0.0.1:8081/mcp" startup_timeout_sec = 10 tool_timeout_sec = 60一个端口只能对应一个 Unity 项目,项目 B 的 Server 要用--http-url http://127.0.0.1:8081另起一个进程。
4. 验证请求:确认 Codex 能发现并调用 Unity MCP
4.1 确认 Server 已就绪
先看 Unity 的 MCP For Unity 面板,状态从 No Session 变成 Connected 或 Session Active,说明 Server 和 Editor 握手成功。再在浏览器或 PowerShell 里探一下端点:
curl http://127.0.0.1:8080/mcp能返回响应(哪怕是协议层的提示)就说明端口在监听。
4.2 让 Codex 列出工具
重启 Codex CLI,让它重新读 config.toml:
codex进入交互后输入:
列出当前 Unity MCP 工具如果配置正确,Codex 会返回工具清单,通常包含manage_scene、manage_gameobject、read_console、manage_asset等。看到这些名字,说明 Codex 已经通过 config.toml 发现了 unityMCP 这个 server,并且成功拉到了工具列表。
4.3 跑一个真实调用
光列工具还不够,让它实际动一下 Unity:
用 Unity MCP 在场景里创建一个名为 TestCube 的 Cube,然后读取 Console 最新日志Codex 会调用manage_gameobject创建对象,再调read_console取日志。切回 Unity 看 Hierarchy,出现 TestCube 就代表整条链路通了:Codex CLI → MCP Client → HTTP → Unity MCP Server → Unity Editor API。
5. 本篇常见错排查
5.1 duplicate key 报错
Codex 启动时报duplicate key,几乎都是 config.toml 里[mcp_servers.unityMCP]写了两次。TOML 不允许同一张表重复定义。检查文件,只保留一个[mcp_servers.unityMCP]段,把多余的删掉。
5.2 uvx 路径不存在
报系统找不到指定的路径或uvx.exe 不是内部或外部命令,说明你写的路径不对。用where.exe uvx查真实路径,默认在.local\bin,不是.dotnet\tools。config.toml 里如果引用了启动命令,也要同步改成绝对路径。
5.3 连接超时 / 工具列表为空
Codex 里列不出工具,先确认三件事:Server 进程窗口还开着没关;url 用的是127.0.0.1不是localhost;url 结尾带了/mcp。三个都对还不行,把startup_timeout_sec调到 20 再试,有些机器首次拉起 Server 较慢。
5.4 多项目时 AI 操作错对象
同时开了 projectA 和 projectB,你让 Codex 改场景,它可能改错项目。因为 Codex 不知道你指哪个 server。指令里必须明确写「操作 projectB」,否则它会挑一个默认的。端口和项目名建议在 config.toml 里用一眼能认出的命名。
6. 把 Codex CLI 接到长期编码流里
单次对话验证通过后,如果你打算把 Unity MCP 当成日常开发的一部分,比如让 Agent 持续改场景、写脚本、修 Console 报错,建议把 Codex CLI 的接入方式固定下来,避免每次手动拼命令。TaoToken 的 Coding Plan 适合这种长期编码和 Agent 场景,接入文档里有 Codex CLI 的配置说明,API Keys 页面可以拿到密钥,模型对话页面能先验证模型是否正常响应。按文档把 key 配进 Codex 后,Unity MCP 的工具调用就能稳定跑在长期会话里,不用每次重开终端重新握手。