:把 MCP endpoint 改到 TaoToken)
1. 为什么要在 Unity 里折腾 Unity-MCP 与 Claude Code如果你现在还在用「网页对话框生成 C# 脚本 → 手动复制进 Unity → 自己挂组件 → 自己拖引用」这套流程那 Unity-MCP 值得你花一个下午重新搭一遍。Unity-MCP 是一个跑在 Unity 编辑器里的 MCP 服务器它把 Unity 的编辑器 API创建 GameObject、加组件、改 Transform、读场景层级、执行菜单命令包装成标准的 MCP 工具暴露给外部的 AI 客户端。Claude Code 则是 Anthropic 的终端 Agent它内置 MCP 客户端能直接读取你本地的 Unity 工程文件、运行命令、调用 MCP 工具。两者接上之后你在终端里说一句「在当前场景里搭一个带灯光和相机的房间」AI 就能真的去操作你的 Unity 编辑器而不是只给你一段代码。这套链路适合谁适合已经在用 Unity 做独立游戏、原型验证、关卡搭建并且愿意在终端里跟 AI 协作的开发者。它不适合完全没碰过命令行的纯美术同学因为中间要配环境变量、要装 Node 和 Python 依赖。我这次把模型层换成了 DeepSeek V4通过 TaoToken 的 Anthropic 兼容端点接入。原因很直接Claude Code 默认走 Anthropic 官方成本和网络门槛都不低DeepSeek V4 在代码和工具调用上的表现足够撑起 Unity-MCP 这种「多轮工具调用 场景操作」的场景而 TaoToken 提供了统一的 Base URL 和 Key 管理把 endpoint 改一处就能切换模型不用动 Unity 那边的任何配置。下面我把整条链路拆成可复制的步骤包括 MCP endpoint 怎么改、鉴权怎么配、怎么验证工具真的被调用了。2. 前置准备TaoToken 接入与 Unity-MCP 环境搭建在动 Unity 之前先把「模型侧」和「编辑器侧」两条线各自跑通最后再合并。很多人一上来就同时配 Claude Code 和 Unity-MCP结果报错时根本分不清是模型鉴权挂了还是 MCP 服务器没起来。先说模型侧。TaoToken 的定位是统一的模型接入层你拿到一个 API Key 之后Claude Code 只需要认三个东西Base URL、Auth Token、Model ID。Base URL 用https://taotoken.net/api注意这里不加任何查询参数Key 在控制台的 API Keys 页面创建建议单独建一个给 Claude Code 用的 Key方便后面按项目吊销。Model ID 填你实际要用的 DeepSeek V4 系列模型名比如deepseek-v4-pro或deepseek-v4-flash具体以控制台模型列表为准。这三个值后面会写进环境变量也会写进 Claude Code 的 settings 文件。再说编辑器侧。Unity-MCP 依赖 Python 和 uv 来管理它那套工具进程所以你需要Unity 2021.3 LTS 或更高版本打开你的目标工程Node.js 18Claude Code 跑在 Node 上Python 3.10 和 uv 包管理器Unity-MCP 的服务器进程靠它拉起。uv 的安装在各平台都很快装完之后在终端敲uv --version能出版本号就行。Unity 这边通过 Package Manager 的 Git URL 安装 Unity-MCP 包装完菜单栏会出现MCP For Unity这一项。先别急着 Start Server把 Claude Code 装好、环境变量配好再回来点启动顺序反了容易在 Claude Code 里看到一堆连不上的 MCP 节点。这里有个容易忽略的点Unity-MCP 的服务器是本地进程它监听的端口和 Claude Code 读取的 MCP 配置必须对得上。Unity 那边 Toggle MCP Window 里会显示当前使用的传输方式和端口你抄下来等会儿写进 Claude Code 的配置里。如果你同时开了多个 Unity 工程每个工程的 MCP 端口要错开否则 Claude Code 会连到错误的编辑器实例上工具调用看起来成功实际改的是另一个场景。3. 可复制配置MCP endpoint 改到 TaoToken 与 Claude Code settings这一节是全文的核心所有片段都可以直接抄。先配 Claude Code 的模型侧再配 MCP 侧最后把两者拼到一个 settings 文件里。模型侧用环境变量最省事。Linux / Mac 写进~/.zshrc或~/.bashrcWindows 用 PowerShell 的$env:临时设置或写进系统环境变量。关键是把 Anthropic 的默认端点指向 TaoTokenexport ANTHROPIC_BASE_URLhttps://taotoken.net/api export ANTHROPIC_AUTH_TOKEN你的_TaoToken_API_Key export ANTHROPIC_MODELdeepseek-v4-pro export ANTHROPIC_DEFAULT_SONNET_MODELdeepseek-v4-pro export ANTHROPIC_DEFAULT_HAIKU_MODELdeepseek-v4-flash export CLAUDE_CODE_SUBAGENT_MODELdeepseek-v4-flashWindows PowerShell 对应写法$env:ANTHROPIC_BASE_URLhttps://taotoken.net/api $env:ANTHROPIC_AUTH_TOKEN你的_TaoToken_API_Key $env:ANTHROPIC_MODELdeepseek-v4-pro $env:ANTHROPIC_DEFAULT_SONNET_MODELdeepseek-v4-pro $env:ANTHROPIC_DEFAULT_HAIKU_MODELdeepseek-v4-flash $env:CLAUDE_CODE_SUBAGENT_MODELdeepseek-v4-flash注意 Base URL 只写到/api不要自己拼/anthropic之类的路径TaoToken 的兼容层会处理路由。Key 不要提交到 Git建议放在 shell 的私有配置文件里。MCP 侧Claude Code 支持在项目根目录放.mcp.json也支持在用户级 settings 里配。推荐项目级因为 Unity-MCP 是跟具体工程绑定的。在 Unity 工程根目录和Assets、Packages同级新建.mcp.json{ mcpServers: { unity-mcp: { type: http, url: http://127.0.0.1:8080/mcp, headers: { Authorization: Bearer 你的_TaoToken_API_Key } } } }这里的url要换成 Unity 那边 Toggle MCP Window 显示的实际地址和端口8080只是示例。type用http对应 Unity-MCP 的 HTTP 传输如果你的版本走 stdio就改成command加args的形式把 Unity-MCP 提供的启动命令填进去。headers 里的 Authorization 是否必须取决于 Unity-MCP 有没有开鉴权如果它本身不校验这行可以去掉但保留也不影响。如果你更习惯用 Claude Code 的 settings 文件统一管理可以在~/.claude/settings.json里写{ env: { ANTHROPIC_BASE_URL: https://taotoken.net/api, ANTHROPIC_AUTH_TOKEN: 你的_TaoToken_API_Key, ANTHROPIC_MODEL: deepseek-v4-pro }, mcpServers: { unity-mcp: { type: http, url: http://127.0.0.1:8080/mcp } } }三件套对齐检查Base URL 是https://taotoken.net/apiKey 是 TaoToken 控制台创建的Model ID 是deepseek-v4-pro或deepseek-v4-flash。这三个值在环境变量和 settings 里保持一致不要一处写 pro 一处写 flash否则 Claude Code 会在不同子任务里用不同模型排查起来很迷惑。配完之后回到 Unity点MCP For Unity - Toggle MCP Window确认 Client Configuration 里显示的地址和你.mcp.json里写的一致然后点 Start Server再点 Start Session。Session 起来之后Unity 控制台会打印 MCP 服务器就绪的日志这时候再回终端启动 Claude Code。4. 验证请求确认工具调用真的落到 Unity 场景里配置写完不代表通了必须做一次端到端验证。分两步先验证模型侧能通再验证 MCP 工具能被调用。模型侧验证最简单在终端里cd到 Unity 工程根目录运行claude进入交互界面后随便问一句「你现在用的是哪个模型」。如果 Base URL 和 Key 配对了Claude Code 会正常返回不会卡在鉴权。如果这里就报 401说明 Key 或 Base URL 有问题先别往下走。MCP 侧验证在 Claude Code 里输入/mcp命令它会列出当前加载的 MCP 服务器。你应该能看到unity-mcp处于 connected 状态展开后能看到它暴露的工具列表通常包括创建 GameObject、查找对象、设置组件属性、执行编辑器命令这几类。如果显示 failed 或一直 connecting说明 Claude Code 连不上 Unity 那边的端口回去检查 Unity-MCP 的 Server 和 Session 是否都启动了以及端口是否被防火墙拦了。工具列表出来之后做一次真实调用。在 Claude Code 里输入在当前打开的场景里创建一个空 GameObject命名为 MCP_Test_Object位置设为 (0, 1, 0)正常情况下Claude Code 会先思考然后调用 unity-mcp 的创建对象工具Unity 编辑器里会立刻出现这个物体Hierarchy 面板能看到MCP_Test_Object。同时 Claude Code 终端会打印工具调用的入参和返回结果返回里通常包含新对象的 instanceID 或路径。这一步成功说明「Claude Code → TaoToken → DeepSeek V4 → MCP 工具 → Unity 编辑器」整条链路是通的。再补一个读操作的验证确认 AI 能「看到」场景列出当前场景根节点下所有 GameObject 的名字和 Transform 位置如果它能准确报出你场景里已有的对象说明场景感知也正常。读写都通了你就可以让它做更复杂的事比如「给 MCP_Test_Object 加一个 Rigidbody质量设为 2然后把它移到 (3, 0, 0)」。这类多步操作最能暴露工具调用的问题如果中间某一步失败Claude Code 会把错误返回给你你根据错误信息定位是参数格式问题还是工具本身不支持。5. 本篇常见错排查401、local proxy failed、reading choices、OAuth配这套链路报错基本集中在四类我按实际遇到的频率排一下。第一类401 Unauthorized。出现在 Claude Code 启动或第一次请求时。原因通常是ANTHROPIC_AUTH_TOKEN没生效或者 Key 复制时带了空格、换行。检查方法在终端echo $ANTHROPIC_AUTH_TOKENWindows 用$env:ANTHROPIC_AUTH_TOKEN看输出是不是完整的 Key。另一个常见原因是 Base URL 写错比如写成了https://taotoken.net/api/带尾斜杠或者自己拼了/v1都会导致鉴权失败。统一用https://taotoken.net/api不加尾斜杠。第二类local proxy failed 或 connection refused。这通常不是模型侧的问题而是 Claude Code 连不上 Unity-MCP 的本地端口。先确认 Unity 里 Start Server 和 Start Session 都点了且没有报错再确认.mcp.json里的 url 和 Unity 显示的地址完全一致包括127.0.0.1和localhost的区别。有些环境里localhost会解析到 IPv6而 Unity-MCP 只监听了 IPv4改成127.0.0.1就好了。如果还不行用curl http://127.0.0.1:8080/mcp手动测一下端口通不通。第三类reading choices 相关报错比如error reading choices或返回体解析失败。这类多半是模型返回的格式和 Claude Code 期望的不一致常见于 Model ID 填错、用了一个不支持工具调用的模型或者 TaoToken 侧的路由把请求转到了非兼容端点。解决方法是确认 Model ID 是 DeepSeek V4 系列里支持 function calling 的版本并且 Base URL 用的是 TaoToken 的兼容入口。如果换了模型就好说明是模型能力问题不是配置问题。第四类OAuth 相关报错。Claude Code 某些版本会尝试走 OAuth 登录流程如果你已经用环境变量配了 Key它不应该再弹 OAuth。如果出现OAuth token expired或类似提示检查是不是同时存在多套配置互相覆盖比如 settings.json 里写了 envshell 里也 export 了两者冲突。清理掉多余的那套只保留一处。另外确认没有残留的ANTHROPIC_API_KEY和ANTHROPIC_AUTH_TOKEN同时存在Claude Code 对这两个变量的优先级处理在不同版本里有差异只留ANTHROPIC_AUTH_TOKEN最稳。排查顺序建议固定成先claude --version确认装好了再echo三个环境变量确认值对再/mcp看连接状态最后做一次创建对象的真实调用。每一步都过再往下走不要跳步。6. 把链路用起来从脚本生成到场景操作的日常协作链路通了之后真正的价值在于日常怎么用。我自己的习惯是把 Claude Code 当成一个「能碰编辑器的结对程序员」而不是一个问答机器人。脚本生成这块直接在终端里描述需求让它把脚本写到Assets/Scripts下然后通过 Unity-MCP 触发一次编译刷新。比如「写一个 PlayerController支持 WASD 移动和空格跳跃用 CharacterController 实现写到 Assets/Scripts/PlayerController.cs然后让 Unity 重新编译」。它会先写文件再调用 MCP 的编辑器命令触发 AssetDatabase.Refresh编译错误会直接返回给你省去切窗口看 Console 的时间。场景操作这块适合做重复性搭建。比如你要批量生成一排路灯手动拖太慢就让 AI 循环创建。它会调用创建对象工具多次每次设置位置和组件。这里要注意多步工具调用会消耗较多 tokenDeepSeek V4 的 flash 版本适合这种批量操作pro 版本留给需要推理的复杂逻辑。你可以在环境变量里把 subagent 模型设成 flash主模型用 pro让 Claude Code 自己分配。长期做 Unity 开发的话可以考虑把常用的 MCP 工具调用封装成项目级的 prompt 模板放在.claude目录下每次用的时候直接引用。这样不用每次重复描述「在当前场景创建对象」这种上下文AI 能更快进入状态。最后提醒一句Unity-MCP 操作的是你的真实工程AI 调用工具时没有「撤销」的天然保护。建议在版本控制下工作每次让 AI 做批量场景操作前先 commit 一次出问题直接回滚。工具调用日志在 Claude Code 终端里都有出错了照着日志定位是哪一步的参数不对比盲目重试高效得多。