关于 mcp-approval-queue
mcp-approval-queue 是面向 AI Agent 的 MCP 人工审批服务,按操作风险评分,并由人工决定未被规则覆盖的请求。审批只能由人执行,Agent 无法调用批准或拒绝工具。
主要功能
- 01按操作和成本评估风险
- 02人工批准或拒绝高风险请求
- 03为低中风险设置自动审批规则
- 04通过客户端表单或命令行决策
- 05查询请求状态、规则与历史
适用场景
- 01执行删除前要求人工确认
- 02发送邮件前检查并审批操作
- 03部署或消费资金前设置审批关卡
MCP 相关
作为 MCP 服务,它向客户端提供请求审批、查询状态和待处理请求等工具,并公开统计、规则与历史资源。支持的客户端可通过 elicitation 显示审批表单。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
npx -y @opafex/mcp-approval-queueAPPROVAL_QUEUE_STATE_DIRDirectory holding state.json; the server and the CLI must share it (default ~/.opafex/approval-queue)APPROVAL_QUEUE_TTL_HOURSHours before an undecided request expires (default 24)本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
5收录的工具列表 · 更新于 4 天前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| wait | boolean | 否 | 如果客户端支持,立即询问人类并等待答复(默认值为 true)。设为 False 时会立即返回待处理请求。 |
| action | string | 是 | 要执行的操作,使用简短的 verb_noun 名称(例如 "delete_user"、"send_email"、"deploy_production") |
| params | object | 否 | 要执行操作时使用的参数,显示给人类查看(例如 { "userId": "123", "estimatedCost": 50 })。estimatedCost 会提高风险评分。 |
| context | string | 否 | 说明执行该操作的原因,供人类决策,使用一到两句话 |
| category | enum | 否 | 可选类别。只能提高根据操作名称推断出的风险,不能降低风险。read | compute | file_write | file_system | data_mutation | external_api | payment | delete |
详细介绍
@opafex/mcp-approval-queue
用于 AI Agent 的人工介入审批门,作为 MCP 服务运行。
Agent 在执行有风险的操作前调用 request_approval。系统会评估操作的风险;除非操作符合你设置的规则,否则由你决定是否批准——通过 MCP 客户端显示的表单(MCP elicitation)或终端进行。Agent 会收到可据此采取行动的 proceed: true|false。
Agent 可以请求;只有人类才能批准。 模型没有可调用的批准、拒绝或添加规则工具。由受限 Agent 自己打开的审批门,就不是真正的审批门。
需要 Node.js 20+。
快速开始
将其添加到客户端的 MCP 配置中(对于 Claude Code,添加到项目根目录下的 .mcp.json):
{
"mcpServers": {
"approval-queue": {
"command": "npx",
"args": ["-y", "@opafex/mcp-approval-queue"]
}
}
}
然后在项目说明等位置告诉 Agent 何时使用,例如:
删除数据、发送电子邮件、花费资金或部署之前,调用
request_approval,并且仅在proceed为 true 时继续。
如何决定是否批准请求
-
根据操作名称评估风险——无论
bulk_delete_users中的 delete 出现在哪里,它都会被视为删除操作——并结合params.estimatedCost评估。Agent 可以传入category,但它只能提高风险评分,不能降低。 -
规则可能会自动批准请求——仅限低或中风险,且只能使用人类创建的规则。高风险和严重风险始终需要由人审批。
-
否则由人决定:
-
在客户端中——如果客户端支持 elicitation,服务会直接向你询问操作、风险、参数和 Agent 给出的理由,并等待你的答复。答复会发送给服务,而不是模型。你可以批准、拒绝,或勾选 始终批准(仅限低/中风险)以创建规则。关闭表单会使请求保持待处理状态。
-
在终端中——否则,请求会保持等待状态,并提示 Agent 轮询
check_status:npx @opafex/mcp-approval-queue pending npx @opafex/mcp-approval-queue approve appr_3f9c1a2b4d5e --reason "checked the recipient list" npx @opafex/mcp-approval-queue reject appr_3f9c1a2b4d5e
-
-
未答复的请求将在 24 小时后过期(
APPROVAL_QUEUE_TTL_HOURS),过期后无法再批准。
同一操作获得人类批准五次且没有遭到拒绝后,下一个表单会提示你选择 始终批准。自动批准不会计入次数——系统自我认同并不能作为依据。
工具(Agent 可见)
| 工具 | 描述 |
|---|---|
request_approval | 提交操作(action、可选的 params、context、category、wait)。返回 status、proceed、风险等级及后续操作说明。 |
check_status | 根据 id 重新读取请求。 |
list_pending | 按时间从新到旧列出仍在等待人类处理的请求。 |
list_rules | 查看人类设置的自动批准规则(只读)。 |
status 的取值为 pending、approved、rejected、auto_approved、expired。只有当 proceed 为 true 时才继续。
资源
| URI | 内容 |
|---|---|
approval://stats | 按状态统计的数量,以及人类作出决定所用的平均时间 |
approval://rules | 当前的自动批准规则 |
approval://history | 最近 50 条决定记录 |
CLI
mcp-approval-queue start the MCP server (stdio)
mcp-approval-queue pending list requests waiting for a decision
mcp-approval-queue show <id> one request in full
mcp-approval-queue approve <id> [--always] [--reason <text>]
mcp-approval-queue reject <id> [--reason <text>]
mcp-approval-queue rules list rules
mcp-approval-queue rules add <pattern> --max-risk <low|medium> [--description <text>]
mcp-approval-queue rules remove <id>
mcp-approval-queue history [limit]
模式使用 glob:* 匹配任意内容,? 匹配一个字符,且不区分大小写。规则绝不能涵盖高风险或严重风险。
配置
| 变量 | 默认值 | 描述 |
|---|---|---|
APPROVAL_QUEUE_STATE_DIR | ~/.opafex/approval-queue | state.json(请求、规则、历史记录)的存放位置。服务和 CLI 必须指向同一目录。 |
APPROVAL_QUEUE_TTL_HOURS | 24 | 未决定的请求过期前的小时数 |
状态保存在单个 JSON 文件中,并通过锁文件以原子方式写入,因此服务和 CLI 可以同时运行。
它无法防护的情况
在依赖它之前,请务必了解以下几点:
- 拥有 shell 或文件访问权限的 Agent 可以访问终端通道。 只有当 Agent 无法运行命令或写入文件时,CLI 和
state.json才是仅供人工使用的通道。Claude Code 等编码 Agent 通常具备这些权限。在这种情况下,请依赖 elicitation 通道,并在客户端的权限设置中禁止 Agent 使用 CLI 和访问状态目录——对于 Claude Code,禁止Bash(npx @opafex/mcp-approval-queue approve:*)、Bash(npx @opafex/mcp-approval-queue rules:*),并禁止编辑~/.opafex/下的文件。 - 它只会限制 Agent 询问的内容。 Agent 必须调用
request_approval,并遵守proceed: false。这是面向配合型 Agent 的协议,也是对获准事项的记录,而不是沙箱。对于任何必须强制执行的事项,请配合使用客户端自身的工具权限。 - Elicitation 由客户端显示。 答案确实来自人工的保证,取决于客户端对表单的呈现方式。
在库中使用
import { ApprovalQueueService, StateStore, assessRisk } from '@opafex/mcp-approval-queue';
const queue = new ApprovalQueueService(new StateStore('/var/lib/my-app/approvals'));
const { request } = await queue.requestApproval({ action: 'refund_order', params: { estimatedCost: 40 } });
开发
npm install
npm run build
npm test
许可证
MIT — 请参阅 LICENSE。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。