gitlab-ci-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| GITLAB_URL | Yes | Base URL of the GitLab instance, e.g., https://gitlab.example.com | |
| GITLAB_TOKEN | Yes | Personal Access Token with 'api' scope for authentication | |
| GITLAB_SSL_VERIFY | No | Enable or disable SSL verification; set to 'false' to skip verification | true |
| GITLAB_PROJECT_PATH | Yes | Default project path, e.g., my-org/my-repo | |
| GITLAB_NO_PROXY_DOMAINS | No | Comma-separated domains to exclude from proxy settings, e.g., .corp.example.com,gitlab.internal |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| gitlab_list_branchesA | List branches of a project, optionally filtered by substring. Includes Examples:
- "List all branches with 'release' in name" → |
| gitlab_list_tagsA | List tags of a project, newest first. Useful for release-note generation or checking the last shipped version. Examples:
- "What was the last release tag" → default call, take the first item
- "All v2.x releases" → |
| gitlab_compare_branchesA | Compare two branches — returns up to 30 commits and the list of changed files. Use for "what's in Examples:
- "What's new in release/1.5 vs master" → |
| gitlab_list_merge_requestsA | List merge requests of a project, optionally filtered by state. Examples:
- "What MRs are open right now" → default (state='opened')
- "What merged last week" → |
| gitlab_get_merge_requestA | Get full information about a merge request by internal ID ( Includes state, branches, author, assignees, reviewers, labels, conflict status, description and timestamps. Examples:
- "Show me the description and state of !42" → |
| gitlab_get_merge_request_changesA | List changed files in a merge request with truncated diffs (2KB per file). Useful for code-review-style queries ("what changed in !42?"). Diffs beyond
2KB are truncated — fetch the raw file via Examples:
- "What did MR !42 change" → |
| gitlab_create_merge_requestA | Create a merge request from Not idempotent: creates a new MR each call. Check existing MRs first
via Examples:
- "Open an MR from feature/login to master" → |
| gitlab_merge_mrA | Perform the actual merge if GitLab reports the MR can be merged. Destructive: writes to the target branch. Checks Examples:
- "Merge !42" → |
| gitlab_list_pipelinesA | List recent pipelines of a project, newest first. Use for triage ("show failed pipelines on master"), release readiness checks, or feeding pipeline IDs into follow-up calls. Read-only and idempotent. Returns Examples:
- "Show failed pipelines on master" → |
| gitlab_get_pipelineA | Get a single pipeline with full timing details. Useful right after Examples:
- "Why was pipeline 123 slow" → check |
| gitlab_get_pipeline_jobsA | List jobs of a pipeline with stage, status, duration and web URL. Use after noticing a failed pipeline to drill down into which specific job
broke and fetch its log via Examples:
- "What jobs are in pipeline 123" → |
| gitlab_get_job_logA | Fetch the trace/log of a job, with optional regex filter. Two modes:
Examples:
- "Why did job 789 fail" → default tail=100, look at the end of the log
- "Show me the first stage output of job 789" → |
| gitlab_trigger_pipelineA | Create a new pipeline on the given ref, optionally with CI variables. Not idempotent: each call creates a new pipeline. Consumes minutes on your runners — avoid calling in loops. Examples:
- "Run the pipeline on master" → default ( |
| gitlab_retry_pipelineA | Retry all failed jobs of an existing pipeline. Creates new job runs (new history entries). Safe to call when the pipeline has at least one failed/canceled job; has no effect if everything already passed. Examples:
- "Retry the failed jobs in pipeline 123" → |
| gitlab_cancel_pipelineA | Cancel a running pipeline. In-flight jobs will be interrupted. Destructive for in-progress work. Cancelling an already-finished pipeline is a no-op. Examples:
- "Pipeline 123 is stuck, cancel it" → |
| gitlab_pipeline_healthA | Aggregate success rate over 7 and 30 days with a trend indicator. Great for stand-ups and on-call hand-offs. Returns success rate %, totals,
last-10 statuses and a trend ( Emits progress via the MCP Context ( Examples:
- "How stable is master" → default ( |
| gitlab_get_fileA | Read a text file from the repository, truncated to 500 lines. For binaries, gets decoded as UTF-8 with errors replaced — you will likely get garbage; use for text content only. Examples:
- "Show me .gitlab-ci.yml on master" → |
| gitlab_list_repository_treeA | List files and directories at a given path in the repository. Examples:
- "Show top-level files" → default call
- "All .py files recursively" → |
| gitlab_project_infoA | Return basic metadata about a project: ID, default branch, visibility, counts. Examples:
- "What's the project ID and default branch" → default call
- "Is this repo public or private" → look at |
| gitlab_list_schedulesA | List all CI/CD schedules of a project. Variable keys whose name hints at a secret ( Examples:
- "What schedules do we have and are they all active" → default call
- Don't use to run a schedule now — use |
| gitlab_create_scheduleA | Create a new CI/CD schedule with the given cron and variables. Not idempotent: duplicate calls create duplicate schedules with auto-incrementing IDs. Examples:
- "Schedule a nightly build on master at 02:00 Europe/Berlin" →
|
| gitlab_update_scheduleA | Update an existing schedule. Only provided fields change. Destructive when Examples:
- "Deactivate schedule 42" → |
| gitlab_delete_scheduleA | Delete a schedule by ID. Cannot be undone. Examples:
- "Delete schedule 42" → |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| Project Info | Metadata of the default project (GITLAB_PROJECT_PATH). |
| CI Config | Contents of .gitlab-ci.yml on the default branch. |
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/mshegolev/gitlab-ci-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server