Projects
Everything done to a project: create (for the user or for someone else), read, list, update, fork, star, archive, transfer, delete and restore it, with its forks, starrers, users, groups, languages, statistics and storage; its members and its sharing with groups; webhooks; labels, milestones, boards and badges; push mirrors; Pages and its custom domains; integrations, including group integrations and the group Datadog integration; Markdown uploads and its avatar; export and import; housekeeping; and its service accounts with their personal access tokens.
From Premium the project also carries approval rules and approval settings, push rules, pull mirroring, target branch rules and the dependency firewall’s package evaluation; from Ultimate, its security settings. Repository content, branches, issues and merge requests have pages of their own.
project.transfer needs the Owner role on the project and permission to create projects in the target namespace. Since GitLab 19.4 GitLab applies a transfer in the background (GitLab 18.11 to 19.3 do so when the groups_and_projects_async_transfer feature flag is enabled): it answers with the project where it still is, and a worker moves it and checks there that the name and path are free in the target namespace. The action reads the project back every 2 seconds for up to 45 seconds. GitLab reports a failed move only as a pending to-do item of action transfer_failed for the user who asked for it, which the action turns into an error; a move that has neither landed nor failed by then is answered with transfer_queued set. Read the project back later with project.get, look for that item with user.todo_list, and do not send the transfer again, since GitLab runs a second transfer as well while the first is queued.
project.dependency_firewall_evaluate is an experiment GitLab 19.4 introduced behind the dependency_firewall_phase1 feature flag, which is disabled by default, and while it is off every project on the instance answers 404; the action answers that 404 by naming the flag first. With the flag on, GitLab evaluates a package only for a project the Dependency Firewall is turned on for, and answers 422 (dependency_firewall_not_enforced) for any other: on a self-managed instance an administrator turns it on under Admin > Settings > Security and compliance > Dependency firewall, which no API sets, and on GitLab.com an Owner turns it on in the top-level group’s security settings. Until a verdict arrives, treat the package as not evaluated rather than as allowed.
Sample questions
Section titled “Sample questions”- “List my GitLab projects”
- “Create a private project called my-app in group platform”
- “Who has access to project 42?”
- “Add a push mirror to the backup host”
How to call it
Section titled “How to call it”- Dynamic, the default surface: call
gitlab_execute_actionwithactionset to the action’s ID, such asproject.approval_config_change, and its parameters inparams.gitlab_find_actionfinds an ID from a description of the task. - Meta (
GITLAB_MCP_TOOL_SURFACE=meta): callgitlab_projectwithactionset to the action’s name, such asapproval_config_change, and its parameters inparams. - Individual (
GITLAB_MCP_TOOL_SURFACE=individual): call the action’s own tool, such asgitlab_project_approval_config_change, with its parameters as the arguments.
Availability
Section titled “Availability”How many of these actions an instance serves at each tier, out of a total of 144:
- Free: 124
- Premium: 142
- Ultimate: 144
Read-only actions: 59 of 144, the ones a deployment in read-only mode keeps.
Actions
Section titled “Actions”The description of each action, and of each of its parameters, is the text the server serves for it on the default surface, quoted as served. A destructive action runs only once confirmed, unless GITLAB_MCP_YOLO_MODE (or AUTOPILOT) skips that step: the dynamic surface needs confirm: true on gitlab_execute_action, and the other two take a confirm parameter or the client’s prompt (Destructive actions). A parameter followed by a tier in parentheses is served only from that tier on.
| Action | Tier | Individual |
|---|---|---|
project.approval_config_change | Premium | gitlab_project_approval_config_change |
project.approval_config_get | Premium | gitlab_project_approval_config_get |
project.approval_rule_create | Premium | gitlab_project_approval_rule_create |
project.approval_rule_delete | Premium | gitlab_project_approval_rule_delete |
project.approval_rule_get | Premium | gitlab_project_approval_rule_get |
project.approval_rule_list | Premium | gitlab_project_approval_rule_list |
project.approval_rule_update | Premium | gitlab_project_approval_rule_update |
project.archive | Free | gitlab_project_archive |
project.badge_add | Free | gitlab_add_project_badge |
project.badge_delete | Free | gitlab_delete_project_badge |
project.badge_edit | Free | gitlab_edit_project_badge |
project.badge_get | Free | gitlab_get_project_badge |
project.badge_list | Free | gitlab_list_project_badges |
project.badge_preview | Free | gitlab_preview_project_badge |
project.board_create | Free | gitlab_board_create |
project.board_delete | Free | gitlab_board_delete |
project.board_get | Free | gitlab_board_get |
project.board_list | Free | gitlab_board_list |
project.board_list_create | Free | gitlab_board_list_create |
project.board_list_delete | Free | gitlab_board_list_delete |
project.board_list_get | Free | gitlab_board_list_get |
project.board_list_list | Free | gitlab_board_list_lists |
project.board_list_update | Free | gitlab_board_list_update |
project.board_update | Free | gitlab_board_update |
project.create | Free | gitlab_project_create |
project.create_for_user | Free | gitlab_project_create_for_user |
project.create_fork_relation | Free | gitlab_project_create_fork_relation |
project.delete | Free | gitlab_project_delete |
project.delete_fork_relation | Free | gitlab_project_delete_fork_relation |
project.delete_shared_group | Free | gitlab_project_delete_shared_group |
project.dependency_firewall_evaluate | Premium | gitlab_project_dependency_firewall_evaluate |
project.download_avatar | Free | gitlab_project_download_avatar |
project.export_download | Free | gitlab_download_project_export |
project.export_schedule | Free | gitlab_schedule_project_export |
project.export_status | Free | gitlab_get_project_export_status |
project.fork | Free | gitlab_project_fork |
project.get | Free | gitlab_project_get |
project.hook_add | Free | gitlab_project_hook_add |
project.hook_delete | Free | gitlab_project_hook_delete |
project.hook_delete_custom_header | Free | gitlab_project_hook_delete_custom_header |
project.hook_delete_url_variable | Free | gitlab_project_hook_delete_url_variable |
project.hook_edit | Free | gitlab_project_hook_edit |
project.hook_get | Free | gitlab_project_hook_get |
project.hook_list | Free | gitlab_project_hook_list |
project.hook_set_custom_header | Free | gitlab_project_hook_set_custom_header |
project.hook_set_url_variable | Free | gitlab_project_hook_set_url_variable |
project.hook_test | Free | gitlab_project_hook_test |
project.import_from_file | Free | gitlab_import_project_from_file |
project.import_status | Free | gitlab_get_project_import_status |
project.integration_delete | Free | gitlab_delete_integration |
project.integration_delete_group | Free | gitlab_delete_group_integration |
project.integration_delete_group_datadog | Free | gitlab_delete_group_datadog_integration |
project.integration_get | Free | gitlab_get_integration |
project.integration_get_group | Free | gitlab_get_group_integration |
project.integration_get_group_datadog | Free | gitlab_get_group_datadog_integration |
project.integration_list | Free | gitlab_list_integrations |
project.integration_list_group | Free | gitlab_list_group_integrations |
project.integration_set | Free | gitlab_set_integration |
project.integration_set_group | Free | gitlab_set_group_integration |
project.integration_set_group_datadog | Free | gitlab_set_group_datadog_integration |
project.integration_set_jira | Free | gitlab_set_jira_integration |
project.label_create | Free | gitlab_label_create |
project.label_delete | Free | gitlab_label_delete |
project.label_get | Free | gitlab_label_get |
project.label_list | Free | gitlab_label_list |
project.label_promote | Free | gitlab_label_promote |
project.label_subscribe | Free | gitlab_label_subscribe |
project.label_unsubscribe | Free | gitlab_label_unsubscribe |
project.label_update | Free | gitlab_label_update |
project.languages | Free | gitlab_project_languages |
project.list | Free | gitlab_project_list |
project.list_forks | Free | gitlab_project_list_forks |
project.list_groups | Free | gitlab_project_list_groups |
project.list_invited_groups | Free | gitlab_project_list_invited_groups |
project.list_starrers | Free | gitlab_project_list_starrers |
project.list_user_contributed | Free | gitlab_project_list_user_contributed |
project.list_user_projects | Free | gitlab_project_list_user_projects |
project.list_user_starred | Free | gitlab_project_list_user_starred |
project.list_users | Free | gitlab_project_list_users |
project.member_add | Free | gitlab_project_member_add |
project.member_delete | Free | gitlab_project_member_delete |
project.member_edit | Free | gitlab_project_member_edit |
project.member_get | Free | gitlab_project_member_get |
project.member_inherited | Free | gitlab_project_member_get_inherited |
project.members | Free | gitlab_project_members_list |
project.milestone_create | Free | gitlab_milestone_create |
project.milestone_delete | Free | gitlab_milestone_delete |
project.milestone_get | Free | gitlab_milestone_get |
project.milestone_issues | Free | gitlab_milestone_issues |
project.milestone_list | Free | gitlab_milestone_list |
project.milestone_merge_requests | Free | gitlab_milestone_merge_requests |
project.milestone_update | Free | gitlab_milestone_update |
project.mirror_add | Free | gitlab_add_project_mirror |
project.mirror_delete | Free | gitlab_delete_project_mirror |
project.mirror_edit | Free | gitlab_edit_project_mirror |
project.mirror_force_push | Free | gitlab_force_push_mirror_update |
project.mirror_get | Free | gitlab_get_project_mirror |
project.mirror_get_public_key | Free | gitlab_get_project_mirror_public_key |
project.mirror_list | Free | gitlab_list_project_mirrors |
project.pages_domain_create | Free | gitlab_pages_domain_create |
project.pages_domain_delete | Free | gitlab_pages_domain_delete |
project.pages_domain_get | Free | gitlab_pages_domain_get |
project.pages_domain_list | Free | gitlab_pages_domain_list |
project.pages_domain_list_all | Free | gitlab_pages_domain_list_all |
project.pages_domain_update | Free | gitlab_pages_domain_update |
project.pages_get | Free | gitlab_pages_get |
project.pages_unpublish | Free | gitlab_pages_unpublish |
project.pages_update | Free | gitlab_pages_update |
project.pull_mirror_configure | Premium | gitlab_project_pull_mirror_configure |
project.pull_mirror_get | Premium | gitlab_project_pull_mirror_get |
project.push_rule_add | Premium | gitlab_project_add_push_rule |
project.push_rule_delete | Premium | gitlab_project_delete_push_rule |
project.push_rule_edit | Premium | gitlab_project_edit_push_rule |
project.push_rule_get | Premium | gitlab_project_get_push_rules |
project.repository_storage_get | Free | gitlab_project_repository_storage_get |
project.restore | Free | gitlab_project_restore |
project.security_settings_get | Ultimate | gitlab_get_project_security_settings |
project.security_settings_update | Ultimate | gitlab_update_project_secret_push_protection |
project.service_account_create | Free | gitlab_project_service_account_create |
project.service_account_delete | Free | gitlab_project_service_account_delete |
project.service_account_get | Free | gitlab_project_service_account_get |
project.service_account_list | Free | gitlab_project_service_account_list |
project.service_account_pat_create | Free | gitlab_project_service_account_pat_create |
project.service_account_pat_list | Free | gitlab_project_service_account_pat_list |
project.service_account_pat_revoke | Free | gitlab_project_service_account_pat_revoke |
project.service_account_pat_rotate | Free | gitlab_project_service_account_pat_rotate |
project.service_account_update | Free | gitlab_project_service_account_update |
project.share_with_group | Free | gitlab_project_share_with_group |
project.star | Free | gitlab_project_star |
project.start_housekeeping | Free | gitlab_project_start_housekeeping |
project.start_mirroring | Premium | gitlab_project_start_mirroring |
project.statistics_get | Free | gitlab_get_project_statistics |
project.target_branch_rule_create | Premium | gitlab_project_create_target_branch_rule |
project.target_branch_rule_delete | Premium | gitlab_project_delete_target_branch_rule |
project.target_branch_rule_list | Premium | gitlab_project_list_target_branch_rules |
project.transfer | Free | gitlab_project_transfer |
project.unarchive | Free | gitlab_project_unarchive |
project.unstar | Free | gitlab_project_unstar |
project.update | Free | gitlab_project_update |
project.upload | Free | gitlab_project_upload |
project.upload_avatar | Free | gitlab_project_upload_avatar |
project.upload_delete | Free | gitlab_project_upload_delete |
project.upload_delete_by_secret | Free | gitlab_project_upload_delete_by_secret |
project.upload_list | Free | gitlab_project_upload_list |
project.approval_config_change
Section titled “project.approval_config_change”Change a project’s approval configuration. Returns: the updated approval settings. See also:
project.approval_config_get,project.approval_rule_create.
- Meta-tool:
gitlab_project, actionapproval_config_change - Individual tool:
gitlab_project_approval_config_change - Tier: Premium
- Behavior: writes, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
project_id | string/integer | yes | Project ID or URL-encoded path |
approvals_before_merge | integer | no | Number of approvals required before merge |
disable_overriding_approvers_per_merge_request | boolean | no | Prevent overriding approvers per MR |
merge_requests_author_approval | boolean | no | Allow MR author to approve their own MR |
merge_requests_disable_committers_approval | boolean | no | Prevent MR committers from approving |
require_password_to_approve | boolean | no | Require the approver’s password to approve (deprecated: use require_reauthentication_to_approve) |
require_reauthentication_to_approve | boolean | no | Require reauthentication to approve |
reset_approvals_on_push | boolean | no | Reset approvals when new commits are pushed |
selective_code_owner_removals | boolean | no | Only remove code owner approvals when relevant files change |
project.approval_config_get
Section titled “project.approval_config_get”Get a project’s approval configuration. Returns: the approval settings such as reset_approvals_on_push and author approval flags. See also:
project.approval_config_change,project.approval_rule_list.
- Meta-tool:
gitlab_project, actionapproval_config_get - Individual tool:
gitlab_project_approval_config_get - Tier: Premium
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
project_id | string/integer | yes | Project ID or URL-encoded path |
project.approval_rule_create
Section titled “project.approval_rule_create”Create a project approval rule. Returns: the created rule with name, approvals_required, users, and groups. See also:
project.approval_rule_list,project.approval_rule_update.
- Meta-tool:
gitlab_project, actionapproval_rule_create - Individual tool:
gitlab_project_approval_rule_create - Tier: Premium
- Behavior: writes, not idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
approvals_required | integer | yes | Number of approvals required |
name | string | yes | Rule name |
project_id | string/integer | yes | Project ID or URL-encoded path |
applies_to_all_protected_branches | boolean | no | Apply this rule to all protected branches |
group_ids | integer[] | no | Group IDs to assign as approvers |
protected_branch_ids | integer[] | no | Protected branch IDs to scope the rule to |
report_type | string | no | Report type for report-approver rules (e.g. code_coverage, license_scanning) |
rule_type | string (any_approver, regular, report_approver) | no | Rule type: any_approver (the pre-configured default rule with approvals_required 0), regular (an ordinary approval rule), or report_approver (reserved for rules GitLab creates from merge request approval policies, do not send it) |
user_ids | integer[] | no | User IDs to assign as approvers |
usernames | string[] | no | Usernames to assign as approvers |
project.approval_rule_delete
Section titled “project.approval_rule_delete”Delete a project approval rule. Returns: a success confirmation naming the rule and project. See also:
project.approval_rule_list,project.approval_config_get.
- Meta-tool:
gitlab_project, actionapproval_rule_delete - Individual tool:
gitlab_project_approval_rule_delete - Tier: Premium
- Behavior: writes, destructive (needs confirmation), idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
project_id | string/integer | yes | Project ID or URL-encoded path |
rule_id | integer | yes | Approval rule ID to delete |
project.approval_rule_get
Section titled “project.approval_rule_get”Get a single project approval rule. Returns: the rule with name, approvals_required, users, and groups. See also:
project.approval_rule_list,project.approval_rule_update.
- Meta-tool:
gitlab_project, actionapproval_rule_get - Individual tool:
gitlab_project_approval_rule_get - Tier: Premium
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
project_id | string/integer | yes | Project ID or URL-encoded path |
rule_id | integer | yes | Approval rule ID |
project.approval_rule_list
Section titled “project.approval_rule_list”List a project’s approval rules. Returns: rules with name, approvals_required, eligible approvers, and groups, plus pagination metadata. See also:
project.approval_rule_get,project.approval_rule_create.
- Meta-tool:
gitlab_project, actionapproval_rule_list - Individual tool:
gitlab_project_approval_rule_list - Tier: Premium
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
project_id | string/integer | yes | Project ID or URL-encoded path |
order_by | string | no | Keyset ordering column (for keyset pagination) |
page | integer | no | Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward. |
page_token | string | no | Keyset pagination cursor: record id at which to fetch the next page, taken from the previous keyset response. Only used when pagination=‘keyset’. |
pagination | string | no | Pagination method: ‘keyset’ for keyset-based pagination on large ordered result sets, or ‘offset’ (the default). Keyset avoids deep-offset cost. |
per_page | integer | no | Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large. |
sort | string (asc, desc) | no | Keyset sort direction (asc, desc) |
project.approval_rule_update
Section titled “project.approval_rule_update”Update a project approval rule. Returns: the updated rule with name, approvals_required, users, and groups. See also:
project.approval_rule_get,project.approval_rule_delete.
- Meta-tool:
gitlab_project, actionapproval_rule_update - Individual tool:
gitlab_project_approval_rule_update - Tier: Premium
- Behavior: writes, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
project_id | string/integer | yes | Project ID or URL-encoded path |
rule_id | integer | yes | Approval rule ID |
applies_to_all_protected_branches | boolean | no | Apply this rule to all protected branches |
approvals_required | integer | no | Updated number of approvals required |
group_ids | integer[] | no | Updated group IDs to assign as approvers |
name | string | no | Updated rule name |
protected_branch_ids | integer[] | no | Updated protected branch IDs |
user_ids | integer[] | no | Updated user IDs to assign as approvers |
usernames | string[] | no | Updated usernames to assign as approvers |
project.archive
Section titled “project.archive”Archive a project, making it read-only in GitLab. Returns: the project with archived set to true. See also:
project.unarchive,project.get.
- Meta-tool:
gitlab_project, actionarchive - Individual tool:
gitlab_project_archive - Tier: Free
- Behavior: writes, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
project_id | string/integer | yes | Project ID or URL-encoded path |
project.badge_add
Section titled “project.badge_add”Add a badge to a project. Returns: the created badge with id, name, link_url, image_url, rendered_link_url, rendered_image_url, and kind. See also:
project.badge_list,project.badge_get.
- Meta-tool:
gitlab_project, actionbadge_add - Individual tool:
gitlab_add_project_badge - Tier: Free
- Behavior: writes, not idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
image_url | string | yes | Badge image URL (supports placeholders) |
link_url | string | yes | Badge link URL (supports placeholders) |
project_id | string/integer | yes | Project ID or URL-encoded path |
name | string | no | Badge name |
project.badge_delete
Section titled “project.badge_delete”Delete a project badge by badge_id. Returns: a success confirmation. See also:
project.badge_list,project.badge_get.
- Meta-tool:
gitlab_project, actionbadge_delete - Individual tool:
gitlab_delete_project_badge - Tier: Free
- Behavior: writes, destructive (needs confirmation), idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
badge_id | integer | yes | Badge ID |
project_id | string/integer | yes | Project ID or URL-encoded path |
project.badge_edit
Section titled “project.badge_edit”Edit a project badge’s name, link_url, or image_url. Returns: the updated badge with id, name, link_url, image_url, rendered_link_url, rendered_image_url, and kind. See also:
project.badge_list,project.badge_get.
- Meta-tool:
gitlab_project, actionbadge_edit - Individual tool:
gitlab_edit_project_badge - Tier: Free
- Behavior: writes, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
badge_id | integer | yes | Badge ID |
project_id | string/integer | yes | Project ID or URL-encoded path |
image_url | string | no | New badge image URL |
link_url | string | no | New badge link URL |
name | string | no | New badge name. Use name, not new_name |
project.badge_get
Section titled “project.badge_get”Get a single project badge by badge_id. Returns: the badge with id, name, link_url, image_url, rendered_link_url, rendered_image_url, and kind. See also:
project.badge_list,project.badge_edit.
- Meta-tool:
gitlab_project, actionbadge_get - Individual tool:
gitlab_get_project_badge - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
badge_id | integer | yes | Badge ID |
project_id | string/integer | yes | Project ID or URL-encoded path |
project.badge_list
Section titled “project.badge_list”List badges for a project, including inherited group badges. Returns: badges (id, name, link_url, image_url, rendered_link_url, rendered_image_url, and kind) plus pagination metadata. See also:
project.badge_get,project.badge_add.
- Meta-tool:
gitlab_project, actionbadge_list - Individual tool:
gitlab_list_project_badges - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
project_id | string/integer | yes | Project ID or URL-encoded path |
name | string | no | Filter by badge name |
order_by | string | no | Column to order results by for keyset pagination (e.g. id, name) |
page | integer | no | Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward. |
page_token | string | no | Keyset pagination cursor: record id at which to fetch the next page, taken from the previous keyset response. Only used when pagination=‘keyset’. |
pagination | string | no | Pagination method: ‘keyset’ for keyset-based pagination on large ordered result sets, or ‘offset’ (the default). Keyset avoids deep-offset cost. |
per_page | integer | no | Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large. |
sort | string (asc, desc) | no | Sort direction (asc, desc) |
project.badge_preview
Section titled “project.badge_preview”Preview how a project badge’s link_url and image_url resolve after placeholder interpolation, without persisting it. Returns: the rendered badge with id, name, link_url, image_url, rendered_link_url, rendered_image_url, and kind. See also:
project.badge_add,project.badge_list.
- Meta-tool:
gitlab_project, actionbadge_preview - Individual tool:
gitlab_preview_project_badge - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
image_url | string | yes | Badge image URL with placeholders |
link_url | string | yes | Badge link URL with placeholders |
project_id | string/integer | yes | Project ID or URL-encoded path |
project.board_create
Section titled “project.board_create”Create a new issue board in a project. Returns: the created board with its project, scope, and lists. See also:
project.board_get,project.board_update,project.board_list.
- Meta-tool:
gitlab_project, actionboard_create - Individual tool:
gitlab_board_create - Tier: Free
- Behavior: writes, not idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
name | string | yes | Board name |
project_id | string/integer | yes | Project ID or path |
project.board_delete
Section titled “project.board_delete”Delete an issue board permanently. Returns: a success confirmation naming the board and project. See also:
project.board_get,project.board_list.
- Meta-tool:
gitlab_project, actionboard_delete - Individual tool:
gitlab_board_delete - Tier: Free
- Behavior: writes, destructive (needs confirmation), idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
board_id | integer | yes | Board ID |
project_id | string/integer | yes | Project ID or path |
project.board_get
Section titled “project.board_get”Get a single issue board by board_id. Returns: the board with its project, milestone, assignee, scope labels, and ordered lists. See also:
project.board_list,project.board_update,project.board_delete.
- Meta-tool:
gitlab_project, actionboard_get - Individual tool:
gitlab_board_get - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
board_id | integer | yes | Board ID |
project_id | string/integer | yes | Project ID or path |
project.board_list
Section titled “project.board_list”List a project’s issue boards with pagination. Returns: each board with its project, milestone, assignee, scope labels, and lists. See also:
project.board_get,project.board_create,project.board_list_list.
- Meta-tool:
gitlab_project, actionboard_list - Individual tool:
gitlab_board_list - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
project_id | string/integer | yes | Project ID or path |
order_by | string | no | Column to order results by for keyset pagination (e.g. id, created_at, updated_at) |
page | integer | no | Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward. |
page_token | string | no | Keyset pagination cursor: record id at which to fetch the next page, taken from the previous keyset response. Only used when pagination=‘keyset’. |
pagination | string | no | Pagination method: ‘keyset’ for keyset-based pagination on large ordered result sets, or ‘offset’ (the default). Keyset avoids deep-offset cost. |
per_page | integer | no | Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large. |
sort | string (asc, desc) | no | Sort direction (asc, desc) |
project.board_list_create
Section titled “project.board_list_create”Create a board list (column) scoped to a label, assignee, milestone, or iteration. Returns: the created list with its scope, position, and issue limits. See also:
project.board_list_get,project.board_list_update,project.board_list_list.
- Meta-tool:
gitlab_project, actionboard_list_create - Individual tool:
gitlab_board_list_create - Tier: Free
- Behavior: writes, not idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
board_id | integer | yes | Board ID |
project_id | string/integer | yes | Project ID or path |
assignee_id | integer | no | Assignee ID to create an assignee list |
iteration_id | integer | no | Iteration ID to create an iteration list |
label_id | integer | no | Label ID to create a label list |
milestone_id | integer | no | Milestone ID to create a milestone list |
project.board_list_delete
Section titled “project.board_list_delete”Delete a board list (column) permanently. Returns: a success confirmation naming the list. See also:
project.board_list_get,project.board_list_list.
- Meta-tool:
gitlab_project, actionboard_list_delete - Individual tool:
gitlab_board_list_delete - Tier: Free
- Behavior: writes, destructive (needs confirmation), idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
board_id | integer | yes | Board ID |
list_id | integer | yes | Board list ID |
project_id | string/integer | yes | Project ID or path |
project.board_list_get
Section titled “project.board_list_get”Get a single board list by list_id. Returns: the list with its label, assignee, milestone, iteration, position, and issue limits. See also:
project.board_list_list,project.board_list_update,project.board_list_delete.
- Meta-tool:
gitlab_project, actionboard_list_get - Individual tool:
gitlab_board_list_get - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
board_id | integer | yes | Board ID |
list_id | integer | yes | Board list ID |
project_id | string/integer | yes | Project ID or path |
project.board_list_list
Section titled “project.board_list_list”List the lists (columns) in an issue board with pagination. Returns: each list with its label, assignee, milestone, iteration, position, and issue limits. See also:
project.board_list_get,project.board_list_create,project.board_get.
- Meta-tool:
gitlab_project, actionboard_list_list - Individual tool:
gitlab_board_list_lists - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
board_id | integer | yes | Board ID |
project_id | string/integer | yes | Project ID or path |
order_by | string | no | Column to order results by for keyset pagination (e.g. id, created_at, updated_at) |
page | integer | no | Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward. |
page_token | string | no | Keyset pagination cursor: record id at which to fetch the next page, taken from the previous keyset response. Only used when pagination=‘keyset’. |
pagination | string | no | Pagination method: ‘keyset’ for keyset-based pagination on large ordered result sets, or ‘offset’ (the default). Keyset avoids deep-offset cost. |
per_page | integer | no | Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large. |
sort | string (asc, desc) | no | Sort direction (asc, desc) |
project.board_list_update
Section titled “project.board_list_update”Reorder a board list to a new position. Returns: the updated list with its scope, position, and issue limits. See also:
project.board_list_get,project.board_list_list,project.board_list_delete.
- Meta-tool:
gitlab_project, actionboard_list_update - Individual tool:
gitlab_board_list_update - Tier: Free
- Behavior: writes, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
board_id | integer | yes | Board ID |
list_id | integer | yes | Board list ID |
position | integer | yes | New position of the list |
project_id | string/integer | yes | Project ID or path |
project.board_update
Section titled “project.board_update”Update an issue board’s name, scope (assignee, milestone, labels, weight), or list visibility. Returns: the updated board with its project, scope, and lists. See also:
project.board_get,project.board_delete,project.board_list.
- Meta-tool:
gitlab_project, actionboard_update - Individual tool:
gitlab_board_update - Tier: Free
- Behavior: writes, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
board_id | integer | yes | Board ID |
project_id | string/integer | yes | Project ID or path |
assignee_id | integer | no | Assignee user ID |
hide_backlog_list | boolean | no | Hide the Open list |
hide_closed_list | boolean | no | Hide the Closed list |
labels | string[] | no | Board scope label names |
milestone_id | integer | no | Milestone ID |
name | string | no | Board name |
weight | integer | no | Board scope weight |
project.create
Section titled “project.create”Create a new GitLab project. Returns: the created project with id, path_with_namespace, default_branch, visibility, and web URL. See also:
project.get,project.update,project.create_for_user.
- Meta-tool:
gitlab_project, actioncreate - Individual tool:
gitlab_project_create - Tier: Free
- Behavior: writes, not idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
name | string | yes | Project name |
allow_merge_on_skipped_pipeline | boolean | no | Allow merge when pipeline is skipped |
analytics_access_level | string | no | Analytics access level (disabled, private, enabled) |
approvals_before_merge (Premium) | integer | no | Number of approvals required before merge (deprecated: use Merge Request Approvals API) |
auto_cancel_pending_pipelines | string (enabled, disabled) | no | Auto-cancel redundant pending pipelines when a newer pipeline starts: enabled or disabled. |
auto_devops_deploy_strategy | string (continuous, manual, timed_incremental) | no | Auto DevOps deploy strategy: continuous (auto-deploy to production), manual (require manual gate), or timed_incremental (deploy incrementally with time delays). |
auto_devops_enabled | boolean | no | Enable Auto DevOps for the project |
autoclose_referenced_issues | boolean | no | Auto-close referenced issues on merge |
build_git_strategy | string (fetch, clone) | no | Git strategy for CI builds: fetch (reuse existing clone, faster) or clone (fresh clone every time). |
build_timeout | integer | no | Build timeout in seconds |
builds_access_level | string | no | CI/CD builds access level (disabled, private, enabled) |
ci_config_path | string | no | Custom CI/CD configuration file path |
ci_forward_deployment_enabled | boolean | no | Enable CI/CD forward deployment (deprecated: no longer supported in recent versions) |
cicd_catalog_enabled | boolean | no | Publish the project as a CI/CD catalog resource |
container_expiration_policy_attributes | object | no | Container registry cleanup policy attributes |
container_registry_access_level | string | no | Container registry access level (disabled, private, enabled) |
container_registry_enabled | boolean | no | Enable container registry (deprecated: use container_registry_access_level) |
default_branch | string | no | Default branch name |
description | string | no | Project description |
emails_disabled | boolean | no | Disable email notifications (deprecated: use emails_enabled) |
emails_enabled | boolean | no | Enable email notifications |
enforce_auth_checks_on_uploads | boolean | no | Enforce authorization checks on uploads |
environments_access_level | string | no | Environments access level (disabled, private, enabled) |
external_authorization_classification_label | string | no | External authorization classification label |
feature_flags_access_level | string | no | Feature flags access level (disabled, private, enabled) |
forking_access_level | string | no | Forking access level (disabled, private, enabled) |
group_runners_enabled | boolean | no | Enable group runners |
group_with_project_templates_id | integer | no | Group ID that provides the custom project templates |
import_url | string | no | URL to import repository from |
infrastructure_access_level | string | no | Infrastructure access level (disabled, private, enabled) |
initialize_with_readme | boolean | no | Initialize with a README |
issue_branch_template | string | no | Template for branch names created from issues |
issues_access_level | string | no | Issues access level (disabled, private, enabled) |
issues_enabled | boolean | no | Enable issues feature (deprecated: use issues_access_level) |
issues_template | string | no | Default issue description template (deprecated: no longer supported in recent versions) |
jobs_enabled | boolean | no | Enable CI/CD jobs (deprecated: use builds_access_level) |
lfs_enabled | boolean | no | Enable Git LFS |
merge_commit_template | string | no | Template for merge commit messages |
merge_method | string (merge, rebase_merge, ff) | no | Merge method: merge (default merge commit), rebase_merge (rebase then merge commit), or ff (fast-forward, no merge commit). |
merge_pipelines_enabled | boolean | no | Enable merged results pipelines |
merge_request_title_regex | string | no | Regex that MR titles must match |
merge_request_title_regex_description | string | no | Human-readable description for the MR title regex |
merge_requests_access_level | string | no | Merge requests access level (disabled, private, enabled) |
merge_requests_enabled | boolean | no | Enable merge requests feature (deprecated: use merge_requests_access_level) |
merge_requests_template | string | no | Default merge request description template (deprecated: no longer supported in recent versions) |
merge_trains_enabled | boolean | no | Enable merge trains |
merge_trains_skip_train_allowed | boolean | no | Allow skipping the merge train |
mirror | boolean | no | Enable pull mirroring from import_url |
mirror_trigger_builds | boolean | no | Trigger pipelines for mirror updates |
model_experiments_access_level | string | no | Model experiments access level (disabled, private, enabled) |
model_registry_access_level | string | no | Model registry access level (disabled, private, enabled) |
monitor_access_level | string | no | Monitor access level (disabled, private, enabled) |
mr_default_title_template | string | no | Template for default merge request titles |
namespace_id | integer | no | Namespace ID (defaults to personal namespace) |
only_allow_merge_if_all_discussions_are_resolved | boolean | no | Only allow merge when all discussions are resolved |
only_allow_merge_if_all_status_checks_passed (Ultimate) | boolean | no | Only allow merge when all external status checks pass |
only_allow_merge_if_pipeline_succeeds | boolean | no | Only allow merge when pipeline succeeds |
package_registry_access_level | string | no | Package registry access level (disabled, private, enabled) |
packages_enabled | boolean | no | Enable packages feature (deprecated: use package_registry_access_level) |
pages_access_level | string | no | Pages access level (disabled, private, enabled, public) |
path | string | no | Project path slug (defaults from name) |
printing_merge_request_link_enabled | boolean | no | Show the create-merge-request link after pushing |
protect_merge_request_pipelines | boolean | no | Prevent merge request pipeline settings from being modified by users with lower permissions |
public_builds | boolean | no | Enable public access to pipelines (deprecated: use public_jobs) |
public_jobs | boolean | no | Enable public access to pipelines |
releases_access_level | string | no | Releases access level (disabled, private, enabled) |
remove_source_branch_after_merge | boolean | no | Remove source branch after merge by default |
repository_access_level | string | no | Repository access level (disabled, private, enabled) |
repository_storage | string | no | Repository storage shard name (admin only) |
request_access_enabled | boolean | no | Allow users to request access |
requirements_access_level | string | no | Requirements access level (disabled, private, enabled) |
resolve_outdated_diff_discussions | boolean | no | Auto-resolve outdated diff discussions |
resource_group_default_process_mode | string (unordered, oldest_first, newest_first, newest_ready_first) | no | Default process mode for resource groups: unordered (run in parallel), oldest_first, newest_first, or newest_ready_first. |
reviewer_assignment_strategy (Premium) | string (disabled, code_owners) | no | Strategy used to automatically assign reviewers to merge requests: disabled or code_owners. The former dap_powered value was removed in GitLab 19.4 and only appears in responses of projects configured before then |
security_and_compliance_access_level | string | no | Security and compliance access level (disabled, private, enabled) |
service_desk_enabled | boolean | no | Enable Service Desk |
shared_runners_enabled | boolean | no | Enable shared runners |
show_default_award_emojis | boolean | no | Show default award emojis on issues/MRs |
snippets_access_level | string | no | Snippets access level (disabled, private, enabled) |
snippets_enabled | boolean | no | Enable snippets feature (deprecated: use snippets_access_level) |
squash_commit_template | string | no | Template for squash commit messages |
squash_option | string (never, always, default_on, default_off) | no | Squash commits on merge: never (not allowed), always (always squash), default_on (squash by default, overridable per MR), or default_off (no squash by default, overridable per MR). |
suggestion_commit_message | string | no | Default commit message for suggestions |
tag_list | string[] | no | Project tags (deprecated: use topics) |
template_name | string | no | Built-in project template name to use |
template_project_id | integer | no | Custom project template ID to use |
topics | string[] | no | Topic tags for the project |
use_custom_template | boolean | no | Use a custom group/instance project template |
visibility | string (private, internal, public) | no | Visibility level (private, internal, public) |
wiki_access_level | string | no | Wiki access level (disabled, private, enabled) |
wiki_enabled | boolean | no | Enable wiki feature (deprecated: use wiki_access_level) |
project.create_for_user
Section titled “project.create_for_user”Create a project on behalf of a user (admin). Returns: the created project with id, owner namespace, visibility, and web URL. See also:
project.create,project.get.
- Meta-tool:
gitlab_project, actioncreate_for_user - Individual tool:
gitlab_project_create_for_user - Tier: Free
- Behavior: writes, not idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
name | string | yes | Project name |
user_id | integer | yes | Target user ID who will own the project |
allow_merge_on_skipped_pipeline | boolean | no | Allow merge when pipeline is skipped |
analytics_access_level | string | no | Analytics access level (disabled, private, enabled) |
approvals_before_merge (Premium) | integer | no | Number of approvals required before merge (deprecated: use Merge Request Approvals API) |
auto_cancel_pending_pipelines | string (enabled, disabled) | no | Auto-cancel redundant pending pipelines when a newer pipeline starts: enabled or disabled. |
auto_devops_deploy_strategy | string (continuous, manual, timed_incremental) | no | Auto DevOps deploy strategy: continuous (auto-deploy to production), manual (require manual gate), or timed_incremental (deploy incrementally with time delays). |
auto_devops_enabled | boolean | no | Enable Auto DevOps for the project |
autoclose_referenced_issues | boolean | no | Auto-close referenced issues on merge |
build_git_strategy | string (fetch, clone) | no | Git strategy for CI builds: fetch (reuse existing clone, faster) or clone (fresh clone every time). |
build_timeout | integer | no | Build timeout in seconds |
builds_access_level | string | no | CI/CD builds access level (disabled, private, enabled) |
ci_config_path | string | no | Custom CI/CD configuration file path |
ci_forward_deployment_enabled | boolean | no | Enable CI/CD forward deployment (deprecated: no longer supported in recent versions) |
cicd_catalog_enabled | boolean | no | Publish the project as a CI/CD catalog resource |
container_expiration_policy_attributes | object | no | Container registry cleanup policy attributes |
container_registry_access_level | string | no | Container registry access level (disabled, private, enabled) |
container_registry_enabled | boolean | no | Enable container registry (deprecated: use container_registry_access_level) |
default_branch | string | no | Default branch name |
description | string | no | Project description |
emails_disabled | boolean | no | Disable email notifications (deprecated: use emails_enabled) |
emails_enabled | boolean | no | Enable email notifications |
enforce_auth_checks_on_uploads | boolean | no | Enforce authorization checks on uploads |
environments_access_level | string | no | Environments access level (disabled, private, enabled) |
external_authorization_classification_label | string | no | External authorization classification label |
feature_flags_access_level | string | no | Feature flags access level (disabled, private, enabled) |
forking_access_level | string | no | Forking access level (disabled, private, enabled) |
group_runners_enabled | boolean | no | Enable group runners |
group_with_project_templates_id | integer | no | Group ID that provides the custom project templates |
import_url | string | no | URL to import repository from |
infrastructure_access_level | string | no | Infrastructure access level (disabled, private, enabled) |
initialize_with_readme | boolean | no | Initialize with a README |
issue_branch_template | string | no | Template for branch names created from issues |
issues_access_level | string | no | Issues access level (disabled, private, enabled) |
issues_enabled | boolean | no | Enable issues feature (deprecated: use issues_access_level) |
issues_template | string | no | Default issue description template (deprecated: no longer supported in recent versions) |
jobs_enabled | boolean | no | Enable CI/CD jobs (deprecated: use builds_access_level) |
lfs_enabled | boolean | no | Enable Git LFS |
merge_commit_template | string | no | Template for merge commit messages |
merge_method | string (merge, rebase_merge, ff) | no | Merge method: merge (default merge commit), rebase_merge (rebase then merge commit), or ff (fast-forward, no merge commit). |
merge_pipelines_enabled | boolean | no | Enable merged results pipelines |
merge_request_title_regex | string | no | Regex that MR titles must match |
merge_request_title_regex_description | string | no | Human-readable description for the MR title regex |
merge_requests_access_level | string | no | Merge requests access level (disabled, private, enabled) |
merge_requests_enabled | boolean | no | Enable merge requests feature (deprecated: use merge_requests_access_level) |
merge_requests_template | string | no | Default merge request description template (deprecated: no longer supported in recent versions) |
merge_trains_enabled | boolean | no | Enable merge trains |
merge_trains_skip_train_allowed | boolean | no | Allow skipping the merge train |
mirror | boolean | no | Enable pull mirroring from import_url |
mirror_trigger_builds | boolean | no | Trigger pipelines for mirror updates |
model_experiments_access_level | string | no | Model experiments access level (disabled, private, enabled) |
model_registry_access_level | string | no | Model registry access level (disabled, private, enabled) |
monitor_access_level | string | no | Monitor access level (disabled, private, enabled) |
mr_default_title_template | string | no | Template for default merge request titles |
namespace_id | integer | no | Namespace ID (defaults to personal namespace) |
only_allow_merge_if_all_discussions_are_resolved | boolean | no | Only allow merge when all discussions are resolved |
only_allow_merge_if_all_status_checks_passed (Ultimate) | boolean | no | Only allow merge when all external status checks pass |
only_allow_merge_if_pipeline_succeeds | boolean | no | Only allow merge when pipeline succeeds |
package_registry_access_level | string | no | Package registry access level (disabled, private, enabled) |
packages_enabled | boolean | no | Enable packages feature (deprecated: use package_registry_access_level) |
pages_access_level | string | no | Pages access level (disabled, private, enabled, public) |
path | string | no | Project path slug (defaults from name) |
printing_merge_request_link_enabled | boolean | no | Show the create-merge-request link after pushing |
protect_merge_request_pipelines | boolean | no | Prevent merge request pipeline settings from being modified by users with lower permissions |
public_builds | boolean | no | Enable public access to pipelines (deprecated: use public_jobs) |
public_jobs | boolean | no | Enable public access to pipelines |
releases_access_level | string | no | Releases access level (disabled, private, enabled) |
remove_source_branch_after_merge | boolean | no | Remove source branch after merge by default |
repository_access_level | string | no | Repository access level (disabled, private, enabled) |
repository_storage | string | no | Repository storage shard name (admin only) |
request_access_enabled | boolean | no | Allow users to request access |
requirements_access_level | string | no | Requirements access level (disabled, private, enabled) |
resolve_outdated_diff_discussions | boolean | no | Auto-resolve outdated diff discussions |
resource_group_default_process_mode | string (unordered, oldest_first, newest_first, newest_ready_first) | no | Default process mode for resource groups: unordered (run in parallel), oldest_first, newest_first, or newest_ready_first. |
reviewer_assignment_strategy (Premium) | string (disabled, code_owners) | no | Strategy used to automatically assign reviewers to merge requests: disabled or code_owners. The former dap_powered value was removed in GitLab 19.4 and only appears in responses of projects configured before then |
security_and_compliance_access_level | string | no | Security and compliance access level (disabled, private, enabled) |
service_desk_enabled | boolean | no | Enable Service Desk |
shared_runners_enabled | boolean | no | Enable shared runners |
show_default_award_emojis | boolean | no | Show default award emojis on issues/MRs |
snippets_access_level | string | no | Snippets access level (disabled, private, enabled) |
snippets_enabled | boolean | no | Enable snippets feature (deprecated: use snippets_access_level) |
squash_commit_template | string | no | Template for squash commit messages |
squash_option | string (never, always, default_on, default_off) | no | Squash commits on merge: never (not allowed), always (always squash), default_on (squash by default, overridable per MR), or default_off (no squash by default, overridable per MR). |
suggestion_commit_message | string | no | Default commit message for suggestions |
tag_list | string[] | no | Project tags (deprecated: use topics) |
template_name | string | no | Built-in project template name to use |
template_project_id | integer | no | Custom project template ID to use |
topics | string[] | no | Topic tags for the project |
use_custom_template | boolean | no | Use a custom group/instance project template |
visibility | string (private, internal, public) | no | Visibility level (private, internal, public) |
wiki_access_level | string | no | Wiki access level (disabled, private, enabled) |
wiki_enabled | boolean | no | Enable wiki feature (deprecated: use wiki_access_level) |
project.create_fork_relation
Section titled “project.create_fork_relation”Create a fork relationship to an upstream project. Returns: the downstream project as GitLab answers with it, including forked_from_project. See also:
project.delete_fork_relation,project.fork.
- Meta-tool:
gitlab_project, actioncreate_fork_relation - Individual tool:
gitlab_project_create_fork_relation - Tier: Free
- Behavior: writes, not idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
forked_from_id | integer | yes | ID of the project to set as the fork source |
project_id | string/integer | yes | Project ID or URL-encoded path of the forked project |
project.delete
Section titled “project.delete”Delete a project. Returns: a deletion status. On instances with delayed deletion the project is marked for deletion. See also:
project.restore,project.archive.
- Meta-tool:
gitlab_project, actiondelete - Individual tool:
gitlab_project_delete - Tier: Free
- Behavior: writes, destructive (needs confirmation), idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
project_id | string/integer | yes | Project ID or URL-encoded path |
full_path | string | no | Full path of the project to confirm permanent removal (required when permanently_remove is true) |
permanently_remove | boolean | no | If true, immediately and permanently delete the project bypassing delayed deletion. Requires admin permissions on some GitLab instances. |
project.delete_fork_relation
Section titled “project.delete_fork_relation”Remove a project’s fork relationship. Returns: a success confirmation naming the project. See also:
project.create_fork_relation,project.fork.
- Meta-tool:
gitlab_project, actiondelete_fork_relation - Individual tool:
gitlab_project_delete_fork_relation - Tier: Free
- Behavior: writes, destructive (needs confirmation), idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
project_id | string/integer | yes | Project ID or URL-encoded path |
project.delete_shared_group
Section titled “project.delete_shared_group”Remove a group share from a project. Returns: a success confirmation naming the group and project. See also:
project.share_with_group,project.list_invited_groups.
- Meta-tool:
gitlab_project, actiondelete_shared_group - Individual tool:
gitlab_project_delete_shared_group - Tier: Free
- Behavior: writes, destructive (needs confirmation), idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
group_id | integer | yes | Group ID to remove from project sharing |
project_id | string/integer | yes | Project ID or URL-encoded path |
project.dependency_firewall_evaluate
Section titled “project.dependency_firewall_evaluate”Evaluate one package coordinate against a project’s Dependency Firewall policies (Premium, experimental). Returns: the outcome (allowed, warned or blocked) and the policy that produced a warned or blocked verdict. See also:
project.get,dependency.list.
- Meta-tool:
gitlab_project, actiondependency_firewall_evaluate - Individual tool:
gitlab_project_dependency_firewall_evaluate - Tier: Premium
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
ecosystem | string (cargo, composer, conan, gem, golang, maven, npm, nuget, pub, pypi, swift) | yes | Package ecosystem: cargo, composer, conan, gem, golang, maven, npm, nuget, pub, pypi, or swift |
name | string | yes | Package name, maximum 255 characters. For maven use the groupId:artifactId form (com.example:trivial-lib). For pypi, names are normalized per PEP 503 before evaluation |
project_id | string/integer | yes | Project ID or URL-encoded path |
version | string | yes | Package version, maximum 255 characters |
project.download_avatar
Section titled “project.download_avatar”Download a project’s avatar. Returns: the avatar image content. See also:
project.upload_avatar,project.get.
- Meta-tool:
gitlab_project, actiondownload_avatar - Individual tool:
gitlab_project_download_avatar - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
project_id | string/integer | yes | Project ID or URL-encoded path |
project.export_download
Section titled “project.export_download”Download a finished project export archive as base64. Returns: base64 archive content and size in bytes. See also:
project.export_status,project.import_from_file.
- Meta-tool:
gitlab_project, actionexport_download - Individual tool:
gitlab_download_project_export - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
project_id | string/integer | yes | Project ID or URL-encoded path |
project.export_schedule
Section titled “project.export_schedule”Schedule an asynchronous project export. Returns: a confirmation message. See also:
project.export_status,project.export_download.
- Meta-tool:
gitlab_project, actionexport_schedule - Individual tool:
gitlab_schedule_project_export - Tier: Free
- Behavior: writes, not idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
project_id | string/integer | yes | Project ID or URL-encoded path |
description | string | no | Override the project description in the export |
upload | object | no | Optional upload destination for the generated export archive (mirrors the GitLab upload[] options) |
upload_http_method | string (PUT, POST) | no | Deprecated: use upload.http_method. HTTP method to use for the upload (PUT or POST) |
upload_url | string | no | Deprecated: use upload.url. URL to upload the exported project to after export completes |
project.export_status
Section titled “project.export_status”Get the export status of a project. Returns: export id, name, path, status, message, and download links. See also:
project.export_schedule,project.export_download.
- Meta-tool:
gitlab_project, actionexport_status - Individual tool:
gitlab_get_project_export_status - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
project_id | string/integer | yes | Project ID or URL-encoded path |
project.fork
Section titled “project.fork”Fork a project. Returns: the new fork with id, path_with_namespace, forked_from_project, and web URL. See also:
project.list_forks,project.create_fork_relation.
- Meta-tool:
gitlab_project, actionfork - Individual tool:
gitlab_project_fork - Tier: Free
- Behavior: writes, not idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
project_id | string/integer | yes | Source project ID or URL-encoded path |
branches | string | no | Branches to fork (empty=all) |
description | string | no | Description for the forked project |
mr_default_target_self | boolean | no | MR default target is the fork itself instead of upstream |
name | string | no | Name for the forked project |
namespace | string | no | Namespace ID or path to fork into (deprecated: use namespace_id or namespace_path) |
namespace_id | integer | no | Namespace ID to fork into |
namespace_path | string | no | Namespace path to fork into |
path | string | no | Path slug for the forked project |
visibility | string (private, internal, public) | no | Visibility level (private, internal, public) |
project.get
Section titled “project.get”Get a single project by ID or namespace path. Returns: project metadata including id, path_with_namespace, default_branch, visibility, and web URL. See also:
project.update,project.archive,project.delete.
- Meta-tool:
gitlab_project, actionget - Individual tool:
gitlab_project_get - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
project_id | string/integer | yes | Project ID or URL-encoded path (e.g. ‘user/repo’ or 42) |
license | boolean | no | Include license information in response |
statistics | boolean | no | Include project statistics (commit count, storage sizes) |
with_custom_attributes | boolean | no | Include custom attributes in response |
project.hook_add
Section titled “project.hook_add”Add a webhook to a project. Returns: the created webhook with id, URL, and enabled events. See also:
project.hook_list,project.hook_test.
- Meta-tool:
gitlab_project, actionhook_add - Individual tool:
gitlab_project_hook_add - Tier: Free
- Behavior: writes, not idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
project_id | string/integer | yes | Project ID or URL-encoded path |
url | string | yes | Webhook URL |
branch_filter_strategy | string | no | Branch filter strategy (wildcard, regex, all_branches) |
confidential_issues_events | boolean | no | Trigger on confidential issue events |
confidential_note_events | boolean | no | Trigger on confidential note events |
custom_headers | object[] | no | Custom HTTP headers sent with each webhook request (key/value pairs) |
custom_webhook_template | string | no | Custom webhook payload template |
deployment_events | boolean | no | Trigger on deployment events |
description | string | no | Webhook description |
emoji_events | boolean | no | Trigger on emoji events |
enable_ssl_verification | boolean | no | Enable SSL verification for webhook |
feature_flag_events | boolean | no | Trigger on feature flag events |
issues_events | boolean | no | Trigger on issue events |
job_events | boolean | no | Trigger on CI job events |
merge_requests_events | boolean | no | Trigger on merge request events |
milestone_events | boolean | no | Trigger on milestone events |
name | string | no | Webhook name |
note_events | boolean | no | Trigger on note/comment events |
pipeline_events | boolean | no | Trigger on pipeline events |
push_events | boolean | no | Trigger on push events |
push_events_branch_filter | string | no | Branch filter for push events |
releases_events | boolean | no | Trigger on release events |
resource_access_token_events | boolean | no | Trigger on resource access token events |
resource_deploy_token_events | boolean | no | Trigger on resource deploy token events |
signing_token | string | no | Write-only signing token for webhook signature validation |
tag_push_events | boolean | no | Trigger on tag push events |
token | string | no | Secret token for validation |
vulnerability_events | boolean | no | Trigger on vulnerability events |
wiki_page_events | boolean | no | Trigger on wiki page events |
project.hook_delete
Section titled “project.hook_delete”Delete a project webhook. Returns: a success confirmation naming the webhook and project. See also:
project.hook_list,project.hook_add.
- Meta-tool:
gitlab_project, actionhook_delete - Individual tool:
gitlab_project_hook_delete - Tier: Free
- Behavior: writes, destructive (needs confirmation), idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
hook_id | integer | yes | Webhook ID to delete |
project_id | string/integer | yes | Project ID or URL-encoded path |
project.hook_delete_custom_header
Section titled “project.hook_delete_custom_header”Delete a custom header from a project webhook. Returns: a success confirmation naming the header and webhook. See also:
project.hook_set_custom_header,project.hook_get.
- Meta-tool:
gitlab_project, actionhook_delete_custom_header - Individual tool:
gitlab_project_hook_delete_custom_header - Tier: Free
- Behavior: writes, destructive (needs confirmation), idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
hook_id | integer | yes | Webhook ID |
key | string | yes | Custom header key name to delete |
project_id | string/integer | yes | Project ID or URL-encoded path |
project.hook_delete_url_variable
Section titled “project.hook_delete_url_variable”Delete a URL variable from a project webhook. Returns: a success confirmation naming the variable and webhook. See also:
project.hook_set_url_variable,project.hook_get.
- Meta-tool:
gitlab_project, actionhook_delete_url_variable - Individual tool:
gitlab_project_hook_delete_url_variable - Tier: Free
- Behavior: writes, destructive (needs confirmation), idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
hook_id | integer | yes | Webhook ID |
key | string | yes | URL variable key name to delete |
project_id | string/integer | yes | Project ID or URL-encoded path |
project.hook_edit
Section titled “project.hook_edit”Edit a project webhook. Returns: the updated webhook with URL and enabled events. See also:
project.hook_get,project.hook_test.
- Meta-tool:
gitlab_project, actionhook_edit - Individual tool:
gitlab_project_hook_edit - Tier: Free
- Behavior: writes, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
hook_id | integer | yes | Webhook ID to edit |
project_id | string/integer | yes | Project ID or URL-encoded path |
branch_filter_strategy | string | no | Branch filter strategy (wildcard, regex, all_branches) |
confidential_issues_events | boolean | no | Trigger on confidential issue events |
confidential_note_events | boolean | no | Trigger on confidential note events |
custom_headers | object[] | no | Custom HTTP headers sent with each webhook request (key/value pairs) |
custom_webhook_template | string | no | Custom webhook payload template |
deployment_events | boolean | no | Trigger on deployment events |
description | string | no | Webhook description |
emoji_events | boolean | no | Trigger on emoji events |
enable_ssl_verification | boolean | no | Enable SSL verification for webhook |
feature_flag_events | boolean | no | Trigger on feature flag events |
issues_events | boolean | no | Trigger on issue events |
job_events | boolean | no | Trigger on CI job events |
merge_requests_events | boolean | no | Trigger on merge request events |
milestone_events | boolean | no | Trigger on milestone events |
name | string | no | Webhook name |
note_events | boolean | no | Trigger on note/comment events |
pipeline_events | boolean | no | Trigger on pipeline events |
push_events | boolean | no | Trigger on push events |
push_events_branch_filter | string | no | Branch filter for push events |
releases_events | boolean | no | Trigger on release events |
resource_access_token_events | boolean | no | Trigger on resource access token events |
resource_deploy_token_events | boolean | no | Trigger on resource deploy token events |
signing_token | string | no | Write-only signing token for webhook signature validation |
tag_push_events | boolean | no | Trigger on tag push events |
token | string | no | Secret token for validation |
url | string | no | Updated webhook URL |
vulnerability_events | boolean | no | Trigger on vulnerability events |
wiki_page_events | boolean | no | Trigger on wiki page events |
project.hook_get
Section titled “project.hook_get”Get a single project webhook. Returns: the webhook with URL, enabled events, and SSL settings. See also:
project.hook_list,project.hook_edit.
- Meta-tool:
gitlab_project, actionhook_get - Individual tool:
gitlab_project_hook_get - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
hook_id | integer | yes | Webhook ID |
project_id | string/integer | yes | Project ID or URL-encoded path |
project.hook_list
Section titled “project.hook_list”List a project’s webhooks. Returns: webhooks with URL, enabled events, and SSL settings, plus pagination metadata. See also:
project.hook_get,project.hook_add.
- Meta-tool:
gitlab_project, actionhook_list - Individual tool:
gitlab_project_hook_list - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
project_id | string/integer | yes | Project ID or URL-encoded path |
order_by | string | no | Keyset ordering column (for keyset pagination) |
page | integer | no | Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward. |
page_token | string | no | Keyset pagination cursor: record id at which to fetch the next page, taken from the previous keyset response. Only used when pagination=‘keyset’. |
pagination | string | no | Pagination method: ‘keyset’ for keyset-based pagination on large ordered result sets, or ‘offset’ (the default). Keyset avoids deep-offset cost. |
per_page | integer | no | Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large. |
sort | string (asc, desc) | no | Keyset sort direction (asc, desc) |
project.hook_set_custom_header
Section titled “project.hook_set_custom_header”Set a custom header on a project webhook. Returns: a success confirmation naming the header and webhook. See also:
project.hook_delete_custom_header,project.hook_get.
- Meta-tool:
gitlab_project, actionhook_set_custom_header - Individual tool:
gitlab_project_hook_set_custom_header - Tier: Free
- Behavior: writes, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
hook_id | integer | yes | Webhook ID |
key | string | yes | Custom header key name |
project_id | string/integer | yes | Project ID or URL-encoded path |
value | string | yes | Custom header value |
project.hook_set_url_variable
Section titled “project.hook_set_url_variable”Set a URL variable on a project webhook. Returns: a success confirmation naming the variable and webhook. See also:
project.hook_delete_url_variable,project.hook_get.
- Meta-tool:
gitlab_project, actionhook_set_url_variable - Individual tool:
gitlab_project_hook_set_url_variable - Tier: Free
- Behavior: writes, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
hook_id | integer | yes | Webhook ID |
key | string | yes | URL variable key name. Letters and underscores only. GitLab rejects keys containing digits |
project_id | string/integer | yes | Project ID or URL-encoded path |
value | string | yes | URL variable value. Must be non-empty |
project.hook_test
Section titled “project.hook_test”Trigger a test event for a project webhook. Returns: a confirmation that the test event was fired. See also:
project.hook_get,project.hook_edit.
- Meta-tool:
gitlab_project, actionhook_test - Individual tool:
gitlab_project_hook_test - Tier: Free
- Behavior: writes, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
event | string (push_events, tag_push_events, issues_events, confidential_issues_events, note_events, merge_requests_events, job_events, pipeline_events, wiki_page_events, releases_events, milestone_events, emoji_events, resource_access_token_events, resource_deploy_token_events) | yes | Event type to trigger: push_events, tag_push_events, issues_events, confidential_issues_events, note_events, merge_requests_events, job_events, pipeline_events, wiki_page_events, releases_events, milestone_events, emoji_events, resource_access_token_events, or resource_deploy_token_events |
hook_id | integer | yes | Webhook ID to test |
project_id | string/integer | yes | Project ID or URL-encoded path |
project.import_from_file
Section titled “project.import_from_file”Import a project from an export archive. Returns: the new project’s import status, type, correlation id, any import error, and the relations that failed to import. See also:
project.import_status,project.export_download.
- Meta-tool:
gitlab_project, actionimport_from_file - Individual tool:
gitlab_import_project_from_file - Tier: Free
- Behavior: writes, not idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
content_base64 | string | no | Base64-encoded export archive content. Only one of file_path or content_base64 should be provided. |
file_path | string | no | Canonical path to a local export archive (.tar.gz) under the current working directory, OS temp directory, or GITLAB_MCP_ALLOWED_IMPORT_DIRS. Symlinks are resolved and escapes are rejected. Only one of file_path or content_base64 should be provided. |
name | string | no | Name for the imported project |
namespace | string | no | Namespace to import the project into (user or group path) |
override_params | object | no | Optional project attributes to override on the imported project (mirrors the create-project attributes accepted by override_params[]) |
overwrite | boolean | no | If true, overwrite an existing project with the same path |
path | string | no | URL path for the imported project |
project.import_status
Section titled “project.import_status”Get the import status of a project. Returns: import id, name, path, status, type, correlation id, import error, the relations that failed to import, and a GitHub import’s fetched and imported counts. See also:
project.import_from_file.
- Meta-tool:
gitlab_project, actionimport_status - Individual tool:
gitlab_get_project_import_status - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
project_id | string/integer | yes | Project ID or URL-encoded path |
project.integration_delete
Section titled “project.integration_delete”Delete (disable) a project integration by slug. Supports the same slugs as get, plus ‘slack-application’ for disabling the GitLab for Slack app.
Returns: confirmation message.
See also:
project.integration_list,project.integration_get.
- Meta-tool:
gitlab_project, actionintegration_delete - Individual tool:
gitlab_delete_integration - Tier: Free
- Behavior: writes, destructive (needs confirmation), idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
project_id | string/integer | yes | Project ID or URL-encoded path |
slug | string | yes | Integration slug (e.g. jira, slack, discord, mattermost, microsoft-teams, telegram, emails-on-push, pipelines-email, external-wiki, custom-issue-tracker, datadog, drone-ci, github, harbor, jenkins, matrix, redmine, youtrack, slack-slash-commands, mattermost-slash-commands) |
project.integration_delete_group
Section titled “project.integration_delete_group”Delete (disable) a group integration by slug. Requires Owner role on the group.
Returns: confirmation message.
See also:
project.integration_list_group,project.integration_get_group,project.integration_set_group.
- Meta-tool:
gitlab_project, actionintegration_delete_group - Individual tool:
gitlab_delete_group_integration - Tier: Free
- Behavior: writes, destructive (needs confirmation), idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
group_id | string/integer | yes | Group ID or URL-encoded path |
slug | string | yes | Integration slug to disable (e.g. slack, jira, harbor) |
project.integration_delete_group_datadog
Section titled “project.integration_delete_group_datadog”Remove the Datadog integration from a group. The stored api_key is cleared. Deletion is irreversible. Requires Owner role and GitLab Premium/Ultimate (self-managed EE or GitLab.com).
Returns: confirmation message.
See also:
project.integration_get_group_datadog,project.integration_set_group_datadog.
- Meta-tool:
gitlab_project, actionintegration_delete_group_datadog - Individual tool:
gitlab_delete_group_datadog_integration - Tier: Free
- Behavior: writes, destructive (needs confirmation), idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
group_id | string/integer | yes | Group ID or URL-encoded path |
project.integration_get
Section titled “project.integration_get”Get details of a specific project integration by slug (e.g. jira, slack, discord, mattermost, microsoft-teams, telegram, datadog, jenkins, emails-on-push, pipelines-email, external-wiki, custom-issue-tracker, drone-ci, github, harbor, matrix, redmine, youtrack, slack-slash-commands, mattermost-slash-commands).
Returns: JSON with integration details.
See also:
project.integration_list,project.integration_delete.
- Meta-tool:
gitlab_project, actionintegration_get - Individual tool:
gitlab_get_integration - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
project_id | string/integer | yes | Project ID or URL-encoded path |
slug | string | yes | Integration slug (e.g. jira, slack, discord, mattermost, microsoft-teams, telegram, emails-on-push, pipelines-email, external-wiki, custom-issue-tracker, datadog, drone-ci, github, harbor, jenkins, matrix, redmine, youtrack, slack-slash-commands, mattermost-slash-commands) |
project.integration_get_group
Section titled “project.integration_get_group”Get details of a specific group integration by slug. Requires Owner role on the group.
Returns: JSON with the group integration details.
See also:
project.integration_list_group,project.integration_set_group,project.integration_delete_group.
- Meta-tool:
gitlab_project, actionintegration_get_group - Individual tool:
gitlab_get_group_integration - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
group_id | string/integer | yes | Group ID or URL-encoded path |
slug | string | yes | Integration slug to read (e.g. slack, jira, harbor). See doc/api/group_integrations.md for the supported list |
project.integration_get_group_datadog
Section titled “project.integration_get_group_datadog”Read the Datadog integration configured on a group. Requires Owner role and GitLab Premium/Ultimate (self-managed EE or GitLab.com). The api_key is never returned.
Returns: JSON with the group’s Datadog integration details. The configuration lives in the nested properties object (api_url, datadog_env, datadog_service, datadog_site, datadog_tags, datadog_ci_visibility, archive_trace_events), which is the only shape it is published in. An older GitLab that sends the configuration flat is read into that same object.
See also:
project.integration_set_group_datadog,project.integration_delete_group_datadog.
- Meta-tool:
gitlab_project, actionintegration_get_group_datadog - Individual tool:
gitlab_get_group_datadog_integration - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
group_id | string/integer | yes | Group ID or URL-encoded path |
project.integration_list
Section titled “project.integration_list”List all integrations (services) configured for a project, including their active status.
Returns: JSON array of integration items with id, title, slug, and active flag.
See also:
project.integration_get,project.integration_set_jira,project.integration_delete.
- Meta-tool:
gitlab_project, actionintegration_list - Individual tool:
gitlab_list_integrations - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
project_id | string/integer | yes | Project ID or URL-encoded path |
project.integration_list_group
Section titled “project.integration_list_group”List all active integrations configured on a group. Requires Owner role (some integrations require GitLab Premium/Ultimate).
Returns: JSON array of group integration items with id, title, slug, and active flag.
See also:
project.integration_get_group,project.integration_set_group,project.integration_delete_group.
- Meta-tool:
gitlab_project, actionintegration_list_group - Individual tool:
gitlab_list_group_integrations - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
group_id | string/integer | yes | Group ID or URL-encoded path |
project.integration_set
Section titled “project.integration_set”Configure (create or update) any project integration by slug, passing the integration’s documented parameters in a free-form
configobject. Use this generic action for integrations without a dedicated tool (e.g. slack, harbor, jenkins, google-play, apple-app-store, prometheus, microsoft-teams, mattermost, discord).Common slugs: slack, jira, discord, mattermost, microsoft-teams, telegram, datadog, jenkins, harbor, drone-ci, github, emails-on-push, pipelines-email, external-wiki, custom-issue-tracker, matrix, redmine, youtrack, slack-slash-commands, mattermost-slash-commands, google-play, apple-app-store, prometheus, bamboo, buildkite, campfire, confluence, packagist, pivotaltracker, pumble, pushover, teamcity, unify-circuit, webex-teams, zentao, gitlab-slack-application.
The
configobject is sent verbatim as the request body. See doc/api/integrations.md for the exact fields each integration accepts (for example slack expectswebhook. Harbor expectsurl,project_name,username,password).Returns: JSON with the resulting integration details.
See also:
project.integration_get,project.integration_list,project.integration_delete,project.integration_set_jira.
- Meta-tool:
gitlab_project, actionintegration_set - Individual tool:
gitlab_set_integration - Tier: Free
- Behavior: writes, not idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
project_id | string/integer | yes | Project ID or URL-encoded path |
slug | string | yes | Integration slug to configure (e.g. slack, harbor, jenkins, google-play). See doc/api/integrations.md for the full list and each integration’s config fields |
config | object | no | Integration configuration parameters as documented for the chosen slug in doc/api/integrations.md (sent verbatim as the request body). For example slack expects webhook. Harbor expects url, project_name, username, password. Jenkins expects jenkins_url, project_name, username, password |
project.integration_set_group
Section titled “project.integration_set_group”Configure (create or update) any group integration by slug, passing the integration’s documented parameters in a free-form
configobject. Requires Owner role on the group (some integrations require GitLab Premium/Ultimate).The
configobject is sent verbatim as the request body. See doc/api/group_integrations.md and doc/api/integrations.md for the per-integration fields.Returns: JSON with the resulting group integration details.
See also:
project.integration_get_group,project.integration_list_group,project.integration_delete_group.
- Meta-tool:
gitlab_project, actionintegration_set_group - Individual tool:
gitlab_set_group_integration - Tier: Free
- Behavior: writes, not idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
group_id | string/integer | yes | Group ID or URL-encoded path |
slug | string | yes | Integration slug to configure (e.g. slack, jira, harbor). See doc/api/group_integrations.md for the supported list and each integration’s config fields |
config | object | no | Integration configuration parameters as documented for the chosen slug in doc/api/integrations.md (sent verbatim as the request body) |
project.integration_set_group_datadog
Section titled “project.integration_set_group_datadog”Create or update the Datadog integration on a group. Requires Owner role and GitLab Premium/Ultimate (self-managed EE or GitLab.com). At least one of api_key, api_url, datadog_env, datadog_service, datadog_site, datadog_tags, datadog_ci_visibility, archive_trace_events, or use_inherited_settings=true must be supplied.
Returns: JSON with the updated Datadog integration details, whose configuration lives in the nested properties object.
See also:
project.integration_get_group_datadog,project.integration_delete_group_datadog.
- Meta-tool:
gitlab_project, actionintegration_set_group_datadog - Individual tool:
gitlab_set_group_datadog_integration - Tier: Free
- Behavior: writes, not idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
group_id | string/integer | yes | Group ID or URL-encoded path |
api_key | string | no | Datadog API key (write-only. Never returned by the get endpoint) |
api_url | string | no | Datadog API URL (e.g. https://api.datadoghq.com) |
archive_trace_events | boolean | no | Forward CI job trace events to Datadog |
datadog_ci_visibility | boolean | no | Enable Datadog CI Visibility: forward pipeline/job data to Datadog CI Visibility |
datadog_env | string | no | Datadog env tag forwarded with every log/metric |
datadog_service | string | no | Datadog service tag forwarded with every log/metric |
datadog_site | string | no | Datadog site (e.g. datadoghq.com, datadoghq.eu, us3.datadoghq.com, us5.datadoghq.com, ap1.datadoghq.com) |
datadog_tags | string | no | Comma-separated Datadog tags forwarded with every log/metric |
use_inherited_settings | boolean | no | Inherit the Datadog configuration from the closest ancestor group that has one configured (overrides all per-field settings) |
project.integration_set_jira
Section titled “project.integration_set_jira”Configure the Jira integration for a project. Sets up the connection to a Jira instance with URL, credentials, and event triggers.
Returns: JSON with the configured Jira integration details.
See also:
project.integration_list,project.integration_get.
- Meta-tool:
gitlab_project, actionintegration_set_jira - Individual tool:
gitlab_set_jira_integration - Tier: Free
- Behavior: writes, not idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
project_id | string/integer | yes | Project ID or URL-encoded path |
url | string | yes | Jira instance base URL |
active | boolean | no | Enable or disable the integration |
api_url | string | no | Jira API URL (overrides base URL) |
comment_on_event_enabled | boolean | no | Add comments on Jira issues for events |
commit_events | boolean | no | Trigger on commit events |
customize_jira_issue_enabled | boolean | no | Customize the Jira issue created for vulnerabilities |
issues_enabled | boolean | no | Enable Jira issues integration |
jira_allowed_statuses_as_string | string | no | Comma-separated list of allowed Jira statuses (used with jira_status_check_enabled) |
jira_assignee_check_enabled | boolean | no | Require the referenced Jira issue to have an assignee |
jira_auth_type | integer | no | Jira auth type (0=basic, 1=token) |
jira_check_enabled | boolean | no | Require commits/MRs to reference a Jira issue |
jira_exists_check_enabled | boolean | no | Require that the referenced Jira issue exists |
jira_issue_prefix | string | no | Jira issue key prefix |
jira_issue_regex | string | no | Custom regex for Jira issue keys |
jira_issue_transition_automatic | boolean | no | Auto-transition Jira issues |
jira_issue_transition_id | string | no | Jira transition ID |
jira_status_check_enabled | boolean | no | Require the referenced Jira issue to be in an allowed status |
merge_requests_events | boolean | no | Trigger on merge request events |
password | string | no | Jira password or API token |
project_key | string | no | Jira project key where vulnerability tickets are created (when vulnerabilities_enabled is true) |
project_keys | string[] | no | Jira project keys to restrict (used when issues_enabled is true) |
use_inherited_settings | boolean | no | Use inherited settings from group |
username | string | no | Jira username |
vulnerabilities_enabled | boolean | no | Create Jira issues for vulnerabilities |
vulnerabilities_issuetype | integer | no | Jira issue type ID used for vulnerability tickets (when vulnerabilities_enabled is true) |
project.label_create
Section titled “project.label_create”Create a project label with required name and hex color, plus optional description, priority, and archived state. Returns: the created label (id, name, color, text_color, description, priority, subscribed, is_project_label, archived). See also:
project.label_get,project.label_update,issue.list.
- Meta-tool:
gitlab_project, actionlabel_create - Individual tool:
gitlab_label_create - Tier: Free
- Behavior: writes, not idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
color | string | yes | Label color in hex format (e.g. #FF0000) |
name | string | yes | Label name |
project_id | string/integer | yes | Project ID or URL-encoded path |
archived | boolean | no | Whether to create the label in archived state |
description | string | no | Label description |
priority | integer | no | Label priority (lower is higher priority, 0 means no priority) |
project.label_delete
Section titled “project.label_delete”Delete a project label by ID or name. Destructive: the label is removed from the project and unassigned from issues and merge requests. Returns: a deletion confirmation. See also:
project.label_list,project.label_get,project.label_create.
- Meta-tool:
gitlab_project, actionlabel_delete - Individual tool:
gitlab_label_delete - Tier: Free
- Behavior: writes, destructive (needs confirmation), idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
label_id | string/integer | yes | Label ID or name |
project_id | string/integer | yes | Project ID or URL-encoded path |
name | string | no | Label name to delete (alternative to label_id for selecting the label by name) |
project.label_get
Section titled “project.label_get”Get a single project label by ID or name. Returns: id, name, color, text_color, description, priority, subscribed, is_project_label, and archived. GitLab sends a label’s usage counts only to project.label_list with with_counts. See also:
project.label_list,project.label_update,project.label_delete.
- Meta-tool:
gitlab_project, actionlabel_get - Individual tool:
gitlab_label_get - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
label_id | string/integer | yes | Label ID or name |
project_id | string/integer | yes | Project ID or URL-encoded path |
project.label_list
Section titled “project.label_list”List labels in a project with optional search, counts, ancestor-group inclusion, ordering, and offset or keyset pagination. Returns: id, name, color, text_color, description, priority, subscribed, is_project_label, archived, the open/closed issue and open MR counts when with_counts is true, and pagination metadata. See also:
project.label_get,project.label_create,issue.list.
- Meta-tool:
gitlab_project, actionlabel_list - Individual tool:
gitlab_label_list - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
project_id | string/integer | yes | Project ID or URL-encoded path |
include_ancestor_groups | boolean | no | Include labels from ancestor groups |
order_by | string | no | Column to order results by (e.g. name, created_at, updated_at) |
page | integer | no | Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward. |
page_token | string | no | Keyset pagination cursor: record id at which to fetch the next page, taken from the previous keyset response. Only used when pagination=‘keyset’. |
pagination | string | no | Pagination method: ‘keyset’ for keyset-based pagination on large ordered result sets, or ‘offset’ (the default). Keyset avoids deep-offset cost. |
per_page | integer | no | Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large. |
search | string | no | Filter labels by keyword search |
sort | string (asc, desc) | no | Sort direction (asc, desc) |
with_counts | boolean | no | Include issue and merge request counts |
project.label_promote
Section titled “project.label_promote”Promote a project label to a group label, sharing it across the group’s projects. Returns: no content on success. Requires group-level Maintainer or higher access. See also:
project.label_get,project.label_list,group.group_label_list.
- Meta-tool:
gitlab_project, actionlabel_promote - Individual tool:
gitlab_label_promote - Tier: Free
- Behavior: writes, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
label_id | string/integer | yes | Label ID or name |
project_id | string/integer | yes | Project ID or URL-encoded path |
project.label_subscribe
Section titled “project.label_subscribe”Subscribe the authenticated user to a project label for notifications. Returns: the label with subscribed=true (already-subscribed yields 304 Not Modified). See also:
project.label_unsubscribe,project.label_get,project.label_list.
- Meta-tool:
gitlab_project, actionlabel_subscribe - Individual tool:
gitlab_label_subscribe - Tier: Free
- Behavior: writes, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
label_id | string/integer | yes | Label ID or name |
project_id | string/integer | yes | Project ID or URL-encoded path |
project.label_unsubscribe
Section titled “project.label_unsubscribe”Unsubscribe the authenticated user from a project label. Returns: no content on success (not-subscribed yields 304 Not Modified). See also:
project.label_subscribe,project.label_get,project.label_list.
- Meta-tool:
gitlab_project, actionlabel_unsubscribe - Individual tool:
gitlab_label_unsubscribe - Tier: Free
- Behavior: writes, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
label_id | string/integer | yes | Label ID or name |
project_id | string/integer | yes | Project ID or URL-encoded path |
project.label_update
Section titled “project.label_update”Update an existing project label (new_name, color, description, priority, archived). Returns: the updated label (id, name, color, text_color, description, priority, subscribed, is_project_label, archived). See also:
project.label_get,project.label_list,project.label_delete.
- Meta-tool:
gitlab_project, actionlabel_update - Individual tool:
gitlab_label_update - Tier: Free
- Behavior: writes, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
label_id | string/integer | yes | Label ID or name |
project_id | string/integer | yes | Project ID or URL-encoded path |
archived | boolean | no | Set true to archive, false to unarchive |
color | string | no | New label color in hex format |
description | string | no | New label description |
name | string | no | Label name to update (alternative to label_id for selecting the label by name) |
new_name | string | no | New label name |
priority | integer | no | New label priority, where 0 removes the priority GitLab has |
project.languages
Section titled “project.languages”Get a project’s detected languages. Returns: language names with their percentage of the codebase. See also:
project.get.
- Meta-tool:
gitlab_project, actionlanguages - Individual tool:
gitlab_project_languages - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
project_id | string/integer | yes | Project ID or URL-encoded path |
project.list
Section titled “project.list”List projects accessible to the user with filtering and pagination. Returns: projects with namespace, visibility, last_activity_at, and pagination metadata. See also:
project.get,project.list_user_projects.
- Meta-tool:
gitlab_project, actionlist - Individual tool:
gitlab_project_list - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
active | boolean | no | Limit to active (non-archived, non-pending-deletion) projects |
archived | boolean | no | Filter by archived status (true=only archived, false=only active) |
custom_attributes | object | no | Filter projects by custom attribute key/value pairs (admin only). Different from with_custom_attributes, which only controls whether attributes are returned |
id_after | integer | no | Return projects with ID greater than this value (keyset pagination) |
id_before | integer | no | Return projects with ID less than this value (keyset pagination) |
imported | boolean | no | Limit to projects imported from an external source by the current user |
include_hidden | boolean | no | Include hidden projects in results |
include_pending_delete | boolean | no | Include projects that are marked/scheduled for deletion. Default false. |
last_activity_after | string | no | Return projects with last activity after date (ISO 8601 format) |
last_activity_before | string | no | Return projects with last activity before date (ISO 8601 format) |
membership | boolean | no | Limit to projects where current user is a member |
min_access_level | integer | no | Filter by minimum access level (5=Minimal access, 10=Guest, 15=Planner (Premium/Ultimate), 20=Reporter, 25=Security Manager (Premium/Ultimate), 30=Developer, 40=Maintainer, 50=Owner, 60=Admin where supported) |
order_by | string (id, name, path, created_at, updated_at, last_activity_at, similarity, star_count) | no | Order projects by id, name, path, created_at, updated_at, last_activity_at, similarity (requires search query), or star_count. |
owned | boolean | no | Limit to projects explicitly owned by the current user |
page | integer | no | Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward. |
page_token | string | no | Keyset pagination cursor: record id at which to fetch the next page, taken from the previous keyset response. Only used when pagination=‘keyset’. |
pagination | string | no | Pagination method: ‘keyset’ for keyset-based pagination on large ordered result sets, or ‘offset’ (the default). Keyset avoids deep-offset cost. |
per_page | integer | no | Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large. |
repository_checksum_failed | boolean | no | Limit to projects where the repository checksum calculation failed (admin only) |
repository_storage | string | no | Limit to projects on the given repository storage shard (admin only) |
search | string | no | Search query for project name |
search_namespaces | boolean | no | Include namespace in search |
simple | boolean | no | Return only limited fields (faster for large result sets) |
sort | string (asc, desc) | no | Sort direction (asc, desc) |
starred | boolean | no | Limit to projects starred by the current user |
statistics | boolean | no | Include project statistics in response |
topic | string | no | Filter by topic name |
visibility | string (private, internal, public) | no | Filter by visibility (private, internal, public) |
wiki_checksum_failed | boolean | no | Limit to projects where the wiki checksum calculation failed (admin only) |
with_custom_attributes | boolean | no | Include custom attributes in the response (admin only) |
with_issues_enabled | boolean | no | Filter by projects with issues feature enabled |
with_merge_requests_enabled | boolean | no | Filter by projects with merge requests enabled |
with_programming_language | string | no | Filter by programming language name |
project.list_forks
Section titled “project.list_forks”List a project’s forks. Returns: forked projects with namespace, visibility, and pagination metadata. See also:
project.fork,project.get.
- Meta-tool:
gitlab_project, actionlist_forks - Individual tool:
gitlab_project_list_forks - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
project_id | string/integer | yes | Project ID or URL-encoded path |
active | boolean | no | Limit to active (non-archived, non-pending-deletion) forks |
archived | boolean | no | Filter by archived status (true=only archived, false=only active) |
custom_attributes | object | no | Filter projects by custom attribute key/value pairs (admin only). Different from with_custom_attributes, which only controls whether attributes are returned |
id_after | integer | no | Return forks with ID greater than this value (keyset pagination) |
id_before | integer | no | Return forks with ID less than this value (keyset pagination) |
imported | boolean | no | Limit to forks imported from an external source by the current user |
include_hidden | boolean | no | Include hidden forks in results |
include_pending_delete | boolean | no | Include forks marked/scheduled for deletion. Default false. |
last_activity_after | string | no | Return forks with last activity after date (ISO 8601 format) |
last_activity_before | string | no | Return forks with last activity before date (ISO 8601 format) |
membership | boolean | no | Limit to forks where the current user is a member |
min_access_level | integer | no | Filter by minimum access level (5=Minimal access, 10=Guest, 15=Planner (Premium/Ultimate), 20=Reporter, 25=Security Manager (Premium/Ultimate), 30=Developer, 40=Maintainer, 50=Owner, 60=Admin where supported) |
order_by | string (id, name, path, created_at, updated_at, last_activity_at, similarity, star_count) | no | Order projects by id, name, path, created_at, updated_at, last_activity_at, similarity (requires search query), or star_count. |
owned | boolean | no | Limit to forks owned by the current user |
page | integer | no | Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward. |
page_token | string | no | Keyset pagination cursor: record id at which to fetch the next page, taken from the previous keyset response. Only used when pagination=‘keyset’. |
pagination | string | no | Pagination method: ‘keyset’ for keyset-based pagination on large ordered result sets, or ‘offset’ (the default). Keyset avoids deep-offset cost. |
per_page | integer | no | Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large. |
repository_checksum_failed | boolean | no | Limit to forks where the repository checksum calculation failed (admin only) |
repository_storage | string | no | Limit to forks on the given repository storage shard (admin only) |
search | string | no | Search query for fork name |
search_namespaces | boolean | no | Include namespace in search |
simple | boolean | no | Return only limited fields (faster for large result sets) |
sort | string (asc, desc) | no | Sort direction (asc, desc) |
starred | boolean | no | Limit to forks starred by the current user |
statistics | boolean | no | Include project statistics in response |
topic | string | no | Filter by topic name |
visibility | string (private, internal, public) | no | Filter by visibility (private, internal, public) |
wiki_checksum_failed | boolean | no | Limit to forks where the wiki checksum calculation failed (admin only) |
with_custom_attributes | boolean | no | Include custom attributes in the response (admin only) |
with_issues_enabled | boolean | no | Filter by forks with issues feature enabled |
with_merge_requests_enabled | boolean | no | Filter by forks with merge requests enabled |
with_programming_language | string | no | Filter by programming language name |
project.list_groups
Section titled “project.list_groups”List a project’s associated groups. Returns: groups with id, full_path, and full_name, plus pagination metadata. See also:
project.list_invited_groups,group.get.
- Meta-tool:
gitlab_project, actionlist_groups - Individual tool:
gitlab_project_list_groups - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
project_id | string/integer | yes | Project ID or URL-encoded path |
order_by | string | no | Keyset ordering column (for keyset pagination) |
page | integer | no | Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward. |
page_token | string | no | Keyset pagination cursor: record id at which to fetch the next page, taken from the previous keyset response. Only used when pagination=‘keyset’. |
pagination | string | no | Pagination method: ‘keyset’ for keyset-based pagination on large ordered result sets, or ‘offset’ (the default). Keyset avoids deep-offset cost. |
per_page | integer | no | Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large. |
search | string | no | Search by group name |
shared_min_access_level | integer | no | Filter by minimum access level (5=Minimal access, 10=Guest, 15=Planner (Premium/Ultimate), 20=Reporter, 25=Security Manager (Premium/Ultimate), 30=Developer, 40=Maintainer, 50=Owner, 60=Admin where supported) |
shared_visible_only | boolean | no | Only show shared groups visible to the current user |
skip_groups | integer[] | no | Array of group IDs to exclude |
sort | string (asc, desc) | no | Keyset sort direction (asc, desc) |
with_shared | boolean | no | Include shared groups (default true) |
project.list_invited_groups
Section titled “project.list_invited_groups”List groups invited to a project. Returns: invited groups with id, full_path, and full_name, plus pagination metadata. See also:
project.share_with_group,project.list_groups.
- Meta-tool:
gitlab_project, actionlist_invited_groups - Individual tool:
gitlab_project_list_invited_groups - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
project_id | string/integer | yes | Project ID or URL-encoded path |
min_access_level | integer | no | Filter by minimum access level (5=Minimal access, 10=Guest, 15=Planner (Premium/Ultimate), 20=Reporter, 25=Security Manager (Premium/Ultimate), 30=Developer, 40=Maintainer, 50=Owner, 60=Admin where supported) |
order_by | string | no | Keyset ordering column (for keyset pagination) |
page | integer | no | Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward. |
page_token | string | no | Keyset pagination cursor: record id at which to fetch the next page, taken from the previous keyset response. Only used when pagination=‘keyset’. |
pagination | string | no | Pagination method: ‘keyset’ for keyset-based pagination on large ordered result sets, or ‘offset’ (the default). Keyset avoids deep-offset cost. |
per_page | integer | no | Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large. |
relation | string[] | no | Filter by group relation to the project (e.g. direct, inherited) |
search | string | no | Search by group name |
sort | string (asc, desc) | no | Keyset sort direction (asc, desc) |
with_custom_attributes | boolean | no | Include custom attributes in the response (admin only) |
project.list_starrers
Section titled “project.list_starrers”List a project’s starrers. Returns: users with their starred_since date, plus pagination metadata. See also:
project.star,project.list_user_starred.
- Meta-tool:
gitlab_project, actionlist_starrers - Individual tool:
gitlab_project_list_starrers - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
project_id | string/integer | yes | Project ID or URL-encoded path |
order_by | string | no | Keyset ordering column (for keyset pagination) |
page | integer | no | Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward. |
page_token | string | no | Keyset pagination cursor: record id at which to fetch the next page, taken from the previous keyset response. Only used when pagination=‘keyset’. |
pagination | string | no | Pagination method: ‘keyset’ for keyset-based pagination on large ordered result sets, or ‘offset’ (the default). Keyset avoids deep-offset cost. |
per_page | integer | no | Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large. |
search | string | no | Search by name or username |
sort | string (asc, desc) | no | Keyset sort direction (asc, desc) |
project.list_user_contributed
Section titled “project.list_user_contributed”List projects a user contributed to. Returns: projects with namespace, visibility, and pagination metadata. See also:
project.list_user_projects,project.list_user_starred.
- Meta-tool:
gitlab_project, actionlist_user_contributed - Individual tool:
gitlab_project_list_user_contributed - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
user_id | string/integer | yes | User ID or username |
active | boolean | no | Limit to active (non-archived, non-pending-deletion) projects |
archived | boolean | no | Filter by archived status (true=only archived, false=only active) |
custom_attributes | object | no | Filter projects by custom attribute key/value pairs (admin only). Different from with_custom_attributes, which only controls whether attributes are returned |
id_after | integer | no | Return projects with ID greater than this value (keyset pagination) |
id_before | integer | no | Return projects with ID less than this value (keyset pagination) |
imported | boolean | no | Limit to projects imported from an external source by the current user |
include_hidden | boolean | no | Include hidden projects in results |
include_pending_delete | boolean | no | Include projects marked/scheduled for deletion. Default false. |
last_activity_after | string | no | Return projects with last activity after date (ISO 8601 format) |
last_activity_before | string | no | Return projects with last activity before date (ISO 8601 format) |
membership | boolean | no | Limit to projects where the current user is a member |
min_access_level | integer | no | Filter by minimum access level (5=Minimal access, 10=Guest, 15=Planner (Premium/Ultimate), 20=Reporter, 25=Security Manager (Premium/Ultimate), 30=Developer, 40=Maintainer, 50=Owner, 60=Admin where supported) |
order_by | string (id, name, path, created_at, updated_at, last_activity_at, similarity, star_count) | no | Order projects by id, name, path, created_at, updated_at, last_activity_at, similarity (requires search query), or star_count. |
owned | boolean | no | Limit to projects explicitly owned by the current user |
page | integer | no | Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward. |
page_token | string | no | Keyset pagination cursor: record id at which to fetch the next page, taken from the previous keyset response. Only used when pagination=‘keyset’. |
pagination | string | no | Pagination method: ‘keyset’ for keyset-based pagination on large ordered result sets, or ‘offset’ (the default). Keyset avoids deep-offset cost. |
per_page | integer | no | Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large. |
repository_checksum_failed | boolean | no | Limit to projects where the repository checksum calculation failed (admin only) |
repository_storage | string | no | Limit to projects on the given repository storage shard (admin only) |
search | string | no | Search query for project name |
search_namespaces | boolean | no | Include namespace in search |
simple | boolean | no | Return only limited fields (faster) |
sort | string (asc, desc) | no | Sort direction (asc, desc) |
starred | boolean | no | Limit to projects starred by the current user |
statistics | boolean | no | Include project statistics in response |
topic | string | no | Filter by topic name |
visibility | string (private, internal, public) | no | Filter by visibility (private, internal, public) |
wiki_checksum_failed | boolean | no | Limit to projects where the wiki checksum calculation failed (admin only) |
with_custom_attributes | boolean | no | Include custom attributes in the response (admin only) |
with_issues_enabled | boolean | no | Filter by projects with issues feature enabled |
with_merge_requests_enabled | boolean | no | Filter by projects with merge requests enabled |
with_programming_language | string | no | Filter by programming language name |
project.list_user_projects
Section titled “project.list_user_projects”List a user’s owned projects. Returns: projects with namespace, visibility, and pagination metadata. See also:
project.list_user_contributed,project.list_user_starred.
- Meta-tool:
gitlab_project, actionlist_user_projects - Individual tool:
gitlab_project_list_user_projects - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
user_id | string/integer | yes | User ID or username |
active | boolean | no | Limit to active (non-archived, non-pending-deletion) projects |
archived | boolean | no | Filter by archived status (true=only archived, false=only active) |
custom_attributes | object | no | Filter projects by custom attribute key/value pairs (admin only). Different from with_custom_attributes, which only controls whether attributes are returned |
id_after | integer | no | Return projects with ID greater than this value (keyset pagination) |
id_before | integer | no | Return projects with ID less than this value (keyset pagination) |
imported | boolean | no | Limit to projects imported from an external source by the current user |
include_hidden | boolean | no | Include hidden projects in results |
include_pending_delete | boolean | no | Include projects marked/scheduled for deletion. Default false. |
last_activity_after | string | no | Return projects with last activity after date (ISO 8601 format) |
last_activity_before | string | no | Return projects with last activity before date (ISO 8601 format) |
membership | boolean | no | Limit to projects where the current user is a member |
min_access_level | integer | no | Filter by minimum access level (5=Minimal access, 10=Guest, 15=Planner (Premium/Ultimate), 20=Reporter, 25=Security Manager (Premium/Ultimate), 30=Developer, 40=Maintainer, 50=Owner, 60=Admin where supported) |
order_by | string (id, name, path, created_at, updated_at, last_activity_at, similarity, star_count) | no | Order projects by id, name, path, created_at, updated_at, last_activity_at, similarity (requires search query), or star_count. |
owned | boolean | no | Limit to projects explicitly owned by the current user |
page | integer | no | Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward. |
page_token | string | no | Keyset pagination cursor: record id at which to fetch the next page, taken from the previous keyset response. Only used when pagination=‘keyset’. |
pagination | string | no | Pagination method: ‘keyset’ for keyset-based pagination on large ordered result sets, or ‘offset’ (the default). Keyset avoids deep-offset cost. |
per_page | integer | no | Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large. |
repository_checksum_failed | boolean | no | Limit to projects where the repository checksum calculation failed (admin only) |
repository_storage | string | no | Limit to projects on the given repository storage shard (admin only) |
search | string | no | Search query for project name |
search_namespaces | boolean | no | Include namespace in search |
simple | boolean | no | Return only limited fields (faster) |
sort | string (asc, desc) | no | Sort direction (asc, desc) |
starred | boolean | no | Limit to projects starred by the current user |
statistics | boolean | no | Include project statistics in response |
topic | string | no | Filter by topic name |
visibility | string (private, internal, public) | no | Filter by visibility (private, internal, public) |
wiki_checksum_failed | boolean | no | Limit to projects where the wiki checksum calculation failed (admin only) |
with_custom_attributes | boolean | no | Include custom attributes in the response (admin only) |
with_issues_enabled | boolean | no | Filter by projects with issues feature enabled |
with_merge_requests_enabled | boolean | no | Filter by projects with merge requests enabled |
with_programming_language | string | no | Filter by programming language name |
project.list_user_starred
Section titled “project.list_user_starred”List projects a user starred. Returns: projects with namespace, visibility, and pagination metadata. See also:
project.list_user_projects,project.list_starrers.
- Meta-tool:
gitlab_project, actionlist_user_starred - Individual tool:
gitlab_project_list_user_starred - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
user_id | string/integer | yes | User ID or username |
active | boolean | no | Limit to active (non-archived, non-pending-deletion) projects |
archived | boolean | no | Filter by archived status (true=only archived, false=only active) |
custom_attributes | object | no | Filter projects by custom attribute key/value pairs (admin only). Different from with_custom_attributes, which only controls whether attributes are returned |
id_after | integer | no | Return projects with ID greater than this value (keyset pagination) |
id_before | integer | no | Return projects with ID less than this value (keyset pagination) |
imported | boolean | no | Limit to projects imported from an external source by the current user |
include_hidden | boolean | no | Include hidden projects in results |
include_pending_delete | boolean | no | Include projects marked/scheduled for deletion. Default false. |
last_activity_after | string | no | Return projects with last activity after date (ISO 8601 format) |
last_activity_before | string | no | Return projects with last activity before date (ISO 8601 format) |
membership | boolean | no | Limit to projects where the current user is a member |
min_access_level | integer | no | Filter by minimum access level (5=Minimal access, 10=Guest, 15=Planner (Premium/Ultimate), 20=Reporter, 25=Security Manager (Premium/Ultimate), 30=Developer, 40=Maintainer, 50=Owner, 60=Admin where supported) |
order_by | string (id, name, path, created_at, updated_at, last_activity_at, similarity, star_count) | no | Order projects by id, name, path, created_at, updated_at, last_activity_at, similarity (requires search query), or star_count. |
owned | boolean | no | Limit to projects explicitly owned by the current user |
page | integer | no | Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward. |
page_token | string | no | Keyset pagination cursor: record id at which to fetch the next page, taken from the previous keyset response. Only used when pagination=‘keyset’. |
pagination | string | no | Pagination method: ‘keyset’ for keyset-based pagination on large ordered result sets, or ‘offset’ (the default). Keyset avoids deep-offset cost. |
per_page | integer | no | Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large. |
repository_checksum_failed | boolean | no | Limit to projects where the repository checksum calculation failed (admin only) |
repository_storage | string | no | Limit to projects on the given repository storage shard (admin only) |
search | string | no | Search query for project name |
search_namespaces | boolean | no | Include namespace in search |
simple | boolean | no | Return only limited fields (faster) |
sort | string (asc, desc) | no | Sort direction (asc, desc) |
starred | boolean | no | Limit to projects starred by the current user |
statistics | boolean | no | Include project statistics in response |
topic | string | no | Filter by topic name |
visibility | string (private, internal, public) | no | Filter by visibility (private, internal, public) |
wiki_checksum_failed | boolean | no | Limit to projects where the wiki checksum calculation failed (admin only) |
with_custom_attributes | boolean | no | Include custom attributes in the response (admin only) |
with_issues_enabled | boolean | no | Filter by projects with issues feature enabled |
with_merge_requests_enabled | boolean | no | Filter by projects with merge requests enabled |
with_programming_language | string | no | Filter by programming language name |
project.list_users
Section titled “project.list_users”List a project’s users. Returns: users with id, username, name, and state, plus pagination metadata. See also:
project.get,project.members.
- Meta-tool:
gitlab_project, actionlist_users - Individual tool:
gitlab_project_list_users - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
project_id | string/integer | yes | Project ID or URL-encoded path |
order_by | string | no | Keyset ordering column (for keyset pagination) |
page | integer | no | Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward. |
page_token | string | no | Keyset pagination cursor: record id at which to fetch the next page, taken from the previous keyset response. Only used when pagination=‘keyset’. |
pagination | string | no | Pagination method: ‘keyset’ for keyset-based pagination on large ordered result sets, or ‘offset’ (the default). Keyset avoids deep-offset cost. |
per_page | integer | no | Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large. |
search | string | no | Search by name or username |
sort | string (asc, desc) | no | Keyset sort direction (asc, desc) |
project.member_add
Section titled “project.member_add”Add a user to a project team by user_id or username with an access level. Optional: expires_at, member_role_id (Premium/Ultimate). Returns: the created membership. See also:
project.member_edit,project.members,user.list.
- Meta-tool:
gitlab_project, actionmember_add - Individual tool:
gitlab_project_member_add - Tier: Free
- Behavior: writes, not idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
project_id | string/integer | yes | Project ID or URL-encoded path |
user_id | integer | yes | User ID to add (provide user_id or username) |
access_level | integer | no | Access level (5=Minimal access, 10=Guest, 15=Planner (Premium/Ultimate), 20=Reporter, 25=Security Manager (Premium/Ultimate), 30=Developer, 40=Maintainer, 50=Owner) |
expires_at | string | no | Membership expiration date (YYYY-MM-DD) |
member_role_id | integer | no | Custom member role ID |
username | string | no | Username to add (provide user_id or username) |
project.member_delete
Section titled “project.member_delete”Remove a member from a project (destructive, requires confirmation). Requires Maintainer. The last Owner of a project cannot be removed. Returns: a success confirmation naming the removed member. See also:
project.member_edit,project.members.
- Meta-tool:
gitlab_project, actionmember_delete - Individual tool:
gitlab_project_member_delete - Tier: Free
- Behavior: writes, destructive (needs confirmation), idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
project_id | string/integer | yes | Project ID or URL-encoded path |
user_id | integer | yes | User ID of the member to remove |
project.member_edit
Section titled “project.member_edit”Edit a project member’s access level, expiry, or custom member role. Returns: the updated membership. Requires at least the same access level as the target member. See also:
project.member_add,project.member_delete,project.members.
- Meta-tool:
gitlab_project, actionmember_edit - Individual tool:
gitlab_project_member_edit - Tier: Free
- Behavior: writes, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
project_id | string/integer | yes | Project ID or URL-encoded path |
user_id | integer | yes | User ID of the member to edit |
access_level | integer | no | New access level (5=Minimal access, 10=Guest, 15=Planner (Premium/Ultimate), 20=Reporter, 25=Security Manager (Premium/Ultimate), 30=Developer, 40=Maintainer, 50=Owner) |
expires_at | string | no | Membership expiration date (YYYY-MM-DD) |
member_role_id | integer | no | Custom member role ID |
project.member_get
Section titled “project.member_get”Get a single direct project member by user ID. Returns: id, username, name, state, access level, member role, created_by, expiry, and web URL. Does not include inherited members. See also:
project.member_inherited,project.members,project.member_edit.
- Meta-tool:
gitlab_project, actionmember_get - Individual tool:
gitlab_project_member_get - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
project_id | string/integer | yes | Project ID or URL-encoded path |
user_id | integer | yes | User ID of the member |
project.member_inherited
Section titled “project.member_inherited”Get a project member including membership inherited from parent groups. Returns: id, username, name, state, effective access level, member role, and web URL. See also:
project.member_get,project.members.
- Meta-tool:
gitlab_project, actionmember_inherited - Individual tool:
gitlab_project_member_get_inherited - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
project_id | string/integer | yes | Project ID or URL-encoded path |
user_id | integer | yes | User ID of the member |
project.members
Section titled “project.members”List a project’s members (direct plus inherited from parent groups). Returns: each member’s id, username, name, state, access level, member role, created_by, seat usage, and web URL. Supports query/user_ids/show_seat_info filtering, order_by/sort, and offset or keyset pagination. See also:
project.member_get,project.member_add,project.get.
- Meta-tool:
gitlab_project, actionmembers - Individual tool:
gitlab_project_members_list - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
project_id | string/integer | yes | Project ID or URL-encoded path |
order_by | string | no | Column to order results by (e.g. id, name, username, access_level) |
page | integer | no | Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward. |
page_token | string | no | Keyset pagination cursor: record id at which to fetch the next page, taken from the previous keyset response. Only used when pagination=‘keyset’. |
pagination | string | no | Pagination method: ‘keyset’ for keyset-based pagination on large ordered result sets, or ‘offset’ (the default). Keyset avoids deep-offset cost. |
per_page | integer | no | Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large. |
query | string | no | Filter members by name or username |
show_seat_info | boolean | no | Include seat usage information (is_using_seat) for each member |
sort | string (asc, desc) | no | Sort direction (asc, desc) |
user_ids | integer[] | no | Filter the results to only the listed user IDs |
project.milestone_create
Section titled “project.milestone_create”Create a new milestone in a project with title and optional description, start date, and due date. Returns: the created milestone with IID, state, dates, and web URL. See also:
project.milestone_get,project.milestone_update,project.milestone_list.
- Meta-tool:
gitlab_project, actionmilestone_create - Individual tool:
gitlab_milestone_create - Tier: Free
- Behavior: writes, not idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
project_id | string/integer | yes | Project ID or URL-encoded path |
title | string | yes | Milestone title |
description | string | no | Milestone description |
due_date | string | no | Due date (YYYY-MM-DD) |
start_date | string | no | Start date (YYYY-MM-DD) |
project.milestone_delete
Section titled “project.milestone_delete”Delete a milestone permanently from a project by milestone IID. Returns: a success confirmation naming the milestone and project. See also:
project.milestone_get,project.milestone_update,project.milestone_list.
- Meta-tool:
gitlab_project, actionmilestone_delete - Individual tool:
gitlab_milestone_delete - Tier: Free
- Behavior: writes, destructive (needs confirmation), idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
milestone_iid | integer | yes | Milestone IID (project-scoped). Use project.milestone_list to find IIDs |
project_id | string/integer | yes | Project ID or URL-encoded path |
project.milestone_get
Section titled “project.milestone_get”Get a single milestone from a project by milestone IID. Returns: milestone title, description, state, start/due dates, expiry, group/project IDs, timestamps, and web URL. See also:
project.milestone_list,project.milestone_update,project.milestone_issues,project.milestone_merge_requests.
- Meta-tool:
gitlab_project, actionmilestone_get - Individual tool:
gitlab_milestone_get - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
milestone_iid | integer | yes | Milestone IID (project-scoped). Use project.milestone_list to find IIDs |
project_id | string/integer | yes | Project ID or URL-encoded path |
project.milestone_issues
Section titled “project.milestone_issues”List issues assigned to a single milestone with ordering and pagination. Returns: assigned issues with IID, project, title, state, labels, author, assignees, confidentiality, weight, due date, web URL, timestamps, and pagination metadata. See also:
project.milestone_get,project.milestone_merge_requests,issue.list.
- Meta-tool:
gitlab_project, actionmilestone_issues - Individual tool:
gitlab_milestone_issues - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
milestone_iid | integer | yes | Milestone IID (project-scoped). Use project.milestone_list to find IIDs |
project_id | string/integer | yes | Project ID or URL-encoded path |
order_by | string | no | Order results by field (e.g. created_at, updated_at) |
page | integer | no | Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward. |
page_token | string | no | Keyset pagination cursor: record id at which to fetch the next page, taken from the previous keyset response. Only used when pagination=‘keyset’. |
pagination | string | no | Pagination method: ‘keyset’ for keyset-based pagination on large ordered result sets, or ‘offset’ (the default). Keyset avoids deep-offset cost. |
per_page | integer | no | Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large. |
sort | string (asc, desc) | no | Sort direction (asc, desc) |
project.milestone_list
Section titled “project.milestone_list”List milestones in one project with state/title/search filters, ancestor inclusion, ordering, and pagination. Returns: matching milestones with state, dates, expiry, web URL, and pagination metadata. See also:
project.milestone_get,project.milestone_create,project.milestone_issues.
- Meta-tool:
gitlab_project, actionmilestone_list - Individual tool:
gitlab_milestone_list - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
project_id | string/integer | yes | Project ID or URL-encoded path |
iids | integer[] | no | Filter by milestone IIDs |
include_ancestors | boolean | no | Include milestones from parent groups |
include_parent_milestones | boolean | no | Deprecated (GitLab 16.7+): use include_ancestors instead. Include milestones from parent groups |
order_by | string | no | Order results by field (e.g. created_at, updated_at, due_date, title) |
page | integer | no | Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward. |
page_token | string | no | Keyset pagination cursor: record id at which to fetch the next page, taken from the previous keyset response. Only used when pagination=‘keyset’. |
pagination | string | no | Pagination method: ‘keyset’ for keyset-based pagination on large ordered result sets, or ‘offset’ (the default). Keyset avoids deep-offset cost. |
per_page | integer | no | Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large. |
search | string | no | Search milestones by title or description |
sort | string (asc, desc) | no | Sort direction (asc, desc) |
state | string (active, closed) | no | Filter by state (active, closed) |
title | string | no | Filter by exact milestone title |
project.milestone_merge_requests
Section titled “project.milestone_merge_requests”List merge requests assigned to a single milestone with ordering and pagination. Returns: assigned merge requests with IID, project, title, state, draft flag, merge status, source/target branches, labels, author, assignees, reviewers, web URL, timestamps, and pagination metadata. See also:
project.milestone_get,project.milestone_issues,merge_request.list.
- Meta-tool:
gitlab_project, actionmilestone_merge_requests - Individual tool:
gitlab_milestone_merge_requests - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
milestone_iid | integer | yes | Milestone IID (project-scoped). Use project.milestone_list to find IIDs |
project_id | string/integer | yes | Project ID or URL-encoded path |
order_by | string | no | Order results by field (e.g. created_at, updated_at) |
page | integer | no | Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward. |
page_token | string | no | Keyset pagination cursor: record id at which to fetch the next page, taken from the previous keyset response. Only used when pagination=‘keyset’. |
pagination | string | no | Pagination method: ‘keyset’ for keyset-based pagination on large ordered result sets, or ‘offset’ (the default). Keyset avoids deep-offset cost. |
per_page | integer | no | Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large. |
sort | string (asc, desc) | no | Sort direction (asc, desc) |
project.milestone_update
Section titled “project.milestone_update”Update an existing milestone’s title, description, start/due dates, or state (state_event close/activate) by milestone IID. Returns: the updated milestone with state, dates, and web URL. See also:
project.milestone_get,project.milestone_delete,project.milestone_list.
- Meta-tool:
gitlab_project, actionmilestone_update - Individual tool:
gitlab_milestone_update - Tier: Free
- Behavior: writes, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
milestone_iid | integer | yes | Milestone IID (project-scoped). Use project.milestone_list to find IIDs |
project_id | string/integer | yes | Project ID or URL-encoded path |
description | string | no | Milestone description |
due_date | string | no | Due date (YYYY-MM-DD) |
start_date | string | no | Start date (YYYY-MM-DD) |
state_event | string (close, activate) | no | State transition: activate or close |
title | string | no | Milestone title |
project.mirror_add
Section titled “project.mirror_add”Create a push (remote) mirror on a project. Destructive: the host in url receives the whole repository from then on, so confirmation is required. Returns: the created mirror with id, enabled state, redacted URL, and update status. See also:
project.mirror_list,project.mirror_edit,project.mirror_get_public_key.
- Meta-tool:
gitlab_project, actionmirror_add - Individual tool:
gitlab_add_project_mirror - Tier: Free
- Behavior: writes, destructive (needs confirmation), not idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
project_id | string/integer | yes | Project ID or URL-encoded path |
url | string | yes | Remote push mirror URL (e.g. https://user:token@example.com/repo.git). URL-embedded credentials are supported only for push mirrors. Treat them as secrets, do not log or store them, and redact tokens or passwords in telemetry/errors |
auth_method | string (ssh_public_key, password) | no | Authentication method (password or ssh_public_key) |
enabled | boolean | no | Whether the mirror is enabled |
host_keys | string[] | no | SSH host keys for the remote mirror |
keep_divergent_refs | boolean | no | Keep divergent refs on the remote |
mirror_branch_regex | string | no | Regex pattern for branches to mirror |
only_protected_branches | boolean | no | Mirror only protected branches |
project.mirror_delete
Section titled “project.mirror_delete”Delete a push mirror from a project permanently. Returns: a success confirmation naming the mirror and project. See also:
project.mirror_get,project.mirror_edit.
- Meta-tool:
gitlab_project, actionmirror_delete - Individual tool:
gitlab_delete_project_mirror - Tier: Free
- Behavior: writes, destructive (needs confirmation), idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
mirror_id | integer | yes | Remote mirror ID |
project_id | string/integer | yes | Project ID or URL-encoded path |
project.mirror_edit
Section titled “project.mirror_edit”Update a push mirror’s attributes (enabled, branch filtering, divergent refs, auth method). Returns: the updated mirror. See also:
project.mirror_get,project.mirror_force_push.
- Meta-tool:
gitlab_project, actionmirror_edit - Individual tool:
gitlab_edit_project_mirror - Tier: Free
- Behavior: writes, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
mirror_id | integer | yes | Remote mirror ID |
project_id | string/integer | yes | Project ID or URL-encoded path |
auth_method | string (ssh_public_key, password) | no | Authentication method (password or ssh_public_key) |
enabled | boolean | no | Whether the mirror is enabled |
host_keys | string[] | no | SSH host keys for the remote mirror |
keep_divergent_refs | boolean | no | Keep divergent refs on the remote |
mirror_branch_regex | string | no | Regex pattern for branches to mirror |
only_protected_branches | boolean | no | Mirror only protected branches |
project.mirror_force_push
Section titled “project.mirror_force_push”Trigger an immediate update of a push mirror. Returns: a confirmation that the update was triggered. See also:
project.mirror_get,project.mirror_edit.
- Meta-tool:
gitlab_project, actionmirror_force_push - Individual tool:
gitlab_force_push_mirror_update - Tier: Free
- Behavior: writes, destructive (needs confirmation), idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
mirror_id | integer | yes | Remote mirror ID |
project_id | string/integer | yes | Project ID or URL-encoded path |
project.mirror_get
Section titled “project.mirror_get”Get a single push mirror of a project by mirror id. Returns: the mirror with enabled state, redacted URL, auth method, branch filtering, and last-update status/error. See also:
project.mirror_list,project.mirror_edit,project.mirror_force_push.
- Meta-tool:
gitlab_project, actionmirror_get - Individual tool:
gitlab_get_project_mirror - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
mirror_id | integer | yes | Remote mirror ID |
project_id | string/integer | yes | Project ID or URL-encoded path |
project.mirror_get_public_key
Section titled “project.mirror_get_public_key”Get the SSH public key for an SSH-authenticated push mirror. Returns: the public key to register on the remote. See also:
project.mirror_get,project.mirror_edit.
- Meta-tool:
gitlab_project, actionmirror_get_public_key - Individual tool:
gitlab_get_project_mirror_public_key - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
mirror_id | integer | yes | Remote mirror ID |
project_id | string/integer | yes | Project ID or URL-encoded path |
project.mirror_list
Section titled “project.mirror_list”List a project’s push (remote) mirrors. Returns: each mirror with id, enabled state, redacted URL, last-update status, and pagination metadata. See also:
project.mirror_get,project.mirror_add,project.pull_mirror_get.
- Meta-tool:
gitlab_project, actionmirror_list - Individual tool:
gitlab_list_project_mirrors - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
project_id | string/integer | yes | Project ID or URL-encoded path |
order_by | string | no | Column to order keyset-paginated results by (e.g. id). Only applies when pagination=‘keyset’. |
page | integer | no | Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward. |
page_token | string | no | Keyset pagination cursor: record id at which to fetch the next page, taken from the previous keyset response. Only used when pagination=‘keyset’. |
pagination | string | no | Pagination method: ‘keyset’ for keyset-based pagination on large ordered result sets, or ‘offset’ (the default). Keyset avoids deep-offset cost. |
per_page | integer | no | Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large. |
sort | string (asc, desc) | no | Sort direction for keyset-paginated results: asc or desc. Only applies when pagination=‘keyset’. |
project.pages_domain_create
Section titled “project.pages_domain_create”Add a new custom Pages domain to a project. Returns: the created domain with verification code, auto-SSL flag, and certificate details. See also:
project.pages_domain_get,project.pages_domain_update,project.pages_domain_list.
- Meta-tool:
gitlab_project, actionpages_domain_create - Individual tool:
gitlab_pages_domain_create - Tier: Free
- Behavior: writes, not idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
domain | string | yes | Custom domain name (e.g. example.com) |
project_id | string/integer | yes | Project ID or URL-encoded path |
auto_ssl_enabled | boolean | no | Enable automatic SSL certificate provisioning |
certificate | string | no | PEM-encoded SSL certificate |
key | string | no | PEM-encoded private key for the certificate |
project.pages_domain_delete
Section titled “project.pages_domain_delete”Remove a custom Pages domain from a project (destructive). Returns: a success confirmation naming the deleted domain. See also:
project.pages_domain_get,project.pages_domain_list.
- Meta-tool:
gitlab_project, actionpages_domain_delete - Individual tool:
gitlab_pages_domain_delete - Tier: Free
- Behavior: writes, destructive (needs confirmation), idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
domain | string | yes | The Pages domain name to delete |
project_id | string/integer | yes | Project ID or URL-encoded path |
project.pages_domain_get
Section titled “project.pages_domain_get”Get a single Pages custom domain by name. Returns: the domain with verification status and code, auto-SSL flag, enabled-until date, and certificate subject/expiration. See also:
project.pages_domain_list,project.pages_domain_update,project.pages_domain_delete.
- Meta-tool:
gitlab_project, actionpages_domain_get - Individual tool:
gitlab_pages_domain_get - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
domain | string | yes | The Pages domain name |
project_id | string/integer | yes | Project ID or URL-encoded path |
project.pages_domain_list
Section titled “project.pages_domain_list”List the custom Pages domains for a project with pagination. Returns: matching domains with verification status, auto-SSL flag, project ID, certificate details, and pagination metadata. See also:
project.pages_domain_get,project.pages_domain_create,project.pages_domain_list_all.
- Meta-tool:
gitlab_project, actionpages_domain_list - Individual tool:
gitlab_pages_domain_list - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
project_id | string/integer | yes | Project ID or URL-encoded path |
order_by | string | no | Column to order keyset-paginated results by |
page | integer | no | Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward. |
page_token | string | no | Keyset pagination cursor: record id at which to fetch the next page, taken from the previous keyset response. Only used when pagination=‘keyset’. |
pagination | string | no | Pagination method: ‘keyset’ for keyset-based pagination on large ordered result sets, or ‘offset’ (the default). Keyset avoids deep-offset cost. |
per_page | integer | no | Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large. |
sort | string (asc, desc) | no | Sort direction (asc, desc) |
project.pages_domain_list_all
Section titled “project.pages_domain_list_all”List the GitLab Pages custom domains across the whole instance (admin only), one page at a time. Use this instead of project.pages_domain_list when you need every domain on the instance, not just those attached to a single project. Returns: the page of domains with verification status, auto-SSL flag, project ID, and certificate subject, and pagination metadata. See also:
project.pages_domain_list,project.pages_domain_get,project.pages_domain_create.
- Meta-tool:
gitlab_project, actionpages_domain_list_all - Individual tool:
gitlab_pages_domain_list_all - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
page | integer | no | Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward. |
per_page | integer | no | Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large. |
project.pages_domain_update
Section titled “project.pages_domain_update”Update an existing Pages custom domain’s auto-SSL flag or certificate. Returns: the updated domain with verification status and certificate details. See also:
project.pages_domain_get,project.pages_domain_delete,project.pages_domain_list.
- Meta-tool:
gitlab_project, actionpages_domain_update - Individual tool:
gitlab_pages_domain_update - Tier: Free
- Behavior: writes, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
domain | string | yes | The Pages domain name to update |
project_id | string/integer | yes | Project ID or URL-encoded path |
auto_ssl_enabled | boolean | no | Enable automatic SSL certificate provisioning |
certificate | string | no | PEM-encoded SSL certificate |
key | string | no | PEM-encoded private key for the certificate |
project.pages_get
Section titled “project.pages_get”Get the Pages settings for a project. Returns: the Pages URL, force-HTTPS and unique-domain flags, primary domain, and recent deployments. See also:
project.pages_update,project.pages_unpublish,project.pages_domain_list.
- Meta-tool:
gitlab_project, actionpages_get - Individual tool:
gitlab_pages_get - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
project_id | string/integer | yes | Project ID or URL-encoded path |
project.pages_unpublish
Section titled “project.pages_unpublish”Unpublish a project’s Pages site (destructive). Returns: a success confirmation. See also:
project.pages_get,project.pages_update.
- Meta-tool:
gitlab_project, actionpages_unpublish - Individual tool:
gitlab_pages_unpublish - Tier: Free
- Behavior: writes, destructive (needs confirmation), idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
project_id | string/integer | yes | Project ID or URL-encoded path |
project.pages_update
Section titled “project.pages_update”Update the Pages settings for a project. Returns: the updated Pages settings with URL, force-HTTPS and unique-domain flags, primary domain, and deployments. See also:
project.pages_get,project.pages_domain_create,project.pages_unpublish.
- Meta-tool:
gitlab_project, actionpages_update - Individual tool:
gitlab_pages_update - Tier: Free
- Behavior: writes, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
project_id | string/integer | yes | Project ID or URL-encoded path |
pages_https_only | boolean | no | Enforce HTTPS for Pages |
pages_primary_domain | string | no | Primary domain for Pages |
pages_unique_domain_enabled | boolean | no | Enable unique domain for Pages |
project.pull_mirror_configure
Section titled “project.pull_mirror_configure”Configure a project’s pull mirror. Arming mirror_overwrites_diverged_branches replaces this project’s diverged branches with the source’s and requires confirmation. Returns: the updated mirror configuration. See also:
project.pull_mirror_get,project.start_mirroring.
- Meta-tool:
gitlab_project, actionpull_mirror_configure - Individual tool:
gitlab_project_pull_mirror_configure - Tier: Premium
- Behavior: writes, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
project_id | string/integer | yes | Project ID or URL-encoded path |
auth_password | string | no | Authentication password or token for the mirror URL. Treat as secret: do not log or store it, and redact it in telemetry/errors |
auth_user | string | no | Authentication username for the mirror URL. Treat as secret-adjacent and avoid logging with auth_password |
confirm | boolean | no | Confirms arming mirror_overwrites_diverged_branches, which discards local commits on every diverged branch. Only required when this call leaves the mirror overwriting |
enabled | boolean | no | Enable or disable pull mirroring |
mirror_branch_regex | string | no | Regex to filter branches to mirror |
mirror_overwrites_diverged_branches | boolean | no | Replace this project’s diverged branches with the source’s versions on every sync, discarding the local commits. Without it GitLab stops updating a diverged branch instead. Requires confirm=true |
mirror_trigger_builds | boolean | no | Trigger CI builds when mirror updates |
only_mirror_protected_branches | boolean | no | Only mirror protected branches |
url | string | no | Pull mirror source URL. Do not include credentials in the URL. Unlike push mirror endpoints, pull mirroring requires auth_user and auth_password for authentication |
project.pull_mirror_get
Section titled “project.pull_mirror_get”Get a project’s pull-mirror configuration. Returns: the mirror URL, enabled flag, and last sync status. See also:
project.pull_mirror_configure,project.start_mirroring.
- Meta-tool:
gitlab_project, actionpull_mirror_get - Individual tool:
gitlab_project_pull_mirror_get - Tier: Premium
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
project_id | string/integer | yes | Project ID or URL-encoded path |
project.push_rule_add
Section titled “project.push_rule_add”Add push rules to a project. Returns: the created push-rule configuration. See also:
project.push_rule_get,project.push_rule_edit.
- Meta-tool:
gitlab_project, actionpush_rule_add - Individual tool:
gitlab_project_add_push_rule - Tier: Premium
- Behavior: writes, not idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
project_id | string/integer | yes | Project ID or URL-encoded path |
author_email_regex | string | no | Regex to validate author email addresses |
branch_name_regex | string | no | Regex to validate branch names |
commit_committer_check | boolean | no | Reject commits where committer is not a project member |
commit_committer_name_check | boolean | no | Reject commits where committer name does not match user name |
commit_message_negative_regex | string | no | Regex that commit messages must NOT match |
commit_message_regex | string | no | Regex that commit messages must match |
deny_delete_tag | boolean | no | Deny tag deletion |
file_name_regex | string | no | Regex for disallowed file names |
max_file_size | integer | no | Maximum file size (MB). 0 means unlimited |
member_check | boolean | no | Only allow commits from project members |
prevent_secrets | boolean | no | Reject files that are likely to contain secrets |
reject_non_dco_commits | boolean | no | Reject commits without DCO certification |
reject_unsigned_commits | boolean | no | Reject commits that are not GPG signed |
project.push_rule_delete
Section titled “project.push_rule_delete”Delete a project’s push rules. Returns: a success confirmation naming the project. See also:
project.push_rule_get,project.push_rule_add.
- Meta-tool:
gitlab_project, actionpush_rule_delete - Individual tool:
gitlab_project_delete_push_rule - Tier: Premium
- Behavior: writes, destructive (needs confirmation), idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
project_id | string/integer | yes | Project ID or URL-encoded path |
project.push_rule_edit
Section titled “project.push_rule_edit”Edit a project’s push rules. Returns: the updated push-rule configuration. See also:
project.push_rule_get,project.push_rule_add.
- Meta-tool:
gitlab_project, actionpush_rule_edit - Individual tool:
gitlab_project_edit_push_rule - Tier: Premium
- Behavior: writes, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
project_id | string/integer | yes | Project ID or URL-encoded path |
author_email_regex | string | no | Regex to validate author email addresses |
branch_name_regex | string | no | Regex to validate branch names |
commit_committer_check | boolean | no | Reject commits where committer is not a project member |
commit_committer_name_check | boolean | no | Reject commits where committer name does not match user name |
commit_message_negative_regex | string | no | Regex that commit messages must NOT match |
commit_message_regex | string | no | Regex that commit messages must match |
deny_delete_tag | boolean | no | Deny tag deletion |
file_name_regex | string | no | Regex for disallowed file names |
max_file_size | integer | no | Maximum file size (MB). 0 means unlimited |
member_check | boolean | no | Only allow commits from project members |
prevent_secrets | boolean | no | Reject files that are likely to contain secrets |
reject_non_dco_commits | boolean | no | Reject commits without DCO certification |
reject_unsigned_commits | boolean | no | Reject commits that are not GPG signed |
project.push_rule_get
Section titled “project.push_rule_get”Get a project’s push rules. Returns: the singleton push-rule configuration such as commit_message_regex and reject_unsigned_commits. See also:
project.push_rule_add,project.push_rule_edit.
- Meta-tool:
gitlab_project, actionpush_rule_get - Individual tool:
gitlab_project_get_push_rules - Tier: Premium
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
project_id | string/integer | yes | Project ID or URL-encoded path |
project.repository_storage_get
Section titled “project.repository_storage_get”Get a project’s repository storage shard. Returns: the storage shard name. See also:
project.start_housekeeping,project.get.
- Meta-tool:
gitlab_project, actionrepository_storage_get - Individual tool:
gitlab_project_repository_storage_get - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
project_id | string/integer | yes | Project ID or URL-encoded path |
project.restore
Section titled “project.restore”Restore a project marked for deletion. Returns: the restored project. See also:
project.delete,project.get.
- Meta-tool:
gitlab_project, actionrestore - Individual tool:
gitlab_project_restore - Tier: Free
- Behavior: writes, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
project_id | string/integer | yes | Project ID or URL-encoded path of the project marked for deletion |
project.security_settings_get
Section titled “project.security_settings_get”Read a project’s security settings (Ultimate). Returns: secret_push_protection_enabled, continuous_vulnerability_scans_enabled, container scanning, and per-analyzer auto-fix flags. See also:
project.security_settings_update,project.get.
- Meta-tool:
gitlab_project, actionsecurity_settings_get - Individual tool:
gitlab_get_project_security_settings - Tier: Ultimate
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
project_id | string/integer | yes | Project ID or URL-encoded path |
project.security_settings_update
Section titled “project.security_settings_update”Enable or disable secret push protection for a project (Ultimate). Returns: the project’s security settings including secret_push_protection_enabled, continuous vulnerability scanning, and auto-fix flags. See also:
project.security_settings_get,group.security_settings_update.
- Meta-tool:
gitlab_project, actionsecurity_settings_update - Individual tool:
gitlab_update_project_secret_push_protection - Tier: Ultimate
- Behavior: writes, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
project_id | string/integer | yes | Project ID or URL-encoded path |
secret_push_protection_enabled | boolean | yes | Enable or disable secret push protection |
project.service_account_create
Section titled “project.service_account_create”Create a GitLab project service account. Returns: the created project service account object. See also:
project.service_account_list,project.service_account_update,project.service_account_pat_create.
- Meta-tool:
gitlab_project, actionservice_account_create - Individual tool:
gitlab_project_service_account_create - Tier: Free
- Behavior: writes, not idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
project_id | string/integer | yes | Project ID or URL-encoded path |
email | string | no | Service account email |
name | string | no | Service account name |
username | string | no | Service account username |
project.service_account_delete
Section titled “project.service_account_delete”Delete a GitLab project service account. Returns: a success status confirming deletion. See also:
project.service_account_list,project.service_account_update.
- Meta-tool:
gitlab_project, actionservice_account_delete - Individual tool:
gitlab_project_service_account_delete - Tier: Free
- Behavior: writes, destructive (needs confirmation), idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
project_id | string/integer | yes | Project ID or URL-encoded path |
service_account_id | integer | yes | Service account user ID |
hard_delete | boolean | no | Hard delete the service account |
project.service_account_get
Section titled “project.service_account_get”Get one GitLab project service account by its user ID (GitLab 19.4 or later). Returns: the project service account object. See also:
project.service_account_list,project.service_account_update,project.service_account_pat_list.
- Meta-tool:
gitlab_project, actionservice_account_get - Individual tool:
gitlab_project_service_account_get - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
project_id | string/integer | yes | Project ID or URL-encoded path |
service_account_id | integer | yes | Service account user ID |
project.service_account_list
Section titled “project.service_account_list”List GitLab project service accounts. Returns: paginated project service account records. See also:
project.get,project.service_account_create,project.service_account_pat_list.
- Meta-tool:
gitlab_project, actionservice_account_list - Individual tool:
gitlab_project_service_account_list - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
project_id | string/integer | yes | Project ID or URL-encoded path |
order_by | string | no | Order by id or username |
page | integer | no | Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward. |
page_token | string | no | Keyset pagination cursor: record id at which to fetch the next page, taken from the previous keyset response. Only used when pagination=‘keyset’. |
pagination | string | no | Pagination method: ‘keyset’ for keyset-based pagination on large ordered result sets, or ‘offset’ (the default). Keyset avoids deep-offset cost. |
per_page | integer | no | Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large. |
sort | string (asc, desc) | no | Sort direction: asc or desc |
project.service_account_pat_create
Section titled “project.service_account_pat_create”Create a personal access token for a GitLab project service account. Returns: the created token record and token value when GitLab returns it. See also:
project.service_account_pat_list,project.service_account_pat_rotate.
- Meta-tool:
gitlab_project, actionservice_account_pat_create - Individual tool:
gitlab_project_service_account_pat_create - Tier: Free
- Behavior: writes, not idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
name | string | yes | Token name |
project_id | string/integer | yes | Project ID or URL-encoded path |
scopes | string[] | yes | Token scopes (e.g. api, read_api, read_user) |
service_account_id | integer | yes | Service account user ID |
description | string | no | Token description |
expires_at | string | no | Expiration date in YYYY-MM-DD format |
project.service_account_pat_list
Section titled “project.service_account_pat_list”List personal access tokens for a GitLab project service account. Returns: paginated token records. See also:
project.service_account_list,project.service_account_pat_create,project.service_account_pat_revoke.
- Meta-tool:
gitlab_project, actionservice_account_pat_list - Individual tool:
gitlab_project_service_account_pat_list - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
project_id | string/integer | yes | Project ID or URL-encoded path |
service_account_id | integer | yes | Service account user ID |
created_after | string | no | Filter tokens created after RFC3339 datetime or YYYY-MM-DD date |
created_before | string | no | Filter tokens created before RFC3339 datetime or YYYY-MM-DD date |
expires_after | string | no | Filter tokens expiring after YYYY-MM-DD date |
expires_before | string | no | Filter tokens expiring before YYYY-MM-DD date |
last_used_after | string | no | Filter tokens last used after RFC3339 datetime or YYYY-MM-DD date |
last_used_before | string | no | Filter tokens last used before RFC3339 datetime or YYYY-MM-DD date |
order_by | string | no | Order tokens by column (keyset pagination) |
page | integer | no | Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward. |
page_token | string | no | Keyset pagination cursor: record id at which to fetch the next page, taken from the previous keyset response. Only used when pagination=‘keyset’. |
pagination | string | no | Pagination method: ‘keyset’ for keyset-based pagination on large ordered result sets, or ‘offset’ (the default). Keyset avoids deep-offset cost. |
per_page | integer | no | Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large. |
revoked | boolean | no | Filter by revoked state |
search | string | no | Search token names |
sort | string (asc, desc) | no | Sort expression |
state | string (active, inactive) | no | Token state filter: active or inactive |
user_id | integer | no | Filter by user ID |
project.service_account_pat_revoke
Section titled “project.service_account_pat_revoke”Revoke a personal access token for a GitLab project service account. Returns: a success status confirming revocation. See also:
project.service_account_pat_list,project.service_account_pat_create.
- Meta-tool:
gitlab_project, actionservice_account_pat_revoke - Individual tool:
gitlab_project_service_account_pat_revoke - Tier: Free
- Behavior: writes, destructive (needs confirmation), idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
project_id | string/integer | yes | Project ID or URL-encoded path |
service_account_id | integer | yes | Service account user ID |
token_id | integer | yes | Personal access token ID to revoke |
project.service_account_pat_rotate
Section titled “project.service_account_pat_rotate”Rotate a personal access token for a GitLab project service account. Returns: the rotated token record and token value when GitLab returns it. See also:
project.service_account_pat_list,project.service_account_pat_revoke.
- Meta-tool:
gitlab_project, actionservice_account_pat_rotate - Individual tool:
gitlab_project_service_account_pat_rotate - Tier: Free
- Behavior: writes, not idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
project_id | string/integer | yes | Project ID or URL-encoded path |
service_account_id | integer | yes | Service account user ID |
token_id | integer | yes | Personal access token ID to rotate |
expires_at | string | no | New expiration date in YYYY-MM-DD format |
project.service_account_update
Section titled “project.service_account_update”Update a GitLab project service account. Returns: the updated project service account object. See also:
project.service_account_list,project.service_account_delete.
- Meta-tool:
gitlab_project, actionservice_account_update - Individual tool:
gitlab_project_service_account_update - Tier: Free
- Behavior: writes, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
project_id | string/integer | yes | Project ID or URL-encoded path |
service_account_id | integer | yes | Service account user ID |
email | string | no | New email |
name | string | no | New name |
username | string | no | New username |
project.share_with_group
Section titled “project.share_with_group”Share a project with a group. Returns: a confirmation with the group ID and granted access role. See also:
project.delete_shared_group,project.list_invited_groups.
- Meta-tool:
gitlab_project, actionshare_with_group - Individual tool:
gitlab_project_share_with_group - Tier: Free
- Behavior: writes, not idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
group_access | integer | yes | Access level for the group (5=Minimal access 10=Guest 15=Planner (Premium/Ultimate) 20=Reporter 25=Security Manager (Premium/Ultimate) 30=Developer 40=Maintainer 50=Owner) |
group_id | integer | yes | Group ID to share with |
project_id | string/integer | yes | Project ID or URL-encoded path |
expires_at | string | no | Expiration date for the share (YYYY-MM-DD) |
project.star
Section titled “project.star”Star a project. Returns: the project with the updated star_count. See also:
project.unstar,project.list_starrers.
- Meta-tool:
gitlab_project, actionstar - Individual tool:
gitlab_project_star - Tier: Free
- Behavior: writes, not idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
project_id | string/integer | yes | Project ID or URL-encoded path |
project.start_housekeeping
Section titled “project.start_housekeeping”Start housekeeping for a project. Returns: a success confirmation naming the project. See also:
project.repository_storage_get,project.get.
- Meta-tool:
gitlab_project, actionstart_housekeeping - Individual tool:
gitlab_project_start_housekeeping - Tier: Free
- Behavior: writes, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
project_id | string/integer | yes | Project ID or URL-encoded path |
project.start_mirroring
Section titled “project.start_mirroring”Trigger a pull-mirror sync. Returns: a success confirmation naming the project. See also:
project.pull_mirror_get,project.pull_mirror_configure.
- Meta-tool:
gitlab_project, actionstart_mirroring - Individual tool:
gitlab_project_start_mirroring - Tier: Premium
- Behavior: writes, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
project_id | string/integer | yes | Project ID or URL-encoded path |
project.statistics_get
Section titled “project.statistics_get”Get a project’s last-30-days git fetch (clone/pull) statistics. Returns: total_fetches and a per-day breakdown of date and count. See also:
project.get.
- Meta-tool:
gitlab_project, actionstatistics_get - Individual tool:
gitlab_get_project_statistics - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
project_id | string/integer | yes | Project ID or URL-encoded path |
project.target_branch_rule_create
Section titled “project.target_branch_rule_create”Create a target branch rule. Returns: the created rule with id, source-branch name pattern, target_branch, and created_at. See also:
project.target_branch_rule_list,project.target_branch_rule_delete.
- Meta-tool:
gitlab_project, actiontarget_branch_rule_create - Individual tool:
gitlab_project_create_target_branch_rule - Tier: Premium
- Behavior: writes, not idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
name | string | yes | Source branch name or wildcard pattern that triggers the rule (e.g. release/*) |
project_id | string/integer | yes | Numeric project ID that owns the rule. The create mutation requires a numeric ID |
target_branch | string | yes | Default target branch merge requests opened from matching source branches will target |
project.target_branch_rule_delete
Section titled “project.target_branch_rule_delete”Delete a target branch rule. Returns: a success confirmation naming the rule. See also:
project.target_branch_rule_list,project.target_branch_rule_create.
- Meta-tool:
gitlab_project, actiontarget_branch_rule_delete - Individual tool:
gitlab_project_delete_target_branch_rule - Tier: Premium
- Behavior: writes, destructive (needs confirmation), idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
rule_id | integer | yes | Target branch rule ID to delete (from the list action) |
project.target_branch_rule_list
Section titled “project.target_branch_rule_list”List a project’s target branch rules. Returns: each rule with id, source-branch name pattern, target_branch, and created_at. See also:
project.target_branch_rule_create,project.target_branch_rule_delete.
- Meta-tool:
gitlab_project, actiontarget_branch_rule_list - Individual tool:
gitlab_project_list_target_branch_rules - Tier: Premium
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
project_id | string/integer | yes | Full project path such as my-group/my-project. The target branch rules GraphQL query requires the full path and does not accept a numeric ID |
project.transfer
Section titled “project.transfer”Transfer a project to another namespace, waiting up to 45 seconds for GitLab to apply the move. Returns: the project in its new namespace, or with transfer_queued set and its current namespace when GitLab has not applied the move yet, or an error when GitLab reports the move failed. See also:
project.get,group.get.
- Meta-tool:
gitlab_project, actiontransfer - Individual tool:
gitlab_project_transfer - Tier: Free
- Behavior: writes, destructive (needs confirmation), idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
namespace | string | yes | Target namespace ID or path |
project_id | string/integer | yes | Project ID or URL-encoded path |
project.unarchive
Section titled “project.unarchive”Unarchive a project. Returns: the project with archived set to false. See also:
project.archive,project.get.
- Meta-tool:
gitlab_project, actionunarchive - Individual tool:
gitlab_project_unarchive - Tier: Free
- Behavior: writes, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
project_id | string/integer | yes | Project ID or URL-encoded path |
project.unstar
Section titled “project.unstar”Unstar a project. Returns: the project with the updated star_count. See also:
project.star,project.list_starrers.
- Meta-tool:
gitlab_project, actionunstar - Individual tool:
gitlab_project_unstar - Tier: Free
- Behavior: writes, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
project_id | string/integer | yes | Project ID or URL-encoded path |
project.update
Section titled “project.update”Update a project’s settings. Returns: the updated project with its current configuration and web URL. See also:
project.get,project.archive,project.transfer.
- Meta-tool:
gitlab_project, actionupdate - Individual tool:
gitlab_project_update - Tier: Free
- Behavior: writes, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
project_id | string/integer | yes | Project ID or URL-encoded path |
allow_merge_on_skipped_pipeline | boolean | no | Allow merge when pipeline is skipped |
allow_pipeline_trigger_approve_deployment | boolean | no | Allow pipeline triggerer to approve deployment |
analytics_access_level | string | no | Analytics access level (disabled, private, enabled) |
approvals_before_merge (Premium) | integer | no | Number of approvals required before merge |
auto_cancel_pending_pipelines | string (enabled, disabled) | no | Auto-cancel redundant pending pipelines when a newer pipeline starts: enabled or disabled. |
auto_devops_deploy_strategy | string (continuous, manual, timed_incremental) | no | Auto DevOps deploy strategy: continuous (auto-deploy to production), manual (require manual gate), or timed_incremental (deploy incrementally with time delays). |
auto_devops_enabled | boolean | no | Enable Auto DevOps for the project |
auto_duo_code_review_enabled | boolean | no | Enable automatic GitLab Duo code review |
autoclose_referenced_issues | boolean | no | Auto-close referenced issues on merge |
automatic_rebase_enabled | boolean | no | Rebase the source branch automatically before merge |
build_git_strategy | string (fetch, clone) | no | Git strategy for CI builds: fetch (reuse existing clone, faster) or clone (fresh clone every time). |
build_timeout | integer | no | Build timeout in seconds |
builds_access_level | string | no | CI/CD builds access level (disabled, private, enabled) |
ci_config_path | string | no | Custom CI/CD configuration file path |
ci_default_git_depth | integer | no | Default Git clone depth for CI/CD |
ci_delete_pipelines_in_seconds | integer | no | Auto-delete pipelines older than this many seconds |
ci_display_pipeline_variables | boolean | no | Display pipeline variables in the UI |
ci_forward_deployment_enabled | boolean | no | Enable CI/CD forward deployment (skip outdated jobs) |
ci_forward_deployment_rollback_allowed | boolean | no | Allow job retries even for outdated deployment jobs |
ci_id_token_sub_claim_components | string[] | no | Components used to build the CI ID token sub claim |
ci_pipeline_variables_minimum_override_role | string (owner, maintainer, developer, no_one_allowed) | no | Minimum role allowed to override pipeline variables (developer, maintainer, owner, no_one_allowed) |
ci_push_repository_for_job_token_allowed | boolean | no | Allow CI job tokens to push to the repository |
ci_restrict_pipeline_cancellation_role | string (developer, maintainer, no_one) | no | Role required to cancel pipelines/jobs (developer, maintainer, no_one) |
ci_separated_caches | boolean | no | Use separate caches for protected branches |
cicd_catalog_enabled | boolean | no | Publish the project as a CI/CD catalog resource |
container_expiration_policy_attributes | object | no | Container registry cleanup policy attributes |
container_registry_access_level | string | no | Container registry access level (disabled, private, enabled) |
container_registry_enabled | boolean | no | Enable container registry (deprecated: use container_registry_access_level) |
default_branch | string | no | New default branch |
description | string | no | New description |
emails_disabled | boolean | no | Disable email notifications (deprecated: use emails_enabled) |
emails_enabled | boolean | no | Enable email notifications |
enforce_auth_checks_on_uploads | boolean | no | Enforce authorization checks on uploads |
environments_access_level | string | no | Environments access level (disabled, private, enabled) |
external_authorization_classification_label | string | no | External authorization classification label |
feature_flags_access_level | string | no | Feature flags access level (disabled, private, enabled) |
forking_access_level | string | no | Forking access level (disabled, private, enabled) |
group_runners_enabled | boolean | no | Enable group runners |
import_url | string | no | URL to import/mirror repository from |
infrastructure_access_level | string | no | Infrastructure access level (disabled, private, enabled) |
issue_branch_template | string | no | Template for branch names created from issues |
issues_access_level | string | no | Issues access level (disabled, private, enabled) |
issues_enabled | boolean | no | Enable/disable issues feature (use ‘issues_enabled’ not ‘issues_access_level’) |
issues_template | string | no | Default issue description template |
jobs_enabled | boolean | no | Enable CI/CD jobs |
keep_latest_artifact | boolean | no | Keep the latest artifact for each pipeline |
lfs_enabled | boolean | no | Enable Git LFS |
max_artifacts_size | integer | no | Maximum artifacts size in MB |
merge_commit_template | string | no | Template for merge commit messages |
merge_method | string (merge, rebase_merge, ff) | no | Merge method: merge (default merge commit), rebase_merge (rebase then merge commit), or ff (fast-forward, no merge commit). |
merge_pipelines_enabled | boolean | no | Enable merged results pipelines |
merge_request_title_regex | string | no | Regex that MR titles must match |
merge_request_title_regex_description | string | no | Human-readable description for the MR title regex |
merge_requests_access_level | string | no | Merge requests access level (disabled, private, enabled) |
merge_requests_enabled | boolean | no | Enable merge requests feature |
merge_requests_template | string | no | Default merge request description template |
merge_trains_enabled | boolean | no | Enable merge trains |
merge_trains_skip_train_allowed | boolean | no | Allow skipping the merge train |
mirror | boolean | no | Enable pull mirroring from import_url |
mirror_branch_regex | string | no | Only mirror branches matching this regex |
mirror_overwrites_diverged_branches | boolean | no | Overwrite diverged branches when mirroring |
mirror_trigger_builds | boolean | no | Trigger pipelines for mirror updates |
mirror_user_id | integer | no | User ID used to run mirror updates (admin only) |
model_experiments_access_level | string | no | Model experiments access level (disabled, private, enabled) |
model_registry_access_level | string | no | Model registry access level (disabled, private, enabled) |
monitor_access_level | string | no | Monitor access level (disabled, private, enabled) |
mr_default_target_self | boolean | no | Default merge request target to the project itself (for forks) |
mr_default_title_template | string | no | Template for default merge request titles |
name | string | no | New project name |
only_allow_merge_if_all_discussions_are_resolved | boolean | no | Only allow merge when all discussions are resolved |
only_allow_merge_if_all_status_checks_passed (Ultimate) | boolean | no | Only allow merge when all external status checks pass |
only_allow_merge_if_pipeline_succeeds | boolean | no | Only allow merge when pipeline succeeds |
only_mirror_protected_branches | boolean | no | Only mirror protected branches |
package_registry_access_level | string | no | Package registry access level (disabled, private, enabled) |
packages_enabled | boolean | no | Enable packages feature (deprecated: use package_registry_access_level) |
pages_access_level | string | no | Pages access level (disabled, private, enabled, public) |
path | string | no | New project path slug |
prevent_merge_without_jira_issue | boolean | no | Require an associated Jira issue before merge |
printing_merge_request_link_enabled | boolean | no | Show the create-merge-request link after pushing |
protect_merge_request_pipelines | boolean | no | Prevent merge request pipeline settings from being modified by users with lower permissions |
public_builds | boolean | no | Enable public access to pipelines |
public_jobs | boolean | no | Enable public access to pipelines |
releases_access_level | string | no | Releases access level (disabled, private, enabled) |
remove_source_branch_after_merge | boolean | no | Remove source branch after merge by default |
repository_access_level | string | no | Repository access level (disabled, private, enabled) |
repository_storage | string | no | Repository storage shard name (admin only) |
request_access_enabled | boolean | no | Allow users to request access |
requirements_access_level | string | no | Requirements access level (disabled, private, enabled) |
resolve_outdated_diff_discussions | boolean | no | Auto-resolve outdated diff discussions |
resource_group_default_process_mode | string (unordered, oldest_first, newest_first, newest_ready_first) | no | Default process mode for resource groups: unordered (run in parallel), oldest_first, newest_first, or newest_ready_first. |
restrict_user_defined_variables | boolean | no | Restrict user-defined pipeline variables (deprecated: use ci_pipeline_variables_minimum_override_role) |
reviewer_assignment_strategy (Premium) | string (disabled, code_owners) | no | Strategy used to automatically assign reviewers to merge requests: disabled or code_owners. The former dap_powered value was removed in GitLab 19.4 and only appears in responses of projects configured before then |
security_and_compliance_access_level | string | no | Security and compliance access level (disabled, private, enabled) |
service_desk_enabled | boolean | no | Enable Service Desk |
shared_runners_enabled | boolean | no | Enable shared runners |
show_default_award_emojis | boolean | no | Show default award emojis on issues/MRs |
snippets_access_level | string | no | Snippets access level (disabled, private, enabled) |
snippets_enabled | boolean | no | Enable snippets feature (deprecated: use snippets_access_level) |
squash_commit_template | string | no | Template for squash commit messages |
squash_option | string (never, always, default_on, default_off) | no | Squash commits on merge: never (not allowed), always (always squash), default_on (squash by default, overridable per MR), or default_off (no squash by default, overridable per MR). |
suggestion_commit_message | string | no | Default commit message for suggestions |
tag_list | string[] | no | Project tags (deprecated: use topics) |
topics | string[] | no | Topic tags for the project |
visibility | string (private, internal, public) | no | Visibility level (private, internal, public) |
wiki_access_level | string | no | Wiki access level (disabled, private, enabled) |
wiki_enabled | boolean | no | Enable wiki feature |
project.upload
Section titled “project.upload”Upload a file (via local file_path or base64 content) to a project’s Markdown attachments store. Returns: the upload’s id (GitLab 17.3+), alt text, relative and full URLs, full path, and a Markdown embed reference. See also:
project.upload_list,project.upload_delete,project.get.
- Meta-tool:
gitlab_project, actionupload - Individual tool:
gitlab_project_upload - Tier: Free
- Behavior: writes, not idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
filename | string | yes | Name of the file to upload (e.g. screenshot.png) |
project_id | string/integer | yes | Project ID or URL-encoded path |
content_base64 | string | no | Base64-encoded file content. Only one of file_path or content_base64 should be provided. |
file_path | string | no | Absolute path to a local file on the MCP server filesystem. Alternative to content_base64 for files too large to base64-encode. Only one of file_path or content_base64 should be provided. |
project.upload_avatar
Section titled “project.upload_avatar”Upload a project avatar. Returns: the project with its new avatar_url. See also:
project.download_avatar,project.update.
- Meta-tool:
gitlab_project, actionupload_avatar - Individual tool:
gitlab_project_upload_avatar - Tier: Free
- Behavior: writes, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
filename | string | yes | Avatar filename (e.g. avatar.png) |
project_id | string/integer | yes | Project ID or URL-encoded path |
content_base64 | string | no | Base64-encoded image content. Only one of file_path or content_base64 should be provided. |
file_path | string | no | Absolute path to a local image file on the MCP server filesystem. Alternative to content_base64 for files too large to base64-encode. Only one of file_path or content_base64 should be provided. |
project.upload_delete
Section titled “project.upload_delete”Delete a project Markdown upload by its numeric upload ID. Returns: a success confirmation. See also:
project.upload_list,project.upload_delete_by_secret,project.get.
- Meta-tool:
gitlab_project, actionupload_delete - Individual tool:
gitlab_project_upload_delete - Tier: Free
- Behavior: writes, destructive (needs confirmation), idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
project_id | string/integer | yes | Project ID or URL-encoded path |
upload_id | integer | yes | ID of the upload to delete |
project.upload_delete_by_secret
Section titled “project.upload_delete_by_secret”Delete a project Markdown upload by its 32-character secret and filename (the /uploads/<secret>/<filename> reference). Returns: a success confirmation. See also:
project.upload_delete,project.upload_list,project.upload.
- Meta-tool:
gitlab_project, actionupload_delete_by_secret - Individual tool:
gitlab_project_upload_delete_by_secret - Tier: Free
- Behavior: writes, destructive (needs confirmation), idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
filename | string | yes | Filename of the upload as it appears in the upload URL |
project_id | string/integer | yes | Project ID or URL-encoded path |
secret | string | yes | 32-character upload secret from the upload URL (/uploads/<secret>/<filename>) |
project.upload_list
Section titled “project.upload_list”List all Markdown uploads in a project. Returns: each upload’s id, filename, size, creation time, and uploader (id, username, name), plus pagination metadata. See also:
project.upload,project.upload_delete,project.get.
- Meta-tool:
gitlab_project, actionupload_list - Individual tool:
gitlab_project_upload_list - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
project_id | string/integer | yes | Project ID or URL-encoded path |
order_by | string | no | For keyset pagination, the column to order results by |
page | integer | no | Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward. |
page_token | string | no | Keyset pagination cursor: record id at which to fetch the next page, taken from the previous keyset response. Only used when pagination=‘keyset’. |
pagination | string | no | Pagination method: ‘keyset’ for keyset-based pagination on large ordered result sets, or ‘offset’ (the default). Keyset avoids deep-offset cost. |
per_page | integer | no | Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large. |
sort | string (asc, desc) | no | Sort order for keyset pagination: ‘asc’ or ‘desc’ |