UsageWall

Precios en vivo de LLM como servidor MCP: seis herramientas de solo lectura para listar, comparar, estimar costos y encontrar el modelo más barato en OpenAI, Anthropic, Google, DeepSeek, Mistral, xAI y Meta.

Documentación

UsageWall

Precios de LLM en vivo como servidor MCP. Pregúntale a Claude (o a cualquier cliente MCP) "¿cuánto cuesta este prompt?" y obtén números reales de una tabla de precios verificada manualmente para cada LLM importante. Gratis, solo lectura, sin autenticación.

MCP Server Endpoint Free forever License: MIT tests

TL;DR

Prueba rápida:

curl -s https://usagewall.vercel.app/api/mcp \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

Instalar en Claude.ai:

Configuración → Conectores → Añadir conector personalizado → pega https://usagewall.vercel.app/api/mcp

Instalar en Claude Desktop / Cursor / Windsurf / Zed / Cline: consulta /mcp.


El servidor MCP

Seis herramientas de solo lectura, dos recursos JSON sin procesar, JSON-RPC 2.0 sobre Streamable HTTP. Cero dependencias; ~280 líneas de código; auditable en una sola sesión.

Herramientas — list_models, get_model, compare_models, estimate_cost, cheapest_for, list_providers.

Recursos — usagewall://pricing/full, usagewall://pricing/<provider>.

Código fuente — api/mcp.js. Pruebas — tests/mcp.test.js (18 casos). Descriptor de Smithery — smithery.yaml.


Qué más hay en este repositorio

Página de aterrizaje de lista de espera de nivel de producción para usagewall.dev, además del prototipo del proxy local. HTML estático + 5 funciones serverless de Vercel. Sin paso de compilación. Sin framework.


Stack (100% nivel gratuito)

CapaServicioNivel gratuito
Alojamiento frontendVercel Hobby100GB/mes de ancho de banda
Base de datosSupabase500MB de BD + 50k MAU
Confirmación por correoResend3k correos/mes, 100/día
Anti-bot (opcional)Cloudflare Turnstile1M desafíos/mes
CIGitHub Actions2k min/mes (privado) / ilimitado (público)
DominioPorkbun / Cloudflare$10–15 / año (único elemento de pago)

Estructura

usagewall/
├── public/
│   ├── index.html       # Landing — hero, problem, how, why, pricing, waitlist, footer
│   ├── privacy.html     # Plain-English privacy page
│   ├── styles.css       # Brand: Fraunces + Switzer + JetBrains Mono, dark warm
│   ├── app.js           # Vanilla form-binding, fetch to /api/waitlist
│   ├── favicon.svg
│   ├── og.svg / og.png  # 1200x630 social preview
├── api/
│   ├── waitlist.js      # POST signup endpoint
│   └── unsubscribe.js   # GET unsubscribe with HMAC token
├── lib/
│   ├── email.js         # RFC-aware email validation + throwaway block
│   └── security.js      # rate limit, IP hash, HMAC tokens, safe JSON parse
├── tests/
│   ├── email.test.js    # 12 unit tests
│   ├── security.test.js # 23 unit tests
│   └── api.e2e.test.js  # 13 end-to-end tests with mocked req/res
├── scripts/
│   ├── validate-html.js # CSP-friendly HTML linter (no inline handlers, alt, lang, etc.)
│   └── smoke-api.js     # Live HTTP smoke against waitlist handler
├── supabase/
│   └── schema.sql       # waitlist table + RLS deny-all + stats view
├── launch/
│   └── COPY.md          # Twitter thread, Show HN, Reddit, IndieHackers, dev.to
├── .github/workflows/
│   └── test.yml         # CI: tests + HTML validation + secret-leak grep
├── vercel.json          # Security headers, CSP, cache rules
├── package.json         # `npm test`, `npm run smoke`, `npm run ci`
├── .env.example
└── README.md

Configuración inicial

1. Supabase

  • Crea un proyecto en supabase.com (nivel gratuito).
  • Editor SQL → pega supabase/schema.sql → ejecuta.
  • Configuración → API → copia URL y la clave service_role.

2. Genera dos secretos (obligatorio)

openssl rand -hex 32   # for IP_HASH_SALT
openssl rand -hex 32   # for UNSUBSCRIBE_SECRET

Ambos deben tener ≥32 caracteres. El manejador se niega a firmar tokens con secretos más cortos.

3. Resend (opcional pero recomendado)

  • Regístrate en resend.com.
  • Añade usagewall.dev como dominio (registros DNS a través de tu registrador).
  • Claves API → crea una. Cópiala.

4. Despliegue en Vercel

cd usagewall
vercel link        # creates .vercel/, do not commit
vercel env add SUPABASE_URL
vercel env add SUPABASE_SERVICE_ROLE_KEY
vercel env add IP_HASH_SALT
vercel env add UNSUBSCRIBE_SECRET
vercel env add RESEND_API_KEY     # optional
vercel env add RESEND_FROM        # optional
vercel env add PUBLIC_URL         # https://usagewall.dev
vercel env add ALLOWED_ORIGIN     # https://usagewall.dev
vercel deploy --prod

5. DNS para usagewall.dev

Cómpralo en Porkbun (~$15/año por .dev). Apunta a Vercel:

  • Registro A @ → 76.76.21.21
  • CNAME www → cname.vercel-dns.com

Desarrollo local

cp .env.example .env.local
# Fill in at least: SUPABASE_URL, SUPABASE_SERVICE_ROLE_KEY,
#                   IP_HASH_SALT, UNSUBSCRIBE_SECRET
npx vercel dev
# → http://localhost:3000

Para probar sin la CLI de Vercel, usa el servidor de prueba:

npm run smoke
# Hits the handler with stubbed Supabase, prints pass/fail per case.

Pruebas

npm test                # unit + E2E (48 + 13 = 61 cases, no network)
npm run validate:html   # HTML structure + CSP + a11y checks
npm run smoke           # live HTTP smoke vs handler with stubbed Supabase
npm run ci              # all of the above

El CI se ejecuta en cada push que toque usagewall/** (consulta .github/workflows/test.yml).


Seguridad y privacidad

  • Sin IPs sin procesar almacenadas. Solo los primeros 64 bits de HMAC-SHA256(ip, IP_HASH_SALT).
  • Sin PII en los registros de producción. Las direcciones de correo se redactan a email_domain únicamente.
  • CSP en meta + cabeceras. default-src 'self', scripts solo desde el propio origen.
  • Precarga HSTS. Todo TLS, sin opción de exclusión.
  • Tokens de baja firmados con HMAC. No se necesita búsqueda en BD para verificar.
  • Campo honeypot en cada formulario: invisible para humanos, irresistible para bots.
  • Límite de tasa 5 solicitudes/min por hash de IP (en memoria; Turnstile se encarga del resto).
  • Límite de cuerpo 8KB en la API. safeJsonParse nunca lanza errores.
  • GitHub Actions fija las acciones al SHA del commit + busca secretos filtrados.

Lee public/privacy.html para la política orientada al usuario.


Objetivos de validación (5 días)

DíaAcciónCanal
0Comprar dominio + desplegar—
1Hilo en Twitter (consulta launch/COPY.md)X / Twitter
2Show HN + Reddit (×3 subreddits)HN, r/SaaS, r/SideProject, r/IndieHackers
3Publicación en IndieHackersIndieHackers
4Artículo extenso en dev.todev.to
5Medir—

IR si ≥100 correos y ≥1 respuesta preguntando "¿cuándo puedo pagar?" NO-IR si <30 correos después del hilo de lanzamiento.


Notas de marca

Esta no es la marca Baku: es UsageWall, un producto de Baku. Hereda el ADN de diseño (oscuro cálido, serifas editoriales, sin gradientes llamativos, espaciado generoso) pero vive de forma independiente con su propia identidad. El pie de página acredita a Baku.

Paleta:

  • fondo #0A0A0B (casi negro cálido)
  • texto #F5F4F0 (blanco roto crema)
  • acento #E8DFC7 (crema cálido — solo resaltados)
  • fondo de código #0E0E10

Tipografía:

  • Display: Fraunces 400/500, a menudo en cursiva
  • Cuerpo: Switzer 400/500
  • Mono: JetBrains Mono 400/500/600

Archivos que NO se deben confirmar

El .gitignore lo cubre, pero sé paranoico con:

  • .env, .env.local, .env.*.local
  • .vercel/ (enlace del proyecto)
  • node_modules/

El grep del CI verifica confirmaciones accidentales de sk_live_…, re_…, sbp_….