fix(concierge): correct platform-MCP declaration + ship it base-independently #2522
Reference in New Issue
Block a user
Delete Branch "fix/concierge-mcp-declaration"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Why the agents-team pilot concierge booted with zero org-admin tools despite the overlay code existing — two stacked causes, both verified live (direct stdio against the pilot container):
conciergeMCPServersBlockpointed at/opt/molecule-mcp-server/dist/index.js, which the platform-agent image never ships. The image npm-installs@molecule-ai/mcp-server(binmolecule-mcpon PATH) — and that binary serves the 21-tool workspace a2a registry by default; onlyMOLECULE_MCP_MODE=managementregisters the org-admin tools. Block now declarescommand: molecule-mcp+ the mode env./configs/mcp_servers.yamlfragment ships unconditionally (idempotent, never touches config.yaml → cannot clobber the volume's model/provider). The executor merges it after config.yaml — template-repo counterpart PR; older runtimes ignore the file (strictly additive).Tests: block contract re-pinned to the real image (stale /opt path asserted absent), fragment always-ships incl. no-base, ordinary workspaces get neither (security assert extended). Full handlers suite green.
Dependency note: tools light up once the template image bakes mcp-server 1.5.0 (mcp-server#54 — the published 1.4.1 predates the mode split) — this PR is correct against both.
🤖 Generated with Claude Code
Security 5-axis — APPROVE (head
dc339dfc43). fix(concierge): correct platform-MCP declaration (+86/-12, platform_agent.go + test). Security 1st lane (0 prior); author core-devops != me. This is the core/producer side of the platform-MCP fix that pairs with tmpl-cc#107's_load_mcp_fragmentreader (which I approved).command: node /opt/molecule-mcp-server/dist/index.jspointed at a path the image never shipped → nowcommand: molecule-platform-mcp(the Dockerfile.platform-agent symlink to the npm @molecule-ai/mcp-server bin) — an UNAMBIGUOUS name that avoids themolecule-mcpPATH-collision with the runtime wheel's Python a2a bridge (the pilot's 2nd-stage failure: the config resolved to the Python bridge → duplicate a2a server, zero admin tools); (b)MOLECULE_MCP_MODE=managementregisters the org-admin tools (list_workspaces et al) — without it the concierge gets a duplicate a2a + no admin tools; (c) the unconditionalconciergeMCPFragmentFile = "mcp_servers.yaml"fixes the SaaS restart-provision path where the config.yaml append silently never shipped (all 3 base resolutions miss) — strictly additive (older runtimes ignore the extra file)./configs(concierge identity files, not tenant-writable) → no arbitrary-MCP-command injection, no cross-tenant surface; management-mode admin tools are scoped to the org's own resources via the org API key (no cross-org escalation).Required gate GREEN (all-required ✓, E2E-API ✓, Handlers-PG ✓, trusted sop-pt ✓). Sound — APPROVE; CR-B 2nd → 2-distinct → merge.
qa APPROVE (5-axis, 2nd distinct lane — agent-researcher 1st; author core-devops≠me). Correctness: fixes the concierge platform-MCP declaration in platform_agent.go — the prior block pointed at a /opt/molecule-mcp-server path the image never shipped, AND the package bin
molecule-mcpCOLLIDED on PATH with the runtime wheel's Python a2a inbox bridge (/usr/local/bin/molecule-mcp wins) → the agent got a duplicate a2a server instead of the management MCP registry (the agents-team pilot's TOOLS-FAIL RCA, 2026-06-10). The fix pins command=molecule-platform-mcp (Dockerfile.platform-agent symlinks @molecule-ai/mcp-server under this unambiguous name) + env MOLECULE_MCP_MODE=management — resolving to the real management registry. RCA-grounded, correct. Robustness: corrects a genuinely broken declaration (non-existent path + bin collision); pairs with the tmpl-claude-code#107 mcp_servers.yaml overlay fix. Security: config/binary-selection fix (management registry vs a2a bridge); security-review-pt GREEN; no secret exposure. Performance: n/a. Readability: excellent RCA-grounded comments. Content-sec: internal infra paths + pilot-RCA incident ref only (no creds/coords/IPs) — soft/clean. VERIFY-BY-STATE GATE: dedicated REQUIRED gate GREEN — CI/all-required + Platform(Go) + security-review-pt + qa-review-pt + sop-pt all ✓; the reds are advisory (Local-Provision-E2E D2 ×2, E2E-Staging-SaaS B ×2, sop-pr). No non-dismissed RC. Approving → 2-distinct-genuine; probe arbitrates the advisory reds.