GitLab MCP Server
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| NPM_CONFIG_TOKEN | Yes | Your GitLab personal access token used to authenticate with the GitLab API. Required with scopes: api, read_user, read_repository |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {} |
| logging | {} |
| prompts | {} |
| resources | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_projectsA | List GitLab projects with minimal info by default (to reduce token usage from 40k+ to much less). Use simple=false for full project details when needed. |
| get_projectC | Get details of a specific project |
| upload_project_fileA | Upload a file to a GitLab project. Returns a markdown string and URL that can be embedded in MR comments, issue descriptions, etc. |
| list_project_uploadsB | List files that have been uploaded to a project |
| list_project_labelsA | List all labels available in a project. Useful for discovering valid label names before adding them to issues or merge requests. |
| list_issuesC | List issues in a project |
| get_issueB | Get details of a specific issue |
| create_issueC | Create a new issue |
| list_merge_requestsC | List merge requests in a project |
| get_merge_requestA | Get details of a merge request. Either merge_request_iid or source_branch must be provided. |
| get_merge_request_diffsB | Get the changes/diffs of a merge request. Either merge_request_iid or source_branch must be provided. |
| list_merge_request_diffsA | List merge request diffs with pagination support. Either merge_request_iid or source_branch must be provided. |
| get_branch_diffsB | Get the changes/diffs between two branches or commits in a GitLab project |
| create_merge_requestC | Create a new merge request |
| update_merge_requestA | Update an existing merge request. Either merge_request_iid or source_branch must be provided. |
| list_mr_notesA | List all notes (comments) on a merge request |
| list_mr_discussionsA | List discussions (threaded comments including inline code comments) on a merge request. Use unresolved_only=true to fetch only unresolved discussions (saves tokens). |
| create_mr_noteA | Add a new top-level comment to a merge request. Supports embedding images/files via attachments parameter. |
| create_mr_discussionA | Create a new discussion on a merge request. Can be a general discussion or an inline comment on the diff. Supports embedding images/files via attachments parameter. |
| reply_to_mr_discussionB | Reply to an existing discussion thread on a merge request |
| resolve_mr_discussionB | Mark a discussion on a merge request as resolved |
| unresolve_mr_discussionA | Mark a discussion on a merge request as unresolved |
| update_mr_discussion_noteB | Modify an existing merge request discussion note |
| create_mr_discussion_noteB | Add a new note to an existing merge request discussion thread |
| delete_mr_discussion_noteC | Delete a note from a merge request discussion |
| mark_mr_as_draftA | Mark a merge request as draft (work in progress, not ready for review) |
| mark_mr_as_readyA | Mark a merge request as ready (remove draft status, ready for review) |
| list_mr_templatesA | List available merge request description templates in a project |
| get_mr_templateB | Get a specific merge request description template by name |
| delete_mr_noteA | Delete a top-level note (comment) from a merge request |
| update_mr_noteA | Update the content of an existing top-level note (comment) on a merge request. Supports embedding images/files via attachments parameter. |
| update_mr_labelsA | Add or remove labels from a merge request. More convenient than update_merge_request for label-only changes. |
| get_mr_approvalsA | Get the approval status of a merge request, including who has approved, how many approvals are needed, and approval rules. |
| approve_mrB | Approve a merge request. The authenticated user must have permission to approve. |
| unapprove_mrB | Remove your approval from a merge request. |
| list_project_branchesB | List branches in a project |
| get_project_commitsB | List repository commits with filtering options |
| get_commitB | Get details of a specific commit |
| get_commit_diffB | Get changes/diffs of a specific commit |
| list_pipelinesB | List pipelines in a project |
| get_pipelineB | Get details of a specific pipeline |
| create_pipelineD | Create a new pipeline |
| retry_pipelineB | Retry a failed pipeline |
| cancel_pipelineB | Cancel a running pipeline |
| delete_pipelineC | Delete a pipeline |
| get_pipeline_variablesB | Get variables of a pipeline |
| list_pipeline_jobsB | List jobs in a pipeline |
| get_job_logsB | Get the log (trace) file of a specific job |
| get_job_traceB | Get job trace with options for partial logs, tail mode, and line limits |
| get_userA | Get current user information |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| review-mr | Review a merge request with full context including diffs, discussions, and approval status. Provides a structured analysis template. |
| analyze-pipeline-failure | Analyze a failed pipeline by examining job logs and identifying the root cause of failure. |
| summarize-mr-changes | Generate a summary of all changes in a merge request, suitable for release notes or team updates. |
| check-mr-readiness | Check if a merge request is ready to be merged by verifying approvals, resolved discussions, and pipeline status. |
| generate-release-notes | Generate release notes from merged merge requests in a project since a given date or tag. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| Current User | The currently authenticated GitLab user |
TDQS
Scored across 50 tools
Most tools are clearly separated by resource (projects, issues, MRs, pipelines, commits). However, there is some overlap between get_merge_request_diffs and list_merge_request_diffs, and between get_job_logs and get_job_trace, which could cause confusion.
The naming mostly follows a consistent verb_noun pattern (list_, get_, create_, update_, delete_). Minor deviations include mark_mr_as_draft/mark_mr_as_ready and approve_mr/unapprove_mr, which are still readable but slightly inconsistent with the dominant pattern.
50 tools is on the heavy side, but the server covers a broad GitLab domain (projects, issues, MRs, branches, commits, pipelines, users). The count is justified by the scope, though it borders on overwhelming and could benefit from consolidation.
The tool surface is quite comprehensive for GitLab workflows: project listing/creation, issue CRUD, MR lifecycle with discussions/approvals, pipelines, commits, and branches. Minor gaps include no project deletion/update, no issue update/delete, and no branch creation/deletion, but core workflows are well covered.