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
| Herramienta | Qué hace |
|---|---|
watchtower_sync_usage | Importa 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_spend | Consulta el gasto (hoy / semana / mes, alineado al calendario) con desglose por modelo y cuánto es estimado |
watchtower_budget | Establece alertas de presupuesto diarias/semanales/mensuales (advierte al 80% y 100%) |
watchtower_log_usage | Respaldo manual para clientes que no son Claude Code. Prefiere sync_usage. |
Escaneo de Seguridad
| Herramienta | Qué hace |
|---|---|
watchtower_scan_secrets | Escanea 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_supabase | Audita 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_headers | Escanea una URL desplegada en busca de encabezados de seguridad faltantes (CSP, HSTS, X-Frame-Options, etc.) |
Panel de Control
| Herramienta | Qué hace |
|---|---|
watchtower_status | Resumen rápido del gasto + hallazgos de seguridad recientes |
watchtower_scan_history | Historial 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_usageanaliza 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 rolesauthenticatedyanone 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, nuncapsql. 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 depsql.
Desarrollo
npm install
npm run build
npm test
Licencia
MIT