Skip to main content
Glama
jegamboafuentes

x402dispatcher

x402dispatcher

Локальный агрегатор x402 Bazaar для AI-агентов: обнаружение платных API из Coinbase x402 Bazaar, обёртывание их как инструментов Model Context Protocol (MCP), оплата микроплатежей из казначейского кошелька CDP и возврат данных вышестоящего API агенту.

Этот репозиторий сейчас на V4.


Зачем это существует

AI-агенты хорошо умеют рассуждать и использовать инструменты, но плохо умеют платить за API. Протокол x402 превращает HTTP 402 Payment Required в программируемый канал микроплатежей в стейблкоинах (обычно USDC).

x402dispatcher находится посередине как агрегатор, удобный для одиночных операторов:

Идея

Что это значит

Обнаружение

Запрос к публичному каталогу Coinbase x402 Bazaar

Интеграция MCP

Предоставление обнаруженных API как MCP-инструментов для Cursor / агентов

Отправка

Подписание и оплата из казначейского кошелька через @coinbase/cdp-sdk

Монетизация

Применение микро-наценки к стоимости вышестоящего API и удержание спреда

Средства перемещаются кошелёк → мерчант. Платформа не хранит средства покупателя.


Related MCP server: Veridex Bazaar Discovery MCP Server

Дорожная карта

Версия

Статус

Цель

V1

Готово

Вручную обернуть один платный поток (демо MBTA + оплата $0.01 USDC в тестнете)

V2

Готово

Автоматическое обнаружение API Bazaar на Base Sepolia и обёртывание многих из них как MCP-инструментов с реальной оплатой x402

V3

Готово

Умный арбитраж: поиск, сравнение цен, выбор самого дешёвого API для задачи (с отказоустойчивостью)

V4

Текущий

Отслеживание успешности/задержек; уровни маршрутизации economy и verified

V5

Планируется

Облачный хостинг, публичные реестры, agent.json для краулеров


Что делает V4

Поверх маршрутизации V3, V4 записывает успешность и задержку каждого платного вызова в data/api-stats.json, а затем предлагает два уровня:

Уровень

Поведение

economy

Сначала самый дешёвый (поведение V3)

verified

Только API с достаточной историей успешных вызовов; ранжирование по надёжности/задержке/цене

Пороги (env): VERIFIED_MIN_SAMPLES (по умолчанию 2), VERIFIED_MIN_SUCCESS_RATE (по умолчанию 0.8).

Новые инструменты: get_api_stats, list_verified_apis. quote_route / route_and_call принимают необязательный tier.


Что делает V3

Поверх обнаружения и оплаты V2, V3 добавляет маршрутизатор:

  1. quote_route — поиск в Bazaar по задаче на естественном языке, ранжирование кандидатов по общей цене (вышестоящий API + наценка), возврат плана без оплаты

  2. route_and_call — то же ранжирование, оплата и вызов самого дешёвого; при сбое попробовать следующий по цене (до max_attempts)

Все расходы остаются ограниченными MAX_PRICE_USD.


Что делает V2

При запуске MCP-сервер:

  1. Загружает учётные данные из .env

  2. Определяет казначейский кошелёк плательщика CDP Treasury

  3. Ищет / перечисляет HTTP-ресурсы Coinbase Bazaar на Base Sepolia (eip155:84532) с ценой не выше MAX_PRICE_USD

  4. Регистрирует каждое совпадение как MCP-инструмент

  5. Также регистрирует вспомогательные инструменты: search_bazaar, list_discovered_apis, call_x402_api

  6. Сохраняет демо-инструмент V1 get_mbta_predictions

Когда агент вызывает обнаруженный инструмент (или call_x402_api):

  1. Применять MAX_PRICE_USD к цене вышестоящего API + наценке

  2. Оплатить реальную конечную точку x402 с помощью CdpX402Client + wrapFetchWithPayment из @x402/fetch

  3. Собирать спред наценки (перевод USDC Treasury → Merchant, когда это возможно)

  4. Вернуть { payment, data } агенту

V1 get_mbta_predictions по-прежнему демонстрирует фиксированный перевод $0.01 USDC на Base Sepolia, а затем получает бесплатные публичные данные прогнозов MBTA.


Архитектура

Agent / Cursor
    │  MCP (stdio)
    ▼
x402dispatcher MCP server (src/index.ts)
    │
    ├─ Discovery  → listX402DiscoveryResources / searchX402Resources (@coinbase/cdp-sdk)
    ├─ Payment    → CdpX402Client + wrapFetchWithPayment (@coinbase/cdp-sdk/x402, @x402/fetch)
    ├─ Routing    → economy (price) / verified (stats score) with failover
    ├─ Stats      → data/api-stats.json success + latency history
    ├─ Guardrails → MAX_PRICE_USD (+ SDK spend controls)
    └─ Markup     → MARKUP_BPS applied; optional USDC transfer to Merchant account
    │
    ▼
Upstream x402 HTTP API (Bazaar listing)

Ключевые пакеты

  • @coinbase/cdp-sdk — кошельки, обнаружение Bazaar, CdpX402Client

  • @x402/fetch / @x402/core / @x402/evm — цикл оплаты HTTP 402

  • @modelcontextprotocol/sdk — MCP-сервер и инструменты

  • dotenv, zod, viem


Требования

  • Node.js 19+ (требование CDP SDK; рекомендуется 22 LTS)

  • Учётные данные Coinbase Developer Platform:

    • CDP_API_KEY_ID

    • CDP_API_KEY_SECRET

    • CDP_WALLET_SECRET (Wallet Secret из CDP Portal → Non-custodial Wallet → Security — не приватный ключ MetaMask)

  • Base Sepolia USDC (+ немного ETH для газа) на адресе Treasury


Настройка

git clone https://github.com/jegamboafuentes/x402dispatcher.git
cd x402dispatcher
npm install
cp .env.example .env
# edit .env with your CDP credentials

Переменные окружения

Переменная

Обязательно

Описание

CDP_API_KEY_ID

Да

ID ключа API CDP

CDP_API_KEY_SECRET

Да

Секрет ключа API CDP

CDP_WALLET_SECRET

Да

Секрет кошелька CDP (base64 P-256 ключ из Portal)

MAX_PRICE_USD

Рекомендуется

Жёсткий предел перед любыми автоматическими расходами (например, 0.01)

MARKUP_BPS

Необязательно

Наценка в базисных пунктах (по умолчанию 1000 = 10%)

DISCOVERY_LIMIT

Необязательно

Максимум инструментов Bazaar для регистрации при запуске (по умолчанию 40, максимум 100)

VERIFIED_MIN_SAMPLES

Необязательно

Минимум вызовов с успешной историей для Verified (по умолчанию 2)

VERIFIED_MIN_SUCCESS_RATE

Необязательно

Минимальный уровень успеха 0–1 для Verified (по умолчанию 0.8)

CDP_PRIVATE_KEY

Необязательно

Только если вы импортируете конкретный EOA в CDP (не используется по умолчанию в пути плательщика V2+)

Никогда не коммитьте .env. Отслеживается только .env.example.

Пополнение казначейства

npx tsx -e "import 'dotenv/config'; import { CdpX402Client } from '@coinbase/cdp-sdk/x402'; const c = new CdpX402Client({ environment: 'development', walletConfig: { type: 'eoa', accountName: 'Treasury' } }); console.log(await c.getAddresses());"

Отправьте Base Sepolia USDC (и немного ETH) на напечатанный evmAddress.


Запуск

MCP-сервер (stdio)

npm start

Конфигурация Cursor MCP

Файл проекта: .cursor/mcp.json (уже включён). Cursor должен запустить:

{
  "mcpServers": {
    "x402dispatcher": {
      "command": "npx",
      "args": ["tsx", "src/index.ts"],
      "cwd": "${workspaceFolder}"
    }
  }
}

Перезагрузите MCP в Cursor после клонирования/установки. Если ${workspaceFolder} не раскрывается в вашей сборке Cursor, установите cwd на абсолютный путь этого репозитория и при необходимости укажите command на ваш бинарник Node 22.


MCP-инструменты

Основные

Инструмент

Назначение

quote_route

Ранжирование подходящих API; tier=economy|verified; без оплаты

route_and_call

Оплата/вызов лучшего соответствия для уровня; отказоустойчивость; запись статистики

get_api_stats

V4 — локальная история успешности/задержек

list_verified_apis

V4 — API, которые в настоящее время соответствуют Verified

search_bazaar

Семантический/текстовый поиск API Bazaar на Base Sepolia с ценой ниже MAX_PRICE_USD

list_discovered_apis

Список API, которые в настоящее время кэшированы/зарегистрированы

call_x402_api

Оплата + вызов по tool_name или полному URL ресурса

get_mbta_predictions

Демо V1: оплата $0.01 USDC + живые прогнозы MBTA

Динамические инструменты

При запуске x402dispatcher также регистрирует один MCP-инструмент для каждого обнаруженного ресурса Bazaar (имена вида x402_<host>_<path>_<n>). Каждый принимает необязательные query / body и оплачивает URL вышестоящего API.


Тестирование

V4 end-to-end (рекомендуется)

Заполняет два economy-вызова погоды, продвигает победителя в Verified, затем котирует/маршрутизирует с tier=verified:

npm run test:v4

Ожидайте: V4 SMOKE TEST PASSED

Более ранние версии

npm run test:v3
npm run test:v2

Ручные проверки в Cursor

  1. Перезагрузите MCP-сервер x402dispatcher

  2. Попросите погоду с economy-маршрутизацией пару раз (накапливает статистику)

  3. Спросите: «Перечисли проверенные API» / «Получи статистику API»

  4. Спросите: «Используй verified-уровень, чтобы получить погоду для Бостона»

  5. Подтвердите, что chosen.verified равно true и data/api-stats.json увеличился

Проверка ограничений

Установите MAX_PRICE_USD ниже общей суммы листинга и убедитесь, что quote/route отказывают или возвращают ноль кандидатов.


Структура проекта

x402dispatcher/
├── src/
│   ├── index.ts       # MCP server, tool registration
│   ├── discovery.ts   # Bazaar list/search → DiscoveredApi
│   ├── payment.ts     # CdpX402Client, markup, MBTA settle
│   ├── routing.ts     # quote + economy/verified route + failover
│   ├── stats.ts       # V4 local success/latency store
│   └── config.ts      # MAX_PRICE_USD, MARKUP_BPS, verified thresholds
├── scripts/
│   ├── v4-smoke-test.ts
│   ├── v3-smoke-test.ts
│   ├── v2-smoke-test.ts
│   ├── mcp-test.ts
│   └── smoke-test.ts
├── data/              # local api-stats.json (gitignored)
├── .cursor/
│   ├── mcp.json
│   └── rules/         # security + x402-stack agent rules
├── AGENTS.md          # product / roadmap context for agents
├── .env.example
└── package.json

Замечания по безопасности

  • Учётные данные кошелька загружаются только из .env — никогда не хардкодьте секреты.

  • Каждый автоматический расход ограничен MAX_PRICE_USD перед подписанием.

  • V2 также настраивает контроль расходов CDP x402 (maxAmountPerPayment + список разрешённых сетей Base Sepolia).

  • Относитесь к Bazaar как к каталогу, а не к одобрению. Сначала предпочитайте небольшие суммы в тестнете.

  • CDP_WALLET_SECRET должен быть секретом кошелька Portal (длинный base64), а не hex-ключом MetaMask.


Ссылки на стек


Лицензия

ISC

Related MCP Connectors

Related MCP Servers