Debugg AI

oficial

Permite que tus agentes de generación de código creen y ejecuten pruebas integrales sin configuración contra nuevos cambios de código en navegadores remotos a través de la plataforma de pruebas Debugg AI.

¿Qué puedes hacer con Debugg AI MCP?

  • Ejecutar un agente de IA en el navegador contra cualquier URL — describe qué probar en lenguaje natural y check_app_in_browser navega, interactúa y devuelve aprobado/reprobado con capturas de pantalla.
  • Sondear múltiples páginas sin costo de LLM — envía hasta 20 URLs a probe_page para obtener capturas rápidas, errores de consola y resúmenes de red en un solo lote.
  • Activar un rastreo del grafo de conocimiento — usa trigger_crawl para que un agente de IA explore tu aplicación y complete el grafo de conocimiento del proyecto.
  • Gestionar suites y casos de prueba — crea, lista, ejecuta y revisa resultados de suites de prueba mediante test_suite, y define casos individuales con test_case.
  • Inspeccionar artefactos de ejecución — recupera detalles completos de ejecución, capturas de pantalla, trazas HAR y registros de consola a través de executions para depurar fallos.
  • Explorar proyectos, entornos y ejecuciones como recursos — referencia entidades directamente mediante URIs debugg-ai:// para obtener contexto sin invocar herramientas.

Documentación

Debugg AI — Servidor MCP

Pruebas de navegador impulsadas por IA a través del Protocolo de Contexto de Modelo. Apúntalo a cualquier URL (o localhost) y describe qué probar — un agente de IA navega por tu aplicación y devuelve aprobado/reprobado con capturas de pantalla.

Debugg AI MCP server

Configuración

Requiere Node.js 20.20.0 o posterior (requisito transitivo de posthog-node@^5.26.0).

Obtén una clave API en debugg.ai, luego añádela a la configuración de tu cliente MCP:

{
  "mcpServers": {
    "debugg-ai": {
      "command": "npx",
      "args": ["-y", "@debugg-ai/debugg-ai-mcp"],
      "env": {
        "DEBUGGAI_API_KEY": "your_api_key_here"
      }
    }
  }
}

O con Docker:

docker run -i --rm --init -e DEBUGGAI_API_KEY=your_api_key quinnosha/debugg-ai-mcp

Herramientas

El servidor expone 8 herramientas: tres herramientas de Navegador más una herramienta basada en acciones por entidad gestionada. Las herramientas principales son check_app_in_browser (agente de IA completo) y probe_page (sonda de página ligera sin LLM). El resto — project, environment, test_suite, test_case, executions — cada una toma un discriminador action (ej. {"action":"list"}) que selecciona la operación. Las acciones destructivas delete requieren confirmación (un aviso de elicitación donde sea soportado, de lo contrario confirm: true).

Navegador

check_app_in_browser

Ejecuta un agente de navegador de IA contra tu aplicación. El agente navega, interactúa e informa con capturas de pantalla. Las URLs de localhost se tunelizan automáticamente a través de ngrok.

ParámetroTipoDescripción
descriptionstring requeridoQué probar (lenguaje natural)
urlstring requeridoURL objetivo — http://localhost:3000 se tuneliza automáticamente
environmentIdstringUUID de un entorno específico
credentialIdstringUUID de una credencial específica
credentialRolestringElegir una credencial por rol (ej. admin, guest)
usernamestringNombre de usuario para inicio de sesión (efímero — no persistido)
passwordstringContraseña para inicio de sesión (efímera — no persistida)
repoNamestringSobrescribir el nombre del repositorio git auto-detectado (ej. my-org/my-repo)

Una comprobación enfocada por llamada. El agente tiene un presupuesto interno de ~25 pasos; divide suites más amplias en múltiples llamadas.

Cada ejecución exitosa devuelve un bloque browserSession junto con la captura de pantalla — URLs S3 prefirmadas para el HAR capturado (traza de red completa) y el registro de consola (cada mensaje de consola JS). Úsalos para detectar bucles de refetch, errores de hidratación y otros problemas de tiempo de ejecución que pasan las comprobaciones de tipos y las pruebas unitarias:

"browserSession": {
  "harUrl": "https://...session_18139.har?X-Amz-...",
  "consoleLogUrl": "https://...session_18139_console.json?X-Amz-...",
  "recordingUrl": "https://...session_18139_recording.webm?X-Amz-...",
  "harStatus": "downloaded",
  "consoleLogStatus": "downloaded",
  "harRedactionStatus": "redacted",
  "consoleLogRedactionStatus": "redacted"
}

Las URLs son S3 prefirmadas de corta duración — vuelve a consultar la ejecución padre a través de executions {action:"get", uuid} para renovarlas. harStatus / consoleLogStatus desambiguan 'downloaded' (URL obtenible), 'not_available' (la página no emitió nada), 'failed' (la captura falló). En una ejecución nueva, las URLs suelen estar null porque la carga de capturas es asíncrona después de que el agente termina — consulta executions {action:"get", uuid: executionId} hasta que el estado alcance 'downloaded'. Las cabeceras de Autorización / Cookie / token/secret/api_key se limpian del lado del servidor antes de que los artefactos se persistan.

trigger_crawl

Dispara un rastreo de agente de navegador del lado del servidor para poblar el grafo de conocimiento del proyecto. Las URLs de localhost se tunelizan automáticamente. Devuelve {executionId, status, targetUrl, durationMs, outcome?, crawlSummary?, knowledgeGraph?, browserSession?} con knowledgeGraph.imported === true en la ingesta exitosa. El bloque browserSession (URLs de HAR + registro de consola, misma forma que arriba) también está presente en los rastreos completados.

probe_page

Sonda de página por lotes ligera sin LLM. Pasa 1-20 URLs; cada una navega, espera la carga y devuelve el estado renderizado — captura de pantalla + metadatos de página + errores de consola estructurados + resumen de red. Sin bucle de agente, sin coste de LLM, sin aserciones de escenario. Úsalo para "¿acabo de romper /settings?", pruebas de humo multi-ruta después de una refactorización, barridos por PR en CI y comprobaciones rápidas de si está activo donde el bucle de agente de 60-150s de check_app_in_browser es excesivo.

ParámetroTipoDescripción
targetsarray requerido1-20 entradas: [{url, waitForSelector?, waitForLoadState?, timeoutMs?}]
targets[].urlstring requeridoURL pública o localhost (auto-tunelizada)
targets[].waitForLoadStateenum'load' (por defecto) / 'domcontentloaded' / 'networkidle'
targets[].waitForSelectorstringSelector CSS opcional para esperar después de la navegación
targets[].timeoutMsnumberTiempo de espera por URL, 1000-30000 (por defecto 10000)
includeHtmlbooleanDevolver HTML sin procesar en cada resultado (por defecto false)
captureScreenshotsbooleanDevolver un PNG por objetivo (por defecto true)

Todo el lote comparte una única ejecución de backend + sesión de navegador + túnel — 5 URLs en una llamada es drásticamente más rápido que 5 llamadas paralelas de una sola URL. El campo error por URL preserva la resiliencia del lote: un solo objetivo fallido no hace fallar a los demás.

La clave de agregación de networkSummary es origin + pathname — los bucles de refetch (?n=0..4 golpeando repetidamente el mismo endpoint) se colapsan en una sola entrada con el conteo, por lo que /api/poll apareciendo con count: 47 es la señal procesable de "bucle de refetch infinito" que los usuarios pidieron originalmente.

Presupuesto de rendimiento: <10s para 1 URL, <25s para 20. Puerto muerto de localhost devuelve LocalServerUnreachable en <2s sin consumir una ejecución de flujo de trabajo.

project

AcciónParámetrosResultado
get{uuid}Detalle del proyecto curado
list{q?, page?, pageSize?}Resúmenes paginados
create{name, platform, (teamUuid|teamName), (repoUuid|repoName)}Proyecto creado

Equipo y repositorio se resuelven por o bien uuid o bien nombre (coincidencia exacta sin distinción de mayúsculas/minúsculas; NotFound si ninguno, AmbiguousMatch si múltiples). No hay update/delete — renombra o elimina un proyecto desde la aplicación web de DebuggAI.

environment

AcciónParámetrosResultado
get{uuid, projectUuid?}Entorno con credenciales en línea (las contraseñas nunca se devuelven)
list{projectUuid?, q?, page?, pageSize?}Entornos paginados, cada uno con un array de credenciales
create{name, url, description?, projectUuid?, credentials?}Entorno creado (opcionalmente siembra credenciales)
update{uuid, name?, url?, description?, addCredentials?, updateCredentials?, removeCredentialIds?}Entorno parcheado; las operaciones de credenciales se ejecutan eliminar → actualizar → añadir
delete{uuid, projectUuid?, confirm?}Elimina el entorno (en cascada las credenciales) — requiere confirmación

projectUuid se auto-resuelve desde el repositorio git cuando se omite. Los fallos por credencial aparecen en credentialWarnings[] sin bloquear la operación del entorno.

test_suite

AcciónParámetrosResultado
list{projectUuid|projectName, search?, page?, pageSize?}Suites paginadas con estado + tasa de aprobación
create{name, description, projectUuid|projectName}Suite creada
run{suiteUuid|(suiteName+project), targetUrl?}Dispara todas las pruebas de forma asíncrona
results{suiteUuid|(suiteName+project)}Suite + resultados por prueba
delete{suiteUuid|(suiteName+project), confirm?}Eliminación suave — requiere confirmación

test_case

AcciónParámetrosResultado
create{name, description, agentTaskDescription, suiteUuid|(suiteName+project), relativeUrl?, maxSteps?}Caso de prueba creado (no se ejecuta automáticamente)
update{testUuid, name?, description?, agentTaskDescription?}Caso de prueba parcheado
delete{testUuid, confirm?}Eliminación suave — requiere confirmación

executions

AcciónParámetrosResultado
get{uuid}Detalle completo (nodeExecutions + estado + errorInfo) + artefactos de captura de pantalla/gif
list{status?, projectUuid?, page?, pageSize?}Resúmenes paginados

Un 404 del backend se muestra como isError: true con {error: 'NotFound', message, uuid}. Las credenciales siempre se devuelven sin contraseñas.

Paginación

Cada respuesta en modo filtro está paginada. Forma de la respuesta:

{
  "filter": { "...echoed query params..." },
  "pageInfo": { "page": 1, "pageSize": 20, "totalCount": 47, "totalPages": 3, "hasMore": true },
  "<items>": [ ... ]
}

Pasa page opcional (indexado en 1, por defecto 1) y pageSize (por defecto 20, máximo 200; los valores sobredimensionados se limitan). Ninguna respuesta se trunca silenciosamente.

Recursos

Junto con las herramientas, el servidor expone las entidades de solo lectura como recursos MCP para que los clientes puedan navegar y @-mencionarlos como contexto:

URIQué
debugg-ai://projectsTodos los proyectos (primera página)
debugg-ai://environmentsEntornos para el proyecto auto-detectado
debugg-ai://executionsEjecuciones recientes (primera página)
debugg-ai://project/{uuid}Un proyecto, detalle completo
debugg-ai://environment/{uuid}Un entorno (credenciales en línea, contraseñas redactadas)
debugg-ai://execution/{uuid}Una ejecución, detalle completo del nodo + enlaces a artefactos

Las lecturas se despachan a los mismos manejadores que las herramientas project / environment / executions, por lo que los datos y la autenticación son idénticos. Los recursos son aditivos — los clientes sin soporte de recursos siguen usando las herramientas.

Invariantes de seguridad

  • Las contraseñas son de solo escritura. Nunca aparecen en ningún cuerpo de respuesta de ninguna herramienta.
  • Las URLs de túnel (*.ngrok.debugg.ai) se eliminan de todas las respuestas del agente de navegador, incluyendo el texto escrito por el agente.
  • Los 404 del backend se muestran como isError: true con {error: 'NotFound', ...}, nunca como excepciones lanzadas.
  • La falta de DEBUGGAI_API_KEY se muestra como un error de herramienta estructurado en la primera invocación — el servidor aún se registra y lista las herramientas normalmente.

Migración a v3.0.0 (herramientas basadas en acciones)

v3 consolidó las 20 herramientas por verbo en 8 herramientas basadas en acciones. Herramienta antigua → nueva tool {action}:

EliminadaReemplazo
search_projectsproject {action:"get"} / project {action:"list"}
create_projectproject {action:"create"}
update_project, delete_projectEliminadas — usa la aplicación web de DebuggAI
search_environmentsenvironment {action:"get"} / {action:"list"}
create_environment / update_environment / delete_environmentenvironment {action:"create"|"update"|"delete"}
create_test_suite / search_test_suites / run_test_suite / get_test_suite_results / delete_test_suitetest_suite {action:"create"|"list"|"run"|"results"|"delete"}
create_test_case / update_test_case / delete_test_casetest_case {action:"create"|"update"|"delete"}
search_executionsexecutions {action:"get"|"list"}
trigger_crawl parámetro headlessEliminado — siempre sin cabeza (headless)

Las acciones delete ahora requieren confirmación (aviso de elicitación, o confirm: true). Los clientes recogen la nueva superficie al reiniciar MCP.

Migración desde v1.x (cambio disruptivo en v2.0.0)

v2 colapsó una superficie de 22 herramientas a 11. Mapeo de herramienta antigua → nueva:

EliminadaReemplazo
list_projects, get_projectsearch_projects (modo uuid vs modo filtro)
list_environments, get_environmentsearch_environments
list_credentials, get_credentialsearch_environments — credenciales en línea en cada entorno
create_credentialcreate_environment({credentials: [...]}) siembra, o update_environment({addCredentials: [...]})
update_credentialupdate_environment({updateCredentials: [{uuid, ...patch}]})
delete_credentialupdate_environment({removeCredentialIds: [uuid]})
list_teams, list_reposcreate_project({teamName, repoName}) — resolución de nombres con manejo de ambigüedad
list_executions, get_executionsearch_executions
cancel_executionEliminada — el apagado del backend es automático

Cambios en la forma de la respuesta: el campo simple count en las respuestas de lista desapareció — usa pageInfo.totalCount.

Configuración

Var de entornoRequeridaPropósito
DEBUGGAI_API_KEYClave API del backend. Alias: DEBUGGAI_API_TOKEN, DEBUGGAI_JWT_TOKEN.
DEBUGGAI_API_URLnoURL base del backend. Por defecto https://api.debugg.ai.
DEBUGGAI_TOKEN_TYPEnotoken (por defecto) o bearer.
LOG_LEVELnoerror / warn / info (por defecto) / debug.
POSTHOG_API_KEYnoSobrescribe la clave de proyecto de telemetría incrustada (ej. fork privado).
DEBUGGAI_TELEMETRY_DISABLEDnoEstablecer a 1 / true / yes / on para deshabilitar la telemetría por completo.
DEBUGGAI_API_KEY=your_api_key

Transporte remoto / HTTP (opcional)

Por defecto, el servidor habla stdio (npx local). En su lugar, puede ejecutarse como un MCP remoto multi-usuario alojado sobre HTTP Transmisible sin estado + OAuth:

DEBUGGAI_MCP_TRANSPORT=http PORT=3000 DEBUGGAI_TOKEN_TYPE=bearer npx -y @debugg-ai/debugg-ai-mcp@latest

Es un Servidor de Recursos OAuth: cada POST /mcp necesita Authorization: Bearer <token>; los tokens faltantes o inválidos reciben un 401 con un WWW-Authenticate que apunta a los metadatos RFC 9728, y los clientes ejecutan el flujo OAuth contra el servidor de autorización anunciado. El portador tiene alcance de solicitud — api.debugg.ai lo valida.

EndpointPropósito
POST /mcpMCP Streamable HTTP (protegido por portador)
GET /.well-known/oauth-protected-resourceMetadatos RFC 9728 (descubrimiento del servidor de autorización)
GET /healthVerificación de salud del balanceador de carga / ECS
Variable de entornoValor predeterminadoPropósito
DEBUGGAI_MCP_TRANSPORTstdioEstablecer en http para el transporte remoto
PORT3000Puerto de escucha HTTP
DEBUGGAI_MCP_PUBLIC_URLhttps://mcp.debugg.aiURL pública del recurso de este servidor (RFC 9728 resource)
DEBUGGAI_OAUTH_ISSUERhttps://auth.debugg.aiServidor de autorización anunciado a los clientes
DEBUGGAI_TOKEN_TYPEtokenEstablecer en bearer para que los tokens OAuth se reenvíen como Authorization: Bearer

Las instalaciones stdio no necesitan nada de esto.

Telemetría

El servidor MCP se distribuye con telemetría habilitada por defecto — una clave de proyecto PostHog embebida de solo escritura (phc_*) para que el equipo pueda observar tasas de aciertos de caché, cadencia de sondeo, confiabilidad del túnel y otras métricas operativas en toda la base instalada. Eventos capturados:

EventoCuándo
tool.executed / tool.failedPor llamada a herramienta
workflow.executedPor ejecución del agente navegador (lleva pollCount, durationMs, finalIntervalMs)
tunnel.provisioned / tunnel.provision_retry / tunnel.stoppedPor evento del ciclo de vida del túnel
template.lookup / project.lookupAcierto/fallo de caché con durationMs en llamada en frío

Postura de privacidad:

  • El ID distinto es SHA-256(api_key).slice(0, 16) — nunca la clave en bruto, sin PII.
  • Las claves phc_* son de solo escritura por convención de PostHog; es seguro incrustarlas en el código fuente.
  • Establezca DEBUGGAI_TELEMETRY_DISABLED=1 para excluirse por completo (se resuelve en un proveedor sin operación; ningún evento sale del proceso).

El modo activo se registra al iniciar:

Telemetry enabled (PostHog, DebuggAI default project). Set DEBUGGAI_TELEMETRY_DISABLED=1 to opt out.
Telemetry enabled (PostHog, custom POSTHOG_API_KEY)
Telemetry disabled (DEBUGGAI_TELEMETRY_DISABLED is set)

Desarrollo Local

npm install
npm run build
npm run test:e2e        # real end-to-end evals against the backend

El conjunto de pruebas genera el servidor MCP construido como un subproceso, ejercita cada herramienta contra un backend real y escribe artefactos por flujo en scripts/evals/artifacts/<timestamp>/. Consulte scripts/evals/flows/ para los escenarios individuales.

Registro MCP: debugg-ai-local vs debugg-ai

Este repositorio incluye un .mcp.json que registra un servidor con alcance de proyecto llamado debugg-ai-local que apunta a node dist/index.js — el código local recién construido. Solo se activa cuando el directorio de trabajo de Claude Code es este repositorio.

Sus otros proyectos deben usar el registro debugg-ai con alcance de usuario que obtiene el paquete npm publicado:

npm run mcp:global      # registers debugg-ai in ~/.claude.json to npx -y @debugg-ai/debugg-ai-mcp

Después de editar el código aquí, ejecute npm run mcp:local (que solo reconstruye) para que la próxima invocación de debugg-ai-local recoja sus cambios.

Enlaces

Panel · Documentos · Incidencias · Discord


Licencia Apache-2.0 © 2025 DebuggAI