
Rider 内置 MCP 实战:把 Unity 编译等待从分钟压到秒¶
Rider 2025.2 起内置 MCP Server,零安装即可把 IDE 能力接给 AI 客户端;配上正确的项目 header,Unity 编译等待从分钟级降到秒级。
一、为什么值得接¶
写 Unity C# 的循环很慢:改一行代码 → Unity 域重载 → 编译 → 回 Console 看报错。单次 20~60 秒,AI 写代码时这个循环会被放大几十倍。
Rider 从 2025.2 起内置了 MCP Server,把 IDE 的能力直接暴露给外部 AI 客户端(Claude Code、Codex、Cursor、VS Code 等都可以)。接上之后,AI 不必等 Unity 编译,直接问 IDE:
get_file_problems— ReSharper 级语法/语义诊断,秒级返回search_symbol/get_symbol_info— 走 IDE 索引,不是文本 greprename_refactoring/change_api_signature/extract_method— 跨解决方案语义重构,会同步改 override、实现与调用点build_solution_start— 直接触发 Rider 构建并回收问题列表xdebug_attach_to_process— 附加到 Unity 进程下断点
JetBrains 官方那个 @jetbrains/mcp-proxy npm 包已经弃用,能力全部并入 IDE,不需要安装任何额外依赖。
二、开启服务端¶
设置 → 工具 → MCP 服务器,勾选「启用 MCP 服务器」。
勾上后页面会显示两个地址(端口每次启动由 IDE 分配,以界面显示为准):
两个都能用,但优先选 /stream。SSE 需要维持一条长连接、再用 sessionId 拼出 POST 端点,容错差;Streamable HTTP 是单请求-响应模型,客户端实现更稳。
顺带记一个坑:这版 IDE 的内置服务路径是 /stream,不是 /mcp。按惯例去探 /mcp 会得到 404,容易误判成「不支持 HTTP 传输」。
三、拿到客户端配置(关键一步)¶
同一页面往下滚,有「手动客户端配置」,三个按钮:复制 SSE 配置、复制 Stdio 配置、复制 HTTP 流配置。
点 复制 HTTP 流配置,得到:
{
"type": "streamable-http",
"url": "http://127.0.0.1:<端口>/stream",
"headers": {
"IJ_MCP_SERVER_PROJECT_PATH": "<你的项目绝对路径>"
}
}
这个 header 是全文最重要的一行,原因见下一节。
四、最容易踩的坑:没有 header 就不认项目¶
只填 URL 的时候,每个工具调用都会返回:
哪怕 IDE 里只开着一个项目也一样——它不会猜。两种解法:
- 每次调用带
rootFolder参数(工具 schema 里有,但需要调用方记得,AI 很容易漏); - 配
IJ_MCP_SERVER_PROJECT_PATHheader,让服务端知道默认项目。
实测第 2 种:带上 header 后调 get_solution_projects 且不传 rootFolder,正常返回解决方案里的全部程序集列表。所以直接用设置页复制出来的那份配置,不要手写。
五、接进不同客户端¶
服务端是标准 MCP over HTTP,客户端只要支持 Streamable HTTP 即可。把设置页复制出来的那段 JSON 填进各家的 MCP 配置就行。
以 Codely / 团结 Cowork 为例,用 CLI 注册(比手改文件可靠,会写进客户端能识别的配置存储):
codely mcp add rider "http://127.0.0.1:<端口>/stream" \
--transport http \
--scope project \
-H "IJ_MCP_SERVER_PROJECT_PATH: <项目绝对路径>"
验证:
配在全局还是项目级?¶
这是接入时最容易被忽略的设计问题。先把两个维度拆开:
| 维度 | 由谁决定 | 粒度 |
|---|---|---|
| 端点(URL / 端口) | IDE 进程 | 每个 IDE 实例一个 |
| 目标项目 | IJ_MCP_SERVER_PROJECT_PATH header 或 rootFolder 参数 |
每次调用 |
它们正交。MCP 服务端是一个 IDE 进程,端口属于这个进程,而「操作哪个项目」是调用期才决定的。所以:
- 全局条目 + 带 header:条目被钉死在那一个项目上。实测把 header 指向一个没打开的项目,调用直接返回
Unable to determine the target project ... Currently open projects: [...],不会回退到当前唯一打开的项目。也就是说这种配法换项目就失效。 - 全局条目 + 不带 header:条目对所有项目通用,但要求调用方每次传
rootFolder(实测有效)。AI 漏传就会撞上同一条报错。 - 项目级条目 + 带 header:按构造就是对的——只在打开该项目时加载,且不用依赖调用方记得传参。
结论:服务定义适合放全局(它是 IDE 级事实),项目归属适合放在项目级配置里。 现实里最省事的组合是「项目级条目 + header」;只有在你确定客户端每次都会带 rootFolder 时,才适合「全局条目 + 无 header」。
还有一个前提要认清:这个服务是本机进程 + 本机端口,条目一旦提交进版本库,对同事无效、还会让配置文件长期变脏。项目级配置要么保持本地未提交,要么把该文件排除出版本库。
另外,同时开两个 Rider 窗口会是两个端口;如果只想让其中一个窗口被 AI 操作,全局条目就只能指向那个端口。
六、端口会变,怎么稳住¶
端口没有 UI 配置项,IDE 每次启动取一个空闲端口。三个办法:
办法一(推荐):读 IDE 写下的端口¶
macOS:
拿到端口后重跑一次 codely mcp add(同名是幂等更新)。
办法二:钉住端口¶
IDE 里 Cmd+Shift+A → Registry → 找 idea.mcp.server.force.port,填固定值后重启 Rider。这个键在 McpServerService 中对应 getForcedMcpServerPortOrNull,是官方实现,只是没暴露到设置界面。
办法三:用 Stdio 配置?¶
设置页确实提供 复制 Stdio 配置。但要注意,它的命令行里同样带端口参数(createStdioMcpServerCommandLine(int, ...)),并不能摆脱端口依赖,只是换了传输方式。别指望它一劳永逸。
七、和 Unity 侧工具的分工¶
| 工具 | 擅长 | 别用它做什么 |
|---|---|---|
| Rider MCP | C# 语义分析、跨解决方案重构、构建、调试器、Profiler 采样 | 场景 / prefab / 资产操作 |
| Unity MCP(Editor Bridge) | 场景、prefab、资产、Play Mode 运行时 | 代码语义分析 |
| Unity 工程索引类工具 | 引用关系、脚本绑定、层级图查询 | 改代码 |
三者不重叠,串起来才闭环:Rider 保证代码正确,Unity 侧保证运行正确。
八、安全边界¶
- 服务只监听
127.0.0.1,本机之外访问不到; - 它会改你的代码:
rename_refactoring、apply_patch、execute_terminal_command、build_solution_start都是写操作; - 设置页里有「无需确认即可运行 shell 命令或运行配置(Brave 模式)」,默认关闭。建议保持关闭,让每个写操作都过一遍确认;
- 端口上另有 IDE 自身 AI 助手用的那条服务(另一端口、带
IJ_MCP_AUTH_TOKEN鉴权),和这条对外的是两回事,别配混。
九、实战示例:修一个编译错误¶
以前:改代码 → 回 Unity → 等编译 → 读 Console。
接上 MCP 之后:
- AI 写完代码,直接调
get_file_problems("Assets/Scripts/Foo.cs"); - 返回 ReSharper 的诊断(错误 / 警告 / 行号),当场改;
- 需要整体状态时调
get_project_problems; - 确认干净了再回 Unity 编译一次。
一次修完,Unity 只编译一次。多文件改动用 lint_files 批量查,比逐个文件快得多。
重构同理:要给接口方法加一个参数,用 change_api_signature,它会列出受影响的文件、调用点、override 与实现,还支持先 preview 看影响面再落地——这是文本搜索替换做不到的。
十、小结¶
- Rider 2025.2+ 内置 MCP,零安装;
- 端点用
/stream(Streamable HTTP),/mcp是 404; - 配置必须带
IJ_MCP_SERVER_PROJECT_PATHheader,否则工具全部拒绝执行; - 端口每次启动会变,读 IDE 的端口文件或用 Registry 键钉死;
- 定位是「C# 语义层」,和 Unity 侧的 MCP 互补而非替代。
如果你的 AI 工作流里最痛的一环是「等 Unity 编译」,这条通路能把这段等待从分钟级压到秒级,值得花十分钟配一次。