Skip to content

Issue Management Examples

These step-by-step workflows cover issue management end to end: triaging open issues, assigning and labeling them, linking related and blocking issues, tracking milestone progress, holding discussions, and searching across projects. Each example pairs the prompt you type with the exact meta-tool action the server runs, so you can reuse the call directly.

The triage loop moves an issue from intake to resolution: view open issues, assign and label them, link related issues, track them in a milestone, and either close them or keep the discussion going. The diagram shows that cycle and where it loops back.

Yes

No

View Open
Issues

Assign &
Label

Link Related
Issues

Track in
Milestone

Resolved?

Close Issue

Add Comment
& Discuss

Prompt: “Show me all open issues in the backend project with label ‘bug’”

gitlab_issue → action: list, project_id: "my-group/backend",
state: "opened", labels: "bug"

Returns: issue titles, authors, labels, milestones, assignees, and creation dates.

Prompt: “Assign issue #123 to johndoe and add labels ‘priority::high’ and ‘team::backend’”

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

Prompt: “Show me all unassigned issues in the Sprint 15 milestone”

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

Returns: issues without assignees that need attention before the sprint starts.

Prompt: “Close issue #456 with a comment explaining the fix”

gitlab_issue → action: note_create, project_id: "my-group/backend",
issue_iid: 456, body: "Fixed in MR !89 — the timeout was caused by..."
gitlab_issue → action: update, project_id: "my-group/backend",
issue_iid: 456, state_event: "close"

There is no dedicated “AI analysis” tool. AI-powered analysis happens when the assistant reads issues with gitlab_issue → action: list or action: get, reasons over their content, and then acts on the result — assigning, labeling, linking, or commenting with the actions below. For example, “Find the open bugs in backend, group them by likely root cause, and label the duplicates” chains a read action with the triage actions in this guide, all within one conversation.


Model relationships between issues so dependencies are explicit. Mark issues as related, record blocking relationships, and review every link attached to an issue.

Prompt: “Link issue #100 as related to issue #200 in the backend project”

gitlab_issue → action: link_create, project_id: "my-group/backend",
issue_iid: 100, target_issue_iid: 200, link_type: "relates_to"

Prompt: “Mark issue #300 as blocking issue #400”

gitlab_issue → action: link_create, project_id: "my-group/backend",
issue_iid: 300, target_issue_iid: 400, link_type: "blocks"

Prompt: “Show me all issues related to issue #100”

gitlab_issue → action: link_list, project_id: "my-group/backend", issue_iid: 100

Returns: linked issues with relationship types (relates_to, blocks, is_blocked_by).

The three link types answer different questions, and choosing the wrong one hides a real dependency:

link_typeMeaningDirectionBlocks progress?
relates_toThe two issues are associated but neither gates the otherSymmetricNo
blocksThe source issue must be resolved before the target can startSource → targetYes
is_blocked_byThe inverse view of blocks, as seen from the target issueTarget → sourceYes

Creating a blocks link from #300 to #400 is what makes #400 report is_blocked_by #300 — you do not create both sides.


Organize and measure work with labels and milestones. Create scoped labels to categorize issues, and check a milestone’s progress to see how close a sprint is to completion.

Prompt: “Create a scoped label ‘priority::critical’ with red color in the backend project”

gitlab_label → action: create, project_id: "my-group/backend",
name: "priority::critical", color: "#CC0000"

Prompt: “Show me the progress of milestone Sprint 15”

gitlab_milestone → action: get, project_id: "my-group/backend", milestone_id: 15

Returns: completion percentage, open/closed issue counts, start date, due date, and remaining days.


Keep the conversation on the issue itself. Add a quick comment, open a threaded discussion for a deeper topic, or react with award emoji to acknowledge updates without adding noise.

Prompt: “Comment on issue #123: ‘Reproduced on staging — the error only occurs with concurrent requests’”

gitlab_issue → action: note_create, project_id: "my-group/backend",
issue_iid: 123, body: "Reproduced on staging — the error only occurs with concurrent requests"

Prompt: “Create a discussion thread on issue #123 about the proposed architecture”

gitlab_issue → action: discussion_create, project_id: "my-group/backend",
issue_iid: 123, body: "Let's discuss the proposed architecture for this feature..."

Prompt: “Add a thumbs-up reaction to issue #123”

gitlab_issue → action: award_emoji_create, project_id: "my-group/backend",
issue_iid: 123, name: "thumbsup"

Find issues beyond a single project. Search globally by keyword across every project you can access, or scope the search to one group to surface issues by label.

Prompt: “Search for issues mentioning ‘memory leak’ across all my projects”

gitlab_search → scope: "issues", search: "memory leak"

Returns: matching issues across all accessible projects with titles, descriptions, and project paths.

Prompt: “Find all open issues with label ‘security’ in the platform group”

gitlab_issue → action: list, group_id: "platform",
state: "opened", labels: "security"

Returns: security-related issues across all projects in the group.


Frequently asked questions

How do I triage GitLab issues with an AI assistant?

Ask your assistant to list the open issues you care about, then to assign, label, and link them. A typical triage loop is four calls: gitlab_issue with action: list (filtered by state: opened and a label) to see the backlog, action: update to set assignee_ids, labels, and milestone_id, action: link_create to record dependencies, and action: update with state_event: close once resolved. In the default dynamic surface the same operations resolve through gitlab_find_action as issue.list, issue.update, and issue.link_create.

What is the difference between relates_to, blocks, and is_blocked_by?

They are the three link_type values accepted by gitlab_issue with action: link_create. relates_to is a symmetric, non-blocking association — neither issue gates the other. blocks means the source issue must be resolved before the target can proceed. is_blocked_by is the inverse direction of the same relationship, so creating a blocks link from #300 to #400 is what makes #400 report is_blocked_by #300. Listing links with action: link_list returns the relationship type alongside each linked issue.

Can an AI assistant close a GitLab issue for me?

Yes, but closing is a state change, so it follows the same safety rules as any other mutation. The call is gitlab_issue with action: update and state_event: close. If the deployment runs with GITLAB_READ_ONLY=true the action is not registered at all, and under GITLAB_SAFE_MODE=true the server returns a JSON preview of the change instead of applying it.

How do I search issues across several GitLab projects at once?

Use gitlab_search rather than gitlab_issue, because issue listing is scoped to one project. Search accepts an instance, group, or project scope, so scope: issues with a group_id searches every project in that group in one call. Results come back with the project path on each hit, so an assistant can follow up with gitlab_issue action: get on whichever project owns the issue.