gitlab mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| GITLAB_API_URL | No | Your GitLab API URL. Defaults to https://gitlab.com/api/v4 | https://gitlab.com/api/v4 |
| GITLAB_PERSONAL_ACCESS_TOKEN | Yes | Your GitLab personal access token. |
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 | {
"listChanged": true
} |
| prompts | {
"listChanged": true
} |
| resources | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_merge_request_approval_stateA | Get merge request approval details including approvers. Inspect approval rules and approvers before merging. Use |
| search_repositoriesA | Search for GitLab projects. If the identifier is known, use a typed get or list tool. |
| get_file_contentsC | Get contents of a file or directory from a GitLab project. |
| create_issueB | Create a new issue. Open a new issue. Use |
| create_merge_requestA | Create a new merge request. Open a merge request from an existing source branch to a target. Use |
| get_branchA | Get branch details (commit, protection status). To find resources, use the matching list or search tool. |
| list_branchesA | List branches in project with search filter. For one known resource, use the matching get tool. |
| get_merge_requestA | Get details of a merge request (merge_request_iid or source_branch required). Set include_summaries=true for deployment/commit/approval summaries. To find resources, use the matching list or search tool. |
| get_merge_request_diffsA | Get the changes/diffs of a merge request (merge_request_iid or source_branch required). To find resources, use the matching list or search tool. |
| list_merge_request_changed_filesA | List changed file paths in a merge request without diff content (merge_request_iid or source_branch required). |
| list_merge_request_diffsA | List merge request diffs with pagination (merge_request_iid or source_branch required). For one known resource, use the matching get tool. |
| get_merge_request_file_diffA | Get diffs for specific files from a merge request (merge_request_iid or source_branch required). |
| update_merge_requestA | Update a merge request (merge_request_iid or source_branch required). Use the create tool for new resources and a note tool for comments. |
| create_merge_request_threadA | Create a new thread on a merge request. Start a review thread. Use |
| resolve_merge_request_threadA | Resolve a thread on a merge request. Mark an existing review thread resolved. Use |
| mr_discussionsA | List discussion items for a merge request. List complete discussion threads. Use |
| get_merge_request_discussionA | Get a single discussion item for a merge request. Fetch one discussion by id. Use |
| get_merge_request_noteA | Get a specific note for a merge request. Fetch one note by id. Use |
| get_merge_request_notesA | List notes for a merge request. List flat notes. Use |
| create_issue_noteA | Add a note to an issue, optionally replying to a discussion thread. Add a note to an existing issue, optionally as a reply. Use |
| list_issuesA | List issues (default: created by current user; use scope='all' for all). Use this for issue management: list GitLab issues, optionally scoped with |
| my_issuesA | List issues assigned to the authenticated user. Use this for issue management: list issues assigned to the authenticated user. Use |
| get_issueA | Get details of a specific issue. Returns the issue with a slim nested milestone by default; set full_response=true for the complete milestone object. Use this for issue management: inspect one issue. Use |
| update_issueA | Update an issue. Returns a slim confirmation by default; set full_response=true for the complete updated issue object. Change fields on an existing issue. Use |
| update_issue_description_patchB | Apply a patch (search/replace or unified diff) to an issue description. Reduces token usage by allowing small changes without sending the full description. Supports dry_run to preview changes and create_note to summarize updates. |
| list_issue_discussionsA | List discussions for an issue. List threaded discussions for an issue. Use |
| get_projectB | Get details of a specific project. To find resources, use the matching list or search tool. |
| list_projectsA | List projects accessible by the current user. For one known resource, use the matching get tool. |
| list_project_membersA | List members of a GitLab project. Search project members by name or username. Use |
| list_labelsB | List labels for a project. For one known resource, use the matching get tool. |
| get_repository_treeC | List files and directories in a repository. |
| list_merge_requestsA | List merge requests (without project_id: user's MRs; with project_id: project MRs). For one known resource, use the matching get tool. |
| whoamiA | Get current authenticated user details. Requires classic read_user or fine-grained User:Read. Use |
| list_commitsB | List repository commits with filtering options. For one known resource, use the matching get tool. |
| get_commitB | Get details of a specific commit. To find resources, use the matching list or search tool. |
| get_commit_diffA | Get changes/diffs of a specific commit. Return the file diffs for one commit. Use |
| get_file_blameA | Get git blame for a file at a given ref. Each entry maps a contiguous range of source lines to the commit that last changed them (id, author, authored_date, message). Use range_start/range_end to limit blame to specific lines. |
| health_checkA | Verify server status and authentication. Always reports the MCP server version (mcp_server_version). When authenticated, also reports the GitLab instance version from GET /api/v4/version (version, revision, enterprise). Version lookup failures do not fail the health check — those fields are omitted. |
| discover_toolsA | Discover and activate additional tool categories for this session. Available categories: core, merge_requests, issues, repositories, branches, projects, labels, ci, groups, pipelines, milestones, wiki, releases, tags, snippets, users, workitems, webhooks, search, variables, dependency_proxy, vulnerabilities, orbit. Already-active categories are listed in the response. Explicit-only toolsets are omitted; list them in GITLAB_TOOLSETS. |
| helpA | Return a short GitLab workflow guide. Omit topic for the overview and topic list. Use this for a short workflow guide (code-review, pipelines, issues, token-saving). Omit topic for the overview. Detailed GitLab operations stay on the typed tools. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| review_merge_request | Review a merge request's diff in batches and leave threaded comments. |
| triage_pipeline_failure | Find the failing job in a pipeline and pull its log tail for diagnosis. |
| triage_vulnerabilities | List a project's open vulnerabilities and propose a remediation priority order. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| auth-setup | Local token auth and browser OAuth. |
| toolsets | How the enabled toolset list is chosen. |
| permission-modes | How permission mode limits tool calls. |
TDQS
Scored across 40 tools
The set has many closely related merge-request tools (note vs notes vs discussions, diffs vs changed files vs file diff vs list diffs), which creates real overlap. Descriptions usually clarify the intended distinction, but several references point to tools not present in the active surface, which can still mislead selection.
Most tools follow a clear snake_case verb_noun pattern such as get_issue, create_merge_request, and list_branches. There are a few notable deviations like mr_discussions, whoami, help, and health_check, but the overall convention is still readable.
At 40 tools, the set is heavy and includes many granular merge-request diff, note, and discussion variants. GitLab is a broad domain, but this surface feels over-expanded for a coherent single toolset and would benefit from consolidation.
Core read/create/update operations are present for issues, merge requests, repositories, branches, and projects. However, notable lifecycle operations are missing or only referenced indirectly, such as deleting/closing issues, merging MRs, and approving MRs, leaving some workflow dead ends.