API REST
Sentry
Os erros que o Sentry manda e as conexões com ele.
GET /sentry/errors(tracker:read): erros que o Sentry mandou (?project=MOBpara um projeto, com a integração e o último aviso;?waiting=truesó os que esperam decisão, como na tela aqua). O mesmo erro aparece uma vez, comevents,users, releases estate:pending(juntando avisos antes da triagem),suggested(a aqua fez a triagem),linked,regressed(voltou depois de a issue ser concluída; o tracker já comentou na issue),merged,dismissedoumuted.triage.issueé a issue que a aqua escreveu ecandidate, a issue aberta que parece a mesma.POST /sentry/errors/{id}(tracker:write): decide como na tela aqua,{"action": "create_issue", "title": "..."}(cria a issue preenchida, com link, alcance, release, ambiente e stack resumido),{"action": "link", "issue": "MOB-0012"}(semissue, a candidata da aqua; comenta na issue),{"action": "reopen"}(erro que voltou) ou{"action": "dismiss", "snooze": "7"}("1","7","30"ou"forever"). Exige editar issues no projeto.GET /sentry/connections(tracker:read, admin e dono): as conexões com o Sentry da empresa, cada uma comproject(o projeto que recebe o que sobrar),webhook_url,secret_saved,sentry_project_targets(a tabela:{"sentry_project": "meu-backend", "target": "MOB"}, comtargeto prefixo do projeto,rulesouignore),new_sentry_projects(rulesouignore),rules(na ordem,"/v1/pedidos/* → API"ou"project=APP → APP"),environments,min_level,start_after,ai_triage,seen(projetos do Sentry e ambientes que os avisos já mostraram), o último aviso ewaiting.GET /sentry/connections/{id}traz uma.POST /sentry/connections(tracker:write, admin e dono): conecta um Sentry,{"project": "MOB"}; a resposta trazwebhook_urlpara criar a Internal Integration no Sentry (Settings → Custom Integrations), e oclient_secretque o Sentry mostrar entra depois.PATCH /sentry/connections/{id}: só o que vier muda,{"client_secret": "...", "sentry_project_targets": [...], "new_sentry_projects": "ignore", "rules": ["/v1/pedidos/* → API", "project=APP → APP"], "environments": ["prod"], "min_level": "error", "ai_triage": true, "active": true, "start_now": true}(a tabela e as regras vêm inteiras;projecttroca quem recebe o que sobrar). Na rota,*no fim é prefixo; sem*vale a rota e o que vem abaixo dela.DELETE /sentry/connections/{id}desconecta (os erros recebidos saem, as issues criadas ficam).POST /sentry/connections/{id}/test(tracker:read, admin e dono): para onde iriam os últimos erros da conexão (até 20), com a configuração salva ou comsentry_project_targets,new_sentry_projects,rules,environmentsemin_leveldo corpo, sem gravar. Cada item trazresult(project,ignoredououtside_environment),project(prefixo),by(table,rulecomrule, o número da regra, ouleftover),below_min_level,now_in,routeetags. No MCP:list_sentry_connections,save_sentry_connectionetest_sentry_connection.