gitlab-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| MCP_HOST | No | HTTP/SSE bind address | 127.0.0.1 |
| MCP_PORT | No | HTTP/SSE port | 8000 |
| GITLAB_TOKEN | No | Personal Access Token (PRIVATE-TOKEN header) | |
| MCP_TRANSPORT | No | Transport protocol (stdio, http, sse) | stdio |
| GITLAB_BASE_URL | No | GitLab base URL | https://gitlab.com |
| GITLAB_PASSWORD | No | HTTP Basic password or PAT (used with GITLAB_USERNAME) | |
| GITLAB_USERNAME | No | HTTP Basic username (used with GITLAB_PASSWORD) | |
| GITLAB_MAX_PER_PAGE | No | Maximum page size | 100 |
| GITLAB_TIMEOUT_SECONDS | No | API timeout in seconds | 15 |
| GITLAB_DEFAULT_PER_PAGE | No | Default page size | 20 |
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
} |
| logging | {} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| extensions | {
"io.modelcontextprotocol/ui": {}
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_gitlab_connection_infoA | Report which GitLab host/base URL this MCP is configured to use (from env), plus API v4 URL, auth mode, and MCP server bind settings. Does not expose tokens or passwords. |
| list_projectsC | List projects visible to the token. |
| get_projectA | Get project details by id, path_with_namespace, or project web URL (same host as GITLAB_BASE_URL). |
| list_merge_requestsC | List merge requests for a project. |
| get_merge_requestC | Get merge request details from a project. |
| list_pipelinesB | List pipelines for a project. |
| get_pipelineC | Get pipeline details from a project. |
| get_job_traceA | Get plain-text CI job log (trace) for a project job (GET /projects/:id/jobs/:job_id/trace). |
| list_commitsC | List commits for a project. |
| get_commitC | Get commit details from a project. |
| compare_commitsB | Compare two refs (branch/tag/sha) in a project. |
| list_runnersC | List runners available to the current user (GET /runners). |
| list_all_runnersA | List all runners on the instance (GET /runners/all). Requires admin or auditor. |
| get_runnerA | Get details for a runner by ID (GET /runners/:id). |
| update_runnerC | Update runner settings (PUT /runners/:id). Prefer paused over active. |
| delete_runnerA | Delete a runner by ID (DELETE /runners/:id). |
| list_runner_jobsC | List jobs processed by a runner (GET /runners/:id/jobs). |
| list_runner_managersA | List runner managers (version, platform, system_id) for a runner (GET /runners/:id/managers). |
| list_project_runnersC | List runners available to a project (GET /projects/:id/runners). |
| assign_runner_to_projectB | Assign a project runner to a project (POST /projects/:id/runners). |
| unassign_runner_from_projectA | Unassign a runner from a project (DELETE /projects/:id/runners/:runner_id). |
| list_group_runnersC | List runners for a group (GET /groups/:id/runners). |
| create_runner_with_registration_tokenB | Register a runner with a registration token (POST /runners). May return 410 if legacy registration is disabled. |
| delete_runner_by_authentication_tokenA | Delete a runner using its authentication token (DELETE /runners with token). Does not use PRIVATE-TOKEN. |
| verify_runner_authenticationB | Verify runner credentials (POST /runners/verify). Uses the runner token only, not PRIVATE-TOKEN. |
| reset_instance_runner_registration_tokenB | Reset the instance runner registration token (admin). |
| reset_project_runner_registration_tokenB | Reset a project's runner registration token. |
| reset_group_runner_registration_tokenB | Reset a group's runner registration token. |
| reset_runner_authentication_token_by_runner_idA | Reset a runner authentication token using the runner ID and PRIVATE-TOKEN (POST /runners/:id/reset_authentication_token). |
| reset_runner_authentication_token_by_current_tokenB | Reset a runner authentication token using the current token (POST /runners/reset_authentication_token). |
| get_runner_job_router_discoveryC | Job Router discovery (GET /runners/router/discovery) using Runner-Token header. |
| summarize_bugfix_contributionC | Summarize bugfix contributors and most changed components. |
| generate_release_notesB | Generate customer-facing release notes from commits in a time range. |
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 33 tools
Each tool targets a distinct resource and action. The runner-related tools are clearly differentiated by scope (user, all, project, group) and operation (list, get, update, delete, assign, unassign, reset, verify). Even similar reset token tools specify their method (by runner ID vs. current token) in the name.
All tool names follow a consistent verb_noun pattern using snake_case, such as get_project, list_merge_requests, update_runner, and reset_runner_authentication_token_by_current_token. The naming is predictable and easy to navigate, despite some longer composite names.
With 33 tools, the server exceeds the 25-tool threshold for 'too many'. While GitLab has a broad API, the set includes a very large number of runner-specific endpoints (about 20 runner-related tools) plus two unusual analytics tools, making the overall surface feel overloaded and less focused.
The server is heavily read-oriented for core resources (projects, merge requests, pipelines, commits) and lacks create/update/delete operations for these. Runner management is comprehensive, but the overall GitLab domain is incomplete—agents cannot create a project, update or merge a merge request, or cancel a pipeline, leaving significant gaps.