x402-mcp-demo
x402-mcp-demo
Un servidor MCP cuyas invocaciones de herramientas se miden y cobran mediante x402, junto con un cliente de referencia de proxy de pago que permite a cualquier cliente MCP estándar usar la herramienta de pago sin saber que x402 existe. La liquidación es en USDC real de testnet en Base Sepolia, depositada en una cuenta sandbox de 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 payCómo funciona
El desafío x402 reside en la capa HTTP del transporte HTTP transmisible de MCP, debajo del marco JSON-RPC, por lo que el protocolo MCP en sí no se modifica y los clientes estándar siguen siendo compatibles.
initialize,tools/listy la herramienta gratuitapricingno cuestan nada.tools/callenpremium_market_signalgenera un 402 con un desafío x402 v2 (esquema exacto). El proxy lo paga, el facilitador liquida en elpayToconfigurado, y solo entonces se devuelve un resultado exitoso de la herramienta. El orden del middleware es el invariante: las llamadas no pagadas nunca llegan al manejador de la herramienta; MCP HTTP 4xx cancela la liquidación.El proxy rechaza una llamada de pago ANTES de pagar cuando su total acumulado superaría
PROXY_SPEND_CAP_USD. El límite es configuración, nunca se deriva de los argumentos de la herramienta, por lo que una llamada de herramienta inyectada mediante prompt no puede aumentarlo.
La secuencia llamada por llamada, incluido dónde se cancela la liquidación, está en docs/architecture.md.
Related MCP server: x402 MCP Proxy
Configuración
Requiere Node >= 22.13 (ver .nvmrc) y 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.Ambos puntos de entrada salen con código 2 cuando falta la configuración o es inválida, y con 1 cuando una dependencia que necesitan es inalcanzable (el facilitador para el servidor, el servidor MCP upstream para el proxy).
Demo: el ciclo completo en un comando
pnpm demoInicia el servidor de pago contra el facilitador público x402, dirige un cliente MCP estándar a través del proxy de pago, e imprime: descubrimiento gratuito, luego la llamada de herramienta de pago que liquida $0.001 de USDC testnet en la dirección de depósito de Catena.
Ver el 402 usted mismo
Ejecute pnpm server en una terminal, luego solicite la herramienta de pago sin pagar. El servidor responde a /healthz con su precio y el nombre de la herramienta de pago, que es también lo que el proxy consulta al iniciar:
curl -s http://localhost:4040/healthz{"status":"ok","paidTool":"premium_market_signal","price":"$0.001"}El desafío en sí viaja en el encabezado de respuesta PAYMENT-REQUIRED, no en el cuerpo (el cuerpo es {}), así que decodifique el encabezado para leerlo:
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"}}]}Elimine | grep ... para ver la línea de estado: HTTP/1.1 402 Payment Required. La herramienta nunca se ejecutó, por lo que no se liquidó nada.
Usarlo desde Claude Code (cliente estándar)
Ejecute el servidor de pago en una terminal (pnpm server), luego registre el proxy como un servidor MCP stdio ordinario en .mcp.json:
{
"mcpServers": {
"paid-market-signal": {
"command": "pnpm",
"args": ["--dir", "/path/to/x402-mcp-demo", "proxy"]
}
}
}El proxy lee BUYER_EVM_PRIVATE_KEY y UPSTREAM_MCP_URL del propio .env de este repositorio, por lo que ningún secreto va a .mcp.json. (.mcp.json está en gitignore aquí de todos modos; manténgalo así si copia esta configuración).
Claude Code lista ambas herramientas y las llama normalmente; el proxy paga el 402 en segundo plano. MCP Inspector funciona de la misma manera: npx @modelcontextprotocol/inspector pnpm proxy.
Pruebas
pnpm test ejecuta las suites del servidor y del proxy contra un servidor en proceso con un facilitador falso que graba: sin red, sin dinero. Cada invariante de la ruta de dinero tiene una prueba que falla si se rompe.
Invariante | Prueba |
El descubrimiento y las herramientas gratuitas no cuestan nada | sirve initialize, tools/list y herramientas gratuitas sin ningún pago |
Una llamada de herramienta de pago no pagada recibe un 402 antes de ejecutarse | rechaza una llamada de herramienta de pago no pagada con un desafío 402 antes de que la herramienta se ejecute |
Una llamada de pago se liquida exactamente una vez | ejecuta la herramienta de pago una vez que el cliente paga, y el descubrimiento sigue siendo gratuito después |
El descubrimiento también se mantiene gratuito a través del proxy | mantiene las superficies gratuitas gratuitas a través del proxy |
Un cliente estándar paga sin saber que x402 existe | paga por la herramienta de pago de forma transparente y devuelve su resultado |
Un lote JSON-RPC es rechazado, nunca evaluado por elemento | rechaza las solicitudes de lote JSON-RPC de plano (fallo cerrado) |
MCP HTTP 4xx cancela la liquidación | no liquida cuando una llamada de pago devuelve MCP HTTP 4xx |
Una notificación (sin id) nunca se cobra | no cobra una llamada de herramienta de pago con forma de notificación (sin id) |
Un cuerpo no analizable es rechazado, no se tasa | rechaza una llamada de herramienta de pago enviada como text/plain, sin analizar y sin cobrar |
Una ejecución upstream por llamada de pago | publica una llamada de pago dos veces (402 luego reintento de pago) y liquida una vez |
Solo se firma USDC en la red fijada | rechaza un desafío fuera de política (red incorrecta, activo incorrecto) sin firmar |
El límite de gasto se aplica antes de cualquier pago | rechaza una llamada que supere el límite de gasto antes de cualquier pago |
Las llamadas concurrentes no pueden ambas pasar por debajo del límite | limita las llamadas de pago concurrentes: solo una de dos se liquida bajo un límite de una llamada |
Alcance
Solo superficies públicas: el SDK de MCP TypeScript, los paquetes públicos x402 y el facilitador, y una cuenta sandbox de Catena como lado receptor. Versiones y límites: docs/architecture.md.
Licencia
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