Fatstack について
Fatstackは、Agentとプロバイダー向けのマーケットプレイス基盤です。x402を通じて、Base上でAPIやMCPツールの呼び出しごとにUSDCで支払えます。
主な機能
- 01共通レジストリからAPI・MCPツールを検索
- 02x402とBase上のUSDCによる呼び出し単位の課金
- 03Hono、Express、Next向けの決済ミドルウェア
- 04支出制限付きのAI SDKツール
活用シーン
- 01単一のMCPエンドポイントから有料ツールを検索・呼び出し
- 02既存のプロバイダールートへの従量課金の追加
- 03Agentによる有料ツール利用額の制限
MCP 対応
MCPエンドポイントを通じて、クライアントは1つのサーバー接続からマーケットプレイスのカタログを利用できます。閲覧は無料で、呼び出しの支払いにはx402対応クライアントが必要です。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://www.fatstack.net/api/mcpclaude mcp add --transport http net-fatstack-registry https://www.fatstack.net/api/mcp{"mcpServers":{"net-fatstack-registry":{"type":"http","url":"https://www.fatstack.net/api/mcp"}}}Cursor で開く{"servers":{"net-fatstack-registry":{"type":"http","url":"https://www.fatstack.net/api/mcp"}}}VS Code で開く{"mcpServers":{"net-fatstack-registry":{"type":"http","url":"https://www.fatstack.net/api/mcp"}}}{"mcpServers":{"net-fatstack-registry":{"serverUrl":"https://www.fatstack.net/api/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
ツール
15| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| message | string | いいえ | エコーバックする任意の内容。省略可能。 |
詳細
Fatstack
AI エージェントが x402 を通じて Base 上で API や MCP ツールの呼び出しを USDC で都度支払う、非カストディアル型マーケットプレイスです。
プロバイダーがツールを掲載します。エージェントがレジストリでツールを見つけて呼び出します。ツールは価格とともに 402 Payment Required を返します。エージェントは USDC の支払い承認に署名して再試行します。呼び出しが実行され、資金がウォレットからウォレットへ移動します。
Fatstack は資金に一切触れません。 カストディも、出金機能も、支払い経路上のプラットフォームウォレットも、保存された秘密鍵もありません。支払いはエージェントのウォレットからプロバイダーのウォレットへの直接送金です。ただし、プロバイダーのプロモーション期間終了後は、変更不能な分配コントラクトを経由し、1 回のアトミックなトランザクションでプロバイダーへの支払いと 2% のプラットフォーム手数料を処理します。Fatstack が他者の資金を動かせるようになる変更は、バグです。
エージェントから 1 行で使う
MCP サーバーを 1 つ追加するだけで、エージェントはカタログ全体を利用できます。
https://www.fatstack.net/api/mcp
利用可能なものの一覧表示は無料で、料金がかかるのは呼び出しだけです。アカウントも API キーも登録も不要です。ウォレットが本人確認の手段です。支払いには
x402 対応クライアントが必要です。どの MCP クライアントでも閲覧できます。
公式 MCP レジストリには net.fatstack/registry として公開されています。
このリポジトリには、実行、監査、または依存する各パーツが含まれています。マーケットプレイスアプリケーション自体は非公開ですが、インテグレーターが触れるものはすべてここにあり、MIT ライセンスで提供されています。
支払いの流れ
sequenceDiagram
participant A as Agent
participant T as Tool (provider)
participant F as Facilitator
participant C as USDC on Base
A->>T: call the tool
T-->>A: 402 Payment Required + price, asset, payTo, resource
Note over A: signs an EIP-3009 authorisation<br/>covering exactly this resource
A->>T: retry with X-PAYMENT
T->>F: verify
F-->>T: valid
T->>T: run the handler
T->>F: settle
F->>C: transferWithAuthorization
C-->>F: mined
T-->>A: 200 + result
エージェントが署名するのはトランザクションではなく承認です。エージェントがガス代を支払うことも、自ら送金することもありません。ファシリテーターが承認をブロードキャストし、ガス代を支払います。
支払いは取り消せません。オンチェーンで決済されると送金を取り消すことはできず、返金もありません。 この文言はすべての 402 レスポンス本文、すべての見積もりオブジェクト、支払いに関するすべてのページに記載されています。飾りではありません。エスクローなしで都度課金を実現するための特性です。
クイックスタート — プロバイダー
既存のルートの前にペイウォールを設置します。設定は 2 行だけで、料金は呼び出しごとに発生します。
npm install @fatstack/x402
import { Hono } from 'hono';
import { paywall } from '@fatstack/x402';
import { honoPaywall } from '@fatstack/x402/hono';
const app = new Hono();
app.use(
'/convert',
honoPaywall(
paywall({
price: '0.001', // USDC, per call
wallet: '0xYourWallet', // paid directly, wallet to wallet
toolId: 'unit-convert',
network: 'base-sepolia', // test here before base
}),
),
);
app.post('/convert', (c) => c.json({ celsius: 20, fahrenheit: 68 }));
Hono、Express、Next 用のアダプターは、それぞれ専用のエントリーポイント @fatstack/x402/hono、/express、/next から提供されるため、クライアントをエッジランタイムにインポートしても Node フレームワークが一緒に読み込まれることはありません。
ツールの掲載方法を含む詳しい手順は、docs/provider-quickstart.md をご覧ください。
クイックスタート — エージェント
モデルが呼び出せる有料ツールのセットを、上限を超えられない支出上限付きで用意します。
npm install @fatstack/ai-sdk-tools ai viem
import { generateText } from 'ai';
import { fatstackTools } from '@fatstack/ai-sdk-tools';
import { privateKeyToAccount } from 'viem/accounts';
const tools = await fatstackTools({
wallet: privateKeyToAccount(process.env.AGENT_PRIVATE_KEY),
networks: ['base'], // the catalogue is mainnet-only; USDC here is real
guards: {
maxPerDay: 0.5, // hard ceiling per UTC day, in USD
maxPerCall: 0.01, // refuse any single call dearer than this
},
});
const { text } = await generateText({ model, tools, prompt: 'Convert 20C to F.' });
guards はデフォルト値のない必須引数です。資金を使えるツールセットが誤って構築されることのないよう、省略すると無制限の予算になるのではなく、型エラーになります。
詳しい手順は、docs/agent-quickstart.md をご覧ください。
このリポジトリの内容
| パス | 内容 |
|---|---|
sdk/ | @fatstack/x402 — プロバイダーミドルウェアとエージェントクライアント |
integrations/ai-sdk-tools/ | @fatstack/ai-sdk-tools — 呼び出しごとに支払う Vercel AI SDK ツールセット |
contracts/ | USDC 支払い分配コントラクトとそのファクトリー。テストとデプロイゲート付き |
facilitator/THREAT-MODEL.md | 支払い経路に対する 6 種類の攻撃クラスについての評価 |
docs/ | プロバイダーとエージェントのクイックスタート、レジストリ形式 |
パッケージ: @fatstack/x402 ·
@fatstack/ai-sdk-tools
マーケットプレイス: fatstack.net ·
レジストリ: registry.json
セキュリティ
決済フローは、リプレイ、並行実行、異なるリソースへの置き換え、検証と決済の順序、フィールドのバインド、設定ミスという6種類の攻撃を対象に監査しました。それぞれについて判定を文書化し、安全な動作を証明するテストを少なくとも1つ用意しています。モックではなく、実際のファシリテーターとBase Sepolia上の実際の決済を使って実行しています。
facilitator/THREAT-MODEL.md に各判定を記載しています。 contracts/SECURITY.md ではスプリッターを取り上げています。
そのうち1種類は 脆弱 との判定になりました。Fatstackを使わない場合でも、読む価値があります。これはこの実装固有の問題ではなく、x402の性質に関わるものだからです。
リソースをまたぐリプレイ
EIP-3009の認可が対象とするのは (from, to, value, validAfter, validBefore, nonce) です。購入対象は含まれません。そのため、あるツールの支払い用に署名された認可が、同じプロバイダーの別の、より高額なツールに受け入れられました。受取人は同じ、資産も同じ、有効な署名もあり、署名済みのデータにはそれ以外に区別できる情報がありませんでした。
Base Sepoliaで再現し、オンチェーンで決済しました:
0xd95ea771333c8f33f346c316fad30a64585156831d09e298d501c5b1e17e5659
@fatstack/x402 0.2.0 で修正済みです(現行リリースは 0.2.1 で、正しいMITライセンスメタデータが設定された同一のコードです)。ミドルウェアは支払いを見積もり対象のリソースに紐付けるようになり、不一致がある場合はファシリテーターの呼び出し前に resource_mismatch で拒否します。そのため、不一致の支払いに費用がかかることはなく、決済もされません。エージェント向けに402が提示する内容に変更はありません。
手元の支払いが、手元のリソースに対する見積もりであることを確認せずにx402を利用していた場合は、今すぐ確認してください。
コントラクトの設計を変えた発見
初期のスプリッター案では、呼び出し引数としてプロバイダーを指定していました。この引数も支払人の署名で保護されていないため、保留中の認可を観察した誰もが、自分のアドレスを指定して送信し、プロバイダーの98%を受け取ることができました。現在、プロバイダーはコントラクトの構築時に固定されています。プロバイダーごとに1つのスプリッターを用意し、そのアドレスはCREATE2で事前に導出できます。これによりパラメーターがなくなり、攻撃も防げます。
contracts/SECURITY.md の The finding that changed the design を参照してください。
脆弱性の報告
何か見つけましたか?すでに公開済みの問題は、Issueを作成してください。決済フローに関する未報告の脆弱性は、公開Issueではなく、このリポジトリのGitHubセキュリティアドバイザリーから非公開で報告してください。
コントラクトは未監査です
スプリッターは小規模で不変であり、オーナー、一時停止機能、プロキシ、アップグレード経路はありません。Base上の実際のUSDCを使ったフォークテストを含む34件のテストでカバーされています。また、手数料の計算は、TypeScript実装と同じ vectors.json に対して検証されるため、オンチェーンの分配額と見積もり価格にずれが生じることはありません。
第三者によるレビューは受けていません。利用を前提とする前に、自分でコードを読んでください。資金を移動する約15行のコードと、その理由を説明する100行があるだけです。
このリポジトリへの貢献
ここにある一部のファイルは、運用上の詳細が取り除かれているため、非公開リポジトリにある対応ファイルとは異なります。.redactions に対象ファイルが記載されており、scripts/check-redactions.sh はその情報を再び含める変更を拒否します。プッシュする前に実行してください。
ライセンス
MIT。LICENSE を参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。