首页/文章/Claude Code 的 MCP 一直追 latest?在新加坡 Mac mini 上把版本钉死再验收

Claude Code 的 MCP 一直追 latest?在新加坡 Mac mini 上把版本钉死再验收

· Zumac.Ai

问题不只是「装了哪些 MCP」,还有「跑的是哪一版」

Claude Code 接上几个 MCP 服务之后,日常会用 claude mcp list 看服务在不在线。真正容易被忽略的是另一件事:这些服务是固定版本,还是每次启动都拉最新?

很多人在配置里写的是 npx some-mcp 或等价于「永远最新」的写法。某天工具列表、参数名或默认行为变了,会话还是老一套提示词,结果就会 silently 变样:该拦的没拦、该读的路径变了、甚至多出你没批准过的能力。常开机器上这个问题更扎眼——笔记本偶尔重启、偶尔重装,漂移会被打断;新加坡 Mac mini 上 Claude Code 一开几天,MCP 进程会跟着一直用同一套「未钉死」的依赖树。

这篇把「钉死版本 → 登记清单 → 升级自己验收」做成可复现步骤,整套流程都放在同一台整机独享的 Mac mini 上完成。

说明:具体子命令、配置文件字段以你当前 Claude Code 版本的 /help、官方文档和更新日志为准。文中的包名是占位示例,换成你自己可信来源的 MCP 服务端。

第一步:先摸清三层作用域,避免漏改

SSH 进新加坡 Mac mini,打开终端:

claude --version
claude mcp list

claude mcp list 会列出即将加载的服务。配置通常分三层(名称以你本机为准):

  • 用户 / 本机:常见在 ~/.claude.json
  • 项目:仓库里的 .mcp.json
  • 会话临时添加:用 claude mcp add 当场加的

漏改任何一层,都会出现「你以为钉死了,其实还有一条 latest」。把三层都打开看一眼:

# 仅查看,不要把密钥贴进聊天或工单
grep -n "mcp\|command\|args\|npx" ~/.claude.json 2>/dev/null | head -80
ls -la .mcp.json 2>/dev/null && sed -n '1,120p' .mcp.json

看到明文 API Key、PAT 时先停:密钥不要写进 MCP 配置文件。改用环境变量、macOS 钥匙串或你信任的本机凭据方案,再继续钉版本。密钥曾经进过会话的话,还要在 ~/.claude/projects 里自查并轮换(见文末)。

第二步:把「裸 npx」改成「带版本号」

目标形态是明确的:包名@主.次.修订,而不是默认 latest。

示例(把包名换成你的真实服务;版本号用你已经验证过的那一版):

# 先查清当前实际解析到的版本(示例)
npx --yes [email protected] --help | head

# 用 Claude Code 重新登记(先删旧再加新,或按你版本支持的 update 流程)
claude mcp remove some-mcp
claude mcp add --transport stdio some-mcp -- npx -y [email protected]
claude mcp list

如果配置是手写 JSON,确保 command / args 里带上版本:

{
  "mcpServers": {
    "some-mcp": {
      "command": "npx",
      "args": ["-y", "[email protected]"]
    }
  }
}

不要写裸的 "some-mcp",也不要写 @latest。远程 HTTP MCP 同理:URL 或部署镜像要能对应到可回溯的版本或摘要,而不是「线上随便哪次发布」。

第三步:在项目里留一份「MCP 版本清单」

钉死之后,还要让一周后的自己(和另一个会话里的 Claude)知道「当前允许哪几版」。在项目根的 CLAUDE.md 加一小节,或单独放 docs/mcp-versions.md:

## MCP 版本(变更需人工验收)
- [email protected](stdio,只读仓库工具)
- [email protected](禁止写生产密钥相关工具)
升级流程:改版本号 → 跑下方冒烟命令 → 更新本表日期。
禁止在未验收时改回 @latest。

再在仓库里提交配置文件(不含密钥)。这样 Mac mini 上的 Claude Code、你笔记本上的只读检查、同事克隆仓库后的环境,对得上同一套版本。

第四步:升级必须「自己验收」,不要默默飘

需要升版本时,按固定顺序:

  1. 在清单里记下旧版本与新版本。
  2. 只改这一条服务的版本号。
  3. 重启相关 MCP / 新开一条 Claude Code 会话。
  4. 跑冒烟检查:列出工具名、对只读工具跑一次无害调用、确认危险工具仍被 deny / 需批准。
  5. 通过后再改 CLAUDE.md 里的版本表。

冒烟可以做成脚本,放在常开机器上:

#!/bin/zsh
# ~/bin/mcp-smoke.sh — 按你的服务改写
set -e
claude mcp list
# 例:要求 list 输出里出现钉死的版本线索,或调用只读 ping
echo "手动确认:工具列表与上周截图一致后再继续开发"

常开 Mac mini 的好处是:冒烟失败时会话还在,你可以 SSH 或 UU 远程连接回去改,而不必「合上笔记本就丢现场」。

第五步:给常开环境加两条护栏

防休眠,避免半夜 MCP 子进程和 Claude 会话一起睡死:

tmux new -s claude-dev
caffeinate -dimsu claude

防配置漂移:把用户级 MCP 尽量收敛到「本机一台机器」;项目级钉死在 Git 里。多台机器各写一套 @latest,排查成本会翻倍。整机独享的新加坡 Mac mini 正好当「唯一权威运行环境」——开发、验收、过夜任务都在同一台完成。

远程接回时用 SSH 进 tmux,或需要看桌面时用 UU 远程连接。Claude 账号由你自己开通和登录;这里提供的是稳定合规的使用环境,不是共享账号方案。

第六步:顺手清一次「密钥是否进过日志」

版本钉死解决的是工具行为漂移;密钥进会话日志是另一类事故。在 Mac mini 上定期自查(匹配规则按你实际密钥前缀调整):

grep -rlE 'sk-[A-Za-z0-9_-]{20,}|sk_live_|ghp_[A-Za-z0-9]{20,}' ~/.claude/projects 2>/dev/null | head

有命中就去原厂轮换密钥,并检查 MCP 配置是否仍含明文。不要把 grep 结果贴到公开地方。

为什么放在新加坡的常开 Mac mini 上做

  • 行为要可复现:钉版本只在「同一台长期开机的机器」上才有意义;笔记本休眠、换机、重装会把「我以为的版本」打乱。
  • 真 Mac 工具链:iOS/macOS 相关 MCP、模拟器、签名流程需要 macOS;整机独享,代码与登录态不和其他客户混用。
  • 远程可接回:SSH 进 tmux 验收,或用 UU 远程连接看桌面;实际延迟取决于你本地的网络线路。
  • 合规边界清晰:Claude 账号自开自用;机器侧做好版本锁定与密钥隔离,而不是靠不确定的捷径。

Zumac.Ai 提供位于新加坡的实体 Mac mini M6,整机独享,支持 SSH 与 UU 远程连接,FileVault 全盘加密,退租时抹机重装。新客户整机租用 ¥999/月起,季付 ¥2,697.30,半年付 6 送 1 为 ¥5,994,年付 12 送 2 为 ¥11,988;已购买客户续费保持原价。新客户首单自审核开通当天起租,续费及老客户新订单自付款当天起租。建议先租一个月,把「三层配置盘点 → 钉版本 → 清单入库 → 冒烟验收」跑通。

小结

  • MCP 在不在线是一回事;跑的是不是你验收过的版本是另一回事。
  • 用 claude mcp list 加三层配置文件,清掉裸 npx / @latest。
  • 版本写进 CLAUDE.md(或专用清单)并进 Git;升级只改一条、冒烟通过再改表。
  • 常开整机上用 tmux + caffeinate 保住会话;密钥不进配置文件,并定期扫 ~/.claude/projects。
  • 把 Claude Code 的权威运行环境固定在新加坡 Mac mini,比多台设备各追 latest 更稳。

有问题可以在 Telegram 联系 @singatao,或直接看 价格与付款周期。

Zumac.Ai 新加坡 Mac mini M6,整机独享,¥999/月起,联系 Telegram @singatao。
查看方案与费用 · 帮助中心

返回首页 · 更多文章

Telegram 客服