Servidor MCP remoto (Cloudflare Workers) con una tool que resuelve satisfacción real de rangos semver:
validar_semver— evalúa una versión (ej:1.2.3) contra una lista de rangos (^1.2.3,~2.0,2.x,>=1.0.0 <2.0.0, ...) usando el mismo motor semver que usa npm (semver), no una suposición del modelo sobre qué debería matchear.
Sin base de datos, sin estado persistente: cada llamada crea un McpServer nuevo (ver createServer() en src/index.ts) y es autocontenida.
Cobra por llamada vía x402 — pago en USDC real sobre Base mainnet, contra el facilitator de Coinbase Developer Platform (CDP). El pago viaja dentro del propio JSON-RPC de MCP (_meta), no como header HTTP; ver src/payments.ts.
| Tool | Precio |
|---|---|
validar_semver |
$0.01 USDC |
Un tools/call sin pago devuelve isError: true con los accepts (red, monto, payTo) que el cliente necesita para pagar y reintentar — no una excepción sin explicar.
src/
index.ts # registra la tool en el McpServer y expone el handler HTTP MCP
payments.ts # cobro x402 sobre Base mainnet vía facilitator de CDP
tools/
semver.ts # lógica pura de validar_semver (testeable sin Workers)
semver.test.ts
scripts/
dev-node.ts # servidor de dev que corre el handler en Node puro, sin wrangler
wrangler dev: el runtime real de Cloudflare Workers (workerd) requiere macOS 13.5+. Si tu Mac tiene una versión más vieja, wrangler dev (y npm run dev) van a fallar. Este proyecto trae un shim en Node puro que corre exactamente el mismo fetch() handler sin necesitar workerd.
npm installnpm testnpm run devnpm run dev:nodeLevanta en http://localhost:8787/mcp, leyendo las credenciales de CDP desde ~/.mcp-tools-factory-credentials.env (compartidas entre todas las tools de esta fábrica).
# 1) initialize
curl -s -X POST http://localhost:8787/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"curl-test","version":"0.0.1"}}}'
# 2) tools/list
curl -s -X POST http://localhost:8787/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}'
# 3) tools/call — validar_semver
curl -s -X POST http://localhost:8787/mcp \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-d '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"validar_semver","arguments":{"version":"1.2.3","ranges":["^1.2.3","^1.3.0","~1.2.0","2.x"]}}}'Las respuestas vienen como Server-Sent Events (event: message + data: {...}); el data: es la respuesta JSON-RPC de siempre.
Desplegado en https://validar-semver.encodari.workers.dev/mcp (Cloudflare Workers). Publicado en el registry oficial de MCP, Smithery, mcp.so y con PR abierto a awesome-mcp-servers.
- Cobra en Base mainnet con dinero real. Para volver a testnet (Base Sepolia,
eip155:84532) durante desarrollo, cambiáNETWORKensrc/payments.ts. - No tiene base de datos ni estado persistente entre llamadas (más allá de la config de cobro, cacheada en memoria por isolate — ver
src/payments.ts).