WatchTower

Seguimiento de costos + escaneo de seguridad para desarrolladores de IA

Documentación

Watchtower MCP

La puerta de seguridad previa al despliegue para aplicaciones creadas con "vibe-coding". No pregunta si tu RLS de Supabase existe — inicia sesión como un usuario aleatorio y como el rol anónimo, y demuestra si pueden leer los datos de tus otros usuarios, directamente dentro de Claude Code, antes de que despliegues.

No hay URL que pegar. No se suben datos. No se requiere despliegue. Se ejecuta localmente en el bucle de agente de tu Claude Code.

La mayoría de los escáneres marcan. Watchtower demuestra.

Commodity scanner   →   ⚠  "RLS may not be enabled on `profiles`."

Watchtower          →   [CRIT] [PROVEN] the anon role read rows from `profiles`
                        belonging to other accounts — RLS is not isolating users.
                        [CRIT] [PROVEN] the OpenAI key in src/config.ts returned
                        HTTP 200 from the vendor — it is LIVE. Rotate it now.

Ejecuta una sonda en vivo, de solo lectura y con reversión entre inquilinos contra tu base de datos — la clase CVE-2025-48757, donde más de 170 aplicaciones filtraron sus tablas de usuarios porque RLS estaba "presente" pero nunca se aplicó realmente — y verifica si una clave filtrada es real llamando al proveedor de esa misma clave. (También rastrea tu gasto real de Claude Code, para que el día del despliegue no sea una sorpresa de $8k.)

Solo lectura. Local primero. MIT — audita el código fuente. Sin cuenta. Nada sale de tu máquina, excepto la verificación de claves opcional, que solo llama al proveedor de cada clave. La sonda puede LEER, nunca ESCRIBIR — cada verificación es una transacción con reversión.

Instalación

npm install -g watchtower-mcp

Añade a tu configuración MCP de Claude Code (~/.claude/settings.json):

{
  "mcpServers": {
    "watchtower": {
      "command": "watchtower-mcp"
    }
  }
}

Reinicia Claude Code. Ahora tienes 9 herramientas disponibles.

Herramientas

Seguimiento de Costos

HerramientaQué hace
watchtower_sync_usageImporta automáticamente el uso real de tokens desde los registros de sesión de Claude Code (~/.claude/projects). Preciso, sin registro manual. Ejecútalo en cualquier momento — los eventos ya importados se omiten.
watchtower_spendConsulta el gasto (hoy / semana / mes, alineado al calendario) con desglose por modelo y cuánto es estimado
watchtower_budgetEstablece alertas de presupuesto diarias/semanales/mensuales (advierte al 80% y 100%)
watchtower_log_usageRespaldo manual para clientes que no son Claude Code. Prefiere sync_usage.

Escaneo de Seguridad

HerramientaQué hace
watchtower_scan_secretsEscanea el código fuente en busca de claves/tokens codificados (Node puro, sin shell). Pasa verify: true para confirmar qué claves están realmente activas mediante una llamada de solo lectura a cada proveedor.
watchtower_scan_supabaseAudita la corrección de RLS en Postgres/Supabase — ejecuta una sonda en vivo de solo lectura entre inquilinos para demostrar si un usuario aleatorio o el rol anónimo pueden leer los datos de otros usuarios. No solo "¿existe RLS?"
watchtower_scan_headersEscanea una URL desplegada en busca de encabezados de seguridad faltantes (CSP, HSTS, X-Frame-Options, etc.)

Panel de Control

HerramientaQué hace
watchtower_statusResumen rápido del gasto + hallazgos de seguridad recientes
watchtower_scan_historyHistorial de hallazgos de seguridad pasados (sin duplicados)

Uso

Una vez instalado, solo pregunta a Claude:

"Sync my Claude Code usage and show this month's spend"
"Scan my project for hardcoded secrets and check if any are live"
"Audit my Supabase database — can other users read my data?"
"Check the security headers on https://myapp.vercel.app"
"Set a $5 daily budget alert"

Cómo Funciona

  • Seguimiento de costos — watchtower_sync_usage analiza los registros de transcripción de Claude Code (los recuentos reales de tokens facturados) y los almacena en una base de datos SQLite local en ~/.watchtower/watchtower.db. Los costos se calculan a partir de una tabla de precios actual; los modelos desconocidos se etiquetan claramente como estimados en lugar de mal preciados silenciosamente. Las ventanas de gasto están alineadas al calendario (UTC) para conciliar con tu factura de Anthropic.
  • Escaneo de secretos — se ejecuta completamente en proceso (sin shell), con deduplicación de superposiciones, filtrado de marcadores de posición/entropía para reducir falsos positivos, y redacción de secretos en toda la salida. Con verify: true, cada clave detectada recibe una única solicitud de verificación de solo lectura a su propio proveedor (Anthropic/OpenAI/Stripe/GitHub) o una decodificación JWT local (Supabase) — para que sepas qué filtraciones son reales.
  • Corrección de RLS — se conecta con el controlador pg (la credencial permanece en proceso), luego dentro de transacciones de solo lectura con reversión, cambia a los roles authenticated y anon e intenta leer cada tabla. Una fila visible para un no propietario aleatorio o para el rol anónimo es una fuga demostrada entre inquilinos — la clase de brecha CVE-2025-48757. Los hallazgos respaldados por una lectura en vivo se marcan como [PROVEN].

Seguridad

Watchtower se mantiene al estándar que escanea:

  • No se invoca ningún shell en ningún lugar. El escáner de secretos lee archivos directamente; la auditoría de RLS usa el controlador pg, nunca psql. Las rutas y cadenas de conexión proporcionadas por el llamador no pueden inyectar comandos, y tu contraseña de base de datos nunca se coloca en una línea de comandos.
  • Los secretos detectados se redactan en toda la salida y nunca se escriben en la base de datos.
  • La verificación de claves en vivo es optativa (verify: true) y contacta solo al proveedor de cada clave a través de endpoints de solo lectura.

Modelos Soportados

Claude Opus 4.6, Sonnet 4.6, Haiku 4.5 y Sonnet 3.5. Los modelos desconocidos se precian como una estimación explícita (tarifas de Sonnet) y se marcan como tales.

Requisitos

  • Node.js 18+
  • Claude Code (o cualquier cliente compatible con MCP)
  • Para la auditoría de RLS: una cadena de conexión de Postgres/Supabase con permiso para leer el esquema e (idealmente) los roles authenticated/anon. No se requiere instalación de psql.

Desarrollo

npm install
npm run build
npm test

Licencia

MIT