Agent Mandate Verification について
Agent Mandate Verificationは、署名付きAgent Mandateの認可内容に基づいて操作案を検証するstdio MCPサーバーです。結果を返すだけで、操作の実行やmandate、アカウント、請求状態の変更は行わず、適用は呼び出し元に委ねます。
主な機能
- 01署名付きmandateエンベロープに基づく操作検証
- 02単一操作または最大500件の一括確認
- 03判定と違反内容の返却
- 04不正形式や未署名エンベロープの拒否
- 05プロバイダーエラーをステータスと許可コードに限定
活用シーン
- 01署名付き認可に照らして支払い操作を確認する
- 02エージェントの操作案をまとめて検証する
- 03検証結果の適用をアプリケーション側で行う
MCP 対応
stdio MCPサーバーは`verify_action`ツールを1つ公開し、操作または操作の配列と完全な署名付きエンベロープを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 Mandate の MCP ツールは、POST /v1/mandates が返す完全な { mandate, signature } エンベロープを受け付けます。生のクレームは署名済みエンベロープではありません。
チュートリアルの内容: エンベロープを作成し、MCP を通じてアクションを検証してから、署名済みフィールドを 1 つ変更して再度検証します。拒否されるリクエストを含め、各リクエストの実際の検証結果を確認できます。
要件: Node.js 20 以降、および Agent Mandate API キー。
キーの取得: 無料プランには月あたり 500 件の検証済みアクションが含まれ、カードは不要です。委任の発行は無料で、利用枠も消費しません。1 単位で 1 件のアクションを検証できます。有料プランは月額 299 ドルで、検証済みアクション 10,000 件から利用できます。このチュートリアルで消費する無料枠は、最大でも2 単位です。
本番環境で実行しますか? 公開されている料金とともに、署名済み委任が役立つ場合とそうでない場合をご覧ください。要点は次のとおりです。承認ゲートを自分で管理しているなら、自分のサービス内でポリシーを確認するほうがシンプルで安価です。自分以外の人も判断を検証できる必要がある場合に、署名の価値が生まれます。
まず試してみたいだけですか? 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
2 つの形式と、混乱しやすいポイント
| エンドポイント | キー | 受け付けるもの |
|---|---|---|
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 を実行し、そのレスポンス全体を渡してください。
2 つの呼び出しを手動で行う
ステップ 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
}]
}'
{"mandate": {…}, "signature": "…", "requestId": "…"} を返して 200 になります。
ボディ全体がエンベロープです。
ステップ 2 — その委任に対してアクションを検証します。 エンベロープを mandate として verify_action を呼び出します。
{
"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 リクエストは最大 1 回で、自動的に再試行することはありません。
- npm:
@api-disk-integrations/agent-mandate-mcp - 公式 MCP Registry:
io.github.API-Disk-Integrations/agent-mandate - ソース:
API-Disk-Integrations/agent-mandate-mcp
ツールの仕様
ツールは verify_action の 1 つだけです。action を 1 つ、または actions 配列のいずれかを指定し、両方を指定することはできません。バッチに含められるアクションは 1~500 件です。金額は 0 以上の整数の最小通貨単位で指定し、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"}]
}
]
}
3 つの判定はすべて文字どおりに解釈してください。特に、allow も requires_approval も、提案されたアクションを実行するものではありません。
エラー、制限、安全性
AGENT_MANDATE_API_KEYが設定されていない場合、ツールはリクエストを行う前に MCP エラーを返します。- プロバイダーエラーは、数値の HTTP ステータスと許可リストに含まれるコードに絞り込まれます。プロバイダーが制御するメッセージやリクエスト ID のテキストがモデルに返されることはありません。
- ツール呼び出し 1 回につき、固定された
https://agentmandate-api.com/v1/verifyエンドポイントへの HTTPS リクエストは最大 1 回です。自動再試行はありません。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 の掲載が利用可能であることの証拠にはなりません。これら 2 つのリリースには、それぞれ独自の公開読み戻しが必要です。クローン、インストール、ダウンロード、ツール呼び出し、掲載のいずれも、顧客の利用開始や収益の証拠にはなりません。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。