内容
# 确认MCP
一个 [MCP](https://modelcontextprotocol.io) 服务器,为任何MCP兼容的代理(Claude Desktop,Cursor等)提供人类审批工具。在代理执行不可逆转的操作之前,它会调用 `request_approval`,人类在 [confirm.dev](https://confirm.dev) 上审批或编辑操作,代理会继续执行已审批的结果。每个决定都会被记录。
## 设置
在 [confirm.dev](https://confirm.dev) 上获取API密钥,然后将服务器添加到您的MCP客户端配置中。
**Claude Desktop** (`claude_desktop_config.json`):
```json
{
"mcpServers": {
"confirm": {
"command": "npx",
"args": ["-y", "confirm-mcp"],
"env": { "CONFIRM_API_KEY": "cfm_live_..." }
}
}
}
```
就这样。代理现在拥有两个工具。
## 工具
### `request_approval`
暂停并请求人类审批敏感操作。阻塞直到人类决定或等待超时。
| 输入 | 描述 |
|---|---|
| `summary` | 人类阅读的一行,例如“退款$10,000给客户#4821”。必填。 |
| `notify` | 审批者邮箱,或 `group:<key>` 以升级到审批者组。必填。 |
| `payload` | 作为结构化数据的确切操作。人类可以在审批前编辑它。 |
| `reasoning` | 代理为什么要执行此操作。 |
| `recent_actions` | 代理的最近步骤,用于上下文(最多10个)。 |
| `ttl_minutes` | 请求保持有效的时长(5至10080)。 |
| `wait_minutes` | 阻塞多久后返回“待处理”(默认为15)。 |
在 **APPROVED** 时,工具返回要使用的 `effectivePayload` (人类可能已编辑它)。在 **REJECTED** 或 **EXPIRED** 时,它告诉代理停止。如果在待处理时等待超时,它返回请求ID,以便代理可以稍后轮询。
### `check_approval`
通过 `id` 轮询以前创建的请求,查看人类是否已做出决定。
## 为什么是工具,而不是提示
审批在服务器端强制执行:代理无法伪造判决,并且每个决定都记录在不可篡改的审计日志中。教导代理 **何时** 调用此工具(通过系统提示或 [代理技能](https://confirm.dev/docs))是覆盖层;工具是强制执行层。
对于需要确保特定操作覆盖的生产代理,请使用 [`@confirm/sdk`](https://www.npmjs.com/package/@confirm/sdk) 中的确定性策略引擎(`guard()`),而不是依赖模型记住调用工具。
文档: [confirm.dev/docs](https://confirm.dev/docs)。 Node 18+。
## 开发
该软件包在私有monorepo中与Confirm.dev服务一起开发,并在每个版本发布时镜像到此处,这就是为什么历史从第一个公开版本开始。 问题和PR欢迎;PR会在上游进行挑选。
构建: `npm install && npm run build`。 测试: `node smoke.mjs`(构建后;使用模拟客户端,无网络)。