← ホームへ戻る
🤖 MCP API · エージェント境界層 · SOLANA
◐ 現在 DEVNET 稼働 · 監査完了後に MAINNET

Sakura MCP API

HTTP は情報交換を定義した。x402 は価値交換を定義する。

任意の MCP クライアント——Claude Desktop、Cursor、VS Code、あるいはあらゆる自律 AI エージェント——が、Sakura の 3 つのエージェント実行境界ツールを直接呼び出せる:意図署名、証明付き実行、オンチェーン動作検証。各呼び出しは、HTTP 402 により、オンチェーンの $1 USDC で原子的に決済される。アカウント不要、サブスクリプション不要、OAuth 不要——認証そのものが決済である。

WHY x402

インターネットが誕生したとき、HTTP はマシン間の「情報」の交換を定義した。エージェント経済(Agentic Economy)の時代、AI エージェントは、人間の介入なしに、自律的にサービスを呼び出し、自律的に支払いを完了せねばならない。従来のサブスクリプション、OAuth 認可フロー、人間による承認ゲート——これらは人間のために設計されており、マシンのためではない。x402(HTTP 402 Payment Required)は、Stripe が 2025 年に Machine Payments Protocol として再提案したものの、オンチェーン・ネイティブな実装である——1 つの API 呼び出し、1 つのオンチェーン USDC 支払い、1 つの原子確認。中間者なし、アカウントシステムなし、待機なし。Sakura は、エージェント実行境界層の領域において、x402 を本番環境で最初に実装したプロジェクトである。

3 つの呼び出し可能ツール
ツール I · 意図署名

エージェントまたはウォレットが、ユーザーに代わって意図署名フローを開始する——7 つのプライベートなポリシー値(意図テキスト、ウォレット、ノンス、金額上限、USD 上限、プロトコルビットマップ、アクションビットマップ)が、2 層の Poseidon ツリーを経て 32 バイトのコミットメントに畳み込まれる。sign_intent 命令が Solana に提出され、コミットメントはユーザーのウォレットをシードとする PDA に書き込まれる。戻り値:コミットメントハッシュ、PDA アドレス、sign_intent の tx signature。名目額の 0.1% の一回限り手数料が適用される(統合者の最初の $10M 分はリベート)。

tool: sign_intent · params: bounds, wallet, amount_cap, usd_cap, protocols, actions, expiry
ツール II · エージェント実行

エージェントが、Groth16 証明と束ねた DeFi 動作を提出します——クライアントはローカル(ブラウザの snarkjs、またはバックエンド)で証明を生成し、Sakura MCP サーバーに提出します。サーバーは、execute_with_intent_proof の検証命令と DeFi 命令を、単一の Solana v0 アトミックトランザクションに束ね、メインネットに提出します。同じトランザクション内で Pyth と Switchboard を同時に読み、USD 上限はその中央値で決済され、乖離が 100 bps を超えれば拒絶されます。オンチェーンの alt_bn128 ペアリング検証は約 116k CU、execute 経路全体の実測平均は約 204k CU——証明が通過してはじめて、DeFi 命令は着地します。戻り値:tx signature、action_nonce、keccak256 指紋、双予言機の中央値。

tool: execute_with_proof · params: intent_commitment, proof, public_inputs, defi_instruction
ツール III · 監査検証

監査人、法律顧問、コンプライアンス機関は、過去の任意のエージェント動作の検証状態を独立に問い合わせることができる。(intent_commitment, action_nonce) あるいは tx signature を与えると、当該動作の ActionRecord PDA の内容——32 バイト意図コミットメント、action_type、target、amount、着地 slot、keccak256 指紋、Groth16 の public inputs、参照した Pyth slot——が返ってくる。公開 verifying key のダウンロードリンクも含まれる(snarkjs による独立な再検証のため)。監査の経路全体が、Sakura の任意のサーバーから独立している。

tool: verify_action · params: { intent_commitment, action_nonce } OR { tx_signature }
QUICK START
1
呼び出し側のウォレットに十分な USDC があることを確認します(x402 付費ツール呼び出し 1 回あたり $1.00、sign_intent には別途名目額の 0.1% の一回限り手数料)。Phantom、OKX、その他任意の Solana ウォレットが使えます——アカウント作成不要、KYC 不要。
2
各ツール呼び出しの前に、まず支払い証明なしで /api/mcp を叩きます。サーバーは HTTP 402 を返し、X-Payment-Recipient ヘッダーに現在の Fee Wallet アドレスを提示します。そのアドレスに $1.00 USDC を SPL Token Transfer として送金し、tx signature を保存してください——これが x402 の支払い証明です。このダイナミック探知方式により、アドレスを決め打ちせずに済み、運営側は予告なくウォレットをローテーションできます。sign_intent の 0.1% 手数料は、sign 命令の内部で自動的にオンチェーン控除されます。
3
MCP JSON-RPC リクエストに、次のヘッダーを付します:x-payment: <tx_signature> · x-wallet: <your_wallet>。Sakura バックエンドは、オンチェーンの支払い記録を即時に検証します——金額、受取人、送金人がすべて確認されます。再生防止:各 tx signature は 1 度限り使用可能です。
4
ツール呼び出しは、完全な結果を返します——sign_intent はコミットメント PDA を、execute_with_proof は tx signature、keccak256 指紋、および USD 上限の決済に用いた Pyth × Switchboard の中央値を、verify_action は ActionRecord の全フィールドを返します。各結果は、オンチェーンの 1 トランザクションまたは 1 PDA に対応します——誰もが Solscan で独立に検証でき、Sakura のサーバーを信頼する必要はありません。対抗ストレステストの記録(docs/bench/2026-04-22-stress.json)では、15/15 の不変式がすべて成立しています。これが Verifiable Compute の実装です。
サンプルコード
CURL
# Step 1: Discover the current Sakura fee wallet (public, unauthenticated).
#   Any unpaid tools/call returns HTTP 402 with X-Payment-Recipient set.
curl -i -X POST https://www.sakuraaai.com/api/mcp \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":0,"method":"tools/call","params":{"name":"verify_action"}}' \
  | grep -i "X-Payment-Recipient"
# → X-Payment-Recipient: <SAKURA_FEE_WALLET>   ← send $1.00 USDC here

# Step 2: Transfer $1.00 USDC on mainnet to that address, save the tx signature.

# Step 3: Replay the call, this time with your payment proof.
curl -X POST https://www.sakuraaai.com/api/mcp \
  -H "Content-Type: application/json" \
  -H "x-payment: <YOUR_TX_SIGNATURE>" \
  -H "x-wallet: <YOUR_WALLET_ADDRESS>" \
  -d '{
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
      "name": "verify_action",
      "arguments": {
        "intent_commitment": "<HEX_32_BYTE_COMMITMENT>",
        "action_nonce": 3
      }
    }
  }'
TYPESCRIPT
import { Connection, PublicKey, Transaction } from "@solana/web3.js";
import {
  createTransferCheckedInstruction,
  getAssociatedTokenAddressSync,
} from "@solana/spl-token";

// Canonical mainnet USDC (Circle). On devnet, substitute the test mint
// documented in /testing (7rEhvYrGGT41FQrCt3zNx8Bko9TFVvytYWpP1mqhtLi3).
const USDC_MINT = "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v";

// Discover the current fee wallet dynamically — an unpaid tools/call
// returns HTTP 402 with the recipient in the X-Payment-Recipient header.
// Never hard-code; the operator may rotate the address without notice.
async function discoverSakuraFeeWallet(): Promise<string> {
  const res = await fetch("https://www.sakuraaai.com/api/mcp", {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({ jsonrpc: "2.0", id: 0, method: "tools/call",
                          params: { name: "verify_action" } }),
  });
  if (res.status !== 402) throw new Error("Expected HTTP 402 on unpaid call");
  const recipient = res.headers.get("X-Payment-Recipient");
  if (!recipient || recipient === "not-configured")
    throw new Error("Sakura fee wallet not advertised — endpoint misconfigured");
  return recipient;
}

const SAKURA_FEE_WALLET = await discoverSakuraFeeWallet();

async function callSakuraTool(
  toolName: "sign_intent" | "execute_with_proof" | "verify_action",
  params: Record<string, unknown>
) {
  // Build and send the $1.00 USDC x402 payment transaction
  const paymentTx = new Transaction().add(
    createTransferCheckedInstruction(
      senderAta,           // your USDC ATA
      new PublicKey(USDC_MINT),
      sakuraAta,           // Sakura fee wallet USDC ATA
      senderPublicKey,
      1_000_000,           // $1.00 USDC (6 decimals)
      6,
    ),
  );
  const txSig = await connection.sendTransaction(paymentTx, [wallet]);
  await connection.confirmTransaction(txSig);

  // Call the Sakura MCP tool with the payment proof
  const response = await fetch("https://sakura-app.vercel.app/api/mcp", {
    method: "POST",
    headers: {
      "Content-Type": "application/json",
      "x-payment": txSig,
      "x-wallet": senderPublicKey.toString(),
    },
    body: JSON.stringify({
      jsonrpc: "2.0",
      id: 1,
      method: "tools/call",
      params: { name: toolName, arguments: params },
    }),
  });

  return response.json();
}

// Example: independently verify a past agent action on-chain
const result = await callSakuraTool("verify_action", {
  intent_commitment: "0x...",
  action_nonce: 3,
});
料金体系
sign_intent 呼び出し
名目額の 0.1% を 1 回限り(統合者の最初の $10M 分はリベート、オンチェーン控除)
execute_with_proof 呼び出し
動作 1 回あたり $0.01(オンチェーン検証コスト補填、Solana priority fee に埋め込み)
verify_action 呼び出し
$1.00 USDC(x402 による原子決済、サーバーの RPC コストを含む)
支払い方法
SPL Token Transfer → Sakura Fee Wallet(Solscan で公開検証可能)
課金タイミング
先払い、検証、実行。オンチェーン支払いは不可逆——パラメータを確認してから支払うこと。
対応クライアント
Claude Desktop · Cursor · VS Code · 任意 MCP クライアント · 自律 AI エージェント
VERIFIABLE COMPUTE · SOLANA

従来の API 経済は、人間がアカウント登録、サブスクリプション支払い、OAuth 認可を完了することに依存している——どの段階にも人間の介入が要る。AI エージェントが主要な API 消費者となった瞬間に、このモデルは機能しなくなる。x402 は、AI エージェントが、人間がカードをスワイプするのと同じように、自律的に支払いを完了できるようにする——1 つの HTTP ヘッダー、1 回のオンチェーン送金、1 つの即時確認。Sakura の各ツール呼び出しの結果には、Verifiable Compute のクレデンシャルが付されている——keccak256 指紋、あるいは Groth16 証明が、Solana メインネットに永久に定錨される。誰もが Solscan で、エージェントの完全な実行経路を独立に検証できる。これが、技術レイヤーで達成可能な、AI 説明責任の最高水準である。

API REFERENCE
POST/api/mcpMCP JSON-RPC endpoint (x402 gated)
GET/api/mcpList available tools (free)
開発者サポート、統合のお問い合わせ:
𝕏 @sakuraaijp