首页/文章/.mcp.json 进 Git 之前:用 ${VAR} 引用密钥,别把 token 明文提交

.mcp.json 进 Git 之前:用 ${VAR} 引用密钥,别把 token 明文提交

· Zumac.Ai

帖子说了什么

@KoderNeverDie 在讨论「把 Claude Code 配置放进 Git 共享」时提醒:配置能进仓库,密钥要拆出去。Claude Code 的 .mcp.json 支持环境变量引用,仓库里只留配置结构和变量名,不留 token 明文。他验收共享模板时会同时检查两件事:全新环境能不能复现,提交记录里有没有凭据。这样才不会「共享模板的同时把权限也共享了」。

官方规则

官方 MCP 文档里,.mcp.json 支持两种写法:

  • ${VAR}:展开成环境变量 VAR 的值;
  • ${VAR:-default}:VAR 有值就用它,没有就用默认值。

文档也说明了这样设计的目的:让团队共享配置,同时把机器相关路径和 API key 这类敏感值留在各自环境里。

还有两个容易踩的细节:

  1. 变量没设置时不会报错退出。 引用的变量不存在且没写默认值,配置照样加载,只在 claude mcp list 和 /mcp 里给出缺失变量的警告,并把 ${VAR} 原文传下去。连接失败时先看这里。
  2. Claude 自己的凭证变量在远程服务器配置里会读成空。 在远程 MCP 服务器的 url 和 headers 里,像 ANTHROPIC_API_KEY、ANTHROPIC_AUTH_TOKEN 这类 Claude Code 自身和云平台的凭证变量会被当作空值,不会展开。这是为了防止某个项目的 .mcp.json 或插件把你的 Claude 凭证发给它指定的服务器。所以写 Bearer ${ANTHROPIC_AUTH_TOKEN} 会得到 401,这是有意的保护,别想办法绕过去。

落地做法

  1. 把 .mcp.json 里所有 token、key 改成 ${SERVICE_TOKEN} 这类引用,真实值放在本机 shell 环境或密钥管理工具里。
  2. 在 README 里列出需要的变量名,不写值。
  3. 提交前搜一遍 diff,确认没有 sk-、ghp_、Bearer 后面跟着真实字符串。
  4. 给每个 MCP 服务单独发 token,权限按需最小化,别复用 Claude 账号或主力云账号的凭证。
  5. 一旦明文 token 进过 Git 历史,删文件不够,要先去对应服务吊销重发。

小结

配置共享、凭证留本机。${VAR} 一行改动,就能避免把团队模板变成密钥分发渠道。

来源

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

返回首页 · 更多文章

Telegram 客服