Skip to content

fix(reporter): scope MCP inventory to the current tool (#427) - #433

Merged
jeff-r2026 merged 1 commit into
Tencent:mainfrom
jeff-r2026:fix/issue-427-mcp-per-tool-report
Sep 8, 2026
Merged

fix(reporter): scope MCP inventory to the current tool (#427)#433
jeff-r2026 merged 1 commit into
Tencent:mainfrom
jeff-r2026:fix/issue-427-mcp-per-tool-report

Conversation

@jeff-r2026

Copy link
Copy Markdown
Collaborator

问题

Fixes #427

同机多 Agent 环境下,TeamAI Reporter 为某个 Agent 上报的 user_level.mcps / workspaces[].mcps 会包含其他 Agent 的 MCP。例如 CodeBuddy 装了 3 个 MCP、WorkBuddy 一个都没装时,WorkBuddy 的 report 却带上了 CodeBuddy 的 3 个 MCP。下游据此误判 WorkBuddy 已安装,不再向其下发安装命令;同时也造成 MCP 名跨 Agent 泄露。

根因

scanMcpFromManifest()for (const records of Object.values(manifest)) 遍历 managed-mcp.json所有工具 key 并合并,且未接收当前 tool。这与 skill/rule 走 toolPaths[tool] 按工具隔离的语义不一致。

修改

src/local-agent.ts:

  • scanMcpFromManifest 新增 tool 参数,只读当前工具对应的 manifest key —— user 级用 tool、project 级用 ${tool}:project。该 key 规则与写入侧 installMcpServer 完全对齐(用原始 hook-context tool,不经 normalizeAgentType,与写入侧一致),保证读写同源。
  • buildReportPayload 的 user 级与 project 级两处调用均传入当前 tool

Test Plan

验证 命令 结果
类型检查 npx tsc --noEmit ✅ 无报错
MCP 单测(含新增 issue #427 隔离用例) npx vitest run src/__tests__/local-agent-mcp.test.ts ✅ 14/14
local-agent 回归 npx vitest run src/__tests__/local-agent.test.ts ✅ 65/65
端到端(真实 CLI 子进程) 真实 HTTP server 捕获 node dist/index.js hook-dispatch session-start --tool ... 发出的 report payload ✅ codebuddy 上报自身 3 个 MCP;workbuddy user_level.mcps=undefined
反向验证 临时回退修复后重跑单测与 e2e 均如期 FAIL(workbuddy 泄露 codebuddy 的 3 个 MCP),证明测试真能抓 bug;恢复后转 PASS

端到端脚本按 issue 原文场景构造(codebuddy 拥有 mcp-a/b/c、workbuddy 零),验证后已清理,不入库;稳定回归由新增单测承载。

新增单测

src/__tests__/local-agent-mcp.test.ts:buildReportPayload does not leak another tool's MCPs (issue #427) —— 仅为 codebuddy 安装 MCP,断言 workbuddy report 的 user_level.mcps 为 undefined,而 codebuddy 自身 report 仍含该 MCP。

scanMcpFromManifest merged every tool's managed MCPs via
Object.values(manifest), so a report leaked other tools' MCP servers.
In a multi-agent host (e.g. CodeBuddy + WorkBuddy on one machine),
WorkBuddy's report listed CodeBuddy's MCPs, causing downstream to treat
them as already installed and stop dispatching install commands.

Read only the current tool's manifest key (`tool` at user scope,
`${tool}:project` at project scope) — the same key installMcpServer
writes under — so MCP inventory follows the same per-tool semantics as
skills and rules.

Fixes Tencent#427
@jeff-r2026
jeff-r2026 merged commit 7d08c5b into Tencent:main Sep 8, 2026
7 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

bug(reporter): 多 Agent 环境下 MCP inventory 被跨工具合并上报

1 participant