mcpField
A
Agent Mandate Verification

Agent Mandate Verification

本地服务
agentmandate-api.com安全06 周前更新

关于 Agent Mandate Verification

Agent Mandate Verification 是一个 stdio MCP 服务,用于依据签名的 Agent Mandate 授权检查拟议操作。它只报告判定,不执行操作,也不更改授权、账户或账单状态;结果由调用方负责执行。

主要功能

  1. 01依据签名授权信封验证操作
  2. 02检查单项操作或最多 500 项批次
  3. 03返回判定和违规详情
  4. 04拒绝格式错误或未签名的信封
  5. 05将服务商错误限制为状态码和允许代码

适用场景

  1. 01根据签名授权检查付款操作
  2. 02批量核验 Agent 拟执行的操作
  3. 03由应用程序负责落实核验结果

MCP 相关

stdio MCP 服务仅提供 `verify_action` 工具,将单项或批量操作及完整签名信封发送至 Agent Mandate 验证端点。该工具只报告结果,不会执行拟议操作。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"api-disk-integrations-agent-mandate": {
"command": "npx",
"args": [
"-y",
"@api-disk-integrations/agent-mandate-mcp"
],
"env": {
"AGENT_MANDATE_API_KEY": "<AGENT_MANDATE_API_KEY>"
}
}
}
}
启动命令npx -y @api-disk-integrations/agent-mandate-mcp
需要配置的环境变量
AGENT_MANDATE_API_KEY密钥Caller-owned Agent Mandate API key.

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@api-disk-integrations/agent-mandate-mcp0.1.1

工具

1

收录的工具列表 · 更新于 2 周前

参数类型必填说明
actionobject否
action.atstring否
action.agentstring否
action.actionstring是
action.currencystring否
action.resourcestring否
action.priorCountinteger否
action.amountMinorinteger否
action.approvalTokenstring否
action.priorSpendMinorinteger否
actionsarray否
mandateobject是
mandate.mandateobject是
mandate.signaturestring是

详细介绍

通过 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 条目已可用。这两个版本都需要各自进行公开验证。克隆、安装、下载、工具调用或条目上线,都不能证明客户已激活或产生了收入。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。