gitlab-mcp-server
Provides structured access to GitLab projects, repositories, issues, merge requests, pipelines, releases, packages, approvals, and protected branches, with higher-level tools for project health, review risk, release notes, delivery status, and pipeline failures.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@gitlab-mcp-server list all issues assigned to me"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
GitLab MCP Server
gitlab-mcp-server is a Model Context Protocol server for GitLab.com and self-managed GitLab. It runs over stdio by default and also supports opt-in Streamable HTTP for local clients that need an HTTP endpoint.
It gives AI agents and developer tools structured access to GitLab projects, repositories, issues, merge requests, pipelines, releases, governance data, and higher-level delivery summaries. The server is read-only by default and uses explicit gates for write and destructive actions.
npm package: gitlab-mcp-cli
Repository: DevquasarX9/mcp-gitlab
Works with: Claude Code, Claude Desktop, Codex, Cursor, and other MCP clients
Why This Server
Safe defaults: read-only mode is the default, with separate write and destructive-action gates.
GitLab coverage: projects, groups, repositories, issues, merge requests, pipelines, releases, packages, approvals, and protected branches.
AI-friendly tools: higher-level tools summarize project health, review risk, release notes, delivery status, and pipeline failures.
Self-managed support: works with
https://gitlab.comand private GitLab instances.Operational controls: allowlists, denylist, payload caps, timeout control, optional audit logging, and secret redaction.
Related MCP server: GitLab MCP Server
When To Use This
Use this server when you want a local or self-managed GitLab MCP server with conservative defaults, explicit write gates, project/group allowlists, and workflow-oriented summaries. It is especially useful for agents that need to inspect repositories, review merge requests, triage CI, assess release readiness, or produce delivery digests without cloning repositories first.
The official GitLab MCP server is a good default when you want GitLab's beta hosted tool surface and Duo-backed features. glab mcp serve can be useful for CLI-centered experimentation. This package focuses on read-only-by-default local operation, guarded writes, broader GitLab API coverage, and higher-level DevOps workflow intelligence. See docs/parity.md for the current mapping.
Install
Requirements:
Node.js
>=20.11.0A GitLab token with the scopes needed for the resources you want to access
Install globally:
npm install -g gitlab-mcp-cliRun without a global install:
npx -y gitlab-mcp-cliThe published package name is gitlab-mcp-cli. The installed executable is gitlab-mcp-server.
Quick Start
Run the server directly after setting the required environment variables:
GITLAB_BASE_URL=https://gitlab.com \
GITLAB_TOKEN=glpat-xxxxxxxxxxxxxxxxxxxx \
gitlab-mcp-serverFrom source:
npm ci
npm run build
GITLAB_BASE_URL=https://gitlab.com \
GITLAB_TOKEN=glpat-xxxxxxxxxxxxxxxxxxxx \
node dist/cli.jsFor local development, copy .env.example to .env and keep credentials out of git.
Run a setup diagnostics pass before wiring the server into a client:
gitlab-mcp-server doctorFrom source:
npm run build
node dist/cli.js doctorThe doctor report validates GitLab connectivity and summarizes:
authenticated user and GitLab version
read-only, write-enabled, or destructive-enabled posture
token scope visibility when PAT introspection is available
allowlists, denylist, and alias counts
tool profile, HTTP bind posture, and payload limits
likely blocked capabilities and recommended next checks
MCP Client Setup
Example client configs live in examples/clients/:
Raw config examples: Claude Desktop JSON, Codex TOML, Cursor JSON
Generic stdio config
{
"mcpServers": {
"gitlab": {
"command": "gitlab-mcp-server",
"env": {
"GITLAB_BASE_URL": "https://gitlab.com",
"GITLAB_TOKEN": "your-token-here",
"ENABLE_WRITE_TOOLS": "false",
"ENABLE_DESTRUCTIVE_TOOLS": "false"
}
}
}
}npx config
{
"mcpServers": {
"gitlab": {
"command": "npx",
"args": ["-y", "gitlab-mcp-cli"],
"env": {
"GITLAB_BASE_URL": "https://gitlab.com",
"GITLAB_TOKEN": "your-token-here",
"ENABLE_WRITE_TOOLS": "false",
"ENABLE_DESTRUCTIVE_TOOLS": "false"
}
}
}
}Codex TOML config
[mcp_servers.gitlab]
command = "gitlab-mcp-server"
[mcp_servers.gitlab.env]
GITLAB_BASE_URL = "https://gitlab.com"
GITLAB_TOKEN = "your-token-here"
ENABLE_WRITE_TOOLS = "false"
ENABLE_DESTRUCTIVE_TOOLS = "false"HTTP transport
Stdio remains the default transport. To run the local Streamable HTTP server, use the CLI subcommand:
GITLAB_TOKEN=glpat-xxxxxxxxxxxxxxxxxxxx \
gitlab-mcp-server serve-httpYou can also enable HTTP with environment configuration:
MCP_TRANSPORT=http \
GITLAB_TOKEN=glpat-xxxxxxxxxxxxxxxxxxxx \
gitlab-mcp-serverCLI mode takes precedence over MCP_TRANSPORT, so gitlab-mcp-server doctor still runs diagnostics even when MCP_TRANSPORT=http is present.
Default HTTP endpoint:
http://127.0.0.1:3333/mcpHTTP safety defaults:
Binds to
127.0.0.1.Allows
localhost,127.0.0.1, and[::1]host headers.Allows missing origins and localhost browser origins.
Requires explicit
MCP_HTTP_ALLOWED_ORIGINSentries for remote browser origins.Refuses non-local binds unless both
MCP_HTTP_ALLOW_NON_LOCALHOST=trueandMCP_HTTP_AUTH_TOKENare configured.
Configuration
The server normalizes GITLAB_BASE_URL to /api/v4 automatically. If you already pass an /api/v4 URL, it is preserved.
Core settings
Variable | Required | Default | Notes |
| No |
| GitLab instance base URL or |
| Yes | GitLab PAT, project access token, group access token, or OAuth bearer token | |
| No |
| Use |
| No |
| Limits MCP tool discovery to a workflow profile |
| No | empty | Comma-separated explicit tool allowlist applied after the profile |
| No | empty | Comma-separated explicit tool denylist applied after the profile |
| No |
| Compatibility override to advertise write/destructive tools even when server-side gates are disabled |
| No |
| Use |
| No |
| HTTP bind host |
| No |
| HTTP bind port |
| No |
| Streamable HTTP MCP path |
| No | empty | Comma-separated browser origins allowed in HTTP mode |
| No |
| Comma-separated allowed hostnames for DNS rebinding protection |
| No | unset | Optional bearer token required by HTTP mode; required for non-local binds |
| No |
| Allows non-local HTTP binds only when a bearer token is also configured |
| No |
| Enables write-capable tools |
| No |
| Enables destructive tools that also require per-call confirmation |
| No |
| Returns intended write requests without mutating GitLab |
| No | empty | Comma-separated |
| No | empty | Comma-separated |
Access controls and limits
Variable | Default | Purpose |
| empty | Comma-separated project IDs or paths that are allowed |
| empty | Comma-separated group IDs or paths that are allowed |
| empty | Comma-separated project IDs or paths that are always denied |
|
| Maximum repository file payload |
|
| Maximum diff payload |
|
| Maximum total API response payload |
|
| Request timeout |
Operational settings
Variable | Default | Purpose |
|
| Custom outbound user agent |
|
|
|
| unset | Optional JSON-line audit log path |
|
| Keeps CI/CD secret values redacted unless explicitly enabled |
See .env.example for a complete local template.
Aliases
If you repeatedly work with the same projects or groups, you can define explicit aliases:
PROJECT_ALIASES=platform-api=platform/backend-api,storefront=commerce/storefront
GROUP_ALIASES=platform=platform,commerce=commerceAfter that, any tool expecting project_id or group_id can use the alias instead of the full path. Alias resolution is explicit and local to this server configuration.
Tool profiles
The default profile is readonly, so MCP clients discover read-only tools first and disabled write/destructive tools stay hidden. Use a narrower profile when you want agents to see only the tools for a workflow:
GITLAB_MCP_TOOL_PROFILE=mr-reviewAvailable profiles:
readonlycoremr-reviewci-triagedeliveryreleasegovernancemaintainer-writefull
Explicit allow/deny lists are applied after the selected profile:
GITLAB_MCP_ENABLED_TOOLS=gitlab_get_merge_request,gitlab_get_merge_request_diff
GITLAB_MCP_DISABLED_TOOLS=gitlab_merge_merge_requestFor compatibility with older broad tool discovery, set GITLAB_MCP_TOOL_PROFILE=full and GITLAB_MCP_EXPOSE_DISABLED_WRITES=true. Execution is still protected by ENABLE_WRITE_TOOLS, ENABLE_DESTRUCTIVE_TOOLS, and per-call destructive confirmation.
Guided Prompts
The server now exposes reusable MCP prompts so users do not need to memorize the full tool catalog first.
Core workflow prompts:
gitlab_review_merge_request_workflowgitlab_explain_failed_pipeline_workflowgitlab_summarize_project_status_workflowgitlab_generate_weekly_delivery_summary_workflowgitlab_assess_project_write_safety_workflow
Hero workflow prompts:
gitlab_stale_merge_request_cleanup_workflowgitlab_flaky_ci_triage_workflowgitlab_release_readiness_check_workflowgitlab_team_delivery_digest_workflowgitlab_portfolio_delivery_overview_workflowgitlab_summarize_commit_range_workflowgitlab_summarize_directory_workflow
Example prompt requests inside an MCP client:
Use gitlab_review_merge_request_workflow for project_id="platform-api" and merge_request_iid="42".Use gitlab_flaky_ci_triage_workflow for project_id="platform-api" and ref="main".These prompts point the model at the relevant gitlab_* tools for each workflow while keeping the actual data access explicit and structured.
Recommended Starting Points
If you are trying the MCP for the first time, start with the orchestration tools rather than the lower-level primitives.
Recommended first tools:
gitlab_release_readiness_check: one-call release go/caution/hold assessment for a projectgitlab_flaky_ci_triage: separates likely flaky CI from deterministic failuresgitlab_stale_merge_request_cleanup: identifies stale merge requests and recommends the next action for each sampled itemgitlab_team_delivery_digest: produces a concise project or group delivery summary plus a chat-ready status line
Example calls:
{
"project_id": "platform-api",
"output_format": "markdown"
}Use that with gitlab_release_readiness_check.
{
"project_id": "platform-api",
"ref": "main",
"output_format": "markdown"
}Use that with gitlab_flaky_ci_triage.
{
"project_id": "platform-api",
"stale_after_days": 14,
"output_format": "markdown"
}Use that with gitlab_stale_merge_request_cleanup.
{
"scope_type": "group",
"scope_id": "platform",
"days": 7,
"output_format": "markdown"
}Use that with gitlab_team_delivery_digest.
Shareable Output Formats
Selected higher-level tools support output_format="markdown" in addition to the default structured JSON response envelope.
Current markdown-capable tools:
gitlab_summarize_project_statusgitlab_explain_failed_pipelinegitlab_stale_merge_request_cleanupgitlab_flaky_ci_triagegitlab_compare_pipeline_runsgitlab_trace_job_to_commit_and_merge_requestgitlab_release_readiness_checkgitlab_team_delivery_digestgitlab_portfolio_delivery_overviewgitlab_get_group_delivery_overviewgitlab_summarize_commit_rangegitlab_summarize_directorygitlab_review_merge_request_risksgitlab_get_merge_request_review_stategitlab_generate_release_notesgitlab_get_project_dashboard
Example calls:
{
"project_id": "platform-api",
"output_format": "markdown"
}{
"project_id": "platform-api",
"pipeline_id": 12345,
"output_format": "markdown"
}{
"scope_type": "project",
"scope_id": "platform-api",
"days": 7,
"output_format": "markdown"
}This is useful when the result is intended for chat, a GitLab comment, or a status update, while structured remains the best default for agents that want to post-process the result.
Token Setup
Recommended scopes:
Read-only mode:
read_apiWrite mode:
api
Notes:
ENABLE_WRITE_TOOLS=trueonly enables the MCP server's write-capable tools. It does not add GitLab permissions to the configured token.If write tools are enabled but GitLab returns
insufficient_scope, the MCP write-mode guard has passed and the token is still missing the required GitLab scope, usuallyapi.Project and group access tokens work when their scopes match the requested resources.
Some self-managed GitLab instances work better with
GITLAB_TOKEN_HEADER_MODE=private-token.Keep write and destructive modes off unless you explicitly need them.
Safety Model
Read-only is the default and recommended starting point.
The default tool profile is
readonly; disabled write/destructive tools are hidden from MCP discovery.Write-capable tools require
ENABLE_WRITE_TOOLS=true.Destructive tools require
ENABLE_DESTRUCTIVE_TOOLS=trueandconfirm_destructive=truein the tool call.ENABLE_DRY_RUN=truelets agents inspect a write request before changing GitLab.Allowlists and the denylist are enforced before risky operations.
HTTP mode is localhost-only by default and requires a bearer token before non-local binds are allowed.
Secret CI/CD variable values remain redacted unless
EXPOSE_SECRET_VARIABLE_VALUES=true.The server does not execute shell commands. It talks directly to the GitLab REST and GraphQL APIs.
Security details: SECURITY.md and docs/security-model.md
Available Tool Areas
The server exposes concrete gitlab_* MCP tools. Representative examples:
Instance and access:
gitlab_validate_token,gitlab_get_current_user,gitlab_list_accessible_projectsProjects and groups:
gitlab_search,gitlab_search_projects,gitlab_search_labels,gitlab_get_project_dashboard,gitlab_get_group_delivery_overviewRepository:
gitlab_get_file,gitlab_search_code,gitlab_compare_refs,gitlab_get_commit_diffIssues:
gitlab_list_issues,gitlab_create_issue,gitlab_add_issue_commentMerge requests:
gitlab_get_merge_request,gitlab_get_merge_request_commits,gitlab_get_merge_request_pipelines,gitlab_list_draft_notes,gitlab_create_draft_note,gitlab_bulk_publish_draft_notes,gitlab_get_merge_request_review_state,gitlab_merge_merge_requestPipelines:
gitlab_list_pipelines,gitlab_explain_failed_pipeline,gitlab_find_flaky_jobsReleases and packages:
gitlab_list_releases,gitlab_create_release,gitlab_get_packageGovernance:
gitlab_get_project_approval_rules,gitlab_check_project_write_riskIntelligence:
gitlab_summarize_project_status,gitlab_stale_merge_request_cleanup,gitlab_flaky_ci_triage,gitlab_release_readiness_check,gitlab_team_delivery_digest,gitlab_portfolio_delivery_overview,gitlab_summarize_commit_range,gitlab_summarize_directory,gitlab_review_merge_request_risks,gitlab_generate_release_notes
Write-capable tools stay unavailable until you explicitly enable them.
For design notes and implementation details, see:
Common AI Workflows
This server is useful when you want an agent to:
inspect a GitLab repository without cloning it first
summarize a commit range and identify risky files or directories with
gitlab_summarize_commit_rangeunderstand an unfamiliar repository area with
gitlab_summarize_directoryreview merge request diffs, discussions, approvals, and pipeline state together
summarize recent team activity across issues, merge requests, and pipelines with
gitlab_team_delivery_digestassess cross-project portfolio health with
gitlab_portfolio_delivery_overviewassess release readiness with
gitlab_release_readiness_checktriage flaky CI with
gitlab_flaky_ci_triageclean up stale merge requests with
gitlab_stale_merge_request_cleanuptrace a failed job back to its pipeline, commit, and merge request context
draft release notes from tags, compares, and recent delivery activity
assess whether a project is safe for AI-assisted writes before enabling write mode
produce a chat-ready delivery digest with markdown output
use guided prompts instead of manually selecting low-level tools
If you want agents and other developers to discover the right tools quickly, refer to the actual MCP tool names in prompts, examples, and client instructions.
Troubleshooting
Run
gitlab-mcp-server doctorfirst when setup behavior is unclear.401 Unauthorized: the token is invalid, expired, or using the wrong header mode.403 Forbidden: the token lacks access or the resource is outside the configured allowlists.403 insufficient_scopeon write tools afterENABLE_WRITE_TOOLS=true: write mode is enabled, but the GitLab credential is still not authorized for writes. Usegitlab_validate_tokenordoctor; personal access tokens should showapiin their scopes. For project, group, or OAuth tokens, verify the token scope and project membership directly in GitLab because PAT scope introspection may be unavailable.404 Not Found: the resource is missing or hidden by GitLab permissions.429 Too Many Requests: the GitLab rate limit was hit.HTTP server refuses to start on
0.0.0.0or another non-local host: set bothMCP_HTTP_ALLOW_NON_LOCALHOST=trueandMCP_HTTP_AUTH_TOKEN, then restrictMCP_HTTP_ALLOWED_HOSTSandMCP_HTTP_ALLOWED_ORIGINSto trusted values.PAT about to expire: the
doctorreport andgitlab_validate_tokenadvisory will flag short remaining lifetime when PAT introspection is available.Large file or diff errors: raise payload limits only when you trust the workload.
CLI not found from source: run
npm run buildand invokenode dist/cli.js.
Development
npm ci
npm run typecheck
npm test
npm run build
npm run pack:dry-runSupporting docs:
Publishing
This repository uses npm trusted publishing from GitHub Actions through publish.yml.
Release flow:
Update
package.jsonversion.Commit and push.
Create and push a matching tag such as
v<package-version>.Publish a GitHub Release for that tag.
GitHub Actions publishes the package to npm through OIDC.
Manual fallback:
npm login
npm whoami
npm run clean
npm run build
npm test
npm run pack:dry-run
npm publish --access publicNo NPM_TOKEN secret is required for the default GitHub Actions release path.
Published Package Contents
The npm tarball intentionally stays small and only publishes:
dist/README.mdLICENSEpackage.json
Available Tools
85 toolsgitlab_check_project_write_riskCheck Project Write RiskARead-onlyIdempotent
Assess whether a project’s branch protections and approval configuration make mutation workflows low-, medium-, or high-risk.
Inputs: project_id (required), target_branch.
gitlab_compare_pipeline_runsCompare Pipeline RunsBRead-onlyIdempotent
Compare two pipeline runs and highlight added, removed, or changed jobs.
Inputs: project_id (required), left_pipeline_id (required), right_pipeline_id (required), output_format.
gitlab_compare_refsCompare RefsCRead-onlyIdempotent
Compare branches, tags, or commits within a project repository.
Inputs: to (required), from (required), project_id (required), unidiff, +1 more.
gitlab_explain_failed_pipelineExplain Failed PipelineARead-onlyIdempotent
Summarize a failed pipeline by listing failed jobs and tailing their traces. Job output is treated as untrusted.
Inputs: project_id (required), pipeline_id (required), max_jobs, output_format, +1 more.
gitlab_find_blocked_merge_requestsFind Blocked Merge RequestsBRead-onlyIdempotent
Find open merge requests whose detailed_merge_status indicates a merge blocker.
Inputs: project_id (required), per_page.
gitlab_find_failed_pipelinesFind Failed PipelinesBRead-onlyIdempotent
Find recent failed pipelines for a project.
Inputs: project_id (required), ref, per_page.
gitlab_find_flaky_jobsFind Flaky JobsCRead-onlyIdempotent
Inspect recent pipeline history and identify jobs that oscillate between success and failure.
Inputs: project_id (required), ref, min_samples, lookback_pipelines.
gitlab_find_stale_merge_requestsFind Stale Merge RequestsBRead-onlyIdempotent
Find open merge requests that have not been updated recently.
Inputs: project_id (required), per_page, include_drafts, stale_after_days.
gitlab_find_unassigned_issuesFind Unassigned IssuesARead-onlyIdempotent
Find opened issues in a project with no assignee.
Inputs: project_id (required), per_page.
gitlab_flaky_ci_triageFlaky CI TriageBRead-onlyIdempotent
Assess whether recent CI failures look flaky by combining pipeline history, job oscillation, representative comparisons, and commit/MR context.
Inputs: project_id (required), ref, min_samples, output_format, +1 more.
gitlab_generate_release_notesGenerate Release NotesARead-onlyIdempotent
Generate draft release notes from repository compare results between two refs. Repository text is treated as untrusted.
Inputs: project_id (required), to_ref, from_ref, limit_commits, +1 more.
gitlab_get_branchGet BranchBRead-onlyIdempotent
Retrieve metadata for a single branch.
Inputs: branch (required), project_id (required).
gitlab_get_branch_protectionGet Branch ProtectionARead-onlyIdempotent
Retrieve a specific protected branch rule by exact branch name or wildcard.
Inputs: project_id (required), branch_name (required).
gitlab_get_commitGet CommitBRead-onlyIdempotent
Retrieve a specific commit by SHA, branch, or tag reference.
Inputs: sha (required), project_id (required), stats.
gitlab_get_commit_diffGet Commit DiffBRead-onlyIdempotent
Retrieve the diff for a specific commit, subject to diff-size guardrails.
Inputs: sha (required), project_id (required), unidiff.
gitlab_get_commitsGet CommitsBRead-onlyIdempotent
List repository commits for a project.
Inputs: project_id (required), page, path, since, +3 more.
gitlab_get_current_userGet Current UserARead-onlyIdempotent
Return the authenticated GitLab user associated with the configured token.
Inputs: no named parameters.
gitlab_get_draft_noteGet Draft NoteBRead-onlyIdempotent
Retrieve a single draft note from a merge request.
Inputs: project_id (required), draft_note_id (required), merge_request_iid (required).
gitlab_get_fileGet FileARead-onlyIdempotent
Retrieve a repository file with metadata. Repository content is untrusted and returned with size guardrails.
Inputs: file_path (required), project_id (required), ref.
gitlab_get_file_blameGet File BlameBRead-onlyIdempotent
Retrieve blame information for a file at a specific ref.
Inputs: file_path (required), project_id (required), ref.
gitlab_get_groupGet GroupARead-onlyIdempotent
Retrieve a single GitLab group by ID or full path.
Inputs: group_id (required).
gitlab_get_group_delivery_overviewGet Group Delivery OverviewBRead-onlyIdempotent
Aggregate a group-level delivery overview with sampled projects, open merge requests, and open issues through a single GraphQL query.
Inputs: group_id (required), issue_limit, output_format, project_limit, +3 more.
gitlab_get_issueGet IssueARead-onlyIdempotent
Retrieve a single issue by IID from a project.
Inputs: issue_iid (required), project_id (required).
gitlab_get_jobGet JobARead-onlyIdempotent
Retrieve a single CI/CD job by ID.
Inputs: job_id (required), project_id (required).
gitlab_get_job_traceGet Job TraceARead-onlyIdempotent
Return the job trace text. Job output is untrusted and trimmed to a caller-specified tail length.
Inputs: job_id (required), project_id (required), tail_lines.
gitlab_get_merge_requestGet Merge RequestBRead-onlyIdempotent
Retrieve a single merge request by IID.
Inputs: project_id (required), merge_request_iid (required).
gitlab_get_merge_request_approval_rulesGet Merge Request Approval RulesBRead-onlyIdempotent
List the effective approval rules applied to a merge request.
Inputs: project_id (required), merge_request_iid (required), page, per_page.
gitlab_get_merge_request_changesGet Merge Request ChangesBRead-onlyIdempotent
Retrieve merge request change metadata and changed files. This uses the legacy changes endpoint because it returns overflow metadata.
Inputs: project_id (required), merge_request_iid (required), unidiff, access_raw_diffs.
gitlab_get_merge_request_commitsGet Merge Request CommitsBRead-onlyIdempotent
List commits that are part of a merge request.
Inputs: project_id (required), merge_request_iid (required), page, per_page.
gitlab_get_merge_request_diffGet Merge Request DiffBRead-onlyIdempotent
List the file diffs for a merge request.
Inputs: project_id (required), merge_request_iid (required), page, per_page.
gitlab_get_merge_request_discussionsGet Merge Request DiscussionsARead-onlyIdempotent
List discussions for a merge request. Auto-fetches later pages by default so older notes are included.
Inputs: project_id (required), merge_request_iid (required), page, per_page, +1 more.
gitlab_get_merge_request_pipelinesGet Merge Request PipelinesBRead-onlyIdempotent
List pipelines associated with a merge request.
Inputs: project_id (required), merge_request_iid (required), page, per_page.
gitlab_get_merge_request_review_stateGet Merge Request Review StateBRead-onlyIdempotent
Summarize merge request review readiness, approvals, discussions, reviewers, and head pipeline state through a single GraphQL-backed aggregate query.
Inputs: project_id (required), merge_request_iid (required), label_limit, output_format, +2 more.
gitlab_get_packageGet PackageBRead-onlyIdempotent
Retrieve a single package from a project package registry.
Inputs: package_id (required), project_id (required).
gitlab_get_pipelineGet PipelineARead-onlyIdempotent
Retrieve a single pipeline by ID.
Inputs: project_id (required), pipeline_id (required).
gitlab_get_pipeline_artifactsGet Pipeline ArtifactsARead-onlyIdempotent
Summarize artifacts produced by jobs in a pipeline and optionally browse artifact trees for a bounded number of jobs.
Inputs: project_id (required), pipeline_id (required), path, recursive, +3 more.
gitlab_get_pipeline_failed_jobs_summaryGet Pipeline Failed Jobs SummaryARead-onlyIdempotent
Summarize failed jobs in a pipeline, including stages, failure reasons, and short trace tails.
Inputs: project_id (required), pipeline_id (required), max_jobs, trace_tail_lines, +1 more.
gitlab_get_projectGet ProjectARead-onlyIdempotent
Retrieve detailed metadata for a single GitLab project.
Inputs: project_id (required).
gitlab_get_project_activityGet Project ActivityCRead-onlyIdempotent
Return recent visible project events and activity.
Inputs: project_id (required), page, after, action, +3 more.
gitlab_get_project_approval_configurationGet Project Approval ConfigurationBRead-onlyIdempotent
Retrieve project-level merge request approval configuration.
Inputs: project_id (required).
gitlab_get_project_approval_rulesGet Project Approval RulesCRead-onlyIdempotent
List project-level merge request approval rules.
Inputs: project_id (required), page, per_page.
gitlab_get_project_dashboardGet Project DashboardBRead-onlyIdempotent
Aggregate a project dashboard with open merge requests, open issues, recent pipelines, and attention highlights through a single GraphQL query.
Inputs: project_id (required), issue_limit, output_format, assignee_limit, +2 more.
gitlab_get_project_languagesGet Project LanguagesBRead-onlyIdempotent
Return the language breakdown for a project repository.
Inputs: project_id (required).
gitlab_get_project_membersGet Project MembersBRead-onlyIdempotent
List effective project members, including inherited group memberships.
Inputs: project_id (required), page, query, per_page.
gitlab_get_project_statisticsGet Project StatisticsBRead-onlyIdempotent
Return repository and storage statistics for a project.
Inputs: project_id (required).
gitlab_get_releaseGet ReleaseARead-onlyIdempotent
Retrieve a single project release by tag name.
Inputs: tag_name (required), project_id (required).
gitlab_get_versionGet GitLab VersionARead-onlyIdempotent
Return the version metadata of the connected GitLab instance.
Inputs: no named parameters.
gitlab_list_accessible_groupsList Accessible GroupsCRead-onlyIdempotent
List groups accessible to the configured token, filtered by the configured group allowlist when present.
Inputs: page, search, per_page, min_access_level.
gitlab_list_accessible_projectsList Accessible ProjectsCRead-onlyIdempotent
List projects accessible to the configured token, filtered by configured allowlists and deny lists.
Inputs: page, search, archived, per_page, +2 more.
gitlab_list_branchesList BranchesCRead-onlyIdempotent
List branches in a project repository.
Inputs: project_id (required), page, search, per_page.
gitlab_list_draft_notesList Draft NotesBRead-onlyIdempotent
List draft notes pending publication for a merge request.
Inputs: project_id (required), merge_request_iid (required), page, per_page.
gitlab_list_group_issuesList Group IssuesCRead-onlyIdempotent
List issues for a group and its descendant projects.
Inputs: group_id (required), page, state, labels, +2 more.
gitlab_list_group_membersList Group MembersCRead-onlyIdempotent
List effective group members, including inherited members.
Inputs: group_id (required), page, query, per_page.
gitlab_list_group_merge_requestsList Group Merge RequestsARead-onlyIdempotent
List merge requests for a group and its descendant projects.
Inputs: group_id (required), page, state, labels, +2 more.
gitlab_list_group_projectsList Group ProjectsCRead-onlyIdempotent
List projects within a group.
Inputs: group_id (required), page, search, per_page, +1 more.
gitlab_list_issuesList IssuesCRead-onlyIdempotent
List issues for a GitLab project.
Inputs: project_id (required), page, state, labels, +3 more.
gitlab_list_merge_requestsList Merge RequestsCRead-onlyIdempotent
List merge requests in a project.
Inputs: project_id (required), page, state, labels, +3 more.
gitlab_list_packagesList PackagesCRead-onlyIdempotent
List project packages.
Inputs: project_id (required), page, status, per_page, +4 more.
gitlab_list_pipeline_jobsList Pipeline JobsBRead-onlyIdempotent
List jobs for a specific pipeline.
Inputs: project_id (required), pipeline_id (required), page, scope, +2 more.
gitlab_list_pipelinesList PipelinesCRead-onlyIdempotent
List pipelines for a project.
Inputs: project_id (required), ref, page, source, +2 more.
gitlab_list_project_variablesList Project VariablesARead-onlyIdempotent
List CI/CD variables for a project. Secret values are redacted unless EXPOSE_SECRET_VARIABLE_VALUES=true.
Inputs: project_id (required), page, per_page.
gitlab_list_protected_branchesList Protected BranchesBRead-onlyIdempotent
List protected branch rules configured for a project.
Inputs: project_id (required), page, per_page.
gitlab_list_releasesList ReleasesBRead-onlyIdempotent
List releases for a project.
Inputs: project_id (required), page, per_page.
gitlab_list_repository_treeList Repository TreeCRead-onlyIdempotent
List files and directories in a GitLab repository tree.
Inputs: project_id (required), ref, page, path, +2 more.
gitlab_list_tagsList TagsBRead-onlyIdempotent
List tags in a project repository.
Inputs: project_id (required), page, sort, search, +2 more.
gitlab_portfolio_delivery_overviewPortfolio Delivery OverviewARead-onlyIdempotent
Summarize delivery health across a group or an explicit set of projects and highlight the top risk hotspots.
Inputs: scope_type (required), per_page, scope_id, project_ids, +4 more.
gitlab_release_readiness_checkRelease Readiness CheckBRead-onlyIdempotent
Assess whether a project looks ready for release by combining pipeline, merge request, issue, and release comparison signals.
Inputs: project_id (required), target_ref, limit_commits, output_format, +1 more.
gitlab_review_merge_request_risksReview Merge Request RisksARead-onlyIdempotent
Assess merge request risk using merge status, diff volume, pipeline state, and changed-file heuristics.
Inputs: project_id (required), merge_request_iid (required), output_format.
gitlab_searchSearch GitLabARead-onlyIdempotent
Search across GitLab globally or within one allowed project or group. Provide either project_id, group_id, or neither for global search; global search is disabled when project/group scope controls are configured.
Inputs: scope (required), search (required), page, sort, +9 more.
gitlab_search_codeSearch CodeCRead-onlyIdempotent
Search code blobs in a project using the GitLab Search API.
Inputs: search (required), project_id (required), page, per_page, +1 more.
gitlab_search_groupsSearch GroupsCRead-onlyIdempotent
Search GitLab groups by name or path.
Inputs: search (required), page, per_page.
gitlab_search_issuesSearch IssuesCRead-onlyIdempotent
Search issues in a project using title and description matching.
Inputs: search (required), project_id (required), in, page, +2 more.
gitlab_search_labelsSearch GitLab LabelsARead-onlyIdempotent
Search project or group labels, optionally including issue and merge request counts when GitLab exposes them.
Inputs: full_path (required), is_project (required), page, search, +4 more.
gitlab_search_projectsSearch ProjectsCRead-onlyIdempotent
Search GitLab projects by name or path.
Inputs: search (required), page, simple, archived, +2 more.
gitlab_stale_merge_request_cleanupStale Merge Request CleanupARead-onlyIdempotent
Triage stale merge requests and recommend whether they should be merged, rebased, reassigned, commented on, or closed.
Inputs: project_id (required), per_page, output_format, include_drafts, +2 more.
gitlab_summarize_commit_rangeSummarize Commit RangeARead-onlyIdempotent
Summarize what changed between two refs, highlight the most-affected directories, and flag risky repository surfaces.
Inputs: from_ref (required), project_id (required), to_ref, straight, +2 more.
gitlab_summarize_directorySummarize DirectoryARead-onlyIdempotent
Summarize a repository directory by sampling its tree structure, dominant file types, and likely entry files.
Inputs: project_id (required), ref, path, recursive, +2 more.
gitlab_summarize_project_statusSummarize Project StatusARead-onlyIdempotent
Summarize current project health by combining project metadata, recent pipelines, open issues, and open merge requests.
Inputs: project_id (required), output_format.
gitlab_summarize_recent_activitySummarize Recent ActivityBRead-onlyIdempotent
Summarize recent events, issues, merge requests, and pipelines for a project.
Inputs: project_id (required), days.
gitlab_team_delivery_digestTeam Delivery DigestBRead-onlyIdempotent
Generate a concise project or group delivery digest with health signals, notable blockers, and a chat-ready summary.
Inputs: scope_id (required), scope_type (required), days, per_page, +2 more.
gitlab_trace_issue_to_merge_requestsTrace Issue To Merge RequestsARead-onlyIdempotent
List merge requests that close a specific issue when merged.
Inputs: issue_iid (required), project_id (required).
gitlab_trace_job_to_commit_and_merge_requestTrace Job To Commit And Merge RequestARead-onlyIdempotent
Trace a CI job to its commit, pipeline, and associated merge requests for debugging context.
Inputs: job_id (required), project_id (required), output_format.
gitlab_trace_merge_request_to_pipeline_failuresTrace Merge Request To Pipeline FailuresBRead-onlyIdempotent
Trace a merge request to its recent pipelines and failed jobs, including short trace tails for failed jobs.
Inputs: project_id (required), merge_request_iid (required), pipeline_limit, trace_tail_lines.
gitlab_validate_tokenValidate TokenARead-onlyIdempotent
Validate the configured token against GitLab and return identity, version, and server configuration status.
Inputs: no named parameters.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 85 tools
Each tool has a clearly distinct purpose and target resource (e.g., specific merge request, pipeline, or project aspects). Overlapping concepts like 'summarize' vs 'get' are differentiated by their descriptions, ensuring an agent can reliably select the right tool.
All 85 tools follow a consistent 'gitlab_verb_noun' pattern in snake_case, making the set highly predictable. Verbs like get, list, search, find, trace, and summarize are used systematically across resource types.
With 85 tools, the server is on the high side but appropriate for covering GitLab's extensive API surface (projects, groups, users, merge requests, pipelines, CI/CD, releases, packages, etc.). The count is justified by the breadth of the domain, though some tools could be consolidated.
The tool set is almost entirely read-only and analytical, lacking essential CRUD operations (e.g., no create_issue, update_merge_request, delete_project) and mutation tools (e.g., merge, run pipeline). This severely limits agents that need to perform actions, leaving significant gaps for a full GitLab interaction.
Maintenance
Related MCP Connectors
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
The Mercado Pago MCP Server implements the Model Context Protocol to provide AI agents and LLMs with access to Mercado Pago's APIs and tools within compatible development environments. It acts as an intermediary that translates Mercado Pago resources into executable functions (tools) that AI applications can invoke to perform actions and automate flows. The server simplifies integration, enables using documentation to implement or improve code, and optimizes operations through natural language interactions without manual implementations.
A Model Context Protocol server for Wix AI tools
Enable secure connectivity between Sentry issues and debugging data, and LLM clients, using a Model Context Protocol (MCP) server.
Related MCP Servers
- AlicenseBqualityDmaintenanceA Model Context Protocol server that enables interaction with GitLab accounts to manage repositories, merge requests, code reviews, and CI/CD pipelines through natural language.4150 npm21MIT
- -licenseNot gradedqualityNot gradedmaintenanceA Model Context Protocol server that enables AI assistants to interact with GitLab repositories, allowing tasks like managing merge requests, searching projects, and creating comments through RESTful API integration.22 npm2-
- AlicenseBqualityCmaintenanceA Model Context Protocol server that enables AI assistants to interact with self-hosted GitLab instances through 30 specialized tools. It supports managing projects, merge requests, CI/CD pipelines, and repository operations via the GitLab REST API v4.30MIT
- AlicenseNot gradedqualityDmaintenanceA Model Context Protocol server for GitLab integration, enabling AI assistants to manage projects, merge requests, pipelines, issues, releases, and more.MIT