mcpField
H
horizon-pulse

horizon-pulse

リモート
horizonpulse.dev金融データ
リポジトリ公式サイト

horizon-pulse について

Horizon Pulse は、暗号資産市場、オンチェーンリスク、ウェブ処理の従量課金 API を Agent に提供し、ライブ JSON を返します。x402 で USDC 決済を処理し、ローカルとホスト型の MCP 接続に対応します。

主な機能

  1. 01価格、指標、資金調達率の取得
  2. 02DeFi 利回りとポートフォリオリスクの確認
  3. 03オンチェーン取引、残高、ガス情報の取得
  4. 04ウェブ本文の取得、プロキシ、項目抽出
  5. 05x402 による USDC の都度払い

活用シーン

  1. 01Agent 向けの暗号資産市場・利回りデータ取得
  2. 02EVM アドレスの資産配分とリスク確認
  3. 03必要に応じたウェブページの取得と解析
  4. 04MCP クライアントからの有料データ API 呼び出し

MCP 対応

ローカルの stdio MCP サーバーはライブの各ルートをツールとして公開し、設定した購入者ウォレットで x402 チャレンジを支払えます。ホスト型 MCP は streamable HTTP を使用し、MCP 経由の支払いは Base USDC のみです。

設定

リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。

エンドポイントhttps://horizonpulse.dev/mcp
インストールコマンドをコピー
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。

ツール

28

このツールにパラメーターはありません。

詳細

Horizon Pulse

呼び出しごとの暗号資産市場のパルス、シグナル、資金調達率、利回りランキング、ポートフォリオリスク、ガスに加え、公開 URL の取得 → クリーンなテキスト、汎用的な http プロキシ、さらに 抽出 → AI エージェント向けの構造化フィールドを提供します。x402 プロトコルを使って、Base mainnet と Solana mainnet(USDC、exact、どちらも同じ価格)で収益化しています。

このリポジトリは、デプロイ(例:Vercel)して次の場所にプッシュできる、Next.js App Router サービスです。

https://github.com/horizon-pulse/horizon-pulse.git

公開ホスト

役割URL
正規https://horizonpulse.dev
バックアップ(Vercel)https://horizon-pulse-seven.vercel.app

エージェント向けドキュメント、OpenAPI、クライアントでは、horizonpulse.dev を優先してください。*.vercel.app の URL も引き続き利用可能なフォールバックです。

概要

  • エージェントは、現在利用可能な有料 HTTP エンドポイントを呼び出します(暗号資産ルートは凍結済み。/api/fetch + /api/http + /api/extract + /api/x402-check + /api/bazaar-check + /api/market/search + /api/market/quote + /api/screenshot + /api/search + /api/pdf は暗号資産以外の用途で稼働中です — 詳細は以下をご覧ください)。
  • 支払いのないリクエストには、x402 v2 の要件を含む HTTP 402 が返されます。正規の通信形式は PAYMENT-REQUIRED ヘッダーで、ネットワークごとに accepts エントリーが1つあります。Base(CAIP-2 eip155:8453、Base USDC、以下の Treasury)と Solana(CAIP-2 solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp、USDC mint、以下の Solana 用 payTo)です。docs/solana-rail.md をご覧ください。
  • x402 v2 の PAYMENT-SIGNATURE ヘッダーを付けて再試行します。ファシリテーター(Base では Coinbase CDP、Solana では PayAI)が検証と決済を行い、その後ルートからライブデータが返されます。
  • 価格や偽の APY をでっち上げることはありません。スポット価格には Coinbase Exchange(CoinGecko をフォールバックとして使用)、シグナルには CoinGecko OHLC(Coinbase のローソク足データをフォールバックとして使用)、無期限先物の資金調達率には OKX(Binance/Bybit は Vercel 上で地域制限されることがよくあります)、利回りプールには DefiLlama、ポートフォリオには公開 RPC の balanceOf(実際の残高のみ)、ガスには eth_feeHistory / eth_gasPrice(実際の手数料のみ)を使用します。/api/fetch は、指定された公開 URL から取得したテキストを可能な限り整形して返します(SSRF 対策済み、サイズと時間に上限あり)。/api/http は汎用の生プロキシです(ヘッダーをフィルタリングし、本文は text|base64、SSRF 対策済み)。ボリューム価格は $0.01 です。/api/extract は、URL または HTML からページの構造化フィールドを可能な限り返します(SSRF 対策済み、サイズと時間に上限あり)。価格は $0.015 です。
  • 指標を捏造しません。404 になるルートを掲載しません。キャッシュされた残高を引用しません — /status は payTo の USDC balanceOf をリアルタイムで読み取ります。現状を正直にお伝えすると、現在の payTo は暫定的な Coinbase カストディ管理のアドレスであり、Safe/マルチシグではありません。

カタログの状況(初回決済後)

項目値
稼働中の有料ルート30:下の表をご覧ください(複数ネットワーク対応のルートが29個、Base のみ対応の検証済みブリーフが1個)
初回決済/api/pulse $0.005 — tx 0xedbd1a51…
暗号資産ポリシー凍結済み — 暗号資産ルート6個。価格変更なし
Fetch暗号資産以外の用途で稼働中:クリーンテキスト($0.02)
Http暗号資産以外の用途で稼働中:汎用プロキシ(ボリューム価格 $0.01)
Extract暗号資産以外の用途で稼働中:構造化 HTML($0.015)

近日公開/プレースホルダー/404 のルートは、/、/status、この README には掲載していません。

エージェント向け手順(x402 v2)

  1. 支払いなしで有料ルートに GET を送信すると、HTTP 402 が返されます。
  2. PAYMENT-REQUIRED(v2)を読み取り、accepts エントリーを1つ選びます。network(Base の場合は eip155:8453、Solana の場合は solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp)、そのネットワーク上の USDC、正確な最小単位の amount、そのネットワークの payTo を確認します。
  3. 署名し、PAYMENT-SIGNATURE(v2 の主要方式)を付けて同じ GET を再試行します(決済方法として旧式の X-PAYMENT に依存しないでください)。
  4. 成功すると、ファシリテーターが支払いに使用したネットワーク上で決済し、レスポンス本文にそのルートのライブ JSON が返されます。

任意:有料ルートへの OPTIONS は、料金を請求せずにディスカバリー情報と同じ PAYMENT-REQUIRED チャレンジを返します。

エージェント連携
  • スキルファイル: /skill.md。エージェントが最初から最後まで従えるプレーンな Markdown です(public/openapi.json から lib/agent-skill.ts によって生成されます)。
  • ガイド: /agents:決済フロー、スキル、MCP のセットアップについて説明します。
  • ローカル MCP サーバー: mcp/。stdio を使用し、稼働中のすべてのルートをツールとして提供します。設定した購入者ウォレットから x402 チャレンジの支払いを行い、呼び出し単位およびセッション単位の上限を設定できます(キーがない場合は見積もりのみ)。npm では公開されていません。このリポジトリからインストールしてください。
  • ホスト型 MCP: POST https://horizonpulse.dev/mcp(ストリーミング可能な HTTP)。x402 の支払いを自ら行える MCP クライアント向けです。MCP 経由の支払いは Base 上の USDC のみです。有料 HTTP ルートでは Base、Solana、Polygon、XRPL を受け付けます。

トレジャリー(payTo)

フィールド値
payTo0x5b32c973596078a967562ca652761404f19be0e9
Basenamehorizonpulsebase.base.eth(上記の payTo に解決されます。ラベルにすぎず、402 には 16 進数のアドレスが含まれます)
カストディ暫定的な Coinbase カストディ型の Base アドレス(所有者が管理)。Safe やマルチシグではありません。
アップグレードパス準備が整ったら、後でノンカストディアルの Safe/マルチシグに移行できます。カタログと価格は変わりません。
USDC(Base)0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913
ネットワークbase(CAIP-2 eip155:8453)
ファシリテーターhttps://api.cdp.coinbase.com/platform/v2/x402
Solana payToBjY98A6dS3GGLZdz2zHy8wK7XAwnQgNhCc66mfmBTRPz(運営者が管理。lib/solana-config.ts に固定されており、支払いはこの USDC トークンアカウントに入金されます)
USDC(Solana)EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v
Solana ネットワークCAIP-2 solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp(exact のみ)
Solana ファシリテーターPayAI https://facilitator.payai.network

廃止されたアドレス 0xe16A1b12404cB2EbC6e783beCA6E2A9253c3dC7E は使用しないでください。

PAY_TO は env で上書きできますが、デフォルトは上記のアドレスです。エージェントは、現在の payTo を実際の決済先として扱ってください。ルートの価格は変えずに、後からカストディの形態が変わる場合があります。

エンドポイント

有料(30ルート:マルチネットワーク対応が29件+1ドルの検証済みブリーフが1件、Base のみ。/.well-known/x402 と同じリスト):

ルート価格認証
GET /api/pulse$0.002 USDC(2000 最小単位)x402 v2(Base、Solana、Polygon、XRPL)
GET /api/signals$0.005 USDC(5000 最小単位)x402 v2(Base、Solana、Polygon、XRPL)
GET /api/yield$0.02 USDC(20000 最小単位)x402 v2(Base、Solana、Polygon、XRPL)
GET /api/portfolio$0.04 USDC(40000 最小単位)x402 v2(Base、Solana、Polygon、XRPL)
GET /api/gas$0.002 USDC(2000 最小単位)x402 v2(Base、Solana、Polygon、XRPL)
GET /api/funding$0.003 USDC(3000 最小単位)x402 v2(Base、Solana、Polygon、XRPL)
GET /api/fetch$0.02 USDC(20000 最小単位)x402 v2(Base、Solana、Polygon、XRPL)
GET / POST /api/http$0.01 USDC(10000 最小単位)x402 v2(Base、Solana、Polygon、XRPL)
GET / POST /api/extract$0.015 USDC(15000 最小単位)x402 v2(Base、Solana、Polygon、XRPL)
GET /api/x402-check$0.01 USDC(10000 最小単位)x402 v2(Base、Solana、Polygon、XRPL)
GET /api/x402-check/deep$0.03 USDC(30000 最小単位)x402 v2(Base、Solana、Polygon、XRPL)
GET /api/bazaar-check$0.01 USDC(10000 最小単位)x402 v2(Base、Solana、Polygon、XRPL)
GET /api/market/search$0.005 USDC(5000 最小単位)、未テストの価格x402 v2(Base、Solana、Polygon、XRPL)
GET /api/market/quote$0.005 USDC(5000 最小単位)、未テストの価格x402 v2(Base、Solana、Polygon、XRPL)
GET /api/tx-status$0.002 USDC(2000 最小単位)x402 v2(Base、Solana、Polygon、XRPL)
GET /api/tokenized-stock$0.002 USDC(2000 最小単位)x402 v2(Base、Solana、Polygon、XRPL)
GET /api/watch$0.002 USDC(2000 最小単位)x402 v2(Base、Solana、Polygon、XRPL)
GET /api/balance$0.002 USDC(2000 最小単位)x402 v2(Base、Solana、Polygon、XRPL)
GET /api/tx-guard$0.002 USDC(2000 最小単位)x402 v2(Base、Solana、Polygon、XRPL)
GET / POST /api/grocery/normalize$0.002 USDC(2000 最小単位)x402 v2(Base、Solana、Polygon、XRPL)
GET / POST /api/grocery/ingredient$0.005 USDC(5000 最小単位)x402 v2(Base、Solana、Polygon、XRPL)
GET /api/chain/head$0.002 USDC(2000 最小単位)x402 v2(Base、Solana、Polygon、XRPL)
GET /api/token/meta$0.002 USDC(2000 最小単位)x402 v2(Base、Solana、Polygon、XRPL)
GET /api/name/resolve$0.002 USDC(2000 最小単位)x402 v2(Base、Solana、Polygon、XRPL)
GET / POST /api/batch$0.01 USDC(10000 最小単位)x402 v2(Base、Solana、Polygon、XRPL)
GET /api/discourse/split$0.03 USDC(30000 最小単位)、未テストの価格x402 v2(Base、Solana、Polygon、XRPL)
GET /api/screenshot$0.02 USDC(20000 最小単位)x402 v2(Base、Solana、Polygon、XRPL)
GET /api/search$0.03 USDC(30000 最小単位)x402 v2(Base、Solana、Polygon、XRPL)
GET /api/pdf$0.02 USDC(20000 最小単位)x402 v2(Base、Solana、Polygon、XRPL)
GET /api/research/report/brief?q=…$1 USDC(1000000 最小単位):契約で定義されているとおり、少なくとも2つの主張が2つのソースで確認できた場合(独立したノード2つ、または別個の仕様書2つ)。確認できない場合、料金は発生しません(契約、利用規約)x402 v2(Base の USDC のみ)

無料(有料 API ではありません):

ルート認証
GET /status公開 HTML — payTo の USDC balanceOf をライブで表示(取得に失敗した場合は RPC エラーをそのまま表示)
GET /ランディングページ — 有料カタログのライブ情報とエージェント向け利用方法
GET /api/pulse

BTC/ETH/SOL のリアルタイム現物価格(Coinbase Exchange、取得できない場合は CoinGecko にフォールバック)と、資産ごとのモメンタムに加え、全体のモメンタム/センチメント/方向性(up/down/flat。24 時間の平均変動を中立的に表したもの。signal から名称を変更。CHANGELOG.md を参照)。

  • runtime = 'nodejs'
  • 検出方法:Bazaar 拡張機能、および支払い要件の outputSchema.input.discoverable: true
GET /api/signals

CoinGecko の OHLC 終値から算出した RSI(14)、MACD(12,26,9)、ボリンジャーバンドと、OKX のファンディングレート。methodology フィールドを含みます。

  • runtime = 'nodejs'
  • エージェントが検出可能
GET /api/yield

DefiLlama の公開 Yields API(https://yields.llama.fi/pools)から取得した、ランキング形式の DeFi イールドプールです。

  • 厳格なフィルター:TVL ≥ $10M。有限でない APY と DefiLlama の outlier プールを除外
  • 優先条件:ステーブルコインおよび/または単一資産(exposure === "single")のプールを優先
  • 透明性の高いランキング:preferenceTier の降順(2 = ステーブルコイン+単一資産、1 = いずれか)、次に APY の降順、次に TVL の降順
  • すべてのレスポンスに methodology オブジェクトを含みます(エラーレスポンスも同様)
  • 価格:$0.02 USDC(20000 atomic)
  • runtime = 'nodejs'、dynamic = 'force-dynamic'
  • 未払いの GET → 402 + PAYMENT-REQUIRED(v2、eip155:8453) · payTo 0x5b32c973596078a967562ca652761404f19be0e9
GET /api/portfolio

1 つの EVM アドレス(?address=0x…、必須)のオンチェーンポートフォリオスナップショットです。

  • ネットワーク:Base + Ethereum メインネット(公開 RPC。必要に応じて BASE_RPC_URL/ETH_RPC_URL を使用し、フェイルオーバー可能)
  • トークン:ネイティブ ETH、両チェーンの USDC、WETH、DAI、Ethereum の WBTC、Base の cbBTC(正確な代替資産 — Base には BitGo WBTC がありません)
  • USD 評価額は Coinbase の公開為替レートを使用(その他の資産、または Coinbase から取得できない場合は CoinGecko)。実際の残高のみを表示 — RPC に障害が発生した場合、そのネットワークは networks[]/warnings で失敗として示されます
  • ルールベースの集中度スコア(0–100)とルールに基づく所見(最大資産の比率と 35%/50% の比較、ステーブルコインの比率と 15%/85% の比較、最大チェーンの比率と 85% の比較、ネイティブ ETH のガス残高不足。指示ではなく、所見として suggestions 配列に返されます)。透明性の高い計算式は methodology に記載
  • 価格:$0.04 USDC(40000 atomic)
  • runtime = 'nodejs'、dynamic = 'force-dynamic'
  • 未払いの GET → 402 + PAYMENT-REQUIRED(v2、eip155:8453) · payTo 0x5b32c973596078a967562ca652761404f19be0e9
GET /api/gas

公開 RPC から取得した、Base と Ethereum のリアルタイムのガススナップショットです。

  • eth_feeHistory を優先(直近 20 ブロック、報酬パーセンタイル 10/50/90):baseFeeGwei、priorityFeeGwei(p50)、suggestedMaxFeeGwei(= 2×baseFee + priority)
  • feeHistory を利用できない場合は eth_gasPrice にフォールバック
  • 透明性の高い timingHint:feeHistory の対象期間内における最新の確定済み baseFee のパーセンタイル順位に基づき、安価/通常/高額を表示(<33/33–67/>67)。methodology に記載 — 予測ではありません
  • 21k ガスの送金コストの簡易見積もり(simpleTransfer.costUsd)用に、オプションで ETH の USD 価格を取得(Coinbase Exchange、取得できない場合は CoinGecko)
  • 価格:$0.01 USDC(10000 atomic)
  • runtime = 'nodejs'、dynamic = 'force-dynamic'
  • 未払いの GET → 402 + PAYMENT-REQUIRED(v2、eip155:8453) · payTo 0x5b32c973596078a967562ca652761404f19be0e9
GET /api/funding

OKX から取得した、BTC/ETH/SOL のリアルタイムの無期限先物ファンディングレート(/api/signals と同じデータソース。Vercel に適しています — Binance/Bybit ではありません)。

  • lib/okx.ts(fetchAllFunding)を再利用
  • すべてのレスポンス(エラーを含む)に、透明性の高い methodology を記載
  • ファンディングの符号と大きさのみから算出した、オプションの過熱度のヒント(ルール:静穏/軽度/高め/極端。方向:ロング/ショート/中立)— 予測ではありません
  • 正確性:実際の OKX データのみ
  • 価格:$0.01 USDC(10000 atomic)— エージェント向けの低価格なポーリング用プロダクト
  • runtime = 'nodejs'、dynamic = 'force-dynamic'
  • 未払いの GET → 402 + PAYMENT-REQUIRED(v2、eip155:8453) · payTo 0x5b32c973596078a967562ca652761404f19be0e9
GET /api/fetch

公開 http(s) URL(必須の ?url=https://…)を取得し、可能な範囲で整形したテキスト/Markdownを返します。

  • SSRF 対策:localhost、プライベート IP、リンクローカル IP、メタデータ IP をブロックし、リダイレクトの各ホップで再確認します
  • 上限:約 200KB の生の本文、8s のタイムアウト、最大 3 回のリダイレクト
  • 優先する Content-Type:text/html、text/plain、application/json、text/markdown
  • 整形は可能な範囲で行います(script/style/chrome を削除し、空白を詰めます)。完全な可読性エンジンではありません
  • 料金:$0.02 USDC(20000 atomic)
  • runtime = 'nodejs'、dynamic = 'force-dynamic'
  • 未払いの GET → 402 + PAYMENT-REQUIRED(v2、eip155:8453)· payTo 0x5b32c973596078a967562ca652761404f19be0e9
GET / POST /api/http

汎用のエージェント向け HTTP プロキシ — 任意のメソッド/ヘッダー/本文を指定して公開 http(s) URL を呼び出し、上流の status、フィルタリング済みの headers、body(text または base64)に加え、contentType と elapsedMs を取得します。

  • 料金の選択肢: ボリューム向けに $0.01 USDC(10000 atomic)。/api/fetch は専用のクリーンテキスト取得用として $0.02 のままです。生のプロキシトラフィックには /api/http を優先してください。
  • 入力:url(必須)、method(デフォルトは GET。GET|POST|HEAD|PUT|PATCH|DELETE)、許可リストに含まれる任意の headers(Cookie/ホップバイホップヘッダーは不可)、POST/PUT/PATCH 用の任意の body(サイズ上限あり)
  • GET クエリ:?url=&method=&headers=<json>。上流の本文を含むすべてを制御するには、POST JSON 本文を使用します
  • SSRF 対策(/api/fetch と共通のガード):プライベート/リンクローカル/メタデータをブロックし、http/https のみ許可し、リダイレクト時に再確認します
  • 上限:約 384KB のレスポンス本文、64KB のリクエスト本文、12s のタイムアウト、最大 3 回のリダイレクト
  • 正確な応答:上流の 4xx/5xx は、ホップが成功した場合に status で返します。プロキシの失敗には適切なエラーコードを使用します
  • runtime = 'nodejs'、dynamic = 'force-dynamic'
  • 未払いの GET/POST → 402 + PAYMENT-REQUIRED(v2、eip155:8453)· payTo 0x5b32c973596078a967562ca652761404f19be0e9
  • Bazaar の検出では GET を案内します。POST も同じ料金で利用できます
GET / POST /api/extract

URL または HTML から、エージェント向けのページ構造化フィールド(タイトル、説明、canonical、言語、リンク、画像、見出し、json-ld、テキストサンプル)を取得します。

  • 料金の選択肢: $0.015 USDC(15000 atomic)— /api/http($0.01)と /api/fetch($0.02)の中間です。同じ payTo と Base USDC スタックを使用します。
  • 入力:url(html が指定されていれば任意)および/または html(サイズ上限あり)。fetch/http と同じ SSRF 対策の assertSafePublicUrl を使って url を取得する方法を推奨します。
  • GET クエリ:?url=&fields=<url-encoded json>。HTML ペイロードには POST JSON { url?, html?, fields? } を使用します
  • 任意の fields:名前付き CSS セレクターを最大 20 個指定できます。例:{"title":"h1","links":{"selector":"a.story","attr":"href","all":true,"limit":5}}。attr は text(デフォルト)、html、または任意の属性です(href/src は絶対 URL に解決されます)。一致しないフィールドは null と fieldErrors[name](no_match、bad_selector、attr_missing、time_budget、document_too_deep、eval_failed)を返します。一致するフィールドがない場合は、422 no_fields_matched。課金されません。セレクターの実行時間は最大 2s、:has() はセレクターごとに最大 1 回、256 階層を超える入れ子のページではフィールドを拒否します。決定論的なセレクターを使用し、AI は使いません。
  • 軽量な正規表現による解析(cheerio は使用しません)。空のフィールドは省略されます。完全なブラウザー DOM ではありません。
  • 上限:約 200KB の HTML、8s のタイムアウト、最大 3 回のリダイレクト(/api/fetch と同じ範囲)
  • Cookie jar はありません。プライベート/localhost/リンクローカル/メタデータはブロックされます。
  • runtime = 'nodejs'、dynamic = 'force-dynamic'
  • 未払いの GET/POST → 402 + PAYMENT-REQUIRED(v2、eip155:8453)· payTo 0x5b32c973596078a967562ca652761404f19be0e9
  • Bazaar の検出では GET を案内します。POST も同じ料金で利用できます
GET /status

Base 上の payTo アドレスの現在の USDC 残高(公開 RPC/BASE_RPC_URL の balanceOf 経由)に加え、現在の有料カタログとエージェント向けの使い方を表示する公開ページです。

  • RPC が失敗した場合、ページには正直なエラーが表示され、キャッシュ済みの残高にはフォールバックしません。カストディに関する注記:暫定的に Coinbase がカストディする payTo(Safe/マルチシグではありません)を使用しています。将来的にアップグレードする予定です。
  • 最初の決済は /api/pulse の $0.005(0xedbd1a51…)と記録されています。6 つの暗号資産ルートは凍結され、/api/fetch + /api/http + /api/extract は意図的に稼働中です。

ローカル開発

Node.js 20 以降が必要です(20.19 でテスト済み)。

cd horizon-pulse
cp .env.example .env.local
# fill CDP_API_KEY_ID + CDP_API_KEY_SECRET for verify/settle
npm install
npm run dev
npm run build && npm start

環境変数(Vercel/本番環境)

.env.example からコピーします。

変数必須備考
X402_NETWORK推奨base
PAY_TO任意デフォルトは 0x5b32c973596078a967562ca652761404f19be0e9
CDP_API_KEY_ID決済に必要Coinbase Developer Platform
CDP_API_KEY_SECRET決済に必要PKCS8 PEM(安全に保管し、絶対にコミットしないでください)
BASE_RPC_URL任意/status + /api/portfolio + /api/gas で使用するデフォルトの Base RPC を上書きします
ETH_RPC_URL任意/api/portfolio + /api/gas で使用するデフォルトの Ethereum RPC を上書きします

CDP キーがない場合:

  • 未払いの GET と OPTIONS は引き続き、v2 PAYMENT-REQUIRED(payTo、eip155:8453、USDC 額)を含む正しい 402/ディスカバリーを返します。ディスカバリーに CDP は不要です。
  • PAYMENT-SIGNATURE(またはレガシーの X-PAYMENT)を含むリクエストは、決済処理に必要な CDP_API_KEY_ID + CDP_API_KEY_SECRET が Vercel に設定されるまで 503 を返します。
  • CDP が未設定でも、稼働中の GET が 500 になるとは考えないでください。これは以前のバグで、支払いと CDP 認証情報がそろった場合のみ withX402 を実行することで修正済みです。

技術スタック

  • Next.js 16(App Router)+ TypeScript
  • @x402/next + @x402/core + @x402/evm + @x402/extensions
  • CDP のファシリテーター認証ヘッダーに @coinbase/x402 を使用
  • Base 上のトレジャリーの USDC balanceOf、ポートフォリオ残高、Base + Ethereum 上のガス feeHistory に viem を使用

デプロイに関する注意

  1. GitHub リポジトリ/リモート https://github.com/horizon-pulse/horizon-pulse.git を作成します。
  2. Vercel の環境変数(上記)を設定します。PEM シークレットを設定する UI が 1 行入力の場合は、\n エスケープを含む 1 行の形式を推奨します。
  3. main からデプロイします。関数が Node.js ランタイムを使用していることを確認してください(ルートにはすでに export const runtime = 'nodejs' が設定されています)。
  4. スモークテストを実行します:curl -i https://horizonpulse.dev/api/pulse(または /api/yield、/api/portfolio、/api/gas、/api/funding、/api/fetch?url=https://example.com、/api/http?url=https://example.com、/api/extract?url=https://example.com)は、新しい payTo を示す支払い要件とともに 402 を返すはずです。
  5. /status に 0x5b32…e0e9 のトレジャリー残高が表示されることを確認します。

Push(このワークスペースから)

このひな形は代わりに push を行いません(認証情報がないためです)。GitHub 認証済みのマシンから実行してください。

cd /workspace/horizon-pulse
git init
git add .
git commit -m "feat: Horizon Pulse x402 API with new Base treasury"
git branch -M main
git remote add origin https://github.com/horizon-pulse/horizon-pulse.git
git push -u origin main

リモートにすでに履歴がある場合:

git remote add origin https://github.com/horizon-pulse/horizon-pulse.git
git fetch origin
git pull origin main --rebase   # or merge, as appropriate
git push -u origin main

参照用エージェント(examples/)

スクリプトに記載された稼働中の有料ルートについて、未払いの 402 ディスカバリーを実行します。また、SMOKE_PRIVATE_KEY が設定されている場合は、任意で単一ルートの有料テストも実行します。

cd horizon-pulse
node examples/reference-agent.mjs
# optional paid:
SMOKE_PRIVATE_KEY=0x... SMOKE_ROUTE=/api/pulse node examples/reference-agent.mjs

examples/README.md を参照してください。このパッケージの @x402/core + @x402/evm を使用します。シークレットは絶対にコミットしないでください。

有料スモークテスト(/api/pulse)

本番環境(または SMOKE_BASE_URL)に対するエンドツーエンドの確認です。未払いの 402 → ローカルキーで EIP-3009/x402 に署名 → 有料の 200 + payTo 宛てのオンチェーン USDC を確認します。

cd horizon-pulse
npm install   # if needed; uses existing @x402/* + viem
SMOKE_PRIVATE_KEY=0x... node scripts/smoke-pulse.mjs
# or: npm run smoke:pulse

任意:

SMOKE_BASE_URL=https://horizonpulse.dev
# backup: https://horizon-pulse-seven.vercel.app
BASE_RPC_URL=https://mainnet.base.org

チャット、コミット、スクリーンショットに秘密鍵を絶対に貼り付けないでください。 ローカルのシェル(例:Mac mini)でのみエクスポートしてください。SMOKE_PRIVATE_KEY が設定されていない場合、スクリプトは使い方を表示して終了します(安全なドライラン)。

ライセンス

horizon-pulse org の指定に従い、非公開です。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。