使用说明
惠子
AI代理的安全秘密管理器。Keiko让Claude Code等人工智能工具使用API令牌、密码和凭据 从未见过实际值.
问题
人工智能代理需要API令牌来完成有用的工作——调用API、部署代码、管理基础设施。但是,通过AI的上下文窗口传递秘密值是一种安全风险:它们出现在对话日志、工具响应中,并可能出现在训练数据中。
惠子是如何解决的
惠子使用 代理模式人工智能特工告诉Keiko 运行什么命令 和 它需要什么秘密,但从未见过秘密值本身:
AI Agent ──► Keiko MCP Server ──► Keiko Backend
│ │
resolves secrets ◄── HTTPS ──┘
│
spawns: bash -c "your command"
with secrets as env vars
│
captures output
sanitizes (redacts leaked values)
│
AI Agent ◄── clean output only
AI表示 “使用我的API令牌运行此curl命令” --Keiko将令牌作为环境变量注入,运行命令,扫描输出中的任何泄漏值,对其进行编辑,并返回干净的输出。
快速开始
1.部署后端
后端存储加密的机密(AES-256-GCM),并通过HTTPS提供服务。使用Docker部署到任何具有持久存储的平台:
# Generate an encryption key
node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"
# Deploy (Railway, Render, Fly, Docker Compose, etc.)
# See docs/setup-guide.md for full instructions
2.设置MCP服务器
MCP服务器在每台需要访问机密的机器上运行。它是一个只有2个依赖项的独立包,不需要本机编译。
cd packages/mcp
npm install
npm run build
node dist/index.js --store-token YOUR_TOKEN
3.连接到克劳德代码
添加 ~/.mcp.json:
{
"mcpServers": {
"keiko": {
"command": "node",
"args": ["/absolute/path/to/keiko/packages/mcp/dist/index.js"],
"env": {
"KEIKO_URL": "https://your-keiko-backend.example.com"
}
}
}
}
重新启动克劳德代码。问 “检查Keiko会话状态” 以验证。
AI如何使用它
一旦连接,人工智能就会发现可用的秘密,并在命令中使用它们——而永远看不到这些值:
AI: list_secrets
→ my_api_token [Bearer token in Authorization header]
AI: run_with_secrets
command: curl -s -H "Authorization: Bearer $API_TOKEN" https://api.example.com/data
secrets: [{env: "API_TOKEN", name: "my_api_token"}]
→ {"data": [...]} (secret values redacted from output)
每个秘密包括 auth_pattern 和 auth_instructions 元数据,因此AI知道如何在没有外部文档的情况下使用它。
MCP工具
| 工具 | 目的 |
|---|---|
run_with_secrets |
运行一个命令,将secrets作为env变量注入 |
list_secrets |
发现可用的秘密(仅限名称和身份验证模式) |
session_status |
检查身份验证状态 |
lock |
终止开关--撤销所有活动会话 |
set_ttl |
配置会话到期时间(0.5-24小时) |
add_secret |
创建新秘密 |
update_secret |
替换现有密钥的值 |
get_guide |
获取使用指南 |
安全
- 静态加密 --AES-256-GCM,每个秘密随机IV,加上版本密钥(
ENCRYPTION_KEY,ENCRYPTION_KEY_V2,…)和就地旋转端点,因此钥匙可以在不停机的情况下旋转 - 哈希认证令牌 --64个字符的十六进制令牌,在数据库中哈希SHA-256,明文显示一次
- 令牌范围 --每个令牌仅限于一组秘密名称glob模式(例如。
railway_*),因此泄露的令牌只会暴露它实际需要的保险库部分 - 输出净化 --扫描原始、base64、base64url、URL编码、十六进制、JSON字符串转义和HTML实体转义形式的命令输出以查找秘密值
- 每个令牌的速率限制 --独立于每个IP,限制通过多个IP路由的单个令牌的滥用
- CSRF保护 —
X-CSRF-Token每个正在发生变化的管理UI端点都需要标头 - 会话管理 --可配置TTL、自动刷新、全局终止开关
- 审计跟踪 --使用令牌ID、会话ID、IP和时间戳记录的每个操作
秘密值 从不 出现在AI工具响应、对话日志或客户端计算机上的磁盘上。看 GET /api/guide 对于完整的威胁模型,代理模式可以防止什么,不能防止什么。
建筑
keiko/
├── packages/mcp/ # MCP server (runs on your machine)
│ ├── src/
│ │ ├── server.ts # 7 tool registrations
│ │ ├── client.ts # HTTPS client to backend
│ │ ├── executor.ts # Shell spawner + env var injection
│ │ ├── sanitizer.ts # Output redaction
│ │ └── keychain.ts # OS keychain (Win/Mac/Linux)
│ └── package.json # 2 deps: @modelcontextprotocol/sdk + zod
│
├── src/ # Backend API (runs on your server)
│ ├── api/ # Express routes, auth, crypto
│ └── ui/ # EJS admin templates
│
└── Dockerfile # Multi-stage production build
MCP服务器和后端是完全独立的软件包。MCP服务器具有 零本地依赖关系 — npm install 无需编译器或 --ignore-scripts.
平台支持
| 环境 | 令牌存储 | 注释 |
|---|---|---|
| Windows | Windows凭据管理器 | 通过Git Bash(而非WSL)运行的命令 |
| macOS | macOS钥匙扣 | 系统bash |
| Linux | libsecret | 需要 secret-tool |
| Docker/CI | KEIKO_TOKEN env var |
不需要密钥链 |
文档
- 安装指南 -所有环境、后端部署、故障排除、API参考和配置选项的完整设置说明
技术栈
后端: Node.js 20、TypeScript、Express、SQLite(better squelite3)、EJS、谷歌OAuth
MCP服务器: Node.js 20、TypeScript、MCP SDK v1.x、Zod
部署: Docker(多阶段构建),任何具有持久卷的平台。经过测试 铁路.
