本节摘要:OCR 可以作为 Model Context Protocol(MCP)客户端。你把它指向一个或多个外部 MCP server,这些 server 暴露的工具就会提供给审查 agent——与
file_read、code_search等内置工具并列。本节讲三件事:何时该引入 MCP server(审查器需要 diff 之外的上下文时)、如何用ocr config set添加/移除/过滤 MCP server、以及名称冲突与setup命令的规则。读完你能把 Issue 查询、内部文档、自定义分析器接进评审流程,扩展 OCR 触达 checkout 之外数据的能力。
内容来源:原项目中文文档
pages/src/content/docs/zh/mcp.md,套用体系化模板改写。
阅读完本节,你应当能够:
ocr config set / ocr config unset 添加与移除 MCP server。tools 字段做工具白名单以降低 token 成本。setup 字段在 server 启动前安装或构建它。[ocr] 前缀诊断信息排错。当审查器需要 diff 之外的上下文时,就该引入 MCP server:
💡 技巧:如果你只需要读仓库本身,内置工具就够了(见本章工具一节)——MCP 是为了触达 checkout 之外的东西。
ocr config set 命令以非交互方式写入这些字段。数组字段(args、env、tools)接受 JSON 数组字符串:
# 最小配置:只给命令 ocr config set mcp_servers.docs.command npx # 参数 ocr config set mcp_servers.docs.args '["-y", "@acme/docs-mcp-server"]' # 限制暴露给审查器的工具 ocr config set mcp_servers.docs.tools '["search_docs", "get_page"]' # server 启动前运行的 setup 命令 ocr config set mcp_servers.docs.setup "npm install -g @acme/docs-mcp-server" # 环境变量(KEY=VALUE 条目) ocr config set mcp_servers.docs.env '["DOCS_TOKEN=secret", "DOCS_REGION=eu"]'
MCP server 配置在用户配置文件(~/.opencodereview/config.json)的 mcp_servers 键下。字段说明:
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
command |
string | ✓ | 启动 MCP server 的可执行文件(如 npx、uvx、绝对路径)。 |
args |
string 数组 | 传给 command 的参数。 |
|
tools |
string 数组 | 要注册的工具名白名单。为空 = 注册该 server 提供的全部工具。 | |
setup |
string | server 启动前运行一次的 shell 命令(如安装依赖)。在仓库根目录运行,超时 5 分钟。 | |
env |
string 数组 | 额外环境变量,KEY=VALUE 形式。 |
用 unset 移除某个 server:
ocr config unset mcp_servers.docs
默认注册 server 声明的每个工具。当 server 暴露的工具超出审查器所需时,用 tools 设一个白名单——更少、更精准的工具能让 agent 更专注,也降低 token 成本。
⚠️ 注意:白名单里 server 实际没有提供的名字会被跳过并给出警告,因此拼写错误会显示在 stderr 上,而不是悄无声息地什么都不做。
MCP 工具名与内置工具共享同一个命名空间。如果某个 server 声明的工具名与内置/保留工具(file_read、code_search、task_done 等)冲突,或与另一个 MCP server 已注册的工具冲突,OCR 会跳过它并记录警告。
┌─────────────────────────────────────────────────────────────────┐ │ 注册顺序:内置工具 → MCP server A → MCP server B │ │ │ │ server A 声明 file_read ──冲突──► 跳过 + 警告(内置已注册) │ │ server B 声明 search_x ──冲突──► 跳过 + 警告(A 已注册) │ │ 先注册者胜出 │ └─────────────────────────────────────────────────────────────────┘
💡 技巧:先注册者胜出;为各 server 使用互不相同的工具名,以免因此丢失工具。
setup 命令setup 在 server 子进程启动前、从仓库根目录运行一次。用它来按需安装或构建 server:
"setup": "npm install -g @acme/docs-mcp-server"
它有 5 分钟超时。若非零退出,OCR 会记录命令、工作目录和输出,然后跳过该 server 并继续审查(不会让整个评审失败)。
所有 MCP 诊断信息都输出到 stderr,以 [ocr] 前缀标记,因此绝不会污染 stdout 上的 --format json 输出:
Running setup for MCP server "x": …——正在执行 setup 命令。failed to start MCP server "x": …——子进程未在 30 秒初始化超时内连接成功,或 command 不在 PATH 中。tool "y" conflicts with built-in tool, skipping——重命名该 server 的工具,或将其从 tools 中去掉。allowed tool "y" not found in server's tool list——tools 中的名字与 server 提供的任何工具都不匹配;检查拼写。⚠️ 注意:这与第 2 章讲的
--audience agent屏蔽 stdout 是配套设计——MCP 的所有噪声都在 stderr,JSON 解析器永远干净。CI 集成(第 5 章)中这是关键保证。
ocr config set mcp_servers.<name>.{command,args,tools,setup,env},数组字段用 JSON 字符串。ocr config unset mcp_servers.<name>。tools 字段限注册子集,降 token 成本;拼写错显警告。[ocr] 前缀,不污染 --format json 的 stdout。MCP 讲完了。下一节看会话查看器——用浏览器回看历次评审的工具调用、压缩轮次与评论产出,把「模型为什么这么说」可视化。