关于 Agent Mandate Verification
Agent Mandate Verification 是一个 stdio MCP 服务,用于依据签名的 Agent Mandate 授权检查拟议操作。它只报告判定,不执行操作,也不更改授权、账户或账单状态;结果由调用方负责执行。
主要功能
- 01依据签名授权信封验证操作
- 02检查单项操作或最多 500 项批次
- 03返回判定和违规详情
- 04拒绝格式错误或未签名的信封
- 05将服务商错误限制为状态码和允许代码
适用场景
- 01根据签名授权检查付款操作
- 02批量核验 Agent 拟执行的操作
- 03由应用程序负责落实核验结果
MCP 相关
stdio MCP 服务仅提供 `verify_action` 工具,将单项或批量操作及完整签名信封发送至 Agent Mandate 验证端点。该工具只报告结果,不会执行拟议操作。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
1收录的工具列表 · 更新于 2 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| action | object | 否 | |
| action.at | string | 否 | |
| action.agent | string | 否 | |
| action.action | string | 是 | |
| action.currency | string | 否 | |
| action.resource | string | 否 | |
| action.priorCount | integer | 否 | |
| action.amountMinor | integer | 否 | |
| action.approvalToken | string | 否 | |
| action.priorSpendMinor | integer | 否 | |
| actions | array | 否 | |
| mandate | object | 是 | |
| mandate.mandate | object | 是 | |
| mandate.signature | string | 是 |
详细介绍
通过 MCP 验证已签名的 Agent 授权
在信任 Agent 声称的权限之前,先检查已签名的授权信封。
Agent Mandate 的 MCP 工具接受由 POST /v1/mandates 返回的完整 { mandate, signature } 信封。
原始声明不是已签名的信封。
**本演示流程:**创建信封,通过 MCP 验证一项操作,然后更改一个已签名字段并再次验证。你会看到每个请求的实际验证结果,包括被拒绝的请求。
**要求:**Node.js 20 或更高版本,以及 Agent Mandate API 密钥。
**获取密钥:**免费套餐每月包含 500 次已验证操作,无需绑定银行卡。签发授权免费,且永远不会消耗配额;每次验证一项操作计为一个配额单位。付费套餐起价为每月 $299,包含 10,000 次已验证操作。本演示最多消耗 两个免费配额单位。
**要在生产环境中运行?**查看什么时候值得使用签名授权,什么时候不值得,了解已公布的定价。简而言之:如果审批关卡由你控制,在自己的服务中进行策略检查会更简单、更便宜。当需要由你以外的人验证决策时,签名才物有所值。
只是想探索一下?POST /v1/demo/verify 接受原始声明,无需密钥,且会在最后介绍。它不能替代已签名信封演示流程,因为它不会检查签名。
运行演示流程
git clone https://github.com/API-Disk-Integrations/agent-mandate-mcp.git
cd agent-mandate-mcp
git checkout v0.1.1
npm ci
AGENT_MANDATE_API_KEY=your_key node examples/verify-mandate.mjs
示例运行器来自本仓库,但它会将
@api-disk-integrations/[email protected] 从 npm 安装到一个临时前缀目录中
并运行该版本,因此测试的是已发布的构件,而不是你的工作树。
省略 AGENT_MANDATE_API_KEY 后,程序会提示输入密钥,且不会回显。
输出内容
=== 1. Create a mandate ===
POST /v1/mandates -> 200
envelope keys: mandate, signature, requestId
signature: v1:b63eacaa7… (67 chars)
=== 3. Verify the action against the signed envelope ===
action: payments.transfer 30000 USD, approval required above 25000
decision: requires_approval
violation: Actions above 25000 minor units need a human approval token.
digest: c90fd0bc104dce63…
=== 4. Tamper with one signed field, keep the signature ===
raising approvalRequiredAboveMinor 25000 -> 999999, which would turn this into an allow
rejected: Agent Mandate error 400/invalid_request.
The tampered mandate did not buy an allow. The signature is doing its job.
这是实际对生产环境运行的结果,并非示例输出。授权允许最多 100,000 个最小货币单位,但要求金额超过 25,000 时进行审批;操作请求的金额为 30,000,因此 requires_approval 是正确结果。deny 或 requires_approval 都是正确结果,并不表示失败。
验证会报告结果;你的应用仍需负责执行该结果。
安装服务
npx --yes @api-disk-integrations/[email protected]
通用的 stdio 客户端配置:
{
"mcpServers": {
"agent-mandate": {
"command": "npx",
"args": ["--yes", "@api-disk-integrations/[email protected]"],
"env": {
"AGENT_MANDATE_API_KEY": "${AGENT_MANDATE_API_KEY}"
}
}
}
}
${AGENT_MANDATE_API_KEY} 表示宿主的密钥引用;如果语法不同,请使用客户端文档说明的密钥管理功能。该包使用 stdio,并且只读取这个环境变量。它没有远程 /mcp 端点。
**固定版本。**注册表中仍有 0.1.0,但该版本在首次使用时存在缺陷:其输入架构接受任意对象作为 mandate,因此根据无密钥演示的格式构造的调用会返回 HTTP 400。
如果你更愿意验证带校验和的构件,每个版本也会附带一个 tarball 及其 SHA-256:
curl -fsSLO https://github.com/API-Disk-Integrations/agent-mandate-mcp/releases/download/v0.1.1/api-disk-integrations-agent-mandate-mcp-0.1.1.tgz
shasum -a 256 api-disk-integrations-agent-mandate-mcp-0.1.1.tgz # compare with the release page
npm install -g ./api-disk-integrations-agent-mandate-mcp-0.1.1.tgz
两种格式——这正是容易让人困惑的地方
| 端点 | 密钥 | 接受的内容 |
|---|---|---|
POST /v1/demo/verify | 无 | {mandate: {…claims…}, action: {…}} — 原始声明 |
POST /v1/verify | 有 | {mandate: {mandate: {…claims…}, signature: "…"}, action: {…}} — 信封 |
信封就是 POST /v1/mandates 的完整响应正文:
{mandate, signature, requestId}。请原样传递。
"mandate.mandate" must be the claims object 的意思是,你在需要信封的位置传入了原始声明。请先运行 POST /v1/mandates,再传入其完整响应。
手动执行两次调用
**步骤 1 — 创建授权。**签发授权免费,且不会消耗配额。
curl -X POST https://agentmandate-api.com/v1/mandates \
-H "authorization: Bearer $AGENT_MANDATE_API_KEY" \
-H 'content-type: application/json' \
-d '{
"principal": "user_8814",
"agent": "agent_procurement_v3",
"expiresAt": "2026-12-31T23:59:59Z",
"currency": "USD",
"totalSpendCapMinor": 500000,
"grants": [{
"action": "payments.transfer",
"resources": ["vendor.acme"],
"maxAmountMinor": 100000,
"approvalRequiredAboveMinor": 25000
}]
}'
返回 200,并附带 {"mandate": {…}, "signature": "…", "requestId": "…"}。
整个响应正文就是信封。
**步骤 2 — 根据该授权验证一项操作。**调用 verify_action,并将信封作为 mandate 传入:
{
"mandate": { "mandate": { "…": "…" }, "signature": "…" },
"action": {
"agent": "agent_procurement_v3",
"action": "payments.transfer",
"resource": "vendor.acme",
"amountMinor": 30000,
"currency": "USD"
}
}
完全没有密钥时
curl -X POST https://agentmandate-api.com/v1/demo/verify \
-H 'content-type: application/json' \
-d '{"mandate":{"principal":"user_8814","agent":"a1","expiresAt":"2026-12-31T23:59:59Z","currency":"USD","totalSpendCapMinor":500000,"grants":[{"action":"payments.transfer","resources":["vendor.acme"],"maxAmountMinor":100000,"approvalRequiredAboveMinor":25000}]},"action":{"agent":"a1","action":"payments.transfer","resource":"vendor.acme","amountMinor":30000,"currency":"USD"}}'
此路由接受的是原始声明,而非信封,并且不会检查签名。
此服务不做什么
它不会签发或撤销授权、执行操作、更改账户,也不会调用计费接口。每次工具调用最多发出一个 API 请求,且绝不自动重试。
- npm:
@api-disk-integrations/agent-mandate-mcp - Official MCP Registry:
io.github.API-Disk-Integrations/agent-mandate - 源代码:
API-Disk-Integrations/agent-mandate-mcp
工具约定
此服务恰好提供一个工具:verify_action。请提供一个 action 或一个 actions 数组,不能同时提供两者。批次包含 1–500 个操作。金额必须是非负整数形式的最小货币单位,并且必须指定 currency。
输入示例:
{
"mandate": {
"mandate": {"id": "mnd_example"},
"signature": "caller-supplied-signature"
},
"action": {
"agent": "procurement-agent",
"action": "payments.transfer",
"resource": "vendor.acme",
"amountMinor": 2500,
"currency": "USD",
"at": "2026-09-05T20:00:00Z"
}
}
具有代表性的成功结构化输出:
{
"count": 1,
"receipts": [
{
"decision": "deny",
"mandateId": "mnd_example",
"violations": [{"code": "action_not_granted", "detail": "No matching grant"}]
}
]
}
请按字面理解全部三种决策。特别是,allow 和 requires_approval 都不会执行拟议的操作。
错误、限制与安全
- 如果缺少
AGENT_MANDATE_API_KEY,工具会在发出请求前返回 MCP 错误。 - 提供方错误会被简化为其数字 HTTP 状态码和允许列表中的代码。提供方控制的消息和请求 ID 文本绝不会返回给模型。
- 每次工具调用最多向固定的
https://agentmandate-api.com/v1/verify端点发出一个 HTTPS 请求。不会自动重试;Fetch 使用显式的redirect: error,并会拒绝重定向响应,不再发出后续请求。 - 序列化后的 UTF-8 请求和解码后的响应正文各有 1 MiB(1,048,576 字节)的硬性限制。请求会在 Fetch 之前测量。响应会在流式传输期间计数,然后再进行 JSON 解析,无论
Content-Length缺失、误导性还是采用分块编码。 - 请求超时默认为 30 秒。批次也限制为最多 500 个操作。提供方账户的速率和月度用量限制仍然适用;用于生产环境前,请查阅当前产品定价和文档。
- 此服务不会更改授权、账户和计费状态,但 API 验证会消耗调用方按量计费的额度。
- 需要 Node.js 20 或更高版本。此版本已针对 MCP 协议修订版
2026-07-28进行测试,并保留了 SDK 列出的 2025 兼容修订版。
链接
源代码链接不能证明 npm 包或 Registry 条目已可用。这两个版本都需要各自进行公开验证。克隆、安装、下载、工具调用或条目上线,都不能证明客户已激活或产生了收入。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。