internal/mcp/(client.go + provider.go + stdio_test.go)internal/mcp 是 OCR 的 MCP client 實作。它啟動外部 MCP server(stdio 子程序或遠端 HTTP),註冊其宣告的工具,供評審 agent 呼叫。核心是 Client:NewClient 建 stdio client、NewRemoteClient 建遠端 client、CallTool 把工具呼叫轉成 MCP 請求。
NewClient 用 exec.CommandContext 啟動 command(如 npx),透過 stdin/stdout 走 MCP stdio 協議。30 秒初始化超時內完成 handshake,取得 server 宣告的工具清單(存進 c.tools)。失敗回傳錯誤——review 命令層會把錯誤記進 warning 並繼續。
遠端變體用 headerTransport(自訂 RoundTrip)注入認證 headers,走 HTTP MCP(SSE/streamable)。c.tools 同樣由 server 的 tools/list 填入。
CallTool 送 tools/call 請求,把回傳的 []mcp.Content(text/image/resource)用 contentToText 轉成單一字串——因為評審 agent 的工具介面只吃字串結果。
review_cmd.go 的 initMCPClients 依 config 建 client 後,用 Tools() 把每個 server 的工具註冊成 tool.Dynamic(name) 進 registry。工具名衝突時由 tool.IsReserved 攔截(見 internal/tool)。
CallTool 為何要轉純文字、以及 client 如何透過 Dynamic 工具進評審 registry。延伸閱讀:MCP 文件 · internal/tool · 回程式碼對照