MCP server 显示已连接、工具数却是 0,日志里是 Invalid result for tools/list,ttlMs 与 cacheScope 校验失败。用自写 stub 在 Claude Code 2.1.280 / 2.1.285 / 2.1.288 上复现:根因不是「多了未知字段被严格校验拒掉」,而是 server 协商到 MCP 2026-07-28 后漏了这一版的必填字段(resultType、ttlMs、cacheScope),多加未知字段反而能正常通过。stdio 是否走新协议由一个默认关闭的远程开关决定,所以同一个版本有人中招、有人没事;2.1.280 打开协商后同样失败。用户侧设 MCP_PROTOCOL_NEGOTIATION=legacy(settings.json 的 env 也行)立即恢复,server 侧补上三个字段即可。
claude mcp list 显示 ✘ Failed to connect,但「连不上」可能是命令不存在、PATH 缺 node、server 启动即退出、不回握手、端口没服务或配置写错。本文用自写 stub 在 Claude Code 2.1.280 上逐条复现:mcp list 失败也返回 0;CONNECTION_CLOSED 背后可能是两种完全不同的原因,真因只在 --debug-file 里;一个不回握手的 server 会让 claude -p 墙钟从 4.63s 变成 36.21s,而 duration_ms 只从 4323.5 涨到 5930。