PayCheck
MCP/API gratuito que evalúa un dominio de comerciante, URL https o billetera 0x antes de que un agente pague (confiable/desconocido/sospechoso/bloqueado). No envía pagos.
Servidor MCP alojado
npx add-mcp 'https://paycheck.toolweather.workers.dev/mcp'Se instala en Claude Code, Codex, Cursor y más
Documentación
PayCheck
PayCheck evalúa si un dominio, una URL https o una billetera 0x es segura para pagar antes de que un agente autónomo envíe dinero.
Forma parte de la suite Toolweather, en la misma familia que Toolweather MCP health, Upstream y SpendGate. SpendGate es para límites de gasto. PayCheck es solo la verificación de confianza del beneficiario. No envía pagos, no firma transacciones y no guarda claves de billetera. Un paquete de Toolweather puede exponer esta API más adelante con x-tw-bundle-secret y x-tw-bundle-client.
La puntuación es determinista. amount_usd, category y cualquier texto de propósito se descartan. Reformularlos no puede buscar un veredicto más favorable.
Cuándo usarlo
Llama a PayCheck una vez por beneficiario, inmediatamente antes de un pago, factura o transferencia.
- Usa
check_merchantpara un dominio (api.openai.com), una URL https o una dirección0xcon 40 caracteres hexadecimales. - Usa
get_quotapara ver cuántas verificaciones gratuitas quedan hoy. - Usa
get_api_keyuna vez para generar una clavepc_live_…gratuita. No lo llames en cada turno.
No uses PayCheck para enviar dinero, guardar claves ni para anular un block preguntando de nuevo con una categoría más amigable.
Puntuación (política v1)
Reglas completas, lista de permitidos y tabla de penalizaciones: GET /v1/policy (o http://127.0.0.1:8791/v1/policy localmente).
Comienza en 100 y resta penalizaciones. policy_version es "1".
| Señal | Resultado |
|---|---|
| Host en lista de permitidos, https, puerto 443 | trusted, puntuación de al menos 92 |
| Dominio maduro que no está en la lista de permitidos | unknown (nunca trusted) |
| La consulta de edad RDAP falló | penalización pequeña, la edad no se inventa |
| Edad del dominio menor a 30 días | suspicious |
| Edad del dominio menor a 7 días | suspicious |
| Edad del dominio menor a 2 días | block |
| No-https, IP cruda, localhost, dirección privada, userinfo en URL | block |
| Lista de bloqueo, patrón de nombre fraudulento, TLD malo, typosquat de una marca permitida | block |
| Muchos guiones, punycode o suplantación de marca | suspicious |
Billetera 0x, hex inválido o dirección quemada / cero | block |
Cualquier otra billetera 0x | unknown. Sin análisis de cadena en v1 |
trusted es solo para la lista de permitidos publicada (alrededor de 40 hosts API conocidos de IA y desarrolladores, incluyendo openai.com, anthropic.com, stripe.com, github.com, cloudflare.com, vercel.com y supabase.com). Un dominio nuevo o aleatorio nunca se confía.
Acciones recomendadas: proceed, verify_out_of_band, require_human_review, do_not_pay.
La edad del dominio usa RDAP público (https://rdap.org). Las consultas exitosas se almacenan en caché en D1 durante 7 días. Los fallos se almacenan en caché durante 24 horas.
Nivel gratuito
| Llamador | Verificaciones por día UTC | Precio |
|---|---|---|
| IP anónima | 100 | Gratis |
Clave pc_live_… gratuita (POST /v1/keys o get_api_key) | 1,000 | Gratis |
Cliente de paquete, x-tw-bundle-client es hex (16+ caracteres) | 1,000 | Gratis |
Cliente de paquete, anon o anon:… (y cualquier otro id no-hex) | 100 | Gratis |
| Por encima del límite diario | por verificación | $0.001 USDC |
El mismo llamador y el mismo objetivo son idempotentes durante 60 segundos y no consumen una segunda verificación gratuita.
No facturado: get_quota, get_api_key, GET /v1/policy, GET /health, documentación y descubrimiento MCP.
La generación de claves está limitada a 10 claves por IP por día UTC. PayCheck almacena solo un hash SHA-256 de la clave.
Exceso x402
Las verificaciones por encima del límite cuestan $0.001 USDC (1000 unidades atómicas) en Base (eip155:8453), esquema exact, activo 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913, facilitador https://facilitator.payai.network.
PAY_TO es la dirección receptora. Es un secreto de Worker. Si no está configurado, las llamadas por encima del límite devuelven HTTP 402 con error: "payment_not_configured" y no se cobra nada.
Autenticación de paquete: el encabezado x-tw-bundle-secret debe ser igual al secreto de Worker BUNDLE_PROXY_SECRET, y x-tw-bundle-client identifica al llamador final.
API
| Método | Ruta | |
|---|---|---|
POST | /v1/check | { "target", "amount_usd"?, "category"?, "api_key"? } |
POST | /v1/keys | Generar pc_live_… |
GET | /v1/quota | Verificaciones gratuitas restantes |
GET | /v1/policy | Política de puntuación v1 |
GET | /health | Estado |
GET | /openapi.json | OpenAPI |
GET | /llms.txt, /llms-full.txt | Documentación para agentes |
POST | /mcp | MCP streamable HTTP |
GET | /.well-known/mcp y /.well-known/mcp.json | Descubrimiento MCP |
GET | /.well-known/x402 | Descubrimiento de pagos |
Versiones del protocolo MCP: 2025-06-18 y 2025-03-26. Respuestas JSON sin estado (sin sesión). GET /mcp devuelve 405.
Herramientas:
check_merchant— puede escribir historial de verificaciones.readOnlyHint: false,idempotentHint: true,openWorldHint: true,destructiveHint: false.get_quota— gratuita.readOnlyHint: true,idempotentHint: true.get_api_key— gratuita, genera una clave. No es de solo lectura. No la llames en cada turno.
curl -s -X POST http://127.0.0.1:8791/v1/check \
-H 'content-type: application/json' \
-d '{"target":"https://api.openai.com"}'
{
"mcpServers": {
"paycheck": {
"type": "http",
"url": "https://paycheck.toolweather.workers.dev/mcp"
}
}
}
Entrada stdio de Glama, después de npm run build:
node dist/stdio.js
El proceso stdio habla JSON-RPC delimitado por líneas nuevas (un objeto JSON por línea) y también acepta tramas Content-Length en la entrada. Su cuota y claves están en memoria. La persistencia de producción es el Worker.
Local
npm install
npx wrangler d1 migrations apply paycheck --local
npm run dev
npm test
npm run typecheck
npm run dev sirve la API y la página de inicio en el puerto 8791.
.dev.vars opcional (ignorado por git; ver .dev.vars.example):
# PAY_TO=0xYourReceivingAddress
# BUNDLE_PROXY_SECRET=replace-with-a-long-random-string
Despliegue
La producción vive en paycheck.toolweather.workers.dev. wrangler.toml ya tiene el D1 de producción database_id. PAY_TO y BUNDLE_PROXY_SECRET son secretos de Worker. No los pongas en [vars] ni en git.
npx wrangler d1 migrations apply paycheck --remote
npx wrangler secret put PAY_TO
npx wrangler secret put BUNDLE_PROXY_SECRET
npx wrangler deploy
Verifica el paquete sin desplegar:
npm run dry-run
Estructura
src/score.ts— puntuador puro, cubierto por pruebas unitariassrc/http.ts— rutas Honosrc/mcp.ts— JSON-RPC HTTP transmisiblesrc/stdio.ts— entrada stdio de Glama (dist/stdio.js)migrations/— esquema D1public/— página de iniciolhm.plugin.json,glama.json— metadatos de listado de directorio
Licencia
MIT. Ver LICENSE.