本地 MCP 默认谈 2026-07-28
Claude Code 2.1.292 起,本地 stdio MCP 默认协商 2026-07-28,含 Bedrock、Vertex 和 Foundry。MCP_PROTOCOL_NEGOTIATION=legacy 退回旧协商。远程 HTTP 与 WebSocket 不在这句。慢连接的服务器会被记住 7 天。

自建的本地 MCP 如果只实现旧握手,升级 Claude Code 之后可能变慢或连不上。2.1.292 改了本地 stdio 服务器的默认协商:每次安装都默认谈协议版本 2026-07-28,包括 Bedrock、Vertex 和 Foundry。MCP_PROTOCOL_NEGOTIATION 设为 legacy 可以退出这套新协商。说明的主语是本地 stdio,没有写 HTTP、SSE 或 WebSocket 服务器。
慢连接会被记住 7 天
同一版还有一句改进:忽略较新协议检查的本地 stdio 服务器,在一次慢连接之后会被记住 7 天,之后用旧方式连接,不再每次等待。这和 legacy 不是同一个开关。legacy 是你主动让所有这类协商走旧路径。7 天记忆是某一台服务器已经表现出不理会新检查之后,客户端少等一次。说明没有写这 7 天存在哪个文件里,也没有写删掉什么能立刻忘掉。
服务器如果能谈 2026-07-28,就不要设 legacy。设了之后,新版本里的能力不会在握手里出现,问题会变成「工具列表缺字段」,而不是连接超时。只有确认服务器拒绝新版本、而且 7 天记忆仍每次都慢,再考虑这个变量。
远程服务器不在这句里
claude mcp list 从 2.1.285 起可以列出 WebSocket 服务器的地址和健康状态。那些远程条目没有被 2.1.292 写成默认 2026-07-28。本机 command 拉起的 stdio 才是这句的范围。同一个项目里既有 stdio 又有 URL 型服务器时,只给会握手失败的那一台找退路,不要把变量设进所有环境然后认为远程也回退了。
Bedrock、Vertex 和 Foundry 被点名,是因为这些安装以前可能仍用旧的默认协商。升级到 2.1.292 之后,同一台 stdio 服务器在官方 API 和在 Bedrock 上都会先谈 2026-07-28。退回 legacy 如果只写在某一份项目设置里,另一条启动路径仍走新协商。变量要出现在真正启动 Claude Code 的环境中。说明没有写设成空字符串是否等于 legacy。写 legacy 这一个词,避免写成 0 或 false 然后以为已经退出。