DebitMyData Agentic Superhighway について
DebitMyData Agent Gateway は開発中で、エージェント、個人、組織向けに DID-LLM の登録、支払い、認証情報発行を提供します。一連の処理は現在テストネットのみで動作し、実際の支払いは受け付けません。
主な機能
- 01サービスを発見し登録見積もりを取得
- 02有効な決済手段で支払い
- 03ウォレットまたは鍵の管理権を証明
- 04DID-LLM と署名付き認証情報を発行
活用シーン
- 01テストネットでエージェントの DID-LLM を登録
- 02MCP 経由で見積もり、支払い、本人性を確認
- 03登録に対する署名付き認証情報と権限を取得
MCP 対応
`/agenticsuperhighway` の Streamable HTTP MCP サーバーから、ゲートウェイの登録フローを利用できます。テストネットでは DMD と Base Sepolia 上の USDC に対応し、現在は実際の支払いを受け付けません。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://api.debitmydata.io/agenticsuperhighwayclaude mcp add --transport http io-debitmydata-agenticsuperhighway https://api.debitmydata.io/agenticsuperhighway{"mcpServers":{"io-debitmydata-agenticsuperhighway":{"type":"http","url":"https://api.debitmydata.io/agenticsuperhighway"}}}Cursor で開く{"servers":{"io-debitmydata-agenticsuperhighway":{"type":"http","url":"https://api.debitmydata.io/agenticsuperhighway"}}}VS Code で開く{"mcpServers":{"io-debitmydata-agenticsuperhighway":{"type":"http","url":"https://api.debitmydata.io/agenticsuperhighway"}}}{"mcpServers":{"io-debitmydata-agenticsuperhighway":{"serverUrl":"https://api.debitmydata.io/agenticsuperhighway"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
詳細
DebitMyData エージェントゲートウェイ
ステータス:開発中です。 現時点では実際の支払いを受け付けるものはなく、すべての決済手段はデフォルトで無効になっています。フロー全体はテストネット(プライベートの DebitMyData regtest チェーン、および x402 経由の USDC 用 Base Sepolia)で実行されます。ステータスをご覧ください。
エージェントゲートウェイは、自律型エージェント、ボット、デジタルツイン、個人、組織が DebitMyData を見つけ、見積もりを取得し、承認済みの決済手段で支払い、ウォレットまたは鍵の制御権を証明し、DebitMyData DID-LLM、署名付きクレデンシャル、利用権限を受け取るための公開統合窓口として開発されています。
ゲートウェイは DebitMyData Proof-of-Work チェーンの周辺に位置します。DebitMyData のコンセンサスは変更せず、呼び出し元にノード RPC、秘密鍵、トレジャリー制御を公開することもありません。
名称について。 DMD は DebitMyData コインのティッカーであり、DebitMyData Proof-of-Work チェーンのネイティブコインです(アドレスは dm1 で始まります)。これはすべての DebitMyData ウォレットに表示される名称です。Ethereum や Base 上のトークンではなく、同じティッカーを使用する他のトークンとは無関係です。そのため、金額と価格の単位は DMD、決済オプションの名称は DebitMyData coin (native PoW chain)、プロジェクト、チェーン、ノード、エクスプローラーの名称は DebitMyData です。
Agent wallet (Coinbase / AWS / DMD / other approved)
│
▼
Discovery: REST / MCP / x402 Bazaar
│
▼
Agent Gateway ── quote + payment intent + policy
│
├── Native DMD adapter ──► private DebitMyData nodes (watch-only)
├── x402 / USDC Base adapter ──► facilitator
├── Card adapter ──► Stripe Checkout (payment page hosted by Stripe)
└── future approved rails (disabled until reviewed)
│
▼
Settlement & finality ──► DID-LLM + receipt + credential + entitlements ──► append-only audit
ステータス
これは初期開発リリース(0.36.3)です。登録フロー全体(見積もり、支払い、コントローラー証明、DID-LLM、署名付きクレデンシャル)は、REST と MCP の両方を通じて、テストネット上でエンドツーエンドに動作します。支払いにはネイティブ DMD(プライベートの regtest チェーン)または x402 経由の USDC(Base Sepolia)を使用できます。現時点では実際の支払いを受け付けるものはありません。
| 領域 | 状態 |
|---|---|
| FastAPI サービス、設定、構造化 JSON ログ、リクエスト相関 ID | 完了 |
/healthz、/readyz、/v1/discovery、/v1/payment-options、/docs/advanced の OpenAPI | 完了 |
個人向けの /get-did にある「Get a DID-LLM」ページ(本番環境の /docs はこのページへ誘導):見積もり、支払い、ウォレットで署名したメッセージ、DID-LLM | 完了(DMD、API 経由の USDC) |
| 個人向けのすべてのページに適用された debitmydata.com の外観(トップバー、フッター、色、フォント):「Get a DID-LLM」、高度な API ドキュメント、ポリシー、ステージングのガイド付きテスト | 完了 |
| ガイド付きページと同じように開く高度な API ドキュメント:回答に応じて進むカード形式の手順、大きなテキストとボタン、その下にすべてのエンドポイント | 完了 |
| 決済手段ごとの有効化フラグと緊急停止スイッチを備えた決済ルートレジストリ | 完了 |
| 正規化された決済ステートマシンと DID 発行ルール | 完了 |
| 正確な小数/基本単位での金額計算 | 完了 |
| PostgreSQL スキーマ+マイグレーション、追記専用の監査ログと決済台帳 | 完了 |
見積もりエンドポイント(POST /v1/dids/registration-quotes)、価格ソースのルール、Idempotency-Key による再試行 | 完了(有効な決済手段への回答のみ) |
| DMD ネイティブ決済アダプター:見積もりごとのアドレス、独立した検証、承認、チェーン再編成と二重支払いへの対応 | 完了(regtest) |
決済ワーカー(dmd-gateway-worker)と決済ステータス(GET /v1/payments/{id}) | 完了 |
| コントローラーの所有証明:エージェントの Ed25519 キー、および/または EVM ウォレット(一般的なウォレットと、ERC-1271 および ERC-6492 によるスマートウォレット)で署名する一回限りのチャレンジ | 完了 |
DID-LLM の発行(did:web)、署名済み登録クレデンシャル(W3C VC 2.0、eddsa-jcs-2022)、dmd_did_holder の権限 | 完了(regtest。本番署名者は未対応) |
/agenticsuperhighway にある Agentic Superhighway の MCP サーバーと、ディレクティブのツール(Streamable HTTP)、支払者のトランザクション参照 | 完了 |
Cloudflare の背後にあるステージングサーバー。ドキュメントページから一連の流れを試せる、ステージング上のガイド付きテストページ(高度なテスト:/docs/advanced の Swagger UI で手順を確認、ステージング専用テストツール) | 完了 |
| x402/Base 上の USDC:登録時の HTTP 402、facilitator による検証/決済、チェーン上での決済確認、Bazaar の説明、MCP 決済 | 完了(Base Sepolia) |
Base メインネット対応:DebitMyData の USDC 受取アドレス(DEC-08)、API キー認証を使う Coinbase の CDP facilitator、見積もりなしでルートを確認する x402 ツール向けの実際の条件を含む 402(Coinbase の Bazaar バリデーター)、scripts/validate_bazaar.py | 完了(DebitMyData の CDP API キーと本番サーバーが必要) |
| リクエストレート制限(ステージングの nginx でアドレスごと、および全体)、コントローラーキーごとの未決済見積もり上限、負荷テストスクリプト | 完了(本番環境の制限はエッジで設定します。docs/staging.md を参照) |
DMD の採掘コスト(ブロックの作業にかかる電力)に基づく DMD/USD 参照価格。5 分ごとに計算し、入力値を保存。GET /v1/prices/dmd-usd | 完了(ステージングでは、公開エクスプローラーから DebitMyData の難易度を取得) |
メールと Discord による監視とアラート(dmd-gateway-monitor、2 分ごと):API、決済ワーカー、各決済手段のノード/RPC/facilitator、DMD 価格、DebitMyData ノードとエクスプローラーの照合、発行後にチェーンから消えた決済、返金の期限、滞留中の決済、受取アドレスの変更。過去 30 日間に決済されたすべての支払いをチェーン上で再確認する日次照合レポート(docs/monitoring.md) | 完了(各サーバーのメールと Discord の設定が必要) |
| DMD に市場価格が付くまでの DMD/USD 最低レート:価格は 1 DMD あたり 0.001 USD と採掘コストのうち高い方(25.00 USD の DID-LLM は 25,000 DMD)。どちらの価格も価格ページに表示 | 完了(2026 年 10 月 27 日に DebitMyData が承認) |
/policies で提供するポリシーページ(利用規約、プライバシー、セキュリティ、決済方法、返金、DID-LLM ポリシー)。すべての見積もりからリンク | 完了(承認済み、2026-11-02 公開) |
エージェント向け推論寄付(POST /v1/donations/inference):エージェントが金額を選び、x402 経由で DebitMyData の推論ウォレットに USDC で支払い、署名済みレシートを受け取る。REST、MCP(dmd_purchase)、Bazaar の説明に対応。個人向けの寄付機能は debitmydata.com で引き続き利用可能(「Inference $」) | 完了(Base Sepolia。本番環境では DMD_USDC_BASE_INFERENCE_ADDRESS と CDP facilitator が必要) |
DID-LLM 向けに購入する製品:3 段階の BottyBotty(Entry 49、Standard 99、Premium 199 USD)。各段階は一度支払えば永続的に利用でき、差額を払って上位段階に変更可能(/v1/products)。DMD で支払い、その後 DebitMyData が署名するレシートと DID-LLM 上の段階別権限を受け取る。REST と MCP(dmd_purchase、dmd_complete_purchase)に対応 | 完了(ステージングで稼働中。BottyBotty 側が接続されるまで本番環境では無効) |
「Get a DID-LLM」:QR コードでの DMD 支払いと、「Open in my DMD wallet」リンク(debitmydata: 決済リンク) | 完了 |
スマートフォン用アプリとしての「Get a DID-LLM」:専用アドレス(DMD_GW_APP_HOST、id.debitmydata.io)で、ルートにウェブアプリマニフェスト、アイコン、サービスワーカーを備えたページを提供し、ホーム画面に追加可能(docs/production.md)。USDC を最初に表示(無効な間はグレー表示で「近日公開」)。DMD とは何か、入手方法を簡潔に案内 | 完了(DNS レコードが必要) |
| ページのトップバーは白色でスクロール中も画面上部に固定され、スマートフォンではメニューボタンに折りたたまれる(スクリプト不要)。DebitMyData の名前からサイトのホームに移動でき、フッターは Agentic Spaces サイトのような列形式。ページをスクロールすると「ページ上部へ」ボタンを表示 | 完了 |
| ページのトップバーとファビコンに DebitMyData 独自のロゴ(debitmydata.com のロゴのコイン側をくっきり描き直したもの)を使用し、黒いバイナリ線を配置。アプリのアイコンは赤い線のロゴを、白い円と金色のリングの中に表示(暗いホーム画面向け) | 完了 |
アプリはスマートフォンとタブレットで画面中央にウィンドウを開いて案内し、アイコンを表示します。アプリ内では表示せず、ブラウザーがインストール済みと判定した場合も表示しません(getInstalledRelatedApps で訪問のたびに確認し、アプリが削除されると再び案内を表示)。ブラウザーに記憶するのは「今はしない」だけで、期間は 30 日です(×ボタンや外側をタップした場合は閉じるだけです)。すべてのページのフッターにある「アプリを入手」ボタンから再び開けるほか、インストール済みであることも案内します | 完了 |
| 「Get a DID-LLM」では、手順の前に Agentic Spaces のスタイルで DID-LLM を説明します。数値、DID-LLM とは何か、AI エージェントに必要な理由、仕組みを、画面に現れると浮き上がり、マウスやタップでさらに持ち上がるカードで紹介します。ホーム画面でのアプリ名は「DID-LLM DebitMyData」です | 完了 |
個人やエージェントが読むすべての場所(ページ、アプリ、ポリシー、API ドキュメント、MCP の説明、エラーメッセージ)で名称を DID-LLM に統一します。識別子(did:web、did、/get-did、dids パス)はそのままです | 完了 |
AI エージェント向けの /llms.txt(このサーバーのアドレスと現在利用可能な決済手段を含む、登録と自動決済の手順)。「Get a DID-LLM」ページの上部、フッター、スクリプト不要の案内からリンクし、ページには MCP サーバーのアドレスも記載 | 完了 |
| ページのフッターには debitmydata.io と同じ 3 つの DMD エクスプローラー(Mempool explorer、Lite explorer、Rich list & API)を掲載。DID-LLM の発行後、ページに「Join the Agentic Hub」を表示 | 完了 |
| 「Get a DID-LLM」では、USDC と DMD の後にデビットカードまたはクレジットカード(Stripe)と PayPal をグレー表示で「近日公開」として表示。ゲートウェイで対応するまで無効 | 完了 |
DID-LLM 向けカード決済(決済手段 card_stripe):各見積もりに専用の Stripe 決済ページ(Stripe Checkout、payment_url)を用意し、31 分間の見積もり有効期間中は利用可能。カード情報は Stripe にのみ送信。ワーカーが各決済を Stripe 自体で確認(制限付きキー:Checkout Sessions の書き込み、PaymentIntents と Charges の読み取り)。返金や異議申し立てに備え、決済済みの記録を 30 日間保持(refunded、disputed。未発行の登録はキャンセルし、発行済み DID-LLM はアラートを発生させる)。ページから Stripe に移動し、戻ると自動的に続行。エージェントには人間向けのリンクを提供(pay_at_payment_url)(docs/card-payments.md) | 完了(ステージングの Stripe テストモードで検証済み。2026-11-11 に DebitMyData が本番利用を承認。本番サーバーに有効なキーが設定されると利用可能) |
| カード決済は常に米ドルです。支払者の自国通貨で Stripe 価格を表示する機能(Adaptive Pricing。支払者に 2~4% の換算手数料が加算されます)は、すべての決済ページで無効。「Get a DID-LLM」には署名形式の説明を 1 回だけ表示 | 完了 |
ウォレットの代わりにキーを使って DID-LLM を所有:scripts/did-owner-key.py が所有者のコンピューター上で Ed25519 所有者キーを作成し、登録メッセージに署名(HTTPS ゲートウェイのみ。他のキーやゲートウェイでは不可)。ガイド付き(docs/owner-key.md)。「Get a DID-LLM」のステップ 3 では、ツールで署名した後の続行方法と、署名の代わりにメッセージを貼り付ける方法を説明 | 完了 |
| 再読み込み後、「Get a DID-LLM」では進行中の登録が画面内に表示されます。該当箇所までスクロールし、「続行」にフォーカスを合わせて一時的に光らせます(動きを減らす設定の場合は光りません) | 完了 |
発行後、「Join the Agentic Hub」はハブの「Create Entity」でエントリーが保存されるまで非表示(get-did.js の SHOW_AGENTIC_HUB) | 完了(ハブの準備完了後に再表示) |
更新中はモニターと日次レポートを一時停止します(deploy/*/update.sh)。これにより、古いコードが新しい設定を読み込むことはありません(「configuration cannot be loaded」という誤ったアラートも発生しません)。更新が失敗した場合も含め、処理の最後に再開します | 完了 |
| PayPal | DebitMyData の PayPal アカウントへのアクセスを待機中 |
日次レポートの集計から会社のテスト用 DID-LLM を除外(DMD_GW_REPORT_EXCLUDED_DIDS)。決済手段のレート制限による拒否は、継続した場合のみ(連続 3 回の確認)アラート | 完了 |
| 命名:決済手段は「DebitMyData coin (native PoW chain)」、そのアセットは DMD。ティッカーは決済方法ページ、価格ページ、MCP の紹介、API ガイドで説明。プロジェクト、チェーン、ノード、エクスプローラー、アラートの件名では DebitMyData を使用 | 完了 |
本番サーバーパッケージ(deploy/production、docs/production.md):メインチェーン上の DebitMyData ノードにはトレジャリーの監視専用キーのみを保持。すべての決済手段は有効化されるまで無効。オフラインキーで暗号化した夜間バックアップをオブジェクトストレージに保存(監視対象)。本番稼働チェックリスト | 完了(本番サーバーが必要) |
クレデンシャル署名者(ID-15):本番環境では発行者キーを dmd-gateway-signer(専用ユーザー、ネットワークアクセスなし)のみが保持し、署名の前にデータベースを確認します。API はすべての署名を検証します | 完了 |
DID-LLM ディレクトリ:所有者は公開プロフィールとともに自分の DID-LLM を掲載できます(Agentic Hub の項目を使用、画像なし:タイプ avatar/robot/sentient、専門分野、説明、任意の所有者名、地域、国、作成日)。管理権限の証明と同じ方法で、DID-LLM 自身のキーまたはウォレットを使って署名し、同じ方法で変更または削除できます。プレーンテキストのみ(リンク、メールアドレス、不可視文字は不可)。DID-LLM が有効な間は表示。CORS 対応のオープン API(GET /v1/directory、検索、タイプ、ページネーション)、ページ /directory、/directory/{id}、/directory/list、MCP(dmd_search_directory、dmd_list_in_directory)、did-owner-key.py directory に対応。運用担当者は掲載を非表示にでき(dmd-gateway-admin directory hide)、モニターは新規掲載と変更された掲載をすべて報告。「Get a DID-LLM」では発行後に案内(docs/directory.md) | 完了 |
| トップバーの幅をページより広い 1180 px とし、「Directory」を含むすべてのリンクを 1 行に表示(ステージングも同様)。画面が狭い場合はリンク間隔を少し狭め、900 px 未満ではメニューボタンに折りたたむ | 完了 |
ステージングでは、ディレクトリページの所有者キーコマンドがステージングゲートウェイを指定(DMD_GATEWAY_API=...)。メッセージが見つからない場合、ツールは照会先のゲートウェイを表示 | 完了 |
ディレクトリページの個人向けアドレスをアプリのアドレス(id.debitmydata.io)に統一。API のアドレスではそこに誘導(308、パスとクエリを維持)し、entry_url とアラートのリンクも同じページを指します。API は api.debitmydata.io にそのまま設置 | 完了 |
「Get a DID-LLM」(ステップ 3)とディレクトリの掲載ページでキーを使って署名:登録 ID またはメッセージ ID と、本番以外では DMD_GATEWAY_API を含む所有者キーのコマンド、および全幅の 続行 を主な方法として表示。別のソフトウェアで作成した署名を貼り付ける方法は下に折りたたむ | 完了 |
所有者キーのツールはキー・ファイルのフォルダー(~/did-keys)を受け取り、DID-LLM を所有するキーで署名します。該当するキーがない場合は、その旨を見つかったキーの一覧とともに表示し、署名はしません。ページ上のコマンドにはフォルダーを指定 | 完了 |
「Get a DID-LLM」のステップ 1「My agent's public key」:所有者キーのツール(new コマンドとガイド)でキーを作成する方法。ステージングでは専用のテストキーとガイドのステージング向け手順を案内 | 完了 |
DebitMyData の計画にある Agentic Superhighway のアドレスを /agenticsuperhighway に変更:ページ、llms.txt、ディスカバリー(mcp_url)、API ドキュメントに新しいアドレスを表示。最初のアドレスである /mcp でも同じレート制限で引き続きサービスを提供するため、既存のアドレスを知っているエージェントや掲載が引き続き動作します。llms.txt では、エージェントにソーシャルページやコミュニティ向けの Agentic Spaces を案内 | 完了 |
ブラウザーで MCP サーバーのアドレス(/agenticsuperhighway または /mcp)を開くと、MCP クライアントに渡すアドレス、llms.txt、REST API、「Get a DID-LLM」を説明する短いページを表示します(以前は空のイベントストリームまたは空白ページでした)。MCP クライアントには従来とまったく同じ応答を返します。このページはキャッシュされません(no-store、Vary: Accept) | 完了 |
各サーバーの update.sh は、何かを変更する前に設定の DMD_GW_ENVIRONMENT を確認し、もう一方のサーバーでは実行を拒否します。ステージングの setup.sh も本番環境の設定を拒否するため、ステージング用テスト設定やテストキーが本番環境に適用されることはありません | 完了 |
個人向けのアドレスとエージェント/開発者向けのアドレスを分離(api/hosts.py):API のアドレス(api.debitmydata.io)では、「Get a DID-LLM」、サイトのルート、ポリシーから、すでにディレクトリが対応しているアプリのアドレス(id.debitmydata.io)に誘導。アプリのアドレスでは、API ドキュメント(/docs/advanced、/redoc)から API のアドレスに誘導します。そのため、メニューのリンクは常に適切なアドレスへ移動し、インストール済みアプリでは個人がアプリ内にとどまります。API(/v1/...)、llms.txt、Markdown 形式のポリシー、MCP サーバーは移動せず、両方のアドレスで応答 | 完了 |
MCP クライアント、クローラー、レジストリがアドレスを知らなくても Agentic Superhighway を見つけられるように対応(api/server_card.py):MCP Server Card(MCP 拡張 SEP-2127)を /agenticsuperhighway/server-card に設置し、名前、バージョン、機能、接続方法を記載(ツールはサーバー自身が一覧表示するため、カードには記載しません)。AI Catalog は /.well-known/ai-catalog.json からカードを参照します。DebitMyData のディスカバリー手順書には、独自形式(application/json)の 2 つのファイルを追加:サーバーが一覧表示するツールを含む /.well-known/mcp/server-card.json と、短いマニフェスト /.well-known/mcp。どちらも標準カードを参照します。server.json で公式 MCP Registry に io.debitmydata/agenticsuperhighway として登録(docs/production.md)。テストでカードとの一致を維持 | 完了(登録には DNS レコードが必要) |
| 個人の選択肢を AI エージェントがすべて一度に把握できるよう、ページ上にドロップダウンリストを設けません。「Get a DID-LLM」の「What is it for?」(3 つのグループを均等なグリッドで表示)と掲載フォームのタイプを選べるボタンを表示。ディレクトリのタイプは検索語を維持するリンクとして表示 | 完了 |
| DMD ネイティブウォレットの所有証明(DEC-07)、コントローラーのローテーションと失効 | 次の対応 |
各決済レールは、デフォルトではすべてオフです。ネイティブの DMD レールは、プライベートな regtest チェーンで有効にできます(docs/regtest-demo.md を参照)。メインネットでは、最低レート(DMD 1 枚あたり 0.001 USD)と DMD のマイニングコストのうち高い方が適用されます。また、ゲートウェイ独自の DebitMyData ノードと、ウォッチ専用の受取ウォレットが引き続き必要です。x402 USDC レールは、ステージング環境では Base Sepolia 上で動作します。Base メインネットでは、DebitMyData の受取アドレスに支払い、Coinbase の CDP ファシリテーターを通じて決済されます。この決済には DebitMyData の CDP API キーが必要です(DEC-08)。ステージング環境では、Stripe の制限付きテストキーを設定すると、カード決済をテストモードで実行できます。本番環境では承認済みですが、本番サーバーに制限付きライブキーが設定されるまでオフのままです(docs/card-payments.md)。プライベートな regtest チェーンで全フローを有効にしたステージングサーバーは https://staging-api.debitmydata.io で稼働しています。誰でもガイド付きテストページから登録を試すか、高度な API ドキュメントに沿って手順を追って試せます(docs/staging.md を参照)。 | |
| タスクリストと決定事項については、docs/roadmap.md を参照してください。 |
クイックスタート
必要条件:Python 3.12 以降、Docker(PostgreSQL 用)またはローカルの PostgreSQL 16。
Windows(PowerShell)
git clone https://github.com/DebitMyData-PoW/agent-gateway.git
cd agent-gateway
py -3.12 -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -e ".[dev]"
Copy-Item .env.example .env
docker compose up -d db
alembic upgrade head
uvicorn --factory dmd_gateway.main:create_app --reload
Linux / macOS
git clone https://github.com/DebitMyData-PoW/agent-gateway.git
cd agent-gateway
python3.12 -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"
cp .env.example .env
docker compose up -d db
alembic upgrade head
uvicorn --factory dmd_gateway.main:create_app --reload
次に http://localhost:8000/docs を開くか、以下を実行します。
curl http://localhost:8000/readyz
curl http://localhost:8000/v1/discovery
curl "http://localhost:8000/v1/payment-options?service=did_registration"
DID-LLM 登録の見積もりをリクエストします(ディレクティブのリクエスト例と、コントローラーキーの例を使用します。python scripts/demo_agent.py new-key agent-key.pem を実行すると実際のキーを作成できます)。
curl -X POST http://localhost:8000/v1/dids/registration-quotes \
-H "Content-Type: application/json" \
-H "Idempotency-Key: 8f14e45f-ceea-467a-9a3b-3c5a1d2e7b90" \
-d '{"display_name": "ResearchClaw-01", "participant_type": "autonomous_agent",
"controller_public_key": "ed25519:z6MktwupdmLXVVqTzCw4i46r4uGyosGXRnR3XjN4Zq7oMMsw",
"preferred_payment_option": "x402_usdc_base"}'
すべての決済レールがオフの間は、"code": "payment_option_unavailable" を含む 409 が返されます。
登録フロー
| 手順 | エンドポイント |
|---|---|
| オファーと有効な決済オプションを確認する | GET /v1/discovery、GET /v1/payment-options |
| 見積もりを取得する(固定で 25.00 USD、選択した資産で正確な金額) | POST /v1/dids/registration-quotes |
| 支払い(DMD)後、支払い状況を確認する | GET /v1/payments/{payment_intent_id} |
| コントローラーキーまたはウォレットで署名するワンタイムメッセージを取得する | POST /v1/dids/registrations/{registration_intent_id}/controller-challenges |
| 署名を送信する | POST /v1/dids/registrations/{registration_intent_id}/controller-proofs |
| 不足している項目を確認する | GET /v1/dids/registrations/{registration_intent_id} |
| DID-LLM、署名済みクレデンシャル、エンタイトルメントを受け取る(x402:ここで支払う方法は以下を参照) | POST /v1/dids/registrations |
| 任意:支払いトランザクションを報告する(参考情報のみ) | POST /v1/payments/{payment_intent_id}/references |
| 詳細を確認する | GET /v1/dids/{identity_id}、GET /v1/credentials/{credential_id}、GET /v1/entitlements/{identity_id}(identity ID または DID-LLM 自体) |
| DID-LLM と発行者キーを解決する | GET /agents/{id}/did.json、GET /.well-known/did.json |
| 利用規約、プライバシー、決済、返金、DID-LLM、セキュリティの各ポリシーを読む | /policies、GET /v1/policies |
| 任意:ディレクトリに DID-LLM を掲載する(所有者の署名が必要)、またはディレクトリを読む | POST /v1/directory/{did}/challenges、POST /v1/directory/{did}/proofs、GET /v1/directory |
同じ手順を /agenticsuperhighway の MCP ツールとして利用できます(Streamable HTTP。最初のアドレスである /mcp も引き続き動作します):dmd_discover、
dmd_get_did_registration_offer、dmd_list_supported_payment_options、
dmd_create_did_payment_quote、dmd_submit_payment_reference、dmd_get_payment_status、
dmd_prove_wallet_control、dmd_register_did、dmd_get_registration_status、dmd_catalog、
dmd_get_purchase_quote、dmd_purchase、dmd_marketplace_provider_requirements、
dmd_search_directory、dmd_list_in_directory。各ツールは上記の REST API をプロセス内で呼び出すため、どちらも同じ結果とエラーコードを返します。Server Card(/agenticsuperhighway/server-card。/.well-known/ai-catalog.json に掲載)は、MCP クライアントやレジストリーに、これが何であるか、接続方法を伝えます。
推論への寄付(エージェント)。 POST /v1/donations/inference に
{"amount_usd": "5.00"}(0.50~1,000.00 USD。任意で donor_name と
donor_did も指定できます)を送信すると、DebitMyData の推論用ウォレット
(DID-LLM の決済アドレスではなく、DMD_USDC_BASE_INFERENCE_ADDRESS)に正確にその金額を支払うための x402 条件とともに
402 が返されます。同じ本文に署名済みの支払いを PAYMENT-SIGNATURE で付けて再送信します。見積もりは不要です。DID-LLM の支払いと同様にオンチェーンで支払いが確認され、DebitMyData が署名した領収書(DebitMyDataDonationReceipt クレデンシャル)を含む応答(201)が返されます。または、確認処理中は status_url(GET /v1/donations/{purchase_id})を含む 202 が返されます。同じ支払いを再送信すると、同じ寄付が返されます。MCP 経由では、dmd_catalog に inference_donation が表示され、dmd_purchase では details に金額を指定し、x402_payment または _meta["x402/payment"] に支払いを指定します。寄付は /v1/discovery の donations に表示されます。
x402(Base 上の USDC)での支払い。 "preferred_payment_option": "x402_usdc_base" を指定して見積もりを取得し、コントローラーキーを証明してから、POST /v1/dids/registrations を呼び出します。PAYMENT-REQUIRED ヘッダー(x402 バージョン 2、スキーム exact:USDC の最小単位での見積もり額、USDC コントラクト、ネットワーク、DebitMyData の受取アドレス、および Bazaar の検出用説明)とともに 402 が返されます。署名済みの支払いを PAYMENT-SIGNATURE ヘッダーに入れてもう一度呼び出すと、ゲートウェイが見積もりと照合し、ファシリテーターが検証して決済し、ゲートウェイ自身がオンチェーンで決済を確認します。DID-LLM は同じ応答で PAYMENT-RESPONSE ヘッダーとともに返されます(確認に時間がかかる場合は 202 が返されます。その場合は支払いをせずに再度呼び出してください)。支払いが要求されるのは、ほかのすべての準備が整ってからです。そのため、発行できない DID-LLM に対してエージェントが請求されることはありません。標準的な x402 クライアントであれば支払い可能です。MCP 経由では、dmd_register_did が支払い要件を返し、x402_payment または _meta["x402/payment"] で支払いを受け取ります。
DID-LLM の発行にはクレデンシャル署名キー(DMD_GW_ISSUER_KEY_PATH。dmd-gateway-issuer-key secrets/issuer-key.pem で作成)が必要です。このキーがなくてもほかの機能は動作しますが、発行エンドポイントは 503 を返します。各手順の背後にあるルールについては、docs/architecture.md を参照してください。
コマンドはリポジトリのルートから実行してください(ルートレジストリのパスはルートからの相対パスです)。
テスト
pytest # unit and API tests
ruff check . && ruff format --check . # lint
データベーステストは、TEST_DATABASE_URL が使い捨てのデータベースを指している場合にのみ実行されます(すべてのテーブルが削除され、再作成されます)。Compose データベースがそのデータベースを作成します。
$env:TEST_DATABASE_URL = "postgresql+psycopg://gateway:gateway-dev-only@localhost:5432/agent_gateway_test"
pytest
CI では、プッシュとプルリクエストのたびに、データベーステストを含む全テストスイートとリンターを実行します。
設定
ゲートウェイの設定には DMD_GW_ プレフィックスが使われ、環境変数または .env から指定できます(.env.example を参照)。development 以外の環境では、ゲートウェイは開発用データベースの認証情報または HTTPS 以外の公開 URL が設定されていると起動を拒否します。
決済レール
config/payment_routes.yaml は、エージェントがどのように決済できるかを定める唯一の信頼できる情報源です。次の条件をすべて満たした場合にのみ、レールが有効になります。
enable_envで指定された有効化フラグ(例:DMD_RAIL_DMD_POW_NATIVE_ENABLED)がtrue(1/true/yes/on)であること。kill_envで指定されたキルスイッチが未設定、または0/false/no/offであること。- レジストリで
approvedになっていること。 - 正規のアセット識別情報と、承認・ファイナリティポリシーが設定されていること。
- USD 以外のアセットの場合、価格ポリシー(承認済みの情報源、価格の最大経過時間、許容される価格乖離、フォールバック)が完全に設定され、価格情報源が実装されていること。
- 受け取り先が設定されていること。
- 決済アダプターが実装されていること。
- x402 レールのみ:EIP-3009 転送を使用する
exactスキーム、トークンの EIP-712 ドメイン、確認回数、ファシリテーターとチェーン RPC のアドレス(DMD_X402_FACILITATOR_URL、DMD_BASE_RPC_URL)が設定されていること。Coinbase の CDP ファシリテーター(https://api.cdp.coinbase.com/platform/v2/x402)には、使用可能な CDP API キー(DMD_X402_CDP_API_KEY_ID、DMD_X402_CDP_API_KEY_SECRET)も必要です。
テストネットワーク上のレール(DebitMyData の regtest/テストネット、Base Sepolia)は、本番環境では拒否されます。
レールが有効化されていても、3~8 の条件が満たされていない場合、ゲートウェイは設定が不完全なレールを稼働させず、起動を拒否します。キルスイッチは安全側に倒れるように機能します。認識されない値はすべて「停止」と見なされます。キルスイッチは起動時に読み込まれるため、切り替えを反映するには再起動が必要です。
/v1/payment-options には有効なレールのみが表示されるため、実際には検証できない決済方法が API で案内されることはありません。
決済ワーカー
決済は、プロセスを分けて追跡します。このプロセスは、有効なレール上の未完了の決済をすべて監視し、正規化されたステータスに沿って処理を進めます。
dmd-gateway-worker # runs until stopped
dmd-gateway-worker --once # one pass
ノードに接続できない間、決済の状態を変更することはありません。また、複数のワーカーを安全に同時実行できます。プライベートチェーンで見積もりから DID-LLM までの一連のフローを試すには、docs/regtest-demo.md に従ってください。
プロジェクト構成
config/payment_routes.yaml payment rails, services, commercial price (no secrets)
config/payment_routes.regtest.yaml the same, on test networks (DebitMyData regtest, Base Sepolia)
deploy/staging/ staging server setup (nginx, systemd services, Cloudflare-only firewall)
deploy/production/ production server setup, signer and backup units, nightly backup
server.json the MCP server's listing in the official MCP Registry
migrations/ Alembic migrations (hand-reviewed)
src/dmd_gateway/
main.py application factory
mcp_server.py MCP tools at /agenticsuperhighway, calling the REST API in-process
worker.py payment worker (dmd-gateway-worker), also refreshes the DMD price
monitoring/ health checks, email/Discord alerts, daily reconciliation report
(dmd-gateway-monitor)
identity/ controller keys, did:web documents, issuer key, signed credentials
signer/ the production credential signer (dmd-gateway-signer) and its client
runtime.py registry, adapters and price sources shared by API and worker
settings.py environment configuration
observability.py JSON logging, correlation IDs
audit.py append-only audit helper
api/ HTTP routes
adapters/ payment adapters (native DMD, x402 USDC), restricted RPC clients,
x402 facilitator client
pricing/ price-source rules and the DMD mining-cost price
services/ quotes, settlement, payment references, controller proofs,
registrations, x402 payments, donations, staging test tools
db/ SQLAlchemy models and session handling
domain/ money, ids, payment states, settlement rules, issuance rule, registry
scripts/demo_agent.py agent side for demos: key, signature, credential check, MCP client
scripts/did-owner-key.py owner key for a DID-LLM without a wallet (docs/owner-key.md)
scripts/load_test.py load test: requests per second and response times
tests/
docs/ architecture, roadmap, operator checklists
ゲートウェイを DebitMyData ノードに接続する前に、docs/sec-04-rpc-isolation.md に従って、そのノードの RPC 分離を検証してください。
基本原則
このリポジトリに対するすべての変更に、以下を適用します。
- ゲートウェイ機能を追加するために、DebitMyData のコンセンサスコードを変更しないでください。
- DebitMyData Core RPC を外部に公開したり、任意の RPC メソッドを転送したりしないでください。
- 呼び出し元に秘密鍵、シードフレーズ、ウォレットのロック解除機能、または制限のない署名機能を渡さないでください。
- ゲートウェイホストにトレジャリーキーや送金キーを置かないでください。決済追跡は監視専用です。
- ティッカーシンボルだけでアセットを受け入れないでください。チェーン ID と正規のコントラクト/識別子を照合してください。
- 金額やトークン量にバイナリ浮動小数点数を使用しないでください。
- 決済が
settledであり、コントローラーの証明がverifiedであり、ポリシーチェックに合格し、登録インテントが有効かつ未使用である場合を除き、ID を発行しないでください。 - ソース、チケット、ログ、チャットにシークレットを含めないでください。
.envファイルは Git の追跡対象外です。 - 公開ドキュメントには、実際に有効で検証済みのレールのみを記載してください。
セキュリティ問題の報告
脆弱性は公開イシューではなく、非公開で報告してください。詳しくは SECURITY.md を参照してください。
データベースに関する注意事項
audit_events、payment_events、credited_outputs、controller_proofs、payment_references は追記専用です。データベーストリガーにより、UPDATE、DELETE、TRUNCATE は拒否されます。credited_outputs の主キーは
(network, transaction, output index) であり、1 つの決済出力をクレジットできるインテントは 1 つだけです。ステージング環境と本番環境では、マイグレーションを別の所有者ロールで実行し、アプリケーションは必要な権限のみを持つロールで接続してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。