安全api mcp
允许Claude编码的MCP服务器 使用 秘密没有 看见 他们。
克劳德代码 默读 .env 文件 和 以明文形式缓存它们 在 ~/.claude/file-history/.此服务器在运行时将机密注入命令和API调用,然后对所有输出进行净化,使机密值永远不会到达Claude的上下文。
工具
get_env_keys(project_dir)--返回以下项的键名.env未暴露任何值。run_with_env(project_dir, command, env_keys?, timeout_ms?)--使用以下命令运行shell命令.env注射vars。输出被净化——秘密值被替换为[REDACTED:KEY_NAME].api_call(project_dir, url, method?, headers?, body?, auth_env_key?)--带有秘密注入的HTTP请求。auth_env_key添加一个Bearer令牌。Headers支持{{KEY_NAME}}模板语法。sync_env_example(project_dir)--生成/更新.env.example从.env。保留注释和结构,删除值,使用智能占位符。
设置
npm install && npm run build注册克劳德代码:
claude mcp add secure-api -- node /path/to/secure-api-mcp/dist/index.js与拒绝规则配对 ~/.claude/settings.json 阻止直接 .env 内容如下:
"deny": [
"Read(.env)", "Read(**/.env)",
"Read(.env.local)", "Read(**/.env.local)",
"Edit(.env)", "Edit(**/.env)"
]保持 .env.example 同步
跑 sync_env_example 生成或更新 .env.example 来自你的 .env它
- 保留注释和空白行
.env - 剥离秘密值,用智能占位符替换它们(URL保持URL形状,布尔值保持原样,数字保持原样,其他所有内容均为空白)
- 与任何现有
.env.example--您添加的自定义占位符不会被覆盖 - 让克劳德读
.env.example自由(因为拒绝规则只会阻止.env)因此,它知道存在什么配置,而看不到值
搭配这个 get_env_keys 克劳德完全知道你的项目配置,没有任何秘密暴露。
消毒是如何工作的
所有输出中长度超过4个字符的秘密值都会被替换,排序最长的优先,以防止部分匹配。一个类似的值 sk-abc123xyz 输出变为 [REDACTED:API_KEY].
许可证
麻省理工学院
