@zereight/mcp-gitlab
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| SSE | No | Set to 'true' to enable Server-Sent Events transport. | false |
| HOST | No | Server host address. | 127.0.0.1 |
| PORT | No | Server port. | 3002 |
| NO_PROXY | No | Comma-separated list of hosts bypassing proxy. | |
| HTTP_PROXY | No | HTTP proxy server URL. | |
| HTTPS_PROXY | No | HTTPS proxy server URL. | |
| GITLAB_TOOLS | No | Comma-separated list of individual tool names to add on top of enabled toolsets. | |
| MAX_SESSIONS | No | Maximum number of concurrent sessions allowed. | 1000 |
| USE_PIPELINE | No | Set to 'true' to ensure pipeline-related tools are included. | false |
| USE_MILESTONE | No | Set to 'true' to ensure milestone-related tools are included. | false |
| GITLAB_API_URL | No | Your GitLab API URL. | https://gitlab.com/api/v4 |
| GITLAB_TOOLSETS | No | Comma-separated list of toolset IDs to enable. Set to 'all' for all toolsets. | |
| STREAMABLE_HTTP | No | Set to 'true' to enable Streamable HTTP transport. | false |
| USE_GITLAB_WIKI | No | Set to 'true' to ensure wiki-related tools are included. | false |
| GITLAB_USE_OAUTH | No | Set to 'true' to enable OAuth2 authentication instead of personal access token. | false |
| GITLAB_PROJECT_ID | No | Default project ID. If set, overwrites this value when making an API request. | |
| REMOTE_AUTHORIZATION | No | When set to 'true', enables remote per-session authorization via HTTP headers. | false |
| GITLAB_READ_ONLY_MODE | No | When set to 'true', restricts the server to only expose read-only operations. | false |
| GITLAB_OAUTH_CLIENT_ID | No | The Client ID from your GitLab OAuth application. Required when using OAuth. | |
| GITLAB_AUTH_COOKIE_PATH | No | Path to an authentication cookie file. | |
| MAX_REQUESTS_PER_MINUTE | No | Rate limit per session in requests per minute. | 60 |
| SESSION_TIMEOUT_SECONDS | No | Session auth token timeout in seconds. | 3600 |
| GITLAB_DENIED_TOOLS_REGEX | No | Regular expression to exclude matching tools. | |
| GITLAB_OAUTH_REDIRECT_URI | No | The OAuth callback URL. | http://127.0.0.1:8888/callback |
| GITLAB_REPO_FILE_ENCODING | No | Encoding for repository file create/update. Use 'text' or 'base64'. | |
| GITLAB_ALLOWED_PROJECT_IDS | No | Optional comma-separated list of allowed project IDs. | |
| GITLAB_OAUTH_CLIENT_SECRET | No | The Client Secret from your GitLab OAuth application. Required only for Confidential applications. | |
| GITLAB_COMMIT_FILES_PER_PAGE | No | Number of files per page for commit diffs. | |
| GITLAB_PERSONAL_ACCESS_TOKEN | No | Your GitLab personal access token. Required for standard authentication (not OAuth). |
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 | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| merge_merge_requestC | Merge a merge request in a GitLab project |
| approve_merge_requestC | Approve a merge request. Requires appropriate permissions. |
| unapprove_merge_requestA | Unapprove a previously approved merge request. Requires appropriate permissions. |
| get_merge_request_approval_stateB | Get merge request approval details including approvers (uses approval_state when available, falls back to approvals endpoint) |
| get_merge_request_conflictsA | Get the conflicts of a merge request in a GitLab project |
| create_or_update_fileC | Create or update a single file in a GitLab project |
| search_repositoriesC | Search for GitLab projects |
| create_repositoryB | Create a new GitLab project |
| get_file_contentsC | Get the contents of a file or directory from a GitLab project |
| push_filesB | Push multiple files to a GitLab project in a single commit |
| create_issueB | Create a new issue in a GitLab project |
| create_merge_requestB | Create a new merge request in a GitLab project |
| fork_repositoryB | Fork a GitLab project to your account or specified namespace |
| create_branchB | Create a new branch in a GitLab project |
| get_merge_requestA | Get details of a merge request with compact deployment, commit addition, and approval summaries (Either mergeRequestIid or branchName must be provided) |
| get_merge_request_diffsB | Get the changes/diffs of a merge request (Either mergeRequestIid or branchName must be provided) |
| list_merge_request_diffsC | List merge request diffs with pagination support (Either mergeRequestIid or branchName must be provided) |
| list_merge_request_versionsC | List all versions of a merge request |
| get_merge_request_versionC | Get a specific version of a merge request |
| get_branch_diffsB | Get the changes/diffs between two branches or commits in a GitLab project |
| update_merge_requestC | Update a merge request (Either mergeRequestIid or branchName must be provided) |
| create_noteC | Create a new note (comment) to an issue or merge request |
| create_merge_request_threadC | Create a new thread on a merge request |
| resolve_merge_request_threadC | Resolve a thread on a merge request |
| mr_discussionsC | List discussion items for a merge request |
| delete_merge_request_discussion_noteC | Delete a discussion note on a merge request |
| update_merge_request_discussion_noteC | Update a discussion note on a merge request |
| create_merge_request_discussion_noteB | Add a new discussion note to an existing merge request thread |
| create_merge_request_noteC | Add a new note to a merge request |
| delete_merge_request_noteC | Delete an existing merge request note |
| get_merge_request_noteA | Get a specific note for a merge request |
| get_merge_request_notesB | List notes for a merge request |
| update_merge_request_noteC | Modify an existing merge request note |
| get_draft_noteB | Get a single draft note from a merge request |
| list_draft_notesC | List draft notes for a merge request |
| create_draft_noteC | Create a draft note for a merge request |
| update_draft_noteC | Update an existing draft note |
| delete_draft_noteB | Delete a draft note |
| publish_draft_noteC | Publish a single draft note |
| bulk_publish_draft_notesB | Publish all draft notes for a merge request |
| update_issue_noteC | Modify an existing issue thread note |
| create_issue_noteB | Add a new note to an existing issue thread |
| list_issuesA | List issues (default: created by current user only; use scope='all' for all accessible issues) |
| my_issuesA | List issues assigned to the authenticated user (defaults to open issues) |
| get_issueA | Get details of a specific issue in a GitLab project |
| update_issueC | Update an issue in a GitLab project |
| delete_issueA | Delete an issue from a GitLab project |
| list_issue_linksA | List all issue links for a specific issue |
| list_issue_discussionsB | List discussions for an issue in a GitLab project |
| get_issue_linkC | Get a specific issue link |
| create_issue_linkB | Create an issue link between two issues |
| delete_issue_linkC | Delete an issue link |
| list_namespacesB | List all namespaces available to the current user |
| get_namespaceB | Get details of a namespace by ID or path |
| verify_namespaceC | Verify if a namespace path exists |
| get_projectC | Get details of a specific project |
| list_projectsC | List projects accessible by the current user |
| list_project_membersB | List members of a GitLab project |
| list_labelsB | List labels for a project |
| get_labelC | Get a single label from a project |
| create_labelA | Create a new label in a project |
| update_labelB | Update an existing label in a project |
| delete_labelB | Delete a label from a project |
| list_group_projectsC | List projects in a GitLab group with filtering options |
| list_wiki_pagesC | List wiki pages in a GitLab project |
| get_wiki_pageB | Get details of a specific wiki page |
| create_wiki_pageB | Create a new wiki page in a GitLab project |
| update_wiki_pageA | Update an existing wiki page in a GitLab project |
| delete_wiki_pageB | Delete a wiki page from a GitLab project |
| get_repository_treeC | Get the repository tree for a GitLab project (list files and directories) |
| list_pipelinesA | List pipelines in a GitLab project with filtering options |
| get_pipelineB | Get details of a specific pipeline in a GitLab project |
| list_deploymentsC | List deployments in a GitLab project with filtering options |
| get_deploymentB | Get details of a specific deployment in a GitLab project |
| list_environmentsC | List environments in a GitLab project |
| get_environmentA | Get details of a specific environment in a GitLab project |
| list_pipeline_jobsC | List all jobs in a specific pipeline |
| list_pipeline_trigger_jobsA | List all trigger jobs (bridges) in a specific pipeline that trigger downstream pipelines |
| get_pipeline_jobC | Get details of a GitLab pipeline job number |
| get_pipeline_job_outputA | Get the output/trace of a GitLab pipeline job with optional pagination to limit context window usage |
| create_pipelineB | Create a new pipeline for a branch or tag |
| retry_pipelineA | Retry a failed or canceled pipeline |
| cancel_pipelineB | Cancel a running pipeline |
| play_pipeline_jobC | Run a manual pipeline job |
| retry_pipeline_jobB | Retry a failed or canceled pipeline job |
| cancel_pipeline_jobB | Cancel a running pipeline job |
| list_job_artifactsA | List artifact files in a job's artifacts archive. Returns file names, paths, types, and sizes. |
| download_job_artifactsA | Download the entire artifact archive (zip) for a job to a local path. Returns the saved file path. |
| get_job_artifact_fileA | Get the content of a single file from a job's artifacts by its path within the archive |
| list_merge_requestsA | List merge requests. Without project_id, lists MRs assigned to the authenticated user by default (use scope='all' for all accessible MRs). With project_id, lists MRs for that specific project. |
| list_milestonesA | List milestones in a GitLab project with filtering options |
| get_milestoneB | Get details of a specific milestone |
| create_milestoneB | Create a new milestone in a GitLab project |
| edit_milestoneC | Edit an existing milestone in a GitLab project |
| delete_milestoneA | Delete a milestone from a GitLab project |
| get_milestone_issueB | Get issues associated with a specific milestone |
| get_milestone_merge_requestsA | Get merge requests associated with a specific milestone |
| promote_milestoneC | Promote a milestone to the next stage |
| get_milestone_burndown_eventsC | Get burndown events for a specific milestone |
| get_usersA | Get GitLab user details by usernames |
| list_commitsC | List repository commits with filtering options |
| get_commitC | Get details of a specific commit |
| get_commit_diffC | Get changes/diffs of a specific commit |
| list_group_iterationsA | List group iterations with filtering options |
| upload_markdownB | Upload a file to a GitLab project for use in markdown content |
| download_attachmentA | Download an uploaded file from a GitLab project by secret and filename. Image files (png, jpg, gif, webp, svg, bmp, ico) are returned inline as base64 image content so the AI can view them directly. Non-image files are saved to disk. Use local_path to force saving image files to disk instead. |
| list_eventsB | List all events for the currently authenticated user. Note: before/after parameters accept date format YYYY-MM-DD only |
| get_project_eventsB | List all visible events for a specified project. Note: before/after parameters accept date format YYYY-MM-DD only |
| list_releasesC | List all releases for a project |
| get_releaseC | Get a release by tag name |
| create_releaseC | Create a new release in a GitLab project |
| update_releaseC | Update an existing release in a GitLab project |
| delete_releaseA | Delete a release from a GitLab project (does not delete the associated tag) |
| create_release_evidenceB | Create release evidence for an existing release (GitLab Premium/Ultimate only) |
| download_release_assetC | Download a release asset file by direct asset path |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 115 tools
While most tools target specific resources, several boundaries are unclear: create_note overlaps with create_issue_note and create_merge_request_note, get_merge_request_diffs overlaps with list_merge_request_diffs, and get_file_contents overlaps with get_repository_tree for directory listings. The note/discussion/thread/draft family and list_issues vs my_issues also create real misselection risk.
The core verb_noun pattern is recognizable and mostly readable, but there are notable deviations: mr_discussions and my_issues don't follow the verb pattern, get_merge_request_notes is actually a list operation, create_or_update_file bundles two verbs, and bulk_publish_draft_notes uses an adverb prefix. These inconsistencies make the set feel mixed rather than systematic.
At 115 tools this is an extreme tool count for an agent-facing server, far beyond the typical well-scoped 3-15 range. Even for GitLab's broad domain, the surface is overwhelming and selection cost is high.
The server covers a remarkably wide surface: MRs, issues, pipelines, releases, milestones, wiki, labels, environments, and file operations. However, several lifecycle gaps remain: no delete_file, delete_branch, delete_project, or delete_merge_request, and environments/deployments are read-only. These are notable dead ends for common workflows.