内容
# AnB-MCP
AnB 的 MCP 服务器前端,允许 AI 代理**使用**秘密而无需**看到**它们。

> **标题保证:** 即使是完全注入提示的代理,调用所有工具,以所有方式调用,也无法提取原始密钥。没有工具返回纯文本秘密;显示路径需要 TTY,而此服务器没有,因此 `alice` 拒绝它们。
与一个天真的“秘密 MCP”不同,后者将密钥交给模型,这里代理获取占位符和结果——纯文本保留在 `anb-mcp → alice → Bob` 边界后面。
## 工作原理
```
代理(不受信任) ──MCP/stdio──► anb-mcp ──exec──► alice ──mTLS──► Bob ──► 主密钥
(此仓库) (AnB 客户端) (AnB KMS 守护进程)
```
`anb-mcp` 作为一个**专用、狭义的 AnB 身份**(不是您的操作员 CLI 身份)运行,因此受损代理的爆炸半径仅限于 Bob 为该身份授权的内容。
## 工具
| 工具 | 功能 | 返回 |
|------|------|---------|
| `anb_list` | 列出此身份可能引用的秘密密钥 | 名称 + 元数据,**无值** |
| `anb_exec` | 运行操作员允许的命令,并将秘密注入子环境的变量中 | 退出代码 + **编辑后的** 标准输出/标准错误 |
| `anb_status` | 健康状况/授权自检 | Bob 可达性、身份、授权前缀、规则计数 |
| `anb_redact` | 清除文本 - 秘密值 + 高熵令牌 → `<agent-vault:key>` | 编辑后的文本 |
| `anb_render_to_file` | 渲染占位符模板,在渲染目录下写入 0600 文件 | 路径,**绝不包含内容** |
永远不会暴露:任何显示/获取纯文本/ shell 工具。
## 先决条件
这是一个薄前端;它依赖于 AnB。对于 v0.1,您需要:
1. **一个工作的 `alice` + `bob`** (AnB)在主机上。
2. **一个专用的 MCP 身份**,已向 Bob 注册,仅限于代理应使用的密钥前缀。 通过 `ANB_MCP_ALICE_DIR` (默认为 `~/.anb/alice-mcp`)指向它。 **不要**重用您的操作员身份。
3. **具有作用域标签的执行允许列表** - `alice` 的执行规则带有第 4 个 `scope` 列;仅标记为 `mcp` 的规则适用于此界面(默认拒绝)。通过追加 `mcp` 来为代理标记规则(例如 `^/opt/.../curl ...$\tOPENAI_KEY\t# call\tmcp`)。 *(需要具有 `alice exec --surface`、`alice redact` 和 `alice status --json` 的 AnB - 均已附带。)*
## 构建
```bash
go mod tidy
go build -o anb-mcp .
```
## 在 Claude Code 中注册
```bash
claude mcp add -s user -e ANB_MCP_ALICE_DIR=$HOME/.anb/alice-mcp \
anb -- /path/to/anb-mcp
```
或在 `~/.claude.json` 下的 `mcpServers` 中:
```json
{
"mcpServers": {
"anb": {
"command": "/path/to/anb-mcp",
"env": { "ANB_MCP_ALICE_DIR": "/Users/you/.anb/alice-mcp" }
}
}
}
```
工具表现为 `mcp__anb__anb_list`、`mcp__anb__anb_exec`、`mcp__anb__anb_status`。
## 状态
**v0.1 — 已完成,端到端验证(并由真实代理验证)。** 所有三个工具都可以在实时 Bob 上运行:`anb_status` 返回真实的 KMS 状态;`anb_exec` 运行允许的命令并拒绝其余命令;通过 `--env <agent-vault:key>` 注入的秘密由子进程使用,而调用者仅接收编辑后的占位符 - 纯文本永远不会到达代理。通过 go-sdk-client 不变性测试(`test/`)和独立的 Claude Code 会话通过 MCP 调用工具确认。参见 [CHANGELOG.md](./CHANGELOG.md)。
路线图:参见 [PLAN.md](./PLAN.md)。(v0.2 添加 `anb_render_to_file` 和专用 `anb_redact` 工具;v0.3 降低每次调用的延迟并添加每个代理的临时、短 TTL 范围凭证 - **同时保持 `alice` 作为单独的进程**,因此不显示保证保持*结构*,而不是代码纪律承诺。)
## 许可证
MIT