SuperAPI AI 工具集

serveMyAPI

serveMyAPI 是一个运行在本地、用于跨项目安全存储和访问 API 密钥的 MCP(模型上下文协议)服务器,基于 macOS 钥匙串(Keychain)实现。它让 API 密钥不再出现在 .env 或配置文件中,可通过一致的 MCP 接口在多个项目间复用,并支持配合 Claude 等大语言模型以自然语言方式存储、检索、列出和删除密钥。除 macOS 原生钥匙串外,还提供跨平台存储抽象层:Windows/Linux 与 Docker 使用加密文件存储,另提供内存存储用于测试。

访问官网

工具介绍

用途

serveMyAPI 是一个个人使用的 MCP(Model Context Protocol)服务器,主要目的是在本地安全地存储和访问 API 密钥,并让这些密钥能够跨项目复用。它把密钥存放在 macOS 钥匙串(Keychain)中,并通过统一的 MCP 接口访问,从而避免将密钥写入 .env 文件或配置文件。

官方说明强调安全优先:serveMyAPI 被设计为仅在本地机器运行,API 密钥绝不通过互联网传输,也绝不应部署到云服务。

主要能力

  • 在 macOS 钥匙串中安全存储 API 密钥。
  • 提供简单的 MCP 工具,用于存储、检索、列出和删除密钥。
  • 提供便捷的 CLI 界面,可在终端中管理密钥。
  • 支持 stdio 与 HTTP/SSE 两种传输方式(HTTP 带认证)。
  • 兼容任何 MCP 客户端(如 Claude Desktop 等)。
  • 跨平台存储抽象层:
    • macOS:使用原生钥匙串(默认)。
    • Windows/Linux:使用加密文件存储。
    • Docker:自动使用加密文件存储。
    • Memory:用于测试和临时存储。

相比 .ENV 文件的优势(官方列举)

  • 解决 GitHub 安全冲突:.ENV 文件需通过 .gitignore 排除,导致配置对协作者和 LLM 不可见(“隐藏上下文”问题),新开发者难以正确设置环境变量。
  • 改善 LLM 集成:Claude 等 LLM 因安全限制无法直接访问 .ENV 文件,serveMyAPI 让 AI 助手可通过自然语言请求密钥。
  • 跨项目一致性:.ENV 文件通常需要在多个项目间重复密钥,变更时要更新多个文件;serveMyAPI 提供可从任意项目访问的中心存储位置。

使用方式

命令行界面

serveMyAPI 提供 CLI,可在终端中快速管理密钥。

以 stdio 服务器运行:这是最简单的方式,尤其适合与 Claude Desktop 配合使用。

以 HTTP 服务器运行:适合需要 HTTP 访问的应用。启动后默认监听 3000 端口(或 PORT 环境变量指定的端口)。

配置 MCP 客户端

serveMyAPI 可与任何兼容 MCP 的客户端配合使用,examples 目录中提供了示例配置文件。

以 Claude Desktop 为例:

  1. 找到或创建 Claude Desktop 配置文件:
    • macOS:~/Library/Application Support/Claude/claude_desktop_config.json
    • Windows:%AppData%\Claude\claude_desktop_config.json
  2. 在 mcpServers 部分添加 serveMyAPI(可从 examples/claude_desktop_config.json 复制):
{
  "mcpServers": {
    "serveMyAPI": {
      "command": "node",
      "args": ["/ABSOLUTE/PATH/TO/servemyapi/dist/index.js"]
    }
  }
}
  1. 将 /ABSOLUTE/PATH/TO/servemyapi 替换为实际的 serveMyAPI 安装路径。
  2. 重启 Claude Desktop。

以 Windsurf 为例:

  1. 打开 Windsurf 编辑器并进入 Settings。
  2. 使用 examples/windsurf_config.json 中的示例,将 serveMyAPI 添加到 MCP 服务器配置。
  3. 根据本地安装情况调整路径。

暴露的工具

  • 存储 API 密钥:参数 name(密钥名称/标识)、key(要存储的 API 密钥)。
  • 检索 API 密钥:参数 name(要检索的密钥名称/标识)。
  • 删除 API 密钥:参数 name(要删除的密钥名称/标识)。
  • 列出所有已存储的 API 密钥:无需参数。

存储选项

serveMyAPI 会根据平台自动选择最佳存储提供程序:

  • 平台自动检测:macOS 使用 Keychain(默认);Windows、Linux、Docker 使用加密文件存储。
  • 手动配置:可覆盖自动检测结果。

各存储方式特点:

  • Keychain 存储(仅 macOS):原生操作系统级安全;无需加密;首次使用时需要用户授权。
  • 文件存储(跨平台):AES-256-GCM 加密;PBKDF2 密钥派生;默认存储在 ~/.servemyapi/keys.json.enc;需要 ENCRYPTION_KEY 环境变量。
  • 内存存储(测试):仅存于内存;重启后数据丢失;用于测试和开发。

安全特性

核心安全特性:

  • 平台感知存储:自动为每个平台选择安全存储。
  • macOS 钥匙串存储:API 密钥以原生操作系统级安全存储在 macOS 钥匙串中。
  • 加密文件存储:跨平台支持 AES-256-GCM 加密。
  • Docker 加密:在 Docker 中运行时,密钥使用 AES-256-GCM 加密并采用 PBKDF2 密钥派生。
  • 认证:HTTP/SSE 端点需要 Bearer token 认证。
  • 输入验证:严格验证以防路径遍历和注入攻击。
  • 速率限制:通过可配置的请求限制防止滥用。
  • 安全日志:所有日志输出自动对敏感数据脱敏。

HTTP 服务器安全建议(官方):

  • 在请求中包含 Bearer token。
  • 生产环境始终使用 HTTPS,部署在带 TLS 的反向代理之后。
  • 设置强认证密钥,可使用 openssl rand -base64 32 生成。
  • 以非 root 身份运行(Docker 镜像自动使用受限用户)。
  • 定期轮换密钥,周期性更新认证和加密密钥。
  • 监控访问日志,留意可疑模式或未授权尝试。

详细安全配置见 docs/SECURITY.md。

重要安全警告

官方警告:不要使用 Smithery 托管版本来存储真实 API 密钥。Smithery 部署仅用于演示。使用它会:

  • 通过互联网传输你的 API 密钥(即使使用 HTTPS,也违背密钥本地保存的原则)。
  • 将密钥存储在他人服务器(Smithery 基础设施)上。
  • 可能将密钥暴露给服务运营方,或在发生泄露时被曝光。

serveMyAPI 被设计为仅在本地机器运行,整个安全模型依赖于密钥永不离开本地环境。

适用场景

  • 需要在多个项目间复用同一批 API 密钥的开发者。
  • 希望让 Claude 等 LLM 在需要访问服务时以自然语言请求密钥。
  • 不希望把敏感凭据写入 .env 或配置文件、又希望协作者和 AI 工具能获得所需配置的场景。

限制

  • 默认设计为本地运行,不应部署到云服务。
  • macOS 默认使用钥匙串;Windows/Linux 与 Docker 依赖加密文件存储,需要 ENCRYPTION_KEY 环境变量。
  • 内存存储重启后数据丢失,仅用于测试。
  • 官方明确不建议使用 Smithery 托管版本存储真实密钥。

未来计划(官方列出)

  • 代码扫描工具:自动扫描代码库中的 API 端点、敏感 URL 和环境变量,并建议存入钥匙串的名称。
  • 跨平台支持:研究 Windows 和 Linux 的安全凭据存储方案。
  • 与流行框架集成:为 Next.js、Express 等框架提供便捷集成。
  • 密钥管理 UI:用于直接管理已存 API 密钥的简单 Web 界面。

(以上功能为规划中,暂未提供。)