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 | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_merge_request_approval_stateA | Get merge request approval details including approvers. Use this to inspect approval rules and approvers before deciding whether a merge request can be merged; use |
| search_repositoriesA | Search for GitLab projects. If the identifier is known, use a typed get or list tool. Read-only; missing resources, denied access, and rate limits return errors. |
| get_file_contentsA | Get contents of a file or directory from a GitLab project. Read-only; missing resources, denied access, and rate limits return errors. |
| create_issueA | Create a new issue. Use this to open a new issue; use |
| create_merge_requestA | Create a new merge request. Use this to open a new merge request from an existing source branch to a target branch; use |
| get_branchA | Get branch details (commit, protection status). To find resources, use the matching list or search tool. Read-only; missing resources, denied access, and rate limits return errors. |
| list_branchesA | List branches in project with search filter. For one known resource, use the matching get tool. Read-only; missing resources, denied access, and rate limits return errors. |
| 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. Read-only; missing resources, denied access, and rate limits return errors. |
| 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. Read-only; missing resources, denied access, and rate limits return errors. |
| list_merge_request_changed_filesA | List changed file paths in a merge request without diff content (merge_request_iid or source_branch required). Read-only; missing resources, denied access, and rate limits return errors. |
| 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. Read-only; missing resources, denied access, and rate limits return errors. |
| get_merge_request_file_diffA | Get diffs for specific files from a merge request (merge_request_iid or source_branch required). Read-only; missing resources, denied access, and rate limits return errors. |
| 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. Changes GitLab data; needs permission and returns validation or conflict errors. |
| create_merge_request_threadA | Create a new thread on a merge request. Use this to start a review thread on a merge request; use |
| resolve_merge_request_threadA | Resolve a thread on a merge request. Use this to mark an existing merge request review thread resolved; use |
| mr_discussionsA | List discussion items for a merge request. Use this to list complete discussion threads for a merge request; use |
| get_merge_request_discussionA | Get a single discussion item for a merge request. Use this to fetch one known merge request discussion by discussion identifier; use |
| get_merge_request_noteA | Get a specific note for a merge request. Use this to fetch one known merge request note by note identifier; use |
| get_merge_request_notesA | List notes for a merge request. Use this to list flat notes on a merge request; use |
| create_issue_noteA | Add a note to an issue, optionally replying to a discussion thread. Use this to add a note to an existing issue, optionally as a reply to a discussion; 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's fields; use |
| update_issueA | Update an issue. Returns a slim confirmation by default; set full_response=true for the complete updated issue object. Use this to change fields on an existing issue; use |
| update_issue_description_patchA | 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. Use this for a targeted search/replace or unified-diff change to an issue description; use |
| list_issue_discussionsA | List discussions for an issue. Use this to inspect threaded discussions for an issue; use |
| get_projectA | Get details of a specific project. To find resources, use the matching list or search tool. Read-only; missing resources, denied access, and rate limits return errors. |
| list_projectsA | List projects accessible by the current user. For one known resource, use the matching get tool. Read-only; missing resources, denied access, and rate limits return errors. |
| list_project_membersA | List members of a GitLab project. Read-only; missing resources, denied access, and rate limits return errors. |
| list_labelsA | List labels for a project. For one known resource, use the matching get tool. Read-only; missing resources, denied access, and rate limits return errors. |
| get_repository_treeA | List files and directories in a repository. Read-only; missing resources, denied access, and rate limits return errors. |
| 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. Read-only; missing resources, denied access, and rate limits return errors. |
| whoamiA | Get current authenticated user details. Use this to identify the authenticated GitLab user; use |
| list_commitsA | List repository commits with filtering options. For one known resource, use the matching get tool. Read-only; missing resources, denied access, and rate limits return errors. |
| get_commitA | Get details of a specific commit. To find resources, use the matching list or search tool. Read-only; missing resources, denied access, and rate limits return errors. |
| get_commit_diffA | Get changes/diffs of a specific commit. Read-only; missing resources, denied access, and rate limits return errors. |
| 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. Use this to verify server connectivity and authentication before making GitLab requests; use |
| 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. Use this when a needed opt-in category is not currently exposed; omit |
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 |
|---|---|
No resources | |
TDQS
Scored across 39 tools
The set contains several overlapping clusters, especially merge request notes/discussions (get_merge_request_note, get_merge_request_notes, get_merge_request_discussion, mr_discussions) and diffs (get_merge_request_diffs, list_merge_request_diffs, get_merge_request_file_diff, list_merge_request_changed_files). Descriptions do cross-reference each other to reduce confusion, but the boundaries remain nuanced and an agent could easily misselect.
Most tools follow a clear snake_case verb_noun pattern (e.g., create_issue, list_merge_requests, get_commit_diff). A few deviations exist, such as whoami, my_issues, mr_discussions, and health_check, but overall the convention is readable and predictable.
With 39 exposed tools, the surface is much larger than the 3–15 range typically considered well-scoped. Many are highly granular, read-only variants (multiple diff and note getters) that inflate the count beyond what the core workflows require.
Core GitLab areas like issues, merge requests, projects, branches, commits, and files have read coverage plus some creation/update. However, key lifecycle operations are missing: no merge_merge_request, no branch or file creation/deletion, no project creation, no label management, and no CI/pipeline tools exposed. The discover_tools mechanism can activate more categories, but the current surface has notable gaps.