用途
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 为例:
- 找到或创建 Claude Desktop 配置文件:
- macOS:~/Library/Application Support/Claude/claude_desktop_config.json
- Windows:%AppData%\Claude\claude_desktop_config.json
- 在 mcpServers 部分添加 serveMyAPI(可从 examples/claude_desktop_config.json 复制):
{
"mcpServers": {
"serveMyAPI": {
"command": "node",
"args": ["/ABSOLUTE/PATH/TO/servemyapi/dist/index.js"]
}
}
}
- 将 /ABSOLUTE/PATH/TO/servemyapi 替换为实际的 serveMyAPI 安装路径。
- 重启 Claude Desktop。
以 Windsurf 为例:
- 打开 Windsurf 编辑器并进入 Settings。
- 使用 examples/windsurf_config.json 中的示例,将 serveMyAPI 添加到 MCP 服务器配置。
- 根据本地安装情况调整路径。
暴露的工具
- 存储 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 界面。
(以上功能为规划中,暂未提供。)