如何保护您的 MCP 服务器的 API 密钥(附可运行演示)

发布: (2026年2月16日 GMT+8 02:07)
4 分钟阅读
原文: Dev.to

Source: Dev.to

每个 MCP 开发者都忽视的问题

你在构建一个 MCP 服务器。它需要 GitHub token,可能还需要 OpenAI key。它们该放在哪里?

{
  "mcpServers": {
    "my-server": {
      "command": "node",
      "args": ["server.js"],
      "env": {
        "GITHUB_TOKEN": "ghp_XXXXXXXXXXXX",
        "OPENAI_API_KEY": "sk-XXXXXXXXXXXX"
      }
    }
  }
}

明文。放在 JSON 文件里。磁盘上。甚至可能已经提交到 git。

这就是大多数 MCP 服务器今天处理机密的方式。 这是一颗定时炸弹。

更好的办法:加密金库 + 运行时解密

我做了一个演示 MCP 服务器,采用了不同的做法。它不再从环境变量读取机密,而是从 Janee——为 MCP 服务器设计的加密金库——中获取。

流程:

flowchart LR
    A[Claude Desktop] --> B[MCP Protocol] --> C[Your Server] --> D[Janee Vault] --> E[API Call]
    D -->|AES-256-GCM encrypted| C

磁盘上永远没有明文机密。

亲自尝试(5 分钟)

git clone https://github.com/lucamorettibuilds/janee-mcp-demo
cd janee-mcp-demo
npm install

# 设置加密金库
npx janee init          # 创建加密金库
npx janee add github    # 存储你的 GitHub token(加密)
npx janee add openai    # 存储你的 OpenAI key(加密)

# 运行它
export JANEE_MASTER_PASSWORD="your-password"
npm start

服务器公开了三个 MCP 工具:

  • github_create_issue — 使用金库凭证创建 GitHub issue
  • openai_complete — 使用金库凭证调用 OpenAI
  • list_secrets — 显示金库中有哪些密钥(仅名称,从不显示值)

代码工作原理

核心是一个小型集成层(src/secrets.js):

import { execSync } from "child_process";

export async function getSecret(service, field) {
  try {
    const result = execSync(
      `npx janee get ${service} ${field} 2>/dev/null`,
      { encoding: "utf-8", env: { ...process.env } }
    ).trim();
    return result || null;
  } catch {
    return null;
  }
}

然后在你的 MCP 工具处理函数中,取代 process.env.GITHUB_TOKEN

const token = await getSecret("github", "token");

机密在运行时从金库解密,用于 API 调用,且不会在内存中保留超过必要的时间。

Claude Desktop 配置

{
  "mcpServers": {
    "janee-demo": {
      "command": "node",
      "args": ["/path/to/janee-mcp-demo/src/server.js"],
      "env": {
        "JANEE_MASTER_PASSWORD": "your-master-password"
      }
    }
  }
}

一个密码保护你所有的 API 密钥。再也不需要零散的环境变量。

为什么不直接使用 .env 文件?

功能.env 文件Janee 金库
存储方式明文AES‑256‑GCM 加密
访问控制基于会话的 TTL
轮换手动查找‑替换janee add service(覆盖)
审计内置日志
Git 安全性需要 .gitignore 纪律金库文件可安全提交

添加你自己的服务

演示中已经包含 GitHub 和 OpenAI,但你可以添加任何服务:

npx janee add stripe
npx janee add anthropic
npx janee add postgres

随后在工具处理函数中使用 getSecret("stripe", "api_key")

获取代码

  • 演示仓库
  • Janee(机密管理器)
  • MCP 规范

如果你正在构建 MCP 服务器,请给你的机密应有的尊重。⭐ 如果有用,请给 Janee 点星。

0 浏览
Back to Blog

相关文章

阅读更多 »