mcpField
X
x402

x402

github.com/tenequm開発3979 回インストール1 日前に更新
リポジトリ

x402 について

x402は、HTTP経由のオンチェーン決済を実装するためのツールキットです。複数言語のSDKとミドルウェアを買い手・売り手向けに提供し、APIやウェブコンテンツ、エージェントが利用するリソースの決済に加え、MCP連携にも対応します。

主な機能

  1. 01HTTP 402による決済フロー
  2. 02買い手と売り手向けのSDK
  3. 03ミドルウェアとHTTPクライアントラッパー
  4. 04複数のブロックチェーンネットワークに対応
  5. 05MCPクライアントとサーバー向けパッケージ
  6. 06定額制と従量制の決済方式

活用シーン

  1. 01APIで暗号資産の少額決済を受け付ける
  2. 02ウェブコンテンツにペイウォールを設ける
  3. 03エージェントがリソースの料金を支払う
  4. 04MCPツールに決済を要求する

MCP 対応

SDKにはMCPクライアントとサーバー向けの `@x402/mcp` があり、PythonのMCP連携も提供されています。MCPツールの決済フローに利用できます。

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/tenequm/skills --skill x402

インストール後、Claude Code で/x402を入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

CHANGELOG.md
LICENSE.txt
references/
aptos-scheme.md
core-concepts.md
evm-scheme.md
extensions.md
go-sdk.md
lifecycle-hooks.md
near-scheme.md
protocol-spec.md
python-sdk.md
stellar-scheme.md
svm-scheme.md
transports.md
typescript-sdk.md
upto-scheme.md
xrpl-scheme.md

詳細

x402 プロトコル開発

x402 は、HTTP の 402 Payment Required ステータスコードをプログラムによるオンチェーン決済に対応させるオープンスタンダード(Apache-2.0)です。Coinbase によって開発され、現在は x402 Foundation が管理しています。アカウント、セッション、API キーは不要です。クライアントは HTTP 経由で署名済みの暗号資産トランザクションを直接使って支払います。

使用する場面

  • 暗号資産のマイクロペイメントを受け付ける有料 APIを構築する
  • Web コンテンツやエンドポイントにペイウォールを追加する
  • AI エージェントがリソースの料金を自律的に支払えるようにする
  • 支払いが必要なMCP ツールを統合する
  • エージェント間(A2A)の決済フローを構築する
  • EVM(Base、Ethereum、MegaETH、Monad、Polygon、Stable、Arbitrum)、Solana、Stellar、Aptos、NEAR、XRPLでの決済に対応する
  • upto 方式を使った使用量ベースの課金(LLM トークン、帯域幅、コンピューティング)を実装する
  • 外部のファシリテーターに依存せず、プロセス内ファシリテーター(セルフファシリテーション)を実行する

コアアーキテクチャ

すべての x402 決済には、次の 3 つの役割があります。

  1. リソースサーバー - エンドポイントを保護し、支払い要件とともに 402 を返します
  2. クライアント - 支払い承認に署名し、支払いヘッダーを付けてリクエストを再試行します
  3. ファシリテーター - 署名を検証し、オンチェーンでトランザクションを決済します

決済フロー(HTTP トランスポート):

Client -> GET /resource -> Server returns 402 + PAYMENT-REQUIRED header
Client -> signs payment -> retries with PAYMENT-SIGNATURE header
Server -> POST /verify to Facilitator -> POST /settle to Facilitator
Server -> returns 200 + PAYMENT-RESPONSE header + resource data

クイックスタート:販売者(TypeScript + Express)

import express from "express";
import { paymentMiddleware, x402ResourceServer } from "@x402/express";
import { ExactEvmScheme } from "@x402/evm/exact/server";
import { HTTPFacilitatorClient } from "@x402/core/server";

const app = express();
const payTo = "0xYourWalletAddress";

const facilitator = new HTTPFacilitatorClient({ url: "https://x402.org/facilitator" });
const server = new x402ResourceServer(facilitator)
  .register("eip155:84532", new ExactEvmScheme());

app.use(
  paymentMiddleware(
    {
      "GET /weather": {
        accepts: [
          { scheme: "exact", price: "$0.001", network: "eip155:84532", payTo },
        ],
        description: "Weather data",
        mimeType: "application/json",
      },
    },
    server,
  ),
);

app.get("/weather", (req, res) => {
  res.json({ weather: "sunny", temperature: 70 });
});

app.listen(4021);

インストール:npm install @x402/express @x402/core @x402/evm

クイックスタート:購入者(TypeScript + Axios)

import { x402Client, wrapAxiosWithPayment } from "@x402/axios";
import { registerExactEvmScheme } from "@x402/evm/exact/client";
import { privateKeyToAccount } from "viem/accounts";
import axios from "axios";

const signer = privateKeyToAccount(process.env.EVM_PRIVATE_KEY as `0x${string}`);
const client = new x402Client();
registerExactEvmScheme(client, { signer });

const api = wrapAxiosWithPayment(axios.create(), client);
const response = await api.get("http://localhost:4021/weather");
// Payment handled automatically on 402 response

インストール:npm install @x402/axios @x402/evm viem

クイックスタート:販売者(Python + FastAPI)

from fastapi import FastAPI
from x402.http import FacilitatorConfig, HTTPFacilitatorClient, PaymentOption
from x402.http.middleware.fastapi import PaymentMiddlewareASGI
from x402.http.types import RouteConfig
from x402.mechanisms.evm.exact import ExactEvmServerScheme
from x402.server import x402ResourceServer

app = FastAPI()

facilitator = HTTPFacilitatorClient(FacilitatorConfig(url="https://x402.org/facilitator"))
server = x402ResourceServer(facilitator)
server.register("eip155:84532", ExactEvmServerScheme())

routes = {
    "GET /weather": RouteConfig(
        accepts=[PaymentOption(scheme="exact", pay_to="0xYourAddress", price="$0.001", network="eip155:84532")],
        mime_type="application/json",
        description="Weather data",
    ),
}
app.add_middleware(PaymentMiddlewareASGI, routes=routes, server=server)

@app.get("/weather")
async def get_weather():
    return {"weather": "sunny", "temperature": 70}

インストール:pip install "x402[fastapi,evm]"

クイックスタート:販売者(Go + Gin)

import (
    x402http "github.com/x402-foundation/x402/go/v2/http"
    ginmw "github.com/x402-foundation/x402/go/v2/http/gin"
    evm "github.com/x402-foundation/x402/go/v2/mechanisms/evm/exact/server"
)

facilitator := x402http.NewHTTPFacilitatorClient(&x402http.FacilitatorConfig{URL: facilitatorURL})

routes := x402http.RoutesConfig{
    "GET /weather": {
        Accepts: x402http.PaymentOptions{
            {Scheme: "exact", Price: "$0.001", Network: "eip155:84532", PayTo: evmAddress},
        },
        Description: "Weather data",
        MimeType:    "application/json",
    },
}

r.Use(ginmw.X402Payment(ginmw.Config{
    Routes:      routes,
    Facilitator: facilitator,
    Schemes:     []ginmw.SchemeConfig{{Network: "eip155:84532", Server: evm.NewExactEvmScheme()}},
}))

インストール:go get github.com/x402-foundation/x402/go/v2

マルチネットワーク対応(EVM + Solana)

サーバーは複数のネットワークで同時に支払いを受け付けられます。

import { ExactEvmScheme } from "@x402/evm/exact/server";
import { ExactSvmScheme } from "@x402/svm/exact/server";

const server = new x402ResourceServer(facilitator)
  .register("eip155:84532", new ExactEvmScheme())
  .register("solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1", new ExactSvmScheme());

// Route config with both networks
"GET /weather": {
  accepts: [
    { scheme: "exact", price: "$0.001", network: "eip155:84532", payTo: evmAddress },
    { scheme: "exact", price: "$0.001", network: "solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1", payTo: svmAddress },
  ],
}

クライアントは両方の方式を登録し、サーバーの要件に応じて自動的に選択します。

const client = new x402Client();
registerExactEvmScheme(client, { signer: evmSigner });
registerExactSvmScheme(client, { signer: svmSigner });

対応ネットワーク

ネットワークCAIP-2 IDステータス
Base Mainneteip155:8453メインネット
Base Sepoliaeip155:84532テストネット
MegaETH Mainneteip155:4326メインネット(MegaUSD がデフォルト、18 桁)
Solana Mainnetsolana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdpメインネット
Solana Devnetsolana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1テストネット
Stellar Mainnetstellar:pubnetメインネット(TypeScript SDK のみ)
Stellar Testnetstellar:testnetテストネット(TypeScript SDK のみ)
Aptos Mainnetaptos:1メインネット(TypeScript SDK のみ)
Aptos Testnetaptos:2テストネット(TypeScript SDK のみ)
Monad Mainneteip155:143メインネット
Polygon Mainneteip155:137メインネット
Polygon Amoyeip155:80002テストネット
Stable Mainneteip155:988メインネット
Stable Testneteip155:2201テストネット
Arbitrum Oneeip155:42161メインネット
Arbitrum Sepoliaeip155:421614テストネット
XDC Network Mainneteip155:50メインネット(USDC)
XDC Apothem Testneteip155:51テストネット(USDC)
Mezo Mainneteip155:31612メインネット(mUSD、18 桁、Permit2 + EIP-2612)
Mezo Testneteip155:31611テストネット(mUSD、Permit2 + EIP-2612)
Avalancheeip155:43114実行時の登録のみ(デフォルト資産なし、コミュニティのファシリテーター)
Radius Mainneteip155:723487メインネット(SBC がデフォルト)
Radius Testneteip155:72344テストネット(SBC がデフォルト)
ADI Chaineip155:36900メインネット(USDC.e がデフォルト)
HPP Mainneteip155:190415メインネット(ブリッジされた USDC がデフォルト)
HPP Sepoliaeip155:181228テストネット(ブリッジされた USDC がデフォルト)
TON Mainnettvm:-239メインネット(jetton の送金、Python + TypeScript SDK)
TON Testnettvm:-3テストネット
Hedera Mainnethedera:mainnetメインネット(HBAR + HTS トークン)
Hedera Testnethedera:testnetテストネット
Algorand Mainnetalgorand:wGHE2Pwdvd7S12BL5FaOP20EGYesN73kメインネット(USDC ASA)
Algorand Testnetalgorand:SGO1GKSzyE7IEPItTxCByw9x8FmnrCDeテストネット(USDC ASA)
Keeta Mainnetkeeta:21378メインネット(TypeScript SDK)
Keeta Testnetkeeta:1413829460テストネット(TypeScript SDK)
Concordium Mainnetccd:9dd9ca4d19e9393877d2c44b70f89acbメインネット(ネイティブ CCD、6 桁、TypeScript SDK)
Concordium Testnetccd:4221332d34e1694168c2a0c0b3fd0f27テストネット(ネイティブ CCD、TypeScript SDK)
Igra Mainneteip155:38833メインネット(USDC、Permit2 のみ。EIP-3009 と EIP-2612 は非対応)
NEAR Mainnetnear:mainnetメインネット(NEP-141 USDC、リレイヤーが手数料を負担、TypeScript SDK)
NEAR Testnetnear:testnetテストネット(TypeScript SDK)
XRPL Mainnetxrpl:0メインネット(XRP + IOU、手数料のスポンサーなし、TypeScript SDK)
XRPL Testnetxrpl:1テストネット
XRPL Devnetxrpl:2開発ネット

Algorand の CAIP-2 ID が変更されました。 参照値は、URL セーフな base64 形式のジェネシスハッシュを先頭から 32 文字に切り詰めたものです。以前のパディング付きフルハッシュ形式(algorand:wGHE2Pwdvd7S12BL5FaOP20EGYesN73ktiC1qzkkit8=)は一致しなくなりました。SDK は入力時にレガシー ID を正規化しますが、出力には切り詰めた形式を使用します。

デフォルトのファシリテーター(https://x402.org/facilitator)は、Base Sepolia、Solana Devnet、Algorand Testnet、Stellar Testnet、Aptos Testnet、Hedera Testnet、XRPL Testnet に対応しています。Base Sepolia では、exact、upto、および batch-settlement に加えて、builder-code、eip2612GasSponsoring、erc20ApprovalGasSponsoring の各拡張機能を通知します。

本番環境向けのデフォルトではありません。 上流プロジェクトは現在、パブリックな x402.org ファシリテーターが開発環境およびテストネットのワークフロー向けであることを明示しています。本番環境のメインネットルートでデフォルトの経路として使用できるとは想定しないでください。本番環境向けの選択肢については、ファシリテーターのディレクトリを参照してください。

SDK パッケージ

TypeScript v2.20.0 (npm, GitHub)
パッケージ用途
@x402/coreコア型、クライアント、サーバー、ファシリテーター
@x402/evmEVM の exact および upto スキーム(EIP-3009、Permit2)。upto は @x402/evm/upto/* サブパス経由で利用できます
@x402/svmSolana スキーム(SPL TransferChecked)
@x402/stellarStellar スキーム(SEP-41 Soroban トークン転送)
@x402/aptosAptos スキーム(Fungible Asset 転送)
@x402/avmAlgorand(AVM)スキーム
@x402/hederaHedera スキーム(HBAR および HTS の代替性トークン転送)
@x402/tvmTON スキーム(jetton 転送)
@x402/keetaKeeta スキーム(exact)
@x402/concordiumConcordium スキーム(ネイティブ CCD、exact)
@x402/nearNEAR スキーム(NEP-366 SignedDelegate および NEP-141 ft_transfer、リレイヤーが手数料を負担)
@x402/xrplXRPL スキーム(支払人署名の Payment、手数料負担なし)。2.20.0 のタグが付いていますが、npm ではまだ公開されていません。ソースからビルドしてください
@x402/expressExpress ミドルウェア
@x402/fastifyFastify ミドルウェア
@x402/honoHono エッジミドルウェア
@x402/nextNext.js ミドルウェア
@x402/axiosAxios インターセプター
@x402/fetchFetch ラッパー
@x402/paywallブラウザー用ペイウォール UI
@x402/mcpMCP クライアントおよびサーバー
@x402/extensionsBazaar、offer-receipt、payment-identifier、sign-in-with-x、ガス代の負担
Python v2.17.0 (PyPI, GitHub)
pip install "x402[httpx]"      # Async HTTP client
pip install "x402[requests]"   # Sync HTTP client
pip install "x402[fastapi]"    # FastAPI server
pip install "x402[flask]"      # Flask server
pip install "x402[evm]"        # EVM support
pip install "x402[svm]"        # Solana support
pip install "x402[tvm]"        # TON support
pip install "x402[mcp]"        # MCP integration
pip install "x402[extensions]" # Extensions (bazaar, gas sponsoring, etc.)
pip install "x402[all]"        # Everything

便利なバンドル:clients(httpx + requests)、servers(flask + fastapi)、mechanisms(evm + svm + tvm)。

Go v2.20.0 (GitHub)

Go モジュールパスには /v2 サフィックスが付きます。.../x402/go だけのパスでは、タグ付きリリースを解決できなくなりました。

go get github.com/x402-foundation/x402/go/v2
Java(Java 17 以降、GitHub)

4 つ目の公式バインディング(PaymentFilter、FacilitatorClient、X402HttpClient)がリポジトリにあります。まだパッケージレジストリには公開されていません。ソースからビルドしてください。

主な概念

  • クライアント/サーバー/ファシリテーター:すべての決済における3つの役割です。クライアントが署名し、サーバーが適用し、ファシリテーターがオンチェーンで決済します。references/core-concepts.md を参照してください。
  • ウォレット:購入者と販売者にとって、決済手段であると同時にアイデンティティでもあります。references/core-concepts.md を参照してください。
  • ネットワークとトークン:CAIP-2 識別子、EVM 上の EIP-3009 トークン、Solana 上の SPL、カスタムトークン設定です。references/core-concepts.md を参照してください。
  • スキーム:決済方法です。exact = 正確な金額を送金します。upto = 最大額を承認し、実際の利用額を決済します(出荷中の SDK は EVM Permit2 のみです。Solana 決済チャネルを介した SVM バインディングのドラフトは仕様策定段階です)。batch-settlement = リクエスト時に確定し、非同期で決済します。auth-capture = エスクロー/承認後にキャプチャし、無効化、返金、再請求を行います。references/evm-scheme.md、references/svm-scheme.md、references/stellar-scheme.md、references/upto-scheme.md、references/aptos-scheme.md、references/near-scheme.md、references/xrpl-scheme.md、references/protocol-spec.md を参照してください。
  • セルフファシリテーション:外部 URL を呼び出す代わりに、インプロセスのファシリテーターを実行します。references/typescript-sdk.md、references/go-sdk.md を参照してください。
  • トランスポート:決済データの送信方法です(HTTP ヘッダー、MCP _meta、A2A メタデータ)。references/transports.md を参照してください。
  • 拡張機能:オプション機能です(bazaar discovery、offer-receipt attestations、payment-identifier idempotency、sign-in-with-x auth、gas sponsoring、builder-code attribution、http-message-signatures、auth-hints)。references/extensions.md を参照してください。
  • フック:クライアント/サーバー/ファシリテーターのライフサイクルコールバックです(TS、Python、Go)。references/lifecycle-hooks.md を参照してください。
  • プロトコルの型:PaymentRequired、PaymentPayload、SettlementResponse です。references/protocol-spec.md を参照してください。
  • カスタムトークン:USDC 以外のトークンには registerMoneyParser を、EIP-3009 以外のトークンには Permit2 を使用します。references/evm-scheme.md を参照してください。
  • メインネットへのデプロイ:ファシリテーター URL、ネットワーク ID、ウォレットアドレスを切り替えます。references/core-concepts.md を参照してください。

参考資料

ファイル内容
references/core-concepts.mdHTTP 402 の基盤、クライアント/サーバー/ファシリテーターの役割、ウォレット ID、ネットワーク、トークン、カスタムトークンの設定、動的登録、セルフホスト可能なファシリテーター、メインネットへのデプロイ
references/protocol-spec.mdv2 プロトコルの型、決済フロー、ファシリテーター API、エラーコード
references/typescript-sdk.mdサーバー、クライアント、MCP、ペイウォール、ファシリテーター向けの TypeScript SDK パターン
references/python-sdk.mdサーバー、クライアント、MCP(サーバー+クライアント)、ファシリテーター向けの Python SDK パターン
references/go-sdk.mdサーバー、クライアント、MCP、ファシリテーター、署名者、カスタムの金額パーサー向けの Go SDK パターン
references/evm-scheme.mdEVM exact スキーム:EIP-3009、Permit2、デフォルトのアセット解決、registerMoneyParser、カスタムトークン
references/svm-scheme.mdSolana exact スキーム:SPL TransferChecked、検証ルール、二重決済の軽減
references/stellar-scheme.mdStellar exact スキーム:SEP-41 Soroban トークン転送、レジャーベースの有効期限、手数料のスポンサーシップ、TypeScript SDK のみ
references/upto-scheme.mdUpto(使用量ベース)スキーム:最大金額を承認し、実際の使用量を決済します。EVM では Permit2 のみ
references/aptos-scheme.mdAptos exact スキーム:代替性アセットの転送、手数料支払者によるスポンサーシップ、TypeScript SDK のみ
references/near-scheme.mdNEAR exact スキーム:NEP-366 SignedDelegate、NEP-141 ft_transfer、リレイヤーによるガスのスポンサーシップ、フルアクセスキーの要件、NEP-145 ストレージ登録
references/xrpl-scheme.mdXRPL exact スキーム:支払者が署名する Payment、手数料のスポンサーシップなし、明示的な AssetAmount の価格設定、sequence と ticketSequence
references/transports.mdHTTP、MCP、A2A のトランスポート実装
references/extensions.mdBazaar、payment-identifier、sign-in-with-x、ガスのスポンサーシップ(eip2612 + erc20)拡張
references/lifecycle-hooks.mdクライアント/サーバー/ファシリテーターのフック(TypeScript、Python、Go)、フックの連結、MCP フック

公式リソース

コメント