Tools Reference

July 26, 2026 · View on GitHub

Complete catalog of every tool the GitLab MCP server exposes.

Setup first — if you haven't connected your Personal Access Token or OAuth credentials yet, follow one of the client setup guides or read Getting Started. Tools listed below will be unavailable until the server is authenticated.

Feature toggles

Toolsets are split into a default set (exposed automatically) and an opt-in set (must be explicitly enabled). The lists below are derived directly from TOOLSET_DEFINITIONS in tools/registry.ts.

StatusGroups
Default — always exposedProjects & Namespaces, Projects & Files, Branches & Commits, Groups, Merge Requests, Issues, Labels, CI Lint, Users & Events
Opt-in — must be enabledWork Items, Pipelines, Jobs & Deployments (also USE_PIPELINE=true), Milestones (also USE_MILESTONE=true), Wiki (also USE_GITLAB_WIKI=true), Releases, Tags, Variables, Webhooks, Search, Dependency Proxy, Vulnerabilities, Meta & GraphQL

How to enable opt-in groups (any one is sufficient):

  • GITLAB_TOOLSETS=<group,…> — comma-separated toolset IDs.
  • GITLAB_TOOLSETS=all — enables every group.
  • GITLAB_TOOLS=<tool,…> — enables individual tools regardless of group.
  • USE_PIPELINE=true / USE_MILESTONE=true / USE_GITLAB_WIKI=true — legacy single-group flags (Pipelines, Milestones, Wiki only).
  • Call the discover_tools MCP tool at runtime to activate categories for the current session.

Permission modes control which tools are exposed:

  • GITLAB_PERMISSION_MODE=readonly — hides every write tool regardless of toggles.
  • GITLAB_PERMISSION_MODE=modify — allows create/update but blocks all delete_* tools.
  • GITLAB_READ_ONLY_MODE=true (deprecated) — same as readonly; prefer GITLAB_PERMISSION_MODE=readonly.

See Environment Variables and CLI Arguments for the full list.

Legend

MarkerMeaning
📖Read-only — fetches data, does not modify GitLab state. Safe to invoke freely.
✏️Writes — creates, updates, or deletes data on GitLab. Confirm intent before running.

Browse by group

Each group has its own page with full parameter tables — click any tool name to jump to its details, or click the group title for the per-group view.

Projects & Namespaces

Project/namespace listing, member queries, group iterations, and server health. (10 tools)

ToolWhat it doesR/W
get_projectGet details of a specific project📖
list_projectsList projects accessible by the current user📖
update_projectUpdate project settings such as description, visibility, default branch, and feature access levels✏️
list_project_membersList members of a GitLab project📖
list_namespacesList all namespaces (users and groups) available to the current user. Filter by kind='group' for groups only.📖
get_namespaceGet details of a namespace (user or group) by ID or path. Groups are namespaces with kind='group'.📖
verify_namespaceVerify if a namespace path exists. Use parent_id to scope the check to a specific parent namespace — required for nested namespaces where the same path may exist under different parents.📖
list_group_projectsList projects in a group📖
list_group_iterationsList group iterations with filtering options📖
health_checkVerify server status and authentication. When authenticated, also reports the GitLab instance version from GET /api/v4/version (version, revision, enterprise). Version lookup failures do not fail the health check — those fields are omitted.📖

Projects & Files

Project search/creation/fork plus the Files API for reading and writing repository content without shelling out to git. (7 tools)

ToolWhat it doesR/W
search_repositoriesSearch for GitLab projects📖
create_repositoryCreate a new GitLab project✏️
get_file_contentsGet contents of a file or directory from a GitLab project📖
push_filesPush multiple files in a single commit✏️
create_or_update_fileCreate or update a file in a GitLab project✏️
fork_repositoryFork a project to your account or specified namespace✏️
get_repository_treeList files and directories in a repository📖

Branches & Commits

Branch management, commit listing/inspection, file blame, and CI commit-status manipulation. (15 tools)

ToolWhat it doesR/W
create_branchCreate a new branch✏️
get_branchGet branch details (commit, protection status)📖
list_branchesList branches in project with search filter📖
delete_branchDelete branch from project✏️
list_protected_branchesList protected branches in a project, supports search filter📖
get_protected_branchGet details of a single protected branch (access levels, force push settings)📖
protect_branchProtect a repository branch (set push/merge/unprotect access levels)✏️
unprotect_branchRemove protection from a previously protected branch✏️
update_default_branchChange the default branch of a project✏️
list_commitsList repository commits with filtering options📖
get_commitGet details of a specific commit📖
get_commit_diffGet changes/diffs of a specific commit📖
get_file_blameGet git blame for a file at a given ref. Each entry maps a contiguous range of source lines to the commit that last changed them (id, author, authored_date, message). Use range_start/range_end to limit blame to specific lines.📖
list_commit_statusesList statuses for a commit📖
create_commit_statusCreate or update the status of a commit✏️

Groups

Create new groups and subgroups. (1 tools)

ToolWhat it doesR/W
create_groupCreate new group or subgroup✏️

Merge Requests

MR lifecycle — create, update, merge, approve, plus diff/conflict inspection and the full discussion/note/draft API. (43 tools)

ToolWhat it doesR/W
merge_merge_requestMerge a merge request✏️
approve_merge_requestApprove a merge request✏️
unapprove_merge_requestUnapprove a merge request✏️
get_merge_request_approval_stateGet merge request approval details including approvers📖
get_branchGet branch details (commit, protection status)📖
list_branchesList branches in project with search filter📖
get_merge_request_conflictsGet the conflicts of a merge request📖
list_merge_request_pipelinesList pipelines for a merge request with pagination📖
get_merge_requestGet details of a merge request (mergeRequestIid or branchName required). Set include_summaries=true for deployment/commit/approval summaries📖
get_merge_request_diffsGet the changes/diffs of a merge request (mergeRequestIid or branchName required)📖
list_merge_request_changed_filesList changed file paths in a merge request without diff content (mergeRequestIid or branchName required)📖
list_merge_request_diffsList merge request diffs with pagination (mergeRequestIid or branchName required)📖
get_merge_request_file_diffGet diffs for specific files from a merge request (mergeRequestIid or branchName required)📖
list_merge_request_versionsList all versions of a merge request📖
get_merge_request_versionGet a specific version of a merge request📖
update_merge_requestUpdate a merge request (mergeRequestIid or branchName required)✏️
create_merge_requestCreate a new merge request✏️
list_merge_requestsList merge requests (without project_id: user's MRs; with project_id: project MRs)📖
get_branch_diffsGet diffs between two branches or commits📖
mr_discussionsList discussion items for a merge request📖
create_merge_request_noteAdd a new note to a merge request✏️
update_merge_request_noteModify an existing merge request note✏️
delete_merge_request_noteDelete an existing merge request note✏️
get_merge_request_noteGet a specific note for a merge request📖
get_merge_request_notesList notes for a merge request📖
delete_merge_request_discussion_noteDelete a discussion note on a merge request✏️
update_merge_request_discussion_noteUpdate a discussion note on a merge request✏️
create_merge_request_discussion_noteAdd a new discussion note to an existing merge request thread✏️
get_draft_noteGet a single draft note from a merge request📖
list_draft_notesList draft notes for a merge request📖
create_draft_noteCreate a draft note for a merge request✏️
update_draft_noteUpdate an existing draft note✏️
delete_draft_noteDelete a draft note✏️
publish_draft_notePublish a single draft note✏️
bulk_publish_draft_notesPublish all draft notes for a merge request. Optionally sets reviewer_state and posts a summary note (GitLab 19.2+). Can set reviewer_state even with no drafts.✏️
create_merge_request_threadCreate a new thread on a merge request✏️
resolve_merge_request_threadResolve a thread on a merge request✏️
list_merge_request_emoji_reactionsList all emoji reactions on a merge request📖
list_merge_request_note_emoji_reactionsList all emoji reactions on a merge request note. Pass discussion_id for discussion thread replies.📖
create_merge_request_emoji_reactionAdd an emoji reaction to a merge request (e.g. thumbsup, rocket, eyes)✏️
delete_merge_request_emoji_reactionRemove an emoji reaction from a merge request✏️
create_merge_request_note_emoji_reactionAdd an emoji reaction to a merge request note. Pass discussion_id for discussion thread replies.✏️
delete_merge_request_note_emoji_reactionRemove an emoji reaction from a merge request note. Pass discussion_id for discussion thread replies.✏️

Issues

Issue CRUD, links, discussions and notes, todos, and emoji reactions. (24 tools)

ToolWhat it doesR/W
create_issueCreate a new issue✏️
list_issuesList issues (default: created by current user; use scope='all' for all)📖
my_issuesList issues assigned to the authenticated user📖
get_issueGet details of a specific issue. Returns a slim milestone by default; set full_response=true for the complete milestone object📖
update_issueUpdate an issue. Returns a slim confirmation by default; set full_response=true for the complete updated issue object✏️
update_issue_description_patchApply a patch (search/replace or unified diff) to an issue description. Reduces token usage by allowing small changes without sending the full description. Supports dry_run to preview changes and create_note to summarize updates.✏️
delete_issueDelete an issue✏️
list_todosList GitLab to-do items for the current user📖
mark_todo_doneMark a GitLab to-do item as done✏️
mark_all_todos_doneMark all pending GitLab to-do items as done for the current user✏️
create_issue_noteAdd a note to an issue, optionally replying to a discussion thread✏️
update_issue_noteModify an existing issue thread note✏️
list_issue_linksList all issue links for a specific issue📖
list_issue_discussionsList discussions for an issue📖
get_issue_linkGet a specific issue link📖
create_issue_linkCreate an issue link between two issues✏️
delete_issue_linkDelete an issue link✏️
create_noteCreate a new note (comment) to an issue or merge request✏️
list_issue_emoji_reactionsList all emoji reactions on an issue📖
list_issue_note_emoji_reactionsList all emoji reactions on an issue note. Pass discussion_id for discussion thread replies.📖
create_issue_emoji_reactionAdd an emoji reaction to an issue (e.g. thumbsup, rocket, eyes)✏️
delete_issue_emoji_reactionRemove an emoji reaction from an issue✏️
create_issue_note_emoji_reactionAdd an emoji reaction to an issue note. Pass discussion_id for discussion thread replies.✏️
delete_issue_note_emoji_reactionRemove an emoji reaction from an issue note. Pass discussion_id for discussion thread replies.✏️

Labels

Project label CRUD. (5 tools)

ToolWhat it doesR/W
list_labelsList labels for a project📖
get_labelGet a single label from a project📖
create_labelCreate a new label in a project✏️
update_labelUpdate an existing label in a project✏️
delete_labelDelete a label from a project✏️

Work Items

Modern unified API for issues, tasks, incidents, and other typed work items — including notes, emoji reactions, and incident timeline events. (18 tools)

Opt-in. Enable via GITLAB_TOOLSETS=workitems (or GITLAB_TOOLSETS=all), list individual tools in GITLAB_TOOLS=, or activate at runtime with the discover_tools MCP tool.

ToolWhat it doesR/W
get_work_itemGet a work item with full details including status, hierarchy, type, and widgets📖
list_work_itemsList work items with filters (type, state, search, assignees, labels)📖
create_work_itemCreate a work item (issue, task, incident, epic, etc.) with full field support✏️
update_work_itemUpdate a work item (title, description, labels, assignees, state, parent, custom fields, etc.)✏️
convert_work_item_typeConvert a work item to a different type✏️
list_work_item_statusesList available statuses for a work item type (Premium/Ultimate)📖
list_custom_field_definitionsList custom field definitions for a work item type📖
move_work_itemMove a work item to a different project✏️
list_work_item_notesList notes and discussions on a work item📖
create_work_item_noteAdd a note to a work item (supports Markdown, internal notes, threads)✏️
list_work_item_emoji_reactionsList all emoji reactions on a work item📖
list_work_item_note_emoji_reactionsList all emoji reactions on a work item note (comment, thread, or thread reply)📖
create_work_item_emoji_reactionAdd an emoji reaction to a work item (e.g. thumbsup, rocket, eyes)✏️
delete_work_item_emoji_reactionRemove an emoji reaction from a work item✏️
create_work_item_note_emoji_reactionAdd an emoji reaction to a work item note (comment, thread, or thread reply)✏️
delete_work_item_note_emoji_reactionRemove an emoji reaction from a work item note (comment, thread, or thread reply)✏️
get_timeline_eventsList timeline events for an incident📖
create_timeline_eventCreate a timeline event on an incident✏️

CI Lint

Validate .gitlab-ci.yml snippets and project pipeline configs. (4 tools)

ToolWhat it doesR/W
validate_ci_lintValidate provided GitLab CI/CD YAML content for a project📖
validate_project_ci_lintValidate an existing .gitlab-ci.yml configuration for a project📖
list_ci_catalog_resourcesList GitLab CI/CD Catalog resources/components visible to the user📖
get_ci_catalog_resourceGet details for a GitLab CI/CD Catalog resource, including versions and components📖

Pipelines, Jobs & Deployments

Pipeline + job control (trigger, retry, cancel, play manual jobs, fetch logs/artifacts), and the deployments/environments view. (19 tools)

Opt-in. Enable via GITLAB_TOOLSETS=pipelines (or GITLAB_TOOLSETS=all), or use the legacy USE_PIPELINE=true flag for backward compatibility.

ToolWhat it doesR/W
list_pipelinesList pipelines with filtering options📖
get_pipelineGet details of a specific pipeline📖
list_deploymentsList deployments with filtering options📖
get_deploymentGet details of a specific deployment📖
list_environmentsList environments in a project📖
get_environmentGet details of a specific environment📖
list_pipeline_jobsList all jobs in a specific pipeline📖
list_pipeline_trigger_jobsList trigger jobs (bridges) in a pipeline📖
get_pipeline_jobGet details of a GitLab pipeline job number📖
get_pipeline_job_outputGet the output/trace of a pipeline job with optional pagination📖
create_pipelineCreate a new pipeline for a branch or tag✏️
retry_pipelineRetry a failed or canceled pipeline✏️
cancel_pipelineCancel a running pipeline✏️
play_pipeline_jobRun a manual pipeline job✏️
retry_pipeline_jobRetry a failed or canceled pipeline job✏️
cancel_pipeline_jobCancel a running pipeline job✏️
list_job_artifactsList artifact files in a job's archive📖
download_job_artifactsDownload job artifact archive (zip) and save to a local path📖
get_job_artifact_fileGet content of a single file from a job's artifacts📖

Milestones

Project and group milestone CRUD plus associated issues/MRs and burndown events. (17 tools)

Opt-in. Enable via GITLAB_TOOLSETS=milestones (or GITLAB_TOOLSETS=all), or use the legacy USE_MILESTONE=true flag for backward compatibility.

ToolWhat it doesR/W
list_milestonesList milestones with filtering options📖
get_milestoneGet details of a specific milestone📖
create_milestoneCreate a new milestone✏️
edit_milestoneEdit an existing milestone✏️
delete_milestoneDelete a milestone✏️
get_milestone_issueGet issues associated with a specific milestone📖
get_milestone_merge_requestsGet merge requests associated with a specific milestone📖
promote_milestonePromote a milestone to the next stage✏️
get_milestone_burndown_eventsGet burndown events for a specific milestone📖
list_group_milestonesList group milestones with filtering options📖
get_group_milestoneGet details of a specific group milestone📖
create_group_milestoneCreate a new group milestone✏️
edit_group_milestoneEdit an existing group milestone✏️
delete_group_milestoneDelete a group milestone✏️
get_group_milestone_issueGet issues associated with a specific group milestone📖
get_group_milestone_merge_requestsGet merge requests associated with a specific group milestone📖
get_group_milestone_burndown_eventsGet burndown events for a specific group milestone📖

Wiki

Project and group wiki page CRUD. Attachment uploads where supported. (10 tools)

Opt-in. Enable via GITLAB_TOOLSETS=wiki (or GITLAB_TOOLSETS=all), or use the legacy USE_GITLAB_WIKI=true flag for backward compatibility.

ToolWhat it doesR/W
list_wiki_pagesList wiki pages in a project📖
get_wiki_pageGet details of a specific wiki page📖
create_wiki_pageCreate a wiki page in a project✏️
update_wiki_pageUpdate a wiki page in a project✏️
delete_wiki_pageDelete a wiki page from a project✏️
list_group_wiki_pagesList wiki pages in a group📖
get_group_wiki_pageGet details of a specific group wiki page📖
create_group_wiki_pageCreate a wiki page in a group✏️
update_group_wiki_pageUpdate a wiki page in a group✏️
delete_group_wiki_pageDelete a wiki page from a group✏️

Releases

Release lifecycle, release evidence, and asset download. (7 tools)

Opt-in. Enable via GITLAB_TOOLSETS=releases (or GITLAB_TOOLSETS=all), list individual tools in GITLAB_TOOLS=, or activate at runtime with the discover_tools MCP tool.

ToolWhat it doesR/W
list_releasesList all releases for a project📖
get_releaseGet a release by tag name📖
create_releaseCreate a new release✏️
update_releaseUpdate an existing release✏️
delete_releaseDelete a release (does not delete the tag)✏️
create_release_evidenceCreate release evidence (Premium/Ultimate)✏️
download_release_assetDownload a release asset file by direct asset path📖

Tags

Tag listing, creation, deletion, and signature inspection. (5 tools)

Opt-in. Enable via GITLAB_TOOLSETS=tags (or GITLAB_TOOLSETS=all), list individual tools in GITLAB_TOOLS=, or activate at runtime with the discover_tools MCP tool.

ToolWhat it doesR/W
list_tagsList repository tags for a project📖
get_tagGet a repository tag by name📖
create_tagCreate a new repository tag✏️
delete_tagDelete a repository tag✏️
get_tag_signatureGet the X.509 signature of a signed tag (404 if unsigned)📖

Users & Events

User lookup, the authenticated user (whoami), event streams, and markdown attachment upload/download. (7 tools)

ToolWhat it doesR/W
get_usersGet GitLab user details by usernames📖
get_userGet user details by ID📖
whoamiGet current authenticated user details📖
list_eventsList events for the authenticated user (before/after: YYYY-MM-DD)📖
get_project_eventsList events for a project (before/after: YYYY-MM-DD)📖
upload_markdownUpload a file for use in markdown content✏️
download_attachmentDownload an uploaded file from a project (images returned as base64; use local_path to save to disk)📖

Variables

Project and group CI/CD variable CRUD. (10 tools)

Opt-in. Enable via GITLAB_TOOLSETS=variables (or GITLAB_TOOLSETS=all), list individual tools in GITLAB_TOOLS=, or activate at runtime with the discover_tools MCP tool.

ToolWhat it doesR/W
list_project_variablesList CI/CD variables for a project📖
get_project_variableGet a single CI/CD variable from a project📖
create_project_variableCreate a CI/CD variable for a project✏️
update_project_variableUpdate an existing CI/CD variable in a project✏️
delete_project_variableDelete a CI/CD variable from a project✏️
list_group_variablesList CI/CD variables for a group📖
get_group_variableGet a single CI/CD variable from a group📖
create_group_variableCreate a CI/CD variable for a group✏️
update_group_variableUpdate an existing CI/CD variable in a group✏️
delete_group_variableDelete a CI/CD variable from a group✏️

Webhooks

List webhooks configured on projects or groups, and inspect recent webhook events. (3 tools)

Opt-in. Enable via GITLAB_TOOLSETS=webhooks (or GITLAB_TOOLSETS=all), list individual tools in GITLAB_TOOLS=, or activate at runtime with the discover_tools MCP tool.

ToolWhat it doesR/W
list_webhooksList webhooks for a project or group📖
list_webhook_eventsList recent webhook events (past 7 days)📖
get_webhook_eventGet full details of a specific webhook event📖

Code search across all visible projects, a specific project, or a specific group. (3 tools)

Opt-in. Enable via GITLAB_TOOLSETS=search (or GITLAB_TOOLSETS=all), list individual tools in GITLAB_TOOLS=, or activate at runtime with the discover_tools MCP tool.

ToolWhat it doesR/W
search_codeSearch for code across all projects (requires advanced search or Zoekt)📖
search_project_codeSearch for code within a specific project (requires advanced search or Zoekt)📖
search_group_codeSearch for code within a specific group (requires advanced search or Zoekt)📖

Dependency Proxy

Inspect and manage the GitLab dependency proxy cache settings, blob storage, and purge operations. (4 tools)

Opt-in. Enable via GITLAB_TOOLSETS=dependency_proxy (or GITLAB_TOOLSETS=all), list individual tools in GITLAB_TOOLS=, or activate at runtime with the discover_tools MCP tool.

ToolWhat it doesR/W
get_dependency_proxy_settingsGet dependency proxy settings for a group📖
update_dependency_proxy_settingsUpdate dependency proxy settings for a group (enable/disable, credentials for authenticated Docker Hub pulls)✏️
list_dependency_proxy_blobsList cached dependency proxy blobs for a group📖
purge_dependency_proxy_cacheSchedule purge of all cached dependency proxy blobs for a group✏️

Vulnerabilities

AI-assisted vulnerability triage — list findings, inspect details, dismiss with reason, or confirm for remediation. Backed by the GitLab GraphQL API; requires GitLab Ultimate. (4 tools)

Opt-in. Enable via GITLAB_TOOLSETS=vulnerabilities (or GITLAB_TOOLSETS=all), list individual tools in GITLAB_TOOLS=, or activate at runtime with the discover_tools MCP tool.

ToolWhat it doesR/W
list_project_vulnerabilitiesList vulnerabilities for a project with optional state, severity, and report type filters (GraphQL-backed, cursor pagination)📖
get_vulnerabilityGet full details of a specific vulnerability📖
dismiss_vulnerabilityDismiss a vulnerability with a reason (acceptable_risk, false_positive, used_in_tests, mitigating_control, not_applicable) and optional comment✏️
confirm_vulnerabilityConfirm a vulnerability as a real finding requiring remediation✏️

Meta & GraphQL

Server diagnostics, tool discovery, and the GraphQL escape hatch. (2 tools)

Mixed availability. discover_tools is always exposed (the server re-adds it after every toolset filter). execute_graphql is not part of any toolset — enable it explicitly with GITLAB_TOOLS=execute_graphql.

ToolWhat it doesR/W
execute_graphqlExecute a GitLab GraphQL query📖
discover_toolsDiscover and activate additional tool categories for this session. Available categories: merge_requests, issues, repositories, branches, projects, labels, ci, groups, pipelines, milestones, wiki, releases, tags, users, workitems, webhooks, search, variables, dependency_proxy, vulnerabilities. Already-active categories are listed in the response.📖

Argument schemas

Each group page includes a parameter table per tool, generated from the authoritative Zod schemas in schemas.ts. For runtime schema inspection from a connected MCP client, call the discover_tools tool.