Skip to content

Code Review Workflow Examples

These step-by-step workflows cover the full merge request review cycle: finding MRs that need your attention, reading their diffs, checking approval state, leaving notes and threaded discussions, and finally merging or rebasing. Each example pairs the prompt you type with the exact meta-tool action the server runs, so you can reuse the call directly.

This is the core review loop: list the open MRs assigned to you, read the file changes, post review feedback, and approve once the code looks good. The diagram traces a single MR (!42) through that sequence.

sequenceDiagram
    participant U as User
    participant AI as AI Assistant
    participant MCP as MCP Server
    participant GL as GitLab API

    U->>AI: "Review MR !42"
    AI->>MCP: gitlab_merge_request (action: list)
    MCP->>GL: GET /projects/:id/merge_requests
    GL-->>MCP: MR list
    MCP-->>AI: Open MRs
    AI->>MCP: gitlab_merge_request (action: changes)
    MCP->>GL: GET /projects/:id/merge_requests/:iid/changes
    GL-->>MCP: Diff data
    MCP-->>AI: File changes
    AI->>MCP: gitlab_merge_request (action: note_create)
    MCP->>GL: POST /projects/:id/merge_requests/:iid/notes
    AI->>MCP: gitlab_merge_request (action: approve)
    MCP->>GL: POST /projects/:id/merge_requests/:iid/approve
    AI->>U: "Review complete, MR approved"

Prompt: “Show me all merge requests assigned to me for review in the backend project”

gitlab_merge_request → action: list, project_id: "my-group/backend",
reviewer_username: "johndoe", state: "opened"

Returns: MR titles, authors, branches, labels, and review status.

Prompt: “Show me the file changes in MR !42”

gitlab_merge_request → action: changes, project_id: "my-group/backend", merge_request_iid: 42

Returns: list of changed files with additions, deletions, and full diffs.

Prompt: “Who has approved MR !42 and who still needs to approve?”

gitlab_merge_request → action: approval_state, project_id: "my-group/backend",
merge_request_iid: 42

Returns: approval rules, required approvals, current approvals, and eligible approvers.

Prompt: “Approve merge request !42 in the backend project”

gitlab_merge_request → action: approve, project_id: "my-group/backend",
merge_request_iid: 42

There is no separate “AI review” tool. AI-powered review happens when the assistant reads an MR’s diff with gitlab_merge_request → action: changes, reasons over the code, and then writes its findings back as notes or threaded discussions. A typical request — “Read the changes in MR !42 and flag any error-handling or security issues” — chains the read action above with the note_create and discussion_create actions below, all within a single conversation.


Share review feedback directly on the MR. Post a single inline comment, open a threaded discussion for a larger topic, find threads that are still unresolved, or stage draft notes to publish your whole review at once.

Prompt: “Add a comment to MR !42 saying ‘The error handling in auth.go needs a retry mechanism‘“

gitlab_merge_request → action: note_create, project_id: "my-group/backend",
merge_request_iid: 42, body: "The error handling in auth.go needs a retry mechanism"

Prompt: “Start a discussion on MR !42 about the database migration strategy”

gitlab_merge_request → action: discussion_create, project_id: "my-group/backend",
merge_request_iid: 42, body: "Let's discuss the database migration strategy..."

Prompt: “Show me all unresolved discussion threads in MR !42”

gitlab_merge_request → action: discussion_list, project_id: "my-group/backend",
merge_request_iid: 42

Filter the results for threads where resolved: false to find outstanding review items.

Prompt: “Create a draft review note on MR !42 — I’ll publish all my comments together”

gitlab_merge_request → action: draft_note_create, project_id: "my-group/backend",
merge_request_iid: 42, note: "Consider using a context timeout here..."

Draft notes are only visible to you until you publish them all at once with action: draft_note_publish_all.


Drive a merge request through its full lifecycle: open it from a feature branch, rebase it onto the latest target, merge it (optionally squashing), or close it when an approach is superseded.

Prompt: “Create a merge request from branch feature/auth-refactor to main in the backend project”

gitlab_merge_request → action: create, project_id: "my-group/backend",
source_branch: "feature/auth-refactor", target_branch: "main",
title: "Refactor authentication module"

Prompt: “Merge MR !42 using squash commit”

gitlab_merge_request → action: merge, project_id: "my-group/backend",
merge_request_iid: 42, squash: true

Prompt: “Rebase MR !42 against the latest main branch”

gitlab_merge_request → action: rebase, project_id: "my-group/backend",
merge_request_iid: 42

Prompt: “Close MR !99 — the approach was superseded by MR !105”

gitlab_merge_request → action: update, project_id: "my-group/backend",
merge_request_iid: 99, state_event: "close"

Before opening or merging an MR, compare two branches to see exactly what would change. The comparison returns the commits, changed files, and diff statistics between them.

Prompt: “Compare the develop branch with main in the backend project”

gitlab_repository → action: compare, project_id: "my-group/backend",
from: "main", to: "develop"

Returns: list of commits, changed files, and diff statistics between the two branches.