Tools Reference

July 10, 2026 · View on GitHub

This document lists all MCP tools provided by gitlab-mcp. Each tool is prefixed with gitlab_ (except health_check). The Mutating column is a legacy shorthand for permission-mode visibility; runtime policy additionally classifies tools by capability (read, write, delete, admin, graphql).

All project-scoped tools accept an optional project_id parameter. When GITLAB_ALLOWED_PROJECT_IDS is configured with a single project, project_id is automatically inferred.

Most list endpoints support page and per_page. Notable exceptions are gitlab_list_merge_request_versions and gitlab_list_draft_notes.


Health

ToolMutatingDescription
health_checkNoReturn server liveness and current timestamp.

Discovery

ToolMutatingDescription
gitlab_discover_toolsNoSearch the complete registry and report whether each matching tool is enabled for this server.

gitlab_discover_tools is always registered, including when GITLAB_TOOLSETS selects only a subset. It can search disabled tools and reports the policy, toolset, explicit-enable, project-scope, transport, or compatibility-alias gates that currently hide them. The generated tool index is the authoritative complete inventory and records each tool's default availability.


Projects & Organization

ToolMutatingDescription
gitlab_get_projectNoGet project details by ID or path.
gitlab_list_projectsNoList projects available to the current user. Supports search, topic, visibility, membership, owned, archived, order_by, sort.
gitlab_update_projectYesUpdate allowlisted metadata, merge defaults, and feature access levels. Supports name, description, visibility, topics, merge policy fields, and documented *_access_level fields.
gitlab_create_repositoryYesCreate a new GitLab project. Params: name, description, visibility, initialize_with_readme, path, namespace_id, default_branch.
gitlab_create_groupYesCreate a new GitLab group or subgroup. Params: name, path (required). Supports description, visibility, parent_id.
gitlab_fork_repositoryYesFork a project to another namespace. Params: namespace, namespace_id, path, name, description, visibility, default_branch.
gitlab_list_project_membersNoList direct project members by default. Supports query, user_ids, skip_users; set include_inheritance=true to include inherited members.
gitlab_list_group_projectsNoList projects under a group. Params: group_id (required). Supports include_subgroups, search, topic, filters.
gitlab_list_group_iterationsNoList iterations for a group. Params: group_id (required). Supports state, search, date filters.
gitlab_search_repositoriesNoSearch repositories by keyword. Params: search (required).
gitlab_search_codeNoSearch code globally. Params: search (required). Supports filename, path, extension, pagination.
gitlab_search_project_codeNoSearch code in a project. Params: project_id, search (required). Supports ref, filename, path, extension, pagination.
gitlab_search_group_codeNoSearch code in a group. Params: group_id, search (required). Supports filename, path, extension, pagination.

gitlab_update_project accepts only: name, description, visibility, topics, request_access_enabled, remove_source_branch_after_merge, only_allow_merge_if_pipeline_succeeds, only_allow_merge_if_all_discussions_are_resolved, squash_option, merge_method, issues_access_level, merge_requests_access_level, builds_access_level, wiki_access_level, snippets_access_level, container_registry_access_level, environments_access_level, forking_access_level, package_registry_access_level, and pages_access_level. Other GitLab project-update fields are rejected. Use gitlab_update_default_branch for the default branch.


Users & Namespaces

ToolMutatingDescription
gitlab_get_usersNoSearch users. Supports username, search, active, extern_uid, provider.
gitlab_get_userNoGet one user by ID. Params: user_id (required).
gitlab_whoamiNoGet the current authenticated user.
gitlab_list_namespacesNoList namespaces visible to user. Supports search, owned.
gitlab_get_namespaceNoGet namespace by ID or path. Params: namespace_id_or_path or namespace_id.
gitlab_verify_namespaceNoVerify if a namespace path exists. Params: path (required), optional parent_id for nested namespaces.

Events

ToolMutatingDescription
gitlab_list_eventsNoList current user events. Supports action, target_type, before, after, scope, sort.
gitlab_get_project_eventsNoList events for a specific project. Same filters as list_events.

Webhooks

ToolMutatingDescription
gitlab_list_webhooksNoList webhooks for exactly one project_id or group_id. Supports pagination.
gitlab_list_webhook_eventsNoList recent webhook events for hook_id. Supports status, summary, page, per_page (max 20).
gitlab_get_webhook_eventNoFind one webhook event by event_id. Supports direct page; otherwise scans up to 500 most recent events.

Repository & Files

ToolMutatingDescription
gitlab_get_repository_treeNoList files and directories. Supports path, ref, recursive, and pagination. Keyset responses include next_page_token when GitLab returns one.
gitlab_get_file_contentsNoGet file by path and ref. Params: file_path (required), ref (defaults to project's default branch). Set decode_base64 to return UTF-8 text for GitLab base64 file payloads.
gitlab_get_file_blameNoGet git blame for a file. Params: file_path, ref (required). Supports paired range_start and range_end.
gitlab_create_or_update_fileYesCreate or update a single file. Params: file_path, branch, content, commit_message (all required). Supports encoding, author_email, author_name, start_branch, last_commit_id.
gitlab_push_filesYesCreate a commit with multiple file actions. Params: branch, commit_message (required), actions array (each with action, file_path, content, etc.). Also accepts legacy files format.
gitlab_create_branchYesCreate a new branch. Params: branch (required), ref (defaults to default branch).
gitlab_list_branchesNoList repository branches. Supports search, regex, sort, and pagination.
gitlab_get_branchNoGet details for one branch. Params: branch (required).
gitlab_list_protected_branchesNoList protected branch rules. Supports search and pagination.
gitlab_get_protected_branchNoGet one protected branch or wildcard rule. Params: branch (required).
gitlab_protect_branchYesProtect a branch or wildcard. Supports role access levels 0 (push/merge only), 30, 40, 60; force-push and Code Owner controls.
gitlab_unprotect_branchYesRemove a branch or wildcard protection rule. Params: branch (required).
gitlab_update_default_branchYesChange the project default branch. Params: default_branch (required).
gitlab_delete_branchYesDelete a repository branch. Params: branch (required).
gitlab_get_branch_diffsNoCompare two branches/refs and return diffs. Params: from, to (required), straight, excluded_file_patterns.
gitlab_search_code_blobsNoSearch code in a project. Params: search (required), ref. Also supports filename, path, extension.

Commits

ToolMutatingDescription
gitlab_list_commitsNoList commits. Supports ref_name, since, until, path, author, all, with_stats, order.
gitlab_get_commitNoGet one commit by SHA. Params: sha (required), stats.
gitlab_get_commit_diffNoGet diff for one commit. Params: sha (required), full_diff.
gitlab_list_commit_statusesNoList statuses for a commit. Params: sha (required). Supports ref, stage, name, pipeline_id, all, sorting, and pagination.
gitlab_create_commit_statusYesCreate or update commit status. Params: sha, state (required). Supports ref, name or context, target_url, description, coverage.

Merge Requests

ToolMutatingDescription
gitlab_list_merge_requestsNoList MRs. When project_id is omitted, lists globally. Supports ID/username filters for assignee, author, reviewer, and approvers (approved_by_usernames), plus state, labels, branches, scope, sorting, date filters, and search.
gitlab_get_merge_requestNoGet one MR. Params: merge_request_iid or source_branch; set include_summaries=true for commit-addition and approval summaries (extra API calls).
gitlab_list_merge_request_pipelinesNoList pipelines associated with an MR. Params: merge_request_iid (required), supports pagination.
gitlab_create_merge_requestYesCreate an MR. Params: source_branch, target_branch, title (required). Supports description, assignee_ids, reviewer_ids, labels, draft, squash, remove_source_branch.
gitlab_update_merge_requestYesUpdate MR fields. Params: merge_request_iid (required). Supports title, description, target_branch, state_event, labels, assignee_ids, reviewer_ids, draft, squash.
gitlab_merge_merge_requestYesMerge an MR. Accepts merge_request_iid or source_branch. Supports merge_commit_message, squash_commit_message, squash, should_remove_source_branch, merge_when_pipeline_succeeds.
gitlab_get_merge_request_diffsNoGet MR diffs with changed files. Supports view (inline/parallel), excluded_file_patterns.
gitlab_list_merge_request_changed_filesNoStep 1 for large MR review: list changed file paths and flags without diff content. Supports merge_request_iid or source_branch, plus excluded_file_patterns.
gitlab_list_merge_request_diffsNoList detailed MR diffs (versions/changes view). Supports unidiff.
gitlab_get_merge_request_file_diffNoStep 2 for large MR review: fetch diffs for specific file_paths. Supports batching and unidiff.
gitlab_list_merge_request_versionsNoList MR diff versions.
gitlab_get_merge_request_versionNoGet one MR diff version. Params: version_id (required), unidiff.
gitlab_get_merge_request_conflictsNoGet merge request conflict details from GitLab's conflicts endpoint.

MR Code Context

ToolMutatingDescription
gitlab_get_merge_request_code_contextNoHigh-signal MR code context with filtering and budget control.

Parameters:

ParameterTypeDefaultDescription
merge_request_iidstringRequired. MR IID.
include_pathsstring[]Glob patterns for files to include.
exclude_pathsstring[]Glob patterns for files to exclude.
extensionsstring[]File extension filter (e.g. .ts, .py).
languagesstring[]Language filter (e.g. typescript, python, go). Maps to extensions automatically.
max_filesnumber30Maximum number of files to process (1–500).
max_total_charsnumber120000Character budget (500–2,000,000). Stops fetching when budget is exhausted.
context_linesnumber20Lines of context around changes (0–200). Used in surrounding mode.
modeenumpatchContent mode: patch (raw diff), surrounding (changed lines with context), fullfile (entire file).
sortenumchanged_linesSort files by: changed_lines, path, file_size.
list_onlybooleanfalseIf true, returns file list without content (for two-stage retrieval).

Supported languages: typescript, javascript, python, go, rust, java, kotlin, csharp, cpp, c, ruby, php, swift, scala, shell, yaml, json, markdown.

MR Approvals

ToolMutatingDescription
gitlab_approve_merge_requestYesApprove an MR. Supports sha, approval_password.
gitlab_unapprove_merge_requestYesRemove current user's approval from an MR.
gitlab_get_merge_request_approval_stateNoGet approval state for an MR, with approvals fallback when approval_state is unavailable.

MR Discussions

ToolMutatingDescription
gitlab_list_merge_request_discussionsNoList MR discussions.
gitlab_mr_discussionsNoAlias of list_merge_request_discussions.
gitlab_create_merge_request_threadYesCreate a new discussion thread. Params: body (required). Supports position (for diff comments), created_at.
gitlab_create_merge_request_discussion_noteYesReply to an existing discussion thread. Params: discussion_id, body (required).
gitlab_update_merge_request_discussion_noteYesUpdate a discussion note. Provide either body or resolved (not both).
gitlab_delete_merge_request_discussion_noteYesDelete an MR discussion note permanently. Irreversible. Requires merge_request_iid, discussion_id, note_id. Pre-check with list_merge_request_discussions.
gitlab_resolve_merge_request_threadYesResolve/unresolve a discussion note. Params: discussion_id, note_id, resolved (default true).

MR Notes (Comments)

ToolMutatingDescription
gitlab_list_merge_request_notesNoList top-level MR notes. Supports sort, order_by.
gitlab_get_merge_request_notesNoAlias of list_merge_request_notes.
gitlab_get_merge_request_noteNoGet a single MR note by ID.
gitlab_create_merge_request_noteYesCreate a top-level MR comment. Params: body (required).
gitlab_update_merge_request_noteYesUpdate MR note body. Params: note_id, body (required).
gitlab_delete_merge_request_noteYesDelete a top-level MR note permanently. Irreversible. Requires merge_request_iid, note_id. Pre-check with get_merge_request_note or list_merge_request_notes.
gitlab_create_noteYesCreate a note on an issue or MR. Params: noteable_type (issue/merge_request), noteable_iid, body (required).

MR Emoji Reactions

ToolMutatingDescription
gitlab_list_merge_request_emoji_reactionsNoList emoji reactions on an MR. Params: merge_request_iid (required).
gitlab_list_merge_request_note_emoji_reactionsNoList emoji reactions on an MR note. Params: merge_request_iid, note_id (required). Supports discussion_id.
gitlab_create_merge_request_emoji_reactionYesAdd an emoji reaction to an MR. Params: merge_request_iid, name (required).
gitlab_delete_merge_request_emoji_reactionYesDelete an emoji reaction from an MR. Irreversible for that reaction. Params: merge_request_iid, award_id (required).
gitlab_create_merge_request_note_emoji_reactionYesAdd an emoji reaction to an MR note. Params: merge_request_iid, note_id, name (required). Supports discussion_id.
gitlab_delete_merge_request_note_emoji_reactionYesDelete an emoji reaction from an MR note. Irreversible for that reaction. Params: merge_request_iid, note_id, award_id.

Draft Notes

ToolMutatingDescription
gitlab_get_draft_noteNoGet a single draft note.
gitlab_list_draft_notesNoList draft notes on an MR.
gitlab_create_draft_noteYesCreate a draft note. Params: body (required). Supports position, resolve_discussion.
gitlab_update_draft_noteYesUpdate a draft note. At least one of body, position, or resolve_discussion required.
gitlab_delete_draft_noteYesDelete a draft note permanently. Irreversible. Requires merge_request_iid, draft_note_id. Pre-check with get_draft_note or list_draft_notes.
gitlab_publish_draft_noteYesPublish one draft note.
gitlab_bulk_publish_draft_notesYesPublish all draft notes on an MR.

Issues

ToolMutatingDescription
gitlab_list_issuesNoList issues. When project_id is omitted, lists globally. Supports assignee_id, author_id, state, labels, milestone, scope, search, issue_type, confidential, date filters.
gitlab_my_issuesNoList issues assigned to the current user. Supports state, labels, search, date filters.
gitlab_get_issueNoGet issue by IID. The milestone is slim by default; set full_response=true for its complete description and metadata.
gitlab_create_issueYesCreate an issue. Params: title (required). Supports description, labels, milestone_id, due_date, confidential, issue_type, assignee_ids.
gitlab_update_issueYesUpdate issue fields. Returns a slim confirmation by default; set full_response=true for the complete updated issue.
gitlab_update_issue_description_patchYesApply search_replace or unified_diff patch to an issue description. Supports dry_run, create_note, allow_multiple.
gitlab_delete_issueYesDelete an issue permanently. Irreversible. Requires issue_iid. Pre-check with get_issue.
gitlab_list_issue_discussionsNoList issue discussions.
gitlab_create_issue_noteYesCreate issue comment. Params: body (required). Supports discussion_id (to reply to thread), created_at.
gitlab_update_issue_noteYesUpdate an issue note. Provide either body or resolved (not both).

Issue Emoji Reactions

ToolMutatingDescription
gitlab_list_issue_emoji_reactionsNoList emoji reactions on an issue. Params: issue_iid (required).
gitlab_list_issue_note_emoji_reactionsNoList emoji reactions on an issue note. Params: issue_iid, note_id (required). Supports discussion_id.
gitlab_create_issue_emoji_reactionYesAdd an emoji reaction to an issue. Params: issue_iid, name (required).
gitlab_delete_issue_emoji_reactionYesDelete an emoji reaction from an issue. Irreversible for that reaction. Params: issue_iid, award_id (required).
gitlab_create_issue_note_emoji_reactionYesAdd an emoji reaction to an issue note. Params: issue_iid, note_id, name (required). Supports discussion_id.
gitlab_delete_issue_note_emoji_reactionYesDelete an emoji reaction from an issue note. Irreversible for that reaction. Params: issue_iid, note_id, award_id.

Todos

ToolMutatingDescription
gitlab_list_todosNoList to-do items for the current user. Supports action, author_id, project_id, group_id, state, type, pagination.
gitlab_mark_todo_doneYesMark one to-do item as done. Params: todo_id (required).
gitlab_mark_all_todos_doneYesMark all pending to-do items as done for the current authenticated user.
ToolMutatingDescription
gitlab_list_issue_linksNoList related issue links.
gitlab_get_issue_linkNoGet a single issue link by ID.
gitlab_create_issue_linkYesCreate a relation between two issues. Params: target_project_id, target_issue_iid (required). Supports link_type (relates_to, blocks, is_blocked_by).
gitlab_delete_issue_linkYesDelete an issue link permanently. Irreversible for that relation. Requires issue_iid, issue_link_id. Pre-check with get_issue_link or list_issue_links.

Wiki

Requires USE_GITLAB_WIKI=true (default).

ToolMutatingDescription
gitlab_list_wiki_pagesNoList wiki pages. Supports with_content and render_html; rendered responses preserve front_matter.
gitlab_get_wiki_pageNoGet wiki page by slug. Supports version and render_html; rendered responses preserve front_matter.
gitlab_create_wiki_pageYesCreate a wiki page. Params: title, content (required). Supports format (markdown, rdoc, asciidoc, org).
gitlab_update_wiki_pageYesUpdate wiki page by slug. Leaf-only title updates preserve the parent path for nested pages.
gitlab_delete_wiki_pageYesDelete a wiki page permanently. Irreversible. Requires slug. Pre-check with get_wiki_page or list_wiki_pages.
gitlab_list_group_wiki_pagesNoList group wiki pages. Supports with_content, render_html, and pagination.
gitlab_get_group_wiki_pageNoGet group wiki page by slug. Supports version and render_html; rendered responses preserve front_matter.
gitlab_create_group_wiki_pageYesCreate a group wiki page. Params: group_id, title, content (required). Supports format.
gitlab_update_group_wiki_pageYesUpdate a group wiki page. Leaf-only title updates preserve the parent path for nested pages.
gitlab_delete_group_wiki_pageYesDelete a group wiki page permanently. Irreversible. Requires group_id, slug. Pre-check with group wiki get/list.

Pipelines & Jobs

Requires USE_PIPELINE=true (default).

ToolMutatingDescription
gitlab_list_pipelinesNoList pipelines. Supports scope, status, ref, sha, username, source, order_by, sort, date filters.
gitlab_get_pipelineNoGet one pipeline by ID.
gitlab_list_deploymentsNoList deployments. Supports environment, ref, sha, status, order_by, sort, date filters.
gitlab_get_deploymentNoGet one deployment by ID.
gitlab_list_environmentsNoList environments. Supports name, search, states, pagination.
gitlab_get_environmentNoGet one environment by ID.
gitlab_list_pipeline_jobsNoList jobs in a pipeline. Supports scope, include_retried.
gitlab_list_pipeline_trigger_jobsNoList downstream/bridge trigger jobs in a pipeline.
gitlab_get_pipeline_jobNoGet one job by ID.
gitlab_get_pipeline_job_outputNoGet a byte-bounded, untrusted job trace window (limit defaults to/maxes at 1,000 lines; offset skips lines from the end).
gitlab_validate_ci_lintNoValidate provided GitLab CI/CD YAML content. Supports dry_run, include_jobs, and ref.
gitlab_validate_project_ci_lintNoValidate the project's existing CI/CD config. Supports content_ref, dry_run, dry_run_ref, and include_jobs.
gitlab_list_ci_catalog_resourcesNoList global CI/CD Catalog resources with filters and GraphQL cursor pagination. Hidden when strict project scope is enabled.
gitlab_get_ci_catalog_resourceNoGet one CI/CD Catalog resource by global ID or full path, including paginated versions and components. Hidden when strict project scope is enabled.
gitlab_list_job_artifactsNoList files and directories inside a job artifacts archive. Supports path, recursive.
gitlab_download_job_artifactsNoDownload the full artifacts archive as base64 content on local transports. HTTP remote mode returns a short-lived download_url.
gitlab_download_job_artifacts_localYesDownload the full artifacts archive under GITLAB_LOCAL_FILE_ROOTS. Available only on local transports; not exposed over HTTP.
gitlab_get_job_artifact_fileNoReturn one file from a job artifacts archive as inline content. Text-like files are UTF-8; binary files are base64.
gitlab_get_job_artifact_file_localYesSave one artifact file under GITLAB_LOCAL_FILE_ROOTS. Available only on local transports; not exposed over HTTP.
gitlab_create_pipelineYesTrigger a new pipeline. Params: ref (required). Supports variables array (key, value, variable_type) and typed inputs for spec:inputs (string, number, boolean, arrays).
gitlab_retry_pipelineYesRetry failed jobs in a pipeline.
gitlab_cancel_pipelineYesCancel a running pipeline.
gitlab_retry_pipeline_jobYesRetry one failed job.
gitlab_cancel_pipeline_jobYesCancel one running job.
gitlab_play_pipeline_jobYesPlay/trigger a manual job.

CI/CD Variables

Requires both the ci-variables toolset (or all) and GITLAB_ENABLE_CI_VARIABLE_TOOLS=true (default: false). Project and group variants support list, get, create, update, and delete. List endpoints support page and per_page; list, get, update, and delete accept filter.environment_scope to select an environment scope or disambiguate duplicate keys.

Variable values are omitted by default. A list/get response includes value only when the server sets GITLAB_ALLOW_CI_VARIABLE_VALUES=true and that call sets include_value=true. Create/update responses and error details never expose supplied values. Group variants are hidden under strict project scope.

ToolMutatingDescription
gitlab_list_project_variablesNoList project variable metadata.
gitlab_get_project_variableNoGet one project variable by key and optional environment scope.
gitlab_create_project_variableYesCreate a project variable.
gitlab_update_project_variableYesUpdate a project variable.
gitlab_delete_project_variableYesPermanently delete a project variable.
gitlab_list_group_variablesNoList group variable metadata.
gitlab_get_group_variableNoGet one group variable by key and optional environment scope.
gitlab_create_group_variableYesCreate a group variable.
gitlab_update_group_variableYesUpdate a group variable.
gitlab_delete_group_variableYesPermanently delete a group variable.

Dependency Proxy

Requires both the dependency-proxy toolset (or all) and GITLAB_ENABLE_DEPENDENCY_PROXY_TOOLS=true (default: false), plus the admin capability. These group-wide tools are all hidden when GITLAB_ALLOWED_PROJECT_IDS enables strict project scope. GraphQL-backed list/get/update operations also require the graphql capability.

ToolMutatingDescription
gitlab_get_dependency_proxy_settingsNoGet settings, cache usage, image prefix, and TTL policy for a group.
gitlab_update_dependency_proxy_settingsYesUpdate enablement or Docker Hub credentials; secrets are never returned.
gitlab_list_dependency_proxy_blobsNoList cached blobs with first/after GraphQL cursor pagination.
gitlab_purge_dependency_proxy_cacheYesSchedule deletion of every cached manifest and blob for the specified group.

Milestones

Requires USE_MILESTONE=true (default).

ToolMutatingDescription
gitlab_list_milestonesNoList project milestones. Supports iids, state, title, search, include_ancestors, date filters.
gitlab_get_milestoneNoGet a milestone by ID.
gitlab_create_milestoneYesCreate a milestone. Params: title (required). Supports description, due_date, start_date.
gitlab_update_milestoneYesUpdate milestone fields.
gitlab_edit_milestoneYesAlias of update_milestone.
gitlab_delete_milestoneYesDelete a milestone permanently. Irreversible. Requires milestone_id. Pre-check with get_milestone or list_milestones.
gitlab_get_milestone_issueNoList issues assigned to a milestone.
gitlab_get_milestone_merge_requestsNoList MRs assigned to a milestone.
gitlab_promote_milestoneYesPromote a project milestone to a group milestone.
gitlab_get_milestone_burndown_eventsNoList burndown events for a milestone.

Releases

Requires USE_RELEASE=true (default).

ToolMutatingDescription
gitlab_list_releasesNoList project releases. Supports order_by, sort, include_html_description.
gitlab_get_releaseNoGet one release by tag name.
gitlab_create_releaseYesCreate a release. Params: tag_name (required). Supports name, tag_message, description, ref, released_at, milestones, assets.
gitlab_update_releaseYesUpdate existing release.
gitlab_delete_releaseYesDelete the release entry for tag_name permanently. Irreversible for the release record. Pre-check with get_release or list_releases.
gitlab_create_release_evidenceYesCreate evidence for an existing release.
gitlab_download_release_assetNoDownload a release asset. Params: tag_name, direct_asset_path (required). HTTP remote mode returns a short-lived download_url.

Tags

ToolMutatingDescription
gitlab_list_tagsNoList repository tags. Supports order_by, sort, search, and pagination.
gitlab_get_tagNoGet one repository tag by name. Params: tag_name (required).
gitlab_create_tagYesCreate a repository tag. Params: tag_name, ref (required). Supports optional message for annotated tags.
gitlab_delete_tagYesDelete a repository tag permanently. Irreversible. Requires tag_name. Pre-check with get_tag or list_tags.
gitlab_get_tag_signatureNoGet the X.509 signature for a signed repository tag. Params: tag_name (required).

Labels

ToolMutatingDescription
gitlab_list_labelsNoList project labels. Supports with_counts, include_ancestor_groups, search.
gitlab_get_labelNoGet one label by ID. Supports include_ancestor_groups.
gitlab_create_labelYesCreate a label. Params: name, color (required). Supports description, priority.
gitlab_update_labelYesUpdate a label. Identify by name or label_id. Supports new_name, color, description, priority.
gitlab_delete_labelYesDelete a label permanently. Irreversible. Identify by name or label_id. Pre-check with get_label or list_labels.

Uploads & Attachments

ToolMutatingDescription
gitlab_upload_markdownYesUpload markdown content or a stdio-local file under GITLAB_LOCAL_FILE_ROOTS; HTTP mode rejects file_path and requires inline content.
gitlab_download_attachmentNoDownload attachment. Provide either url_or_path or both secret and filename. Absolute url_or_path must be same-origin with configured GitLab API URL. In project-scoped mode (GITLAB_ALLOWED_PROJECT_IDS), url_or_path must be a GitLab upload URL/path and project_id must be provided (or inferred from a single allowed project). HTTP remote mode returns a short-lived download_url for project upload paths.

Work Items

These tools use GitLab GraphQL. Without a project allowlist, a path-like project_id may also identify a group namespace: the server checks the project first, then falls back to the matching group only after a project 404. Numeric IDs never fall back to groups. When GITLAB_ALLOWED_PROJECT_IDS is configured, group fallback is disabled and every source, target, and parent ID remains strictly project-bound and must be allowed.

ToolMutatingDescription
gitlab_get_work_itemNoGet a work item with status, hierarchy, labels, assignees, linked items, custom fields, timeline-related widgets, and development data.
gitlab_list_work_itemsNoList work items in a project. Supports types, state, search, assignee_usernames, label_names, first, and cursor after.
gitlab_create_work_itemYesCreate a work item. Supports all GitLab work item types plus description, labels, assignees, parent, dates, milestone, iteration, confidentiality; weight is rejected for incidents.
gitlab_update_work_itemYesUpdate fields, labels, assignees, state, status, hierarchy, linked items, custom fields, dates, milestone, iteration, and incident severity/escalation. Nested child/link references default to the current project when project_id is omitted.
gitlab_convert_work_item_typeYesConvert a work item to another type. Params: iid, new_type (required).
gitlab_list_work_item_statusesNoList statuses, conversion types, and allowed hierarchy types for a work item type.
gitlab_list_custom_field_definitionsNoList custom field IDs, types, select options, and supported work item types.
gitlab_move_work_itemYesMove a work item to another project. Params: iid, target_project_id (required).
gitlab_list_work_item_notesNoList threaded work item discussions and notes with pagination.
gitlab_create_work_item_noteYesAdd a work item note or threaded reply. Supports internal and discussion_id.
gitlab_list_work_item_emoji_reactionsNoList emoji reactions on a work item.
gitlab_list_work_item_note_emoji_reactionsNoList emoji reactions on a work item note by GraphQL note_id.
gitlab_create_work_item_emoji_reactionYesAdd an emoji reaction to a work item. Params: iid, name (required).
gitlab_delete_work_item_emoji_reactionYesRemove the current user's emoji reaction from a work item by emoji name.
gitlab_create_work_item_note_emoji_reactionYesAdd an emoji reaction to a work item note by GraphQL note_id.
gitlab_delete_work_item_note_emoji_reactionYesRemove the current user's emoji reaction from a work item note by GraphQL note_id and emoji name.
gitlab_get_timeline_eventsNoList incident timeline events. Params: incident_iid (required).
gitlab_create_timeline_eventYesCreate an incident timeline event. Params: incident_iid, note, occurred_at (required), optional tag_names.

GraphQL

ToolMutatingDescription
gitlab_execute_graphql_queryNoExecute a read-only GraphQL query. Rejects mutations.
gitlab_execute_graphql_mutationYesExecute a GraphQL mutation. Hidden in readonly; modify rejects destructive mutation-root field names.
gitlab_execute_graphqlNo*Backward-compatible executor. Automatically detects mutations and applies the same permission-mode and destructive-operation guards.

* gitlab_execute_graphql is registered with read + graphql capability and dynamically requires write + graphql capability when the payload contains a mutation. In modify, raw mutation documents are parsed and fields containing delete, destroy, remove, prune, or purge at the mutation root are rejected. Aliases, inline fragments, and fragment spreads are resolved; unparseable or structurally ambiguous documents fail closed.

When GITLAB_ALLOWED_PROJECT_IDS is configured, all raw GraphQL tools are hidden because arbitrary GraphQL documents cannot be proven project-safe. The legacy GITLAB_ALLOW_GRAPHQL_WITH_PROJECT_SCOPE setting is retained for compatibility but does not override this restriction. Use the project-bound Work Item tools above for supported GraphQL operations.