GitLab
Gestiona proyectos, repositorios, incidencias, archivos e hitos de GitLab mediante la API de GitLab.
Documentación
GitLab MCP Server
Servidor MCP para la API de GitLab, que permite la gestión de proyectos, operaciones de archivos y más. Bifurcado de https://github.com/modelcontextprotocol
Tabla de Contenidos
- Instalación
- Características
- Hitos de Grupo vs Hitos de Proyecto
- Ejemplos de Hitos de Grupo
- Flujo de Trabajo Práctico: Encontrar Grupos y Crear Hitos
- Herramientas
- Configuración
- Variables de Entorno
- Desarrollo
- Licencia
Instalación
NPX (Recomendado)
npx @therealchristhomas/gitlab-mcp-server
Instalación Global
npm install -g @therealchristhomas/gitlab-mcp-server
gitlab-mcp
Características
- Creación Automática de Ramas: Al crear/actualizar archivos o enviar cambios, las ramas se crean automáticamente si no existen
- Manejo Integral de Errores: Mensajes de error claros para problemas comunes
- Preservación del Historial de Git: Las operaciones mantienen un historial de Git adecuado sin forzar el envío
- Operaciones por Lotes: Soporte para operaciones de archivo único y de múltiples archivos
- Gestión del Flujo de Trabajo del Proyecto: Gestión de etiquetas e hitos para una mejor organización del proyecto
- Gestión de Repositorios: Buscar, crear y bifurcar proyectos de GitLab
- Operaciones de Archivos: Crear, actualizar y recuperar contenidos de archivos
- Gestión de Ramas: Crear ramas y gestionar la estructura del repositorio
- Gestión de Incidencias: Crear, listar, actualizar, buscar y comentar incidencias
- Gestión de Solicitudes de Fusión: Listar, actualizar, fusionar y comentar solicitudes de fusión
- Gestión de Etiquetas: Crear, actualizar y eliminar etiquetas de proyecto
- Hitos de Proyecto: Crear, actualizar y eliminar hitos a nivel de proyecto
- Hitos de Grupo: Crear, actualizar y eliminar hitos a nivel de grupo que abarcan múltiples proyectos
Hitos de Grupo vs Hitos de Proyecto
Este servidor admite tanto hitos de proyecto como hitos de grupo:
Hitos de Proyecto
- Limitados a un solo proyecto
- Usan herramientas:
list_milestones,create_milestone,update_milestone,delete_milestone - Ejemplo: Realizar seguimiento de funciones para el proyecto
my-webapp
Hitos de Grupo
- Abarcan múltiples proyectos dentro de un grupo
- Usan herramientas:
list_group_milestones,create_group_milestone,update_group_milestone,delete_group_milestone - Admiten filtrado avanzado con
include_ancestors,include_descendants - Ejemplo: Realizar seguimiento de un lanzamiento en
my-webapp,my-apiymy-admin
Ejemplos de Hitos de Grupo
Listar Hitos de Grupo
{
"group_id": "my-organization",
"state": "active",
"include_descendants": true
}
Crear Hito de Grupo
{
"group_id": "my-organization",
"title": "Q1 2025 Release",
"description": "Major feature release including new tools and performance improvements",
"due_date": "2025-03-31",
"start_date": "2025-01-01"
}
Búsqueda Avanzada de Hitos de Grupo
{
"group_id": "my-organization/core",
"search": "release",
"include_ancestors": true,
"updated_after": "2024-01-01T00:00:00Z"
}
Según la GitLab Group Milestones API, los hitos de grupo son ideales para coordinar lanzamientos y funciones en múltiples proyectos de su organización.
Flujo de Trabajo Práctico: Encontrar Grupos y Crear Hitos
Este es un flujo de trabajo típico para trabajar con hitos de grupo:
1. Buscar Grupos
Primero, encuentre el grupo con el que desea trabajar:
{
"search": "my-organization",
"owned": true
}
2. Listar Hitos de Grupo Existentes
Compruebe qué hitos ya existen:
{
"group_id": "my-organization",
"state": "active"
}
3. Crear un Hito de Grupo
Cree un hito que abarque múltiples proyectos:
{
"group_id": "my-organization",
"title": "Q1 2025 Release",
"description": "Cross-project release including webapp, API, and admin features",
"due_date": "2025-03-31"
}
Este flujo de trabajo es especialmente útil para organizaciones grandes con múltiples proyectos relacionados bajo el mismo grupo.
Herramientas
Operaciones de Archivos
-
create_or_update_file- Crear o actualizar un solo archivo en un proyecto
- Entradas:
project_id(cadena): ID del proyecto o ruta codificada en URLfile_path(cadena): Ruta donde crear/actualizar el archivocontent(cadena): Contenido del archivocommit_message(cadena): Mensaje de confirmaciónbranch(cadena): Rama en la que crear/actualizar el archivoprevious_path(cadena opcional): Ruta del archivo a mover/renombrar
- Devuelve: Contenido del archivo y detalles de la confirmación
-
push_files- Enviar múltiples archivos en una sola confirmación
- Entradas:
project_id(cadena): ID del proyecto o ruta codificada en URLbranch(cadena): Rama a la que enviarfiles(matriz): Archivos a enviar, cada uno confile_pathycontentcommit_message(cadena): Mensaje de confirmación
- Devuelve: Referencia de rama actualizada
-
get_file_contents- Obtener el contenido de un archivo o directorio
- Entradas:
project_id(cadena): ID del proyecto o ruta codificada en URLfile_path(cadena): Ruta al archivo/directorioref(cadena opcional): Rama/etiqueta/confirmación de la que obtener el contenido
- Devuelve: Contenido del archivo/directorio
Gestión de Repositorios
-
search_repositories- Buscar proyectos de GitLab
- Entradas:
search(cadena): Consulta de búsquedapage(número opcional): Número de página para paginaciónper_page(número opcional): Resultados por página (predeterminado 20)
- Devuelve: Resultados de búsqueda de proyectos
-
create_repository- Crear un nuevo proyecto de GitLab
- Entradas:
name(cadena): Nombre del proyectodescription(cadena opcional): Descripción del proyectovisibility(cadena opcional): 'private', 'internal' o 'public'initialize_with_readme(booleano opcional): Inicializar con README
- Devuelve: Detalles del proyecto creado
-
fork_repository- Bifurcar un proyecto
- Entradas:
project_id(cadena): ID del proyecto o ruta codificada en URLnamespace(cadena opcional): Espacio de nombres al que bifurcar
- Devuelve: Detalles del proyecto bifurcado
-
create_branch- Crear una nueva rama
- Entradas:
project_id(cadena): ID del proyecto o ruta codificada en URLbranch(cadena): Nombre de la nueva ramaref(cadena opcional): Rama/confirmación de origen para la nueva rama
- Devuelve: Referencia de la rama creada
Operaciones de Grupo
-
search_groups- Buscar grupos de GitLab
- Entradas:
search(cadena): Consulta de búsqueda de grupospage(número opcional): Número de página para paginaciónper_page(número opcional): Resultados por página (predeterminado 20)owned(booleano opcional): Limitar por grupos propiedad del usuario actualmin_access_level(número opcional): Nivel de acceso mínimo (10=Invitado, 20=Reportero, 30=Desarrollador, 40=Mantenedor, 50=Propietario)
- Devuelve: Resultados de búsqueda de grupos
Gestión de Incidencias
-
create_issue- Crear una nueva incidencia
- Entradas:
project_id(cadena): ID del proyecto o ruta codificada en URLtitle(cadena): Título de la incidenciadescription(cadena opcional): Descripción de la incidenciaassignee_ids(matriz de números opcional): IDs de usuario a asignarlabels(matriz de cadenas opcional): Etiquetas a añadirmilestone_id(número opcional): ID del hito
- Devuelve: Detalles de la incidencia creada
-
list_issues- Listar todas las incidencias en un proyecto de GitLab
- Entradas:
project_id(cadena): ID del proyecto o ruta codificada en URLstate(cadena opcional): 'opened', 'closed' o 'all'labels(cadena opcional): Lista de nombres de etiquetas separados por comasmilestone(cadena opcional): Título del hitoassignee_id(número opcional): ID de usuario del asignadoauthor_id(número opcional): ID de usuario del autorsearch(cadena opcional): Buscar en título y descripcióncreated_after(cadena opcional): Devolver incidencias creadas después de la fecha (ISO 8601)created_before(cadena opcional): Devolver incidencias creadas antes de la fecha (ISO 8601)updated_after(cadena opcional): Devolver incidencias actualizadas después de la fecha (ISO 8601)updated_before(cadena opcional): Devolver incidencias actualizadas antes de la fecha (ISO 8601)sort(cadena opcional): Ordenar incidencias por varios criteriosorder_by(cadena opcional): 'asc' o 'desc'page(número opcional): Número de página para paginaciónper_page(número opcional): Resultados por página (predeterminado 20)with_labels_details(booleano opcional): Si es true, devuelve más detalles para cada etiqueta. El valor predeterminado es false.
- Devuelve: Matriz de objetos de incidencia
-
update_issue- Actualizar una incidencia existente en un proyecto de GitLab
- Entradas:
project_id(cadena): ID del proyecto o ruta codificada en URLissue_iid(número): ID interno de la incidenciatitle(cadena opcional): Nuevo título de la incidenciadescription(cadena opcional): Nueva descripción de la incidenciastate_event(cadena opcional): 'close' o 'reopen'labels(matriz de cadenas opcional): Matriz de nombres de etiquetasassignee_ids(matriz de números opcional): Matriz de IDs de usuario a asignarmilestone_id(número opcional): ID del hito a asignar
- Devuelve: Detalles de la incidencia actualizada
-
search_issues- Buscar incidencias en un proyecto de GitLab
- Entradas:
project_id(cadena): ID del proyecto o ruta codificada en URLsearch(cadena): Término de búsqueda para título y descripciónstate(cadena opcional): 'opened', 'closed' o 'all'labels(cadena opcional): Lista de nombres de etiquetas separados por comaspage(número opcional): Número de página para paginaciónper_page(número opcional): Resultados por página (predeterminado 20)
- Devuelve: Matriz de objetos de incidencia coincidentes
-
add_issue_comment- Añadir un comentario a una incidencia en un proyecto de GitLab
- Entradas:
project_id(cadena): ID del proyecto o ruta codificada en URLissue_iid(número): ID interno de la incidenciabody(cadena): Contenido del comentario
- Devuelve: Detalles del comentario creado
Gestión de Solicitudes de Fusión
create_merge_request
- Crear una nueva solicitud de fusión
- Entradas:
project_id(cadena): ID del proyecto o ruta codificada en URLtitle(cadena): Título de la MRdescription(cadena opcional): Descripción de la MRsource_branch(cadena): Rama que contiene los cambiostarget_branch(cadena): Rama en la que fusionardraft(booleano opcional): Crear como MR en borradorallow_collaboration(booleano opcional): Permitir confirmaciones de miembros ascendentes
- Devuelve: Detalles de la solicitud de fusión creada
list_merge_requests
- Listar todas las merge requests en un proyecto de GitLab
- Entradas:
project_id(string): ID del proyecto o ruta codificada en URLstate(string opcional): 'opened', 'closed', 'locked', 'merged' o 'all'target_branch(string opcional): Filtrar por rama de destinosource_branch(string opcional): Filtrar por rama de origenlabels(string opcional): Lista de nombres de etiquetas separadas por comasmilestone(string opcional): Título del hitoassignee_id(número opcional): ID de usuario del asignadoauthor_id(número opcional): ID de usuario del autorsearch(string opcional): Buscar en título y descripcióncreated_after(string opcional): Devolver MRs creadas después de la fecha (ISO 8601)created_before(string opcional): Devolver MRs creadas antes de la fecha (ISO 8601)updated_after(string opcional): Devolver MRs actualizadas después de la fecha (ISO 8601)updated_before(string opcional): Devolver MRs actualizadas antes de la fecha (ISO 8601)sort(string opcional): Ordenar merge requestsorder_by(string opcional): 'asc' o 'desc'page(número opcional): Número de página para paginaciónper_page(número opcional): Resultados por página (predeterminado 20)
- Devuelve: Array de objetos de merge request
- Entradas:
-
update_merge_request- Actualizar una merge request existente en un proyecto de GitLab
- Entradas:
project_id(string): ID del proyecto o ruta codificada en URLmerge_request_iid(número): ID interno de la merge requesttitle(string opcional): Nuevo título de la merge requestdescription(string opcional): Nueva descripción de la merge requeststate_event(string opcional): 'close' o 'reopen'target_branch(string opcional): Nueva rama de destinolabels(string[] opcional): Array de nombres de etiquetasassignee_ids(número[] opcional): Array de IDs de usuario a asignarmilestone_id(número opcional): ID del hito a asignarremove_source_branch(booleano opcional): Eliminar rama de origen al fusionar
- Devuelve: Detalles de la merge request actualizada
-
merge_merge_request- Fusionar una merge request en un proyecto de GitLab
- Entradas:
project_id(string): ID del proyecto o ruta codificada en URLmerge_request_iid(número): ID interno de la merge requestmerge_commit_message(string opcional): Mensaje personalizado de commit de fusiónshould_remove_source_branch(booleano opcional): Eliminar rama de origen después de fusionarmerge_when_pipeline_succeeds(booleano opcional): Fusionar cuando el pipeline tenga éxitosha(string opcional): SHA que debe coincidir con el HEAD de la rama de origen
- Devuelve: Detalles de la merge request fusionada
-
add_merge_request_comment- Agregar un comentario a una merge request en un proyecto de GitLab
- Entradas:
project_id(string): ID del proyecto o ruta codificada en URLmerge_request_iid(número): ID interno de la merge requestbody(string): Contenido del comentario
- Devuelve: Detalles del comentario creado
Gestión de Etiquetas
-
list_labels- Listar todas las etiquetas en un proyecto
- Entradas:
project_id(string): ID del proyecto o ruta codificada en URLpage(número opcional): Número de página para paginaciónper_page(número opcional): Resultados por página (predeterminado 20)
- Devuelve: Array de objetos de etiqueta
-
create_label- Crear una nueva etiqueta
- Entradas:
project_id(string): ID del proyecto o ruta codificada en URLname(string): Nombre de la etiquetacolor(string): Color de la etiqueta (código hexadecimal)description(string opcional): Descripción de la etiquetapriority(número opcional): Prioridad de la etiqueta
- Devuelve: Detalles de la etiqueta creada
-
update_label- Actualizar una etiqueta existente
- Entradas:
project_id(string): ID del proyecto o ruta codificada en URLname(string): Nombre actual de la etiquetanew_name(string opcional): Nuevo nombre de la etiquetacolor(string opcional): Nuevo color de la etiquetadescription(string opcional): Nueva descripción de la etiquetapriority(número opcional): Nueva prioridad de la etiqueta
- Devuelve: Detalles de la etiqueta actualizada
-
delete_label- Eliminar una etiqueta
- Entradas:
project_id(string): ID del proyecto o ruta codificada en URLname(string): Nombre de la etiqueta a eliminar
- Devuelve: Confirmación de éxito
Gestión de Hitos
-
list_milestones- Listar todos los hitos en un proyecto
- Entradas:
project_id(string): ID del proyecto o ruta codificada en URLstate(string opcional): 'active' o 'closed'page(número opcional): Número de página para paginaciónper_page(número opcional): Resultados por página (predeterminado 20)
- Devuelve: Array de objetos de hito
-
create_milestone- Crear un nuevo hito
- Entradas:
project_id(string): ID del proyecto o ruta codificada en URLtitle(string): Título del hitodescription(string opcional): Descripción del hitodue_date(string opcional): Fecha de vencimiento (YYYY-MM-DD)start_date(string opcional): Fecha de inicio (YYYY-MM-DD)
- Devuelve: Detalles del hito creado
-
update_milestone- Actualizar un hito existente
- Entradas:
project_id(string): ID del proyecto o ruta codificada en URLmilestone_id(número): ID del hitotitle(string opcional): Nuevo títulodescription(string opcional): Nueva descripcióndue_date(string opcional): Nueva fecha de vencimientostart_date(string opcional): Nueva fecha de iniciostate_event(string opcional): 'close' o 'activate'
- Devuelve: Detalles del hito actualizado
-
delete_milestone- Eliminar un hito
- Entradas:
project_id(string): ID del proyecto o ruta codificada en URLmilestone_id(número): ID del hito a eliminar
- Devuelve: Confirmación de éxito
-
list_group_milestones- Listar todos los hitos en un grupo de GitLab
- Entradas:
group_id(string): ID del grupo o ruta codificada en URLstate(string opcional): 'active' o 'closed'title(string opcional): Filtrar por título de hito (sensible a mayúsculas)search(string opcional): Buscar en título o descripciónsearch_title(string opcional): Buscar solo en títuloinclude_ancestors(booleano opcional): Incluir hitos del grupo padreinclude_descendants(booleano opcional): Incluir hitos de subgruposupdated_before(string opcional): Filtrar por fecha de actualización (ISO 8601)updated_after(string opcional): Filtrar por fecha de actualización (ISO 8601)containing_date(string opcional): Hitos que contienen la fecha dadastart_date(string opcional): Filtrar donde due_date >= start_dateend_date(string opcional): Filtrar donde start_date <= end_datepage(número opcional): Número de página para paginaciónper_page(número opcional): Resultados por página (predeterminado 20)
- Devuelve: Array de objetos de hito de grupo
-
create_group_milestone- Crear un nuevo hito en un grupo de GitLab
- Entradas:
group_id(string): ID del grupo o ruta codificada en URLtitle(string): Título del hitodescription(string opcional): Descripción del hitodue_date(string opcional): Fecha de vencimiento (YYYY-MM-DD)start_date(string opcional): Fecha de inicio (YYYY-MM-DD)
- Devuelve: Detalles del hito de grupo creado
-
update_group_milestone- Actualizar un hito existente en un grupo de GitLab
- Entradas:
group_id(string): ID del grupo o ruta codificada en URLmilestone_id(número): ID del hitotitle(string opcional): Nuevo títulodescription(string opcional): Nueva descripcióndue_date(string opcional): Nueva fecha de vencimientostart_date(string opcional): Nueva fecha de iniciostate_event(string opcional): 'close' o 'activate'
- Devuelve: Detalles del hito de grupo actualizado
-
delete_group_milestone- Eliminar un hito de un grupo de GitLab
- Entradas:
group_id(string): ID del grupo o ruta codificada en URLmilestone_id(número): ID del hito a eliminar
- Devuelve: Confirmación de éxito
Configuración
Token de Acceso Personal
Crea un Token de Acceso Personal de GitLab con los permisos adecuados:
- Ve a Configuración de Usuario > Tokens de Acceso en GitLab
- Selecciona los ámbitos requeridos:
apipara acceso completo a la APIread_apipara acceso de solo lecturaread_repositoryywrite_repositorypara operaciones de repositorio
- Crea el token y guárdalo de forma segura
Uso con Claude Desktop
Agrega lo siguiente a tu claude_desktop_config.json:
{
"mcpServers": {
"gitlab": {
"command": "npx",
"args": ["-y", "@therealchristhomas/gitlab-mcp-server"],
"env": {
"GITLAB_PERSONAL_ACCESS_TOKEN": "<YOUR_TOKEN>",
"GITLAB_API_URL": "https://gitlab.com/api/v4"
}
}
}
}
Uso con Cursor/VSCode/Winsurf
Agrega lo siguiente a tu configuración de MCP:
{
"mcpServers": {
"gitlab": {
"command": "npx",
"args": ["-y", "@therealchristhomas/gitlab-mcp-server"],
"env": {
"GITLAB_PERSONAL_ACCESS_TOKEN": "<YOUR_TOKEN>",
"GITLAB_API_URL": "https://gitlab.com/api/v4"
}
}
}
}
Nota: Reemplaza <YOUR_TOKEN> con tu Token de Acceso Personal de GitLab real. También reemplaza con la URL de tu API de GitLab si no estás usando gitlab.com
Variables de Entorno
GITLAB_PERSONAL_ACCESS_TOKEN: Tu token de acceso personal de GitLab (requerido)GITLAB_API_URL: URL base para la API de GitLab (opcional, predeterminado ahttps://gitlab.com/api/v4)
Para instancias de GitLab autoalojadas, actualiza el GITLAB_API_URL para apuntar a tu instancia:
"GITLAB_API_URL": "https://your-gitlab-instance.com/api/v4"
Desarrollo
Compilación
npm run build
Modo de Desarrollo
npm run dev
Modo de Observación
npm run watch
Licencia
Este servidor MCP está licenciado bajo la Licencia MIT. Esto significa que eres libre de usar, modificar y distribuir el software, sujeto a los términos y condiciones de la Licencia MIT. Para más detalles, consulta el archivo LICENSE en el repositorio del proyecto.