Debugg AI

oficial

Permita que seus agentes de geração de código criem e executem testes ponta a ponta sem configuração contra novas alterações de código em navegadores remotos por meio da plataforma de testes Debugg AI.

O que você pode fazer com Debugg AI MCP?

  • Execute um agente de IA no navegador contra qualquer URL — descreva o que testar em linguagem natural e o check_app_in_browser navega, interage e retorna aprovado/reprovado com capturas de tela.
  • Analise várias páginas sem custo de LLM — envie até 20 URLs para probe_page para capturas de tela rápidas, erros de console e resumos de rede em um único lote.
  • Dispare uma varredura de grafo de conhecimento — use trigger_crawl para que um agente de IA explore seu aplicativo e preencha o grafo de conhecimento do projeto.
  • Gerencie suítes de teste e casos de teste — crie, liste, execute e verifique resultados de suítes de teste via test_suite, e defina casos individuais com test_case.
  • Inspecione artefatos de execução — recupere detalhes completos de execução, capturas de tela, rastros HAR e logs de console através de executions para depurar falhas.
  • Navegue por projetos, ambientes e execuções como recursos — referencie entidades diretamente via URIs debugg-ai:// para contexto sem chamar ferramentas.

Documentação

Debugg AI — Servidor MCP

Testes de navegador com tecnologia de IA via o Model Context Protocol. Aponte para qualquer URL (ou localhost) e descreva o que testar — um agente de IA navega pelo seu aplicativo e retorna aprovação/reprovação com capturas de tela.

Debugg AI MCP server

Configuração

Requer Node.js 20.20.0 ou posterior (requisito transitivo do posthog-node@^5.26.0).

Obtenha uma chave de API em debugg.ai e adicione à configuração do seu cliente MCP:

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

Ou com Docker:

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

Ferramentas

O servidor expõe 8 ferramentas: três ferramentas de Navegador mais uma ferramenta baseada em ação por entidade gerenciada. As ferramentas principais são check_app_in_browser (agente de IA completo) e probe_page (sonda de página leve sem LLM). As demais — project, environment, test_suite, test_case, executions — cada uma recebe um discriminador action (ex.: {"action":"list"}) que seleciona a operação. Ações destrutivas delete exigem confirmação (um prompt de elicitação onde suportado, caso contrário confirm: true).

Navegador

check_app_in_browser

Executa um agente de navegador de IA no seu aplicativo. O agente navega, interage e reporta com capturas de tela. URLs de localhost são tuneladas automaticamente via ngrok.

ParâmetroTipoDescrição
descriptionstring obrigatórioO que testar (linguagem natural)
urlstring obrigatórioURL de destino — http://localhost:3000 é tunelada automaticamente
environmentIdstringUUID de um ambiente específico
credentialIdstringUUID de uma credencial específica
credentialRolestringEscolher uma credencial por função (ex.: admin, guest)
usernamestringNome de usuário para login (efêmero — não persistido)
passwordstringSenha para login (efêmera — não persistida)
repoNamestringSubstituir nome do repositório git detectado automaticamente (ex.: my-org/my-repo)

Uma verificação focada por chamada. O agente tem um orçamento interno de ~25 passos; divida suítes mais amplas em várias chamadas.

Cada execução bem-sucedida retorna um bloco browserSession junto com a captura de tela — URLs S3 pré-assinadas para o HAR capturado (rastreamento completo de rede) e log do console (cada mensagem do console JS). Use-os para detectar loops de refetch, erros de hidratação e outros problemas de tempo de execução que passam em verificações de tipo e testes unitários:

"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"
}

As URLs são S3 pré-assinadas de curta duração — busque novamente a execução pai via executions {action:"get", uuid} para renovar. harStatus / consoleLogStatus desambiguam 'downloaded' (URL acessível), 'not_available' (página não emitiu nada), 'failed' (captura falhou). Em uma execução recente, as URLs geralmente são null porque o upload da captura é assíncrono após o agente terminar — consulte executions {action:"get", uuid: executionId} até o status atingir 'downloaded'. Cabeçalhos de Autorização / Cookie / token/secret/api_key são removidos no lado do servidor antes que os artefatos sejam persistidos.

trigger_crawl

Dispara um rastreamento de agente de navegador no lado do servidor para popular o grafo de conhecimento do projeto. URLs de localhost são tuneladas automaticamente. Retorna {executionId, status, targetUrl, durationMs, outcome?, crawlSummary?, knowledgeGraph?, browserSession?} com knowledgeGraph.imported === true na ingestão bem-sucedida. O bloco browserSession (URLs de HAR + log do console, mesmo formato acima) também está presente em rastreamentos concluídos.

probe_page

Sonda de página em lote leve sem LLM. Passe de 1 a 20 URLs; cada uma navega, aguarda o carregamento e retorna o estado renderizado — captura de tela + metadados da página + erros estruturados do console + resumo da rede. Sem loop de agente, sem custo de LLM, sem asserções de cenário. Use para verificações do tipo "eu quebrei /settings?", smoke de múltiplas rotas após uma refatoração, varreduras de CI por PR e verificações rápidas de disponibilidade onde o loop de agente de 60-150s do check_app_in_browser é excessivo.

ParâmetroTipoDescrição
targetsarray obrigatório1-20 entradas: [{url, waitForSelector?, waitForLoadState?, timeoutMs?}]
targets[].urlstring obrigatórioURL pública ou localhost (tunelada automaticamente)
targets[].waitForLoadStateenum'load' (padrão) / 'domcontentloaded' / 'networkidle'
targets[].waitForSelectorstringSeletor CSS opcional para aguardar após a navegação
targets[].timeoutMsnumberTempo limite por URL, 1000-30000 (padrão 10000)
includeHtmlbooleanRetornar HTML bruto em cada resultado (padrão false)
captureScreenshotsbooleanRetornar um PNG por destino (padrão true)

Todo o lote compartilha uma única execução de backend + sessão de navegador + túnel — 5 URLs em uma chamada é drasticamente mais rápido que 5 chamadas paralelas de URL única. O campo error por URL preserva a resiliência do lote: um único destino com falha não faz os outros falharem.

A chave de agregação networkSummary é origin + pathname — loops de refetch (?n=0..4 atingindo repetidamente o mesmo endpoint) colapsam em uma única entrada com a contagem, então /api/poll aparecendo com count: 47 é o sinal acionável de "loop de refetch infinito" que os usuários originalmente solicitaram.

Orçamento de desempenho: <10s para 1 URL, <25s para 20. Porta morta de localhost retorna LocalServerUnreachable em <2s sem consumir uma execução de fluxo de trabalho.

project

AçãoParâmetrosResultado
get{uuid}Detalhe curado do projeto
list{q?, page?, pageSize?}Resumos paginados
create{name, platform, (teamUuid|teamName), (repoUuid|repoName)}Projeto criado

A resolução de equipe e repositório é feita por ou uuid ou nome (correspondência exata sem distinção entre maiúsculas e minúsculas; NotFound se nenhum, AmbiguousMatch se múltiplos). Nãoupdate/delete — renomeie ou exclua um projeto pelo aplicativo web DebuggAI.

environment

AçãoParâmetrosResultado
get{uuid, projectUuid?}Ambiente com credenciais inline (senhas nunca retornadas)
list{projectUuid?, q?, page?, pageSize?}Ambientes paginados, cada um com um array de credenciais
create{name, url, description?, projectUuid?, credentials?}Ambiente criado (opcionalmente semeia credenciais)
update{uuid, name?, url?, description?, addCredentials?, updateCredentials?, removeCredentialIds?}Ambiente corrigido; operações de credencial executam remover → atualizar → adicionar
delete{uuid, projectUuid?, confirm?}Exclui ambiente (em cascata para credenciais) — requer confirmação

projectUuid é resolvido automaticamente do repositório git quando omitido. Falhas por credencial aparecem em credentialWarnings[] sem bloquear a operação do ambiente.

test_suite

AçãoParâmetrosResultado
list{projectUuid|projectName, search?, page?, pageSize?}Suítes paginadas com status + taxa de aprovação
create{name, description, projectUuid|projectName}Suíte criada
run{suiteUuid|(suiteName+project), targetUrl?}Aciona todos os testes de forma assíncrona
results{suiteUuid|(suiteName+project)}Suíte + resultados por teste
delete{suiteUuid|(suiteName+project), confirm?}Exclusão suave — requer confirmação

test_case

AçãoParâmetrosResultado
create{name, description, agentTaskDescription, suiteUuid|(suiteName+project), relativeUrl?, maxSteps?}Caso de teste criado (não executado automaticamente)
update{testUuid, name?, description?, agentTaskDescription?}Caso de teste corrigido
delete{testUuid, confirm?}Exclusão suave — requer confirmação

executions

AçãoParâmetrosResultado
get{uuid}Detalhe completo (nodeExecutions + estado + errorInfo) + artefatos de captura de tela/gif
list{status?, projectUuid?, page?, pageSize?}Resumos paginados

404 do backend aparece como isError: true com {error: 'NotFound', message, uuid}. Credenciais são sempre retornadas sem senhas.

Paginação

Cada resposta em modo de filtro é paginada. Formato da resposta:

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

Passe page opcional (indexado em 1, padrão 1) e pageSize (padrão 20, máximo 200; valores excessivos são limitados). Nenhuma resposta é truncada silenciosamente.

Recursos

Junto com as ferramentas, o servidor expõe as entidades somente leitura como recursos MCP para que os clientes possam navegar e mencioná-los com @ como contexto:

URIO quê
debugg-ai://projectsTodos os projetos (primeira página)
debugg-ai://environmentsAmbientes para o projeto detectado automaticamente
debugg-ai://executionsExecuções recentes (primeira página)
debugg-ai://project/{uuid}Um projeto, detalhe completo
debugg-ai://environment/{uuid}Um ambiente (credenciais inline, senhas redigidas)
debugg-ai://execution/{uuid}Uma execução, detalhe completo do nó + links de artefatos

Leituras despacham para os mesmos manipuladores das ferramentas project / environment / executions, então os dados e a autenticação são idênticos. Recursos são aditivos — clientes sem suporte a recursos continuam usando as ferramentas.

Invariantes de segurança

  • Senhas são somente gravação. Elas nunca aparecem em nenhum corpo de resposta de nenhuma ferramenta.
  • URLs de túnel (*.ngrok.debugg.ai) são removidas de todas as respostas do agente de navegador, incluindo texto de autoria do agente.
  • 404s do backend aparecem como isError: true com {error: 'NotFound', ...}, nunca como exceções lançadas.
  • DEBUGGAI_API_KEY ausente aparece como um erro de ferramenta estruturado na primeira invocação — o servidor ainda registra e lista as ferramentas normalmente.

Migração para v3.0.0 (ferramentas baseadas em ação)

A v3 consolidou as 20 ferramentas por verbo em 8 ferramentas baseadas em ação. Ferramenta antiga → novo tool {action}:

RemovidaSubstituição
search_projectsproject {action:"get"} / project {action:"list"}
create_projectproject {action:"create"}
update_project, delete_projectRemovidas — use o aplicativo web 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 headlessRemovido — sempre headless

Ações delete agora exigem confirmação (prompt de elicitação ou confirm: true). Os clientes captam a nova superfície ao reiniciar o MCP.

Migração da v1.x (mudança disruptiva na v2.0.0)

A v2 colapsou uma superfície de 22 ferramentas para 11. Mapeamento de ferramenta antiga → nova:

RemovidaSubstituição
list_projects, get_projectsearch_projects (modo uuid vs modo filtro)
list_environments, get_environmentsearch_environments
list_credentials, get_credentialsearch_environments — credenciais inline em cada ambiente
create_credentialcreate_environment({credentials: [...]}) semear, ou update_environment({addCredentials: [...]})
update_credentialupdate_environment({updateCredentials: [{uuid, ...patch}]})
delete_credentialupdate_environment({removeCredentialIds: [uuid]})
list_teams, list_reposcreate_project({teamName, repoName}) — resolução de nome com tratamento de ambiguidade
list_executions, get_executionsearch_executions
cancel_executionRemovida — o desligamento do backend é automático

Mudanças no formato da resposta: o campo count simples nas respostas de lista desapareceu — use pageInfo.totalCount.

Configuração

Var de ambienteObrigatóriaFinalidade
DEBUGGAI_API_KEYsimChave de API do backend. Apelidos: DEBUGGAI_API_TOKEN, DEBUGGAI_JWT_TOKEN.
DEBUGGAI_API_URLnãoURL base do backend. Padrão: https://api.debugg.ai.
DEBUGGAI_TOKEN_TYPEnãotoken (padrão) ou bearer.
LOG_LEVELnãoerror / warn / info (padrão) / debug.
POSTHOG_API_KEYnãoSubstituir a chave de projeto de telemetria embutida (ex.: fork privado).
DEBUGGAI_TELEMETRY_DISABLEDnãoDefina como 1 / true / yes / on para desabilitar totalmente a telemetria.
DEBUGGAI_API_KEY=your_api_key

Transporte remoto / HTTP (opcional)

Por padrão, o servidor fala stdio (npx local). Ele pode, em vez disso, ser executado como um MCP remoto hospedado e multiusuário sobre HTTP Streamable sem estado + OAuth:

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

É um Servidor de Recursos OAuth: toda POST /mcp precisa de Authorization: Bearer <token>; tokens ausentes/inválidos recebem um 401 com um WWW-Authenticate apontando para os metadados RFC 9728, e os clientes executam o fluxo OAuth contra o servidor de autorização anunciado. O portador tem escopo de requisição — api.debugg.ai o valida.

EndpointFinalidade
POST /mcpMCP Streamable HTTP (protegido por portador)
GET /.well-known/oauth-protected-resourceMetadados RFC 9728 (descoberta do servidor de autorização)
GET /healthVerificação de saúde do balanceador de carga / ECS
Variável de ambientePadrãoFinalidade
DEBUGGAI_MCP_TRANSPORTstdioDefina como http para o transporte remoto
PORT3000Porta de escuta HTTP
DEBUGGAI_MCP_PUBLIC_URLhttps://mcp.debugg.aiURL pública de recurso deste servidor (RFC 9728 resource)
DEBUGGAI_OAUTH_ISSUERhttps://auth.debugg.aiServidor de autorização anunciado aos clientes
DEBUGGAI_TOKEN_TYPEtokenDefina como bearer para que tokens OAuth sejam encaminhados como Authorization: Bearer

Instalações via stdio não precisam de nada disso.

Telemetria

O servidor MCP é fornecido com telemetria habilitada por padrão — uma chave de projeto PostHog somente de escrita embutida (phc_*) para que a equipe possa observar taxas de acerto de cache, cadência de polling, confiabilidade do túnel e outras métricas operacionais em toda a base instalada. Eventos capturados:

EventoQuando
tool.executed / tool.failedPor chamada de ferramenta
workflow.executedPor execução do agente do navegador (carrega pollCount, durationMs, finalIntervalMs)
tunnel.provisioned / tunnel.provision_retry / tunnel.stoppedPor evento de ciclo de vida do túnel
template.lookup / project.lookupAcerto/erro de cache com durationMs em chamada fria

Postura de privacidade:

  • O ID distinto é SHA-256(api_key).slice(0, 16) — nunca a chave bruta, sem PII.
  • Chaves phc_* são somente de escrita por convenção do PostHog; seguro embutir no código fonte.
  • Defina DEBUGGAI_TELEMETRY_DISABLED=1 para desativar completamente (resolve para um provedor no-op; nenhum evento sai do processo).

O modo ativo é registrado na inicialização:

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)

Desenvolvimento Local

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

O conjunto de avaliação inicia o servidor MCP compilado como um subprocesso, exercita cada ferramenta contra um backend real e grava artefatos por fluxo em scripts/evals/artifacts/<timestamp>/. Veja scripts/evals/flows/ para os cenários individuais.

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

Este repositório fornece um .mcp.json que registra um servidor com escopo de projeto chamado debugg-ai-local apontando para node dist/index.js — o código local recém-compilado. Ele só é ativado quando o diretório de trabalho do Claude Code é este repositório.

Seus outros projetos devem usar o registro debugg-ai com escopo de usuário que obtém o pacote npm publicado:

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

Após editar o código aqui, execute npm run mcp:local (que apenas recompila) para que a próxima invocação de debugg-ai-local capte suas alterações.

Links

Dashboard · Docs · Issues · Discord


Licença Apache-2.0 © 2025 DebuggAI