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 / агентов |
Отправка | Подписание и оплата из казначейского кошелька через |
Монетизация | Применение микро-наценки к стоимости вышестоящего 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 | Планируется | Облачный хостинг, публичные реестры, |
Что делает V4
Поверх маршрутизации V3, V4 записывает успешность и задержку каждого платного вызова в data/api-stats.json, а затем предлагает два уровня:
Уровень | Поведение |
| Сначала самый дешёвый (поведение V3) |
| Только 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 добавляет маршрутизатор:
quote_route— поиск в Bazaar по задаче на естественном языке, ранжирование кандидатов по общей цене (вышестоящий API + наценка), возврат плана без оплатыroute_and_call— то же ранжирование, оплата и вызов самого дешёвого; при сбое попробовать следующий по цене (доmax_attempts)
Все расходы остаются ограниченными MAX_PRICE_USD.
Что делает V2
При запуске MCP-сервер:
Загружает учётные данные из
.envОпределяет казначейский кошелёк плательщика CDP Treasury
Ищет / перечисляет HTTP-ресурсы Coinbase Bazaar на Base Sepolia (
eip155:84532) с ценой не вышеMAX_PRICE_USDРегистрирует каждое совпадение как MCP-инструмент
Также регистрирует вспомогательные инструменты:
search_bazaar,list_discovered_apis,call_x402_apiСохраняет демо-инструмент V1
get_mbta_predictions
Когда агент вызывает обнаруженный инструмент (или call_x402_api):
Применять
MAX_PRICE_USDк цене вышестоящего API + наценкеОплатить реальную конечную точку x402 с помощью
CdpX402Client+wrapFetchWithPaymentиз@x402/fetchСобирать спред наценки (перевод USDC Treasury → Merchant, когда это возможно)
Вернуть
{ 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_IDCDP_API_KEY_SECRETCDP_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Переменные окружения
Переменная | Обязательно | Описание |
| Да | ID ключа API CDP |
| Да | Секрет ключа API CDP |
| Да | Секрет кошелька CDP (base64 P-256 ключ из Portal) |
| Рекомендуется | Жёсткий предел перед любыми автоматическими расходами (например, |
| Необязательно | Наценка в базисных пунктах (по умолчанию |
| Необязательно | Максимум инструментов Bazaar для регистрации при запуске (по умолчанию |
| Необязательно | Минимум вызовов с успешной историей для Verified (по умолчанию |
| Необязательно | Минимальный уровень успеха 0–1 для Verified (по умолчанию |
| Необязательно | Только если вы импортируете конкретный 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-инструменты
Основные
Инструмент | Назначение |
| Ранжирование подходящих API; |
| Оплата/вызов лучшего соответствия для уровня; отказоустойчивость; запись статистики |
| V4 — локальная история успешности/задержек |
| V4 — API, которые в настоящее время соответствуют Verified |
| Семантический/текстовый поиск API Bazaar на Base Sepolia с ценой ниже |
| Список API, которые в настоящее время кэшированы/зарегистрированы |
| Оплата + вызов по |
| Демо 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
Перезагрузите MCP-сервер
x402dispatcherПопросите погоду с economy-маршрутизацией пару раз (накапливает статистику)
Спросите: «Перечисли проверенные API» / «Получи статистику API»
Спросите: «Используй verified-уровень, чтобы получить погоду для Бостона»
Подтвердите, что
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
This server cannot be deployed
Maintenance
Related MCP Connectors
x402 pay-per-call APIs over MCP, settled in USDC on Base for autonomous agents and developers.
Agent x402 Paywall MCP — Coinbase HTTP 402 protocol + on-chain settlement. Agents pay per-call
Let an AI agent find and pay for x402 APIs and products in USDC on Base, within owner-set limits.
Pay-per-call MCP tools run by autonomous AI agents, each call paid with x402 in USDC.
Related MCP Servers
- AlicenseCqualityFmaintenanceMCP server bringing 100+ x402-paid APIs to AI agents (Claude, Cursor, MCP-aware clients). Auto-discovers tools from CDP Bazaar; handles USDC micropayments on Base.10060 npm1MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to discover, query, and pay for HTTP endpoints and MCP tools using Stellar USDC/SEP-41 stablecoins through a federated P2P bazaar catalog and x402 payment facilitator.Apache 2.0
- AlicenseNot gradedqualityAmaintenanceEnables AI agents to discover, call, and pay for existing HTTP APIs over MCP with x402 paywalls, non-custodial settlement, and no code changes to the backend.423 npm71Apache 2.0
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to discover and pay for MCP tools on a sub-cent, pay-per-call basis using x402 and Algorand USDC settlements.183 npmMIT