Ir al contenido

Ejemplos de gestión de issues

Estos flujos paso a paso cubren la gestión de issues de principio a fin: triar issues abiertos, asignarlos y etiquetarlos, vincular issues relacionados y bloqueantes, seguir el progreso de los milestones, mantener discusiones y buscar entre proyectos. Cada ejemplo combina el prompt que escribes con la acción exacta del catálogo que el servidor ejecuta, escrita como dominio.acción → parámetros: en la superficie dinámica predeterminada es el action que pasas a gitlab_execute_action, y con GITLAB_MCP_TOOL_SURFACE=meta es el action de la meta-herramienta gitlab_<dominio>, para que puedas reutilizar la llamada directamente.

El bucle de triaje lleva un issue desde su entrada hasta su resolución: ver los issues abiertos, asignarlos y etiquetarlos, vincular los relacionados, seguirlos en un milestone y cerrarlos o mantener la discusión. El diagrama muestra ese ciclo y dónde vuelve a empezar.

No

Ver Issues
Abiertos

Asignar y
Etiquetar

Vincular Issues
Relacionados

Seguir en
Milestone

Resuelto?

Cerrar Issue

Añadir Comentario
y Discutir

Prompt: “Muéstrame todos los issues abiertos en el proyecto backend con la etiqueta ‘bug’”

issue.list → project_id: "my-group/backend",
state: "opened", labels: ["bug"]

Devuelve: títulos de issues, autores, etiquetas, milestones, asignados y fechas de creación.

Prompt: “Asigna el issue #123 a johndoe y añade las etiquetas ‘priority::high’ y ‘team::backend’”

issue.update → project_id: "my-group/backend",
issue_iid: 123, assignee_ids: [45], add_labels: ["priority::high", "team::backend"]

Prompt: “Muéstrame todos los issues sin asignar en el milestone Sprint 15”

issue.list → project_id: "my-group/backend",
milestone: "Sprint 15", assignee_id: 0

Devuelve: issues sin asignados que necesitan atención antes de que comience el sprint.

Prompt: “Cierra el issue #456 con un comentario explicando la corrección”

issue.note_create → project_id: "my-group/backend",
issue_iid: 456, body: "Corregido en MR !89 — el timeout era causado por..."
issue.update → project_id: "my-group/backend",
issue_iid: 456, state_event: "close"

No existe una herramienta de “análisis con IA” dedicada. El análisis asistido por IA ocurre cuando el asistente lee los issues con issue.list o issue.get, razona sobre su contenido y luego actúa sobre el resultado — asignando, etiquetando, vinculando o comentando con las acciones siguientes. Por ejemplo, “Encuentra los bugs abiertos en backend, agrúpalos por causa raíz probable y etiqueta los duplicados” encadena una acción de lectura con las acciones de triaje de esta guía, todo en una misma conversación.


Modela las relaciones entre issues para que las dependencias sean explícitas. Marca issues como relacionados, registra relaciones de bloqueo y revisa todos los vínculos asociados a un issue.

Prompt: “Vincula el issue #100 como relacionado al issue #200 en el proyecto backend”

issue.link_create → project_id: "my-group/backend",
issue_iid: 100, target_project_id: "my-group/backend", target_issue_iid: "200", link_type: "relates_to"

Prompt: “Marca el issue #300 como bloqueante del issue #400”

issue.link_create → project_id: "my-group/backend",
issue_iid: 300, target_project_id: "my-group/backend", target_issue_iid: "400", link_type: "blocks"

target_project_id es obligatorio incluso cuando ambos issues viven en el mismo proyecto, porque un enlace puede cruzar proyectos.

Prompt: “Muéstrame todos los issues relacionados al issue #100”

issue.link_list → project_id: "my-group/backend", issue_iid: 100

Devuelve: issues vinculados con tipos de relación (relates_to, blocks, is_blocked_by).

Los tres tipos de enlace responden a preguntas distintas, y elegir el equivocado oculta una dependencia real:

link_typeSignificadoDirección¿Bloquea?
relates_toLos dos issues están asociados pero ninguno condiciona al otroSimétricaNo
blocksEl issue de origen debe resolverse antes de que el destino avanceOrigen → destino
is_blocked_byLa vista inversa de blocks, desde el punto de vista del destinoDestino → origen

Crear un enlace blocks de #300 a #400 es lo que hace que #400 aparezca como is_blocked_by #300 — no se crean los dos lados.


Organiza y mide el trabajo con etiquetas y milestones. Crea etiquetas con ámbito para categorizar issues y consulta el progreso de un milestone para ver cuánto le falta a un sprint para completarse.

Prompt: “Crea una etiqueta con ámbito ‘priority::critical’ con color rojo en el proyecto backend”

project.label_create → project_id: "my-group/backend",
name: "priority::critical", color: "#CC0000"

Prompt: “Muéstrame el progreso del milestone Sprint 15”

project.milestone_get → project_id: "my-group/backend", milestone_iid: 15

Devuelve: título, estado, fecha de inicio, fecha límite, si ha expirado y URL web del milestone; project.milestone_issues lista los issues que siguen abiertos en él.


Mantén la conversación en el propio issue. Añade un comentario rápido, abre una discusión en hilo para un tema más profundo o reacciona con emojis para reconocer las novedades sin añadir ruido.

Prompt: “Comenta en el issue #123: ‘Reproducido en staging — el error solo ocurre con peticiones concurrentes’”

issue.note_create → project_id: "my-group/backend",
issue_iid: 123, body: "Reproducido en staging — el error solo ocurre con peticiones concurrentes"

Prompt: “Crea un hilo de discusión en el issue #123 sobre la arquitectura propuesta”

issue.discussion_create → project_id: "my-group/backend",
issue_iid: 123, body: "Discutamos la arquitectura propuesta para esta funcionalidad..."

Prompt: “Añade una reacción de pulgar arriba al issue #123”

issue.emoji_issue_create → project_id: "my-group/backend",
issue_iid: 123, name: "thumbsup"

Encuentra issues más allá de un solo proyecto. Busca globalmente por palabra clave en todos los proyectos a los que tienes acceso, o limita la búsqueda a un grupo para localizar issues por etiqueta.

Prompt: “Busca issues que mencionen ‘memory leak’ en todos mis proyectos”

search.issues → query: "memory leak"

Devuelve: issues coincidentes en todos los proyectos accesibles con títulos, descripciones y rutas de proyecto.

Prompt: “Encuentra todos los issues abiertos con etiqueta ‘security’ en el grupo platform”

issue.list_group → group_id: "platform",
state: "opened", labels: ["security"]

Devuelve: issues relacionados con seguridad en todos los proyectos del grupo.

En la superficie dinámica predeterminada, el asistente descubre primero la acción de issues y su esquema, y luego la ejecuta, así que cada bloque anterior es el action de una llamada a gitlab_execute_action. El patrón de dos pasos es buscar y luego ejecutar:

gitlab_find_action → query: "issues abiertos con una etiqueta"
gitlab_execute_action → action: "issue.list", params: { project_id: "my-group/backend", state: "opened", labels: ["bug"] }

Asignar, etiquetar y vincular siguen la misma forma:

gitlab_execute_action → action: "issue.update", params: { project_id: "my-group/backend", issue_iid: 123, assignee_ids: [45], add_labels: ["priority::high", "team::backend"] }
gitlab_execute_action → action: "issue.link_create", params: { project_id: "my-group/backend", issue_iid: 300, target_project_id: "my-group/backend", target_issue_iid: "400", link_type: "blocks" }

Con GITLAB_MCP_TOOL_SURFACE=meta las mismas llamadas van a la meta-herramienta gitlab_issue con action: list, action: update y action: link_create, cada una con los parámetros anidados en params.


Preguntas frecuentes

¿Cómo triago issues de GitLab con un asistente de IA?

Se trabaja de arriba abajo: pide al asistente que liste los issues abiertos que te interesan y después que los asigne, etiquete y enlace. Un ciclo típico son cuatro llamadas: issue.list (filtrando por state: opened y un array labels) para ver el backlog, issue.update para fijar assignee_ids, add_labels y milestone_id, issue.link_create (con target_project_id y target_issue_iid) para registrar dependencias, y de nuevo issue.update con state_event: close al resolverlo. En la superficie dinámica predeterminada son acciones de gitlab_execute_action, localizables con gitlab_find_action; con GITLAB_MCP_TOOL_SURFACE=meta son las acciones list, update y link_create de la meta-herramienta gitlab_issue.

¿Cuál es la diferencia entre relates_to, blocks y is_blocked_by?

Son los tres valores de link_type que acepta issue.link_create (gitlab_issue con action: link_create en la superficie meta). relates_to es una asociación simétrica y no bloqueante: ningún issue condiciona al otro. blocks significa que el issue de origen debe resolverse antes de que el destino pueda avanzar. is_blocked_by es la dirección inversa de esa misma relación, así que crear un enlace blocks de #300 a #400 es lo que hace que #400 aparezca como is_blocked_by #300. Listar los enlaces con issue.link_list devuelve el tipo de relación junto a cada issue enlazado.

¿Puede un asistente de IA cerrar un issue por mí?

Sí, pero cerrar es un cambio de estado y sigue las mismas reglas de seguridad que cualquier otra mutación. La llamada es issue.update con state_event: close (gitlab_issue, action: update, en la superficie meta). Si el despliegue usa GITLAB_MCP_READ_ONLY=true la acción ni siquiera se registra, y con GITLAB_MCP_SAFE_MODE=true el servidor devuelve una previsualización JSON del cambio en lugar de aplicarlo.

¿Cómo busco issues en varios proyectos de GitLab a la vez?

Usa search.issues en lugar de issue.list (las meta-herramientas gitlab_search y gitlab_issue cuando GITLAB_MCP_TOOL_SURFACE=meta), porque el listado de issues está limitado a un proyecto o a un grupo. La búsqueda acepta alcance de instancia, grupo o proyecto, así que search.issues con un group_id busca en todos los proyectos de ese grupo en una sola llamada. Los resultados incluyen la ruta del proyecto en cada coincidencia, de modo que el asistente puede continuar con issue.get sobre el proyecto propietario.