Ir al contenido

Manejo de Errores

GitLab MCP Server proporciona un manejo de errores estructurado que clasifica los errores, extrae detalles accionables de las respuestas de la API de GitLab y sugiere acciones correctivas al asistente de IA.

Cada error de la API de GitLab se clasifica por código de estado HTTP en un mensaje accionable:

Código de EstadoClasificaciónMensaje
400Solicitud incorrectaVerifica tus parámetros de entrada
401AutenticaciónGITLAB_TOKEN puede ser inválido o haber expirado
403PermisosTu token carece de los permisos requeridos
404No encontradoEl recurso no existe o no tienes acceso
409ConflictoEl recurso ya existe o hay un conflicto de estado
422ValidaciónGitLab rechazó la solicitud debido a datos inválidos
429Límite de velocidadDemasiadas solicitudes — espera antes de reintentar
500Error del servidorError interno del servidor de GitLab
502Bad gatewayGitLab está temporalmente no disponible
503MantenimientoGitLab está en mantenimiento o sobrecargado

Los errores a nivel de red también se clasifican:

Tipo de ErrorMensaje
Conexión rechazadaEl servidor de GitLab es inaccesible
Fallo DNSNo se pudo resolver el nombre del servidor de GitLab
TimeoutLa solicitud a GitLab excedió el tiempo de espera
TLS/SSLEl handshake TLS/SSL falló

El servidor usa tres funciones de envoltura de errores, elegidas según el tipo de operación:

Usada para operaciones list, get y search. Clasifica el error y lo envuelve con el nombre de la operación:

list_issues: authentication failed — GITLAB_TOKEN may be invalid or expired

WrapErrWithMessage — Operaciones de escritura

Sección titulada «WrapErrWithMessage — Operaciones de escritura»

Usada para operaciones create, update y delete. Incluye el detalle específico del error extraído de la respuesta de la API de GitLab:

fileCreate: bad request — A file with this name already exists: POST .../files: 400

El servidor extrae el mensaje de error detallado de la respuesta de la API de GitLab, manejando formatos anidados como {message: {base: [text]}}, y trunca a 300 caracteres.

WrapErrWithHint — Acciones correctivas conocidas

Sección titulada «WrapErrWithHint — Acciones correctivas conocidas»

Usada cuando se conoce la acción correctiva para un error específico. Añade una sugerencia accionable:

branchProtect: conflict — Protected branch rule already exists.
Suggestion: use gitlab_protected_branch_get to view current rules
EscenarioFunción
Operación de solo lectura (list, get, search)WrapErr
Operación de escritura (create, update, delete)WrapErrWithMessage
Error específico con corrección conocidaWrapErrWithHint
Operación get que devuelve 404NotFoundResult

NotFoundResult — Respuestas informativas para 404

Sección titulada «NotFoundResult — Respuestas informativas para 404»

Para los handlers de tipo get, los errores 404 se tratan como informativos en lugar de fallos. En vez de devolver un error Go opaco (registrado a nivel ERROR), el handler devuelve un CallToolResult con IsError: true y sugerencias específicas del dominio:

## ❓ Branch Not Found
Branch `feature/old` was not found in the project.
💡 **Next steps:**
- Use `gitlab_list_branches` to see available branches
- Check branch name spelling and case sensitivity

Este patrón se aplica a los 27 handlers get en 21 dominios. Se registra a nivel INFO (resultado esperado) y proporciona al asistente de IA los siguientes pasos accionables.

Para errores de validación 422, el servidor enriquece automáticamente el error con guía basada en coincidencia de patrones. Se reconocen más de 15 patrones comunes, incluyendo:

  • Campos requeridos faltantes
  • Formatos de fecha inválidos
  • Límites de longitud de nombre/título
  • Nombres de recursos duplicados
  • Valores de enumeración inválidos

Estas sugerencias ayudan al asistente de IA a corregir su solicitud sin llamadas adicionales a la API.

Cuando una herramienta encuentra un error, la respuesta se formatea como un bloque Markdown con campos de diagnóstico estructurados:

## ❌ Error: list_branches
**Status**: 401 Unauthorized
**Detail**: authentication failed — GITLAB_TOKEN may be invalid or expired
**Request ID**: abc123def456
💡 **Suggestion**: Check that your token is valid and has the `api` scope.

La respuesta estructurada incluye:

CampoDescripción
OperationLa acción de la herramienta que falló
StatusCódigo de estado HTTP y clasificación
DetailMensaje de error específico de GitLab
Request IDX-Request-Id de GitLab para tickets de soporte
SuggestionSugerencia accionable (cuando está disponible)

El servidor clasifica los errores como transitorios (reintentables) o permanentes:

TipoCódigos de EstadoComportamiento
Transitorio429, 5xx, timeouts, conexión rechazadaSeguro reintentar después de una espera
Permanente4xx (excepto 429)No reintentar — corregir la entrada o configuración
❌ list_projects: authentication failed — GITLAB_TOKEN may be invalid or expired
💡 Generate a new token with api scope at GitLab → Preferences → Access Tokens
❌ create_issue: access denied — your token lacks the required permissions
Detail: 403 Forbidden
💡 Ensure the token has api scope and you have Developer+ access to the project
❌ branchProtect: conflict — Protected branch rule already exists
💡 Use gitlab_protected_branch_get to view current rules, or gitlab_protected_branch_update to modify
❌ create_issue: validation failed — title is too long (maximum is 255 characters)
💡 Shorten the title to 255 characters or less