xpay について
xpayは、AIエージェント向けのウォレットおよび決済ツールです。複数ネットワークでのUSDC決済、サービス検索、AgenCでの依頼をCLI、SDK、MCPサーバーとして提供し、支出上限や承認条件も設定できます。
主な機能
- 01複数ネットワーク対応のUSDCウォレット
- 02x402サービスとAgenC掲載情報の検索
- 03x402決済とエージェントへの依頼
- 04トークンの送金・交換・取引
- 05支出上限と承認条件の設定
- 06CLI、SDK、MCPツールの提供
活用シーン
- 01エージェントでオンラインサービスを探して支払う
- 02AgenCを通じてオンチェーンの提供者に依頼する
- 03支出を制限し、決済に承認を求める
- 04ウォレットでトークンを送金または交換する
MCP 対応
stdioのMCPサーバーが、検索、決済、残高確認、送金、取引などのツールを提供します。ウォレットを自動作成するほか、既存のウォレットも利用できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
npx -y @xona-labs/xpayXPAY_PROFILEWallet profile to load or create (default: active profile, else "default")XPAY_PASSPHRASEシークレットEncrypts the auto-generated wallet at rest; also unlocks an existing encrypted profileXPAY_HOMEOverride the ~/.xpay/ data directoryXPAY_NO_AUTO_WALLETSet to error instead of auto-generating a wallet when none is configuredXPAY_SOLANA_SECRETシークレットUse an existing Solana secret key (base58) instead of the generated walletXPAY_EVM_KEYシークレットUse an existing EVM private key instead of the generated walletXPAY_EVM_NETWORKEVM network for XPAY_EVM_KEY (e.g. base, stable, base-sepolia)ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
34掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| limit | number | いいえ | 最大結果数。デフォルトは 5。 |
| query | string | いいえ | 探したい内容を自然言語で指定します。省略すると、ソース全体を閲覧します。 |
| network | string | いいえ | ネットワークを 1 つに限定します(solana、base など)。 |
| sources | array | いいえ | 特定のカタログに限定します。例:AgenC マーケットプレイスのみの場合は ['agenc']。デフォルト:すべて。 |
| minTrust | number | いいえ | ERC-8004 ID が登録済みで、平均評価スコアがこの値以上(0~100)の Solana 加盟店のみを返します(0 = 登録済み ID ならすべて)。ユーザーが信頼できる、または検証済みの加盟店を求めた場合にのみ設定してください。未登録の加盟店はすべて除外されます。 |
詳細
Xona Wallet
npm パッケージ
@xona-labs/xpay、xpayCLI、xpay_*MCP ツールとして提供されます。パッケージ名とコマンド名は変更されていません。
エージェント型コマース向けウォレット。 マルチネットワーク対応の USDC ウォレット、x402 決済、AgenC マーケットプレイスでの依頼、20,000 以上のサービスの検索に対応。CLI、SDK、MCP サーバーとして利用できます。
npm install -g @xona-labs/xpay
xpay init # creates Solana + EVM keys, encrypted
xpay discover "research API" # 21k x402 catalog + AgenC agent listings, ranked
xpay pay https://api.example.com/x402 # x402 one-liner
xpay agenc hire <listingPda> # hire an on-chain agent (SOL escrow)
xpay token find BONK # find any Solana token by ticker or mint
xpay swap 0.5 SOL BONK # swap in your own wallet via Jupiter
xpay transfer 5 USDC 7G73PL...gC # direct USDC transfer
xpay balance # unified across networks
xpay report # daily / weekly / monthly report via OrbitX402
// SDK - same primitives, programmatic
import { loadProfile, createXPay } from "@xona-labs/xpay";
const xpay = createXPay({ profile: await loadProfile({ passphrase }) });
const result = await xpay.do("translate this PDF to Japanese", { body: { file } });
Xona Wallet は、エージェント型コマースのウォレットおよび決済レールのレイヤーです。x402、USDC、RPC、マルチネットワークのルーティングをシンプルなインターフェースの背後に隠すため、エージェントのビルダー(Claude / Codex / OpenAI / Gemini / 独自のもの)は、決済処理を自ら実装せずにサービスを見つけて支払えます。
インストール
npm install -g @xona-labs/xpay # CLI + MCP server, system-wide
npm install @xona-labs/xpay # programmatic SDK in a project
クイックスタート
xpay init
# ✔ Profile "default" created at /Users/you/.xpay/default
# Solana 7RB7frdxPc9vZtuyq6YfNoWTJcDZsE2AcXXV6qkpf5ph
# EVM 0xA5D93CDB2bD16b2d1d3d19D45dad3FaBb1023dfa
# ⚠ RECOVERY PHRASE - write this down NOW. We cannot recover it for you.
# 1. depend 2. guess 3. mercy 4. online
# ... (24 words)
Solana メインネット、Base、または両方で、各アドレスに数ドル分の USDC を入金します。その後、次のようにします。
xpay balance
xpay discover "image generation"
xpay pay https://orbisapi.com/proxy/image-alt-text-generator-api-1c9472
CLI コマンド
| コマンド | 説明 |
|---|---|
xpay init [name] | プロファイルを作成します(1つの BIP-39 シードから Solana と EVM のキーを生成します)。フレーズから復元するには --import、開発用ウォレットでは --no-encrypt、ローカルに保存するには --workspace を指定します。 |
xpay accounts list | show | use | プロファイルの一覧表示、詳細確認、またはアクティブなプロファイルの設定を行います。 |
xpay balance | アクティブなプロファイルのネットワークごとのトークン残高と、ステーブルコインの合計を表示します。Solana、Base、その他の EVM チェーン、Robinhood Chain、Stable に対応しています。--network。 |
xpay discover [query] | チェーンをまたいだ 21k 以上の x402 サービス(Solana、Base、BNB Chain、その他の EVM ネットワーク)に加え、AgenC マーケットプレイスのエージェント掲載情報を検索します(ディスクにキャッシュされます)。Solana の加盟店には ERC-8004 の信頼度が表示されます。--network、--limit、--min-trust、--no-trust、--json。 |
xpay trust <wallet> | Solana 加盟店ウォレットの ERC-8004 エージェント ID と評判を確認します。読み取り専用で、ウォレットは不要です。--json。 |
xpay pay <url> | x402 エンドポイントに支払います。カタログ内の URL と、402 を返すあらゆる URL に対応しています。--max-usd、--body、-y。 |
xpay agenc hire <listingPda> | AgenC マーケットプレイスの掲載案件を依頼します。SOL の料金をオンチェーンでエスクローし、プロバイダーが非同期で作業します。--max-usd、--review-window、-y。 |
xpay agenc status <taskPda> | 依頼の進行状況を確認します(読み取り専用で、ウォレットは不要です)。--json。 |
xpay token find <query> | ティッカー、名称、またはミントアドレスで Solana トークンを検索します(Jupiter)。価格、時価総額、流動性、認証状況を表示します。読み取り専用です。--limit、--json。 |
xpay token rwa [query] | Solana で取引可能な RWA トークンを一覧表示します。トークン化された株式/ETF(xStocks、Ondo、Remora)と USDY が対象です。読み取り専用です。--category、--limit、--json。 |
xpay orders add | list | run | 株式の定期注文:トークン化された株式の定期購入と条件付きの単発注文を、cron、スケジューラー、またはエージェントから xpay orders run を実行して執行します。approve、cancel、pause、resume も使用できます。 |
xpay swap <amount> <from> <to> | ガードレールの制限に従い、Jupiter 経由でウォレット内のトークンをスワップします(Solana のみ)。--slippage-bps、-y。 |
xpay trade <amount> <from> <to> | ガードレールの制限に従い、Uniswap V3/NOXA Fun 経由で Robinhood Chain 上のトークンを取引します(ETH↔トークン)。--slippage-bps、--quote-only、-y。 |
xpay trending | Robinhood Chain でトレンドになっているトークンを一覧表示します(読み取り専用で、ウォレットは不要です)。--new、--limit。 |
xpay x user | posts <handle> | X(Twitter)アカウントのリアルタイムデータを取得します。プロフィール(約 $0.01)または最近の投稿(約 $0.06)を、x402 経由で実費支払いします。X アカウントは不要です。 |
xpay zauth reposcan <repoUrl> | パートナーの zauth によるリポジトリのセキュリティスキャンを行います。zauth スコアと来歴/脆弱性レポートを取得します(x402 経由で約 $0.05 USDC)。--json、-y。 |
xpay zauth status <sessionToken> | 実行中の zauth スキャンを確認します(無料、読み取り専用で、ウォレットは不要です)。--json。 |
xpay shop search "<query>" | 1つのクエリで Google Shopping、Amazon、eBay を横断して商品を検索します(x402 経由で約 $0.02 USDC。検索対象のマーケットプレイスが少ない場合はさらに安くなります)。--marketplaces、--price-min/max、--condition、--sort、--json、-y。 |
xpay shop quote "<query>" | 無料の事前確認です。正確な検索料金と、クエリの解析結果を表示します(ウォレットは不要です)。--json。 |
xpay transfer <amount> USDC <to> | ガードレールの制限に従い、ステーブルコインを直接送金します(USDC、または Stable 上の USDT0)。--network、-y。 |
xpay report | USDC の包括的な取引レポートを表示します。合計、純フロー、タイムライン、主な取引相手、最大の取引を確認できます。--period daily|weekly|monthly、--network、--json。 |
xpay guardrail show | set | clear | 支出上限と許可ホストを確認または編集します。 |
xpay biometric status | enable | disable | ウォレットのパスフレーズを Touch ID でロック解除できるようにします(macOS)。 |
xpay sana link | unlink | status | Sana API キーをリンクしてエージェントカードを有効にします(任意)。 |
xpay mcp | stdio で MCP サーバーを起動します(Claude Desktop/Cursor/Codex 用)。 |
すべてのコマンドは単一のプロファイルから実行されます。xpay accounts use <name>で切り替えます。 |
SDK
CLI は SDK を薄くラップしたものです。すべてのコマンドに、プログラムから直接呼び出せる同等の機能があります。
import {
createXPay,
initProfile,
loadProfile,
setProfileGuardrail,
} from "@xona-labs/xpay";
// One-time setup
const created = await initProfile({
name: "default",
passphrase: process.env.XPAY_PASSPHRASE!,
});
console.log(created.addresses); // { solana, evm }
console.log(created.mnemonic); // back this up; not persisted in plaintext
// Configure spending caps
setProfileGuardrail("default", {
maxPerTx: 0.5,
maxPerDay: 5,
allowedHosts: ["api.payai.network", "*.xona-agent.com"],
});
// Use
const profile = await loadProfile({ name: "default", passphrase: process.env.XPAY_PASSPHRASE });
const xpay = createXPay({ profile });
await xpay.discover({ query: "weather" });
await xpay.useByUrl("https://...");
await xpay.do("translate this PDF to Japanese");
await xpay.transfer({ amount: 1, to: "7G73PL...", token: "USDC" });
await xpay.report({ period: "weekly" }); // via OrbitX402 - no RPC calls from your code
await xpay.wallet.balance("solana");
エージェントランタイム
Xona Wallet には、主要な LLM SDK 3 種類向けのツール定義が含まれています。ハンドラーは同じで、スキーマの形式が異なります。
import Anthropic from "@anthropic-ai/sdk";
import { createXPay, forClaude, loadProfile } from "@xona-labs/xpay";
const xpay = createXPay({ profile: await loadProfile({ passphrase }) });
const { tools, handlers } = forClaude(xpay);
const response = await new Anthropic().messages.create({
model: "claude-sonnet-4-5",
tools,
messages: [{ role: "user", content: "find a cheap weather API and call it" }],
});
for (const block of response.content) {
if (block.type === "tool_use") {
const result = await handlers[block.name]!(block.input as Record<string, unknown>);
// ... feed result back to Claude
}
}
forOpenAI(xpay)とforGemini(xpay)は、同じハンドラーをベンダー固有のスキーマでラップして返します。ツールを使用するループ全体については、examples/claude-agent.tsをご覧ください。
MCP サーバー(Claude Desktop / Cursor / Codex)
Xona Wallet は公式 MCP Registryに
**io.github.xona-labs/xpay**として登録されています。レジストリに対応したホストは、この名前で検出して
インストールできます。それ以外の場合は、Xona Wallet をホストの設定に追加してください。
**コードもキーもxpay initも不要です。**初回起動時に、エージェントには
専用のウォレットが自動的に用意されます。
// ~/Library/Application Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"xpay": {
"command": "npx",
"args": ["-y", "@xona-labs/xpay", "mcp"]
}
}
}
設定はこれだけです。生成されたウォレットのSolana アドレスは初回実行時に stderr に出力されます。USDC を入金すれば、エージェントが支払いを行えます。ウォレットは~/.xpayに保存され、以降の起動時にも再利用されるため、アドレスは変わりません。
ホストにはコアツールが表示されます。xpay_discover、xpay_use、xpay_do、xpay_transfer、xpay_balance、xpay_report、xpay_guardrail、xpay_token_find、xpay_swap、xpay_trending_tokens、xpay_trade_quote、xpay_trade、xpay_x_user、xpay_x_posts、xpay_zauth_reposcan、xpay_zauth_scan_status、xpay_shop_search、xpay_shop_quote、xpay_shop_lens、xpay_shop_lens_quote、xpay_rwa_find、xpay_trust_check、xpay_order_create、xpay_orders_list、xpay_order_cancel、xpay_orders_run、xpay_agenc_statusに加え、インテントファイアウォールを管理するxpay_bento_status / xpay_bento_enable / xpay_bento_disableが表示されます。Sana キーをリンクしている場合(下記参照)、追加のsana_*ツール 8 個も自動的に登録されます。
代わりにご自身のウォレットを使用する場合 — ウォレットの参照順序は既存のプロファイル → キー環境変数 → 自動生成です。したがって、次のいずれを設定しても、生成されたウォレットより優先されます。
"env": {
"XPAY_SOLANA_SECRET": "<base58 key>", // use a wallet you already hold
"XPAY_PASSPHRASE": "<passphrase>", // or unlock/encrypt a profile
"XPAY_NO_AUTO_WALLET": "1" // or disable auto-generation entirely
}
macOS でプロファイルの生体認証によるロック解除を有効にしている場合、サーバー起動時にパスフレーズをホストの設定に保存する代わりに、Touch ID のダイアログが 1 回表示されます。
どのエージェントからでもこれらのツールを操作できる、フレームワークに依存しないガイドについては、**SKILL.md**をご覧ください。
プロファイル
各プロファイルは~/.xpay/以下のディレクトリで、次の内容が含まれます。
~/.xpay/
├── default/ (or any name)
│ ├── wallet.json BIP-39 seed, AES-256-GCM encrypted by default
│ └── config.json networks, guardrail, RPC overrides, link
└── cache/ disk cache of catalogs (auto-managed)
XPAY_HOME=/some/pathまたはxpay init --workspaceを使用すると、プロジェクトローカルのプロファイルに変更できます。
生体認証によるロック解除(macOS)
コマンドごとにパスフレーズを入力する代わりに、Touch ID でロックを解除できます。
xpay biometric enable # verifies your passphrase, then stores it Touch ID-gated
xpay balance # → Touch ID prompt instead of a passphrase prompt
xpay biometric status # availability + current state
xpay biometric disable # removes the keychain entry
仕組み:ウォレットの scrypt + AES-256-GCM 暗号化は変更されません。enableを実行すると、
パスフレーズがログインキーチェーンに保存され、小さなネイティブヘルパー(初回使用時に
~/.xpay/bin/へコンパイルされます。Xcode Command Line Tools が必要です)が、
LocalAuthentication による確認後にのみパスフレーズを取り出します。生体認証はパスフレーズの代わりになるのではなく、パスフレーズへのアクセスを制御します。
すべてのコマンドでのロック解除順序は、--passphraseフラグ → $XPAY_PASSPHRASE → Touch ID →
対話型プロンプトです。パスフレーズは引き続きどこでも使用でき、唯一の復旧手段として残ります。Touch ID が利用できない場合(または再暗号化後に保存済みのコピーが古くなった場合)、CLI はパスフレーズの入力を求めます。
macOS では、ヘルパーのキーチェーンアクセスを許可する確認が 1 回表示されます。**「常に許可」**を選択してください。 パッケージのアップグレード後はヘルパーが再コンパイルされるため、再び確認が表示されます。
ガードレール
ガードレールは署名者に触れる前に実行されるため、問題のあるエージェント(または侵害された LLM)がこれを回避することはできません。
xpay guardrail set \
--max-per-tx 0.5 \
--max-per-day 5 \
--require-approval-above 1 \
--allowed-hosts 'api.payai.network,*.xona-agent.com'
maxPerTx/maxPerDay:すべての有料の呼び出しと直接送金に適用されます。allowedHosts:x402 呼び出しのみに適用されます(送金先はホストではなくアドレスです)。maxPerTx/maxPerDay:すべての有料の呼び出しと直接送金に適用されます。allowedHosts:x402 呼び出しのみに適用されます(送金先はホストではなくアドレスです)。requireApprovalAbove:しきい値以上の呼び出しには、明示的な承認が必要です。CLI では、生体認証によるロック解除が有効な場合は Touch ID のプロンプトが表示され、それ以外の場合は y/n の確認が求められます。MCP サーバーでは Touch ID のみ(ターミナルなし)のため、エージェントによる高額の支払いは、実際に操作して承認するシステムダイアログとして表示されます。SDK では、onApprovalRequiredフックをプッシュ通知、生体認証、Webhook など、任意の方法に接続できます。
セキュリティ - Bento インテントファイアウォール(オプション)
支出上限はエージェントによる過剰な支出を防ぎますが、正当な支払いとプロンプトインジェクションによる支払いを見分けることはできません。オプションの Bento レイヤーはAI インテントファイアウォールを追加し、すべての有料の呼び出しと送金について、悪意のある意図(プロンプトインジェクション、ウォレットの資金流出、意図と実行の不一致)がないか、署名前に審査します。これはガードレール内で、ローカルの上限チェックを通過した直後に実行されます。
xpay bento enable # prints the agent wallet address to register
xpay bento status # whether screening is active
xpay bento disable # turn off - falls back to local caps only
API キーは不要です。Bento はウォレット自体のキーで認証します。手動で行うのは、エージェントのウォレットをapp.bentoguard.xyzで一度だけオンチェーン登録することです(オーナーのウォレットでログインしてください。エージェントのウォレットが登録されるまでは、Agent not foundとして支払いが拒否されます)。
審査された呼び出しごとに、判定が返されます。
ALLOW:承認済みです。Xona Wallet が通常どおり署名します。BLOCKED:重大な脅威として検出されました。Xona Wallet は署名前にエラーを発生させるため、資金は移動しません。ESCALATED:判定が曖昧です。Xona Wallet はonApprovalRequiredフックに判断を委ねるか、安全側に倒して処理を失敗させます。
エージェントは MCP 経由でも管理できます:xpay_bento_status、xpay_bento_enable、xpay_bento_disable(ウォレットがまだ登録されていない場合は、無効化が緊急回避手段になります)。
Sana エージェントウォレットカード(オプション)
Xona Wallet は Sana とのオプションの連携に対応しています。Visa が使える場所ならどこでも、AI が実店舗で支払いできる、エージェント向けのカードです。
有効にすると、Xona Wallet に2つ目のウォレット機能が追加されます。エージェントによる x402 決済用のオンチェーン USDC(xpay)と、それ以外の支払い用の Sana カード(法定通貨)です。この2つは自然に連携し、残高が少なくなった場合、エージェントは Xona Wallet のウォレットからカードにチャージできます。
有効化
- sana.botでアカウントを作成し、
sana.bot/gateway/app/api-keysで API キーを生成します(読み取り専用の操作はすべてread:allで対応します。入金とスワップにはwrite:cardを追加してください)。 - Xona Wallet のプロフィールにリンクします:
xpay sana link sana_live_...
xpay sana status # confirm it's stored
- MCP クライアントを再起動します。標準の
xpay_*ツールと並んで、8つのsana_*ツールが自動的に表示されます。
登録されるツール
| ツール | 機能 |
|---|---|
sana_card | カードのメタデータ(種類、ステータス、末尾4桁、有効期限) |
sana_card_balance | カードで利用可能な支出額 |
sana_card_deposit | Sana ウォレットの USDC でカードにチャージ |
sana_card_transactions | カードの利用履歴(ページ分割) |
sana_portfolio | Sana ウォレットの純資産とトークン保有状況(24時間の変動を含む) |
sana_price | 任意のトークンのリアルタイム USD 価格と24時間の変動 |
sana_swap | Sana ウォレット内でトークンをスワップ |
sana_notifications | Sana ウォレットの最近のアクティビティフィード |
SDK の使用方法
forClaude / forOpenAI / forGeminiに API キーを渡すと、エージェントのループに Sana ツールを含められます:
import { createXPay, loadProfile, forClaude } from "@xona-labs/xpay";
const xpay = createXPay({ profile: await loadProfile({ passphrase }) });
const { tools, handlers } = forClaude(xpay, {
sanaApiKey: process.env.SANABOT_API_KEY,
});
// tools now includes both xpay_* and sana_* entries
または、環境変数にSANABOT_API_KEYを設定します。MCP サーバーがこれを読み取るため、コードを変更する必要はありません。
リンク解除
xpay sana unlink # removes the key from the profile
次回の再起動後、MCP サーバーからsana_*ツールが削除されます。
AgenC マーケットプレイス - オンチェーンエージェントを利用する
AgenC は、登録済みエージェントがオンチェーンのエスクローを使ってサービスを販売する Solana メインネットのマーケットプレイスです。利用可能な出品は x402 サービスとともに xpay discover に表示されますが、実行方法は異なり、xpay が自動的に振り分けます。
| x402 サービス | AgenC の出品 | |
|---|---|---|
| 価格の通貨 | USDC | ネイティブの SOL |
| 支払い | HTTP X-Payment ヘッダー | オンチェーンの エスクロー(プログラム HJsZ…w1xK) |
| 結果 | 即時の HTTP レスポンス | 利用レシート - プロバイダーが非同期で作業します |
| 決済 | 即時 | レビュー期間の終了後(デフォルトは 24h) |
xpay discover "research" # AgenC listings show as “agenc escrow”, priced in ◎SOL
xpay agenc hire <listingPda> # confirm → escrow SOL → get a task PDA
xpay agenc status <taskPda> # poll: open → claimed → review → settled
SDK と MCP でも同じスマートルーティングが機能します。xpay.use(resource) / xpay_use が agenc-hire 支払いスキームを検出してエスクローのフローを実行し、レシート(task、txSig、エクスプローラーのリンク)を data として返します。利用は AgenC の人手不要のエントリーポイントを通じて行われ、タスクは CreatorReview に固定されます。あなたが承認しない限り、エスクローされた資金が自動的に解放されることはありません。
注意:
- ディスカバリーでは、AgenC が公式 SDK クライアントを介して提供するホスト型インデクサーを読み取ります。これは AgenC がドキュメントで案内している統合方法です。また、利用時には世代の異なるシードスキームにまたがってオンチェーンのモデレーション証明を検索するため、AgenC が頻繁にプログラムをアップグレードしても xpay は引き続き動作します。アップグレード後に再証明されていない出品は、支払いが行われる前に明確なメッセージを表示してフェイルクローズします。
- ガードレールは利用にも適用されます。SOL の価格は現物価格(複数フィード、キャッシュあり)で USD に換算され、署名前に
maxPerTx/maxPerDayと照合されます。価格フィードに接続できず上限が設定されている場合、利用はフェイルクローズします。 - ウォレットには USDC だけでなく、SOL(エスクローと手数料)が必要です。
- 現時点では、結果のレビューと承認は agenc.ag で行います。
xpay agenc acceptは今後提供予定です。 - 設定(任意):プロファイルに
agenc: { rpcUrl, reviewWindowSecs, endpoint }を設定するか、XPAY_AGENC_ENDPOINTを設定します。XPAY_DISCOVERY_SOURCES=orbitx402を設定すると、ディスカバリーソースから除外できます。
トークンのディスカバリーとスワップ(Solana)
Jupiter のメタアグリゲーターを介して、キー不要で、自分のウォレットから任意の Solana トークンをティッカーまたはミントアドレスで検索し、スワップできます。
xpay token find BONK # price, mcap, liquidity, mint, ✓ verified / ⚠ unverified
xpay swap 0.5 SOL BONK # quote → confirm → execute (guardrail-gated)
xpay swap 1000 BONK USDC --slippage-bps 50
const tokens = await xpay.findTokens("BONK"); // ranked verified-first
const quote = await xpay.swapQuote({ amount: 0.5, from: "SOL", to: tokens[0].mint });
const result = await xpay.swap({ amount: 0.5, from: "SOL", to: tokens[0].mint });
注意:
- 検証は重要です。 誰でも実在するティッカーを再利用したトークンを発行できます。ティッカーのみで検索すると、Jupiter の検証済みトークンだけが対象になります。あいまいなティッカーでは候補リストとともにエラーが返され、未検証のトークンは正確なミントアドレスを指定する必要があります。
xpay token findで検証状況を確認できます。 - ガードレールが適用されます。 入力側の価格は USD(Jupiter 独自の推定値)で算出され、署名前に
maxPerTx/maxPerDayと照合されます。上限が設定されているときにトークンの価格を算出できない場合は、フェイルクローズします。スワップはウォレット内で完結し、外部の受取先を指定しないため、allowedHostsは適用されません。 - スリッページはデフォルトで Jupiter の動的スリッページが使われます。呼び出しごとに(
--slippage-bps)、またはプロファイルごとに(swap.slippageBps)上書きできます。 - デフォルトではキー不要です(共有バケットで約 20 req/s)。上限を引き上げるには
JUPITER_API_KEY(またはプロファイルのswap.apiKey)を設定します。XPAY_JUPITER_ENDPOINTで API のベース URL を上書きできます。 - これは、自分の xpay ウォレットで行うネイティブスワップです。別途提供される
xpay sana swapは Sana ホスト型ウォレット内でスワップを行い、Sana API キーが必要です。
マーチャントの信頼性(Solana上のERC-8004)
なじみのないサービスに支払う前に、相手が誰なのか確認しましょう。Solanaのマーチャントウォレット(x402のpayTo)は、ERC-8004 Trustless AgentsのSolana実装である8004-solanaレジストリで検索されます。このレジストリは、エージェントのアイデンティティ(Metaplex Coreアセット)とオンチェーンのクライアントフィードバックを提供し、任意でATOMスコアリング(信頼ティア、品質、信頼度、リスク)にも対応します。無料、読み取り専用で、ウォレットは不要です。
xpay trust 28heAMpFkeUJsL7o7apiK4oJwZWq2fUHinRwbgYYsemG # identity, 0-100 feedback score, review count, SAID identity
xpay discover "token price" --network solana # each Solana result shows a trust line
xpay discover "data" --min-trust 50 # only registered merchants scoring >= 50
const trust = await lookupMerchantTrust(payTo); // { registered, agent: { name, avgScore, feedbackCount, atom? }, summary, said? }
const results = await xpay.discover({ query: "data", minTrust: 0 }); // resource.trust on each result
注意事項:
- ウォレットはエージェントの運用用
agent_walletまたはそのownerと照合されます。複数のアイデンティティが同じウォレットを共有している場合、最も強いもの(ATOMティア、次にレビュー数、次にスコア)が返され、agentCountも表示されます。 avgScoreはクライアントフィードバックの平均(0~100)です。ATOMのqualityは信頼度で重み付けされるため、エージェントにフィードバックが蓄積されるまでは低い値を保ちます。両者を同じものとして扱わないでください。- ほとんどのマーチャントはまだ登録されていないため、「アイデンティティなし」は通常の状態であり、警告ではありません。
--min-trust/minTrustは候補を(50件)多めに取得しますが、それでも結果が空になる場合があります。 - 検索はレジストリの公開インデクサー(
8004-indexer-main.qnt.sh、キー不要、IPあたり毎分100リクエスト)を通じて行われ、ウォレットごとに1回実行されます。結果は否定的な結果も含めて10分間キャッシュされます。XPAY_8004_INDEXERで上書きできます。--no-trust/trust: falseを指定するとスキップされます。検索に失敗しても、ディスカバリーが失敗することはありません。 - 現時点ではSolanaのみ対応しています。EVMのERC-8004レジストリには、オンチェーンでウォレットからエージェントを逆引きする機能がありません。
- SAID Protocolでも同じウォレットを確認し、ERC-8004の隣に
trust.saidとして表示します(null= SAIDアイデンティティなし)。verified、tier、badges、0~100のscoreが含まれます。このスコアは、アイデンティティ、活動、継続期間のシグナルを組み合わせたSAID独自のスコアであり、クライアントフィードバックではありません。そのため、レビューがゼロでもエージェントのスコアが高くなることがあります。8004のavgScoreと統合されることはなく、--min-trustによるフィルタリングも引き続き8004のスコアのみを対象とします。XPAY_SAID_APIでAPIベースURLを上書きできます。SAIDの検索に失敗した場合は、saidが設定されないだけです。 - MCP:
xpay_trust_check(無料)。また、xpay_discoverの結果にはtrustが含まれ、任意のminTrustフィルターを指定できます。
RWAの検索(Solana)
取引可能な実物資産トークンを一覧表示します。RWAはオフチェーン資産をトークン化したもの全般を指します。現在SolanaのDEXで実際に取引されているのは、主にトークン化された株式/ETF(TSLAx/SPYxなどのBacked xStocks、TSLAon/GLDonなどのOndo Global Markets、Remora、Backpack Securities)と、米国債を裏付けとするイールドコインUSDYです。無料、読み取り専用で、ウォレットは不要です。
xpay token rwa # full list, verified-first by liquidity
xpay token rwa tesla # matches TSLAx (Backed) and TSLAon (Ondo)
xpay token rwa --category treasuries # USDY
xpay swap 10 USDC TSLAx # swap into one (guardrail-gated)
const rwas = await xpay.findRwaTokens({ query: "nvidia" }); // NVDAx, NVDAon
注意事項:
- Jupiterの検索APIをくまなく調べ、Jupiter独自の
rwa/stocks/xstocksトークンタグで絞り込みます(タグエンドポイント自体はこれらのタグを受け付けません)。そのため、一覧はJupiterで検証済みで、価格はリアルタイムです。結果はプロセス内で5分間キャッシュされます。 - トークン化された株式は原資産の価格に連動しますが、**発行体に対する債権(トラッカー証明書)**であり、証券会社の株式ではありません。議決権はなく、発行体のリスクが伴います。
- Solana上の許可制ファンド(BlackRock BUIDL、Ondo OUSG)は対象外です。KYCが必要で、Jupiterで検証されておらず、DEXの流動性もないため、いずれにしてもスワップできません。
- MCP:
xpay_rwa_find(無料)。返されるトークンはすべて、xpay_swap/xpay swapでUSDCからスワップできます。
継続的な株式注文
トークン化された株式(xStocks およびその他の Solana 発行元)を対象とする定期購入と条件付きの単発注文です。ウォレットのプロフィールに保存されるため、どのエージェントフレームワークからでも作成でき、どのスケジューラーからでも実行できます。
xpay orders add buy 25 SPY --every weekly --budget 500 # $25 of SPYx every week, $500 total
xpay orders add buy 100 NVDA --max-premium 0.5 --market-hours # once, when the premium is <= 0.5% during US hours
xpay orders list # status, caps used, why an order is still waiting
xpay orders run --dry-run # what would fill right now, nothing signed
xpay orders run # execute due orders (cron: */15 * * * *)
await createStockOrder(profile.path, { side: "buy", stock: "SPY", amount: 25, every: "weekly", limits: { maxTotalUsd: 500 }, approved: true });
const report = await runDueOrders(profile.path, xpay, { maxPerDay: 200 });
実行時は、期限と上限を確認し、次に(--market-hours が指定されている場合は)市場の取引時間を確認し、その後、通常の株式取引と同じチェック(検証済みトークン、流動性の下限、実際の株価に対する不利なプレミアム/ディスカウント(デフォルトは 2%))を行い、最後にプロフィールの maxPerDay を確認します。条件を満たさない注文は、その理由を報告して次回の実行を待ちます。定期注文は予定間隔を維持し、実行できなかった期間分をまとめて処理することはありません。
実行は通常、無人で行われるため、安全性を次のように確保しています。
- すべての注文に期限または上限があります。 定期注文には
--budgetおよび/または--max-fillsが必要です。単発注文のデフォルトの有効期限は 7 日です。 - エージェントは注文を有効化できません。
xpay_order_createは注文をpending_approvalとして保存します。有効化できるのはxpay orders approve <id>(端末を操作する人間)のみです。エージェントは注文の一覧表示、キャンセル、実行ができますが、実行されるのは承認済みの注文だけです。 - 複数回の実行を通じて日次上限が適用されます。
maxPerDayは永続化された約定ログを基に適用されるため、別々の cron 実行ごとに日次の利用枠がリセットされることはありません。 - 二重購入は発生しません。 送信されたものの確認できていない約定があると、注文は
needs_reviewに保留されます。ウォレットを確認してからxpay orders resume <id>を実行してください(約定していた場合は--filledを追加します)。ガードレールによる拒否(1 取引あたりの上限、承認しきい値)が発生すると、注文はblockedに保留されます。一度に実行できる注文は 1 件だけです。 - トークンは注文作成時に固定されます(SPY → SPYx mint)。そのため、後の実行で別の発行元のトークンに解決されることはありません。
無人で実行するには、ウォレットのロックを解除しておく必要があります。スケジューラーの環境に XPAY_PASSPHRASE を設定してください(午前 3 時に Touch ID の確認を求めることはできません)。requireApprovalAbove を超える購入は、TTY がなければ拒否され、注文はブロックされます。MCP:xpay_order_create、xpay_orders_list、xpay_order_cancel、xpay_orders_run。
Robinhood Chain での取引
自分のウォレットから、API キーなしで Robinhood Chain(Robinhood の Arbitrum L2、chain 4663)上の NOXA Fun ミームコイン市場を取引できます。NOXA Fun のトークンは、ネイティブ ETH 建ての Uniswap V3 プールでローンチされるため、通常のオンチェーン V3 取引を行います。QuoterV2 で見積もりを取得し、SwapRouter02 で実行します。トレンド/新着トークンの発見と USD 価格の取得には、GeckoTerminal の公開 API を使用します。
xpay trending # what's hot on Robinhood Chain (free, no wallet)
xpay trending --new # freshest launches (higher risk)
xpay trade 0.01 ETH 0x020bfc…18b4 # buy a token with native ETH → quote → confirm → execute
xpay trade 5000 0x020bfc…18b4 ETH # sell it back to ETH
xpay trade 0.01 ETH CASHCAT --quote-only # preview without trading (symbol resolved via trending)
const hot = await xpay.trendingTokens({ limit: 10 }); // symbol, address, price, volume
const quote = await xpay.tradeQuote({ amount: 0.01, from: "ETH", to: hot[0].address });
const result = await xpay.trade({ amount: 0.01, from: "ETH", to: hot[0].address }); // → { txHash, ... }
注意事項:
- 対象範囲: ETH ⇄ トークンのみ(ネイティブ ETH で購入し、ETH に売却)。購入時は ETH を自動でラップし、売却時は 1 回のトランザクションで WETH を ETH に戻します。
- ガードレールが適用されます。 入力側は USD 価格(GeckoTerminal のスポット価格)で評価され、署名前に
maxPerTx/maxPerDayに照らしてチェックされます。xpay swapと同じ制限です。 - 検証: NOXA Fun のローンチと確認されたトークンは検証済みとしてマークされます。それ以外は
unverifiedとして扱われます(ミームコインのティッカーは一意ではないため、正確なコントラクトアドレスの指定を推奨します)。NOXA の 1 取引あたりの上限/最大ウォレット保有量を超えるかどうかは署名前にチェックされます。違反する購入はオンチェーンで失敗する前にエラーとなり、上限に近い取引は見積もりで警告されます。 - ガス: x402 決済とは異なり、取引は自分のウォレットからブロードキャストされるため、Robinhood Chain 上でガス代に使う少量の ETH が必要です。Across または Uniswap ブリッジを使ってブリッジしてください。RPC の上書き設定:プロフィールの
rpcs.robinhood。 - スリッページ: デフォルトは 100 bps(1%)です。呼び出しごとに(
--slippage-bps)、またはプロフィールごとに(trading.slippageBps)上書きできます。 - 残高:
xpay balanceは、Robinhood Chain 上の ETH と保有するすべての ERC-20 を一覧表示します(チェーンの Blockscout エクスプローラーを使用)。ここで購入したトークンも自動的に表示されます。エクスプローラーの上書き設定:XPAY_ROBINHOOD_EXPLORER。 xpay swap(Solana/Jupiter)とは別の機能です。GMGN は評価しましたが、Robinhood Chain に対応していないため採用していません。
リアルタイムの X(Twitter)データ
エージェントは、セットアップ不要で X アカウントの最新データを取得できます。X の開発者アカウントも API キーも必要ありません。xpay は x402 でアクセスが制限された xona のプロキシにリクエストごとに支払い、X の従量課金をそのままの料金(上乗せなし)で転嫁します。
xpay x user jup_ag # profile: followers, bio, verification (~$0.01)
xpay x posts jup_ag # 10 recent posts + engagement metrics (~$0.06)
MCP:xpay_x_user / xpay_x_posts — 典型的な流れはトークンのデューデリジェンスです。xpay_token_find → プロジェクトの X アカウントを確認 → 問題がなければスワップします。支払いは通常の x402 フローを通じて行われるため、ガードレールの上限が適用されます。エンドポイントの上書き:XPAY_XDATA_ENDPOINT
zauth リポジトリのセキュリティスキャン
zauth の x402 決済ゲート付きスキャナー(パートナー連携)を使って、任意の Git リポジトリのコードの来歴と脆弱性をスキャンできます。zauth スコア(0~100)と Markdown 形式の分析結果が返されます。料金が発生するのはスキャン開始時のみです(Solana または Base で約 0.05 USDC)。ガードレールの上限が適用されます(プロフィールで allowedHosts を制限している場合は、api.zauth.inc を追加してください)。ステータス確認は無料で、ウォレットも必要ありません。
xpay zauth reposcan https://github.com/owner/repo # paid: starts the scan (or returns a cached report)
xpay zauth status <sessionToken> # free: poll a still-running scan
スキャン結果は、キャッシュ済みのレポートとしてすぐに返されるか、{ status: "scanning", scanId, sessionToken } として返されます。xpay は無料のステータスエンドポイントを自動的にポーリングし、待機時間を超えてスキャンが続く場合は sessionToken を渡します。フォローアップには scanId ではなく sessionToken(約 1 時間有効な JWT)を使用してください。
MCP:xpay_zauth_reposcan(有料、最大約 90 秒間ポーリング)/ xpay_zauth_scan_status(無料のフォローアップ)。エンドポイントの上書き:XPAY_ZAUTH_ENDPOINT
xona ショップの商品検索
xona の x402 決済ゲート付き /shop/search エンドポイント(パートナー連携)を使うと、自由入力のクエリ 1 つで Google Shopping、Amazon、eBay の商品を検索できます。クエリパーサーは、自然言語から価格帯、商品の状態、並べ替え条件を抽出します。結果は単一のスキーマに正規化され、重複が除去され、順位付けされて返されます。料金は検索するマーケットプレイスの数に応じて変わります。3 つすべての場合は約 0.02 USDC、絞り込むとそれより安くなります(最低料金は 0.005 ドル)。支払いは通常の x402 フローを通じて行われるため、ガードレールの上限が適用されます(プロフィールで allowedHosts を制限している場合は、api.xona-agent.com をリストに追加してください)。
xpay shop quote "used thinkpad x1 under $600" # free: exact price + parsed intent, no wallet
xpay shop search "used thinkpad x1 under $600" # paid: quotes first, confirms, then searches
xpay shop search "sony wh-1000xm5" --marketplaces amazon,ebay --sort price_asc
shop search は確認を求める前に無料の見積もりを自動的に実行し、パーサーがクエリを商品検索ではないと判定した場合は支払いを拒否します(そのようなクエリで有料検索を実行すると、料金が発生する一方で結果は 0 件になります)。
MCP:xpay_shop_search(有料)/ xpay_shop_quote(無料の事前確認。クエリが曖昧な場合、エージェントは先に見積もりを取得してください)。MCP の結果はコンテキスト用に簡潔化されます(画像、順位、スコアの各フィールドは削除されます)。xpay shop search --json では完全なペイロードを取得できます。エンドポイントの上書き:XPAY_SHOP_ENDPOINT
Shop レンズ:画像による商品検索
同じパートナーは、写真から「これは何で、どこで買えますか?」という質問にも対応します。画像を /shop/lens に渡すと、Google Lens が商品と取り扱い店舗を特定し、結果を /shop/search と同じスキーマに正規化します。モードは 2 種類あります。identify(デフォルト、約 $0.02 USDC)は、画像に一致する商品と、そこから導出した商品名を返します。shop(3 つすべてのマーケットプレイスで約 $0.04)は、さらにその商品名を Google Shopping、Amazon、eBay で検索し、価格を比較します。
レンズエンジンが受け付けるのは、インターネットからアクセスできる http(s) URL のみです(SerpAPI が画像を取得するため、data URI は受け付けません)。そのため、MCP ツールでは次の 3 種類からいずれか 1 つだけを画像入力として受け取ります。image_url(そのまま使用)、image_path(ローカルファイル)、image_base64(生データまたは data URI)。ローカルファイルと base64 は、最初に無料で xona の公開画像ホストへアップロードされます(JPEG/PNG/GIF/WebP、マジックバイトから形式を判定、上限 25MB)。アップロードされた URL は再利用できるよう、hosted_image_url として返されます。これにより、添付ファイルをアップロードするチャットクライアント(Hermes など)からの画像も利用できます。バイト列を渡すだけで、自動的に公開 URL へ変換されます。
MCP:xpay_shop_lens(有料)/xpay_shop_lens_quote(無料の事前確認:画像 URL にインターネットからアクセスできるかを検証し、正確な料金を報告します。ウォレット不要)。image_url を渡す場合、URL が実際には利用できなくても有料処理が課金されるため、エージェントは先に見積もりを取得してください。アップロードの場合、ホストされた URL には常にアクセスできるため、事前確認は不要です。画像が商品写真ではないとレスポンスで示された場合、mode=shop で再試行しても解決しません。
マルチネットワーク
init はデフォルトで Solana と Base を設定します。~/.xpay/<name>/config.json で追加または変更できます。
{
"version": 1,
"networks": ["solana", "base", "arbitrum", "stable"],
"defaultNetwork": "solana",
"rpcs": {
"solana": "https://your-helius-endpoint",
"base": "https://your-alchemy-endpoint",
"stable": "https://rpc.stable.xyz"
}
}
開発では公開 RPC を使用できますが、厳しいレート制限があります。本番環境では、専用の RPC エンドポイントを設定してください。
Stable チェーン
Stable(チェーン 988。Tether/Bitfinex の決済用 L1)は、ウォレットネットワークとして正式にサポートされています。決済には USDC ではなく、USDT0(0x779Ded0c9e1022225f8E0630b35a9b54bE713736 にある LayerZero OFT。ERC-20 として小数桁数は 6)を使用します。
同じ派生 EVM キーで対応するため、stable が networks に含まれているかどうかにかかわらず、すべてのプロファイルに Stable の署名者が登録されます。xpay init を再実行する必要はありません。
xpay balance # includes a stable row: USDT0 + native USDT gas
xpay balance --network stable
xpay discover "image generation" --network stable
xpay transfer 1.5 0xRecipient --network stable # sends USDT0
注意事項:
- 決済はガス代不要です。 Stable 上の x402 呼び出しでは、EIP-3009 の
transferWithAuthorizationに署名し、ファシリテーターがブロードキャストするため、ウォレットに必要なのは USDT0 のみです。ネイティブトークンのガス代は不要です。直接実行するxpay transferはウォレットからブロードキャストされるため、この方法ではガス代用に少量のネイティブ USDT が必要です。 - EIP-712 ドメインはデフォルトの USDC ではなく、
USDT0/1です。 xpay では値をハードコードしていません。ドメインは、ライブの 402 チャレンジにあるextraから読み取ります(このコントラクトではversion()とeip712Domain()の両方がリバートするため、これが唯一信頼できる情報源です)。 - 同じ名称のトークンが 2 種類あります。 ネイティブのガストークンは小数桁数 18 の USDT で、x402 の決済に使用する ERC-20 は小数桁数 6 の USDT0 です。
xpay balanceでは別々に表示されます。 - ルーティングは自動です。
eip155:988を指定する 402 は Stable の署名者に解決され、複数のチェーンが提示されている場合、use()は価格に対して USDT0 の残高を比較します。 - RPC の上書き:プロファイルの
rpcs.stable(デフォルトはhttps://rpc.stable.xyz)。エクスプローラー:stablescan.xyz。
仕組み
- 鍵:プロファイルごとに1つの BIP-39 ニーモニックから、Solana(
m/44'/501'/0'/0'、Phantom 互換)と EVM(m/44'/60'/0'/0/0、MetaMask 互換)のキーペアを導出します。保存時は scrypt + AES-256-GCM で暗号化します。 - 検出:カタログには、複数のチェーン(Solana、Base、BNB Chain、その他の EVM ネットワーク)にわたる21,000件以上の x402 エンドポイントと、AgenC マーケットプレイスのリスティングが含まれており、独立したソースから統合されています(
Promise.allSettledを使用するため、1つのソースでエラーが発生しても検出全体には影響しません)。フェッチャーは各 API のページネーションをたどり、すべてのエントリーを Zod スキーマで検証し、~/.xpay/cache/に保存するため、2回目以降の検索ではコールドフェッチの負荷を回避できます(--network/discover({ networks })でフィルターし、discover({ sources })またはXPAY_DISCOVERY_SOURCESでソースを選択します)。 - 支払い:
use()とuseByUrl()はどちらも、ガードレールチェック → 適切なネットワークで signer.pay(USDC) を実行 →X-Paymentヘッダーを追加 → リトライ、の順に処理します。署名者の抽象化により、Solana SPL の送金と EVM ERC-20 の送金で同じコードパスを使用できます。AgenC のリソースはagenc-hire支払いスキームで検出され、オンチェーンのエスクローフローに振り分けられます。同じuse()呼び出しで、異なる決済経路を使用します。 - レポート:包括的な USDC 取引履歴(毎日/毎週/毎月)を OrbitX402 API から取得します。オンチェーンデータはサーバー側で解決されるため、xpay からの RPC 呼び出しやレート制限はなく、RPC キーも不要です。
プロジェクトのステータス
v0.2.14(現在):
- ✅ CLI:init、accounts、balance、discover、pay、agenc、token、swap、x、zauth、shop、transfer、report、guardrail、mcp
- ✅ SDK:CLI と完全に同等の機能。Claude / OpenAI / Gemini 向けのツールエクスポーター
- ✅ Bento インテントファイアウォールを含む23個のツールを備えた、stdio 上の MCP サーバー
- ✅ Solana トークン検出 + ネイティブ Jupiter スワップ(
xpay token find、xpay swap) - ✅ x402 経由で、リアルタイムの X(Twitter)データを低コストで取得(
xpay x user|posts) - ✅ x402 経由で、zauth によるリポジトリのセキュリティスキャンを実行(
xpay zauth reposcan) - ✅ x402 経由で、xona shop の商品を検出(
xpay shop search)。無料の見積もり事前確認に対応 - ✅ 継続的な在庫注文(
xpay orders):定期購入 + 条件付きの単発注文。人間による承認に対応し、実行は冪等です - ✅ Solana 上の ERC-8004 マーチャント信頼(
xpay trust、信頼ラインはxpay discoverに表示) - ✅ Solana 上の RWA 検出(
xpay token rwa):トークン化された株式/ETF + USDY。xpay swapでスワップ可能 - ✅ ディスクキャッシュ対応の Solana + Base メインネット
- ✅ Sana エージェントカードのオプション連携(
xpay sana link):追加のsana_*ツール8個 - ✅ AgenC マーケットプレイスを検出ソースとして追加 + スマートルーティングによる SOL エスクロー雇用(
xpay agenc hire|status)
予定:
bridge:CCTP(Circle のネイティブなバーン/ミント)を介した USDC EVM ↔ SVM のブリッジlink / unlink:オプトイン方式のクラウド同期(監査ログ、ダッシュボード)- 追加の検出ソースとして、Pay カタログ + xona-labs カタログを追加
xpay agenc accept|rate:CLI を離れずに AgenC の雇用結果をレビュー
ライセンス
MIT - LICENSE を参照。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。