Sanction について
Sanctionは、AIエージェントの支出、ツール呼び出し、認証情報、リソース調達を統制する認可サービスです。操作の承認・拒否や人間への確認依頼を行い、監査可能な決定記録とポリシーの再検証を提供します。
主な機能
- 01支出と予算の認可
- 02ツール呼び出しの許可・拒否・エスカレーション
- 03期限付き一回限りの人間承認
- 04スコープ付き認証情報の保管庫
- 05不変のポリシー改訂と再現可能な証跡
- 06決定履歴に基づくポリシーシミュレーション
活用シーン
- 01エージェントの購入前に承認を求める
- 02エージェントが呼び出せるMCPツールを制御する
- 03チームやエージェントのウォレットに予算を適用する
- 04過去の決定を使ってポリシー変更を検討する
MCP 対応
Sanctionは、エージェントが認可を求めるMCPウォレットサーバーと、ツール呼び出しを仲介してツール一覧を絞り込むMCPブローカーを提供します。ホスト側が決定を要求し遵守する必要があり、接続だけでは他のツールを制御しません。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://getsanction.com/mcpclaude mcp add --transport http ericlovold-sanction https://getsanction.com/mcp{"mcpServers":{"ericlovold-sanction":{"type":"http","url":"https://getsanction.com/mcp"}}}Cursor で開く{"servers":{"ericlovold-sanction":{"type":"http","url":"https://getsanction.com/mcp"}}}VS Code で開く{"mcpServers":{"ericlovold-sanction":{"type":"http","url":"https://getsanction.com/mcp"}}}{"mcpServers":{"ericlovold-sanction":{"serverUrl":"https://getsanction.com/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
https://getsanction.com/mcp認証が必要ツール
詳細
Sanction
AI エージェントのための独立した認可プレーンです。
エージェントがお金を使う、ツールを呼び出す、認証情報にアクセスする、またはリソースをプロビジョニングする前に、Sanction に問い合わせます。Sanction は承認する、人間にエスカレーションする、または拒否します。すべての判断は記録され、監査可能です。Sanction は特定のプラットフォームに属しません。1 つのポリシーエンジンが、モデルプロバイダー、決済手段、ID、エージェントのエコシステムを横断して応答します。
人間による承認が 1 回必要ですか?
Sanction をエージェントに接続し、require_approval: true と実行予定の正確なアクションを指定して sanction_authorize_tool を呼び出すよう指示します。既存の承認リンクまたは設定済みの Slack チャネルから承認または拒否します。承認されると、そのリクエストに有効期限付きの 1 回限りの許可が付与されます。エージェントは実行前にこれを使用する必要があります。ポリシーの編集は不要で、ブロックされたアクションは引き続きブロックされます。
個人はカード不要で Sanction を無料で利用できます。ホスト側が判断を問い合わせ、それに従う必要があります。接続しただけでは、ホストのほかのツールは制御されません。 ホストを選んで、承認を試す。
Sanction を利用するのは誰か
- 自組織の AI を統制する組織 — 主な利用ケースです。チームや部門はツリー構造のウォレットとなり、予算、ツールのルール、承認基準がダッシュボードに表示されるだけでなく適用され、その下ではチャージバックに対応したレポートが作成されます。アラートは何が起きたかを知らせます。判断はその前に行われます。
- ガバナンスを組み込むプラットフォームやエージェンシー — 提供するエージェントやクライアントのために運用するエージェントは、MCP ホスト、Bedrock、SDK または REST を介した独自スタックなど、どこで実行してもウォレットを持ちます。
- 個人 — 無料、カード不要。個人利用にも本番利用にも対応します。
機能
1 つのポリシー判断エンジンが、あらゆる種類のエージェントアクションを統制します。
| 統制対象のアクション | Sanction が適用する内容 |
|---|---|
支出(/authorize) | 自動承認の上限、人間へのエスカレーション範囲、取引ごとのハード上限、日次および月次予算を確認し、原子的に差し引きます。 |
ツール(/authorize/tool) | あらゆる MCP ツールまたは外部アクションに対するブロック/許可/エスカレーションのリスト。エスカレーションは支出と同様に承認受信箱に届きます。 |
認証情報(/exec + /mandate/verify + /credentials/inject) | AES-256-GCM で暗号化されたエンベロープ方式のボールト(KMS でラップされ、鍵はローテーションされます)。注入には、スコープが限定された 15 分間有効な委任 JWT と、認証情報に設定された基準以上のクリアランスが必要です。取引相手は API キーなしで委任を検証できます。すべてのアクセスが監査ログに記録されます。 |
プロビジョニング(/authorize/provision) | シート、ライセンス、インフラストラクチャなどのリソース、明細項目、数量、金額を 1 回の呼び出しで承認します。 |
ケイパビリティ(/authorize/capability) | スキル、プラグイン、新しい API など、ケイパビリティの獲得も金銭の支出と同様に統制されます。順序付きの 1 つのルールリスト(ブロック/許可/エスカレーション、プレフィックスグロブパターン)で、新たな権限がエージェントに与えられる前に制御します。 |
実際の判断の流れを見てみましょう。金額を指定した POST /authorize を 1 回呼び出すと、3 つの結果のいずれかが返されます。どの結果も処理が完了するか、再開可能な状態になります。
- 承認 →
{ "status": "approved" }。判断の永続化と同じトランザクション内で予算カウンターが差し引かれます(アドバイザリロックにより、同じ親のエージェントは競合せず、順番に処理されます)。 - エスカレーション →
{ "status": "escalated", "request_id": "…" }。人間が承認受信箱で確認し、承認すると 1 回限りの許可が発行されます。エージェントはgrant_idを指定して再試行し、この許可を使用します。タイムアウト時の扱い(承認または拒否)はポリシーで決まるため、処理がいつまでも保留になることはありません。 - 拒否 →
{ "status": "denied", "decision_code": "PER_TXN_LIMIT", "remediation": "取引ごとの上限を超えています。金額を小分けにして請求するか、所有者に上限の引き上げを依頼してください。" }。コードは安定した機械処理向けの文字列(DAILY_BUDGET_EXCEEDED、CATEGORY_BLOCKED、WALLET_FROZEN、…)なので、エージェントは文章を解析する代わりに、条件分岐して計画を立て直せます。同じリクエストを再送すると、同じコードが返されます。
エンジンの周辺機能:
- 人による承認 → 1 回限りの許可。 エスカレーションは承認受信箱(ダッシュボード PWA、メール、Slack)に届きます。承認すると、エージェントが再試行時に引き換える、期限付きの 1 回限りの許可が発行されます。ポリシーのタイムアウトにより、必ず最終結果が得られます。
- シート。 エージェントは、保有者にそのまま引き渡せるシートです。名前付き保有者、契約業者向けの自動有効期限(期日を過ぎるとキーはフェイルクローズ)、履歴を保持するキーのローテーション、1 つのテンプレートからの一括作成に対応しています。
- 連動する予算。 ウォレットをツリー状にネストできます。サブツリーの上限はアトミックに適用されるため、兄弟エージェントが親の上限を超えて競合することはありません。コンソールの支出ビューには、ウォレットからシートまで、今月の予算残存期間が表示されます。累計消費額と上限、消費ペース、予算の枯渇予測日を確認できます。
- 必要な場所に届く通知。 デフォルトはメール、マシン向けには署名付き JSON Webhook に対応しています。Slack には 2 通りの方法があります。判断画面へのディープリンクを含む受信 Webhook URL を貼り付ける方法と、Add to Slack から OAuth 経由でワークスペースごとにインストールする方法です。後者では、ダッシュボードと同じ
resolveApproval処理を実行し、実行者を記録する、操作可能な Approve / Deny ボタンが投稿されます。各ルートは、それぞれ独自のイベントを購読します。ガイド - 再現可能な証拠。 ポリシーを編集するたびに不変のリビジョンが作成され、すべての判断に、適用されたリビジョンとエンジンが評価した正確なコンテキストが保存されます。
GET /authorize/{id}/evidenceは、保存されたコンテキストに対して純粋なルールを再実行し、同じ結果が再現されることを証明します。 - 実際の履歴に対する仮定の検証。
POST /policy/simulateは、保存された判断を候補ポリシーで再生します。変更を加える前に、どの呼び出しの結果が変わるか、どの支出が承認されなくなるかを確認できます。 - 監査プレーン。
GET /audit-eventsは、すべての判断、トークンログ、シークレットアクセスを 1 つのフィードに統合します(CSV エクスポートにも対応)。GET /reporting/summaryは、任意の期間を日単位の区分とシートごとの集計で表示します。ウォレット統計では消費ペースと枯渇予測を確認でき、毎週月曜日には週次ダイジェストが Slack に届きます。 - 改ざんを検知できるエクスポート。
GET /audit/exportは、ガバナンス対象の判断のスナップショットを署名付きのハッシュチェーン形式で提供します。行の変更、削除、並べ替えを行うとチェーンが破損し、チェーンの先頭には Sanction による HMAC 署名が付与されます。規制当局またはガバナンス対象の顧客は、データベースを必要とせず、単独で実行できるPOST /audit/verifyを使って、署名後に変更がなかったことを、最初に破損したリンクまで検証できます。 - 名簿を最初に表示するコンソール。 ダッシュボードのホームには、エージェントをカードとして配置したウォレットツリーがグループごとに表示され、各カードには権限の状態を示すスタンプ(有効/一時停止/ブロック)が付いています。ウォレットで管理するのはキーだけでなく人です。役割付きのチームメンバーシップ(
owner/admin/viewer)、すべてのメンバーシップを切り替えるスイッチャー、すべてを閲覧できても何も変更できない閲覧者に対応しています。 - ウォレットのポリシーを適用する前に観察。 観察モードでは、そのウォレット独自のポリシーと上限を緩和しながら、エンジンが実際に行っていたはずの判断を記録します。祖先のサブツリー上限は引き続き適用され、観察対象の支出も計上されます。凍結と認証のチェックも引き続き適用されます。実行された場合に拒否される要求とそのコストを確認してから、確認を経た 1 回のクリックで各プールを強制モードに切り替えられます。
- 結果に照らして評価できる支出。 結果を報告(
POST /outcomes)すると、コストパーアウトカムの上限を超えたウォレットは、人の承認が必要な支出へと制限されます。ウォレットを即時に凍結し、ツリー全体で予算を再配分することもできます。 - LLM ゲートウェイ。
x-sanction-keyを指定し、モデル SDK のベース URL をhttps://getsanction.com/api/gateway/<provider>に設定するだけで利用できます。呼び出しごとの計測設定は一切不要で、使用量の計測と予算上限の適用が行われます。
上記のセキュリティに関するすべての主張は、適用するコードと回帰テストに対応しています。docs/TRACEABILITY.md をご覧ください。テスト数は 1,100 件以上で、カバレッジゲートはステートメント/行が 90%、関数が 94%、分岐が 83% です。並行処理と Postgres の行レベルセキュリティに関するテストスイートも含まれています。
空白のポリシーではなく、パックから始める
一般的な用途をカバーする、インストール可能な11種類のポリシーパックを用意しています。Startup defaults、
Coding agent seat、MCP tool governance、Compliance baseline、
Client-safe launch、No-egress(Sanction Local)などがあります。GET /policy/packs で一覧を取得できます。
POST /policy/packs/{id}/preview は、変更を適用する前に、過去30日間の実際の判定に対してパックをシミュレーションします。apply を実行すると、ポリシーリビジョンとして書き込みます。
本番環境でのポリシー変更
ポリシーの編集は、決して賭けではありません。
- 変更案を作成する(またはパックを選択する)。
POST /policy/simulateは、候補ポリシーを適用して保存済みの判定履歴を再生します。どの呼び出しの結果が変わるか、どの支出が承認されないかを正確に確認できます。- 適用します。編集内容は不変のリビジョンとなり、その後のすべての判定に適用中のリビジョンが記録されます。
- 判定に疑義が生じた場合は、
GET /authorize/{id}/evidenceが保存済みのコンテキストでルールを再実行し、同じ結果が再現されることを証明します。
クレデンシャルボールトを使う場合
クレデンシャルを、支出やツールと同じポリシー、承認、監査証跡に沿って扱いたい場合は、Sanction のボールトを使用します。クリアランスモデルを一本化でき、別のシークレットクラスターは不要です。エージェントのガバナンスとは独立して、フリート規模のシークレットライフサイクル管理が必要な場合は、既存の Vault または Secrets Manager を引き続き使用してください。Sanction はそれらを置き換えるのではなく、上流の ID とシークレットを利用します。脅威モデル:docs/SECURITY.md。
配布方法
プラットフォームベンダーは、自社の管理領域内にあるエージェントを統制します。Sanction は、エージェントがどこで実行されていても認可します。お使いのスタックに最適な方法を選んでください。
| 実現したいこと | 使用するもの | 最初の手順 |
|---|---|---|
| 任意の MCP ホスト(Claude Desktop、Cursor、…)を統制する | MCP ウォレット | https://getsanction.com/mcp を貼り付けるか、npx sanction-mcp を実行する |
| MCP サーバー上の tools/call をインターセプトし、tools/list をフィルタリングする | MCP ブローカー | アップストリームを登録し、ホストの接続先を /mcp/broker/<name> に設定する |
| コードを変更せずにモデルの支出を計測する | LLM ゲートウェイ | SDK のベース URL を /api/gateway/<provider> に設定する |
| TypeScript アプリ内のエージェントを統制する | SDK | npm install sanction-sdk |
| その他の任意の環境からエンジンを呼び出す | REST API | x-api-key を指定して POST /v1/authorize を実行する |
| AuthZEN の実行ポイントに接続する | PDP | 接続先を /api/access/v1/evaluation に設定する |
| AWS Bedrock でオーケストレーションする | Action Group | docs/BEDROCK.md |
機能の一覧:
- MCP(エージェントウォレット) — 任意の MCP ホストで
https://getsanction.com/mcp(Streamable HTTP、x-api-key)を貼り付けるか、npx sanction-mcpを実行します。エージェントがウォレットを携帯します。ウォレットカード · ガイド - AuthZEN PDP — 任意の OpenID AuthZEN 1.0 実行ポイントで、カスタムコードなしに Sanction を判定ポイントとして利用できます(ガイド)
- TypeScript SDK —
npm install sanction-sdk(ソース):SanctionClient(エージェントプレーン)とSanctionAdminClient(管理プレーン)、およびフレームワークアダプター(SanctionMiddleware、sanctionTool) - REST API — 直接統合できます。OpenAPI 3.0 の仕様は
/api/openapi.jsonにあります(Bedrock 互換) - AWS Bedrock Action Group — エンタープライズ向けエージェントオーケストレーション(セットアップガイド)
- LLM ゲートウェイ — コード変更なしで、プロバイダーをまたいで使用量を計測できます
最速で最初の判定を実行するには、bash examples/setup.sh を実行します。1つのコマンドでウォレット、エージェント、デモポリシーを用意し、エージェントに必要な環境変数の設定を出力します(実行可能なクライアントから接続するには、examples/ を参照してください)。
エージェントウォレット · クイックスタート · スターターキット · LangChain · CrewAI · Vercel AI SDK · Bedrock Agents · エージェントフリート · AuthZEN PDP · マルチテナント運用ガイド · 通知
API
ベース URL:https://getsanction.com/api/v1 — ワークフローごとに分類されています。エージェント用のエンドポイントでは x-api-key pxy_… を、管理用のエンドポイントでは所有者の x-mgmt-key sk_… を使用します。
許可を求める — エージェントが呼び出すデータプレーン:
POST /authorize — Authorize a spend action (grant_id redeems an approval)
POST /authorize/quote — Authorize an x402 payment challenge before the wallet signs
POST /authorize/tool — Authorize a tool invocation
POST /authorize/provision — Authorize provisioning (resource + line item + $)
POST /authorize/capability — Authorize acquiring capability (skill/plugin/API)
GET /authorize/{id} — Poll an escalated decision (grant receipt included)
POST /tokens — Log LLM token consumption against the daily budget
POST /outcomes — Report an outcome; spend becomes answerable to results
人間にエスカレーションする — 人間に引き継ぎ、誰かが判断します:
GET/POST /approvals — The approval inbox; approving mints a one-use grant
認証情報を持ち運ぶ — 生のシークレットではなく、スコープ付きの権限を使用します:
POST /exec — Mint a scoped mandate JWT (15-min TTL)
POST /mandate/verify — Counterparty checks a presented mandate (no API key)
POST /credentials/inject — Inject a decrypted credential (Bearer JWT)
POST /credentials/vault — Store an encrypted credential (owner)
POST /exec/revoke — Kill a live execution token (owner)
何が起きたかを証明する — 監査、証拠、レポート:
GET /authorize/{id}/evidence — Audit proof: re-run the pure rules over the stored
context and confirm the recorded outcome reproduces
GET /audit-events — Unified audit feed (decisions, tokens, secret access; ?format=csv)
GET /reporting/summary — Any range ≤92 days: totals, day buckets, per-agent
GET /reporting/daily-summary — One-day rollup
GET /audit/export — Signed, hash-chained decision export (owner; ?download=1)
POST /audit/verify — Verify a tamper-evident export (recompute chain + signature)
ポリシーを策定する — 安全に編集し、まず影響を確認します(所有者):
GET/PATCH /wallets/policy — Read / update budgets, thresholds, lists, capability rules
POST /policy/simulate — Replay real history under a candidate policy (what-if)
GET /policy/packs — List installable policy packs (public)
POST /policy/packs/{id}/preview — Simulate a pack against your last 30 days
POST /policy/packs/{id}/apply — Install a pack as the wallet policy (writes a revision)
フリートを運用する — ウォレット、シート、キー(所有者):
POST /wallets — Create a wallet + policy (management key shown once)
GET /wallets/stats — Today + month-to-date stats + burn projections
GET /wallets/tree — Subtree spend rollup
POST /wallets/keys/rotate — Rotate the wallet's data-encryption key
POST /agents — Register a seat (holder, expiry; key shown once)
POST /agents/batch — Stamp one template across up to 50 seats
GET/PATCH /agents — List / per-seat budgets, clearance, holder, expiry
POST /agents/rotate — Rotate a seat's key (optionally pass to a new holder)
POST /webhooks — Register a notification route (per-event subscriptions)
POST/GET/DELETE /broker/upstreams — Register the MCP servers the broker may front (BROKER-1)
POST /wallets/freeze — Pause every agent action in this wallet and its subtree
POST /wallets/unfreeze — Resume exactly where the fleet stopped
POST /wallets/reallocate — Move budget across the wallet tree
POST /wallets/bootstrap-key — Mint a management key for a legacy wallet
GET /outcomes — Reported outcomes + cost-per-outcome state
GET /activity — Recent decision activity for the console
標準に準拠する — AuthZEN PDP + AARP(エージェントキー;ベースは
https://getsanction.com/api — 仕様で定められたパス):
POST /access/v1/evaluation — OpenID AuthZEN 1.0 evaluation (decision-only)
POST /access/v1/evaluations — AuthZEN batch, all three evaluation semantics
POST /access/v1/access-request — AARP: open an escalation from a signed binding token
GET /access/v1/access-request/{id} — AARP task status (maps to the profile's states)
スキーマの全容:/api/openapi.json。
MCP のセットアップ
エージェントは Sanction ウォレットを持ちます。検出:GET /.well-known/wallet-card.json。
stdio MCP は協調型です — ホストは実行前に確認する必要があります。
Cursor プラグイン(MCP + スキル):cursor-plugin/。
{
"mcpServers": {
"sanction": {
"command": "npx",
"args": ["sanction-mcp"],
"env": {
"SANCTION_API_URL": "https://getsanction.com/api/v1",
"SANCTION_API_KEY": "pxy_..."
}
}
}
}
技術スタック
Next.js 16(App Router)+ TypeScript · Neon Postgres 上の Prisma 7(データベースで行レベルセキュリティを適用)· Vercel · jose(HS256、アルゴリズムを固定)· 本番環境では AWS KMS を信頼のルートとする AES-256-GCM エンベロープ暗号化。
貢献とセキュリティ
CONTRIBUTING.md では、クローンからグリーンな PR までの手順を説明しています
(npm install && npm run check — ユニットテストにデータベースは不要です)。
セキュリティモデルと脆弱性の報告については、docs/SECURITY.md をご覧ください。
用語については、docs/DOMAIN.md をご覧ください。
料金
無料、または契約による提供です。個人利用は無料です — カード不要で、個人利用と本番利用のどちらにも使えます。それ以外は、導入環境に合わせたエンタープライズ契約となります:SSO、ポリシー管理、監査エクスポート、SLA。 お問い合わせ。
ライセンス
packages/sanction-mcp(MCP クライアント)— MIT。どこにでも組み込めます。- それ以外のすべて(サーバー、ダッシュボード、API)— Functional Source License 1.1(FSL-1.1-MIT)。ソースコードを利用できます。競合サービスの提供を除き、あらゆる目的で使用およびセルフホストできます。リリースから2年後に MIT ライセンスへ移行します。
- FSL の許諾範囲を超える商用利用 — 商用ライセンスのガイド(ウェブサイト)。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。