@godrix/mcp-gitlab-utils
This MCP server provides a GitLab REST API interface for AI agents, enabling management of merge requests, CI/CD pipelines, repositories, and local code review workflows.
Discovery
Resolve
project_id, current branch, and MR IID from a local repository path (gitlab_resolve_context).Search for accessible GitLab projects by name or path (
gitlab_search_projects).
Merge Requests
Get MR metadata — title, state, branches, reviewers, labels, pipeline, approvals, and URL (
gitlab_get_merge_request).Check mergeability, including conflicts, draft status, pipeline results, approvals, and blocking discussions (
gitlab_get_mr_merge_status).Fetch MR diff/changes, optionally with failed CI job logs and discussions (
gitlab_get_mr_context).List review threads, inline comments, and general notes (
gitlab_get_mr_discussions).Post inline review comments on specific diff lines (
gitlab_add_mr_inline_comment).Full MR lifecycle: list, get, create, update, approve/unapprove, comment, merge, close, reopen, mark as draft/ready (
gitlab_manage_merge_requests).
CI/CD Pipelines
List recent pipelines filtered by branch, MR, or status (
gitlab_list_pipelines).Get pipeline details and job summaries (
gitlab_get_pipeline).Fetch full or truncated logs for a specific CI job (
gitlab_get_job_trace).Control pipelines/jobs: list jobs, play manual jobs, retry a job or pipeline, cancel a pipeline (
gitlab_control_pipeline).
Repository
Read remote file contents at any branch, tag, or commit SHA (
gitlab_get_file).Compare two refs to get commits and file diffs (
gitlab_compare).
Local Review
Create a
git worktreefrom a local repo or shallow clone and auto-run dependency installation (e.g.,npm ci,composer install) for local code review (gitlab_prepare_review).
Read-Only Mode
Set
GITLAB_READ_ONLY=trueto block all write operations (merge, comment, approve, pipeline control, prepare_review), safe for analysis-only agents.
Built-in Prompts/Workflows Predefined workflows for common tasks: reviewing an MR, merging an MR, diagnosing/fixing failed CI, creating an MR from a branch, and triaging open MRs.
Provides tools for interacting with GitLab's API, enabling AI agents to manage merge requests, pipelines, repositories, and perform code reviews.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@@godrix/mcp-gitlab-utilscheck the merge status of MR #42"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
@godrix/gitlab-utils-mcp
Node.js MCP server for the GitLab REST API — built for AI agents (pipelines, merge requests, diffs, local review, and context discovery).
Version 0.3.1 — gitlab_-prefixed tools, full MR lifecycle, read-only mode, server instructions, prompts, and resources.
Prerequisites
Node.js 18+
GitLab PAT with
apiandread_repository(write scope for merge/comment/approve)Git on PATH (for
repo_path, worktrees, and local review)
Related MCP server: gitlab-mcp
Quick install (npx)
No clone or local build — the published npm package includes compiled JavaScript.
Cursor / Claude Desktop (mcp.json)
{
"mcpServers": {
"gitlab-utils": {
"command": "npx",
"args": ["-y", "@godrix/gitlab-utils-mcp"],
"env": {
"GITLAB_TOKEN": "glpat-...",
"GITLAB_BASE_URL": "https://gitlab.example.com",
"GITLAB_READ_ONLY": "false"
}
}
}
}Restart your MCP client after saving. Optional variables: GITLAB_PROJECT_ID, WORKTREE_DIR.
Global install (alternative)
npm install -g @godrix/gitlab-utils-mcpThen use "command": "gitlab-utils-mcp" in mcp.json (no npx).
Environment variables
Variable | Required | Description |
| Yes | Sent as |
| Yes | e.g. |
| No | Fallback |
| No | Default: |
| No | Default: |
Project resolution: pass project_id on a tool, or repo_path (local clone) to infer group/repo from origin, or set GITLAB_PROJECT_ID.
MR without IID: with repo_path, the current branch resolves the open MR (source_branch); errors if zero or multiple MRs match. Use gitlab_resolve_context to discover the IID.
Tools
Discovery
Tool | Description |
| Resolve |
| Search projects accessible by the token |
Merge requests
Tool | Description |
| MR metadata (state, reviewers, pipeline) |
| Mergeability: conflicts, draft, pipeline, approvals, blockers |
| Diff/changes + optional CI traces and discussions |
| Review threads and comments |
| Inline comment on a diff line |
|
|
CI/CD
Tool | Description |
| List pipelines (by ref, MR, or status) |
| Pipeline + jobs |
| Job log |
|
|
Repository
Tool | Description |
| Read remote file at a ref (e.g. |
| Diff between two refs |
Local review
Tool | Description |
|
|
Prompts (workflows)
Prompt | Use |
| Full MR review with checklist |
| Validate mergeability and merge |
| Diagnose and fix failed pipeline |
| Create MR from current branch |
| Prioritize open MRs |
Resources
URI | Content |
| Markdown agent guide (tools and flows) |
| Project metadata JSON |
Read-only mode
With GITLAB_READ_ONLY=true:
Allowed: reads (MR, diff, pipeline, merge status, list/get)
Blocked: merge, comment, inline comment, approve, create/update MR, pipeline control, prepare_review
Useful for analysis/review agents without mutating GitLab.
Migration 0.2 → 0.3
New tools and actions (no breaking changes to existing names):
Addition | Description |
| Mergeability state and blockers |
| Inline diff comment |
| New actions: |
Migration 0.1 → 0.2
Legacy names were renamed with the gitlab_ prefix:
0.1.0 | 0.2.0 |
|
|
|
|
|
|
|
|
gitlab_control_pipeline: retry → retry_job; new actions retry_pipeline and cancel_pipeline.
MCPB install (Claude Desktop / local bundle)
Alternative to npx for clients that support .mcpb files:
Clone the repo:
git clone ... && npm install && npm run buildnpm run pack:mcpb— produces.mcpbwithmanifest.json,dist/, andnode_modulesFor a smaller bundle:
npm run pack:mcpb:slimInstall the
.mcpbin your client and fill in token + URL
Local development
To contribute or test changes before publishing to npm:
git clone https://github.com/godrix/mcp-gitlab-utils.git
cd mcp-gitlab-utils
npm install
cp .env.example .env # set GITLAB_TOKEN and GITLAB_BASE_URL
npm run dev # tsx, stdio
# or
npm run build && npm startCursor config pointing at the clone (instead of npx):
{
"mcpServers": {
"gitlab-utils": {
"command": "node",
"args": ["/absolute/path/mcp-gitlab-utils/dist/main.js"],
"env": {
"GITLAB_TOKEN": "glpat-...",
"GITLAB_BASE_URL": "https://gitlab.example.com",
"GITLAB_READ_ONLY": "false"
}
}
}
}Extra requirements for local review: npm and/or composer depending on the target repo.
License
MIT
Available Tools
15 toolsgitlab_add_mr_inline_commentInline MR diff commentA
Creates a review thread on a specific diff line (file + new_line or old_line). Requires write permissions.
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | Comment text. | |
| new_line | No | Line in the new file (additions/changes). | |
| new_path | No | New path if the file was renamed; default=file_path. | |
| old_line | No | Line in the old file (deletions). | |
| old_path | No | Old path if the file was renamed; default=file_path. | |
| file_path | Yes | File path in the diff (e.g. src/app.ts). | |
| repo_path | No | Absolute local clone path; resolves project and MR from current branch. | |
| project_id | No | Numeric ID or group/repo path on GitLab. | |
| merge_request_iid | No | Merge request IID. Omit with repo_path to resolve from current branch. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate mutability (not read-only, not destructive). The description adds context that it creates a thread on a specific diff line. No contradiction, and it discloses the core behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences: first states the purpose, second adds permission requirement. No filler or redundancy; front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite 9 parameters and no output schema, the description omits important details like mutual exclusivity of new_line/old_line, error scenarios, or what a 'review thread' entails. This leaves gaps for a complete understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters. The description briefly mentions 'new_line or old_line' but adds no additional parameter-level meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (creates a review thread) on a specific resource (diff line) with file and line identifiers. It distinguishes from sibling tools like gitlab_get_mr_discussions which retrieves threads.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description mentions a prerequisite (write permissions) but does not provide guidance on when to use this tool versus alternatives like gitlab_prepare_review or gitlab_manage_merge_requests.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gitlab_compareCompare branches or commitsARead-only
Diff between two refs (branches, tags, or SHAs). Returns commits and file diffs.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | Target ref (branch, tag, or SHA). | |
| from | Yes | Source ref (branch, tag, or SHA). | |
| straight | No | When true, direct comparison without merge-base. | |
| repo_path | No | Absolute local clone path; resolves project and MR from current branch. | |
| project_id | No | Numeric ID or group/repo path on GitLab. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is clear. The description adds that it returns commits and file diffs, which is useful behavioral context but not rich beyond that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, front-loaded with the core function and output. No extraneous content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema, so description should clarify return format. It mentions 'commits and file diffs' but lacks detail on structure, pagination, or error conditions. Adequate for a simple tool but could be more complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so description does not need to add parameter details. It mentions ref types (branches, tags, SHAs) which aligns with parameter descriptions but adds no new semantic value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it computes diffs between two Git refs (branches, tags, or SHAs) and returns commits and file diffs. It distinguishes from siblings by specifying arbitrary refs rather than just MRs, though not explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description implies usage for comparing any two refs but does not provide when-to-use or when-not-to-use guidance relative to siblings like gitlab_get_mr_merge_status.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gitlab_control_pipelineControl pipeline and jobsC
Lists jobs, plays manual jobs, retries job/pipeline, or cancels pipeline.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | ||
| job_id | No | ||
| repo_path | No | Absolute local clone path; resolves project and MR from current branch. | |
| project_id | No | Numeric ID or group/repo path on GitLab. | |
| pipeline_id | No | ||
| merge_request_iid | No | Merge request IID. Omit with repo_path to resolve from current branch. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation destructiveHint=false contradicts the description's mention of 'cancels pipeline', which is a destructive action. The description does not clarify behavioral traits like permissions, idempotency, or side effects beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short, but it is a list of actions without structure. It could be improved by grouping actions or adding context, but it is not overly verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 6 parameters and multiple actions, the description is insufficient. It does not explain return values (no output schema) or how to combine parameters for each action, leaving significant gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description does not add any meaning beyond the input schema. It fails to explain how parameters relate to actions (e.g., which parameters are needed for 'play' vs 'retry'). Schema coverage is 50%, but the description offers no compensation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly lists the tool's actions (list jobs, play, retry, cancel), indicating it controls pipelines and jobs. However, it does not distinguish from sibling tools like gitlab_get_pipeline or gitlab_list_pipelines, lacking specificity about what makes this tool unique.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. There is no mention of prerequisites, forbidden combinations, or scenarios where another tool would be better.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gitlab_get_fileRead repository fileARead-only
Returns file content at a ref (branch, tag, or commit SHA). Useful for .gitlab-ci.yml or configs without a local clone.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | No | Branch, tag, or SHA. Default: project default_branch. | |
| file_path | Yes | File path in the repo (e.g. .gitlab-ci.yml, src/main.ts). | |
| max_chars | No | ||
| repo_path | No | Absolute local clone path; resolves project and MR from current branch. | |
| project_id | No | Numeric ID or group/repo path on GitLab. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool is read-only and non-destructive. The description adds that it works without a local clone, which is useful context. It does not detail error handling, truncation behavior, or file existence checks, but with the annotations, this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, very concise, and front-loaded with the core functionality. Every sentence serves a purpose without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple file reading tool, the description covers the essential behavior and use case. It does not mention the max_chars parameter or output format, but the schema provides those details. Overall, it is complete for typical usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides detailed descriptions for 4 of 5 parameters (80% coverage). The tool description adds no additional parameter information beyond that, making it sufficient but not exceptional.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns file content at a specified ref, using a specific verb and resource. It distinguishes from sibling tools, which are focused on MRs, pipelines, etc., by being a file reading operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a use case example ('.gitlab-ci.yml or configs without a local clone'), giving contextual guidance. It does not explicitly mention when not to use it or list alternatives, but given the sibling context, it is sufficiently clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gitlab_get_job_traceCI job logARead-only
Returns the trace (full or truncated log) for a job by job_id.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | Job ID (not to be confused with pipeline_id). | |
| max_chars | No | ||
| repo_path | No | Absolute local clone path; resolves project and MR from current branch. | |
| project_id | No | Numeric ID or group/repo path on GitLab. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. Description adds context about truncation ('full or truncated log') but does not specify truncation conditions, encoding, or error behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence of 13 words, front-loaded with the action, no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description should clarify return format and truncation behavior. It is adequate but missing details on what the trace looks like (e.g., plain text) and error scenarios.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 75% of parameters with descriptions. The description mentions 'full or truncated log' but does not clarify the max_chars parameter or add significant meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it returns the trace (log) for a job by job_id, which is distinct from sibling tools like gitlab_get_pipeline or gitlab_get_mr_context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied (when you need a job's log), but no explicit guidance on when to use this versus alternatives or any exclusions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gitlab_get_merge_requestMerge request detailsARead-only
Returns MR metadata: title, state, branches, reviewers, labels, head pipeline, approvals, and URL.
| Name | Required | Description | Default |
|---|---|---|---|
| repo_path | No | Absolute local clone path; resolves project and MR from current branch. | |
| project_id | No | Numeric ID or group/repo path on GitLab. | |
| merge_request_iid | No | Merge request IID. Omit with repo_path to resolve from current branch. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the description's statement 'Returns MR metadata' aligns but doesn't add significantly. However, it lists specific fields returned, which gives the agent a concrete sense of the output shape. This adds moderate value beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that front-loads the core purpose ('Returns MR metadata') and enumerates key fields. There is no extraneous information, and every word contributes to understanding what the tool does.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description lists the specific metadata fields returned, which compensates for the lack of an output schema. It provides enough context for an agent to understand the tool's output shape. For a read-only tool with good annotations and a clear purpose, this is sufficient, though it could mention that the URL is included.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameters are already well-documented. The tool description does not repeat parameter details but adds context about conditional resolution ('Omit with repo_path to resolve from current branch') via the schema's own description of merge_request_iid. This reinforces usage but does not add substantial new information beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it returns specific MR metadata (title, state, branches, reviewers, labels, head pipeline, approvals, URL), establishing a specific verb+resource combination. This distinguishes it from siblings like gitlab_get_mr_merge_status (which returns only merge status) and gitlab_get_mr_context (which returns context). The description is unambiguous about what the tool retrieves.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives. The description does not mention when not to use it, nor does it reference sibling tools or conditions for using one over another. While the sibling list is provided externally, the description itself offers no usage direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gitlab_get_mr_contextMR context (diff + pipeline + discussions)ARead-only
Returns MR changes/diff and optionally failed job traces and review discussions.
| Name | Required | Description | Default |
|---|---|---|---|
| repo_path | No | Absolute local clone path; resolves project and MR from current branch. | |
| project_id | No | Numeric ID or group/repo path on GitLab. | |
| trace_max_chars | No | ||
| merge_request_iid | No | Merge request IID. Omit with repo_path to resolve from current branch. | |
| include_discussions | No | When true, includes discussion threads and inline comments. | |
| discussions_per_page | No | ||
| include_failed_jobs_trace | No | When true, attaches logs from failed jobs on head_pipeline. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the tool is safe. The description adds that it returns diffs and optionally traces/discussions. No contradictions or missing behavioral traits beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that clearly states the tool's primary function. No superfluous information; every word serves a purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema is provided, so the description should explain return format. It states the returned content types (diff, traces, discussions) but lacks detail on structure or how they are combined. While adequate for simple use, completeness is limited.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 71%, so baseline is 3. The tool description adds no additional meaning beyond the schema's parameter descriptions. The schema already explains project_id, repo_path, and merge_request_iid, so the description does not enhance parameter understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The title 'MR context (diff + pipeline + discussions)' and description explicitly state the tool returns changes/diff and optionally failed job traces and review discussions. This clearly distinguishes it from siblings like gitlab_get_merge_request (which returns metadata) and gitlab_get_mr_discussions (which only gets discussions).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use (when needing combined diff, traces, and discussions) but does not explicitly state when to prefer this over alternatives or mention exclusions. Given sibling tools for individual components, explicit guidance would improve clarity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gitlab_get_mr_discussionsMerge request discussionsARead-only
Lists review threads, inline comments, and general MR notes.
| Name | Required | Description | Default |
|---|---|---|---|
| per_page | No | ||
| repo_path | No | Absolute local clone path; resolves project and MR from current branch. | |
| project_id | No | Numeric ID or group/repo path on GitLab. | |
| merge_request_iid | No | Merge request IID. Omit with repo_path to resolve from current branch. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds the specific types of content listed (review threads, inline comments, general MR notes), but does not disclose pagination behavior or any other traits beyond the annotations. Acceptable but not exceptional.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One succinct sentence that front-loads the core action. No filler or redundant information; every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is functional but minimal given the absence of an output schema and the presence of sibling tools. It does not explain the return structure, pagination, or how the repo_path parameter influences behavior. Adequate for a straightforward list tool, but leaves room for improvement.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 75%, with three parameters documented. The description does not add any parameter-level meaning beyond the schema. Per_page lacks a description, and the tool description does not compensate. Baseline 3 is appropriate for high coverage without extra value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists review threads, inline comments, and general MR notes. This specific verb-resource combination distinguishes it from siblings like gitlab_get_merge_request and gitlab_add_mr_inline_comment.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. The description does not mention prerequisites or context where this tool is appropriate, leaving the agent to infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gitlab_get_mr_merge_statusMR merge statusARead-only
Summarizes whether the MR can be merged: conflicts, draft, pipeline, approvals, blocking discussions, and actionable blockers.
| Name | Required | Description | Default |
|---|---|---|---|
| repo_path | No | Absolute local clone path; resolves project and MR from current branch. | |
| project_id | No | Numeric ID or group/repo path on GitLab. | |
| merge_request_iid | No | Merge request IID. Omit with repo_path to resolve from current branch. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark it as readOnlyHint=true. The description adds valuable behavioral context by listing exactly what it checks (conflicts, draft, pipeline, approvals, blocking discussions, actionable blockers), going beyond the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that immediately states the action ('Summarizes') and includes a concise list of what is checked. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only status check tool with good annotations and full schema coverage, the description is complete. It explains the tool's purpose and scope adequately, and the lack of output schema is acceptable as the output format is implied by 'summarizes'.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All three parameters have descriptions in the schema (100% coverage). The tool description does not add additional meaning beyond what the schema already provides, so baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool summarizes merge readiness, listing specific aspects like conflicts, draft, pipeline, approvals, and blockers. This distinguishes it from sibling tools like gitlab_get_merge_request which returns full details, or gitlab_get_mr_context which may provide broader context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. For example, it does not explain that this tool is for quick merge readiness checks while gitlab_get_merge_request provides comprehensive MR data.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gitlab_get_pipelinePipeline detailsARead-only
Returns pipeline state and job list with summary (name, stage, status, duration).
| Name | Required | Description | Default |
|---|---|---|---|
| repo_path | No | Absolute local clone path; resolves project and MR from current branch. | |
| project_id | No | Numeric ID or group/repo path on GitLab. | |
| pipeline_id | No | ||
| merge_request_iid | No | Merge request IID. Omit with repo_path to resolve from current branch. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as read-only and non-destructive. The description adds value by specifying the return content (pipeline state and job list with summary fields), providing behavioral context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no redundant words. It is front-loaded with the verb 'Returns' and directly states the output. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is adequate for a simple query tool but lacks guidance on how parameters interact (e.g., using pipeline_id alone vs. repo_path with merge_request_iid). No output schema is provided, so the agent cannot verify the full response structure beyond the summary fields.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 75% (3 of 4 parameters described). The tool description does not add any additional parameter semantics beyond what the schema already provides. Baseline 3 is appropriate because the schema carries most of the burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns pipeline state and job list with specific summary fields (name, stage, status, duration). It distinguishes from siblings like gitlab_control_pipeline (which mutates) and gitlab_list_pipelines (which returns a list without job details).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives. Does not mention prerequisites, required parameter combinations, or when not to use it. The description only states what it returns.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gitlab_list_pipelinesList pipelinesARead-only
Lists recent project pipelines, filtering by ref (branch/tag), MR, or status.
| Name | Required | Description | Default |
|---|---|---|---|
| ref | No | Branch ou tag (ex.: main, feature/foo). | |
| status | No | Filter by pipeline status. | |
| per_page | No | ||
| repo_path | No | Absolute local clone path; resolves project and MR from current branch. | |
| project_id | No | Numeric ID or group/repo path on GitLab. | |
| merge_request_iid | No | Merge request IID. Omit with repo_path to resolve from current branch. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the description's 'lists' is consistent. It adds the 'recent' qualifier, which is useful behavioral context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, no waste, front-loaded with key action and filters. Very concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a listing tool with 6 parameters and no output schema, the description coveres core functionality and main filters. Could clarify that at least one identifier is needed, but overall complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is high (83%), so baseline is 3. The description adds value by summarizing the three main filter categories (ref, MR, status) which groups parameters meaningfully.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists project pipelines with filtering options (ref, MR, status). It distinguishes from siblings like gitlab_get_pipeline (single pipeline) and gitlab_control_pipeline (control).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for listing with filters but does not explicitly say when to use this vs alternatives like gitlab_get_pipeline. No exclusions or when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gitlab_manage_merge_requestsManage merge requestsC
List, create, update, approve, merge, close, reopen, draft/ready, or comment on merge requests.
| Name | Required | Description | Default |
|---|---|---|---|
| sha | No | Expected source branch SHA (GitLab merge validation). | |
| state | No | Filter for list action. | |
| title | No | Title (create/update). | |
| action | Yes | ||
| labels | No | Comma-separated labels (create/update). | |
| squash | No | Squash commits when merging. | |
| comment | No | Comment body (comment action). | |
| repo_path | No | Absolute local clone path; resolves project and MR from current branch. | |
| project_id | No | Numeric ID or group/repo path on GitLab. | |
| description | No | Description (create/update). | |
| list_per_page | No | ||
| source_branch | No | Filter for list or branch for create. | |
| target_branch | No | Target branch for create (default: project default_branch). | |
| merge_request_iid | No | Merge request IID. Omit with repo_path to resolve from current branch. | |
| merge_commit_message | No | Merge commit message. | |
| remove_source_branch | No | Remove branch after merge (create/update/merge). | |
| squash_commit_message | No | Squash commit message. | |
| merge_when_pipeline_succeeds | No | Schedule merge when pipeline succeeds. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false and destructiveHint=false, but the description adds little behavioral context beyond listing actions. It does not disclose permission requirements, side effects of actions like merge or close, or any rate limits. The description lacks detail that would help an agent understand behavior beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short (one sentence) and front-loads the actions, but it is merely a list without any structuring or explanation. It could be improved by grouping actions or mentioning typical workflows, but it is not overly verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 18 parameters, no output schema, and a wide range of actions, the description is incomplete. It does not explain return values, error conditions, or action-specific parameter requirements. The agent would need to consult the schema heavily.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 89%, so most parameters already have descriptions in the schema. The description does not add any parameter-level semantics; it only lists the available actions. Baseline of 3 is appropriate since schema handles the burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool manages merge requests with a list of specific actions (list, create, update, approve, merge, close, etc.), which distinguishes it from sibling tools that are more narrowly focused (e.g., gitlab_get_merge_request). However, it could be more precise about the exact resource (GitLab merge requests).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. There are siblings like gitlab_get_merge_request for reading a single MR, but the description does not mention trade-offs or exclusions. The agent must infer usage from the action list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gitlab_prepare_reviewPrepare review folder (worktree + install)A
Creates a worktree from local repo (repo_path) or shallow HTTPS clone with token. Runs npm ci or composer install by default.
| Name | Required | Description | Default |
|---|---|---|---|
| repo_path | No | Absolute local clone path; resolves project and MR from current branch. | |
| project_id | No | Numeric ID or group/repo path on GitLab. | |
| install_command | No | Shell command at worktree root (e.g. npm ci). Omit to auto-detect. | |
| merge_request_iid | No | Merge request IID. Omit with repo_path to resolve from current branch. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false and destructiveHint=false. The description adds context about two modes (local repo or HTTPS clone) and default install commands, but does not disclose potential side effects (e.g., disk space usage) or error conditions (e.g., missing token).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence front-loads the core action and includes key details (worktree creation, install command). No wasted words; excellent conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description should explain return values or success indicators, but it does not. However, the parameter descriptions and annotations are rich, and the behavior is mostly clear for a preparation tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema has 100% description coverage, so the baseline is 3. The description summarizes the workflow but does not add significant meaning beyond the parameter descriptions already provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool creates a worktree and runs install commands, but it does not explicitly differentiate itself from sibling tools like gitlab_get_merge_request or gitlab_control_pipeline, which have distinct purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives such as gitlab_get_mr_context or gitlab_resolve_context. The description implies usage for setting up a review environment but does not state when not to use it or mention prerequisites like token availability.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gitlab_resolve_contextResolve local GitLab contextARead-only
Discovers project_id, current branch, and merge_request_iid from repo_path. Use before other tools when working in a local clone.
| Name | Required | Description | Default |
|---|---|---|---|
| repo_path | Yes | Absolute path to local clone. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, destructiveHint, and openWorldHint. The description adds value by specifying exactly what is discovered (project_id, branch, MR iid) and the need to use it as a prerequisite, which is beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description consists of two concise, front-loaded sentences with no extraneous information. Every word serves a purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter, read-only discovery tool with no output schema, the description fully explains what it does (discovers three items), its input (repo_path), and its usage context (before other tools in a local clone). It is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a clear description of repo_path. The tool description adds usage context but no additional parameter semantics beyond what the schema already provides, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool discovers project_id, current branch, and merge_request_iid from repo_path. It uses a specific verb ('Discovers') and resource ('local GitLab context'), and it differentiates from siblings by emphasizing the local clone aspect.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly advises using this tool before other tools when working in a local clone. While it doesn't mention when not to use it, the context is clear and it provides a practical sequence hint.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gitlab_search_projectsSearch GitLab projectsARead-only
Lists projects accessible by the token, with optional name or path filter.
| Name | Required | Description | Default |
|---|---|---|---|
| search | No | Search term (name or path). | |
| per_page | No | ||
| membership | No | When true, only projects where the user is a member. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds that projects are accessible by the token, but does not disclose pagination behavior, effects of omitting search, or default membership. Adds moderate context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence that immediately states the action and scope. No unnecessary words. Front-loaded and efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description omits default values for membership and per_page, pagination behavior, and return format. For a simple list tool, it covers the core but misses details that aid full understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description's 'optional name or path filter' redundantly echoes the search parameter description. It adds no meaning for membership or per_page beyond the schema. With 67% schema coverage, baseline is 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly specifies the tool lists projects accessible by the token with an optional name or path filter. It uses a specific verb ('Lists') and resource ('projects'), and no sibling tool shares this exact function.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or alternatives are provided. The description implies use for searching projects by name/path, but does not contrast with siblings like gitlab_get_file or gitlab_manage_merge_requests. Usage is implied but not guided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
15 tool updates
v0.3.1- First observed
gitlab_add_mr_inline_comment - First observed
gitlab_compare - First observed
gitlab_control_pipeline - First observed
gitlab_get_file - First observed
gitlab_get_job_trace - First observed
gitlab_get_merge_request - First observed
gitlab_get_mr_context - First observed
gitlab_get_mr_discussions - First observed
gitlab_get_mr_merge_status - First observed
gitlab_get_pipeline - First observed
gitlab_list_pipelines - First observed
gitlab_manage_merge_requests - First observed
gitlab_prepare_review - First observed
gitlab_resolve_context - First observed
gitlab_search_projects
TDQS
Each tool has a clearly distinct purpose. Even related MR tools (get_merge_request, get_mr_context, get_mr_discussions, get_mr_merge_status) are well-differentiated by their descriptions and scope.
All tools follow the consistent pattern 'gitlab_verb_noun' in snake_case, with verbs like get, list, add, control, manage, prepare, resolve, search. No mixing of conventions.
With 15 tools, the set is well-scoped for a GitLab utilities server covering MR, pipeline, file, and project operations. Neither too sparse nor too overwhelming.
The tool surface covers core MR and pipeline workflows, file retrieval, comparison, and local repository setup. Minor gaps like lack of explicit pipeline creation or branch listing are acceptable for the domain.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Go MCP server for GitLab: 2 dynamic tools reach 1000+ REST/GraphQL actions. Free/CE, no paid tier.
GitLab MCP — wraps the GitLab REST API v4 (BYO API key)
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceMCP server for the GitLab REST API providing tools to manage projects, merge requests, pipelines, CI/CD variables, approvals, issues, and code reviews.6MIT
- AlicenseCqualityAmaintenanceA production-ready MCP server for GitLab enabling AI assistants to read and manage GitLab projects, merge requests, issues, pipelines, wikis, releases, and more through a unified interface.10030210MIT
- AlicenseNot gradedqualityBmaintenanceAn MCP server that enables AI agents to perform automated code reviews on GitLab merge requests, including fetching details, reading diffs, posting inline comments, managing labels, and approving or unapproving MRs.302MIT
- FlicenseAqualityBmaintenanceMCP server for GitLab that enables AI assistants to manage CI pipelines, job logs, repositories, branches, merge requests, and commits via the GitLab REST API.20-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/godrix/mcp-gitlab-utils'
If you have feedback or need assistance with the MCP directory API, please join our Discord server