API REST
Sentry
Los errores que envía Sentry y las conexiones con él.
GET /sentry/errors(tracker:read): errores que envió Sentry (?project=MOBpara un proyecto, con la integración y el último aviso;?waiting=truesolo los que esperan decisión, como en la pantalla aqua). El mismo error aparece una vez, conevents,users, releases ystate:pending(juntando avisos antes del triaje),suggested(aqua hizo el triaje),linked,regressed(volvió después de completarse la issue; tracker ya comentó en la issue),merged,dismissedomuted.triage.issuees la issue que escribió aqua ycandidate, la issue abierta que parece la misma.POST /sentry/errors/{id}(tracker:write): decide como en la pantalla aqua,{"action": "create_issue", "title": "..."}(crea la issue completada, con enlace, alcance, release, entorno y stack resumido),{"action": "link", "issue": "MOB-0012"}(sinissue, la candidata de aqua; comenta en la issue),{"action": "reopen"}(un error que volvió) o{"action": "dismiss", "snooze": "7"}("1","7","30"o"forever"). Exige editar issues en el proyecto.GET /sentry/connections(tracker:read, admins y dueños): las conexiones con Sentry de la empresa, cada una conproject(el proyecto que recibe lo que sobra),webhook_url,secret_saved,sentry_project_targets(la tabla:{"sentry_project": "mi-backend", "target": "MOB"}, contargetel prefijo del proyecto,rulesoignore),new_sentry_projects(rulesoignore),rules(en orden,"/v1/pedidos/* → API"o"project=APP → APP"),environments,min_level,start_after,ai_triage,seen(proyectos de Sentry y entornos que ya mostraron los avisos), el último aviso ywaiting.GET /sentry/connections/{id}trae una.POST /sentry/connections(tracker:write, admins y dueños): conecta un Sentry,{"project": "MOB"}; la respuesta traewebhook_urlpara crear la Internal Integration en Sentry (Settings → Custom Integrations), y elclient_secretque muestre Sentry entra después.PATCH /sentry/connections/{id}: solo cambia lo que venga,{"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}(la tabla y las reglas vienen enteras;projectcambia quién recibe lo que sobra). En la ruta, un*al final es prefijo; sin*vale la ruta y lo que está debajo de ella.DELETE /sentry/connections/{id}desconecta (los errores recibidos se van, las issues creadas quedan).POST /sentry/connections/{id}/test(tracker:read, admins y dueños): adónde irían los últimos errores de la conexión (hasta 20), con la configuración guardada o consentry_project_targets,new_sentry_projects,rules,environmentsymin_leveldel cuerpo, sin guardar. Cada elemento traeresult(project,ignoreduoutside_environment),project(prefijo),by(table,ruleconrule, el número de la regla, oleftover),below_min_level,now_in,routeytags. En el MCP:list_sentry_connections,save_sentry_connectionytest_sentry_connection.