x402-mcp-demo
x402-mcp-demo
MCP-сервер, вызовы инструментов которого тарифицируются и оплачиваются через x402, а также эталонный клиент-платежный прокси, позволяющий любому стандартному MCP-клиенту использовать платный инструмент, не зная о существовании x402. Расчеты производятся в реальном тестовом USDC в сети Base Sepolia и поступают на счет в песочнице Catena.
flowchart LR
CL["Standard MCP client<br/>Claude Code, Inspector"] -->|stdio JSON-RPC| PX["Paying proxy<br/>holds the wallet, spend cap"]
PX -->|Streamable HTTP + x402| SV["Paid MCP server<br/>gate in front of the handler"]
SV -->|verify then settle| F[Facilitator]
F -->|USDC| CA[(Catena sandbox account)]
classDef pay stroke-width:2px
class PX,SV payКак это работает
Запрос x402 находится на HTTP-уровне транспорта MCP Streamable HTTP, под обрамлением JSON-RPC, поэтому сам протокол MCP не изменяется, а стандартные клиенты остаются совместимыми.
initialize,tools/listи бесплатный инструментpricingничего не стоят.tools/callдляpremium_market_signalвызывает 402 с запросом x402 v2 (точная схема). Прокси оплачивает его, фасилитатор переводит средства на настроенныйpayTo, и только после этого возвращается успешный результат работы инструмента. Порядок промежуточного ПО неизменен: неоплаченные вызовы никогда не доходят до обработчика инструмента; MCP HTTP 4xx отменяет расчет.Прокси отказывает в платном вызове ДО оплаты, если его текущая сумма превысит
PROXY_SPEND_CAP_USD. Лимит задается конфигурацией и никогда не вычисляется из аргументов инструмента, поэтому вызов инструмента, внедренный через подсказку, не может его увеличить.
Последовательность вызовов, включая моменты отмены расчета, описана в docs/architecture.md.
Related MCP server: x402 MCP Proxy
Настройка
Требуется Node >= 22.13 (см. .nvmrc) и pnpm.
corepack enable
pnpm install
cp .env.example .env
# SELLER_PAY_TO_ADDRESS: your Catena sandbox account's base-sepolia USDC
# deposit address, from app.catena.com
# BUYER_EVM_PRIVATE_KEY: a testnet wallet the proxy pays from. Fund it with
# Base Sepolia USDC at https://faucet.circle.com (select Base Sepolia).
# USDC only; no ETH is needed, transfers are gasless EIP-3009.Обе точки входа завершаются с кодом 2, когда конфигурация отсутствует или недействительна, и с кодом 1, когда необходимая зависимость недоступна (фасилитатор для сервера, вышестоящий MCP-сервер для прокси).
Демонстрация: полный цикл одной командой
pnpm demoЗапускает платный сервер с публичным фасилитатором x402, управляет стандартным MCP-клиентом через платежный прокси и выводит: бесплатное обнаружение, а затем оплаченный вызов инструмента, переводящий $0.001 тестового USDC на депозитный адрес Catena.
Увидеть 402 самостоятельно
Запустите pnpm server в одном терминале, затем запросите платный инструмент без оплаты. Сервер отвечает на /healthz своей ценой и именем платного инструмента, что также проверяет прокси при запуске:
curl -s http://localhost:4040/healthz{"status":"ok","paidTool":"premium_market_signal","price":"$0.001"}Сам запрос передается в заголовке ответа PAYMENT-REQUIRED, а не в теле (тело — {}), поэтому декодируйте заголовок, чтобы прочитать его:
curl -si -X POST http://localhost:4040/mcp \
-H 'content-type: application/json' \
-H 'accept: application/json, text/event-stream' \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"premium_market_signal","arguments":{"topic":"usdc"}}}' \
| grep -i '^payment-required:' | tr -d '\r' | cut -d' ' -f2 | base64 -d{"x402Version":2,"error":"Payment required","resource":{"url":"http://localhost:4040/mcp","description":"One invocation of the premium_market_signal MCP tool","mimeType":""},"accepts":[{"scheme":"exact","network":"eip155:84532","amount":"1000","asset":"0x036CbD53842c5426634e7929541eC2318f3dCF7e","payTo":"0x000000000000000000000000000000000000dEaD","maxTimeoutSeconds":300,"extra":{"name":"USDC","version":"2"}}]}Уберите | grep ..., чтобы увидеть строку состояния: HTTP/1.1 402 Payment Required. Инструмент не запускался, поэтому ничего не было оплачено.
Использование с Claude Code (стандартный клиент)
Запустите платный сервер в одном терминале (pnpm server), затем зарегистрируйте прокси как обычный stdio MCP-сервер в .mcp.json:
{
"mcpServers": {
"paid-market-signal": {
"command": "pnpm",
"args": ["--dir", "/path/to/x402-mcp-demo", "proxy"]
}
}
}Прокси считывает BUYER_EVM_PRIVATE_KEY и UPSTREAM_MCP_URL из собственного .env этого репозитория, поэтому никакие секреты не попадают в .mcp.json. (.mcp.json в любом случае игнорируется git; сохраните это так, если скопируете данную настройку.)
Claude Code выводит оба инструмента и вызывает их обычным образом; прокси оплачивает 402 за кулисами. MCP Inspector работает аналогично:
npx @modelcontextprotocol/inspector pnpm proxy.
Тесты
pnpm test запускает наборы тестов сервера и прокси с внутрипроцессным сервером и записывающим фиктивным фасилитатором: без сети, без денег. Каждый инвариант денежного пути имеет тест, который проваливается при его нарушении.
Инвариант | Тест |
Обнаружение и бесплатные инструменты ничего не стоят | обслуживает initialize, tools/list и бесплатные инструменты без какой-либо оплаты |
Неоплаченный вызов платного инструмента получает 402 до выполнения | отклоняет неоплаченный вызов платного инструмента с запросом 402 до его выполнения |
Платный вызов рассчитывается ровно один раз | запускает платный инструмент после оплаты клиентом, а обнаружение остается бесплатным |
Обнаружение остается бесплатным и через прокси | сохраняет бесплатные поверхности бесплатными через прокси |
Стандартный клиент платит, не зная о существовании x402 | прозрачно оплачивает платный инструмент и возвращает его результат |
JSON-RPC пакет отклоняется, без побитовой проверки | отклоняет JSON-RPC пакетные запросы целиком (отказозамкнутый) |
MCP HTTP 4xx отменяет расчет | не производит расчет, когда платный вызов возвращает MCP HTTP 4xx |
Уведомление (без id) никогда не тарифицируется | не тарифицирует вызов платного инструмента в форме уведомления (без id) |
Неразбираемое тело отклоняется, без ценообразования | отклоняет платный tools/call, отправленный как text/plain, не разобранный и не оплаченный |
Одно выполнение вышестоящего сервера на платный вызов | отправляет платный вызов дважды (402, затем оплаченный повтор) и рассчитывает один раз |
Подписывается только USDC в указанной сети | отклоняет неполитический запрос (неверная сеть, неверный актив) без подписи |
Лимит расходов применяется до любой оплаты | отклоняет вызов, превышающий лимит расходов, до любой оплаты |
Параллельные вызовы не могут оба попасть под лимит | ограничивает параллельные платные вызовы: только один из двух оплачивается при лимите в один вызов |
Область применения
Только публичные поверхности: MCP TypeScript SDK, публичные пакеты и фасилитатор x402, а также счет в песочнице Catena в качестве принимающей стороны. Версии и ограничения: docs/architecture.md.
Лицензия
MIT
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseAqualityAmaintenanceAn MCP server that enables AI agents to access paid AI inference and web tools via HTTP 402 micropayments in USDC on Base, using the agent's wallet as identity.14524MIT
- Alicense-qualityDmaintenanceA local MCP proxy that connects to remote MCP servers and automatically handles x402 payments, signing USDC on-chain when a tool returns HTTP 402.71MIT
- FlicenseAqualityBmaintenanceMCP server for a live x402 payment gateway on Base (USDC). Lets AI agents discover, preview for free, then pay per call — with prepaid gasless payments, signed receipts, and delta delivery.7
- Alicense-qualityCmaintenanceMCP server that provides AI agents with pay-per-call access to a suite of tools (honeypot check, token market, DeFi yields, etc.) via USDC on Base using the x402 protocol.23MIT
Related MCP Connectors
Monetize any MCP server: x402 paywall, pay-per-call billing in USDC on Base, agent marketplace.
Agent-commerce MCP server for x402/USDC payments and affiliate splits on Base.
Agent x402 Paywall MCP — Coinbase HTTP 402 protocol + on-chain settlement. Agents pay per-call
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/catena-oss/x402-mcp-demo'
If you have feedback or need assistance with the MCP directory API, please join our Discord server