Skip to main content
Glama

gitlab-mcp

Node CI npm license

A production-ready MCP server for GitLab. It lets AI assistants read and manage GitLab projects, merge requests, issues, pipelines, wikis, releases, and more through a broad, policy-controlled tool registry.

Highlights

  • Comprehensive GitLab coverage — projects, merge requests (with code-context analysis and rebase), issues, pipelines (schedules, triggers, test reports, waits, log search), environments and deployments, wikis, milestones and iterations, releases, protected branches and tags, snippets, webhooks, vulnerabilities, labels, commits, GraphQL, and file management

  • Multiple transports — stdio for local CLI usage, Streamable HTTP for remote deployments, optional SSE

  • Flexible authentication — personal access tokens, OAuth 2.0 PKCE, external token scripts, token files, cookie-based auth, and per-request remote authorization

  • Policy engine — readonly/modify/full modes, tool allowlist/denylist, feature toggles, and project-scoped restrictions

  • Enterprise networking — HTTP/HTTPS proxy, custom CA certificates, Cloudflare bypass, multi-instance API rotation

  • Output control — JSON, compact JSON, or YAML formatting with configurable response size limits, optional JMESPath projection, and an optional masking policy for tokens, IPs, and keywords

  • Agent guidance — initialize instructions, workflow prompts (review an MR, triage a pipeline failure or vulnerabilities), and recovery hints on errors

Related MCP server: qodev-gitlab-mcp

Usage

Supported clients

Claude Desktop, Claude Code, VS Code, GitHub Copilot Chat (VS Code), Cursor, JetBrains AI Assistant, GitLab Duo, and any MCP client that supports stdio or streamable HTTP.

Current client format references:

Authentication methods

The server supports three auth patterns:

  1. Personal Access Token (PAT)

  2. OAuth 2.0 PKCE (recommended for local interactive use)

  3. Remote per-request auth (REMOTE_AUTHORIZATION=true, HTTP mode)

  1. Create a GitLab OAuth application in Settings -> Applications.

  2. Set redirect URI to http://127.0.0.1:8765/callback (or your custom callback).

  3. Set scope to api.

  4. Copy the Application ID as GITLAB_OAUTH_CLIENT_ID.

{
  "mcpServers": {
    "gitlab": {
      "command": "npx",
      "args": ["-y", "gitlab-mcp@latest"],
      "env": {
        "GITLAB_USE_OAUTH": "true",
        "GITLAB_OAUTH_CLIENT_ID": "your_oauth_client_id",
        "GITLAB_OAUTH_REDIRECT_URI": "http://127.0.0.1:8765/callback",
        "GITLAB_API_URL": "https://gitlab.com/api/v4",
        "GITLAB_ALLOWED_PROJECT_IDS": "",
        "GITLAB_PERMISSION_MODE": "full",
        "USE_GITLAB_WIKI": "true",
        "USE_MILESTONE": "true",
        "USE_PIPELINE": "true"
      }
    }
  }
}

If your OAuth app is confidential, also set GITLAB_OAUTH_CLIENT_SECRET.

Personal Access Token setup (stdio)

{
  "mcpServers": {
    "gitlab": {
      "command": "npx",
      "args": ["-y", "gitlab-mcp@latest"],
      "env": {
        "GITLAB_PERSONAL_ACCESS_TOKEN": "glpat-xxxxxxxxxxxxxxxxxxxx",
        "GITLAB_API_URL": "https://gitlab.com/api/v4",
        "GITLAB_ALLOWED_PROJECT_IDS": "",
        "GITLAB_PERMISSION_MODE": "full",
        "USE_GITLAB_WIKI": "true",
        "USE_MILESTONE": "true",
        "USE_PIPELINE": "true"
      }
    }
  }
}

VS Code .vscode/mcp.json examples

PAT with secure prompt input:

{
  "inputs": [
    {
      "type": "promptString",
      "id": "gitlab_token",
      "description": "GitLab Personal Access Token",
      "password": true
    }
  ],
  "servers": {
    "gitlab": {
      "type": "stdio",
      "command": "node",
      "args": ["/absolute/path/to/gitlab-mcp/dist/index.js"],
      "env": {
        "GITLAB_PERSONAL_ACCESS_TOKEN": "${input:gitlab_token}",
        "GITLAB_API_URL": "https://gitlab.com/api/v4",
        "GITLAB_PERMISSION_MODE": "full"
      }
    }
  }
}

OAuth (confidential app) with secure prompt input:

{
  "inputs": [
    {
      "type": "promptString",
      "id": "gitlab_oauth_secret",
      "description": "GitLab OAuth Client Secret",
      "password": true
    }
  ],
  "servers": {
    "gitlab": {
      "type": "stdio",
      "command": "node",
      "args": ["/absolute/path/to/gitlab-mcp/dist/index.js"],
      "env": {
        "GITLAB_USE_OAUTH": "true",
        "GITLAB_OAUTH_CLIENT_ID": "your_oauth_client_id",
        "GITLAB_OAUTH_CLIENT_SECRET": "${input:gitlab_oauth_secret}",
        "GITLAB_OAUTH_REDIRECT_URI": "http://127.0.0.1:8765/callback",
        "GITLAB_API_URL": "https://gitlab.com/api/v4"
      }
    }
  }
}

GitHub Copilot Chat in VS Code uses the same .vscode/mcp.json format.

Claude Desktop / Claude Code / Cursor

Claude Desktop reads claude_desktop_config.json. Claude Code supports project-level .mcp.json and claude mcp add-json. Cursor uses .cursor/mcp.json.

{
  "mcpServers": {
    "gitlab": {
      "command": "node",
      "args": ["/absolute/path/to/gitlab-mcp/dist/index.js"],
      "env": {
        "GITLAB_PERSONAL_ACCESS_TOKEN": "glpat-xxxxxxxxxxxxxxxxxxxx",
        "GITLAB_API_URL": "https://gitlab.com/api/v4"
      }
    }
  }
}

GitLab Duo (~/.gitlab/duo/mcp.json)

{
  "mcpServers": {
    "gitlab": {
      "command": "node",
      "args": ["/absolute/path/to/gitlab-mcp/dist/index.js"],
      "env": {
        "GITLAB_PERSONAL_ACCESS_TOKEN": "glpat-xxxxxxxxxxxxxxxxxxxx",
        "GITLAB_API_URL": "https://gitlab.com/api/v4"
      }
    }
  },
  "approvedTools": ["gitlab_get_project", "gitlab_list_merge_requests"]
}

JetBrains AI Assistant

JetBrains can import an existing MCP JSON config or register the server manually. Use stdio command node /absolute/path/to/gitlab-mcp/dist/index.js, or HTTP endpoint http://127.0.0.1:3333/mcp with required headers.

Remote authorization (multi-user HTTP)

Start server:

REMOTE_AUTHORIZATION=true \
HTTP_HOST=0.0.0.0 \
MCP_ALLOWED_HOSTS=127.0.0.1 \
HTTP_PORT=3333 \
node dist/http.js

Client config:

{
  "mcpServers": {
    "gitlab": {
      "url": "http://127.0.0.1:3333/mcp",
      "headers": {
        "Authorization": "Bearer glpat-xxxxxxxxxxxxxxxxxxxx"
      }
    }
  }
}

Dynamic per-request API URL:

REMOTE_AUTHORIZATION=true \
ENABLE_DYNAMIC_API_URL=true \
HTTP_HOST=0.0.0.0 \
MCP_ALLOWED_HOSTS=127.0.0.1 \
HTTP_PORT=3333 \
node dist/http.js

Add header in client requests:

{
  "headers": {
    "Authorization": "Bearer glpat-xxxxxxxxxxxxxxxxxxxx",
    "X-GitLab-API-URL": "https://gitlab.example.com/api/v4"
  }
}

Remote auth behavior matrix:

Server Mode

Required Request Headers

Token Fallback Chain

REMOTE_AUTHORIZATION=false on local HTTP bind only

none

enabled

REMOTE_AUTHORIZATION=true

Authorization: Bearer <token>, Private-Token: <token>, or Job-Token: <token>

disabled

REMOTE_AUTHORIZATION=true + ENABLE_DYNAMIC_API_URL=true

Authorization, Private-Token, or Job-Token, and X-GitLab-API-URL: https://host/api/v4

disabled

When HTTP_HOST is not 127.0.0.1, localhost, or ::1, HTTP startup rejects server-side GITLAB_PERSONAL_ACCESS_TOKEN or GITLAB_JOB_TOKEN unless inbound requests are protected by MCP_HTTP_AUTH_TOKEN, REMOTE_AUTHORIZATION=true, or GITLAB_MCP_OAUTH=true.

Docker

For containerized deployments, PAT or remote auth is recommended. OAuth interactive callback flow is usually less convenient in containers. The Compose service listens on 0.0.0.0 inside the container but publishes only 127.0.0.1:3333 on the host by default. For the remote-authorization example, set REMOTE_AUTHORIZATION=true in .env, leave server-side GitLab credentials empty, and send each client's GitLab token as shown above.

docker compose up --build -d

or:

docker build -t gitlab-mcp .

docker run -d \
  --name gitlab-mcp \
  -p 127.0.0.1:3333:3333 \
  -e HTTP_HOST=0.0.0.0 \
  -e MCP_ALLOWED_HOSTS=127.0.0.1 \
  -e REMOTE_AUTHORIZATION=true \
  -e GITLAB_API_URL=https://gitlab.com/api/v4 \
  gitlab-mcp

Clients must send their GitLab credential in Authorization: Bearer <token>, Private-Token, or Job-Token. To keep a GitLab token in the container instead, set a separate 32+ character MCP_HTTP_AUTH_TOKEN and require clients to send that value as the bearer token; never expose a server-held GitLab token as the MCP bearer.

Compatibility notes

  • GITLAB_PROJECT_ID is not a supported environment variable in this repository.

  • To set an effective default project, use GITLAB_ALLOWED_PROJECT_IDS with one project ID, or pass project_id in tool arguments.

  • CLI argument overrides such as --token or --api-url are not implemented (--env-file is supported).

  • JSON config files do not support comments (//).

MCP Server Configuration

HTTP server

pnpm install
cp .env.example .env
pnpm build

# stdio (local MCP)
pnpm start

# streamable HTTP server (http://127.0.0.1:3333/mcp)
pnpm start:http

# optional: load a specific env file
pnpm start -- --env-file .env.local
pnpm start:http -- --env-file .env.local

Transport and entrypoint

Transport

Entry Point

Endpoint

Best For

stdio

node dist/index.js

stdin/stdout

Local single-user MCP clients

Streamable HTTP

node dist/http.js

POST/GET/DELETE /mcp

Remote/shared deployments

SSE (legacy)

node dist/http.js

GET /sse, POST /messages

Legacy SSE-only clients (SSE=true)

Health

node dist/http.js

GET /healthz

Liveness/readiness checks

SSE=true is not compatible with REMOTE_AUTHORIZATION=true.

Tool Categories

Tools are organized into these categories. All GitLab tools use the gitlab_ prefix, except health_check.

Category

Examples

Projects

get_project, list_projects, create_repository, update_project

Repository

get_repository_tree, get_file_contents, push_files, protected branches

Merge Requests

list_merge_requests, get_merge_request_conflicts, merge_merge_request

MR Code Context

get_merge_request_code_context (advanced code review)

MR Discussions

list_merge_request_discussions, create_merge_request_thread

MR Notes

list_merge_request_notes, create_merge_request_note

Draft Notes

list_draft_notes, create_draft_note, bulk_publish_draft_notes

Issues

list_issues, create_issue, update_issue, issue links

Pipelines

list_pipelines, list_pipeline_schedules, get_pipeline_test_report, wait_for_pipeline

Deployments

create_environment, stop_environment, approve_deployment, list_deployment_merge_requests

Commits

list_commits, get_commit, get_commit_diff

Labels

list_labels, create_label, update_label

Milestones

list_milestones, list_group_milestones, create_group_iteration, burndown events

Snippets

list_project_snippets, create_project_snippet

Security

list_project_vulnerabilities, dismiss_vulnerability (Ultimate)

Webhooks

list_webhooks, create_webhook, list_webhook_events

Releases

list_releases, create_release, download_release_asset

Wiki

list_wiki_pages, create_wiki_page, update_wiki_page

Uploads

upload_markdown, download_attachment

GraphQL

execute_graphql_query, execute_graphql_mutation

Users & Groups

get_users, list_group_members, list_namespaces, list_events

Opt-in

api_request (raw REST), orbit_query (GitLab Orbit)

Health

health_check (optionally verifies GitLab connectivity and auth)

During initialize, the server also sends MCP instructions: a short briefing on ID formats, token-saving review and CI workflows, gitlab_discover_tools, untrusted content, and the active permission mode, project scope, and toolsets.

See docs/tools.md for usage details and docs/tools-index.md for the generated complete registry.

Policy & Security

The policy engine controls which tools are available at registration time:

# Read-only mode — exposes only read and GraphQL query capabilities
GITLAB_PERMISSION_MODE=readonly

# Modify mode — allows read/write/admin, but hides delete-capability tools
GITLAB_PERMISSION_MODE=modify

# Deprecated legacy kill switch; true takes precedence and forces readonly
GITLAB_READ_ONLY_MODE=true

# Disable specific capability classes without going fully read-only
GITLAB_DISABLED_CAPABILITIES=delete,graphql

# Only expose specific tools (supports with or without gitlab_ prefix)
GITLAB_ALLOWED_TOOLS=get_project,list_merge_requests,get_merge_request

# Or select compact domain presets (multiple values form a union)
GITLAB_TOOLSETS=core,wiki

# Opt in only for clients that still call legacy duplicate names
GITLAB_ENABLE_COMPATIBILITY_ALIASES=true

# Sensitive variable administration is hidden until explicitly enabled
GITLAB_ENABLE_CI_VARIABLE_TOOLS=true
# Optional second gate; callers must also pass include_value=true
GITLAB_ALLOW_CI_VARIABLE_VALUES=false

# Group Dependency Proxy administration is also opt-in
GITLAB_ENABLE_DEPENDENCY_PROXY_TOOLS=true

# Block tools by regex pattern
GITLAB_DENIED_TOOLS_REGEX=^gitlab_(delete|create)_

# Restrict to specific projects
GITLAB_ALLOWED_PROJECT_IDS=123,456,789

# Legacy compatibility setting; raw GraphQL remains disabled in project-scoped mode
GITLAB_ALLOW_GRAPHQL_WITH_PROJECT_SCOPE=false

# Disable feature groups
USE_PIPELINE=false
USE_GITLAB_WIKI=false

The two sensitive tool families use two independent gates. Enabling a family does not add it to the default core registry; select its toolset (or all) as well:

GITLAB_TOOLSETS=core,ci-variables,dependency-proxy
GITLAB_ENABLE_CI_VARIABLE_TOOLS=true
GITLAB_ENABLE_DEPENDENCY_PROXY_TOOLS=true

Unsafe or invalid GITLAB_DENIED_TOOLS_REGEX patterns fail startup.

In modify mode, raw GraphQL mutation tools remain available for updates, but the server parses each document and blocks mutation-root fields containing deletion or teardown verbs such as delete, destroy, remove, purge, erase, revoke, unprotect, or stop. Aliases and fragment expansion cannot bypass the check, and documents that cannot be verified fail closed.

GITLAB_ALLOWED_PROJECT_IDS is a strict resource boundary, not just a default project. Project-scoped tools validate every supplied source, target, and parent project ID. Safe global list/search tools return only allowed projects (global code search is executed once per allowed project), while group-wide, namespace-wide, user-wide, event-wide, fork, and unscoped create operations are hidden. Todo reads are filtered and a single todo is verified before mutation. Raw GraphQL executors are always hidden because an arbitrary document cannot be proven project-safe; project-bound Work Item tools remain available and enforce the same allowlist. The legacy GITLAB_ALLOW_GRAPHQL_WITH_PROJECT_SCOPE variable is retained for configuration compatibility but cannot override this boundary.

Configuration

All configuration is done through environment variables. Key settings:

For file-based loading, .env is loaded by default. You can override it with:

node dist/index.js --env-file .env.local
node dist/http.js --env-file=.env.production

Area

Variable

Default

Description

GitLab API

GITLAB_API_URL

https://gitlab.com/api/v4

Base API URL. Supports comma-separated multi-instance URLs.

GitLab API

GITLAB_PERSONAL_ACCESS_TOKEN

—

Static default token used when REMOTE_AUTHORIZATION=false.

GitLab API

GITLAB_JOB_TOKEN

—

Static CI job token fallback when no personal access token is configured.

Remote Auth

REMOTE_AUTHORIZATION

false

Require per-request token headers in HTTP mode (disables fallback token chain).

Remote Auth

ENABLE_DYNAMIC_API_URL

false

Require X-GitLab-API-URL per request. Requires REMOTE_AUTHORIZATION=true.

Remote Auth

GITLAB_MCP_OAUTH

false

Enable stateless MCP OAuth. Requires a pre-registered app, public URL, and shared state secret.

Remote Auth

GITLAB_OAUTH_APP_ID

—

Application ID of the pre-registered GitLab OAuth app used by MCP OAuth.

Remote Auth

GITLAB_MCP_OAUTH_STATE_SECRET

—

Shared 32–64 byte base64(url) master key for stateless OAuth values.

HTTP Server

HTTP_HOST

127.0.0.1

HTTP bind host (0.0.0.0 for external access).

HTTP Server

HTTP_PORT

3333

HTTP server port.

HTTP Server

MCP_SERVER_URL

—

Public base URL used when HTTP download tools return proxy URLs.

HTTP Server

HTTP_JSON_ONLY

false

Force JSON-only responses (no streaming framing).

HTTP Server

MCP_HTTP_MAX_BODY_BYTES

2097152

Largest JSON request body in bytes (64 KiB to 50 MiB).

HTTP Server

SSE

false

Enable legacy SSE endpoints (/sse, /messages). Not compatible with remote auth.

Sessions

SESSION_TIMEOUT_SECONDS

3600

Idle session timeout in HTTP mode.

Sessions

OAUTH_STATELESS_MODE

false

Use stateless Streamable HTTP transports; clients must send auth on every request.

Sessions

MAX_SESSIONS

1000

Maximum concurrent sessions (503 when reached).

Sessions

MAX_REQUESTS_PER_MINUTE

300

Per-session rate limit (429 when exceeded).

Policy

GITLAB_PERMISSION_MODE

full

readonly allows reads only; modify blocks delete capabilities; full allows all capabilities.

Policy

GITLAB_READ_ONLY_MODE

false

Deprecated kill switch. When true, overrides GITLAB_PERMISSION_MODE and forces readonly.

Policy

GITLAB_ALLOWED_PROJECT_IDS

—

Restrict access to specific GitLab project IDs.

Policy

GITLAB_ALLOWED_TOOLS

—

Tool allowlist (supports names with or without gitlab_ prefix).

Policy

GITLAB_TOOLSETS

all

Full registry by default; use presets like core, merge-requests, issues, or pipelines to reduce it.

Policy

GITLAB_DISABLED_CAPABILITIES

—

Capability denylist. Valid values: read, write, delete, admin, graphql.

Policy

GITLAB_ENABLE_CI_VARIABLE_TOOLS

false

Second gate for CI/CD and schedule variable tools; also select ci-variables or all.

Policy

GITLAB_ALLOW_CI_VARIABLE_VALUES

false

Allow values only when a list/get call also passes include_value=true.

Policy

GITLAB_ENABLE_DEPENDENCY_PROXY_TOOLS

false

Second gate for Dependency Proxy tools; also select dependency-proxy or all.

Policy

GITLAB_DENIED_TOOLS_REGEX

—

Regex denylist for tool names.

Policy

GITLAB_ALLOW_GRAPHQL_WITH_PROJECT_SCOPE

false

Deprecated compatibility setting; raw GraphQL stays disabled in project-scoped mode.

Auth Extensions

GITLAB_USE_OAUTH

false

Enable OAuth 2.0 PKCE flow.

Auth Extensions

GITLAB_OAUTH_SCOPES

mode-dependent

OAuth scopes advertised/requested by local OAuth and MCP OAuth.

Auth Extensions

GITLAB_TOKEN_SCRIPT

—

Resolve token from an external script.

Auth Extensions

GITLAB_TOKEN_FILE

—

Resolve token from a local file.

Auth Extensions

GITLAB_AUTH_COOKIE_PATH

—

Enable cookie-jar based session auth from Netscape cookie file.

Output

GITLAB_RESPONSE_MODE

json

Response format; prefer compact-json for agent-facing deployments.

Output

GITLAB_MAX_RESPONSE_BYTES

200000

Max response payload (1KB–2MB), oversized payloads are truncated safely.

Output

GITLAB_MAX_LOCAL_FILE_BYTES

250000000

Max size for files saved locally by download tools such as job artifacts.

Output

GITLAB_LOCAL_FILE_ROOTS

current working directory

Comma-separated roots allowed for stdio local uploads and artifact writes.

Output

GITLAB_DOWNLOAD_TOKEN_SECRET

random per process

Random 32+ character secret for short-lived download URLs; set this for multi-replica deployments.

Output

GITLAB_DOWNLOAD_TOKEN_TTL_SECONDS

300

Lifetime of generated HTTP download proxy URLs.

Output

GITLAB_HTTP_TIMEOUT_MS

20000

Upstream GitLab HTTP timeout (1s–120s).

Output

GITLAB_HTTP_MAX_RETRIES

2

Retries for idempotent GETs on 429/502/503/504; mutations are never retried.

Output

GITLAB_HTTP_RETRY_BASE_MS

250

Initial exponential delay for retryable GETs without Retry-After.

Output

GITLAB_HTTP_RETRY_MAX_DELAY_MS

10000

Maximum accepted retry delay; longer Retry-After values stop retrying.

Output

GITLAB_ERROR_DETAIL_MODE

safe/full

Error verbosity (safe by default in production, full otherwise).

Network/TLS

HTTP_PROXY, HTTPS_PROXY, NO_PROXY

—

Proxy settings for outbound GitLab requests, including per-host proxy bypass rules.

Network/TLS

GITLAB_CA_CERT_PATH

—

Custom CA certificate path (PEM).

Network/TLS

GITLAB_CLOUDFLARE_BYPASS

false

Add browser-like headers for Cloudflare-protected instances.

Network/TLS

GITLAB_USER_AGENT

—

Custom User-Agent for GitLab requests.

See docs/configuration.md for the complete reference.

Authentication Methods

Authentication behavior depends on mode:

  1. REMOTE_AUTHORIZATION=true (HTTP strong mode) Each request must include Authorization: Bearer <token>, Private-Token: <token>, or Job-Token: <token>. When ENABLE_DYNAMIC_API_URL=true, each request must also include X-GitLab-API-URL.

  2. REMOTE_AUTHORIZATION=false (default mode) The server resolves credentials in this order: GITLAB_PERSONAL_ACCESS_TOKEN -> GITLAB_JOB_TOKEN -> OAuth PKCE (GITLAB_USE_OAUTH=true) -> GITLAB_TOKEN_SCRIPT -> GITLAB_TOKEN_FILE.

Cookie-based auth (GITLAB_AUTH_COOKIE_PATH) is applied independently via a cookie jar and can work with or without a token.

See docs/authentication.md for setup guides.

Development

pnpm dev           # stdio mode with hot-reload
pnpm dev:http      # HTTP mode with hot-reload
pnpm test          # Run tests
pnpm test:live     # Run opt-in read-only checks against a real GitLab instance
pnpm test:watch    # Run tests in watch mode
pnpm lint          # Lint
pnpm typecheck     # Type check
pnpm inspector     # Launch MCP Inspector

Project Structure

See docs/architecture.md for detailed design documentation.

Documentation

Acknowledgements

This repository references and learns from parts of the implementation in zereight/gitlab-mcp. Thanks to the maintainers and contributors for their work.

License

MIT

Available Tools

268 tools
gitlab_approve_deploymentApprove or Reject DeploymentA

Approve or reject a blocked deployment to a protected environment. Approving can let a production deploy proceed. Premium/Ultimate.

Inputs: status (required), deployment_id (required), comment, project_id, +1 more.

gitlab_approve_merge_requestApprove Merge RequestC

Approve a merge request.

Inputs: merge_request_iid (required), sha, project_id, approval_password.

gitlab_bulk_publish_draft_notesBulk Publish Draft NotesA

Publish all merge-request draft notes. On GitLab 19.2+ it can also set your reviewer state (requested_changes or reviewed; not a formal approval) and post a summary note, even with no drafts.

Inputs: merge_request_iid (required), note, internal, project_id, +1 more.

gitlab_cancel_pipelineCancel PipelineC

Cancel a running pipeline.

Inputs: pipeline_id (required), project_id.

gitlab_cancel_pipeline_jobCancel Pipeline JobB

Cancel one running job. force=true also cancels a job stuck in the canceling state.

Inputs: job_id (required), force, project_id.

gitlab_confirm_vulnerabilityConfirm VulnerabilityC

Mark a vulnerability of project_id as confirmed, optionally with a comment. Ultimate.

Inputs: vulnerability_id (required), comment, project_id.

gitlab_convert_work_item_typeConvert Work Item TypeC

Convert a work item to a different type.

Inputs: iid (required), new_type (required), project_id.

gitlab_create_branchCreate BranchB

Create a new branch from an existing ref.

Inputs: branch (required), ref, project_id.

gitlab_create_commit_statusCreate Commit StatusC

Create or update the status of a commit.

Inputs: sha (required), state (required), ref, name, +6 more.

gitlab_create_deploymentCreate DeploymentB

Record a deployment of a commit to an environment, for deploys performed outside GitLab CI/CD. The environment is created if it does not exist.

Inputs: ref (required), sha (required), tag (required), status (required), +2 more.

gitlab_create_draft_noteCreate Draft NoteC

Create a merge-request draft note.

Inputs: body (required), merge_request_iid (required), position, project_id, +1 more.

gitlab_create_environmentCreate EnvironmentB

Create a project environment with optional external URL, tier, description, Kubernetes settings, and auto-stop behavior.

Inputs: name (required), tier, project_id, description, +5 more.

gitlab_create_groupCreate GroupC

Create a new GitLab group or subgroup.

Inputs: name (required), path (required), parent_id, visibility, +1 more.

gitlab_create_group_iterationCreate Group IterationB

Create an iteration in a group. Recent GitLab versions require iterations_cadence_id of a manual (non-automatic) cadence. Dates use YYYY-MM-DD. Premium/Ultimate.

Inputs: group_id (required), title, due_date, start_date, +2 more.

gitlab_create_group_iteration_cadenceCreate Group Iteration CadenceA

Create an iteration cadence. automatic cadences schedule iterations from start_date, duration_in_weeks, and iterations_in_advance; manual cadences let you create iterations yourself. Premium/Ultimate.

Inputs: title (required), active (required), group_id (required), automatic (required), +5 more.

gitlab_create_group_milestoneCreate Group MilestoneB

Create a group milestone that projects and subgroups in the group can use. Dates use YYYY-MM-DD.

Inputs: title (required), group_id (required), due_date, start_date, +1 more.

gitlab_create_group_wiki_pageCreate Group Wiki PageD

Create a group wiki page.

Inputs: title (required), content (required), group_id (required), format.

gitlab_create_issueCreate IssueD

Create a new issue.

Inputs: title (required), labels, due_date, issue_type, +5 more.

gitlab_create_issue_emoji_reactionCreate Issue Emoji ReactionC

Add an emoji reaction to an issue, for example thumbsup, rocket, or eyes.

Inputs: name (required), issue_iid (required), project_id.

gitlab_create_issue_noteCreate Issue NoteC

Create issue comment (top-level or discussion note).

Inputs: body (required), issue_iid (required), created_at, project_id, +1 more.

gitlab_create_issue_note_emoji_reactionCreate Issue Note Emoji ReactionC

Add an emoji reaction to an issue note. Pass discussion_id for discussion replies.

Inputs: name (required), note_id (required), issue_iid (required), project_id, +1 more.

gitlab_create_labelCreate LabelD

Create a label.

Inputs: name (required), color (required), priority, project_id, +1 more.

gitlab_create_merge_requestCreate Merge RequestD

Create a merge request.

Inputs: title (required), source_branch (required), target_branch (required), draft, +10 more.

gitlab_create_merge_request_discussion_noteCreate MR Discussion NoteC

Add note to existing MR discussion thread.

Inputs: body (required), discussion_id (required), merge_request_iid (required), created_at, +1 more.

gitlab_create_merge_request_emoji_reactionCreate Merge Request Emoji ReactionA

Add an emoji reaction to a merge request, for example thumbsup, rocket, or eyes.

Inputs: name (required), merge_request_iid (required), project_id.

gitlab_create_merge_request_noteCreate Merge Request NoteC

Create a top-level MR note.

Inputs: body (required), merge_request_iid (required), project_id.

gitlab_create_merge_request_note_emoji_reactionCreate MR Note Emoji ReactionC

Add an emoji reaction to a merge request note. Pass discussion_id for discussion replies.

Inputs: name (required), note_id (required), merge_request_iid (required), project_id, +1 more.

gitlab_create_merge_request_threadCreate Merge Request ThreadC

Create a new MR discussion thread (supports diff positions).

Inputs: body (required), merge_request_iid (required), position, created_at, +1 more.

gitlab_create_milestoneCreate MilestoneD

Create a milestone.

Inputs: title (required), due_date, project_id, start_date, +1 more.

gitlab_create_noteCreate NoteC

Create a note on an issue or merge request.

Inputs: body (required), noteable_iid (required), noteable_type (required), project_id.

gitlab_create_or_update_fileCreate Or Update FileC

Create or update one file in repository.

Inputs: branch (required), content (required), file_path (required), commit_message (required), +9 more.

gitlab_create_pipelineCreate PipelineC

Trigger a new pipeline.

Inputs: ref (required), inputs, variables, project_id.

gitlab_create_pipeline_scheduleCreate Pipeline ScheduleA

Create a recurring pipeline from a cron expression. cron_timezone defaults to UTC; use a full ref such as refs/heads/main when a branch and tag share a name. inputs ([{name, value}]) need GitLab 18.1+.

Inputs: ref (required), cron (required), description (required), active, +3 more.

gitlab_create_pipeline_triggerCreate Pipeline Trigger TokenA

Create a pipeline trigger token for external systems. The response contains the new token once; store it securely because list, get, and update never return it.

Inputs: description (required), expires_at, project_id.

gitlab_create_project_snippetCreate Project SnippetB

Create a project snippet with 1 to 10 files. visibility defaults to the project setting; public snippets are visible to anyone who can see the project.

Inputs: files (required), title (required), project_id, visibility, +1 more.

gitlab_create_releaseCreate ReleaseC

Create a release.

Inputs: tag_name (required), ref, name, assets, +5 more.

gitlab_create_release_evidenceCreate Release EvidenceB

Create evidence for an existing release.

Inputs: tag_name (required), project_id.

gitlab_create_repositoryCreate RepositoryC

Create a new GitLab project/repository.

Inputs: name (required), path, visibility, description, +3 more.

gitlab_create_tagCreate TagB

Create a repository tag from a branch, commit SHA, or another tag.

Inputs: ref (required), tag_name (required), message, project_id.

gitlab_create_timeline_eventCreate Timeline EventB

Create an incident timeline event with optional known GitLab incident timeline tags.

Inputs: note (required), occurred_at (required), incident_iid (required), tag_names, +1 more.

gitlab_create_webhookCreate WebhookB

Create a project or group webhook. GitLab then sends the selected event payloads to url, so only target endpoints you trust. token and url are redacted from errors and never returned.

Inputs: url (required), name, token, group_id, +24 more.

gitlab_create_wiki_pageCreate Wiki PageD

Create a wiki page.

Inputs: title (required), content (required), format, project_id.

gitlab_create_work_itemCreate Work ItemC

Create a work item of type issue, task, incident, test_case, epic, key_result, objective, requirement, or ticket.

Inputs: title (required), type, labels, weight, +10 more.

gitlab_create_work_item_emoji_reactionCreate Work Item Emoji ReactionC

Add an emoji reaction to a work item, for example thumbsup, rocket, or eyes.

Inputs: iid (required), name (required), project_id.

gitlab_create_work_item_noteCreate Work Item NoteC

Add a note or threaded reply to a work item.

Inputs: iid (required), body (required), internal, project_id, +1 more.

gitlab_create_work_item_note_emoji_reactionCreate Work Item Note Emoji ReactionC

Add an emoji reaction to a work item note by GraphQL note_id.

Inputs: iid (required), name (required), note_id (required), project_id.

gitlab_delete_branchDelete BranchA
Destructive

Delete a repository branch permanently. Requires branch. Recommended pre-check: gitlab_get_branch.

Inputs: branch (required), project_id.

gitlab_delete_deploymentDelete DeploymentA
Destructive

Delete a deployment record permanently. GitLab refuses running deployments and the latest deployment of an environment. Requires deployment_id. Recommended pre-check: gitlab_get_deployment.

Inputs: deployment_id (required), project_id.

gitlab_delete_draft_noteDelete Draft NoteA
Destructive

Delete a merge-request draft note permanently. Irreversible. Requires merge_request_iid and draft_note_id. Recommended pre-check: gitlab_get_draft_note or gitlab_list_draft_notes.

Inputs: draft_note_id (required), merge_request_iid (required), project_id.

gitlab_delete_environmentDelete EnvironmentA
Destructive

Delete a stopped environment permanently. Irreversible. Requires environment_id. Recommended pre-check: gitlab_get_environment, then gitlab_stop_environment.

Inputs: environment_id (required), project_id.

gitlab_delete_group_iterationDelete Group IterationA
Destructive

Delete a group iteration permanently; issues lose the iteration. Irreversible. Requires group_id and iteration_id. Recommended pre-check: gitlab_list_group_iterations. Premium/Ultimate.

Inputs: group_id (required), iteration_id (required).

gitlab_delete_group_iteration_cadenceDelete Group Iteration CadenceA
Destructive

Delete an iteration cadence and its iterations permanently. Irreversible. Requires group_id and iteration_cadence_id. Recommended pre-check: gitlab_list_group_iteration_cadences. Premium/Ultimate.

Inputs: group_id (required), iteration_cadence_id (required).

gitlab_delete_group_milestoneDelete Group MilestoneA
Destructive

Delete a group milestone permanently; issues and merge requests lose the milestone. Irreversible. Requires group_id and milestone_id. Recommended pre-check: gitlab_get_group_milestone.

Inputs: group_id (required), milestone_id (required).

gitlab_delete_group_wiki_pageDelete Group Wiki PageA
Destructive

Delete a group wiki page permanently. Irreversible. Requires group_id and slug. Recommended pre-check: gitlab_get_group_wiki_page or gitlab_list_group_wiki_pages.

Inputs: slug (required), group_id (required).

gitlab_delete_issueDelete IssueA
Destructive

Delete an issue permanently. Irreversible. Requires issue_iid. Recommended pre-check: gitlab_get_issue.

Inputs: issue_iid (required), project_id.

gitlab_delete_issue_emoji_reactionDelete Issue Emoji ReactionA
Destructive

Delete an emoji reaction from an issue permanently. Irreversible for that reaction. Requires issue_iid and award_id. Recommended pre-check: gitlab_list_issue_emoji_reactions.

Inputs: award_id (required), issue_iid (required), project_id.

gitlab_delete_issue_note_emoji_reactionDelete Issue Note Emoji ReactionA
Destructive

Delete an emoji reaction from an issue note permanently. Irreversible for that reaction. Requires issue_iid, note_id, and award_id. Recommended pre-check: gitlab_list_issue_note_emoji_reactions.

Inputs: note_id (required), award_id (required), issue_iid (required), project_id, +1 more.

gitlab_delete_labelDelete LabelA
Destructive

Delete a label permanently. Irreversible. Requires name or label_id. Recommended pre-check: gitlab_get_label or gitlab_list_labels.

Inputs: name, label_id, project_id.

gitlab_delete_merge_request_discussion_noteDelete MR Discussion NoteA
Destructive

Delete an MR discussion note permanently. Irreversible. Requires merge_request_iid, discussion_id, and note_id. Recommended pre-check: gitlab_list_merge_request_discussions.

Inputs: note_id (required), discussion_id (required), merge_request_iid (required), project_id.

gitlab_delete_merge_request_emoji_reactionDelete Merge Request Emoji ReactionA
Destructive

Delete an emoji reaction from a merge request permanently. Irreversible for that reaction. Requires merge_request_iid and award_id. Recommended pre-check: gitlab_list_merge_request_emoji_reactions.

Inputs: award_id (required), merge_request_iid (required), project_id.

gitlab_delete_merge_request_noteDelete Merge Request NoteA
Destructive

Delete a top-level MR note permanently. Irreversible. Requires merge_request_iid and note_id. Recommended pre-check: gitlab_get_merge_request_note or gitlab_list_merge_request_notes.

Inputs: note_id (required), merge_request_iid (required), project_id.

gitlab_delete_merge_request_note_emoji_reactionDelete MR Note Emoji ReactionB
Destructive

Delete an emoji reaction from a merge request note permanently. Irreversible for that reaction. Requires merge_request_iid, note_id, and award_id. Recommended pre-check: gitlab_list_merge_request_note_emoji_reactions.

Inputs: note_id (required), award_id (required), merge_request_iid (required), project_id, +1 more.

gitlab_delete_milestoneDelete MilestoneA
Destructive

Delete a milestone permanently. Irreversible. Requires milestone_id. Recommended pre-check: gitlab_get_milestone or gitlab_list_milestones.

Inputs: milestone_id (required), project_id.

gitlab_delete_pipelineDelete PipelineA
Destructive

Delete a pipeline and its job logs, artifacts, and test reports permanently. Irreversible. Requires pipeline_id. Recommended pre-check: gitlab_get_pipeline.

Inputs: pipeline_id (required), project_id.

gitlab_delete_pipeline_scheduleDelete Pipeline ScheduleA
Destructive

Delete a pipeline schedule and its variables permanently. Irreversible; prefer gitlab_update_pipeline_schedule with active=false to pause. Requires pipeline_schedule_id.

Inputs: pipeline_schedule_id (required), project_id.

gitlab_delete_pipeline_triggerDelete Pipeline Trigger TokenA
Destructive

Delete a pipeline trigger token permanently; systems that use it can no longer start pipelines. Requires trigger_id. Recommended pre-check: gitlab_list_pipeline_triggers.

Inputs: trigger_id (required), project_id.

gitlab_delete_project_snippetDelete Project SnippetA
Destructive

Delete a project snippet and all of its files permanently. Irreversible. Requires snippet_id. Recommended pre-check: gitlab_get_project_snippet.

Inputs: snippet_id (required), project_id.

gitlab_delete_releaseDelete ReleaseA
Destructive

Delete the release record for tag_name permanently. Irreversible for the release entry. Requires tag_name. Recommended pre-check: gitlab_get_release or gitlab_list_releases.

Inputs: tag_name (required), project_id.

gitlab_delete_review_app_environmentsDelete Review App EnvironmentsA
Destructive

Find stopped review-app environments older than before (default 30 days ago) and, with dry_run=false, schedule their deletion one week later. dry_run defaults to true and only previews.

Inputs: limit, before, dry_run, project_id.

gitlab_delete_tagDelete TagA
Destructive

Delete a repository tag permanently. Irreversible for tag_name. Requires tag_name. Recommended pre-check: gitlab_get_tag or gitlab_list_tags.

Inputs: tag_name (required), project_id.

gitlab_delete_webhookDelete WebhookA
Destructive

Delete a project or group webhook permanently; GitLab stops sending its events. Irreversible. Requires hook_id. Recommended pre-check: gitlab_list_webhooks.

Inputs: hook_id (required), group_id, project_id.

gitlab_delete_wiki_pageDelete Wiki PageA
Destructive

Delete a wiki page permanently. Irreversible. Requires slug. Recommended pre-check: gitlab_get_wiki_page or gitlab_list_wiki_pages.

Inputs: slug (required), project_id.

gitlab_delete_work_item_emoji_reactionDelete Work Item Emoji ReactionA
Destructive

Remove the current user's emoji reaction from a work item by emoji name. Requires iid and name.

Inputs: iid (required), name (required), project_id.

gitlab_delete_work_item_note_emoji_reactionDelete Work Item Note Emoji ReactionA
Destructive

Remove the current user's emoji reaction from a work item note by GraphQL note_id and emoji name.

Inputs: iid (required), name (required), note_id (required), project_id.

gitlab_discover_toolsDiscover GitLab ToolsB
Read-onlyIdempotent

Search the complete tool registry without mutating session state. Results explain whether each tool is currently enabled.

Inputs: limit, query, toolset, capability, +1 more.

gitlab_dismiss_vulnerabilityDismiss VulnerabilityB

Dismiss a vulnerability of project_id with a reason (acceptable_risk, false_positive, used_in_tests, mitigating_control, not_applicable) and an optional comment. Ultimate.

Inputs: reason (required), vulnerability_id (required), comment, project_id.

gitlab_download_attachmentDownload AttachmentC
Read-onlyIdempotent

Download attachment by URL/path and return base64.

Inputs: secret, filename, project_id, url_or_path.

gitlab_download_job_artifactsDownload Job ArtifactsB
Read-onlyIdempotent

Download the full job artifacts archive as base64 content.

Inputs: job_id (required), project_id.

gitlab_download_job_artifacts_localDownload Job Artifacts LocalC

Download the full job artifacts archive to a local directory.

Inputs: job_id (required), local_path, project_id.

gitlab_download_release_assetDownload Release AssetB
Read-onlyIdempotent

Download a release asset using its direct asset path.

Inputs: tag_name (required), direct_asset_path (required), project_id.

gitlab_erase_pipeline_jobErase Pipeline JobA
Destructive

Erase a finished job's log and artifacts permanently; the job record remains. Irreversible. Requires job_id. Recommended pre-check: gitlab_get_pipeline_job.

Inputs: job_id (required), project_id.

gitlab_execute_graphql_mutationExecute GraphQL MutationA

Execute a GraphQL mutation. Readonly mode disables this tool; modify mode rejects destructive mutation-root fields.

Inputs: query (required), variables.

gitlab_execute_graphql_queryExecute GraphQL QueryC
Read-onlyIdempotent

Execute read-only GraphQL query.

Inputs: query (required), variables.

gitlab_fork_repositoryFork RepositoryC

Fork an existing project to another namespace.

Inputs: name, path, namespace, project_id, +4 more.

gitlab_get_branchGet BranchB
Read-onlyIdempotent

Get details for one repository branch.

Inputs: branch (required), project_id.

gitlab_get_branch_diffsGet Branch DiffsC
Read-onlyIdempotent

Compare two branches/refs and return diffs.

Inputs: to (required), from (required), straight, project_id, +1 more.

gitlab_get_ci_catalog_resourceGet CI/CD Catalog ResourceB
Read-onlyIdempotent

Get one GitLab CI/CD Catalog resource, including paginated versions and components.

Inputs: id, full_path, version_after, version_limit, +4 more.

gitlab_get_commitGet CommitC
Read-onlyIdempotent

Get one commit by SHA.

Inputs: sha (required), stats, project_id.

gitlab_get_commit_diffGet Commit DiffC
Read-onlyIdempotent

Get diff for one commit.

Inputs: sha (required), page, per_page, full_diff, +1 more.

gitlab_get_deploymentGet DeploymentB
Read-onlyIdempotent

Get one deployment by ID.

Inputs: deployment_id (required), project_id.

gitlab_get_draft_noteGet Draft NoteB
Read-onlyIdempotent

Get a single merge-request draft note.

Inputs: draft_note_id (required), merge_request_iid (required), project_id.

gitlab_get_environmentGet EnvironmentC
Read-onlyIdempotent

Get one environment by ID.

Inputs: environment_id (required), project_id.

gitlab_get_file_blameGet File BlameA
Read-onlyIdempotent

Get git blame for a repository file at a given ref. Optional line range must provide both range_start and range_end.

Inputs: ref (required), file_path (required), range_end, project_id, +1 more.

gitlab_get_file_contentsGet File ContentsC
Read-onlyIdempotent

Get a file in repository by path and ref.

Inputs: file_path (required), ref, project_id, decode_base64.

gitlab_get_group_milestoneGet Group MilestoneC
Read-onlyIdempotent

Get one group milestone by its ID.

Inputs: group_id (required), milestone_id (required).

gitlab_get_group_milestone_burndown_eventsGet Group Milestone Burndown EventsC
Read-onlyIdempotent

Get burndown chart events for a group milestone. Premium/Ultimate.

Inputs: group_id (required), milestone_id (required), page, per_page.

gitlab_get_group_wiki_pageGet Group Wiki PageC
Read-onlyIdempotent

Get group wiki page by slug.

Inputs: slug (required), group_id (required), version, render_html.

gitlab_get_issueGet IssueC
Read-onlyIdempotent

Get issue by IID.

Inputs: issue_iid (required), project_id, full_response.

gitlab_get_job_artifact_fileGet Job Artifact FileC
Read-onlyIdempotent

Return one file from a job artifacts archive as inline UTF-8 or base64 content.

Inputs: job_id (required), artifact_path (required), project_id.

gitlab_get_job_artifact_file_localGet Job Artifact File LocalC

Save one file from a job artifacts archive to a local directory.

Inputs: job_id (required), artifact_path (required), local_path, project_id.

gitlab_get_labelGet LabelC
Read-onlyIdempotent

Get one label by ID.

Inputs: label_id (required), project_id, include_ancestor_groups.

gitlab_get_merge_requestGet Merge RequestC
Read-onlyIdempotent

Get one merge request.

Inputs: project_id, source_branch, include_summaries, merge_request_iid.

gitlab_get_merge_request_approval_stateGet Merge Request Approval StateC
Read-onlyIdempotent

Get approval state for MR.

Inputs: merge_request_iid (required), project_id.

gitlab_get_merge_request_code_contextGet Merge Request Code ContextC
Read-onlyIdempotent

High-signal MR code context with include/exclude filters, sorting, and token-budgeted output.

Inputs: merge_request_iid (required), mode, sort, languages, +8 more.

gitlab_get_merge_request_conflictsGet Merge Request ConflictsC
Read-onlyIdempotent

Get conflict details for MR.

Inputs: merge_request_iid (required), project_id.

gitlab_get_merge_request_diffsGet Merge Request DiffsC
Read-onlyIdempotent

Get MR diffs with changed files.

Inputs: merge_request_iid (required), view, project_id, excluded_file_patterns.

gitlab_get_merge_request_discussionGet Merge Request DiscussionA
Read-onlyIdempotent

Get one MR discussion thread by discussion_id with all its notes and resolution state. Use gitlab_list_merge_request_discussions to find IDs.

Inputs: discussion_id (required), merge_request_iid (required), project_id.

gitlab_get_merge_request_file_diffGet Merge Request File DiffB
Read-onlyIdempotent

Step 2 for large MR review: fetch diffs for specific files from a merge request.

Inputs: file_paths (required), unidiff, project_id, source_branch, +1 more.

gitlab_get_merge_request_noteGet Merge Request NoteB
Read-onlyIdempotent

Get a single MR note.

Inputs: note_id (required), merge_request_iid (required), project_id.

gitlab_get_merge_request_versionGet Merge Request VersionC
Read-onlyIdempotent

Get one MR diff version.

Inputs: version_id (required), merge_request_iid (required), unidiff, project_id.

gitlab_get_milestoneGet MilestoneC
Read-onlyIdempotent

Get a milestone by ID.

Inputs: milestone_id (required), project_id.

gitlab_get_milestone_burndown_eventsGet Milestone Burndown EventsC
Read-onlyIdempotent

List burndown events for a milestone.

Inputs: milestone_id (required), page, per_page, project_id.

gitlab_get_milestone_issueGet Milestone IssuesC
Read-onlyIdempotent

List issues assigned to a milestone.

Inputs: milestone_id (required), project_id.

gitlab_get_milestone_merge_requestsGet Milestone Merge RequestsC
Read-onlyIdempotent

List merge requests assigned to a milestone.

Inputs: milestone_id (required), page, per_page, project_id.

gitlab_get_namespaceGet NamespaceB
Read-onlyIdempotent

Get namespace by ID or path.

Inputs: namespace_id, namespace_id_or_path.

gitlab_get_pipelineGet PipelineC
Read-onlyIdempotent

Get one pipeline.

Inputs: pipeline_id (required), project_id.

gitlab_get_pipeline_jobGet Pipeline JobC
Read-onlyIdempotent

Get one job by job ID.

Inputs: job_id (required), project_id.

gitlab_get_pipeline_job_outputGet Pipeline Job OutputB
Read-onlyIdempotent

Get a bounded, untrusted job trace window (at most 1,000 lines from the end), or pass search (a substring or list of substrings, case-insensitive by default) to return only matching lines with context from the loaded log.

Inputs: job_id (required), limit, offset, search, +4 more.

gitlab_get_pipeline_scheduleGet Pipeline ScheduleA
Read-onlyIdempotent

Get one pipeline schedule with its last pipeline, inputs, and variable metadata. Variable values require GITLAB_ALLOW_CI_VARIABLE_VALUES=true and include_variable_values=true.

Inputs: pipeline_schedule_id (required), project_id, include_variable_values.

gitlab_get_pipeline_test_reportGet Pipeline Test ReportA
Read-onlyIdempotent

Get the unit test report for a pipeline: totals plus each suite's test cases with status, timing, and stack traces. Pass test_case_status (for example ["failed","error"]) to keep only matching cases.

Inputs: pipeline_id (required), project_id, test_case_status.

gitlab_get_pipeline_test_report_summaryGet Pipeline Test Report SummaryA
Read-onlyIdempotent

Get per-suite test counts and totals for a pipeline without individual test cases. Use gitlab_get_pipeline_test_report for failures.

Inputs: pipeline_id (required), project_id.

gitlab_get_pipeline_triggerGet Pipeline Trigger TokenB
Read-onlyIdempotent

Get one pipeline trigger token's metadata. The token value is never returned.

Inputs: trigger_id (required), project_id.

gitlab_get_pipeline_variablesGet Pipeline VariablesA
Read-onlyIdempotent

List the variables a pipeline was started with. Values require GITLAB_ALLOW_CI_VARIABLE_VALUES=true and include_value=true.

Inputs: pipeline_id (required), page, per_page, project_id, +1 more.

gitlab_get_projectGet ProjectA
Read-onlyIdempotent

Get project details by ID or path.

Inputs: project_id.

gitlab_get_project_eventsGet Project EventsC
Read-onlyIdempotent

List events for a specific project.

Inputs: page, sort, after, action, +4 more.

gitlab_get_project_snippetGet Project SnippetA
Read-onlyIdempotent

Get a project snippet's metadata. Set include_content=true to also return the raw content of up to 10 files; ref overrides the snippet revision.

Inputs: snippet_id (required), ref, project_id, include_content.

gitlab_get_protected_branchGet Protected BranchC
Read-onlyIdempotent

Get one protected branch or wildcard rule.

Inputs: branch (required), project_id.

gitlab_get_protected_tagGet Protected TagB
Read-onlyIdempotent

Get one protected tag rule by tag name or wildcard.

Inputs: name (required), project_id.

gitlab_get_releaseGet ReleaseC
Read-onlyIdempotent

Get one release by tag name.

Inputs: tag_name (required), project_id, include_html_description.

gitlab_get_repository_treeGet Repository TreeB
Read-onlyIdempotent

List files and directories in a repository tree. For large trees pass pagination=keyset and follow next_page_token as page_token; offset page/per_page also work.

Inputs: ref, page, path, per_page, +4 more.

gitlab_get_runnerGet RunnerA
Read-onlyIdempotent

Get one runner's tag_list, run_untagged, locked, access_level, status, and version. The runner must be available to project_id; runner authentication tokens are never returned.

Inputs: runner_id (required), project_id.

gitlab_get_tagGet TagA
Read-onlyIdempotent

Get a repository tag by name.

Inputs: tag_name (required), project_id.

gitlab_get_tag_signatureGet Tag SignatureB
Read-onlyIdempotent

Get the X.509 signature for a signed repository tag.

Inputs: tag_name (required), project_id.

gitlab_get_timeline_eventsGet Timeline EventsB
Read-onlyIdempotent

List timeline events for an incident work item.

Inputs: incident_iid (required), project_id.

gitlab_get_userGet UserA
Read-onlyIdempotent

Get one user by ID.

Inputs: user_id (required).

gitlab_get_usersGet UsersC
Read-onlyIdempotent

Search users.

Inputs: page, active, search, per_page, +3 more.

gitlab_get_vulnerabilityGet VulnerabilityB
Read-onlyIdempotent

Get one vulnerability with its description, identifiers, links, and location. The vulnerability must belong to project_id. Ultimate.

Inputs: vulnerability_id (required), project_id.

gitlab_get_webhook_eventGet Webhook EventA
Read-onlyIdempotent

Find one webhook event by ID. Provide page when known, otherwise scans up to 500 recent events.

Inputs: hook_id (required), event_id (required), page, group_id, +1 more.

gitlab_get_wiki_pageGet Wiki PageC
Read-onlyIdempotent

Get wiki page by slug.

Inputs: slug (required), version, project_id, render_html.

gitlab_get_work_itemGet Work ItemB
Read-onlyIdempotent

Get a single work item with full widget details including status, hierarchy, labels, assignees, linked items, custom fields, and development data.

Inputs: iid (required), project_id.

gitlab_list_branchesList BranchesC
Read-onlyIdempotent

List repository branches.

Inputs: page, sort, regex, search, +2 more.

gitlab_list_ci_catalog_resourcesList CI/CD Catalog ResourcesB
Read-onlyIdempotent

List GitLab CI/CD Catalog resources with cursor pagination and catalog filters.

Inputs: sort, after, first, scope, +4 more.

gitlab_list_commitsList CommitsD
Read-onlyIdempotent

List commits in a project.

Inputs: all, page, path, order, +9 more.

gitlab_list_commit_statusesList Commit StatusesC
Read-onlyIdempotent

List statuses for a commit.

Inputs: sha (required), all, ref, name, +7 more.

gitlab_list_custom_field_definitionsList Custom Field DefinitionsA
Read-onlyIdempotent

List custom field definitions for a work item type, including field IDs, types, options, and supported work item types.

Inputs: project_id, work_item_type.

gitlab_list_deployment_merge_requestsList Deployment Merge RequestsB
Read-onlyIdempotent

List merge requests shipped with a deployment, for release notes and change tracking. Supports state, ordering, and pagination.

Inputs: deployment_id (required), page, sort, state, +3 more.

gitlab_list_deploymentsList DeploymentsC
Read-onlyIdempotent

List deployments in a project.

Inputs: ref, sha, page, sort, +7 more.

gitlab_list_draft_notesList Draft NotesC
Read-onlyIdempotent

List draft notes on a merge request.

Inputs: merge_request_iid (required), project_id.

gitlab_list_environmentsList EnvironmentsC
Read-onlyIdempotent

List environments in a project.

Inputs: name, page, search, states, +2 more.

gitlab_list_eventsList EventsC
Read-onlyIdempotent

List current user events.

Inputs: page, sort, after, scope, +4 more.

gitlab_list_group_iteration_cadencesList Group Iteration CadencesA
Read-onlyIdempotent

List a group's iteration cadences (GraphQL; no REST endpoint exists). Filters: active, automatic, title, duration_in_weeks, include_ancestor_groups. Returned IDs are cadence global IDs. Premium/Ultimate.

Inputs: group_id (required), title, active, automatic, +2 more.

gitlab_list_group_iterationsList Group IterationsD
Read-onlyIdempotent

List iterations for a group.

Inputs: group_id (required), page, state, search, +6 more.

gitlab_list_group_membersList Group MembersA
Read-onlyIdempotent

List direct group members by default, for example to find reviewers or assignees by name; set include_inheritance=true to include members inherited from parent groups.

Inputs: group_id (required), page, query, per_page, +3 more.

gitlab_list_group_merge_requestsList Group Merge RequestsA
Read-onlyIdempotent

List merge requests across every project in a group and its subgroups, with the same filters as gitlab_list_merge_requests. non_archived=true skips archived projects.

Inputs: group_id (required), wip, page, sort, +22 more.

gitlab_list_group_milestone_issuesList Group Milestone IssuesB
Read-onlyIdempotent

List issues assigned to a group milestone across the group's projects.

Inputs: group_id (required), milestone_id (required), page, per_page.

gitlab_list_group_milestone_merge_requestsList Group Milestone Merge RequestsB
Read-onlyIdempotent

List merge requests assigned to a group milestone across the group's projects.

Inputs: group_id (required), milestone_id (required), page, per_page.

gitlab_list_group_milestonesList Group MilestonesA
Read-onlyIdempotent

List milestones defined on a group. Supports iids, state, title, search, ancestor/descendant inclusion, and date filters.

Inputs: group_id (required), iids, page, state, +11 more.

gitlab_list_group_projectsList Group ProjectsC
Read-onlyIdempotent

List projects under a group.

Inputs: group_id (required), page, sort, topic, +14 more.

gitlab_list_group_wiki_pagesList Group Wiki PagesC
Read-onlyIdempotent

List wiki pages in a group.

Inputs: group_id (required), page, per_page, render_html, +1 more.

gitlab_list_issue_discussionsList Issue DiscussionsC
Read-onlyIdempotent

List issue discussions.

Inputs: issue_iid (required), page, per_page, project_id.

gitlab_list_issue_emoji_reactionsList Issue Emoji ReactionsC
Read-onlyIdempotent

List emoji reactions on an issue.

Inputs: issue_iid (required), page, per_page, project_id.

gitlab_list_issue_note_emoji_reactionsList Issue Note Emoji ReactionsC
Read-onlyIdempotent

List emoji reactions on an issue note. Pass discussion_id for discussion replies.

Inputs: note_id (required), issue_iid (required), page, per_page, +2 more.

gitlab_list_issuesList IssuesC
Read-onlyIdempotent

List issues in project.

Inputs: page, scope, state, labels, +17 more.

gitlab_list_job_artifactsList Job ArtifactsC
Read-onlyIdempotent

List files and directories inside a job artifacts archive.

Inputs: job_id (required), path, recursive, project_id.

gitlab_list_labelsList LabelsC
Read-onlyIdempotent

List project labels.

Inputs: page, search, per_page, project_id, +2 more.

gitlab_list_merge_request_changed_filesList Merge Request Changed FilesB
Read-onlyIdempotent

Step 1 for large MR review: return changed file metadata without diff content.

Inputs: project_id, source_branch, merge_request_iid, excluded_file_patterns.

gitlab_list_merge_request_diffsList Merge Request DiffsC
Read-onlyIdempotent

List detailed MR diffs (versions/changes view).

Inputs: merge_request_iid (required), page, unidiff, per_page, +1 more.

gitlab_list_merge_request_discussionsList Merge Request DiscussionsC
Read-onlyIdempotent

List MR discussions.

Inputs: merge_request_iid (required), page, per_page, project_id.

gitlab_list_merge_request_emoji_reactionsList Merge Request Emoji ReactionsC
Read-onlyIdempotent

List emoji reactions on a merge request.

Inputs: merge_request_iid (required), page, per_page, project_id.

gitlab_list_merge_request_note_emoji_reactionsList MR Note Emoji ReactionsB
Read-onlyIdempotent

List emoji reactions on a merge request note. Pass discussion_id for discussion replies.

Inputs: note_id (required), merge_request_iid (required), page, per_page, +2 more.

gitlab_list_merge_request_notesList Merge Request NotesC
Read-onlyIdempotent

List top-level notes for an MR.

Inputs: merge_request_iid (required), page, sort, order_by, +2 more.

gitlab_list_merge_request_pipelinesList Merge Request PipelinesC
Read-onlyIdempotent

List pipelines associated with a merge request.

Inputs: merge_request_iid (required), page, per_page, project_id.

gitlab_list_merge_requestsList Merge RequestsC
Read-onlyIdempotent

List merge requests for a project.

Inputs: wip, page, sort, scope, +21 more.

gitlab_list_merge_request_versionsList Merge Request VersionsC
Read-onlyIdempotent

List MR diff versions.

Inputs: merge_request_iid (required), project_id.

gitlab_list_milestonesList MilestonesC
Read-onlyIdempotent

List project milestones.

Inputs: iids, page, state, title, +6 more.

gitlab_list_namespacesList NamespacesC
Read-onlyIdempotent

List namespaces visible to user.

Inputs: page, owned, search, per_page.

gitlab_list_pipeline_jobsList Pipeline JobsD
Read-onlyIdempotent

List jobs in a pipeline.

Inputs: pipeline_id (required), page, scope, per_page, +2 more.

gitlab_list_pipelinesList PipelinesC
Read-onlyIdempotent

List pipelines for a project.

Inputs: ref, sha, page, sort, +10 more.

gitlab_list_pipeline_schedule_pipelinesList Pipeline Schedule PipelinesB
Read-onlyIdempotent

List pipelines triggered by one pipeline schedule, with scope, status, sort, and date filters.

Inputs: pipeline_schedule_id (required), page, sort, scope, +7 more.

gitlab_list_pipeline_schedulesList Pipeline SchedulesB
Read-onlyIdempotent

List scheduled pipelines with cron, timezone, next_run_at, owner, and active state. Use gitlab_get_pipeline_schedule for variables and inputs.

Inputs: page, scope, per_page, project_id.

gitlab_list_pipeline_trigger_jobsList Pipeline Trigger JobsC
Read-onlyIdempotent

List downstream/bridge trigger jobs in a pipeline.

Inputs: pipeline_id (required), page, scope, per_page, +1 more.

gitlab_list_pipeline_triggersList Pipeline Trigger TokensB
Read-onlyIdempotent

List pipeline trigger tokens with description, owner, and last_used. Token values are never returned.

Inputs: page, per_page, project_id.

gitlab_list_project_iterationsList Project IterationsB
Read-onlyIdempotent

List iterations available to a project (those of its group hierarchy). Supports state, search, search_in, include_ancestors, and date filters. Premium/Ultimate.

Inputs: page, state, search, per_page, +5 more.

gitlab_list_project_membersList Project MembersA
Read-onlyIdempotent

List direct project members by default; set include_inheritance=true to include inherited members.

Inputs: page, query, per_page, user_ids, +3 more.

gitlab_list_project_runnersList Project RunnersA
Read-onlyIdempotent

List runners a project can use, including group and instance runners. Supports type, status, paused, and tag_list filters. Use gitlab_get_runner for tags and settings of one runner.

Inputs: page, type, paused, status, +3 more.

gitlab_list_projectsList ProjectsC
Read-onlyIdempotent

List projects available to the current user.

Inputs: page, sort, owned, topic, +11 more.

gitlab_list_project_snippetsList Project SnippetsB
Read-onlyIdempotent

List a project's snippets with title, visibility, author, and file names.

Inputs: page, per_page, project_id.

gitlab_list_project_vulnerabilitiesList Project VulnerabilitiesA
Read-onlyIdempotent

List a project's vulnerabilities with severity, state, scanner, identifiers (CVE/CWE), and location. Filter by state, severity, and report_type; page with first and the returned page_info.end_cursor as after. Ultimate.

Inputs: after, first, state, severity, +2 more.

gitlab_list_protected_branchesList Protected BranchesC
Read-onlyIdempotent

List protected branch rules for a project.

Inputs: page, search, per_page, project_id.

gitlab_list_protected_tagsList Protected TagsB
Read-onlyIdempotent

List protected tag rules (names or wildcards such as v*) with their create access levels.

Inputs: page, per_page, project_id.

gitlab_list_releasesList ReleasesC
Read-onlyIdempotent

List project releases.

Inputs: page, sort, order_by, per_page, +2 more.

gitlab_list_tagsList TagsC
Read-onlyIdempotent

List repository tags for a project.

Inputs: page, sort, search, order_by, +2 more.

gitlab_list_todosList TodosC
Read-onlyIdempotent

List to-do items for the current authenticated user.

Inputs: page, type, state, action, +4 more.

gitlab_list_webhook_eventsList Webhook EventsB
Read-onlyIdempotent

List recent webhook events for a project or group webhook. Use summary mode for overviews.

Inputs: hook_id (required), page, status, summary, +3 more.

gitlab_list_webhooksList WebhooksC
Read-onlyIdempotent

List configured webhooks for a project or group.

Inputs: page, group_id, per_page, project_id.

gitlab_list_wiki_pagesList Wiki PagesC
Read-onlyIdempotent

List wiki pages in a project.

Inputs: page, per_page, project_id, render_html, +1 more.

gitlab_list_work_item_emoji_reactionsList Work Item Emoji ReactionsC
Read-onlyIdempotent

List emoji reactions on a work item.

Inputs: iid (required), project_id.

gitlab_list_work_item_note_emoji_reactionsList Work Item Note Emoji ReactionsB
Read-onlyIdempotent

List emoji reactions on a work item note by GraphQL note_id.

Inputs: iid (required), note_id (required), project_id.

gitlab_list_work_item_notesList Work Item NotesC
Read-onlyIdempotent

List threaded discussions and notes on a work item.

Inputs: iid (required), sort, after, page_size, +1 more.

gitlab_list_work_itemsList Work ItemsB
Read-onlyIdempotent

List work items in a project with filters for type, state, search, assignees, and labels.

Inputs: after, first, state, types, +4 more.

gitlab_list_work_item_statusesList Work Item StatusesA
Read-onlyIdempotent

List available statuses and allowed hierarchy/conversion types for a work item type.

Inputs: project_id, work_item_type.

gitlab_mark_all_todos_doneMark All Todos DoneA

Mark all pending to-do items as done for the current authenticated user.

Inputs: no named parameters.

gitlab_mark_todo_doneMark Todo DoneC

Mark one to-do item as done.

Inputs: todo_id (required).

gitlab_merge_merge_requestMerge Merge RequestC

Merge an existing merge request.

Inputs: sha, squash, auto_merge, project_id, +6 more.

gitlab_move_work_itemMove Work ItemC

Move a work item to a different project.

Inputs: iid (required), target_project_id (required), project_id.

gitlab_my_issuesMy IssuesC
Read-onlyIdempotent

List issues assigned to the current authenticated user.

Inputs: page, state, labels, search, +7 more.

gitlab_play_pipeline_jobPlay Pipeline JobC

Play a manual job, optionally with job_variables_attributes ([{key, value}]) and typed job_inputs.

Inputs: job_id (required), job_inputs, project_id, job_variables_attributes.

gitlab_play_pipeline_schedulePlay Pipeline ScheduleA

Run a pipeline schedule now without changing next_run_at. GitLab rate-limits this per schedule.

Inputs: pipeline_schedule_id (required), project_id.

gitlab_promote_milestonePromote MilestoneC

Promote a project milestone to a group milestone.

Inputs: milestone_id (required), project_id.

gitlab_protect_branchProtect BranchB

Protect a branch or wildcard rule and configure role-based push, merge, and unprotect access.

Inputs: branch (required), project_id, allow_force_push, push_access_level, +3 more.

gitlab_protect_tagProtect TagA

Protect a tag name or wildcard (for example v*) so only allowed roles can create it and protected CI/CD variables reach its pipelines. create_access_level: 0 no one, 30 Developer, 40 Maintainer (default), 60 Admin.

Inputs: name (required), project_id, allowed_to_create, create_access_level.

gitlab_publish_draft_notePublish Draft NoteB

Publish one merge-request draft note.

Inputs: draft_note_id (required), merge_request_iid (required), project_id.

gitlab_push_filesPush FilesC

Create a commit with multiple file actions.

Inputs: branch (required), commit_message (required), files, force, +5 more.

gitlab_rebase_merge_requestRebase Merge RequestA

Rebase a merge request's source branch onto its target (GitLab force-pushes the source branch). With wait=true (default) it polls up to timeout_seconds (default 60, max 300) and reports previous_sha, sha, head_changed, and merge_error. Use gitlab_get_merge_request_conflicts for conflicts.

Inputs: merge_request_iid (required), wait, skip_ci, project_id, +1 more.

gitlab_reorder_issueReorder IssueA

Change an issue's relative position in boards and manually sorted lists. move_after_id and move_before_id take global issue IDs (the id field, not iid) of the neighbors: move_after_id is the issue that should follow this one and move_before_id the issue that should precede it.

Inputs: issue_iid (required), project_id, move_after_id, move_before_id.

gitlab_resolve_merge_request_threadResolve Merge Request ThreadC

Resolve/unresolve an MR discussion note.

Inputs: note_id (required), discussion_id (required), merge_request_iid (required), resolved, +1 more.

gitlab_retry_pipelineRetry PipelineC

Retry failed jobs in pipeline.

Inputs: pipeline_id (required), project_id.

gitlab_retry_pipeline_jobRetry Pipeline JobB

Retry one failed job. job_inputs overrides typed values for the job's inputs definitions.

Inputs: job_id (required), job_inputs, project_id.

gitlab_search_codeSearch CodeB
Read-onlyIdempotent

Search code across all projects on the GitLab instance. Requires GitLab code search support.

Inputs: search (required), page, path, filename, +2 more.

gitlab_search_code_blobsSearch Code BlobsC
Read-onlyIdempotent

Search repository code blobs in a specific project.

Inputs: search (required), ref, page, path, +4 more.

gitlab_search_group_codeSearch Group CodeC
Read-onlyIdempotent

Search code in a specific group.

Inputs: search (required), group_id (required), page, path, +3 more.

gitlab_search_project_codeSearch Project CodeC
Read-onlyIdempotent

Search code in a specific project.

Inputs: search (required), ref, page, path, +4 more.

gitlab_search_repositoriesSearch RepositoriesC
Read-onlyIdempotent

Search repositories by keyword.

Inputs: search (required), page, per_page.

gitlab_stop_environmentStop EnvironmentA
Destructive

Stop an environment, which runs its on_stop job and typically tears down the deployed app. force=true stops it without running on_stop. Recommended pre-check: gitlab_get_environment.

Inputs: environment_id (required), force, project_id.

gitlab_stop_stale_environmentsStop Stale EnvironmentsA
Destructive

Stop every environment last modified or deployed before an ISO 8601 date (between 10 years and 1 week ago). GitLab skips protected environments; this stops but does not delete.

Inputs: before (required), project_id.

gitlab_take_ownership_pipeline_scheduleTake Ownership of Pipeline ScheduleB

Make the current user the owner of a pipeline schedule; scheduled pipelines then run as this user.

Inputs: pipeline_schedule_id (required), project_id.

gitlab_trigger_pipelineTrigger Pipeline With TokenA

Start a pipeline with a pipeline trigger token or CI/CD job token, as used by external systems and multi-project pipelines. Use gitlab_create_pipeline when acting with your own credentials. The token is sent in the request body and never echoed.

Inputs: ref (required), token (required), inputs, variables, +1 more.

gitlab_unapprove_merge_requestUnapprove Merge RequestB

Remove current user approval from MR.

Inputs: merge_request_iid (required), project_id.

gitlab_unprotect_branchUnprotect BranchA
Destructive

Remove protection from a branch or wildcard rule. This immediately permits actions previously blocked. Requires branch. Recommended pre-check: gitlab_get_protected_branch.

Inputs: branch (required), project_id.

gitlab_unprotect_tagUnprotect TagA
Destructive

Remove protection from a tag name or wildcard, allowing any developer to create matching tags. Requires name. Recommended pre-check: gitlab_get_protected_tag.

Inputs: name (required), project_id.

gitlab_update_default_branchUpdate Default BranchC

Change a project's default branch to an existing branch.

Inputs: default_branch (required), project_id.

gitlab_update_deploymentUpdate DeploymentB

Change the status of a deployment created outside GitLab CI/CD.

Inputs: status (required), deployment_id (required), project_id.

gitlab_update_draft_noteUpdate Draft NoteC

Update a merge-request draft note.

Inputs: draft_note_id (required), merge_request_iid (required), body, position, +2 more.

gitlab_update_environmentUpdate EnvironmentA

Update an environment's external URL, tier, description, Kubernetes settings, or auto-stop behavior. GitLab does not allow renaming environments.

Inputs: environment_id (required), tier, project_id, description, +5 more.

gitlab_update_group_iterationUpdate Group IterationA

Update a group iteration's title, description, or dates. iteration_id is the numeric ID from the iteration list or its global ID. Premium/Ultimate.

Inputs: group_id (required), iteration_id (required), title, due_date, +2 more.

gitlab_update_group_iteration_cadenceUpdate Group Iteration CadenceB

Update an iteration cadence of the group. iteration_cadence_id is a numeric ID or cadence global ID from gitlab_list_group_iteration_cadences. Premium/Ultimate.

Inputs: group_id (required), iteration_cadence_id (required), title, active, +6 more.

gitlab_update_group_milestoneUpdate Group MilestoneB

Update a group milestone's title, description, dates, or state (state_event close or activate).

Inputs: group_id (required), milestone_id (required), title, due_date, +3 more.

gitlab_update_group_wiki_pageUpdate Group Wiki PageC

Update group wiki page by slug.

Inputs: slug (required), group_id (required), title, format, +1 more.

gitlab_update_issueUpdate IssueC

Update issue fields.

Inputs: issue_iid (required), title, labels, weight, +10 more.

gitlab_update_issue_description_patchUpdate Issue Description PatchC

Apply a search/replace or unified diff patch to an issue description without sending the full replacement text.

Inputs: patch (required), issue_iid (required), patch_type (required), dry_run, +3 more.

gitlab_update_issue_noteUpdate Issue NoteC

Update an issue discussion note body or resolved state.

Inputs: note_id (required), issue_iid (required), discussion_id (required), body, +2 more.

gitlab_update_labelUpdate LabelD

Update a label.

Inputs: name, color, label_id, new_name, +3 more.

gitlab_update_merge_requestUpdate Merge RequestA

Update merge request fields. labels replaces every label; add_labels and remove_labels change only the named ones. milestone_id 0 unassigns the milestone.

Inputs: merge_request_iid (required), draft, title, labels, +15 more.

gitlab_update_merge_request_discussion_noteUpdate MR Discussion NoteC

Update note body/resolved state in MR discussion.

Inputs: note_id (required), discussion_id (required), merge_request_iid (required), body, +2 more.

gitlab_update_merge_request_noteUpdate Merge Request NoteB

Update MR note body.

Inputs: body (required), note_id (required), merge_request_iid (required), project_id.

gitlab_update_milestoneUpdate MilestoneC

Update milestone fields.

Inputs: milestone_id (required), title, due_date, project_id, +3 more.

gitlab_update_pipeline_metadataUpdate Pipeline MetadataB

Rename a pipeline. Only the pipeline name can be changed.

Inputs: name (required), pipeline_id (required), project_id.

gitlab_update_pipeline_scheduleUpdate Pipeline ScheduleA

Change a pipeline schedule. Pass active=false to pause it. To remove an input, pass {name, destroy: true}. Take ownership first when the schedule belongs to another user.

Inputs: pipeline_schedule_id (required), ref, cron, active, +4 more.

gitlab_update_pipeline_triggerUpdate Pipeline Trigger TokenB

Change a pipeline trigger token's description. The token value is never returned.

Inputs: trigger_id (required), description (required), project_id.

gitlab_update_projectUpdate ProjectC

Update an allowlisted set of project metadata, merge defaults, and feature access levels.

Inputs: name, topics, project_id, visibility, +17 more.

gitlab_update_project_snippetUpdate Project SnippetB

Update a project snippet's title, description, visibility, or files. Each file change needs action create, update, delete, or move (move requires previous_path).

Inputs: snippet_id (required), files, title, project_id, +2 more.

gitlab_update_protected_branchUpdate Protected BranchA

Change an existing branch protection rule in place: allow_force_push, code_owner_approval_required, and allowed_to_push/allowed_to_merge/allowed_to_unprotect entries. Add an entry with one of access_level, user_id, group_id, or deploy_key_id (push only); change one with its id; remove one with {id, _destroy: true}. Read entry ids with gitlab_get_protected_branch. Changes that would leave nobody allowed to unprotect are refused.

Inputs: branch (required), project_id, allowed_to_push, allow_force_push, +3 more.

gitlab_update_releaseUpdate ReleaseD

Update existing release.

Inputs: tag_name (required), name, assets, milestones, +3 more.

gitlab_update_webhookUpdate WebhookB

Update a project or group webhook's URL, secret token, events, or SSL verification. Omitted fields keep their values.

Inputs: hook_id (required), url, name, token, +25 more.

gitlab_update_wiki_pageUpdate Wiki PageC

Update wiki page by slug.

Inputs: slug (required), content (required), title, format, +1 more.

gitlab_update_work_itemUpdate Work ItemC

Update a work item title, description, labels, assignees, state, status, hierarchy, linked items, custom fields, dates, milestone, iteration, and incident metadata.

Inputs: iid (required), title, status, weight, +22 more.

gitlab_upload_markdownUpload MarkdownC

Upload markdown file/attachment to project.

Inputs: content, filename, file_path, project_id.

gitlab_validate_ci_lintValidate CI LintC
Read-onlyIdempotent

Validate provided GitLab CI/CD YAML content for a project.

Inputs: content (required), ref, dry_run, project_id, +1 more.

gitlab_validate_project_ci_lintValidate Project CI LintC
Read-onlyIdempotent

Validate an existing project CI/CD configuration.

Inputs: dry_run, project_id, content_ref, dry_run_ref, +1 more.

gitlab_verify_namespaceVerify NamespaceA
Read-onlyIdempotent

Verify if namespace path exists.

Inputs: path (required), parent_id.

gitlab_wait_for_jobWait for JobA
Read-onlyIdempotent

Poll a job until it reaches success, failed, canceled, skipped, or manual, or until timeout_seconds (default 60, max 300) elapses. Returns completed=false with the last status on timeout; call again to keep waiting.

Inputs: job_id (required), project_id, timeout_seconds, poll_interval_seconds.

gitlab_wait_for_pipelineWait for PipelineA
Read-onlyIdempotent

Poll a pipeline until it reaches success, failed, canceled, skipped, or manual, or until timeout_seconds (default 60, max 300) elapses. Returns completed=false with the last status on timeout; call again to keep waiting.

Inputs: pipeline_id (required), project_id, timeout_seconds, poll_interval_seconds.

gitlab_whoamiWho Am IA
Read-onlyIdempotent

Get the current authenticated user.

Inputs: no named parameters.

health_checkHealth CheckA
Read-onlyIdempotent

Return server liveness, name, and version. Set check_gitlab=true to also verify that GitLab is reachable, that the configured credential authenticates, and which GitLab version answers.

Inputs: check_gitlab.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    C2.6/5.0

    Scored across 268 tools

    Disambiguation2/5

    With 268 tools there are many near-duplicates: gitlab_search_code, gitlab_search_code_blobs, gitlab_search_project_code, gitlab_search_group_code, and gitlab_search_repositories overlap heavily; issue tools and work-item tools often target the same underlying objects; note creation exists as gitlab_create_note, gitlab_create_issue_note, gitlab_create_merge_request_note, and gitlab_create_work_item_note. Descriptions are detailed and often clarify, but the sheer breadth guarantees that agents will frequently face unclear selection boundaries.

    Naming Consistency4/5

    The dominant pattern is a consistent gitlab_verb_noun convention (gitlab_list_issues, gitlab_create_branch, gitlab_delete_tag), and even scoped variants like gitlab_list_group_milestones and gitlab_get_merge_request_note follow it. A handful of outliers (health_check, gitlab_whoami, gitlab_my_issues, gitlab_discover_tools) deviate but are limited and readable.

    Tool Count1/5

    268 tools is far beyond a well-scoped set for a single MCP server. The domain is huge, but the surface includes narrow administrative operations (emoji reactions on notes, draft note lifecycle, iteration cadences, protected branch entry micro-edits) that overwhelm tool selection.

    Completeness5/5

    Coverage is exhaustive: full CRUD across projects, groups, issues, merge requests, work items, milestones, iterations, pipelines, jobs, schedules, environments, deployments, releases, tags, branches, webhooks, snippets, wiki pages, vulnerabilities, runners, and GraphQL escape hatches. Almost no lifecycle or administrative operation appears to be missing.

    Maintenance

    ActivityMaintained
    ResponsivenessLimited data

    Related MCP Connectors

    Related MCP Servers