drift — mandate enforcement for AI agents について
driftは、AIエージェントの操作を実行前に署名済みの委任条件と照合するMCPサーバーです。金額や意図などを6つの固定順ルールで判定しますが、操作の実行や署名検証は行いません。
主な機能
- 01金額と通貨の上限確認
- 02支払先と対象の確認
- 03有効期間の適用
- 04意図に基づく操作制限
- 05操作列の確認とレポート
- 06判定順に沿ったルール説明
活用シーン
- 01エージェントによる送金前の確認
- 02支払先や通貨の差し替え防止
- 03委任条件に照らした一連の操作の確認
MCP 対応
driftは、`drift_check`、`drift_session`、`drift_explain`をMCPクライアントに提供します。各操作または操作列を委任条件と照合し、ルールを説明しますが、操作の実行や委任署名の検証は行いません。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://drift.rta.lat/mcpclaude mcp add --transport http mrpkk-drift https://drift.rta.lat/mcp{"mcpServers":{"mrpkk-drift":{"type":"http","url":"https://drift.rta.lat/mcp"}}}Cursor で開く{"servers":{"mrpkk-drift":{"type":"http","url":"https://drift.rta.lat/mcp"}}}VS Code で開く{"mcpServers":{"mrpkk-drift":{"type":"http","url":"https://drift.rta.lat/mcp"}}}{"mcpServers":{"mrpkk-drift":{"serverUrl":"https://drift.rta.lat/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
3| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| action | object | はい | 提案されている操作。 |
| action.at | integer | はい | 操作の実行予定時刻(Unix 秒)。 |
| action.intent | string | はい | エージェントが実行中だと述べている内容。信頼できません。 |
| action.audience | string | はい | 支払い先となる対象者。 |
| action.currency | string | はい | この支払いの ISO-4217 コード。 |
| action.payee_id | string | はい | エージェントが使用しようとしている受取人。 |
| action.amount_minor | integer | はい | 最小通貨単位での金額。max_amount_minor と同じ桁単位です。 |
| mandate | object | はい | 適用される署名済みの権限。読み取り専用の入力として扱ってください。 |
| mandate.audience | string | はい | 権限に結び付けられた加盟店の対象 URI。 |
| mandate.currency | string | はい | ISO-4217 コード(例:USD)。 |
| mandate.payee_id | string | はい | 権限で指定された正確な受取人。 |
| mandate.valid_from | integer | はい | 開始時刻を含みます。Unix 秒。 |
| mandate.valid_until | integer | はい | 終了時刻を含みます。Unix 秒。 |
| mandate.allowed_intents | array | はい | 許可された意図。空の場合は、すべての意図が許可されます。 |
| mandate.max_amount_minor | integer | はい | 最小通貨単位での支出上限。例:10000 = 100.00 USD。整数のみ。 |
詳細
drift
AI エージェントの権限を継続的に適用します。 すべてのアクションを、署名時に一度だけではなく、実行前に署名済みの権限に照らして確認します。
pip install drift # or: pip install -e .
python3 -m drift.http_server --http 8080
ギャップ
エージェントには、誰に、いくら、どの通貨で、いつまで支払うかという権限が付与されます。 AP2 はその権限を署名時に一度だけ検証します。その後、エージェントは単独で動作し、権限の範囲内にとどめるものはありません。
これが重要であることを示す実測結果は、AP2 Python SDK 自体から得られています。
verify_chain documents:
"enforcing expected_aud / expected_nonce on the terminal hop when provided"
but kb_sd_jwt.verify calls verify_expected_claims only when typ in TYP_TERMINAL,
and a kb+sd-jwt+kb token — which the SDK itself produces whenever the payload
carries a cnf — falls into TYP_INTERMEDIATE:
hop type : kb+sd-jwt+kb
aud in token : https://attacker.example/ap2
expected_aud : https://honest-merchant.example/ap2
ACCEPTED a token with the wrong audience.
エージェントが支出権限を委ねるプロトコルは、その権限がすり替えられていないかを確認しません。drift はそれを確認します。
確認する項目
| # | ルール | 検出する内容 |
|---|---|---|
| 1 | amount | 上限超過 — 最もよくある権限逸脱の形態 |
| 2 | payee | 受取人の誤り |
| 3 | audience | 支払いが別の相手に転送されている |
| 4 | currency | 通貨のすり替え |
| 5 | window | 有効期間外 |
| 6 | intent | 許可リストにない意図 |
デフォルトでは DENY です。ルールは固定順で実行されるため、拒否理由として付随的なものではなく、最も重要な理由が示されます。
MCP ツール
| ツール | 目的 |
|---|---|
drift_check | 1 つのアクションを権限に照らして確認します |
drift_session | 一連のアクションを確認し、チェーンフィンガープリント付きのレポートを取得します |
drift_explain | 適用される順にルールを表示します |
SSE も、ステートフルなセッションも、HTTP フレームワークもありません。標準ライブラリのみを使用します。
例
from drift import Mandate, Drift, Action
m = Mandate(
payee_id="shop", audience="https://merchant.example/ap2",
max_amount_minor=10_000, currency="USD",
valid_from=1_700_000_000, valid_until=1_700_086_400,
allowed_intents=("buy",),
)
d = Drift(m)
verdict, rule = d.submit(Action(
intent="buy", payee_id="shop", audience="https://merchant.example/ap2",
amount_minor=99_999, currency="USD", at=1_700_000_060,
))
print(verdict, rule) # DENY amount
制限事項を明確に説明します
- 権限の署名は検証しません。 それは AP2 の役割です。drift は署名検証の後に、意思決定の段階で動作します。
- 実行はしません。 drift が判断し、呼び出し元が実行します。
- 状態を保持しません。 セッションは引数です。状態がないため、攻撃対象領域がなく、レプリケーション時の不整合もありません。
- 真実と意図を区別しません。
intentはエージェントから渡される信頼できない入力です。drift は被害を抑えますが、意図を認証するものではありません。
エージェントが intent と amount の両方を制御する場合、両方で嘘をつけます。このギャップを埋めるのは attest の役割です。attest は事後に証明し、drift は事前に範囲を制限します。両者は互いを補完します。
エージェントから利用する
{
"mcpServers": {
"drift": { "url": "https://drift.rta.lat/mcp" }
}
}
このブロックは、私たち自身のエージェントがこのサーバーを呼び出す方法です。ツールは drift_check(1 つのアクション)、drift_session(一連のアクション)、drift_explain(6 つのルールとそれぞれの存在理由)です。1 日あたり 100 回まで無料で、その後は x402 経由で 1 回あたり $0.005 です。
ライセンス
Apache-2.0。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。