UsageWall

Preços ao vivo de LLM como um servidor MCP — seis ferramentas somente leitura para listar, comparar, estimar custo e encontrar o modelo mais barato entre OpenAI, Anthropic, Google, DeepSeek, Mistral, xAI e Meta.

Documentação

UsageWall

Preços de LLM em tempo real como um servidor MCP. Pergunte ao Claude (ou a qualquer cliente MCP) "quanto custa este prompt?" e obtenha números reais de uma tabela de preços verificada manualmente para cada LLM importante. Gratuito, somente leitura, sem autenticação.

MCP Server Endpoint Free forever License: MIT tests

Resumo

Teste rápido:

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

Instalar no Claude.ai:

Configurações → Conectores → Adicionar conector personalizado → cole https://usagewall.vercel.app/api/mcp

Instalar no Claude Desktop / Cursor / Windsurf / Zed / Cline: veja /mcp.


O servidor MCP

Seis ferramentas somente leitura, dois recursos JSON brutos, JSON-RPC 2.0 sobre Streamable HTTP. Zero dependências; ~280 linhas de código; auditável em uma única leitura.

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

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

Código-fonte — api/mcp.js. Testes — tests/mcp.test.js (18 casos). Descritor Smithery — smithery.yaml.


O que mais há neste repositório

Landing page de lista de espera em nível de produção para usagewall.dev, além do protótipo do proxy local. HTML estático + 5 funções serverless da Vercel. Sem etapa de build. Sem framework.


Stack (100% plano gratuito)

CamadaServiçoPlano gratuito
Hospedagem frontendVercel Hobby100GB/mês de banda
Banco de dadosSupabase500MB de banco + 50k MAU
Confirmação de e-mailResend3k e-mails/mês, 100/dia
Anti-bot (opcional)Cloudflare Turnstile1M desafios/mês
CIGitHub Actions2k min/mês (privado) / ilimitado (público)
DomínioPorkbun / CloudflareUS$ 10–15 / ano (único item pago)

Estrutura

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

Configuração inicial

1. Supabase

  • Crie um projeto em supabase.com (plano gratuito).
  • Editor SQL → cole supabase/schema.sql → execute.
  • Configurações → API → copie URL e a chave service_role.

2. Gere dois segredos (obrigatório)

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

Ambos devem ter ≥32 caracteres. O manipulador se recusa a assinar tokens com segredos mais curtos.

3. Resend (opcional, mas recomendado)

  • Cadastre-se em resend.com.
  • Adicione usagewall.dev como domínio (registros DNS via seu registrador).
  • Chaves de API → crie uma. Copie.

4. Deploy na 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

Compre em Porkbun (~US$ 15/ano para .dev). Aponte para a Vercel:

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

Desenvolvimento 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 testar sem a CLI da Vercel, use o servidor de teste:

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

Testes

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

O CI é executado a cada push que toca em usagewall/** (veja .github/workflows/test.yml).


Segurança e privacidade

  • Nenhum IP bruto armazenado. Apenas os primeiros 64 bits de HMAC-SHA256(ip, IP_HASH_SALT).
  • Sem PII nos logs de produção. Endereços de e-mail são mascarados para apenas email_domain.
  • CSP em meta + cabeçalhos. default-src 'self', scripts apenas do próprio domínio.
  • Pré-carregamento HSTS. Todo TLS, sem opção de desativação.
  • Tokens de cancelamento de inscrição assinados com HMAC. Nenhuma consulta ao banco necessária para verificar.
  • Campo honeypot em todos os formulários — invisível para humanos, irresistível para bots.
  • Limite de taxa de 5 req/min por hash de IP (em memória; Turnstile cuida do resto).
  • Limite de corpo de 8KB na API. safeJsonParse nunca lança erro.
  • GitHub Actions fixa ações no SHA do commit + verifica vazamento de segredos.

Leia public/privacy.html para a política voltada ao usuário.


Metas de validação (5 dias)

DiaAçãoCanal
0Comprar domínio + deploy—
1Thread no Twitter (veja launch/COPY.md)X / Twitter
2Show HN + Reddit (×3 subreddits)HN, r/SaaS, r/SideProject, r/IndieHackers
3Post no IndieHackersIndieHackers
4Artigo longo no dev.todev.to
5Medir—

IR se ≥100 e-mails e ≥1 resposta perguntando "quando posso pagar?" NÃO IR se <30 e-mails após o thread de lançamento.


Notas de marca

Esta não é a marca Baku — é UsageWall, um produto da Baku. Herda o DNA de design (escuro e quente, serifas editoriais, sem gradientes chamativos, espaçamento generoso), mas vive de forma independente com identidade própria. O rodapé credita a Baku.

Paleta:

  • fundo #0A0A0B (quase preto quente)
  • texto #F5F4F0 (off-white creme)
  • destaque #E8DFC7 (creme quente — apenas destaques)
  • fundo de código #0E0E10

Tipografia:

  • Display: Fraunces 400/500, frequentemente itálico
  • Corpo: Switzer 400/500
  • Mono: JetBrains Mono 400/500/600

Arquivos que NÃO devem ser commitados

O .gitignore cobre isso, mas seja paranóico sobre:

  • .env, .env.local, .env.*.local
  • .vercel/ (link do projeto)
  • node_modules/

A verificação do CI procura por commits acidentais de sk_live_…, re_…, sbp_….