mirror of
https://github.com/proffesor-for-testing/agentic-qe.git
synced 2026-09-19 08:45:47 +08:00
b1a462fba2
Ports ruflo's #1874 discipline. Replaces the FAKE mcp:validate theater (echo 'All tools registered' && exit 0) with a real smoke that boots the actual MCP server (tsx src/mcp/entry.ts) over stdio and validates the initialize + tools/list handshake against the MCP SPEC, not the code: - protocolVersion is a YYYY-MM-DD string (the core ruflo #1874 guard — an object here is what Claude Code's Zod rejects) - capabilities is an object; serverInfo.name/version are non-empty strings - tools/list returns a non-empty array, each entry name + object inputSchema scripts/audit-mcp-tool-parity.mjs is the AQE-equivalent of ruflo's CLI<->MCP parity audit (the CLI has no callMCPTool('name') string pattern, so the meaningful surface is advertisement<->handler parity). Drives the advertised set from a live tools/list, diffs a monotone baseline (verification/mcp-tool-parity-baseline.json, 86 tools), fails only on NEW discrepancies (removed tool = regression), and probes that unknown-tool tools/call is rejected. --update-baseline to re-baseline. Both scripts spawn the server against an isolated AQE_PROJECT_ROOT temp dir (data protection: real .agentic-qe/*.rvf proven byte-identical before/after) and kill the whole detached process group on exit (no leaked servers). Verified: npm run mcp:validate -> PASS (protocolVersion 2025-11-25, 86 tools); mcp:parity -> PASS (0 removed, 0 added). Both exit 0, real stores untouched. Side-finding (pre-existing, not fixed here): handleToolsCall throws a plain object for unknown tools, which escapes the request-handler safety net as 'Internal error: [object Object]' instead of a proper JSON-RPC -32601. Logged for a dedicated fix. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>