payfetch について
payfetchは、AIエージェントが運営者の設定したポリシー内でx402リクエストに支払うための、ローカルstdio MCPサーバー、ライブラリ、CLIです。非カストディアルウォレットに加え、承認、安全チェック、追記専用のレシート台帳を備えています。
主な機能
- 01呼び出し単位・日次・ホスト単位の上限
- 02ホスト許可リストと拒否リスト
- 03人による承認基準と承認キュー
- 04任意の信頼性・トークン安全性チェック
- 05すべての結果を記録する追記専用レシート
- 06見積もり・試行・取得・支出確認ツール
活用シーン
- 01固定予算内でx402対応APIの応答に支払う
- 02高額な取得に事前承認を求める
- 03ローカルレシートで支払い試行と支出を確認する
MCP 対応
ローカルstdio MCPサーバーとして動作し、URLの見積もりと取得、承認待ち項目の処理、レシート一覧、支出状況確認のツールを提供します。MCPツールからポリシー上限を変更することはできません。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
npx -y @forum-labs/payfetchPAYFETCH_PRIVATE_KEYシークレット0x-hex EVM private key for a DEDICATED low-balance wallet. Set exactly ONE signer source.PAYFETCH_KEY_FILEシークレットPath to a chmod-600 file holding a 0x-hex key (signer alt).PAYFETCH_CDP_API_KEY_IDシークレットCoinbase CDP server-wallet key id (YOUR account).PAYFETCH_CDP_API_KEY_SECRETシークレットCoinbase CDP API key secret.PAYFETCH_CDP_WALLET_SECRETシークレットCoinbase CDP wallet secret.PAYFETCH_CDP_ACCOUNT_NAMEOptional named CDP EVM account.PAYFETCH_DATA_DIRLedger/state/config root. Default ~/.payfetch.PAYFETCH_TEST_MODEAny value -> receipts test:true, Base mainnet refused (Sepolia only).PAYFETCH_APPROVERSet to 1 to grant approval authority (never with a queue-capable mode).PAYFETCH_VIAOptional via= attribution slug sent on guard calls only.ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
payfetch
payfetch を使うと、AI エージェントは URL を取得できます。サーバーが HTTP 402(x402 支払いプロトコル)を返した場合は、ユーザーが設定した支出ポリシーの範囲内でのみ、自動的に支払いを行います。カストディアルではなく、ウォレットはユーザー自身で用意し、秘密鍵はユーザーのマシン上に保存されます。また、どの MCP ツールからも上限を引き上げることはできません。ローカルの stdio MCP サーバーとして提供され、簡易ライブラリと CLI も同梱されています。
x402 のリファレンスクライアントは、402 が要求する金額をそのまま支払います。payfetch はその逆です。ポリシーと安全性の仕組みこそが重要です。1 回あたり、1 日あたり、ホストごとの支出上限、ホストの許可リストと拒否リスト、人による承認のしきい値、支払い前の任意の信頼性・安全性チェック、そして支払い、拒否、ドライラン、失敗のいずれの場合も、すべての試行を記録する追記専用のローカルレシートを備えています。
ステータスと対象範囲
- バージョン 1.0.0。ポリシースキーマは
p3f.policy.v1、クライアントスキーマはp3f-1.0.0です。 - 対応するのは x402、Base USDC、
exactスキームのみです。Solana で決済される x402、uptoスキーム、MPP は解析されますが、拒否され、その理由がレシートに記録されます。 - Node 22 以降が必要です。Windows はサポートされていません。
- USD は 1.00 のレートで USDC として扱われます。予算は USD 建てで、決済は USDC で行われるため、ペッグが外れると、その倍率分だけ上限が不正確になります。
インストール
パッケージにはコンパイル済みの JavaScript が含まれているため、ビルド手順は不要で、利用者が tsx を用意する必要もありません。必要に応じて npx で実行してください。
# Operator CLI (status, verify, clear-autodeny, report):
npx @forum-labs/payfetch status
# MCP server (what an MCP client launches):
npx -p @forum-labs/payfetch payfetch-mcp
パッケージには 2 つのバイナリが用意されています。payfetch(オペレーター向け CLI)と payfetch-mcp(stdio MCP サーバー)です。2 つあるため、サーバーは npx -p @forum-labs/payfetch payfetch-mcp で起動します。-p フラグでバイナリ名を指定します。
クイックスタート
1. ウォレットを設定する(署名方式を 1 つだけ選択)
署名元が 1 つも設定されていない場合、または複数設定されている場合、payfetch は起動を拒否します。どのウォレットから支出するかを推測することはありません。
生の秘密鍵を使う最もシンプルな方法です。残高の少ない専用ウォレットを使用してください。
export PAYFETCH_PRIVATE_KEY=0xabc...
キーファイルを使う方法です。ファイルのモードは 600 にする必要があります(そうでなければ payfetch は起動を拒否します)。
printf '0xabc...' > ~/.payfetch-wallet.key && chmod 600 ~/.payfetch-wallet.key
export PAYFETCH_KEY_FILE=~/.payfetch-wallet.key
Coinbase CDP サーバーウォレットを使う方法です。秘密鍵を環境変数に貼り付ける代わりに、CDP がアカウント上で鍵を管理します。
export PAYFETCH_CDP_API_KEY_ID=...
export PAYFETCH_CDP_API_KEY_SECRET=...
export PAYFETCH_CDP_WALLET_SECRET=...
export PAYFETCH_CDP_ACCOUNT_NAME=payfetch # optional; stable name across restarts
2. MCP クライアントに接続する
claude_desktop_config.json で設定する Claude Desktop の例:
{
"mcpServers": {
"payfetch": {
"command": "npx",
"args": ["-y", "-p", "@forum-labs/payfetch", "payfetch-mcp"],
"env": {
"PAYFETCH_PRIVATE_KEY": "0xabc...",
"PAYFETCH_TEST_MODE": "1"
}
}
}
}
Claude Code:
claude mcp add payfetch \
--env PAYFETCH_PRIVATE_KEY=0xabc... \
--env PAYFETCH_TEST_MODE=1 \
-- npx -y -p @forum-labs/payfetch payfetch-mcp
最初の実行でメインネットに触れることなく Base Sepolia で決済できるよう、各例では PAYFETCH_TEST_MODE=1 を設定しています。実際の USDC を使う準備ができたら、この設定を外してください。
3. 初めての有料フェッチ
支払いの前に見積もりを取得してください。payment_quote は、取引条件、選択された見積もり、信頼性チェックの結果、残りの予算、ポリシーの判定(would_pay または would_deny)を返します。署名も予約も行いません。
{ "url": "https://api.example.com/paid-endpoint" }
パイプライン全体をドライランします。"dryRun": true を指定した paid_fetch は、署名の直前まで、実際の支払いと同じコードパスを実行します。
paid_fetch で実際に支払います。
{ "url": "https://api.example.com/paid-endpoint", "maxAmountUsd": 0.25 }
maxAmountUsd を指定すると、この呼び出しに限り、1 回あたりの上限をさらに引き下げられます。上限を引き上げることはできません。価格が承認しきい値を超える場合は、事前の承認が必要です(「承認」を参照)。結果には、レスポンス本文、支払い結果とトランザクション参照、警告(ある場合)、および receiptId が含まれます。
支出ポリシー
ポリシーは{dataDir}/config.jsonに保存されます(データディレクトリのデフォルトは~/.payfetchです)。
初回実行時に、payfetchはデフォルト設定を書き込むため、実際に適用されている内容を確認して編集できます。ファイルがない場合はデフォルト設定が適用されます。ファイルが無効な場合は安全側に倒し、修正するまで有料ツールはすべてpolicy_config_invalidを返します。誤記があっても、引き下げた上限が気付かないうちに元に戻ることはありません。ファイルの最終更新時刻が変わると、再読み込みされます。
ポリシーを変更できるのはあなただけです。MCPツールがポリシーを変更することはなく、自動拒否を解除するツールもありません。maxAmountUsdなど、エージェントから渡されるパラメーターでできるのは、制限を厳しくすることだけで、緩めることはできません。paid_fetchが拒否された場合、結果には毎回この制限がエージェントに伝えられます。これにより、プロンプトインジェクションを受けたモデルが制限を交渉可能なものと誤解するのを防ぎます。
上限
caps.perCallUsd(デフォルト:1.00):1回の支払いの上限です。caps.dailyUsd(デフォルト:2.00):UTCの1日あたりの上限です。caps.perHostDailyUsd(デフォルト:1.00):ホストごとのUTCの1日あたりの上限です。caps.totalUsd(デフォルト:null):任意の生涯上限です。
上限は厳格に適用され、支払い前に予算が確保されます。署名済みの承認は、確実に期限切れになるまで予算に計上されるため、予算が実際より多く見積もられることはあっても、少なく見積もられることはありません。リクエストごとの支払い試行は最大1回のため、リトライループでウォレットが使い尽くされることはありません。
生涯上限をデフォルトで設定していないのは、意図的です。専用ウォレットの残高によって、オンチェーンでの生涯支出はすでに制限されています(「セキュリティ」を参照)。そのため、ソフトウェア側の生涯上限を設けると、忘れてしまう設定項目が1つ増えるだけです。残高の大きいウォレットに加えてソフトウェア側の上限も設けたい場合にのみ、totalUsdを設定してください。
許可リストと拒否リスト
デフォルトのmodeはopenです。許可リストに記載されたホストにのみ支払うには、allowlistに設定してください。denyのパターンは常に拒否され、allowより優先されます。*.example.comのようなパターンはサブドメインに一致しますが、ルートドメインには一致しません。
承認
価格が approval.thresholdUsd(デフォルトは 0.10)を厳密に上回る支払いでは、承認が必要になります。承認によって許可されるのは、1 件の支払いのみです。「常に許可」はなく、今後の権限が拡大することもありません。
elicit(デフォルト):クライアントが、人間にホスト、リソース、金額、ネットワークとアセット、ガードの結果、本日の残り予算を提示して確認を求めます。人間は一度だけ承認するか、拒否します。プロンプトは 120 秒後にタイムアウトし、拒否として扱われます。一部の MCP クライアントではエリシテーションプロンプトを処理できません。Claude Code v2.1.198 と現行の Claude Desktop では、どちらも対応していません(Claude Code はエリシテーション機能をアドバタイズせず、Claude Desktop はアドバタイズしますが、プロンプトを即座にキャンセルします)。クライアントにエリシテーションのサポートが追加されれば、payfetch 側の変更なしでプロンプトが機能します。payfetch は、人間による実際の「拒否」と、クライアントが確認を求められないだけの場合とを区別し、「確認できない」状態を無言の拒否として扱うことはありません。クライアントがエリシテーションを実行できないことだけを理由に支払いがブロックされた場合、ツールの結果にその旨と許可する方法が示されます。queue:支払いは実行されません。結果にはapprovalIdが返されます。承認権限を持つ人間がapprove_pendingツールで解決します。承認されたエントリは再実行の許可となります。後続のpaid_fetchではパイプライン全体が再実行され、ホストと正確な金額が一致するか確認されます。1 時間後に期限切れとなり、条件に差異があれば新たな承認が必要です。deny:閾値を上回る支払いはすべて拒否されます。無人のフリート向けです。
人間に確認を求められないクライアント向けに、閾値を上回る支払いをダイアログなしで許可できる、設定のみで制御する項目が 2 つあります。どちらもエージェントではなく、オペレーターによる明示的な許可であり、ツールから設定することはできません。approval.preApprovedUpToUsd(デフォルトは null)は、上限額までの閾値超過の支払いを自動承認します。
approval.preApprovedHosts(デフォルトは空)は、指定したホストを自動承認します。どちらの場合も、すべての上限とガードが適用されます。
承認によって上限が回避されることはありません。承認済みの支払いでも、予算の確保に失敗した場合は拒否されます。
{"action":"list"} を指定した approve_pending は常に許可され、キューを表示します。エントリの承認または拒否には、サーバーの環境変数で PAYFETCH_APPROVER=1 を設定する必要があります。設定されていない場合、ツールは approver_not_enabled を返します。エージェントが自身の支払いを承認してはならないため、承認キューを利用できるモードと PAYFETCH_APPROVER=1 が併用されている場合、サーバーは起動を拒否します。
レシート
無料のフェッチ、ドライラン、拒否、決済状態が不明なケースを含め、すべての結果について、変更不可能な JSON 行が 1 行、台帳に追記されます。
{dataDir}/ledger/{yyyy-mm}.jsonl # append-only, monthly rotation, fsync on payments
{dataDir}/state.json # disposable cache, rebuildable from the ledger
{dataDir}/downloads/{receiptId} # response bodies when responseMode is "file"
レシートには、URL、メソッド、ホスト、結果と拒否コード、通過したパイプラインのステップ、選択された見積もりと拒否された見積もりの集計、ガードの結果、承認情報、支払い(支払者のアドレス、nonce、validBefore、決済額、トランザクション参照、確認済みかどうか)、判断時点の予算、HTTP の概要が記録されます。キー素材、署名、支払いペイロード全体、レスポンスボディ、リクエストヘッダーの値は一切保存されません。レスポンスボディは、SHA-256 ハッシュとバイト数として記録されます。URL のクエリ文字列は保存されます。これは、自分のディスク上に自分の監査記録を残すためです。一方、ガード呼び出しではクエリ文字列が除去されます(「セキュリティ」を参照)。記録の書き換えは行われません。訂正は p3f.adjust.v1 レコードとして追記されます。
list_receipts ツール(時刻、ホスト、結果で絞り込み)または spend_status(本日の合計、保留額、最近の支払い)でレシートを検索します。支払い済みだが不良な結果が繰り返し発生すると、そのホストは 7 日間、自動的に拒否されます。ツールからではなく、payfetch clear-autodeny <host> を使って別途解除してください。
信頼性と安全性のチェック
payfetch は支払いの前に、2 つのチェックを利用できます。どちらも
https://api.forum-labs.com の有料 Forum Labs API を呼び出します。また、どちらも
利益相反にあたりますが、その事実は隠さずここに開示します。ガードは当社の製品を
呼び出します。デフォルトのガード予算は 0 なので、デフォルトではクライアントは
それらの製品の無料枠のみを利用します。有料のガード利用は明示的なオプトインであり、
guards.*.dailyBudgetUsd > 0 で予算を設定します。また、ほかの支出と同様に
レシートが発行されます。
信頼性チェックは、デフォルトでアドバイザリーモードが有効です。支払いの前に、
対象のエンドポイントに信頼できる履歴があるかを確認します。アドバイザリーモードでは
警告し、強制モードでは設定された判定(デフォルトは unreliable)に該当する場合に
ブロックします。履歴が不十分な新しいエンドポイントは unrated と判定され、
デフォルトでは通過するため、このチェックが新しいエンドポイントの利用を妨げることは
ありません。このチェックは、クライアントから当社への唯一の外部通信です。送信内容と
無効化方法の詳細は「セキュリティ」をご覧ください。
安全性チェックはデフォルトで無効です。有効にすると、指定したトークンのミント
(tokenAddress)を Forum Labs のトークン安全性 API で審査し、danger の判定、
または deep モードでデプロイヤーが serial_rugger と判定された場合にブロックします。
deep は常に有料の審査なので、dailyBudgetUsd > 0 が必要です。
セキュリティと情報開示
payfetch を資金のあるウォレットに設定する前に、以下をお読みください。
ウォレット残高が実際の上限です
バグやプロンプトインジェクションを受けたエージェントが支出できる金額を制限する 主な要素は、ソフトウェアの上限ではなく、payfetch に指定したウォレットの残高です。 ウォレットの残高はオンチェーンで強制される上限です。設定内容やエージェントへの指示に かかわらず、payfetch はウォレットにない資金を支出できません。まず適切に設定すべき ものはウォレットです。
新しいウォレットを作成し、全額を失っても構わない金額だけを入金してください (試用なら数ドル、本番環境なら上限を定めた追加資金)。そのウォレットを payfetch に 指定します。メインのウォレットは絶対に使わないでください。定期振込ではなく、 必要なときに意図的に補充してください。
上限、リスト、承認しきい値、ガードは、その上に設けるきめ細かな制御層です。 ウォレット残高の範囲内で、利用頻度、対象ごとのエクスポージャー、検出機能を調整します。 これらは実際に適用されますが、サーキットブレーカーとなるのはウォレット残高であり、 上限はメスの役割を果たします。両方を設定してください。
キーの管理
キーが当社に送信されたり、ログに記録されたり、レシート台帳に書き込まれたりすることは
ありません。台帳に保存されるのはアドレスと金額であり、キーは保存されないことが
テストで確認されています。キーはプロセス内で環境から読み込まれ、EIP-3009 の
支払い承認への署名に使われます。署名済みの承認は、1 つの資産、1 つの金額、
1 つの受取人、1 つの有効期間に限定されます。PAYFETCH_KEY_FILE を使う場合、
ファイルがグループまたは全ユーザーから読み取り可能だと payfetch は起動を拒否するため、
chmod 600 を設定してください。
信頼性ガードが送信する情報と無効化方法
信頼性ガードが有効な間、有料のフェッチごとに Forum Labs の信頼性 API へ 1 回 リクエストを行います。このリクエストは、クライアントから当社への唯一の外部通信です。 クエリ文字列を除いた対象エンドポイントと、インストールごとにランダムに生成される ID を 送信します。対象 URL のクエリには利用者自身の秘密情報が含まれる可能性があるため、 クエリ文字列は除外します。サーバー側では入力のハッシュを保存し、対象そのものは 保存しません。また、インストール ID は集計にのみ使用し、インストールごとのプロファイリング や転売には使用しません。インストール ID は初回実行時に生成されるランダムな 32 桁の 16 進数値で、状態ファイルに保存されます。状態ファイルを削除すると、新しい ID が生成されます。
guards.trust.enabled: false を設定すると、ガードを無効にできます。無効にすると、
payfetch は外部への呼び出しを一切行いません。ガード結果も、ネットワークリクエストも、
接続もありません。これが完全な無効化方法です。その正直な代償として、ガードを無効にした
運用者は、当社の導入状況を測定する仕組みからは認識されなくなります。
任意の結果報告(デフォルトではオフ)
報告はデフォルトではオフで、有効にしない限り何も変わりません。結果を報告する場合、現時点では payfetch report <receiptId> によるインシデントごとの報告のみが可能です。クライアントは、完了した支払い試行(支払い済みで配信済み、または支払い済みで未配信)の結果を、支払いウォレットで署名し、オンチェーン決済に紐付けて、信頼性 API に報告します。報告するのは、販売者の対応に関する事実です。閲覧した内容の記録では決してありません。検索(ガードチェック、見積もり、ドライラン)は、消費者ごとに保持されることはありません。
報告には、次のフィールドだけが含まれ、それ以外は含まれません。クエリを除去したエンドポイント {method, url}、レシートから導出され、エージェントから指定されることのない outcome、構造化された checks(settlementConfirmed、大まかな HTTP ステータスクラス、contentTypeOk、nonEmpty)、支払いに適用された termsHash、すでにオンチェーンに記録されている販売者の payTo アドレス、正確な金額ではなく大まかな amountBand、正確なタイムスタンプではなく UTC の日付、そして支払いウォレットアドレスと、ペイロードに対する EIP-712 署名です。報告にクエリ文字列、リクエストヘッダーや本文、レスポンス本文、receiptId、正確な金額、正確なタイムスタンプが含まれることはありません。インストール ID が報告経路に含まれることはないため、報告ウォレットとガードのインストール ID が紐付けられることもありません。
決済済みの x402 支払いは、すでに公開されています(支払人、受取人、金額、時刻がチェーン上に記録されています)。報告によって追加されるのは、結果を示す情報です。トラフィックが非常に少ないエンドポイントでは、匿名性を保てる対象が少ないため、販売者が報告者をあなたと推測できる可能性があります。このリスクを軽減するため、日単位の粒度とバケット化した公開を採用しています。残るリスクを隠さず、ここに明示します。このバージョンでは、信頼性 API は署名を検証します(recover(sig) === payer)。そのため、見知らぬ第三者があなたになりすまして報告することはできませんが、決済そのものはまだ証明しません。後続のバージョンで決済と照合されるまでは、報告は未検証として表示されます。報告者のウォレットを収益化、公開、または匿名解除しようとすることはありません。
SSRF とプライベートな宛先
allowPrivateTargets: true を設定しない限り、payfetch は HTTP(S) 以外のスキームと、ループバック、RFC1918、リンクローカル 169.254/16、CGNAT、ULA に解決されるホストを拒否します。支払いを伴う fetch が 169.254.169.254 からの情報を流出させるツールになってはなりません。DNS は固定されるため、検証済みの IP に接続されます。リダイレクトの各段階で再検証され、https から http へのダウングレードは中止されます。
payfetch で保護できないこと
取得したコンテンツは、エージェントにとって信頼できない入力です。悪意のあるページが、別の場所への fetch や支払いをエージェントに指示する場合があります。payfetch は専用ウォレットの残高、上限、リスト、承認しきい値、レシート、SSRF ブロックによって被害を抑えますが、エージェントの判断力を高めることはできません。ポリシーの範囲内で支出するよう注入されたエージェントを止めることはできないため、ウォレットの残高は少額に保ってください。信頼できないコンテンツを扱うワークロードでは、デフォルト設定を厳しくしてください。
{
"mode": "allowlist",
"allow": ["api.trusted-vendor.com"],
"caps": { "perCallUsd": 0.05, "dailyUsd": 0.50, "perHostDailyUsd": 0.25 },
"approval": { "thresholdUsd": 0.0, "mode": "elicit", "elicitFallback": "deny" },
"guards": { "trust": { "enabled": true, "mode": "enforce" } }
}
thresholdUsd: 0.0 にすると、すべての支払いが人間の承認対象になります。mode: "enforce" にすると、unreliable という判定が出た際に、警告だけでなくブロックします。
明示しておくべき制限が、ほかに 2 つあります。オンチェーン決済の検証はまだありません。決済に関する情報はサーバーの支払いレスポンスヘッダーから得られるため、嘘をつくサーバーは誤った情報を報告できます。どちらの誤りも過大計上につながりますが、これは安全側の誤りです。オンチェーン検証は今後実装する予定です。また、台帳は単一インスタンス用です。ロックファイル、プロセス、マシンはそれぞれ 1 つです。複数のマシンで運用するには、ここでは構築していないポリシープレーンが必要です。
設定リファレンス
{dataDir}/config.json のデフォルト値、スキーマ p3f.policy.v1:
| フィールド | デフォルト値 | 意味 |
|---|---|---|
mode | "open" | "allowlist" は allow に含まれるホストのみへの支払いを許可します。 |
allow | [] | 許可リストモードで許可されるホストパターンです。 |
deny | [] | 常に拒否されるホストパターンです(allow より優先されます)。 |
caps.perCallUsd | 1.00 | 1 回の支払いの上限です。 |
caps.dailyUsd | 2.00 | UTC 日単位の上限です。 |
caps.perHostDailyUsd | 1.00 | UTC 日単位のホストごとの上限です。 |
caps.totalUsd | null | 任意の生涯上限です。 |
approval.thresholdUsd | 0.10 | この金額を超える場合、承認が必要です。 |
approval.mode | "elicit" | elicit、queue、または deny です。 |
approval.elicitFallback | "deny" | クライアントが承認を要求できない場合に使用されます。フェイルクローズです。 |
approval.preApprovedUpToUsd | null | しきい値を超える支払いをダイアログなしで行える上限です。 |
approval.preApprovedHosts | [] | しきい値を超える支払いを自動で許可するホストです。 |
guards.trust.enabled | true | デフォルトで有効な信頼性チェックです。 |
guards.trust.mode | "advisory" | advisory は警告し、enforce はブロックします。 |
guards.trust.minScore | null | 許容される TrustScore の最低値です。この値を下回るとガードがブロックまたは警告します。null の場合は判定結果に基づくブロックのみが行われ、API が null スコアを返した場合は無視されます。 |
guards.trust.blockVerdicts | ["unreliable"] | ブロックまたは警告の対象となる判定結果です。 |
guards.trust.blockUnrated | false | デフォルトでは unrated は許可されます。 |
guards.trust.onUnavailable | "block" | ガードが応答できない場合の enforce モードでの動作です。 |
guards.trust.dailyBudgetUsd | 0 | 0 は無料プランのみを意味します。 |
guards.safety.enabled | false | トークンの安全性チェックです。tokenAddress が必要です。 |
guards.safety.mode | "enforce" | advisory は警告し、enforce はブロックします。安全性ガードが有効な場合にのみ適用されます。 |
guards.safety.depth | "basic" | deep は常に有料です。 |
guards.safety.blockVerdicts | ["danger"] | ブロック対象となるトークンの判定結果です。 |
guards.safety.blockDeployerVerdicts | ["serial_rugger"] | デプロイヤーの判定結果です。deep の場合のみ適用されます。 |
guards.safety.onUnavailable | "block" | 安全性ガードが停止している場合の enforce モードでの動作です。 |
guards.safety.onDegraded | "block" | チェックが縮退状態の場合の enforce モードでの動作です。 |
allowPrivateTargets | false | SSRF ガードです。false のままにしてください。 |
autoDeny.enabled | true | ホストごとのサーキットブレーカーです。 |
サーバーと CLI の両方で読み込まれる環境変数:
| 変数 | 意味 |
|---|---|
PAYFETCH_PRIVATE_KEY | 0x 形式の 16 進数 EVM 秘密鍵です。3 つある署名者ソースの 1 つです。 |
PAYFETCH_KEY_FILE | 0x 形式の 16 進数キーを格納した mode-600 ファイルへのパスです。 |
PAYFETCH_CDP_API_KEY_ID / _SECRET、PAYFETCH_CDP_WALLET_SECRET | Coinbase CDP サーバーウォレットの認証情報です(3 つすべてをまとめて指定する必要があります)。 |
PAYFETCH_CDP_ACCOUNT_NAME | 任意の名前付き CDP EVM アカウントです。デフォルトでは安定した名前が使用されます。 |
PAYFETCH_DATA_DIR | 台帳、状態、設定のルートディレクトリです。デフォルトは ~/.payfetch です。 |
PAYFETCH_TEST_MODE | 任意の値を設定すると、レシートに test:true が付与され、Base メインネットの見積もりが拒否されます(Sepolia のみ)。 |
PAYFETCH_APPROVER | 1 を設定すると承認権限が付与されます。キュー対応モードでは拒否されます。 |
PAYFETCH_VIA | ガード呼び出しにのみ送信される任意の via= 帰属用スラッグです。 |
テストモード
PAYFETCH_TEST_MODE に任意の値を設定してください。するとすべてのレシートに test: true が付与され、メトリクスから除外されます。また、Base メインネットの見積もりが拒否されるため、セルフテストでメインネットの支出が発生することはありません。決済に使用されるのは Base Sepolia のみです。実際の USDC を使用する前に、Base Sepolia のエンドツーエンド経路をテストするために利用してください。
CLI
payfetch CLI は MCP サーバーと同じ環境変数を読み込みます。
# Reset a host's auto-deny circuit breaker (an operator action, not a tool).
npx @forum-labs/payfetch clear-autodeny api.example.com
# Print today's spend status as JSON.
npx @forum-labs/payfetch status
# Verify the ledger tamper-evidence sidecar (exits non-zero on any integrity gap).
npx @forum-labs/payfetch verify
# Report a paid outcome for a receipt (opt-in, off by default). Prints the exact
# wallet-signed payload, asks for confirmation, then submits. Never an MCP tool, so
# the agent can neither file nor suppress a report. Use --yes to skip the prompt.
npx @forum-labs/payfetch report <receiptId>
status はエンジンを構築し、単一ライターのロックを取得します。MCP サーバーがすでに実行中の場合は、代わりに spend_status ツールを使用するか、先にサーバーを停止してください。
.mcpb を手動でインストールする
決済コネクターはディレクトリへの登録を利用できないため、payfetch は手動インストール用にパッケージ化されています。バンドルをビルドします。
npm run build:mcpb # produces dist-mcpb/payfetch.mcpb
このコマンドは tsc を実行し、続いて esbuild でビルド済みのサーバーエントリとそのランタイム依存関係を単一の自己完結型 ESM ファイルにバンドルし、mcpb ツールでパッケージ化します。生成される小さな .mcpb zip には、バンドルされたサーバーと manifest.json が含まれます。node_modules は同梱されないため、Claude Desktop は npm install を実行せずにインストールできます。Claude Desktop で「Settings」から「Extensions」、「Install from file」の順に進み、.mcpb を選択して、署名オプションをちょうど 1 つ入力します。バンドルのロジックは mcpb/build.mjs にあり、マニフェストは mcpb/manifest.json です。
ソースから
npm install # dev dependencies, including tsx for the from-source flow
npm run typecheck # tsc --noEmit
npm test # vitest, hermetic, no network
npm run build # emit dist/, the compiled JS the package ships
ライセンス
MIT です。LICENSE を参照してください。Copyright (c) 2026 Forum Labs.
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。