gitlab-ci-mcp
gitlab-ci-mcp
Servidor MCP para GitLab CI/CD. Permite que un agente LLM (Claude Code, Cursor, OpenCode, DevX Agent, etc.) trabaje con pipelines, trabajos, programaciones, ramas, etiquetas, solicitudes de fusión y archivos de repositorio.
Python, FastMCP, transporte stdio.
Funciona con cualquier GitLab: SaaS gitlab.com o autohospedado / on-prem. Diseñado pensando en redes corporativas: manejo configurable de NO_PROXY, alternancia opcional de verificación SSL y alcance por proyecto mediante variables de entorno.
Aspectos destacados del diseño
Anotaciones de herramientas: cada herramienta lleva
readOnlyHint/destructiveHint/idempotentHint/openWorldHintpara que los clientes MCP puedan clasificar las operaciones (por ejemplo, pedir confirmación solo en las destructivas comogitlab_merge_mr,gitlab_delete_schedule).Salida estructurada en cada herramienta: cada herramienta declara un tipo de retorno TypedDict, por lo que FastMCP genera automáticamente un
outputSchemay cada resultado llevastructuredContentjunto con un bloque de texto markdown pre-renderizado. Los clientes que pueden renderizar datos estructurados los usan; los agentes que prefieren texto compacto obtienen el markdown. No se necesita el parámetroresponse_format.Errores estructurados: los errores de autenticación, 404, 403, 429 (límite de tasa), 5xx y variables de entorno faltantes se convierten en mensajes
ToolErroraccionables (por ejemplo, "Error de autenticación de GitLab... verifique que GITLAB_TOKEN tenga el alcanceapi") y se muestran como resultadosisError=True.Validación de entrada Pydantic: cada argumento tiene restricciones tipadas (rangos, longitudes, literales) expuestas automáticamente como JSON Schema.
Alcance de proyecto por llamada: cada herramienta acepta un
project_pathopcional que anulaGITLAB_PROJECT_PATHpara consultas entre proyectos.Paginación: las herramientas de listado devuelven un bloque de
paginationconpage,total,has_more,next_pagey una sugerencia de página siguiente en el pie de página markdown.Integración con el contexto MCP:
gitlab_pipeline_healthygitlab_get_job_logsonasyncy emiten registrosinfo/ eventosreport_progressa través del contexto MCP para que los clientes puedan mostrar barras de progreso.Recursos MCP:
gitlab://project/infoygitlab://project/ci-configreflejan búsquedas comunes para clientes que prefieren el modelo de Recursos sobre las herramientas.Gestión del ciclo de vida: las sesiones HTTP de
python-gitlabse cierran limpiamente al apagar el servidor mediante un hook de ciclo de vidaasynccontextmanager.Grep de registros:
gitlab_get_job_logaceptagrep_pattern+grep_context(líneas circundantes) para filtrar mediante expresiones regulares registros de CI de escala de megabytes sin extraer todo el seguimiento al contexto del agente.
Modelo de subprocesos
FastMCP ejecuta automáticamente herramientas síncronas en un hilo de trabajo (anyio.to_thread.run_sync), por lo que no bloquean el bucle de eventos de asyncio; python-gitlab es una biblioteca síncrona y envolver cada llamada en asyncio.to_thread nosotros mismos sería redundante. Las herramientas que se benefician del contexto MCP (progreso, registros de información) se escriben como async def y envuelven explícitamente las llamadas a python-gitlab con asyncio.to_thread.
Características
23 herramientas que cubren la superficie diaria de CI/CD:
Pipelines
gitlab_list_pipelines · gitlab_get_pipeline · gitlab_get_pipeline_jobs · gitlab_get_job_log · gitlab_trigger_pipeline · gitlab_retry_pipeline · gitlab_cancel_pipeline · gitlab_pipeline_health
Programaciones
gitlab_list_schedules · gitlab_create_schedule · gitlab_update_schedule · gitlab_delete_schedule
Ramas y etiquetas
gitlab_list_branches · gitlab_list_tags · gitlab_compare_branches
Solicitudes de fusión (Merge Requests)
gitlab_list_merge_requests · gitlab_get_merge_request · gitlab_get_merge_request_changes · gitlab_create_merge_request · gitlab_merge_mr
Repositorio y proyecto
gitlab_get_file · gitlab_list_repository_tree · gitlab_project_info
Informe de salud del pipeline
gitlab_pipeline_health devuelve un resumen listo para leer durante 7/30 días:
Last 7d: 96.4% up | 27/28 success
Last 30d: 92.1% | 105/114 success
Last 10: success success success failed success ...Útil para guardia / triaje: покажи health master за последние 7 дней.
Instalación
Requiere Python 3.10+.
# via uvx (recommended)
uvx --from gitlab-ci-mcp gitlab-ci-mcp
# or via pip/pipx
pipx install gitlab-ci-mcpConfiguración
Toda la configuración se realiza mediante variables de entorno:
Variable | Requerido | Descripción |
| sí | URL base, ej. |
| sí | Token de acceso personal con alcance |
| sí | Proyecto predeterminado, ej. |
| no |
|
| no | Dominios separados por comas para agregar a |
Cada herramienta acepta un argumento opcional project_path que anula GITLAB_PROJECT_PATH por llamada, útil para consultas entre proyectos.
Claude Code
Tutorial completo: docs/claude-code.md — requisitos previos, dos rutas de instalación, configuración de múltiples proyectos, GitLab autohospedado detrás de un proxy corporativo, solución de problemas, desinstalación.
Versión corta:
claude mcp add gitlab uvx --from gitlab-ci-mcp gitlab-ci-mcp \
--env GITLAB_URL=https://gitlab.example.com \
--env GITLAB_TOKEN=glpat-xxxxxx \
--env GITLAB_PROJECT_PATH=my-org/my-repoO en ~/.claude.json / .mcp.json del proyecto:
{
"mcpServers": {
"gitlab": {
"type": "stdio",
"command": "uvx",
"args": ["--from", "gitlab-ci-mcp", "gitlab-ci-mcp"],
"env": {
"GITLAB_URL": "https://gitlab.example.com",
"GITLAB_TOKEN": "${GITLAB_TOKEN}",
"GITLAB_PROJECT_PATH": "my-org/my-repo",
"GITLAB_SSL_VERIFY": "true"
}
}
}
}Verificar:
claude mcp list
# gitlab: uvx --from gitlab-ci-mcp gitlab-ci-mcp - ✓ ConnectedCursor / OpenCode / DevX Agent
La misma idea: apunte la configuración de MCP a uvx --from gitlab-ci-mcp gitlab-ci-mcp con las variables de entorno anteriores. Consulte la sintaxis de configuración MCP de cada herramienta.
Ejemplos de prompts
что сломалось в последнем pipeline masterпокажи health master за 7 дней для проекта my-org/other-repoсоздай MR из feature/foo в master с title "feat: foo"покажи содержимое .gitlab-ci.yml из masterLímites de tasa y reutilización de conexiones
GitLab impone un límite de tasa por usuario (típicamente 2000 solicitudes/hora para la API REST, configurable por el administrador; consulte /admin/application_settings/network de su instancia).
El servidor almacena en caché una sesión HTTP de
python-gitlabporproject_path, por lo que las llamadas repetidas a la misma herramienta contra el mismo proyecto reutilizan la conexión y no se vuelven a autenticar cada vez.Las herramientas de listado tienen como valor predeterminado
per_page=20para mantener una sola llamada dentro de un pequeño número de solicitudes API.Si alcanza un
429 Too Many Requests, el manejador de errores devuelve un mensaje accionable: espere e intente de nuevo con unper_pagemás grande o menos llamadas.
GitLab autohospedado detrás de un proxy corporativo
Cuando su computadora portátil tiene un proxy HTTP local (por ejemplo, http://127.0.0.1:3128 para acceso web corporativo) pero GitLab está en la intranet, el proxy intercepta y elimina las solicitudes internas. Dos opciones:
Establezca
GITLAB_NO_PROXY_DOMAINS: el servidor los agregará aNO_PROXYal inicio y borraráHTTP_PROXY/HTTPS_PROXYde su propio proceso para que no afecten el tráfico de GitLab.Pase explícitamente
HTTP_PROXY=""vacío, etc., en la secciónenvde MCP.
Desarrollo
git clone https://github.com/mshegolev/gitlab-ci-mcp
cd gitlab-ci-mcp
python -m venv .venv && . .venv/bin/activate
pip install -e '.[dev]'
pytestEjecute el servidor directamente (transporte stdio, espera en stdin por mensajes MCP):
GITLAB_URL=... GITLAB_TOKEN=... GITLAB_PROJECT_PATH=... gitlab-ci-mcpLicencia
MIT: consulte LICENSE.
Agradecimientos
Construido sobre python-gitlab y el SDK de Python para MCP.
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/mshegolev/gitlab-ci-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server