这次改了什么
@nextaurame、@hazemomier、@AICodingOpsJP 不约而同提醒管理员:Claude Code 2.1.305 改动了 MCP 白名单的行为。官方 CHANGELOG 原文是:allowedMcpServers 不再过滤 managed-mcp.json 中只在 env 里使用 ${VAR} 的 stdio server;白名单里没写的这类 server,升级后会加载;想让它保持关闭,要用 deniedMcpServers。
为什么容易踩坑
按官方 Managed MCP 文档,allowedMcpServers 原本就不管 managed-mcp.json 里的 server,只有一个例外:定义里用了 ${VAR} 展开的 server 仍要过白名单,因为它的实际配置取决于每个用户的环境变量。文档还写明,这类变化会在用户首次启动新版本时生效,没有提示,也没有通知;能从这些 server 里「减掉」的只有 deniedMcpServers。
2.1.305 把「只在 env 里用变量」的情形也排除出了这个例外。如果你过去是靠「白名单不写它」来让某个 server 不启动,那么升级之后它会开始运行。
升级前的检查清单
- 列出 managed-mcp.json 里所有 stdio server,标出哪些只在
env块里用了${VAR}。 - 对照 allowedMcpServers:凡是你本来希望它不加载、又不在白名单上的,都属于这次会「复活」的对象。
- 改用 deniedMcpServers 明确拒绝:文档建议用
serverCommand或serverUrl条目,而不是serverName——名字只是用户自己起的标签,任何 server 都可以叫github,不是安全控制。 - 另一个办法是按用户分组部署不同的
managed-mcp.json,让不需要的 server 根本不出现在那台机器上。 - 先在一台机器上升级验证,用
/mcp看实际加载了哪些 server,再推给全团队。
对个人用户的意义
即使你不是管理员,这条也提醒了一个原则:白名单「没写」不等于「禁止」。凡是一定不能运行的 MCP server,都要写成明确的拒绝规则,并在每次大版本升级后复查一次。
如果你想把 Claude Code 放在一台常开、整机独享的新加坡 Mac mini 上长期运行,可以了解 Zumac.Ai,咨询 Telegram @singatao。
