# gitlab-mcp-server — Full Reference

> Version 2.0.3 | up to 1023 tools | 33 base meta-tools; 49 self-managed enterprise meta-tools; 50 GitLab.com Enterprise meta-tools | 2 dynamic tools | 46 resources | 37 prompts

## Dynamic Toolset

Dynamic mode is the default when `TOOL_SURFACE` is unset or set to `dynamic`. It exposes `gitlab_find_action` and `gitlab_execute_tool` over the same canonical action catalog used by the meta-tool catalog. Models should find candidate actions with exact input schemas and safety metadata, then execute the canonical `domain.action` ID. Set `TOOL_SURFACE=meta` to use consolidated domain meta-tools instead.

### gitlab_find_action

**GitLab Find Action**

Search the local GitLab action catalog; read-only and no GitLab API call. Use when the action ID or params are unclear; returns schemas, hints, destructive flags, and execute examples.

**Parameters:**

- `explain` (boolean): When true, include deterministic scoring reasons for each returned action. Defaults to false to keep responses compact.
- `limit` (integer): Maximum number of matches to return. Defaults to 20 and is capped at 50.
- `query` (string) (required): Search terms combining a GitLab domain or resource with a verb, filter, or object name, such as project create, merge request approve, pipeline retry, issue delete, or ci variable.

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

### gitlab_execute_tool

**GitLab Execute Tool**

Execute one GitLab catalog action by canonical ID or alias. Always pass params as an object; destructive actions require top-level confirm=true. Use find first only when action or params are unclear.

**Parameters:**

- `action` (string) (required): Canonical action ID returned by gitlab_find_action, or a supported compatibility alias, such as project.list, issue.update, or issue.close.
- `confirm` (boolean): Set top-level confirm=true to explicitly approve destructive actions; do not put confirm inside params for gitlab_execute_tool.
- `params` (object) (required): Required action-specific parameters object validated by the selected action schema. Use an empty object for actions with no parameters.

Annotations: readOnly=false, destructive=true, idempotent=false, openWorld=true

## Meta-Tools

Meta-tools are enabled with `TOOL_SURFACE=meta`. Each groups related
operations under a single tool with an `action` parameter.

### gitlab_access

**Access**

Use {"action":"approve_group","params":{...}}; only top-level keys are action and params.
Action params schema: gitlab://tools/gitlab_access.<action>.
Action guidance:
- deploy_key_add: Use for SSH deploy keys that grant repository access to projects.
- deploy_key_add_instance: Use for SSH deploy keys that grant repository access to projects.
- deploy_key_delete: Use deploy_key_id returned by deploy key list/add/get operations. Do not use deploy_token_id; deploy tokens are a different resource.
- deploy_key_enable: Use deploy_key_id returned by deploy key list/add/get operations. Do not use deploy_token_id; deploy tokens are a different resource.
- deploy_key_get: Use deploy_key_id returned by deploy key list/add/get operations. Do not use deploy_token_id; deploy tokens are a different resource.
- deploy_key_list_all: Use for SSH deploy keys that grant repository access to projects.
- deploy_key_list_project: Lists SSH deploy keys, not deploy tokens; use access.deploy_token_list_project when credentials/tokens are requested.
- deploy_key_list_user_project: Use for SSH deploy keys that grant repository access to projects.
- deploy_key_update: Use deploy_key_id returned by deploy key list/add/get operations. Do not use deploy_token_id; deploy tokens are a different resource.
- deploy_token_delete_project: Use to delete a deploy token owned by a project; pass the deploy token ID, not another token type.
- token_group_create: Use for GitLab group access tokens; this action creates a group-scoped API token.
- token_group_get: Use for GitLab group access tokens; this action gets a group-scoped API token.
- token_group_list: Use for GitLab group access tokens; this action lists group-scoped API tokens.
- token_group_revoke: Use for GitLab group access tokens; this action revokes a group-scoped API token.
- token_group_rotate: Use for GitLab group access tokens; this action rotates a group-scoped API token.
- token_group_rotate_self: Use for GitLab group access tokens; this action rotates a group-scoped API token.
- token_personal_get: Use for GitLab personal access tokens; this action gets a personal-scoped API token.
- token_personal_list: Use for GitLab personal access tokens; this action lists personal-scoped API tokens.
- token_personal_revoke: Use for GitLab personal access tokens; this action revokes a personal-scoped API token.
- token_personal_revoke_self: Use for GitLab personal access tokens; this action revokes a personal-scoped API token.
- token_personal_rotate: Use for GitLab personal access tokens; this action rotates a personal-scoped API token.
- token_personal_rotate_self: Use for GitLab personal access tokens; this action rotates a personal-scoped API token.
- token_project_create: Use for GitLab project access tokens; this action creates a project-scoped API token.
- token_project_get: Use for GitLab project access tokens; this action gets a project-scoped API token.
- token_project_list: Use for GitLab project access tokens; this action lists project-scoped API tokens.
- token_project_revoke: Use for GitLab project access tokens; this action revokes a project-scoped API token.
- token_project_rotate: Use for GitLab project access tokens; this action rotates a project-scoped API token.
- token_project_rotate_self: Use for GitLab project access tokens; this action rotates a project-scoped API token.
Parameter guidance:
- deploy_key_delete.deploy_key_id: deploy_key; source: Deploy key ID returned by deploy_key_add, deploy_key_get, deploy_key_list_project, or deploy_key_list_all.; avoid: Do not send deploy_token_id; deploy keys and deploy tokens are separate access resources., Do not use token_id for deploy key get/update/delete operations.
- deploy_key_enable.deploy_key_id: deploy_key; source: Deploy key ID returned by deploy_key_add, deploy_key_get, deploy_key_list_project, or deploy_key_list_all.; avoid: Do not send deploy_token_id; deploy keys and deploy tokens are separate access resources., Do not use token_id for deploy key get/update/delete operations.
- deploy_key_get.deploy_key_id: deploy_key; source: Deploy key ID returned by deploy_key_add, deploy_key_get, deploy_key_list_project, or deploy_key_list_all.; avoid: Do not send deploy_token_id; deploy keys and deploy tokens are separate access resources., Do not use token_id for deploy key get/update/delete operations.
- deploy_key_update.deploy_key_id: deploy_key; source: Deploy key ID returned by deploy_key_add, deploy_key_get, deploy_key_list_project, or deploy_key_list_all.; avoid: Do not send deploy_token_id; deploy keys and deploy tokens are separate access resources., Do not use token_id for deploy key get/update/delete operations.
- deploy_token_delete_project.deploy_token_id: deploy_token; source: Deploy token ID, not a project, deploy key, personal token, or runner ID.; avoid: Do not use deploy_key_id or token_id for project deploy token deletion.
- deploy_token_delete_project.project_id: scope_owner_project; source: Project that owns the deploy token.
- token_group_get.token_id: access_token; source: Access token ID returned by token_group_list or token_group_get.; avoid: Do not use project_id, group_id, or user_id as token_id; token_id identifies the access token itself.
- token_group_revoke.token_id: access_token; source: Access token ID returned by token_group_list or token_group_get.; avoid: Do not use project_id, group_id, or user_id as token_id; token_id identifies the access token itself.
- token_group_rotate.token_id: access_token; source: Access token ID returned by token_group_list or token_group_get.; avoid: Do not use project_id, group_id, or user_id as token_id; token_id identifies the access token itself.
- token_personal_get.token_id: access_token; source: Access token ID returned by token_personal_list or token_personal_get.; avoid: Do not use project_id, group_id, or user_id as token_id; token_id identifies the access token itself.
- token_personal_revoke.token_id: access_token; source: Access token ID returned by token_personal_list or token_personal_get.; avoid: Do not use project_id, group_id, or user_id as token_id; token_id identifies the access token itself.
- token_personal_rotate.token_id: access_token; source: Access token ID returned by token_personal_list or token_personal_get.; avoid: Do not use project_id, group_id, or user_id as token_id; token_id identifies the access token itself.
- token_project_get.token_id: access_token; source: Access token ID returned by token_project_list or token_project_get.; avoid: Do not use project_id, group_id, or user_id as token_id; token_id identifies the access token itself.
- token_project_revoke.token_id: access_token; source: Access token ID returned by token_project_list or token_project_get.; avoid: Do not use project_id, group_id, or user_id as token_id; token_id identifies the access token itself.
- token_project_rotate.token_id: access_token; source: Access token ID returned by token_project_list or token_project_get.; avoid: Do not use project_id, group_id, or user_id as token_id; token_id identifies the access token itself.

Manage GitLab access credentials: access tokens (project/group/personal), deploy tokens, deploy keys, access requests, and invitations. Revoke/delete actions are destructive and irreversible.
When to use: provision and audit who/what can access a project or group; rotate (not revoke+create) to roll a token without invalidating CI configurations.
NOT for: SSH/GPG keys or impersonation tokens (use gitlab_user), PAT creation (use gitlab_user create_personal_access_token / create_current_user_pat — gitlab_access exposes token_personal_* for list/get/rotate/revoke only), instance admin operations (use gitlab_admin), project membership/permissions (use gitlab_project member_*), 2FA/MFA flows.

Returns:
- token_*_list / deploy_token_list_* / deploy_key_list_* / request_list_* / invite_list_*: arrays with pagination.
- token_*_get / token_*_create / token_*_rotate / deploy_token_get_* / deploy_token_create_* / deploy_key_get / deploy_key_add / deploy_key_update / deploy_key_enable / approve_* / request_*: token / key / request / invitation object. Create / rotate include the cleartext token only ONCE — store it securely; subsequent reads return only the metadata.
- token_*_revoke / deploy_token_delete_* / deploy_key_delete / deny_* : {success, message}.
Errors: 401/403 (hint: requires Maintainer+ to manage project tokens, Owner for group, admin for instance / deploy_token_list_all / deploy_key_list_all / deploy_key_add_instance), 404 (hint: token_id and deploy_key_id are scoped to the project/group), 400 (hint: scopes must be a subset of {api, read_api, read_repository, write_repository, read_registry, write_registry}; expires_at must be a future ISO date).

Param conventions: * = required. List actions accept page, per_page. Project/group token actions use project_id* or group_id*; personal token actions use user_id where documented, and self actions take no scope ID. Deploy token/key delete and token revoke are irreversible.

Access tokens (token_*) — project, group, and personal scopes. Rotate generates a new token and invalidates the old one:
- token_project_list / token_group_list: project_id* or group_id*
- token_project_get / token_group_get: project_id* or group_id*, token_id*
- token_project_create / token_group_create: project_id* or group_id*, name*, scopes*, expires_at, access_level
- token_project_rotate / token_group_rotate: project_id* or group_id*, token_id*, expires_at
- token_project_rotate_self / token_group_rotate_self: project_id* or group_id*, expires_at
- token_project_revoke / token_group_revoke: project_id* or group_id*, token_id*
- token_personal_list: user_id
- token_personal_get: token_id*
- token_personal_rotate: token_id*, expires_at
- token_personal_rotate_self: expires_at
- token_personal_revoke: token_id*
- token_personal_revoke_self: (no params)

Deploy tokens (deploy_token_*) — scoped to project or group, used for CI/CD registry access:
- deploy_token_list_all: (admin only)
- deploy_token_list_project / deploy_token_list_group: project_id* or group_id*
- deploy_token_get_project / deploy_token_get_group: project_id* or group_id*, deploy_token_id*
- deploy_token_create_project / deploy_token_create_group: project_id* or group_id*, name*, scopes*, expires_at
- deploy_token_delete_project / deploy_token_delete_group: project_id* or group_id*, deploy_token_id*

Deploy keys (deploy_key_*) — SSH keys for read/write repo access without a user account. For deploy-key wording, add/create maps to deploy_key_add, fetch/get maps to deploy_key_get, update maps to deploy_key_update, and delete/remove maps to deploy_key_delete.
- deploy_key_list_project / deploy_key_list_user_project: project_id*
- deploy_key_list_all: (admin only)
- deploy_key_get: project_id*, deploy_key_id*. If a workflow says add/create, then fetch/get, then update/delete, call deploy_key_get with the id returned by deploy_key_add before updating.
- deploy_key_add: project_id*, title*, key*, can_push
- deploy_key_update: project_id*, deploy_key_id*, title, can_push
- deploy_key_delete: project_id*, deploy_key_id*
- deploy_key_enable: project_id*, deploy_key_id*
- deploy_key_add_instance: title*, key*

Access requests (request_*, approve_*, deny_*):
- request_list_project / request_list_group: project_id* or group_id*
- request_project / request_group: project_id* or group_id*
- approve_project / approve_group: project_id* or group_id*, user_id*, access_level
- deny_project / deny_group: project_id* or group_id*, user_id*

Invitations (invite_*):
- invite_list_project / invite_list_group: project_id* or group_id*
- invite_project / invite_group: project_id* or group_id*, email*, access_level*, expires_at

See also: gitlab_user (SSH/GPG keys, user PATs), gitlab_admin (instance admin), gitlab_project (project settings)

Annotations: readOnly=false, destructive=true, idempotent=false, openWorld=true

**Action Output Schemas:**

<details><summary>approve_group</summary>

```json
{"additionalProperties":false,"properties":{"access_level":{"type":"integer"},"created_at":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"requested_at":{"type":"string"},"state":{"type":"string"},"username":{"type":"string"}},"required":["id","username","name","state","access_level"],"type":"object"}
```

</details>

<details><summary>approve_project</summary>

```json
{"additionalProperties":false,"properties":{"access_level":{"type":"integer"},"created_at":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"requested_at":{"type":"string"},"state":{"type":"string"},"username":{"type":"string"}},"required":["id","username","name","state","access_level"],"type":"object"}
```

</details>

<details><summary>deny_group</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>deny_project</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>deploy_key_add</summary>

```json
{"additionalProperties":false,"properties":{"can_push":{"type":"boolean"},"created_at":{"type":"string"},"expires_at":{"type":"string"},"fingerprint":{"type":"string"},"fingerprint_sha256":{"type":"string"},"id":{"type":"integer"},"key":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"title":{"type":"string"}},"required":["id","title","key","can_push"],"type":"object"}
```

</details>

<details><summary>deploy_key_add_instance</summary>

```json
{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"expires_at":{"type":"string"},"fingerprint":{"type":"string"},"fingerprint_sha256":{"type":"string"},"id":{"type":"integer"},"key":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"projects_with_readonly_access":{"items":{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"path_with_namespace":{"type":"string"}},"required":["id","name","path_with_namespace"],"type":"object"},"type":["null","array"]},"projects_with_write_access":{"items":{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"path_with_namespace":{"type":"string"}},"required":["id","name","path_with_namespace"],"type":"object"},"type":["null","array"]},"title":{"type":"string"}},"required":["id","title","key"],"type":"object"}
```

</details>

<details><summary>deploy_key_delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>deploy_key_enable</summary>

```json
{"additionalProperties":false,"properties":{"can_push":{"type":"boolean"},"created_at":{"type":"string"},"expires_at":{"type":"string"},"fingerprint":{"type":"string"},"fingerprint_sha256":{"type":"string"},"id":{"type":"integer"},"key":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"title":{"type":"string"}},"required":["id","title","key","can_push"],"type":"object"}
```

</details>

<details><summary>deploy_key_get</summary>

```json
{"additionalProperties":false,"properties":{"can_push":{"type":"boolean"},"created_at":{"type":"string"},"expires_at":{"type":"string"},"fingerprint":{"type":"string"},"fingerprint_sha256":{"type":"string"},"id":{"type":"integer"},"key":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"title":{"type":"string"}},"required":["id","title","key","can_push"],"type":"object"}
```

</details>

<details><summary>deploy_key_list_all</summary>

```json
{"additionalProperties":false,"properties":{"deploy_keys":{"items":{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"expires_at":{"type":"string"},"fingerprint":{"type":"string"},"fingerprint_sha256":{"type":"string"},"id":{"type":"integer"},"key":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"projects_with_readonly_access":{"items":{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"path_with_namespace":{"type":"string"}},"required":["id","name","path_with_namespace"],"type":"object"},"type":["null","array"]},"projects_with_write_access":{"items":{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"path_with_namespace":{"type":"string"}},"required":["id","name","path_with_namespace"],"type":"object"},"type":["null","array"]},"title":{"type":"string"}},"required":["id","title","key"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["deploy_keys","pagination"],"type":"object"}
```

</details>

<details><summary>deploy_key_list_project</summary>

```json
{"additionalProperties":false,"properties":{"deploy_keys":{"items":{"additionalProperties":false,"properties":{"can_push":{"type":"boolean"},"created_at":{"type":"string"},"expires_at":{"type":"string"},"fingerprint":{"type":"string"},"fingerprint_sha256":{"type":"string"},"id":{"type":"integer"},"key":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"title":{"type":"string"}},"required":["id","title","key","can_push"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["deploy_keys","pagination"],"type":"object"}
```

</details>

<details><summary>deploy_key_list_user_project</summary>

```json
{"additionalProperties":false,"properties":{"deploy_keys":{"items":{"additionalProperties":false,"properties":{"can_push":{"type":"boolean"},"created_at":{"type":"string"},"expires_at":{"type":"string"},"fingerprint":{"type":"string"},"fingerprint_sha256":{"type":"string"},"id":{"type":"integer"},"key":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"title":{"type":"string"}},"required":["id","title","key","can_push"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["deploy_keys","pagination"],"type":"object"}
```

</details>

<details><summary>deploy_key_update</summary>

```json
{"additionalProperties":false,"properties":{"can_push":{"type":"boolean"},"created_at":{"type":"string"},"expires_at":{"type":"string"},"fingerprint":{"type":"string"},"fingerprint_sha256":{"type":"string"},"id":{"type":"integer"},"key":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"title":{"type":"string"}},"required":["id","title","key","can_push"],"type":"object"}
```

</details>

<details><summary>deploy_token_create_group</summary>

```json
{"additionalProperties":false,"properties":{"expired":{"type":"boolean"},"expires_at":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"revoked":{"type":"boolean"},"scopes":{"items":{"type":"string"},"type":["null","array"]},"token":{"type":"string"},"username":{"type":"string"}},"required":["id","name","username","revoked","expired","scopes"],"type":"object"}
```

</details>

<details><summary>deploy_token_create_project</summary>

```json
{"additionalProperties":false,"properties":{"expired":{"type":"boolean"},"expires_at":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"revoked":{"type":"boolean"},"scopes":{"items":{"type":"string"},"type":["null","array"]},"token":{"type":"string"},"username":{"type":"string"}},"required":["id","name","username","revoked","expired","scopes"],"type":"object"}
```

</details>

<details><summary>deploy_token_delete_group</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>deploy_token_delete_project</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>deploy_token_get_group</summary>

```json
{"additionalProperties":false,"properties":{"expired":{"type":"boolean"},"expires_at":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"revoked":{"type":"boolean"},"scopes":{"items":{"type":"string"},"type":["null","array"]},"token":{"type":"string"},"username":{"type":"string"}},"required":["id","name","username","revoked","expired","scopes"],"type":"object"}
```

</details>

<details><summary>deploy_token_get_project</summary>

```json
{"additionalProperties":false,"properties":{"expired":{"type":"boolean"},"expires_at":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"revoked":{"type":"boolean"},"scopes":{"items":{"type":"string"},"type":["null","array"]},"token":{"type":"string"},"username":{"type":"string"}},"required":["id","name","username","revoked","expired","scopes"],"type":"object"}
```

</details>

<details><summary>deploy_token_list_all</summary>

```json
{"additionalProperties":false,"properties":{"deploy_tokens":{"items":{"additionalProperties":false,"properties":{"expired":{"type":"boolean"},"expires_at":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"revoked":{"type":"boolean"},"scopes":{"items":{"type":"string"},"type":["null","array"]},"token":{"type":"string"},"username":{"type":"string"}},"required":["id","name","username","revoked","expired","scopes"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["deploy_tokens","pagination"],"type":"object"}
```

</details>

<details><summary>deploy_token_list_group</summary>

```json
{"additionalProperties":false,"properties":{"deploy_tokens":{"items":{"additionalProperties":false,"properties":{"expired":{"type":"boolean"},"expires_at":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"revoked":{"type":"boolean"},"scopes":{"items":{"type":"string"},"type":["null","array"]},"token":{"type":"string"},"username":{"type":"string"}},"required":["id","name","username","revoked","expired","scopes"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["deploy_tokens","pagination"],"type":"object"}
```

</details>

<details><summary>deploy_token_list_project</summary>

```json
{"additionalProperties":false,"properties":{"deploy_tokens":{"items":{"additionalProperties":false,"properties":{"expired":{"type":"boolean"},"expires_at":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"revoked":{"type":"boolean"},"scopes":{"items":{"type":"string"},"type":["null","array"]},"token":{"type":"string"},"username":{"type":"string"}},"required":["id","name","username","revoked","expired","scopes"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["deploy_tokens","pagination"],"type":"object"}
```

</details>

<details><summary>invite_group</summary>

```json
{"additionalProperties":false,"properties":{"message":{"additionalProperties":{"type":"string"},"type":"object"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status"],"type":"object"}
```

</details>

<details><summary>invite_list_group</summary>

```json
{"additionalProperties":false,"properties":{"invitations":{"items":{"additionalProperties":false,"properties":{"access_level":{"type":"integer"},"created_at":{"type":"string"},"created_by_name":{"type":"string"},"expires_at":{"type":"string"},"id":{"type":"integer"},"invite_email":{"type":"string"},"user_name":{"type":"string"}},"required":["id","invite_email","access_level"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["invitations","pagination"],"type":"object"}
```

</details>

<details><summary>invite_list_project</summary>

```json
{"additionalProperties":false,"properties":{"invitations":{"items":{"additionalProperties":false,"properties":{"access_level":{"type":"integer"},"created_at":{"type":"string"},"created_by_name":{"type":"string"},"expires_at":{"type":"string"},"id":{"type":"integer"},"invite_email":{"type":"string"},"user_name":{"type":"string"}},"required":["id","invite_email","access_level"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["invitations","pagination"],"type":"object"}
```

</details>

<details><summary>invite_project</summary>

```json
{"additionalProperties":false,"properties":{"message":{"additionalProperties":{"type":"string"},"type":"object"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status"],"type":"object"}
```

</details>

<details><summary>request_group</summary>

```json
{"additionalProperties":false,"properties":{"access_level":{"type":"integer"},"created_at":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"requested_at":{"type":"string"},"state":{"type":"string"},"username":{"type":"string"}},"required":["id","username","name","state","access_level"],"type":"object"}
```

</details>

<details><summary>request_list_group</summary>

```json
{"additionalProperties":false,"properties":{"access_requests":{"items":{"additionalProperties":false,"properties":{"access_level":{"type":"integer"},"created_at":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"requested_at":{"type":"string"},"state":{"type":"string"},"username":{"type":"string"}},"required":["id","username","name","state","access_level"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["access_requests","pagination"],"type":"object"}
```

</details>

<details><summary>request_list_project</summary>

```json
{"additionalProperties":false,"properties":{"access_requests":{"items":{"additionalProperties":false,"properties":{"access_level":{"type":"integer"},"created_at":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"requested_at":{"type":"string"},"state":{"type":"string"},"username":{"type":"string"}},"required":["id","username","name","state","access_level"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["access_requests","pagination"],"type":"object"}
```

</details>

<details><summary>request_project</summary>

```json
{"additionalProperties":false,"properties":{"access_level":{"type":"integer"},"created_at":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"requested_at":{"type":"string"},"state":{"type":"string"},"username":{"type":"string"}},"required":["id","username","name","state","access_level"],"type":"object"}
```

</details>

<details><summary>token_group_create</summary>

```json
{"additionalProperties":false,"properties":{"access_level":{"type":"integer"},"active":{"type":"boolean"},"created_at":{"type":"string"},"description":{"type":"string"},"expires_at":{"type":"string"},"id":{"type":"integer"},"last_used_at":{"type":"string"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"revoked":{"type":"boolean"},"scopes":{"items":{"type":"string"},"type":["null","array"]},"token":{"type":"string"},"user_id":{"type":"integer"}},"required":["id","name","revoked","active"],"type":"object"}
```

</details>

<details><summary>token_group_get</summary>

```json
{"additionalProperties":false,"properties":{"access_level":{"type":"integer"},"active":{"type":"boolean"},"created_at":{"type":"string"},"description":{"type":"string"},"expires_at":{"type":"string"},"id":{"type":"integer"},"last_used_at":{"type":"string"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"revoked":{"type":"boolean"},"scopes":{"items":{"type":"string"},"type":["null","array"]},"token":{"type":"string"},"user_id":{"type":"integer"}},"required":["id","name","revoked","active"],"type":"object"}
```

</details>

<details><summary>token_group_list</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"},"tokens":{"items":{"additionalProperties":false,"properties":{"access_level":{"type":"integer"},"active":{"type":"boolean"},"created_at":{"type":"string"},"description":{"type":"string"},"expires_at":{"type":"string"},"id":{"type":"integer"},"last_used_at":{"type":"string"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"revoked":{"type":"boolean"},"scopes":{"items":{"type":"string"},"type":["null","array"]},"token":{"type":"string"},"user_id":{"type":"integer"}},"required":["id","name","revoked","active"],"type":"object"},"type":["null","array"]}},"required":["tokens","pagination"],"type":"object"}
```

</details>

<details><summary>token_group_revoke</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>token_group_rotate</summary>

```json
{"additionalProperties":false,"properties":{"access_level":{"type":"integer"},"active":{"type":"boolean"},"created_at":{"type":"string"},"description":{"type":"string"},"expires_at":{"type":"string"},"id":{"type":"integer"},"last_used_at":{"type":"string"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"revoked":{"type":"boolean"},"scopes":{"items":{"type":"string"},"type":["null","array"]},"token":{"type":"string"},"user_id":{"type":"integer"}},"required":["id","name","revoked","active"],"type":"object"}
```

</details>

<details><summary>token_group_rotate_self</summary>

```json
{"additionalProperties":false,"properties":{"access_level":{"type":"integer"},"active":{"type":"boolean"},"created_at":{"type":"string"},"description":{"type":"string"},"expires_at":{"type":"string"},"id":{"type":"integer"},"last_used_at":{"type":"string"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"revoked":{"type":"boolean"},"scopes":{"items":{"type":"string"},"type":["null","array"]},"token":{"type":"string"},"user_id":{"type":"integer"}},"required":["id","name","revoked","active"],"type":"object"}
```

</details>

<details><summary>token_personal_get</summary>

```json
{"additionalProperties":false,"properties":{"access_level":{"type":"integer"},"active":{"type":"boolean"},"created_at":{"type":"string"},"description":{"type":"string"},"expires_at":{"type":"string"},"id":{"type":"integer"},"last_used_at":{"type":"string"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"revoked":{"type":"boolean"},"scopes":{"items":{"type":"string"},"type":["null","array"]},"token":{"type":"string"},"user_id":{"type":"integer"}},"required":["id","name","revoked","active"],"type":"object"}
```

</details>

<details><summary>token_personal_list</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"},"tokens":{"items":{"additionalProperties":false,"properties":{"access_level":{"type":"integer"},"active":{"type":"boolean"},"created_at":{"type":"string"},"description":{"type":"string"},"expires_at":{"type":"string"},"id":{"type":"integer"},"last_used_at":{"type":"string"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"revoked":{"type":"boolean"},"scopes":{"items":{"type":"string"},"type":["null","array"]},"token":{"type":"string"},"user_id":{"type":"integer"}},"required":["id","name","revoked","active"],"type":"object"},"type":["null","array"]}},"required":["tokens","pagination"],"type":"object"}
```

</details>

<details><summary>token_personal_revoke</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>token_personal_revoke_self</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>token_personal_rotate</summary>

```json
{"additionalProperties":false,"properties":{"access_level":{"type":"integer"},"active":{"type":"boolean"},"created_at":{"type":"string"},"description":{"type":"string"},"expires_at":{"type":"string"},"id":{"type":"integer"},"last_used_at":{"type":"string"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"revoked":{"type":"boolean"},"scopes":{"items":{"type":"string"},"type":["null","array"]},"token":{"type":"string"},"user_id":{"type":"integer"}},"required":["id","name","revoked","active"],"type":"object"}
```

</details>

<details><summary>token_personal_rotate_self</summary>

```json
{"additionalProperties":false,"properties":{"access_level":{"type":"integer"},"active":{"type":"boolean"},"created_at":{"type":"string"},"description":{"type":"string"},"expires_at":{"type":"string"},"id":{"type":"integer"},"last_used_at":{"type":"string"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"revoked":{"type":"boolean"},"scopes":{"items":{"type":"string"},"type":["null","array"]},"token":{"type":"string"},"user_id":{"type":"integer"}},"required":["id","name","revoked","active"],"type":"object"}
```

</details>

<details><summary>token_project_create</summary>

```json
{"additionalProperties":false,"properties":{"access_level":{"type":"integer"},"active":{"type":"boolean"},"created_at":{"type":"string"},"description":{"type":"string"},"expires_at":{"type":"string"},"id":{"type":"integer"},"last_used_at":{"type":"string"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"revoked":{"type":"boolean"},"scopes":{"items":{"type":"string"},"type":["null","array"]},"token":{"type":"string"},"user_id":{"type":"integer"}},"required":["id","name","revoked","active"],"type":"object"}
```

</details>

<details><summary>token_project_get</summary>

```json
{"additionalProperties":false,"properties":{"access_level":{"type":"integer"},"active":{"type":"boolean"},"created_at":{"type":"string"},"description":{"type":"string"},"expires_at":{"type":"string"},"id":{"type":"integer"},"last_used_at":{"type":"string"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"revoked":{"type":"boolean"},"scopes":{"items":{"type":"string"},"type":["null","array"]},"token":{"type":"string"},"user_id":{"type":"integer"}},"required":["id","name","revoked","active"],"type":"object"}
```

</details>

<details><summary>token_project_list</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"},"tokens":{"items":{"additionalProperties":false,"properties":{"access_level":{"type":"integer"},"active":{"type":"boolean"},"created_at":{"type":"string"},"description":{"type":"string"},"expires_at":{"type":"string"},"id":{"type":"integer"},"last_used_at":{"type":"string"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"revoked":{"type":"boolean"},"scopes":{"items":{"type":"string"},"type":["null","array"]},"token":{"type":"string"},"user_id":{"type":"integer"}},"required":["id","name","revoked","active"],"type":"object"},"type":["null","array"]}},"required":["tokens","pagination"],"type":"object"}
```

</details>

<details><summary>token_project_revoke</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>token_project_rotate</summary>

```json
{"additionalProperties":false,"properties":{"access_level":{"type":"integer"},"active":{"type":"boolean"},"created_at":{"type":"string"},"description":{"type":"string"},"expires_at":{"type":"string"},"id":{"type":"integer"},"last_used_at":{"type":"string"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"revoked":{"type":"boolean"},"scopes":{"items":{"type":"string"},"type":["null","array"]},"token":{"type":"string"},"user_id":{"type":"integer"}},"required":["id","name","revoked","active"],"type":"object"}
```

</details>

<details><summary>token_project_rotate_self</summary>

```json
{"additionalProperties":false,"properties":{"access_level":{"type":"integer"},"active":{"type":"boolean"},"created_at":{"type":"string"},"description":{"type":"string"},"expires_at":{"type":"string"},"id":{"type":"integer"},"last_used_at":{"type":"string"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"revoked":{"type":"boolean"},"scopes":{"items":{"type":"string"},"type":["null","array"]},"token":{"type":"string"},"user_id":{"type":"integer"}},"required":["id","name","revoked","active"],"type":"object"}
```

</details>

### gitlab_admin

**Admin**

Use {"action":"alert_metric_image_delete","params":{...}}; only top-level keys are action and params.
Action params schema: gitlab://tools/gitlab_admin.<action>.
Action guidance:
- metadata_get: Read GitLab instance metadata such as version and revision. Do not use this for application settings.
- settings_get: Read current GitLab application settings. Use this for instance or application settings, not for server metadata or version information.

GitLab self-managed instance administration: settings, license, broadcast messages, system hooks, Sidekiq monitoring, plan limits, OAuth applications, secure files, Terraform states, cluster agents, dependency proxy cache, plus bulk imports (GitLab→GitLab migrations) and external imports (GitHub/Bitbucket). Most actions require admin privileges. Delete/purge/revoke actions are destructive.
When to use: instance-level admin tasks on a self-managed GitLab (settings, license, features, system hooks, Sidekiq monitoring, bulk imports between GitLab instances, external imports from GitHub/Bitbucket).
NOT for: user CRUD (use gitlab_user), group/project administration (use gitlab_group / gitlab_project), MCP server itself (use gitlab_server), runtime feature flags per project (use gitlab_feature_flags), CI variables (use gitlab_ci_variable).

Behavior:
- Idempotent reads: settings_get / appearance_get / *_list / *_get / sidekiq_* / app_statistics_get / metadata_get / usage_data_service_ping / usage_data_non_sql_metrics / usage_data_queries / usage_data_metric_definitions / plan_limits_get / feature_list / feature_list_definitions.
- settings_update / appearance_update / feature_set / plan_limits_change / custom_attr_set / error_tracking_update_settings are idempotent (same input → same state). license_add / system_hook_add / system_hook_test / broadcast_message_create / application_create / bulk_import_start / import_github / import_bitbucket / import_bitbucket_server / import_gists are NON-idempotent (re-invocation creates duplicates or new background jobs).
- Side effects: license_add / system_hook_add / broadcast_message_create / settings_update / feature_set apply instance-wide IMMEDIATELY (all sessions affected); bulk_import_* and import_* queue long-running async migrations — poll bulk_import_get / bulk_import_entity_* until status='finished'; usage_data_track_event posts to Snowplow when send_to_snowplow=true; application_create returns the OAuth secret only ONCE.
- Destructive: *_delete, license_delete, system_hook_delete, feature_delete, application_delete, broadcast_message_delete, custom_attr_delete, cluster_agent_delete, dependency_proxy_delete, secure_file_delete, terraform_state_delete / terraform_state_unlock, db_migration_mark, bulk_import_cancel and import_cancel_github are irreversible. db_migration_mark may corrupt the schema if used incorrectly.

Returns: resource object for *_get/*_create/*_update/*_set/*_add; metrics object for Sidekiq/usage_data/app_statistics/metadata; paginated array for *_list / feature_list_definitions; {success, message} for *_delete/*_revoke/*_purge/*_unlock.
Errors: 401/403 forbidden (hint: most actions require admin token), 404 not found, 400 invalid params (hint: license must be base64-encoded; system hook url must be https).

Param conventions: * = required. List actions accept page, per_page.

Topics:
- topic_list: search
- topic_get / topic_delete: topic_id*
- topic_create: name*, title, description
- topic_update: topic_id*, name, title, description

Settings & appearance:
- settings_get / appearance_get: (no params). If the task says "read current instance settings" or "get instance settings", call settings_get, not broadcast_message_list.
- settings_update: settings (map of setting_name to value)
- appearance_update: title, description, header_message, footer_message, message_background_color, message_font_color, email_header_and_footer_enabled, pwa_name, pwa_short_name, pwa_description, member_guidelines, new_project_guidelines, profile_image_guidelines

Broadcast messages:
- broadcast_message_list: (no params) lists existing broadcast messages only; it does not read instance settings.
- broadcast_message_get / broadcast_message_delete: id*
- broadcast_message_create: message*, starts_at, ends_at, broadcast_type, theme, dismissable (bool), target_path, target_access_levels
- broadcast_message_update: id*, message, starts_at, ends_at, broadcast_type, theme, dismissable

Instance feature flags:
- feature_list / feature_list_definitions: (no params)
- feature_set: name*, value*, key, feature_group, user, group, namespace, project, repository, force (bool)
- feature_delete: name*

License:
- license_get: (no params)
- license_add: license* (Base64-encoded)
- license_delete: id*

System hooks:
- system_hook_list: (no params)
- system_hook_get / system_hook_test / system_hook_delete: id*
- system_hook_add: url*, token, signing_token, push_events, push_events_branch_filter, branch_filter_strategy, tag_push_events, merge_requests_events, repository_update_events, enable_ssl_verification
- system_hook_edit: id*, url, name, description, token, signing_token, push_events, push_events_branch_filter, branch_filter_strategy, tag_push_events, merge_requests_events, repository_update_events, enable_ssl_verification
- system_hook_set_url_variable: id*, key*, value*
- system_hook_delete_url_variable: id*, key*

Sidekiq metrics: sidekiq_queue_metrics / sidekiq_process_metrics / sidekiq_job_stats / sidekiq_compound_metrics (no params).

Plan limits:
- plan_limits_get: plan_name
- plan_limits_change: plan_name*, conan_max_file_size, generic_packages_max_file_size, helm_max_file_size, maven_max_file_size, npm_max_file_size, nuget_max_file_size, pypi_max_file_size, terraform_module_max_file_size

Usage data:
- usage_data_service_ping / usage_data_non_sql_metrics / usage_data_queries / usage_data_metric_definitions: (no params)
- usage_data_track_event: event*, send_to_snowplow (bool), namespace_id, project_id
- usage_data_track_events: events* (array)

OAuth applications:
- application_list: (no params)
- application_create: name*, redirect_uri*, scopes*, confidential (bool)
- application_delete: id*

Misc:
- db_migration_mark: version*, database
- app_statistics_get / metadata_get: (no params)

Custom attributes:
- custom_attr_list: resource_type* (user/group/project), resource_id*
- custom_attr_get / custom_attr_delete: resource_type*, resource_id*, key*
- custom_attr_set: resource_type*, resource_id*, key*, value*

Bulk import:
- bulk_import_start: url*, access_token*, entities* (array of {source_type, source_full_path, destination_slug, destination_namespace, migrate_projects (bool), migrate_memberships (bool)})
- bulk_import_list: status, page, per_page
- bulk_import_get: id*
- bulk_import_cancel: id*
- bulk_import_entity_list: bulk_import_id, status, page, per_page
- bulk_import_entity_get: bulk_import_id*, entity_id*
- bulk_import_entity_failures: bulk_import_id*, entity_id*

Error tracking:
- error_tracking_list: project_id*
- error_tracking_create: project_id*
- error_tracking_delete: project_id*, key_id*
- error_tracking_get_settings: project_id*
- error_tracking_update_settings: project_id*, active (bool), integrated (bool)

Alert metric images:
- alert_metric_image_list: project_id*, alert_iid*
- alert_metric_image_upload: project_id*, alert_iid*, url*, url_text
- alert_metric_image_update: project_id*, alert_iid*, image_id*, url, url_text
- alert_metric_image_delete: project_id*, alert_iid*, image_id*

Secure files:
- secure_file_list: project_id*
- secure_file_get / secure_file_delete: project_id*, file_id*
- secure_file_create: project_id*, name*, content* (base64-encoded)

Terraform states:
- terraform_state_list: project_path*
- terraform_state_get: project_path*, name*
- terraform_state_delete / terraform_state_lock / terraform_state_unlock: project_id*, name*
- terraform_version_delete: project_id*, name*, serial*

Cluster agents:
- cluster_agent_list: project_id*
- cluster_agent_get / cluster_agent_delete: project_id*, agent_id*
- cluster_agent_register: project_id*, name*
- cluster_agent_token_list: project_id*, agent_id*
- cluster_agent_token_get / cluster_agent_token_revoke: project_id*, agent_id*, token_id*
- cluster_agent_token_create: project_id*, agent_id*, name*

Imports:
- import_github: personal_access_token*, repo_id*, target_namespace*, new_name
- import_bitbucket: bitbucket_username*, bitbucket_app_password*, repo_path*, target_namespace*, new_name
- import_bitbucket_server: bitbucket_server_url*, bitbucket_server_username*, personal_access_token*, bitbucket_server_project*, bitbucket_server_repo*, new_namespace, new_name
- import_cancel_github: project_id*
- import_gists: personal_access_token*
- dependency_proxy_delete: group_id* — purges the group's dependency proxy cache

Parameter constraints (beyond schema):
- broadcast_message_create.broadcast_type ∈ {banner, notification}; theme is a CSS hex color (e.g. '#E75E40'); target_access_levels uses GitLab numeric levels [10=Guest, 20=Reporter, 30=Developer, 40=Maintainer, 50=Owner]; starts_at/ends_at are ISO 8601 timestamps and ends_at MUST be > starts_at.
- feature_set.value accepts 'true' / 'false' / a 0–100 integer (percentage of time/actors) / 'actor:<id>'; the optional key disambiguates 'percentage_of_time' vs 'percentage_of_actors'; user/group/namespace/project/repository scope the gate and are mutually-exclusive with each other.
- plan_limits_change.*_max_file_size are sizes in BYTES; 0 disables the limit. Omitted fields keep their current value (partial update).
- license_add.license is the Base64 of the raw .gitlab-license file (not the file path).
- system_hook_add.url MUST be https when enable_ssl_verification=true; token is sent as X-Gitlab-Token on every delivery.
- application_create.scopes is a SPACE-separated string of OAuth scopes (e.g. 'api read_user'); confidential=false enables PKCE for public clients. The client_secret is returned ONCE on creation and cannot be retrieved later.
- cluster_agent_token_create returns the token ONCE; revoke + re-create to rotate.
- secure_file_create.content is Base64-encoded; max size 5 MiB.
- custom_attr_set.resource_type ∈ {user, group, project} and (resource_type, resource_id, key) is a unique upsert key.
- bulk_import_start.entities[].source_type ∈ {group_entity, project_entity}; migrate_projects and migrate_memberships apply only to group_entity. destination_namespace must already exist on the target instance.
- import_bitbucket_server.bitbucket_server_project is the project KEY (usually uppercase, from the Bitbucket URL), not the display name.
- usage_data_track_event: namespace_id and project_id are mutually-exclusive context refs (provide at most one); send_to_snowplow=false keeps the event internal to GitLab.
- db_migration_mark.database ∈ {main, ci}; defaults to 'main'. Marking a non-applied migration corrupts schema_migrations — verify first via metadata_get.
- terraform_state_lock fails if the state is already locked; unlock breaks any active client session holding the lock.
- topic_create.name must be globally unique (slug); title is the display name shown in the UI.
- List actions: page defaults to 1, per_page defaults to 20 (GitLab cap is 100).

See also: gitlab_user (user CRUD), gitlab_server (MCP server health and updates), gitlab_group / gitlab_project (group/project admin), gitlab_access (tokens, deploy keys, access requests).

Annotations: readOnly=false, destructive=true, idempotent=false, openWorld=true

**Action Output Schemas:**

<details><summary>alert_metric_image_delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>alert_metric_image_list</summary>

```json
{"additionalProperties":false,"properties":{"images":{"items":{"additionalProperties":false,"properties":{"file_path":{"type":"string"},"filename":{"type":"string"},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"url":{"type":"string"},"url_text":{"type":"string"}},"required":["id","filename","file_path","url","url_text"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["images","pagination"],"type":"object"}
```

</details>

<details><summary>alert_metric_image_update</summary>

```json
{"additionalProperties":false,"properties":{"file_path":{"type":"string"},"filename":{"type":"string"},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"url":{"type":"string"},"url_text":{"type":"string"}},"required":["id","filename","file_path","url","url_text"],"type":"object"}
```

</details>

<details><summary>alert_metric_image_upload</summary>

```json
{"additionalProperties":false,"properties":{"file_path":{"type":"string"},"filename":{"type":"string"},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"url":{"type":"string"},"url_text":{"type":"string"}},"required":["id","filename","file_path","url","url_text"],"type":"object"}
```

</details>

<details><summary>app_statistics_get</summary>

```json
{"additionalProperties":false,"properties":{"active_users":{"type":"integer"},"forks":{"type":"integer"},"groups":{"type":"integer"},"issues":{"type":"integer"},"merge_requests":{"type":"integer"},"milestones":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"notes":{"type":"integer"},"projects":{"type":"integer"},"snippets":{"type":"integer"},"ssh_keys":{"type":"integer"},"users":{"type":"integer"}},"required":["forks","issues","merge_requests","notes","snippets","ssh_keys","milestones","users","groups","projects","active_users"],"type":"object"}
```

</details>

<details><summary>appearance_get</summary>

```json
{"additionalProperties":false,"properties":{"appearance":{"additionalProperties":false,"properties":{"description":{"type":"string"},"email_header_and_footer_enabled":{"type":"boolean"},"favicon":{"type":"string"},"footer_message":{"type":"string"},"header_logo":{"type":"string"},"header_message":{"type":"string"},"logo":{"type":"string"},"member_guidelines":{"type":"string"},"message_background_color":{"type":"string"},"message_font_color":{"type":"string"},"new_project_guidelines":{"type":"string"},"profile_image_guidelines":{"type":"string"},"pwa_description":{"type":"string"},"pwa_icon":{"type":"string"},"pwa_name":{"type":"string"},"pwa_short_name":{"type":"string"},"title":{"type":"string"}},"required":["title","email_header_and_footer_enabled"],"type":"object"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["appearance"],"type":"object"}
```

</details>

<details><summary>appearance_update</summary>

```json
{"additionalProperties":false,"properties":{"appearance":{"additionalProperties":false,"properties":{"description":{"type":"string"},"email_header_and_footer_enabled":{"type":"boolean"},"favicon":{"type":"string"},"footer_message":{"type":"string"},"header_logo":{"type":"string"},"header_message":{"type":"string"},"logo":{"type":"string"},"member_guidelines":{"type":"string"},"message_background_color":{"type":"string"},"message_font_color":{"type":"string"},"new_project_guidelines":{"type":"string"},"profile_image_guidelines":{"type":"string"},"pwa_description":{"type":"string"},"pwa_icon":{"type":"string"},"pwa_name":{"type":"string"},"pwa_short_name":{"type":"string"},"title":{"type":"string"}},"required":["title","email_header_and_footer_enabled"],"type":"object"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["appearance"],"type":"object"}
```

</details>

<details><summary>application_create</summary>

```json
{"additionalProperties":false,"properties":{"application_id":{"type":"string"},"application_name":{"type":"string"},"callback_url":{"type":"string"},"confidential":{"type":"boolean"},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"secret":{"type":"string"}},"required":["id","application_id","application_name","secret","callback_url","confidential"],"type":"object"}
```

</details>

<details><summary>application_delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>application_list</summary>

```json
{"additionalProperties":false,"properties":{"applications":{"items":{"additionalProperties":false,"properties":{"application_id":{"type":"string"},"application_name":{"type":"string"},"callback_url":{"type":"string"},"confidential":{"type":"boolean"},"id":{"type":"integer"},"secret":{"type":"string"}},"required":["id","application_id","application_name","secret","callback_url","confidential"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["applications","pagination"],"type":"object"}
```

</details>

<details><summary>broadcast_message_create</summary>

```json
{"additionalProperties":false,"properties":{"message":{"additionalProperties":false,"properties":{"active":{"type":"boolean"},"broadcast_type":{"type":"string"},"dismissable":{"type":"boolean"},"ends_at":{"type":"string"},"font":{"type":"string"},"id":{"type":"integer"},"message":{"type":"string"},"starts_at":{"type":"string"},"target_access_levels":{"items":{"type":"integer"},"type":["null","array"]},"target_path":{"type":"string"},"theme":{"type":"string"}},"required":["id","message","active","dismissable"],"type":"object"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["message"],"type":"object"}
```

</details>

<details><summary>broadcast_message_delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>broadcast_message_get</summary>

```json
{"additionalProperties":false,"properties":{"message":{"additionalProperties":false,"properties":{"active":{"type":"boolean"},"broadcast_type":{"type":"string"},"dismissable":{"type":"boolean"},"ends_at":{"type":"string"},"font":{"type":"string"},"id":{"type":"integer"},"message":{"type":"string"},"starts_at":{"type":"string"},"target_access_levels":{"items":{"type":"integer"},"type":["null","array"]},"target_path":{"type":"string"},"theme":{"type":"string"}},"required":["id","message","active","dismissable"],"type":"object"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["message"],"type":"object"}
```

</details>

<details><summary>broadcast_message_list</summary>

```json
{"additionalProperties":false,"properties":{"messages":{"items":{"additionalProperties":false,"properties":{"active":{"type":"boolean"},"broadcast_type":{"type":"string"},"dismissable":{"type":"boolean"},"ends_at":{"type":"string"},"font":{"type":"string"},"id":{"type":"integer"},"message":{"type":"string"},"starts_at":{"type":"string"},"target_access_levels":{"items":{"type":"integer"},"type":["null","array"]},"target_path":{"type":"string"},"theme":{"type":"string"}},"required":["id","message","active","dismissable"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["messages","pagination"],"type":"object"}
```

</details>

<details><summary>broadcast_message_update</summary>

```json
{"additionalProperties":false,"properties":{"message":{"additionalProperties":false,"properties":{"active":{"type":"boolean"},"broadcast_type":{"type":"string"},"dismissable":{"type":"boolean"},"ends_at":{"type":"string"},"font":{"type":"string"},"id":{"type":"integer"},"message":{"type":"string"},"starts_at":{"type":"string"},"target_access_levels":{"items":{"type":"integer"},"type":["null","array"]},"target_path":{"type":"string"},"theme":{"type":"string"}},"required":["id","message","active","dismissable"],"type":"object"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["message"],"type":"object"}
```

</details>

<details><summary>bulk_import_cancel</summary>

```json
{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"has_failures":{"type":"boolean"},"id":{"type":"integer"},"source_type":{"type":"string"},"source_url":{"type":"string"},"status":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","status","source_type","source_url","created_at","updated_at","has_failures"],"type":"object"}
```

</details>

<details><summary>bulk_import_entity_failures</summary>

```json
{"additionalProperties":false,"properties":{"bulk_import_id":{"type":"integer"},"entity_id":{"type":"integer"},"failures":{"items":{"additionalProperties":false,"properties":{"correlation_id_value":{"type":"string"},"created_at":{"type":"string"},"exception_class":{"type":"string"},"exception_message":{"type":"string"},"pipeline_class":{"type":"string"},"pipeline_step":{"type":"string"},"relation":{"type":"string"},"source_title":{"type":"string"},"source_url":{"type":"string"},"step":{"type":"string"}},"required":["relation","exception_message","exception_class","correlation_id_value","source_url","source_title","step","created_at","pipeline_class","pipeline_step"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["bulk_import_id","entity_id","failures"],"type":"object"}
```

</details>

<details><summary>bulk_import_entity_get</summary>

```json
{"additionalProperties":false,"properties":{"bulk_import_id":{"type":"integer"},"created_at":{"type":"string"},"destination_full_path":{"type":"string"},"destination_name":{"type":"string"},"destination_namespace":{"type":"string"},"destination_slug":{"type":"string"},"entity_type":{"type":"string"},"has_failures":{"type":"boolean"},"id":{"type":"integer"},"migrate_memberships":{"type":"boolean"},"migrate_projects":{"type":"boolean"},"namespace_id":{"type":["null","integer"]},"parent_id":{"type":["null","integer"]},"project_id":{"type":["null","integer"]},"source_full_path":{"type":"string"},"stats":{"additionalProperties":false,"properties":{"labels_fetched":{"type":"integer"},"labels_imported":{"type":"integer"},"labels_source":{"type":"integer"},"milestones_fetched":{"type":"integer"},"milestones_imported":{"type":"integer"},"milestones_source":{"type":"integer"}},"required":["labels_source","labels_fetched","labels_imported","milestones_source","milestones_fetched","milestones_imported"],"type":"object"},"status":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","bulk_import_id","status","entity_type","source_full_path","destination_full_path","destination_name","destination_slug","destination_namespace","created_at","updated_at","migrate_projects","migrate_memberships","has_failures","stats"],"type":"object"}
```

</details>

<details><summary>bulk_import_entity_list</summary>

```json
{"additionalProperties":false,"properties":{"entities":{"items":{"additionalProperties":false,"properties":{"bulk_import_id":{"type":"integer"},"created_at":{"type":"string"},"destination_full_path":{"type":"string"},"destination_name":{"type":"string"},"destination_namespace":{"type":"string"},"destination_slug":{"type":"string"},"entity_type":{"type":"string"},"has_failures":{"type":"boolean"},"id":{"type":"integer"},"migrate_memberships":{"type":"boolean"},"migrate_projects":{"type":"boolean"},"namespace_id":{"type":["null","integer"]},"parent_id":{"type":["null","integer"]},"project_id":{"type":["null","integer"]},"source_full_path":{"type":"string"},"stats":{"additionalProperties":false,"properties":{"labels_fetched":{"type":"integer"},"labels_imported":{"type":"integer"},"labels_source":{"type":"integer"},"milestones_fetched":{"type":"integer"},"milestones_imported":{"type":"integer"},"milestones_source":{"type":"integer"}},"required":["labels_source","labels_fetched","labels_imported","milestones_source","milestones_fetched","milestones_imported"],"type":"object"},"status":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","bulk_import_id","status","entity_type","source_full_path","destination_full_path","destination_name","destination_slug","destination_namespace","created_at","updated_at","migrate_projects","migrate_memberships","has_failures","stats"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["entities","pagination"],"type":"object"}
```

</details>

<details><summary>bulk_import_get</summary>

```json
{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"has_failures":{"type":"boolean"},"id":{"type":"integer"},"source_type":{"type":"string"},"source_url":{"type":"string"},"status":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","status","source_type","source_url","created_at","updated_at","has_failures"],"type":"object"}
```

</details>

<details><summary>bulk_import_list</summary>

```json
{"additionalProperties":false,"properties":{"migrations":{"items":{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"has_failures":{"type":"boolean"},"id":{"type":"integer"},"source_type":{"type":"string"},"source_url":{"type":"string"},"status":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","status","source_type","source_url","created_at","updated_at","has_failures"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["migrations","pagination"],"type":"object"}
```

</details>

<details><summary>bulk_import_start</summary>

```json
{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"has_failures":{"type":"boolean"},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"source_type":{"type":"string"},"source_url":{"type":"string"},"status":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","status","source_type","source_url","created_at","updated_at","has_failures"],"type":"object"}
```

</details>

<details><summary>cluster_agent_delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>cluster_agent_get</summary>

```json
{"additionalProperties":false,"properties":{"created_by_user_id":{"type":"integer"},"id":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["id","name"],"type":"object"}
```

</details>

<details><summary>cluster_agent_list</summary>

```json
{"additionalProperties":false,"properties":{"agents":{"items":{"additionalProperties":false,"properties":{"created_by_user_id":{"type":"integer"},"id":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["id","name"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["agents","pagination"],"type":"object"}
```

</details>

<details><summary>cluster_agent_register</summary>

```json
{"additionalProperties":false,"properties":{"created_by_user_id":{"type":"integer"},"id":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["id","name"],"type":"object"}
```

</details>

<details><summary>cluster_agent_token_create</summary>

```json
{"additionalProperties":false,"properties":{"agent_id":{"type":"integer"},"description":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"},"token":{"type":"string"}},"required":["id","name","agent_id","status"],"type":"object"}
```

</details>

<details><summary>cluster_agent_token_get</summary>

```json
{"additionalProperties":false,"properties":{"agent_id":{"type":"integer"},"description":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"},"token":{"type":"string"}},"required":["id","name","agent_id","status"],"type":"object"}
```

</details>

<details><summary>cluster_agent_token_list</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"},"tokens":{"items":{"additionalProperties":false,"properties":{"agent_id":{"type":"integer"},"description":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"},"token":{"type":"string"}},"required":["id","name","agent_id","status"],"type":"object"},"type":["null","array"]}},"required":["tokens","pagination"],"type":"object"}
```

</details>

<details><summary>cluster_agent_token_revoke</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>custom_attr_delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>custom_attr_get</summary>

```json
{"additionalProperties":false,"properties":{"key":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"value":{"type":"string"}},"required":["key","value"],"type":"object"}
```

</details>

<details><summary>custom_attr_list</summary>

```json
{"additionalProperties":false,"properties":{"attributes":{"items":{"additionalProperties":false,"properties":{"key":{"type":"string"},"value":{"type":"string"}},"required":["key","value"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["attributes"],"type":"object"}
```

</details>

<details><summary>custom_attr_set</summary>

```json
{"additionalProperties":false,"properties":{"key":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"value":{"type":"string"}},"required":["key","value"],"type":"object"}
```

</details>

<details><summary>db_migration_mark</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"},"version":{"type":"integer"}},"required":["status","version"],"type":"object"}
```

</details>

<details><summary>dependency_proxy_delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>error_tracking_create</summary>

```json
{"additionalProperties":false,"properties":{"active":{"type":"boolean"},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"public_key":{"type":"string"},"sentry_dsn":{"type":"string"}},"required":["id","active","public_key","sentry_dsn"],"type":"object"}
```

</details>

<details><summary>error_tracking_delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>error_tracking_get_settings</summary>

```json
{"additionalProperties":false,"properties":{"active":{"type":"boolean"},"api_url":{"type":"string"},"integrated":{"type":"boolean"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"project_name":{"type":"string"},"sentry_external_url":{"type":"string"}},"required":["active","project_name","integrated"],"type":"object"}
```

</details>

<details><summary>error_tracking_list</summary>

```json
{"additionalProperties":false,"properties":{"keys":{"items":{"additionalProperties":false,"properties":{"active":{"type":"boolean"},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"public_key":{"type":"string"},"sentry_dsn":{"type":"string"}},"required":["id","active","public_key","sentry_dsn"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["keys","pagination"],"type":"object"}
```

</details>

<details><summary>error_tracking_update_settings</summary>

```json
{"additionalProperties":false,"properties":{"active":{"type":"boolean"},"api_url":{"type":"string"},"integrated":{"type":"boolean"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"project_name":{"type":"string"},"sentry_external_url":{"type":"string"}},"required":["active","project_name","integrated"],"type":"object"}
```

</details>

<details><summary>feature_delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>feature_list</summary>

```json
{"additionalProperties":false,"properties":{"features":{"items":{"additionalProperties":false,"properties":{"definition":{"additionalProperties":false,"properties":{"default_enabled":{"type":"boolean"},"group":{"type":"string"},"introduced_by_url":{"type":"string"},"log_state_changes":{"type":"boolean"},"milestone":{"type":"string"},"name":{"type":"string"},"rollout_issue_url":{"type":"string"},"type":{"type":"string"}},"required":["name","log_state_changes","default_enabled"],"type":["null","object"]},"gates":{"items":{"additionalProperties":false,"properties":{"key":{"type":"string"},"value":true},"required":["key","value"],"type":"object"},"type":["null","array"]},"name":{"type":"string"},"state":{"type":"string"}},"required":["name","state"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["features"],"type":"object"}
```

</details>

<details><summary>feature_list_definitions</summary>

```json
{"additionalProperties":false,"properties":{"definitions":{"items":{"additionalProperties":false,"properties":{"default_enabled":{"type":"boolean"},"group":{"type":"string"},"introduced_by_url":{"type":"string"},"log_state_changes":{"type":"boolean"},"milestone":{"type":"string"},"name":{"type":"string"},"rollout_issue_url":{"type":"string"},"type":{"type":"string"}},"required":["name","log_state_changes","default_enabled"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["definitions"],"type":"object"}
```

</details>

<details><summary>feature_set</summary>

```json
{"additionalProperties":false,"properties":{"feature":{"additionalProperties":false,"properties":{"definition":{"additionalProperties":false,"properties":{"default_enabled":{"type":"boolean"},"group":{"type":"string"},"introduced_by_url":{"type":"string"},"log_state_changes":{"type":"boolean"},"milestone":{"type":"string"},"name":{"type":"string"},"rollout_issue_url":{"type":"string"},"type":{"type":"string"}},"required":["name","log_state_changes","default_enabled"],"type":["null","object"]},"gates":{"items":{"additionalProperties":false,"properties":{"key":{"type":"string"},"value":true},"required":["key","value"],"type":"object"},"type":["null","array"]},"name":{"type":"string"},"state":{"type":"string"}},"required":["name","state"],"type":"object"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["feature"],"type":"object"}
```

</details>

<details><summary>import_bitbucket</summary>

```json
{"additionalProperties":false,"properties":{"full_name":{"type":"string"},"full_path":{"type":"string"},"human_import_status_name":{"type":"string"},"id":{"type":"integer"},"import_source":{"type":"string"},"import_status":{"type":"string"},"name":{"type":"string"},"provider_link":{"type":"string"}},"required":["id","name","full_path","full_name","import_source","import_status"],"type":"object"}
```

</details>

<details><summary>import_bitbucket_server</summary>

```json
{"additionalProperties":false,"properties":{"full_name":{"type":"string"},"full_path":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"}},"required":["id","name","full_path","full_name"],"type":"object"}
```

</details>

<details><summary>import_cancel_github</summary>

```json
{"additionalProperties":false,"properties":{"full_name":{"type":"string"},"full_path":{"type":"string"},"human_import_status_name":{"type":"string"},"id":{"type":"integer"},"import_source":{"type":"string"},"import_status":{"type":"string"},"name":{"type":"string"},"provider_link":{"type":"string"}},"required":["id","name","full_path","full_name","import_source","import_status"],"type":"object"}
```

</details>

<details><summary>import_gists</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>import_github</summary>

```json
{"additionalProperties":false,"properties":{"full_name":{"type":"string"},"full_path":{"type":"string"},"human_import_status_name":{"type":"string"},"id":{"type":"integer"},"import_source":{"type":"string"},"import_status":{"type":"string"},"name":{"type":"string"},"provider_link":{"type":"string"},"relation_type":{"type":"string"}},"required":["id","name","full_path","full_name","import_source","import_status"],"type":"object"}
```

</details>

<details><summary>license_add</summary>

```json
{"additionalProperties":false,"properties":{"license":{"additionalProperties":false,"properties":{"active_users":{"type":"integer"},"add_ons":{"additionalProperties":false,"properties":{"gitlab_auditor_user":{"type":"integer"},"gitlab_deploy_board":{"type":"integer"},"gitlab_file_locks":{"type":"integer"},"gitlab_geo":{"type":"integer"},"gitlab_service_desk":{"type":"integer"}},"required":["gitlab_auditor_user","gitlab_deploy_board","gitlab_file_locks","gitlab_geo","gitlab_service_desk"],"type":"object"},"created_at":{"type":"string"},"expired":{"type":"boolean"},"expires_at":{"type":"string"},"historical_max":{"type":"integer"},"id":{"type":"integer"},"licensee":{"additionalProperties":false,"properties":{"company":{"type":"string"},"email":{"type":"string"},"name":{"type":"string"}},"required":["name","company","email"],"type":"object"},"maximum_user_count":{"type":"integer"},"overage":{"type":"integer"},"plan":{"type":"string"},"starts_at":{"type":"string"},"user_limit":{"type":"integer"}},"required":["id","plan","historical_max","maximum_user_count","expired","overage","user_limit","active_users","licensee","add_ons"],"type":"object"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["license"],"type":"object"}
```

</details>

<details><summary>license_delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>license_get</summary>

```json
{"additionalProperties":false,"properties":{"license":{"additionalProperties":false,"properties":{"active_users":{"type":"integer"},"add_ons":{"additionalProperties":false,"properties":{"gitlab_auditor_user":{"type":"integer"},"gitlab_deploy_board":{"type":"integer"},"gitlab_file_locks":{"type":"integer"},"gitlab_geo":{"type":"integer"},"gitlab_service_desk":{"type":"integer"}},"required":["gitlab_auditor_user","gitlab_deploy_board","gitlab_file_locks","gitlab_geo","gitlab_service_desk"],"type":"object"},"created_at":{"type":"string"},"expired":{"type":"boolean"},"expires_at":{"type":"string"},"historical_max":{"type":"integer"},"id":{"type":"integer"},"licensee":{"additionalProperties":false,"properties":{"company":{"type":"string"},"email":{"type":"string"},"name":{"type":"string"}},"required":["name","company","email"],"type":"object"},"maximum_user_count":{"type":"integer"},"overage":{"type":"integer"},"plan":{"type":"string"},"starts_at":{"type":"string"},"user_limit":{"type":"integer"}},"required":["id","plan","historical_max","maximum_user_count","expired","overage","user_limit","active_users","licensee","add_ons"],"type":"object"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["license"],"type":"object"}
```

</details>

<details><summary>metadata_get</summary>

```json
{"additionalProperties":false,"properties":{"enterprise":{"type":"boolean"},"kas":{"additionalProperties":false,"properties":{"enabled":{"type":"boolean"},"external_k8s_proxy_url":{"type":"string"},"external_url":{"type":"string"},"version":{"type":"string"}},"required":["enabled","external_url","external_k8s_proxy_url","version"],"type":"object"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"revision":{"type":"string"},"version":{"type":"string"}},"required":["version","revision","kas","enterprise"],"type":"object"}
```

</details>

<details><summary>plan_limits_change</summary>

```json
{"additionalProperties":false,"properties":{"conan_max_file_size":{"type":"integer"},"generic_packages_max_file_size":{"type":"integer"},"helm_max_file_size":{"type":"integer"},"maven_max_file_size":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"npm_max_file_size":{"type":"integer"},"nuget_max_file_size":{"type":"integer"},"pypi_max_file_size":{"type":"integer"},"terraform_module_max_file_size":{"type":"integer"}},"required":["conan_max_file_size","generic_packages_max_file_size","helm_max_file_size","maven_max_file_size","npm_max_file_size","nuget_max_file_size","pypi_max_file_size","terraform_module_max_file_size"],"type":"object"}
```

</details>

<details><summary>plan_limits_get</summary>

```json
{"additionalProperties":false,"properties":{"conan_max_file_size":{"type":"integer"},"generic_packages_max_file_size":{"type":"integer"},"helm_max_file_size":{"type":"integer"},"maven_max_file_size":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"npm_max_file_size":{"type":"integer"},"nuget_max_file_size":{"type":"integer"},"pypi_max_file_size":{"type":"integer"},"terraform_module_max_file_size":{"type":"integer"}},"required":["conan_max_file_size","generic_packages_max_file_size","helm_max_file_size","maven_max_file_size","npm_max_file_size","nuget_max_file_size","pypi_max_file_size","terraform_module_max_file_size"],"type":"object"}
```

</details>

<details><summary>secure_file_create</summary>

```json
{"additionalProperties":false,"properties":{"checksum":{"type":"string"},"checksum_algorithm":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["id","name","checksum","checksum_algorithm"],"type":"object"}
```

</details>

<details><summary>secure_file_delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>secure_file_get</summary>

```json
{"additionalProperties":false,"properties":{"checksum":{"type":"string"},"checksum_algorithm":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["id","name","checksum","checksum_algorithm"],"type":"object"}
```

</details>

<details><summary>secure_file_list</summary>

```json
{"additionalProperties":false,"properties":{"files":{"items":{"additionalProperties":false,"properties":{"checksum":{"type":"string"},"checksum_algorithm":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["id","name","checksum","checksum_algorithm"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["files","pagination"],"type":"object"}
```

</details>

<details><summary>settings_get</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"settings":{"additionalProperties":true,"type":"object"}},"required":["settings"],"type":"object"}
```

</details>

<details><summary>settings_update</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"settings":{"additionalProperties":true,"type":"object"}},"required":["settings"],"type":"object"}
```

</details>

<details><summary>sidekiq_compound_metrics</summary>

```json
{"additionalProperties":false,"properties":{"jobs":{"additionalProperties":false,"properties":{"enqueued":{"type":"integer"},"failed":{"type":"integer"},"processed":{"type":"integer"}},"required":["processed","failed","enqueued"],"type":"object"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"processes":{"items":{"additionalProperties":false,"properties":{"busy":{"type":"integer"},"concurrency":{"type":"integer"},"hostname":{"type":"string"},"labels":{"items":{"type":"string"},"type":["null","array"]},"pid":{"type":"integer"},"queues":{"items":{"type":"string"},"type":["null","array"]},"started_at":{"type":"string"},"tag":{"type":"string"}},"required":["hostname","pid","tag","started_at","queues","labels","concurrency","busy"],"type":"object"},"type":["null","array"]},"queues":{"items":{"additionalProperties":false,"properties":{"backlog":{"type":"integer"},"latency":{"type":"integer"},"name":{"type":"string"}},"required":["name","backlog","latency"],"type":"object"},"type":["null","array"]}},"required":["queues","processes","jobs"],"type":"object"}
```

</details>

<details><summary>sidekiq_job_stats</summary>

```json
{"additionalProperties":false,"properties":{"jobs":{"additionalProperties":false,"properties":{"enqueued":{"type":"integer"},"failed":{"type":"integer"},"processed":{"type":"integer"}},"required":["processed","failed","enqueued"],"type":"object"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["jobs"],"type":"object"}
```

</details>

<details><summary>sidekiq_process_metrics</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"processes":{"items":{"additionalProperties":false,"properties":{"busy":{"type":"integer"},"concurrency":{"type":"integer"},"hostname":{"type":"string"},"labels":{"items":{"type":"string"},"type":["null","array"]},"pid":{"type":"integer"},"queues":{"items":{"type":"string"},"type":["null","array"]},"started_at":{"type":"string"},"tag":{"type":"string"}},"required":["hostname","pid","tag","started_at","queues","labels","concurrency","busy"],"type":"object"},"type":["null","array"]}},"required":["processes"],"type":"object"}
```

</details>

<details><summary>sidekiq_queue_metrics</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"queues":{"items":{"additionalProperties":false,"properties":{"backlog":{"type":"integer"},"latency":{"type":"integer"},"name":{"type":"string"}},"required":["name","backlog","latency"],"type":"object"},"type":["null","array"]}},"required":["queues"],"type":"object"}
```

</details>

<details><summary>system_hook_add</summary>

```json
{"additionalProperties":false,"properties":{"hook":{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"description":{"type":"string"},"enable_ssl_verification":{"type":"boolean"},"id":{"type":"integer"},"merge_requests_events":{"type":"boolean"},"name":{"type":"string"},"push_events":{"type":"boolean"},"repository_update_events":{"type":"boolean"},"signing_token_present":{"type":"boolean"},"tag_push_events":{"type":"boolean"},"token_present":{"type":"boolean"},"url":{"type":"string"},"url_variables":{"items":{"additionalProperties":false,"properties":{"key":{"type":"string"}},"required":["key"],"type":"object"},"type":["null","array"]}},"required":["id","url","push_events","tag_push_events","merge_requests_events","repository_update_events","enable_ssl_verification","token_present","signing_token_present"],"type":"object"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["hook"],"type":"object"}
```

</details>

<details><summary>system_hook_delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>system_hook_delete_url_variable</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>system_hook_edit</summary>

```json
{"additionalProperties":false,"properties":{"hook":{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"description":{"type":"string"},"enable_ssl_verification":{"type":"boolean"},"id":{"type":"integer"},"merge_requests_events":{"type":"boolean"},"name":{"type":"string"},"push_events":{"type":"boolean"},"repository_update_events":{"type":"boolean"},"signing_token_present":{"type":"boolean"},"tag_push_events":{"type":"boolean"},"token_present":{"type":"boolean"},"url":{"type":"string"},"url_variables":{"items":{"additionalProperties":false,"properties":{"key":{"type":"string"}},"required":["key"],"type":"object"},"type":["null","array"]}},"required":["id","url","push_events","tag_push_events","merge_requests_events","repository_update_events","enable_ssl_verification","token_present","signing_token_present"],"type":"object"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["hook"],"type":"object"}
```

</details>

<details><summary>system_hook_get</summary>

```json
{"additionalProperties":false,"properties":{"hook":{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"description":{"type":"string"},"enable_ssl_verification":{"type":"boolean"},"id":{"type":"integer"},"merge_requests_events":{"type":"boolean"},"name":{"type":"string"},"push_events":{"type":"boolean"},"repository_update_events":{"type":"boolean"},"signing_token_present":{"type":"boolean"},"tag_push_events":{"type":"boolean"},"token_present":{"type":"boolean"},"url":{"type":"string"},"url_variables":{"items":{"additionalProperties":false,"properties":{"key":{"type":"string"}},"required":["key"],"type":"object"},"type":["null","array"]}},"required":["id","url","push_events","tag_push_events","merge_requests_events","repository_update_events","enable_ssl_verification","token_present","signing_token_present"],"type":"object"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["hook"],"type":"object"}
```

</details>

<details><summary>system_hook_list</summary>

```json
{"additionalProperties":false,"properties":{"hooks":{"items":{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"description":{"type":"string"},"enable_ssl_verification":{"type":"boolean"},"id":{"type":"integer"},"merge_requests_events":{"type":"boolean"},"name":{"type":"string"},"push_events":{"type":"boolean"},"repository_update_events":{"type":"boolean"},"signing_token_present":{"type":"boolean"},"tag_push_events":{"type":"boolean"},"token_present":{"type":"boolean"},"url":{"type":"string"},"url_variables":{"items":{"additionalProperties":false,"properties":{"key":{"type":"string"}},"required":["key"],"type":"object"},"type":["null","array"]}},"required":["id","url","push_events","tag_push_events","merge_requests_events","repository_update_events","enable_ssl_verification","token_present","signing_token_present"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["hooks"],"type":"object"}
```

</details>

<details><summary>system_hook_set_url_variable</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>system_hook_test</summary>

```json
{"additionalProperties":false,"properties":{"event":{"additionalProperties":false,"properties":{"event_name":{"type":"string"},"name":{"type":"string"},"owner_email":{"type":"string"},"owner_name":{"type":"string"},"path":{"type":"string"},"project_id":{"type":"integer"}},"required":["event_name","name","path","project_id","owner_name","owner_email"],"type":"object"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["event"],"type":"object"}
```

</details>

<details><summary>terraform_state_delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>terraform_state_get</summary>

```json
{"additionalProperties":false,"properties":{"download_path":{"type":"string"},"latest_serial":{"minimum":0,"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["name"],"type":"object"}
```

</details>

<details><summary>terraform_state_list</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"states":{"items":{"additionalProperties":false,"properties":{"download_path":{"type":"string"},"latest_serial":{"minimum":0,"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["name"],"type":"object"},"type":["null","array"]}},"required":["states"],"type":"object"}
```

</details>

<details><summary>terraform_state_lock</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"success":{"type":"boolean"}},"required":["success","message"],"type":"object"}
```

</details>

<details><summary>terraform_state_unlock</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"success":{"type":"boolean"}},"required":["success","message"],"type":"object"}
```

</details>

<details><summary>terraform_version_delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>topic_create</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"topic":{"additionalProperties":false,"properties":{"avatar_url":{"type":"string"},"description":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"title":{"type":"string"},"total_projects_count":{"minimum":0,"type":"integer"}},"required":["id","name","title","total_projects_count"],"type":"object"}},"required":["topic"],"type":"object"}
```

</details>

<details><summary>topic_delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>topic_get</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"topic":{"additionalProperties":false,"properties":{"avatar_url":{"type":"string"},"description":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"title":{"type":"string"},"total_projects_count":{"minimum":0,"type":"integer"}},"required":["id","name","title","total_projects_count"],"type":"object"}},"required":["topic"],"type":"object"}
```

</details>

<details><summary>topic_list</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"},"topics":{"items":{"additionalProperties":false,"properties":{"avatar_url":{"type":"string"},"description":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"title":{"type":"string"},"total_projects_count":{"minimum":0,"type":"integer"}},"required":["id","name","title","total_projects_count"],"type":"object"},"type":["null","array"]}},"required":["topics","pagination"],"type":"object"}
```

</details>

<details><summary>topic_update</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"topic":{"additionalProperties":false,"properties":{"avatar_url":{"type":"string"},"description":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"title":{"type":"string"},"total_projects_count":{"minimum":0,"type":"integer"}},"required":["id","name","title","total_projects_count"],"type":"object"}},"required":["topic"],"type":"object"}
```

</details>

<details><summary>usage_data_metric_definitions</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"yaml":{"type":"string"}},"required":["yaml"],"type":"object"}
```

</details>

<details><summary>usage_data_non_sql_metrics</summary>

```json
{"additionalProperties":false,"properties":{"active_user_count":{"type":"integer"},"edition":{"type":"string"},"historical_max_users":{"type":"integer"},"hostname":{"type":"string"},"installation_type":{"type":"string"},"license":{"additionalProperties":{"type":"string"},"type":"object"},"license_add_ons":{"additionalProperties":{"type":"integer"},"type":"object"},"license_expires_at":{"type":"string"},"license_id":{"type":"string"},"license_md5":{"type":"string"},"license_plan":{"type":"string"},"license_sha256":{"type":"string"},"license_starts_at":{"type":"string"},"license_subscription_id":{"type":"string"},"license_trial":{"type":"string"},"license_user_count":{"type":"integer"},"licensee":{"additionalProperties":{"type":"string"},"type":"object"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"recorded_at":{"type":"string"},"settings":{"additionalProperties":{"type":"string"},"type":"object"},"uuid":{"type":"string"},"version":{"type":"string"}},"required":["recorded_at","uuid","hostname","version","installation_type","active_user_count","edition","license_md5","license_sha256","license_id","historical_max_users","licensee","license_user_count","license_starts_at","license_expires_at","license_plan","license_add_ons","license_trial","license_subscription_id","license","settings"],"type":"object"}
```

</details>

<details><summary>usage_data_queries</summary>

```json
{"additionalProperties":false,"properties":{"active_user_count":{"type":"string"},"counts":{"additionalProperties":{"type":"string"},"type":"object"},"edition":{"type":"string"},"historical_max_users":{"type":"integer"},"hostname":{"type":"string"},"installation_type":{"type":"string"},"license":{"additionalProperties":{"type":"string"},"type":"object"},"license_add_ons":{"additionalProperties":{"type":"integer"},"type":"object"},"license_expires_at":{"type":"string"},"license_id":{"type":"string"},"license_md5":{"type":"string"},"license_plan":{"type":"string"},"license_sha256":{"type":"string"},"license_starts_at":{"type":"string"},"license_subscription_id":{"type":"string"},"license_trial":{"type":"string"},"license_user_count":{"type":"integer"},"licensee":{"additionalProperties":{"type":"string"},"type":"object"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"recorded_at":{"type":"string"},"settings":{"additionalProperties":{"type":"string"},"type":"object"},"uuid":{"type":"string"},"version":{"type":"string"}},"required":["recorded_at","uuid","hostname","version","installation_type","active_user_count","edition","license_md5","license_sha256","license_id","historical_max_users","licensee","license_user_count","license_starts_at","license_expires_at","license_plan","license_add_ons","license_trial","license_subscription_id","license","settings","counts"],"type":"object"}
```

</details>

<details><summary>usage_data_service_ping</summary>

```json
{"additionalProperties":false,"properties":{"counts":{"additionalProperties":{"type":"integer"},"type":"object"},"license":{"additionalProperties":{"type":"string"},"type":"object"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"recorded_at":{"type":"string"}},"required":["recorded_at","license","counts"],"type":"object"}
```

</details>

<details><summary>usage_data_track_event</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status"],"type":"object"}
```

</details>

<details><summary>usage_data_track_events</summary>

```json
{"additionalProperties":false,"properties":{"count":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","count"],"type":"object"}
```

</details>

### gitlab_analyze

**Analyze**

Use {"action":"ci_config","params":{...}}; only top-level keys are action and params.
Action params schema: gitlab://tools/gitlab_analyze.<action>.

LLM-assisted analysis of GitLab data via MCP sampling. Each action fetches data through GitLab APIs, then asks the connected LLM (the host's sampling capability) to summarize / analyze / classify it. Requires the client to advertise sampling capability — actions return SamplingUnsupportedResult otherwise (human-in-the-loop on the client side).
When to use: ask an LLM to interpret GitLab artifacts — MR diffs, issue threads, pipeline failures, CI configs, milestone progress, deployment history, technical-debt markers — and produce Markdown narratives, scopes, or release notes.
NOT for: raw data retrieval without LLM analysis (use gitlab_merge_request / gitlab_issue / gitlab_pipeline / gitlab_release / gitlab_repository); skipping explicit prerequisite inspection/list/compare steps requested by the user; long-form report generation outside the chat session; clients without sampling support (the action returns a `SamplingUnsupportedResult`).

Returns: each action returns action-specific JSON (typically identifiers + a text field plus model and truncated flags) and a Markdown summary suitable for direct display. Per-action text key:
- summary: issue_summary, mr_review
- analysis: mr_changes, pipeline_failure, ci_config, issue_scope, technical_debt, deployment_history
- review: mr_security
- report: milestone_report
- release_notes: release_notes
Alongside the resource identifiers (merge_request_iid, issue_iid, pipeline_id, milestone_iid, project_id) supplied as input.
Errors: 404 (hint: project_id, merge_request_iid, issue_iid, pipeline_id, milestone_iid must exist), 403 (hint: caller must have access to the underlying resource), `SamplingUnsupportedResult` when the client did not advertise sampling capability.

All actions need project_id*. Additional params per action:
- mr_changes: merge_request_iid*. Analyze MR code changes for quality, bugs, improvements.
- issue_summary: issue_iid*. Summarize discussion with key decisions and action items.
- release_notes: from*, to. Generate categorized release notes between refs. to defaults to HEAD. from_ref/to_ref aliases are accepted but from/to are canonical. If the user asks to inspect releases or compare refs first, call those tools before release_notes.
- pipeline_failure: pipeline_id*. Root cause analysis with fix suggestions.
- mr_review: merge_request_iid*. Summarize review feedback and unresolved threads.
- milestone_report: milestone_iid*. Progress report with metrics.
- ci_config: content_ref. Analyze CI/CD config for best practices and security.
- issue_scope: issue_iid*. Scope, complexity, and breakdown recommendations.
- mr_security: merge_request_iid*. OWASP Top 10, secrets, auth review.
- technical_debt: ref. Find TODO/FIXME/HACK markers.
- deployment_history: environment. Frequency, success rate, patterns.

See also: gitlab_merge_request (MR lifecycle), gitlab_issue (issue CRUD), gitlab_pipeline (raw pipelines and test reports), gitlab_release (release CRUD).

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

**Action Output Schemas:**

<details><summary>ci_config</summary>

```json
{"additionalProperties":false,"properties":{"analysis":{"type":"string"},"model":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"project_id":{"type":"string"},"truncated":{"type":"boolean"},"valid":{"type":"boolean"}},"required":["project_id","valid","analysis","model","truncated"],"type":"object"}
```

</details>

<details><summary>deployment_history</summary>

```json
{"additionalProperties":false,"properties":{"analysis":{"type":"string"},"environment":{"type":"string"},"model":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"project_id":{"type":"string"},"truncated":{"type":"boolean"}},"required":["project_id","analysis","model","truncated"],"type":"object"}
```

</details>

<details><summary>issue_scope</summary>

```json
{"additionalProperties":false,"properties":{"analysis":{"type":"string"},"issue_iid":{"type":"integer"},"model":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"title":{"type":"string"},"truncated":{"type":"boolean"}},"required":["issue_iid","title","analysis","model","truncated"],"type":"object"}
```

</details>

<details><summary>issue_summary</summary>

```json
{"additionalProperties":false,"properties":{"issue_iid":{"type":"integer"},"model":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"summary":{"type":"string"},"title":{"type":"string"},"truncated":{"type":"boolean"}},"required":["issue_iid","title","summary","model","truncated"],"type":"object"}
```

</details>

<details><summary>milestone_report</summary>

```json
{"additionalProperties":false,"properties":{"milestone_iid":{"type":"integer"},"model":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"report":{"type":"string"},"title":{"type":"string"},"truncated":{"type":"boolean"}},"required":["milestone_iid","title","report","model","truncated"],"type":"object"}
```

</details>

<details><summary>mr_changes</summary>

```json
{"additionalProperties":false,"properties":{"analysis":{"type":"string"},"merge_request_iid":{"type":"integer"},"model":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"title":{"type":"string"},"truncated":{"type":"boolean"}},"required":["merge_request_iid","title","analysis","model","truncated"],"type":"object"}
```

</details>

<details><summary>mr_review</summary>

```json
{"additionalProperties":false,"properties":{"merge_request_iid":{"type":"integer"},"model":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"summary":{"type":"string"},"title":{"type":"string"},"truncated":{"type":"boolean"}},"required":["merge_request_iid","title","summary","model","truncated"],"type":"object"}
```

</details>

<details><summary>mr_security</summary>

```json
{"additionalProperties":false,"properties":{"merge_request_iid":{"type":"integer"},"model":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"review":{"type":"string"},"title":{"type":"string"},"truncated":{"type":"boolean"}},"required":["merge_request_iid","title","review","model","truncated"],"type":"object"}
```

</details>

<details><summary>pipeline_failure</summary>

```json
{"additionalProperties":false,"properties":{"analysis":{"type":"string"},"model":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pipeline_id":{"type":"integer"},"ref":{"type":"string"},"status":{"type":"string"},"truncated":{"type":"boolean"}},"required":["pipeline_id","status","ref","analysis","model","truncated"],"type":"object"}
```

</details>

<details><summary>release_notes</summary>

```json
{"additionalProperties":false,"properties":{"from":{"type":"string"},"model":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"release_notes":{"type":"string"},"to":{"type":"string"},"truncated":{"type":"boolean"}},"required":["from","to","release_notes","model","truncated"],"type":"object"}
```

</details>

<details><summary>technical_debt</summary>

```json
{"additionalProperties":false,"properties":{"analysis":{"type":"string"},"model":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"project_id":{"type":"string"},"truncated":{"type":"boolean"}},"required":["project_id","analysis","model","truncated"],"type":"object"}
```

</details>

### gitlab_branch

**Branch**

Use {"action":"list","params":{...}}; only top-level keys are action and params.
Action params schema: gitlab://tools/gitlab_branch.<action>.
Action guidance:
- rule_list: Use to audit aggregated branch rules, including protections and approval-related state, for a project path.

Manage Git branches and branch protections in a project, plus aggregated branch rules (GraphQL). Delete and unprotect are destructive and irreversible.
When to use: create/list/delete branches, protect or update protection on branches, audit aggregated branch rules (push/merge access, approval rules, status checks).
NOT for: file contents on a branch (use gitlab_repository file_get/file_create/...), commit operations (use gitlab_repository commit_*), tags (use gitlab_tag), opening MRs against a branch (use gitlab_merge_request).

Returns:
- list / list_protected: array of {name, default, protected, merged, commit, ...} with pagination.
- get / get_protected / create / protect / update_protected: branch or protection object.
- delete / delete_merged / unprotect: {success: bool, message: string}.
- rule_list: GraphQL aggregated view {nodes: [{name, branch_protection, approval_rules, external_status_checks}], page_info}.
Errors: 404 not found, 403 forbidden (hint: requires Maintainer+ to protect/unprotect), 400 invalid params (hint: cannot delete default or protected branches — unprotect first).

Param conventions: * = required. All actions need project_id* (numeric or url-encoded path) except rule_list which uses project_path*. Access levels: 0 = no one, 30 = Developer, 40 = Maintainer.

- create: project_id*, branch_name*, ref* (branch/tag/SHA)
- get / delete: project_id*, branch_name*
- list: project_id*, search, page, per_page
- delete_merged: project_id* — deletes all merged branches except default/protected
- protect: project_id*, branch_name*, push_access_level (0/30/40), merge_access_level (0/30/40), allow_force_push (bool)
- unprotect: project_id*, branch_name*
- list_protected: project_id*
- get_protected: project_id*, branch_name*
- update_protected: project_id*, branch_name*, allow_force_push (bool), code_owner_approval_required (bool)
- rule_list: project_path* (e.g. my-group/my-project), first (max 100), after (cursor)

See also: gitlab_repository (file/commit operations on a branch), gitlab_merge_request (open MRs against a branch), gitlab_tag (tag CRUD/protection).

Annotations: readOnly=false, destructive=true, idempotent=false, openWorld=true

**Action Output Schemas:**

<details><summary>create</summary>

```json
{"additionalProperties":false,"properties":{"can_push":{"type":"boolean"},"commit_id":{"type":"string"},"default":{"type":"boolean"},"developers_can_merge":{"type":"boolean"},"developers_can_push":{"type":"boolean"},"merged":{"type":"boolean"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"protected":{"type":"boolean"},"web_url":{"type":"string"}},"required":["name","merged","protected","default","web_url","commit_id","can_push","developers_can_push","developers_can_merge"],"type":"object"}
```

</details>

<details><summary>delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>delete_merged</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>get</summary>

```json
{"additionalProperties":false,"properties":{"can_push":{"type":"boolean"},"commit_id":{"type":"string"},"default":{"type":"boolean"},"developers_can_merge":{"type":"boolean"},"developers_can_push":{"type":"boolean"},"merged":{"type":"boolean"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"protected":{"type":"boolean"},"web_url":{"type":"string"}},"required":["name","merged","protected","default","web_url","commit_id","can_push","developers_can_push","developers_can_merge"],"type":"object"}
```

</details>

<details><summary>get_protected</summary>

```json
{"additionalProperties":false,"properties":{"allow_force_push":{"type":"boolean"},"already_protected":{"type":"boolean"},"code_owner_approval_required":{"type":"boolean"},"id":{"type":"integer"},"merge_access_level":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"push_access_level":{"type":"integer"}},"required":["id","name","push_access_level","merge_access_level","allow_force_push","code_owner_approval_required"],"type":"object"}
```

</details>

<details><summary>list</summary>

```json
{"additionalProperties":false,"properties":{"branches":{"items":{"additionalProperties":false,"properties":{"can_push":{"type":"boolean"},"commit_id":{"type":"string"},"default":{"type":"boolean"},"developers_can_merge":{"type":"boolean"},"developers_can_push":{"type":"boolean"},"merged":{"type":"boolean"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"protected":{"type":"boolean"},"web_url":{"type":"string"}},"required":["name","merged","protected","default","web_url","commit_id","can_push","developers_can_push","developers_can_merge"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["branches","pagination"],"type":"object"}
```

</details>

<details><summary>list_protected</summary>

```json
{"additionalProperties":false,"properties":{"branches":{"items":{"additionalProperties":false,"properties":{"allow_force_push":{"type":"boolean"},"already_protected":{"type":"boolean"},"code_owner_approval_required":{"type":"boolean"},"id":{"type":"integer"},"merge_access_level":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"push_access_level":{"type":"integer"}},"required":["id","name","push_access_level","merge_access_level","allow_force_push","code_owner_approval_required"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["branches","pagination"],"type":"object"}
```

</details>

<details><summary>protect</summary>

```json
{"additionalProperties":false,"properties":{"allow_force_push":{"type":"boolean"},"already_protected":{"type":"boolean"},"code_owner_approval_required":{"type":"boolean"},"id":{"type":"integer"},"merge_access_level":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"push_access_level":{"type":"integer"}},"required":["id","name","push_access_level","merge_access_level","allow_force_push","code_owner_approval_required"],"type":"object"}
```

</details>

<details><summary>rule_list</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"end_cursor":{"type":"string"},"has_next_page":{"type":"boolean"},"has_previous_page":{"type":"boolean"},"start_cursor":{"type":"string"}},"required":["has_next_page","has_previous_page"],"type":"object"},"rules":{"items":{"additionalProperties":false,"properties":{"approval_rules":{"items":{"additionalProperties":false,"properties":{"approvals_required":{"type":"integer"},"name":{"type":"string"},"type":{"type":"string"}},"required":["name","approvals_required"],"type":"object"},"type":["null","array"]},"branch_protection":{"additionalProperties":false,"properties":{"allow_force_push":{"type":"boolean"},"code_owner_approval_required":{"type":"boolean"}},"required":["allow_force_push","code_owner_approval_required"],"type":["null","object"]},"created_at":{"type":"string"},"external_status_checks":{"items":{"additionalProperties":false,"properties":{"external_url":{"type":"string"},"name":{"type":"string"}},"required":["name","external_url"],"type":"object"},"type":["null","array"]},"is_default":{"type":"boolean"},"is_protected":{"type":"boolean"},"matching_branches_count":{"type":"integer"},"name":{"type":"string"},"updated_at":{"type":"string"}},"required":["name","is_default","is_protected","matching_branches_count"],"type":"object"},"type":["null","array"]}},"required":["rules","pagination"],"type":"object"}
```

</details>

<details><summary>unprotect</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>update_protected</summary>

```json
{"additionalProperties":false,"properties":{"allow_force_push":{"type":"boolean"},"already_protected":{"type":"boolean"},"code_owner_approval_required":{"type":"boolean"},"id":{"type":"integer"},"merge_access_level":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"push_access_level":{"type":"integer"}},"required":["id","name","push_access_level","merge_access_level","allow_force_push","code_owner_approval_required"],"type":"object"}
```

</details>

### gitlab_ci_catalog

**CI Catalog**

Use {"action":"list","params":{...}}; only top-level keys are action and params.
Action params schema: gitlab://tools/gitlab_ci_catalog.<action>.

Discover and inspect CI/CD Catalog resources (reusable pipeline components and templates published by groups for import into .gitlab-ci.yml). Read-only; GraphQL endpoint. The underlying GitLab API requires a Premium/Ultimate plan on the target instance (server enforces it with 403); the tool itself is always registered and is not gated by GITLAB_ENTERPRISE.
When to use: browse the Catalog to find reusable components, inspect a component's versions before pinning it in `include:component`, or audit which Catalog resources a publisher group exposes.
NOT for: running pipelines or pipeline definitions (use gitlab_pipeline), built-in GitLab templates such as gitignore/Dockerfile/license (use gitlab_template), CI YAML linting (use gitlab_template action=lint).

Returns:
- list: {nodes: [{id, full_path, name, description, latest_version, star_count}], page_info: {end_cursor, has_next_page}}.
- get: {id, full_path, name, description, latest_version, star_count, versions: [{version, released_at, tag_name}]}.
Errors: 404 not found (hint: check full_path or id), 403 forbidden (hint: requires Premium/Ultimate or Catalog read access), 400 invalid params (hint: provide id OR full_path).

Param conventions: * = required. id format = GID (gid://gitlab/Ci::Catalog::Resource/123). full_path = namespace/project (e.g. mygroup/components/docker-build).

- list: search, scope (ALL/NAMESPACED), sort (NAME_ASC/NAME_DESC/LATEST_RELEASED_AT_ASC/LATEST_RELEASED_AT_DESC/STAR_COUNT_ASC/STAR_COUNT_DESC), first (max 100), after (cursor)
- get: exactly one of id* or full_path* (mutually exclusive)

See also: gitlab_template (built-in templates and CI lint), gitlab_pipeline (run pipelines using catalog components), gitlab_project (publisher project metadata).

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

**Action Output Schemas:**

<details><summary>get</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"resource":{"additionalProperties":false,"properties":{"components":{"items":{"additionalProperties":false,"properties":{"description":{"type":"string"},"include_path":{"type":"string"},"inputs":{"items":{"additionalProperties":false,"properties":{"default":{"type":"string"},"description":{"type":"string"},"name":{"type":"string"},"required":{"type":"boolean"},"type":{"type":"string"}},"required":["name","required"],"type":"object"},"type":["null","array"]},"name":{"type":"string"}},"required":["name","include_path"],"type":"object"},"type":["null","array"]},"description":{"type":"string"},"forks_count":{"type":"integer"},"full_path":{"type":"string"},"icon":{"type":"string"},"id":{"type":"string"},"latest_released_at":{"type":"string"},"latest_version_name":{"type":"string"},"name":{"type":"string"},"open_issues_count":{"type":"integer"},"open_merge_requests_count":{"type":"integer"},"readme_html":{"type":"string"},"star_count":{"type":"integer"},"versions":{"items":{"additionalProperties":false,"properties":{"components":{"items":{"additionalProperties":false,"properties":{"description":{"type":"string"},"include_path":{"type":"string"},"inputs":{"items":{"additionalProperties":false,"properties":{"default":{"type":"string"},"description":{"type":"string"},"name":{"type":"string"},"required":{"type":"boolean"},"type":{"type":"string"}},"required":["name","required"],"type":"object"},"type":["null","array"]},"name":{"type":"string"}},"required":["name","include_path"],"type":"object"},"type":["null","array"]},"name":{"type":"string"},"released_at":{"type":"string"}},"required":["name","released_at"],"type":"object"},"type":["null","array"]},"web_url":{"type":"string"}},"required":["id","name","full_path","web_url","star_count","forks_count","open_issues_count","open_merge_requests_count"],"type":"object"}},"required":["resource"],"type":"object"}
```

</details>

<details><summary>list</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"end_cursor":{"type":"string"},"has_next_page":{"type":"boolean"},"has_previous_page":{"type":"boolean"},"start_cursor":{"type":"string"}},"required":["has_next_page","has_previous_page"],"type":"object"},"resources":{"items":{"additionalProperties":false,"properties":{"description":{"type":"string"},"forks_count":{"type":"integer"},"full_path":{"type":"string"},"icon":{"type":"string"},"id":{"type":"string"},"latest_released_at":{"type":"string"},"latest_version_name":{"type":"string"},"name":{"type":"string"},"open_issues_count":{"type":"integer"},"open_merge_requests_count":{"type":"integer"},"star_count":{"type":"integer"},"web_url":{"type":"string"}},"required":["id","name","full_path","web_url","star_count","forks_count","open_issues_count","open_merge_requests_count"],"type":"object"},"type":["null","array"]}},"required":["resources","pagination"],"type":"object"}
```

</details>

### gitlab_ci_variable

**CI Variable**

Use {"action":"list","params":{...}}; only top-level keys are action and params.
Action params schema: gitlab://tools/gitlab_ci_variable.<action>.

Manage GitLab CI/CD variables at instance, group, and project scope. Delete actions are irreversible.
When to use: define / rotate / unmask / scope CI/CD variables at project, group, or instance level, both regular and secret (masked / masked_and_hidden), with environment scoping for per-env values.
NOT for: linting CI YAML or browsing CI templates (use gitlab_template), pipeline runs or schedules (use gitlab_pipeline), feature flags (use gitlab_feature_flags), per-deployment env metadata (use gitlab_environment), GitLab instance settings (use gitlab_admin).

Returns:
- list / group_list / instance_list: arrays of variable objects {key, value (or hidden), variable_type, protected, masked, raw, environment_scope, description} with pagination.
- get / create / update / group_get / group_create / group_update / instance_get / instance_create / instance_update: single variable object.
- delete / group_delete / instance_delete: {success, message}.
Errors: 404 (hint: a (key, environment_scope) pair must exist for get/update/delete — supply environment_scope when the variable is env-scoped), 403 (hint: project requires Maintainer+, group requires Owner, instance requires admin), 400 (hint: variable_type ∈ env_var/file; masked requires single-line non-empty value matching GitLab's masking rules).

Param conventions: * = required. Project-scoped actions need project_id*, group-scoped need group_id*, instance-scoped need no ID. Common optional params: variable_type, protected, masked, raw, environment_scope.

Project variables:
- list: project_id*
- get / delete: project_id*, key*, environment_scope
- create: project_id*, key*, value*, description, variable_type, protected, masked, masked_and_hidden, raw, environment_scope
- update: project_id*, key*, value, description, variable_type, protected, masked, raw, environment_scope

Group variables (group_*):
- group_list: group_id*
- group_get / group_delete: group_id*, key*
- group_create: group_id*, key*, value*, description, variable_type, protected, masked, raw, environment_scope
- group_update: group_id*, key*, value, description, variable_type, protected, masked, raw, environment_scope

Instance variables (instance_*):
- instance_list: (no params)
- instance_get / instance_delete: key*
- instance_create: key*, value*, description, variable_type, protected, masked, raw
- instance_update: key*, value, description, variable_type, protected, masked, raw

See also: gitlab_pipeline (pipeline operations), gitlab_template (CI lint)

Annotations: readOnly=false, destructive=true, idempotent=false, openWorld=true

**Action Output Schemas:**

<details><summary>create</summary>

```json
{"additionalProperties":false,"properties":{"description":{"type":"string"},"environment_scope":{"type":"string"},"hidden":{"type":"boolean"},"key":{"type":"string"},"masked":{"type":"boolean"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"protected":{"type":"boolean"},"raw":{"type":"boolean"},"value":{"type":"string"},"variable_type":{"type":"string"}},"required":["key","value","variable_type","protected","masked","hidden","raw","environment_scope","description"],"type":"object"}
```

</details>

<details><summary>delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>get</summary>

```json
{"additionalProperties":false,"properties":{"description":{"type":"string"},"environment_scope":{"type":"string"},"hidden":{"type":"boolean"},"key":{"type":"string"},"masked":{"type":"boolean"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"protected":{"type":"boolean"},"raw":{"type":"boolean"},"value":{"type":"string"},"variable_type":{"type":"string"}},"required":["key","value","variable_type","protected","masked","hidden","raw","environment_scope","description"],"type":"object"}
```

</details>

<details><summary>group_create</summary>

```json
{"additionalProperties":false,"properties":{"description":{"type":"string"},"environment_scope":{"type":"string"},"hidden":{"type":"boolean"},"key":{"type":"string"},"masked":{"type":"boolean"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"protected":{"type":"boolean"},"raw":{"type":"boolean"},"value":{"type":"string"},"variable_type":{"type":"string"}},"required":["key","value","variable_type","protected","masked","hidden","raw","environment_scope","description"],"type":"object"}
```

</details>

<details><summary>group_delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>group_get</summary>

```json
{"additionalProperties":false,"properties":{"description":{"type":"string"},"environment_scope":{"type":"string"},"hidden":{"type":"boolean"},"key":{"type":"string"},"masked":{"type":"boolean"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"protected":{"type":"boolean"},"raw":{"type":"boolean"},"value":{"type":"string"},"variable_type":{"type":"string"}},"required":["key","value","variable_type","protected","masked","hidden","raw","environment_scope","description"],"type":"object"}
```

</details>

<details><summary>group_list</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"},"variables":{"items":{"additionalProperties":false,"properties":{"description":{"type":"string"},"environment_scope":{"type":"string"},"hidden":{"type":"boolean"},"key":{"type":"string"},"masked":{"type":"boolean"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"protected":{"type":"boolean"},"raw":{"type":"boolean"},"value":{"type":"string"},"variable_type":{"type":"string"}},"required":["key","value","variable_type","protected","masked","hidden","raw","environment_scope","description"],"type":"object"},"type":["null","array"]}},"required":["variables","pagination"],"type":"object"}
```

</details>

<details><summary>group_update</summary>

```json
{"additionalProperties":false,"properties":{"description":{"type":"string"},"environment_scope":{"type":"string"},"hidden":{"type":"boolean"},"key":{"type":"string"},"masked":{"type":"boolean"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"protected":{"type":"boolean"},"raw":{"type":"boolean"},"value":{"type":"string"},"variable_type":{"type":"string"}},"required":["key","value","variable_type","protected","masked","hidden","raw","environment_scope","description"],"type":"object"}
```

</details>

<details><summary>instance_create</summary>

```json
{"additionalProperties":false,"properties":{"description":{"type":"string"},"key":{"type":"string"},"masked":{"type":"boolean"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"protected":{"type":"boolean"},"raw":{"type":"boolean"},"value":{"type":"string"},"variable_type":{"type":"string"}},"required":["key","value","variable_type","protected","masked","raw","description"],"type":"object"}
```

</details>

<details><summary>instance_delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>instance_get</summary>

```json
{"additionalProperties":false,"properties":{"description":{"type":"string"},"key":{"type":"string"},"masked":{"type":"boolean"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"protected":{"type":"boolean"},"raw":{"type":"boolean"},"value":{"type":"string"},"variable_type":{"type":"string"}},"required":["key","value","variable_type","protected","masked","raw","description"],"type":"object"}
```

</details>

<details><summary>instance_list</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"},"variables":{"items":{"additionalProperties":false,"properties":{"description":{"type":"string"},"key":{"type":"string"},"masked":{"type":"boolean"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"protected":{"type":"boolean"},"raw":{"type":"boolean"},"value":{"type":"string"},"variable_type":{"type":"string"}},"required":["key","value","variable_type","protected","masked","raw","description"],"type":"object"},"type":["null","array"]}},"required":["variables","pagination"],"type":"object"}
```

</details>

<details><summary>instance_update</summary>

```json
{"additionalProperties":false,"properties":{"description":{"type":"string"},"key":{"type":"string"},"masked":{"type":"boolean"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"protected":{"type":"boolean"},"raw":{"type":"boolean"},"value":{"type":"string"},"variable_type":{"type":"string"}},"required":["key","value","variable_type","protected","masked","raw","description"],"type":"object"}
```

</details>

<details><summary>list</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"},"variables":{"items":{"additionalProperties":false,"properties":{"description":{"type":"string"},"environment_scope":{"type":"string"},"hidden":{"type":"boolean"},"key":{"type":"string"},"masked":{"type":"boolean"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"protected":{"type":"boolean"},"raw":{"type":"boolean"},"value":{"type":"string"},"variable_type":{"type":"string"}},"required":["key","value","variable_type","protected","masked","hidden","raw","environment_scope","description"],"type":"object"},"type":["null","array"]}},"required":["variables","pagination"],"type":"object"}
```

</details>

<details><summary>update</summary>

```json
{"additionalProperties":false,"properties":{"description":{"type":"string"},"environment_scope":{"type":"string"},"hidden":{"type":"boolean"},"key":{"type":"string"},"masked":{"type":"boolean"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"protected":{"type":"boolean"},"raw":{"type":"boolean"},"value":{"type":"string"},"variable_type":{"type":"string"}},"required":["key","value","variable_type","protected","masked","hidden","raw","environment_scope","description"],"type":"object"}
```

</details>

### gitlab_custom_emoji

**Custom Emoji**

Use {"action":"list","params":{...}}; only top-level keys are action and params.
Action params schema: gitlab://tools/gitlab_custom_emoji.<action>.

Manage group-level custom emoji via GraphQL. Delete is destructive: existing reactions using the emoji remain in the database but render as :name: text. The underlying GitLab API requires a Premium/Ultimate plan on the target instance (server enforces it with 403); the tool itself is always registered and is not gated by GITLAB_ENTERPRISE.
When to use: list, add, or remove the custom emoji available to a group's projects (e.g. company logos, team mascots) used as reactions on issues/MRs/notes.
NOT for: posting or removing a reaction on an issue/MR/snippet/commit/note (use the `emoji_issue_*` / `emoji_mr_*` / `emoji_snippet_*` actions on gitlab_issue, gitlab_merge_request, or gitlab_snippet), Unicode emoji (built-in, no action required), instance-level emoji (not supported by GitLab).

Returns:
- list: {nodes: [{id, name, url, external (bool), created_at, user_permissions: {delete}}], page_info: {end_cursor, has_next_page}}.
- create: the created node {id, name, url, external, created_at}.
- delete: {success: bool, message: string}.
Errors: 404 not found (hint: check group_path or id GID), 403 forbidden (hint: requires Maintainer+ on the group and Premium/Ultimate), 400 invalid params (hint: name must not contain colons; url must be a publicly reachable image).

Param conventions: * = required. id format = GID (gid://gitlab/CustomEmoji/123). group_path = full namespace path (e.g. mygroup or mygroup/subgroup).

- list: group_path*, first (max 100), after (cursor)
- create: group_path*, name* (no colons), url* (HTTPS image URL)
- delete: id*

See also: gitlab_group (group settings and membership), gitlab_issue / gitlab_merge_request / gitlab_snippet (post reactions using the emoji).

Annotations: readOnly=false, destructive=true, idempotent=false, openWorld=true

**Action Output Schemas:**

<details><summary>create</summary>

```json
{"additionalProperties":false,"properties":{"emoji":{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"external":{"type":"boolean"},"id":{"type":"string"},"name":{"type":"string"},"url":{"type":"string"}},"required":["id","name","url","external"],"type":"object"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["emoji"],"type":"object"}
```

</details>

<details><summary>delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>list</summary>

```json
{"additionalProperties":false,"properties":{"emoji":{"items":{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"external":{"type":"boolean"},"id":{"type":"string"},"name":{"type":"string"},"url":{"type":"string"}},"required":["id","name","url","external"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"end_cursor":{"type":"string"},"has_next_page":{"type":"boolean"},"has_previous_page":{"type":"boolean"},"start_cursor":{"type":"string"}},"required":["has_next_page","has_previous_page"],"type":"object"}},"required":["emoji","pagination"],"type":"object"}
```

</details>

### gitlab_discover_project

**Discover Project**

Resolve a full git remote URL to a GitLab project and return its project_id and metadata. Read-only; performs a lookup against the GitLab Projects API; no side effects.

When to use: only when the user or workspace provides a complete git remote URL from .git/config ([remote "origin"] url = ...) or from 'git remote -v'. If the prompt already provides a project path such as group/project or a numeric project ID, pass that value directly as params.project_id to the requested GitLab tool instead of calling discovery. Do not synthesize, guess, or add .git to a project path to create a remote URL.
NOT for: searching projects by name (use gitlab_search action=projects), listing a user's projects (use gitlab_project action=list_user_projects), verifying GitLab connectivity or authentication (use gitlab_server action=health_check), or pre-checking workflows where project_id is already known.

IMPORTANT: pass the complete URL exactly as it appears — do NOT strip the git@ prefix from SSH URLs. Supported formats (a URL scheme or git@ user prefix is required):
- HTTPS: https://gitlab.example.com/group/project.git
- SSH shorthand: git@gitlab.example.com:group/project.git
- SSH protocol: ssh://git@gitlab.example.com/group/project.git

Returns: {id, name, path, path_with_namespace, web_url, description, default_branch, visibility, http_url_to_repo, ssh_url_to_repo, extracted_path}. Errors: 404 not found (hint: project may be private — verify token permissions), 403 forbidden (hint: token lacks read_api scope).

See also: gitlab_project (full project CRUD/settings once id is known), gitlab_server (connectivity and version checks), gitlab_search (find projects by query).

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

### gitlab_environment

**Environment**

Use {"action":"list","params":{...}}; only top-level keys are action and params.
Action params schema: gitlab://tools/gitlab_environment.<action>.

Manage GitLab deployment environments, protected environments, freeze (deploy block) periods, and the deployment record audit trail. Delete and stop are destructive (stop terminates the running env; force=true skips on-stop jobs).
When to use: define/update environments (production, staging, review/*), restrict who can deploy via protected environments, schedule deploy freezes, audit deployment history, approve/reject deployments awaiting manual gate.
NOT for: CI/CD variables scoped to environments (use gitlab_ci_variable), pipelines/jobs (use gitlab_pipeline / gitlab_job), feature flag rollout strategies (use gitlab_feature_flags).

Behavior:
- Idempotent reads: list / get / protected_list / protected_get / freeze_list / freeze_get / deployment_list / deployment_get / deployment_merge_requests.
- update / protected_update / freeze_update / deployment_update are idempotent (same input → same state). create / protected_protect / freeze_create / deployment_create are NON-idempotent on duplicate (project_id, name) — return 409. deployment_approve_or_reject is single-shot per (deployment_id, user) and cannot be reversed.
- Side effects: stop runs the on-stop CI job (unless force=true) and terminates any review-app resources; deployment_approve_or_reject may release queued CI jobs awaiting a manual gate; freeze_create immediately blocks deploys that match the cron window.
- Destructive: delete and stop are destructive — stop cannot be reversed without re-deploying; deployment_delete removes the deployment audit record (history loss).

Returns: resource object (environment / protection / freeze / deployment) for *_get/*_create/*_update/*_protect; paginated array for *_list; updated deployment with approval state for deployment_approve_or_reject; MR list for deployment_merge_requests; {success, message} for *_delete/*_unprotect/stop.
Errors: 404 not found, 403 forbidden (hint: protect/unprotect require Maintainer+), 400 invalid params (hint: tier ∈ production/staging/testing/development/other; freeze cron timezone must be valid TZ name).

Param conventions: * = required. All actions need project_id*. environment_id is the numeric ID returned by list/create.

Environments:
- list: project_id*, name, search, states (available/stopped/stopping), page, per_page
- get / delete: project_id*, environment_id*
- create: project_id*, name*, description, external_url, tier (production/staging/testing/development/other)
- update: project_id*, environment_id*, name, description, external_url, tier
- stop: project_id*, environment_id*, force (bool) — force skips on-stop jobs

Protected environments:
- protected_list: project_id*, page, per_page
- protected_get / protected_unprotect: project_id*, environment* (environment name; name is accepted as an alias)
- protected_protect: project_id*, name*, deploy_access_levels, approval_rules
- protected_update: project_id*, environment*, name, deploy_access_levels, approval_rules

Freeze periods (cron expressions):
- freeze_list: project_id*, page, per_page
- freeze_get / freeze_delete: project_id*, freeze_period_id*
- freeze_create: project_id*, freeze_start* (cron, e.g. '0 23 * * 5'), freeze_end* (cron), cron_timezone
- freeze_update: project_id*, freeze_period_id*, freeze_start, freeze_end, cron_timezone

Deployments (immutable history records):
- deployment_list: project_id*, order_by, sort, environment, status, page, per_page
- deployment_get / deployment_delete: project_id*, deployment_id*
- deployment_create: project_id*, environment*, ref*, sha*, tag (bool), status (created/running/success/failed/canceled)
- deployment_update: project_id*, deployment_id*, status*
- deployment_approve_or_reject: project_id*, deployment_id*, status* (approved/rejected), comment
- deployment_merge_requests: project_id*, deployment_id*, state, order_by, sort, page, per_page

See also: gitlab_pipeline / gitlab_job (CI runs deploying to environments), gitlab_ci_variable (env-scoped variables), gitlab_feature_flags (env-scoped strategies).

Annotations: readOnly=false, destructive=true, idempotent=false, openWorld=true

**Action Output Schemas:**

<details><summary>create</summary>

```json
{"additionalProperties":false,"properties":{"auto_stop_at":{"type":"string"},"created_at":{"type":"string"},"description":{"type":"string"},"external_url":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"slug":{"type":"string"},"state":{"type":"string"},"tier":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","name","slug","state"],"type":"object"}
```

</details>

<details><summary>delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>deployment_approve_or_reject</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["message"],"type":"object"}
```

</details>

<details><summary>deployment_create</summary>

```json
{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"environment_name":{"type":"string"},"id":{"type":"integer"},"iid":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"ref":{"type":"string"},"sha":{"type":"string"},"status":{"type":"string"},"updated_at":{"type":"string"},"user_name":{"type":"string"}},"required":["id","iid","ref","sha","status"],"type":"object"}
```

</details>

<details><summary>deployment_delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>deployment_get</summary>

```json
{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"environment_name":{"type":"string"},"id":{"type":"integer"},"iid":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"ref":{"type":"string"},"sha":{"type":"string"},"status":{"type":"string"},"updated_at":{"type":"string"},"user_name":{"type":"string"}},"required":["id","iid","ref","sha","status"],"type":"object"}
```

</details>

<details><summary>deployment_list</summary>

```json
{"additionalProperties":false,"properties":{"deployments":{"items":{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"environment_name":{"type":"string"},"id":{"type":"integer"},"iid":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"ref":{"type":"string"},"sha":{"type":"string"},"status":{"type":"string"},"updated_at":{"type":"string"},"user_name":{"type":"string"}},"required":["id","iid","ref","sha","status"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["deployments","pagination"],"type":"object"}
```

</details>

<details><summary>deployment_merge_requests</summary>

```json
{"additionalProperties":false,"properties":{"merge_requests":{"items":{"additionalProperties":false,"properties":{"author":{"type":"string"},"merge_request_iid":{"type":"integer"},"merged_at":{"type":"string"},"source_branch":{"type":"string"},"state":{"type":"string"},"target_branch":{"type":"string"},"title":{"type":"string"},"web_url":{"type":"string"}},"required":["merge_request_iid","title","state","author","source_branch","target_branch","web_url"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["merge_requests","pagination"],"type":"object"}
```

</details>

<details><summary>deployment_update</summary>

```json
{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"environment_name":{"type":"string"},"id":{"type":"integer"},"iid":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"ref":{"type":"string"},"sha":{"type":"string"},"status":{"type":"string"},"updated_at":{"type":"string"},"user_name":{"type":"string"}},"required":["id","iid","ref","sha","status"],"type":"object"}
```

</details>

<details><summary>freeze_create</summary>

```json
{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"cron_timezone":{"type":"string"},"freeze_end":{"type":"string"},"freeze_start":{"type":"string"},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"updated_at":{"type":"string"}},"required":["id","freeze_start","freeze_end","cron_timezone"],"type":"object"}
```

</details>

<details><summary>freeze_delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>freeze_get</summary>

```json
{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"cron_timezone":{"type":"string"},"freeze_end":{"type":"string"},"freeze_start":{"type":"string"},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"updated_at":{"type":"string"}},"required":["id","freeze_start","freeze_end","cron_timezone"],"type":"object"}
```

</details>

<details><summary>freeze_list</summary>

```json
{"additionalProperties":false,"properties":{"freeze_periods":{"items":{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"cron_timezone":{"type":"string"},"freeze_end":{"type":"string"},"freeze_start":{"type":"string"},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"updated_at":{"type":"string"}},"required":["id","freeze_start","freeze_end","cron_timezone"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["freeze_periods","pagination"],"type":"object"}
```

</details>

<details><summary>freeze_update</summary>

```json
{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"cron_timezone":{"type":"string"},"freeze_end":{"type":"string"},"freeze_start":{"type":"string"},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"updated_at":{"type":"string"}},"required":["id","freeze_start","freeze_end","cron_timezone"],"type":"object"}
```

</details>

<details><summary>get</summary>

```json
{"additionalProperties":false,"properties":{"auto_stop_at":{"type":"string"},"created_at":{"type":"string"},"description":{"type":"string"},"external_url":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"slug":{"type":"string"},"state":{"type":"string"},"tier":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","name","slug","state"],"type":"object"}
```

</details>

<details><summary>list</summary>

```json
{"additionalProperties":false,"properties":{"environments":{"items":{"additionalProperties":false,"properties":{"auto_stop_at":{"type":"string"},"created_at":{"type":"string"},"description":{"type":"string"},"external_url":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"slug":{"type":"string"},"state":{"type":"string"},"tier":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","name","slug","state"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["environments","pagination"],"type":"object"}
```

</details>

<details><summary>protected_get</summary>

```json
{"additionalProperties":false,"properties":{"approval_rules":{"items":{"additionalProperties":false,"properties":{"access_level":{"type":"integer"},"access_level_description":{"type":"string"},"group_id":{"type":"integer"},"group_inheritance_type":{"type":"integer"},"id":{"type":"integer"},"required_approvals":{"type":"integer"},"user_id":{"type":"integer"}},"required":["id","access_level","access_level_description","required_approvals"],"type":"object"},"type":["null","array"]},"deploy_access_levels":{"items":{"additionalProperties":false,"properties":{"access_level":{"type":"integer"},"access_level_description":{"type":"string"},"group_id":{"type":"integer"},"group_inheritance_type":{"type":"integer"},"id":{"type":"integer"},"user_id":{"type":"integer"}},"required":["id","access_level","access_level_description"],"type":"object"},"type":["null","array"]},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"required_approval_count":{"type":"integer"}},"required":["name","deploy_access_levels","required_approval_count","approval_rules"],"type":"object"}
```

</details>

<details><summary>protected_list</summary>

```json
{"additionalProperties":false,"properties":{"environments":{"items":{"additionalProperties":false,"properties":{"approval_rules":{"items":{"additionalProperties":false,"properties":{"access_level":{"type":"integer"},"access_level_description":{"type":"string"},"group_id":{"type":"integer"},"group_inheritance_type":{"type":"integer"},"id":{"type":"integer"},"required_approvals":{"type":"integer"},"user_id":{"type":"integer"}},"required":["id","access_level","access_level_description","required_approvals"],"type":"object"},"type":["null","array"]},"deploy_access_levels":{"items":{"additionalProperties":false,"properties":{"access_level":{"type":"integer"},"access_level_description":{"type":"string"},"group_id":{"type":"integer"},"group_inheritance_type":{"type":"integer"},"id":{"type":"integer"},"user_id":{"type":"integer"}},"required":["id","access_level","access_level_description"],"type":"object"},"type":["null","array"]},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"required_approval_count":{"type":"integer"}},"required":["name","deploy_access_levels","required_approval_count","approval_rules"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["environments","pagination"],"type":"object"}
```

</details>

<details><summary>protected_protect</summary>

```json
{"additionalProperties":false,"properties":{"approval_rules":{"items":{"additionalProperties":false,"properties":{"access_level":{"type":"integer"},"access_level_description":{"type":"string"},"group_id":{"type":"integer"},"group_inheritance_type":{"type":"integer"},"id":{"type":"integer"},"required_approvals":{"type":"integer"},"user_id":{"type":"integer"}},"required":["id","access_level","access_level_description","required_approvals"],"type":"object"},"type":["null","array"]},"deploy_access_levels":{"items":{"additionalProperties":false,"properties":{"access_level":{"type":"integer"},"access_level_description":{"type":"string"},"group_id":{"type":"integer"},"group_inheritance_type":{"type":"integer"},"id":{"type":"integer"},"user_id":{"type":"integer"}},"required":["id","access_level","access_level_description"],"type":"object"},"type":["null","array"]},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"required_approval_count":{"type":"integer"}},"required":["name","deploy_access_levels","required_approval_count","approval_rules"],"type":"object"}
```

</details>

<details><summary>protected_unprotect</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>protected_update</summary>

```json
{"additionalProperties":false,"properties":{"approval_rules":{"items":{"additionalProperties":false,"properties":{"access_level":{"type":"integer"},"access_level_description":{"type":"string"},"group_id":{"type":"integer"},"group_inheritance_type":{"type":"integer"},"id":{"type":"integer"},"required_approvals":{"type":"integer"},"user_id":{"type":"integer"}},"required":["id","access_level","access_level_description","required_approvals"],"type":"object"},"type":["null","array"]},"deploy_access_levels":{"items":{"additionalProperties":false,"properties":{"access_level":{"type":"integer"},"access_level_description":{"type":"string"},"group_id":{"type":"integer"},"group_inheritance_type":{"type":"integer"},"id":{"type":"integer"},"user_id":{"type":"integer"}},"required":["id","access_level","access_level_description"],"type":"object"},"type":["null","array"]},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"required_approval_count":{"type":"integer"}},"required":["name","deploy_access_levels","required_approval_count","approval_rules"],"type":"object"}
```

</details>

<details><summary>stop</summary>

```json
{"additionalProperties":false,"properties":{"auto_stop_at":{"type":"string"},"created_at":{"type":"string"},"description":{"type":"string"},"external_url":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"slug":{"type":"string"},"state":{"type":"string"},"tier":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","name","slug","state"],"type":"object"}
```

</details>

<details><summary>update</summary>

```json
{"additionalProperties":false,"properties":{"auto_stop_at":{"type":"string"},"created_at":{"type":"string"},"description":{"type":"string"},"external_url":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"slug":{"type":"string"},"state":{"type":"string"},"tier":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","name","slug","state"],"type":"object"}
```

</details>

### gitlab_feature_flags

**Feature Flags**

Use {"action":"feature_flag_create","params":{...}}; only top-level keys are action and params.
Action params schema: gitlab://tools/gitlab_feature_flags.<action>.
Action guidance:
- ff_user_list_delete: Read, update, or delete a feature flag user list by its user_list_iid returned from list or create operations.
- ff_user_list_get: Read, update, or delete a feature flag user list by its user_list_iid returned from list or create operations.
- ff_user_list_update: Read, update, or delete a feature flag user list by its user_list_iid returned from list or create operations.
Parameter guidance:
- ff_user_list_delete.user_list_iid: feature_flag_user_list_iid; source: Use the iid/user_list_iid returned by ff_user_list_list or ff_user_list_create.; avoid: Do not use the user list name as user_list_iid., The ID is project-scoped and distinct from the feature flag name.
- ff_user_list_get.user_list_iid: feature_flag_user_list_iid; source: Use the iid/user_list_iid returned by ff_user_list_list or ff_user_list_create.; avoid: Do not use the user list name as user_list_iid., The ID is project-scoped and distinct from the feature flag name.
- ff_user_list_update.user_list_iid: feature_flag_user_list_iid; source: Use the iid/user_list_iid returned by ff_user_list_list or ff_user_list_create.; avoid: Do not use the user list name as user_list_iid., The ID is project-scoped and distinct from the feature flag name.

Manage project feature flags and feature-flag user lists for gradual rollouts. Delete is destructive; setting active=false disables the flag but preserves history.
When to use: define rollout strategies (percentage, user-targeted, environment-scoped) for a project's feature flags, and manage the user lists referenced by `gitlabUserList` strategies.
NOT for: GitLab instance-level feature flags (admin only — use gitlab_admin), environment definitions or protection (use gitlab_environment), code branching (use gitlab_branch), CI/CD variables (use gitlab_ci_variable).

Returns:
- *_list: array with pagination (page, per_page, total, next_page).
- *_get / *_create / *_update: the resource object (flag includes strategies and scopes; user list includes user_xids).
- *_delete: {success: bool, message: string}.
Errors: 404 not found, 403 forbidden (hint: requires Developer+ role), 400 invalid params (hint: strategies/scopes JSON shape).

Param conventions: * = required. All actions need project_id*. version = `new_version_flag` (legacy `legacy_flag` deprecated).

strategies shape: [{name, parameters, scopes: [{environment_scope}]}] where name ∈ {default, gradualRolloutUserId, userWithId, flexibleRollout, gitlabUserList}. parameters per strategy: gradualRolloutUserId={groupId, percentage}; userWithId={userIds}; flexibleRollout={groupId, rollout, stickiness}; gitlabUserList={userListId}.

Feature flags (feature_flag_*):
- feature_flag_list: project_id*, scope (enabled/disabled), page, per_page
- feature_flag_get / feature_flag_delete: project_id*, name*
- feature_flag_create: project_id*, name*, version*, description, active (bool), strategies
- feature_flag_update: project_id*, name*, description, active (bool), strategies

User lists (ff_user_list_*) — named sets of user IDs referenced by gitlabUserList strategies:
- ff_user_list_list: project_id*, page, per_page
- ff_user_list_get / ff_user_list_delete: project_id*, user_list_iid*
- ff_user_list_create: project_id*, name*, user_xids* (comma-separated user IDs)
- ff_user_list_update: project_id*, user_list_iid*, name, user_xids

See also: gitlab_environment (environment scopes referenced by strategies), gitlab_admin (instance-level feature flags), gitlab_project (project membership and settings).

Annotations: readOnly=false, destructive=true, idempotent=false, openWorld=true

**Action Output Schemas:**

<details><summary>feature_flag_create</summary>

```json
{"additionalProperties":false,"properties":{"active":{"type":"boolean"},"created_at":{"type":"string"},"description":{"type":"string"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"strategies":{"items":{"additionalProperties":false,"properties":{"id":{"type":"integer"},"name":{"type":"string"},"parameters":{"additionalProperties":false,"properties":{"group_id":{"type":"string"},"percentage":{"type":"string"},"rollout":{"type":"string"},"stickiness":{"type":"string"},"user_ids":{"type":"string"}},"type":["null","object"]},"scopes":{"items":{"additionalProperties":false,"properties":{"environment_scope":{"type":"string"},"id":{"type":"integer"}},"required":["id","environment_scope"],"type":"object"},"type":["null","array"]}},"required":["id","name"],"type":"object"},"type":["null","array"]},"updated_at":{"type":"string"},"version":{"type":"string"}},"required":["name","description","active","version"],"type":"object"}
```

</details>

<details><summary>feature_flag_delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>feature_flag_get</summary>

```json
{"additionalProperties":false,"properties":{"active":{"type":"boolean"},"created_at":{"type":"string"},"description":{"type":"string"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"strategies":{"items":{"additionalProperties":false,"properties":{"id":{"type":"integer"},"name":{"type":"string"},"parameters":{"additionalProperties":false,"properties":{"group_id":{"type":"string"},"percentage":{"type":"string"},"rollout":{"type":"string"},"stickiness":{"type":"string"},"user_ids":{"type":"string"}},"type":["null","object"]},"scopes":{"items":{"additionalProperties":false,"properties":{"environment_scope":{"type":"string"},"id":{"type":"integer"}},"required":["id","environment_scope"],"type":"object"},"type":["null","array"]}},"required":["id","name"],"type":"object"},"type":["null","array"]},"updated_at":{"type":"string"},"version":{"type":"string"}},"required":["name","description","active","version"],"type":"object"}
```

</details>

<details><summary>feature_flag_list</summary>

```json
{"additionalProperties":false,"properties":{"feature_flags":{"items":{"additionalProperties":false,"properties":{"active":{"type":"boolean"},"created_at":{"type":"string"},"description":{"type":"string"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"strategies":{"items":{"additionalProperties":false,"properties":{"id":{"type":"integer"},"name":{"type":"string"},"parameters":{"additionalProperties":false,"properties":{"group_id":{"type":"string"},"percentage":{"type":"string"},"rollout":{"type":"string"},"stickiness":{"type":"string"},"user_ids":{"type":"string"}},"type":["null","object"]},"scopes":{"items":{"additionalProperties":false,"properties":{"environment_scope":{"type":"string"},"id":{"type":"integer"}},"required":["id","environment_scope"],"type":"object"},"type":["null","array"]}},"required":["id","name"],"type":"object"},"type":["null","array"]},"updated_at":{"type":"string"},"version":{"type":"string"}},"required":["name","description","active","version"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["feature_flags","pagination"],"type":"object"}
```

</details>

<details><summary>feature_flag_update</summary>

```json
{"additionalProperties":false,"properties":{"active":{"type":"boolean"},"created_at":{"type":"string"},"description":{"type":"string"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"strategies":{"items":{"additionalProperties":false,"properties":{"id":{"type":"integer"},"name":{"type":"string"},"parameters":{"additionalProperties":false,"properties":{"group_id":{"type":"string"},"percentage":{"type":"string"},"rollout":{"type":"string"},"stickiness":{"type":"string"},"user_ids":{"type":"string"}},"type":["null","object"]},"scopes":{"items":{"additionalProperties":false,"properties":{"environment_scope":{"type":"string"},"id":{"type":"integer"}},"required":["id","environment_scope"],"type":"object"},"type":["null","array"]}},"required":["id","name"],"type":"object"},"type":["null","array"]},"updated_at":{"type":"string"},"version":{"type":"string"}},"required":["name","description","active","version"],"type":"object"}
```

</details>

<details><summary>ff_user_list_create</summary>

```json
{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"id":{"type":"integer"},"iid":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"project_id":{"type":"integer"},"updated_at":{"type":"string"},"user_xids":{"type":"string"}},"required":["id","iid","project_id","name","user_xids"],"type":"object"}
```

</details>

<details><summary>ff_user_list_delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>ff_user_list_get</summary>

```json
{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"id":{"type":"integer"},"iid":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"project_id":{"type":"integer"},"updated_at":{"type":"string"},"user_xids":{"type":"string"}},"required":["id","iid","project_id","name","user_xids"],"type":"object"}
```

</details>

<details><summary>ff_user_list_list</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"},"user_lists":{"items":{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"id":{"type":"integer"},"iid":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"project_id":{"type":"integer"},"updated_at":{"type":"string"},"user_xids":{"type":"string"}},"required":["id","iid","project_id","name","user_xids"],"type":"object"},"type":["null","array"]}},"required":["user_lists","pagination"],"type":"object"}
```

</details>

<details><summary>ff_user_list_update</summary>

```json
{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"id":{"type":"integer"},"iid":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"project_id":{"type":"integer"},"updated_at":{"type":"string"},"user_xids":{"type":"string"}},"required":["id","iid","project_id","name","user_xids"],"type":"object"}
```

</details>

### gitlab_group

**Group**

Use {"action":"list","params":{...}}; only top-level keys are action and params.
Action params schema: gitlab://tools/gitlab_group.<action>.
Action guidance:
- badge_add: Add a group badge. Use group_id for group badge operations; do not use project_id. Use only when the task says group badge; project badge CRUD belongs to gitlab_project.
- badge_delete: Delete a group badge. Use group_id for group badge operations; do not use project_id. Use only when the task says group badge; project badge CRUD belongs to gitlab_project.
- badge_edit: Edit a group badge. Use group_id for group badge operations; do not use project_id. Use only when the task says group badge; project badge CRUD belongs to gitlab_project. Use the parameter name name for a new badge name; new_name is not supported.
- badge_get: Get a group badge. Use group_id for group badge operations; do not use project_id. Use only when the task says group badge; project badge CRUD belongs to gitlab_project.
- badge_list: List group badges. Use group_id for group badge operations; do not use project_id. Use only when the task says group badge; project badge CRUD belongs to gitlab_project.
- badge_preview: Preview a group badge. Use group_id for group badge operations; do not use project_id. Use only when the task says group badge; project badge CRUD belongs to gitlab_project.
Parameter guidance:
- badge_add.group_id: scope_group; source: Group that owns the badge.; avoid: Do not use project_id for group badge actions.
- badge_delete.group_id: scope_group; source: Group that owns the badge.; avoid: Do not use project_id for group badge actions.
- badge_edit.group_id: scope_group; source: Group that owns the badge.; avoid: Do not use project_id for group badge actions.
- badge_edit.name: badge_display_name; source: Optional replacement badge name. The parameter is named name.; avoid: Do not send new_name; badge_edit accepts name, link_url, and image_url.
- badge_get.group_id: scope_group; source: Group that owns the badge.; avoid: Do not use project_id for group badge actions.
- badge_list.group_id: scope_group; source: Group that owns the badge.; avoid: Do not use project_id for group badge actions.
- badge_preview.group_id: scope_group; source: Group that owns the badge.; avoid: Do not use project_id for group badge actions.

Manage GitLab groups: CRUD, subgroups, members, labels, milestones, webhooks, badges, boards, uploads, and import/export.
When to use: group-level operations (groups, subgroups, members, labels, milestones, boards, webhooks, badges, wikis, epics). NOT for: project-specific operations (use gitlab_project or gitlab_merge_request), user accounts (use gitlab_user), cross-project search (use gitlab_search).

Behavior:
- Idempotent reads: get / list / projects / members / subgroups / issues / search / *_list / *_get / hook_list / badge_list / group_label_list / group_milestone_list / group_board_list / release_list (Premium+ adds wiki_list / epic_list / protected_*_list / ldap_link_list / saml_link_list / service_account_*_list).
- update / *_update / *_edit / archive / unarchive are idempotent (same input → same state). create / *_create / hook_add are NON-idempotent (re-invocation creates a duplicate or returns 409).
- Side effects: group_member_add / group_member_share / group_member_edit may notify the invited user/group; hook_add / hook_edit trigger webhook deliveries; transfer_project moves repository data and re-permissions members; ldap/saml link mutations re-evaluate group membership on next sign-in (read-after-write may lag).
- Destructive: delete cascades to subgroups, projects, members, issues, MRs (irreversible when permanently_remove=true; restore window applies otherwise); hook_delete, badge_delete, group_label_delete, group_milestone_delete, group_board_delete, group_upload_delete_* are irreversible. Premium+ adds destructive: epic_delete, wiki_delete, protected_*_unprotect, ldap_link_delete*, saml_link_delete, service_account_delete, service_account_pat_revoke. archive is reversible via unarchive.

Returns: JSON with resource data. Lists include pagination (page, per_page, total, next_page). Void actions return confirmation.
Errors: 404 (hint: group_id can be numeric ID or URL-encoded full path), 403 (hint: most mutations require Maintainer+; group_member_share, transfer_project and service_account_* require Owner), 400 (hint: visibility ∈ private/internal/public; permanently_remove=true requires full_path).

Param conventions: * = required. Most actions need group_id* (numeric ID or URL-encoded path like 'group/subgroup'). List actions accept page, per_page.

Group CRUD:
- list: search, owned, top_level_only (no group_id needed)
- get: group_id*
- create: name*, path, description, visibility (private/internal/public), parent_id, request_access_enabled, lfs_enabled, default_branch
- update: group_id*, name, path, description, visibility, request_access_enabled, lfs_enabled, default_branch
- delete: group_id*, permanently_remove, full_path (required when permanently_remove=true)
- restore: group_id*
- archive / unarchive: group_id* (requires Owner role)
- search: query* (no group_id needed)
- transfer_project: group_id*, project_id*

Group queries:
- projects: group_id*, search, include_subgroups (recommended for hierarchies), archived, visibility, order_by, sort, simple, owned, starred, with_shared
- members: group_id*, query (filter name/username)
- subgroups: group_id*, search
- issues: group_id*, state, labels, milestone, scope, search, assignee_username, author_username

Webhooks (hook_*):
- hook_list: group_id*
- hook_get / hook_delete: group_id*, hook_id*
- hook_add: group_id*, url*, name, description, token, event booleans (push/tag_push/merge_requests/issues/note/job/pipeline/wiki_page/deployment/releases/subgroup/member_events), enable_ssl_verification, push_events_branch_filter
- hook_edit: group_id*, hook_id*, same params as hook_add

Badges (badge_*):
- badge_list: group_id*, name
- badge_get / badge_delete: group_id*, badge_id*
- badge_add / badge_preview: group_id*, link_url*, image_url*, name
- badge_edit: group_id*, badge_id*, link_url, image_url, name

Members (group_member_*):
- group_member_get: group_id*, user_id*
- group_member_get_inherited: group_id*, user_id* (includes inherited)
- group_member_add / group_member_edit: group_id*, user_id*, access_level*, expires_at
- group_member_remove: group_id*, user_id*
- group_member_share: group_id*, shared_with_group_id*, group_access*, expires_at
- group_member_unshare: group_id*, shared_with_group_id*

Labels (group_label_*):
- group_label_list: group_id*, search, with_counts, include_ancestor_groups, include_descendant_groups
- group_label_get / group_label_delete / group_label_subscribe / group_label_unsubscribe: group_id*, label_id*
- group_label_create: group_id*, name*, color*, description
- group_label_update: group_id*, label_id*, new_name, color, description

Group milestones (group_milestone_* — group scope only; use gitlab_project milestone_* for project milestones):
- group_milestone_list: group_id*, state, title, search, include_ancestors, include_descendants
- group_milestone_get / group_milestone_delete: group_id*, milestone_iid*
- group_milestone_create: group_id*, title*, description, start_date, due_date
- group_milestone_update: group_id*, milestone_iid*, title, description, start_date, due_date, state_event
- group_milestone_issues / group_milestone_merge_requests / group_milestone_burndown: group_id*, milestone_iid*

Boards (group_board_*):
- group_board_list: group_id*
- group_board_get / group_board_delete: group_id*, board_id*
- group_board_create: group_id*, name*
- group_board_update: group_id*, board_id*, name, assignee_id, milestone_id, labels, weight
- group_board_list_lists: group_id*, board_id*
- group_board_get_list / group_board_delete_list: group_id*, board_id*, list_id*
- group_board_create_list: group_id*, board_id*, label_id
- group_board_update_list: group_id*, board_id*, list_id*, position

Uploads:
- group_upload_list: group_id*
- group_upload_delete_by_id: group_id*, upload_id*
- group_upload_delete_by_secret: group_id*, secret*, filename*

Import/Export:
- group_relations_schedule / group_relations_list_status: group_id*
- group_export_schedule / group_export_download: group_id*
- group_import_file: name*, path*, file*, parent_id (no group_id)

Releases:
- release_list: group_id*, simple

Premium+ behavior notes (GITLAB_ENTERPRISE=true): service_account_pat_create returns the cleartext token only ONCE — store it immediately in a secure secrets manager and never log or echo it. service_account_delete and service_account_pat_revoke are irreversible.

Epics (Premium+ — GITLAB_ENTERPRISE=true. CRUD/notes/discussions use Work Items GraphQL API with full_path + iid. Only epic_get_links and epic boards use REST with group_id):

Epic discussions (epic_discussion_*): full_path*, epic_iid* for all. GraphQL pagination: first, after, last, before.
- epic_discussion_list / epic_discussion_get (+ discussion_id*)
- epic_discussion_create: body*
- epic_discussion_add_note: discussion_id*, body*
- epic_discussion_update_note: note_id*, body*
- epic_discussion_delete_note: note_id*

Epic CRUD (epic_*): full_path* for all.
- epic_list: state, search, author_username, label_name, confidential, sort, first, after, include_ancestors, include_descendants
- epic_get: epic_iid*
- epic_get_links: epic_iid* [REST]
- epic_create: title*, description, confidential, color, start_date, due_date, assignee_ids, label_ids, weight, health_status
- epic_update: epic_iid*, title, description, state_event, color, start_date, due_date, add_label_ids, remove_label_ids, assignee_ids, weight, health_status, status
- epic_delete: epic_iid*

Epic issues (epic_issue_*): full_path*, epic_iid* for all. GraphQL pagination: first, after, last, before.
- epic_issue_list
- epic_issue_assign / epic_issue_remove: child_project_path*, child_iid*
- epic_issue_update: child_id*, adjacent_id*, relative_position* (BEFORE/AFTER)

Epic notes (epic_note_*): full_path*, epic_iid* for all. GraphQL pagination: first, after, last, before.
- epic_note_list / epic_note_get (+ note_id*) / epic_note_delete (+ note_id*)
- epic_note_create: body*
- epic_note_update: note_id*, body*

Epic boards [Deprecated]:
- epic_board_list: group_id*
- epic_board_get: group_id*, board_id*

Group Wikis (Premium+):
- wiki_list: group_id*, with_content
- wiki_get: group_id*, slug*, render_html, version
- wiki_create: group_id*, title*, content*, format (markdown/rdoc/asciidoc/org)
- wiki_edit: group_id*, slug*, title, content, format
- wiki_delete: group_id*, slug*

Protected Branches (Premium+):
- protected_branch_list: group_id*, search
- protected_branch_get / protected_branch_unprotect: group_id*, branch*
- protected_branch_protect: group_id*, name*, push_access_level, merge_access_level, unprotect_access_level, allow_force_push, code_owner_approval_required, allowed_to_push/merge/unprotect
- protected_branch_update: group_id*, branch*, name, allow_force_push, code_owner_approval_required, allowed_to_push/merge/unprotect

Protected Environments (Premium+):
- protected_env_list: group_id*
- protected_env_get / protected_env_unprotect: group_id*, environment*
- protected_env_protect: group_id*, name*, deploy_access_levels, required_approval_count, approval_rules
- protected_env_update: group_id*, environment*, name, deploy_access_levels, required_approval_count, approval_rules

LDAP Links (Premium+):
- ldap_link_list: group_id*
- ldap_link_add: group_id*, cn*, group_access* (int), provider*
- ldap_link_delete: group_id*, cn, filter, provider
- ldap_link_delete_for_provider: group_id*, provider*, cn*

SAML Links (Premium+):
- saml_link_list: group_id*
- saml_link_get / saml_link_delete: group_id*, saml_group_name*
- saml_link_add: group_id*, saml_group_name*, access_level* (int)

Service Accounts (Premium+):
- service_account_list: group_id*, order_by, sort
- service_account_create: group_id*, name*, username*
- service_account_update: group_id*, service_account_id*, name, username
- service_account_delete: group_id*, service_account_id*, hard_delete
- service_account_pat_list: group_id*, service_account_id*
- service_account_pat_create: group_id*, service_account_id*, name*, scopes* (array), expires_at (YYYY-MM-DD)
- service_account_pat_revoke: group_id*, service_account_id*, token_id*

Analytics (Premium+):
- analytics_issues_count / analytics_mr_count / analytics_members_count: group_path* (URL-encoded)

Credentials (Ultimate):
- credential_list_pats: group_id*, search, state (active/inactive), revoked
- credential_list_ssh_keys: group_id*
- credential_revoke_pat: group_id*, token_id*
- credential_delete_ssh_key: group_id*, key_id*

SSH Certificates (Premium+):
- ssh_cert_list: group_id*
- ssh_cert_create: group_id*, key*, title*
- ssh_cert_delete: group_id*, certificate_id*

Security Settings (Ultimate):
- security_settings_update: group_id*, secret_push_protection_enabled*, projects_to_exclude (array)


See also: gitlab_project (project-level), gitlab_user (user management), gitlab_search (cross-project search), gitlab_merge_request (MR workflows)

Annotations: readOnly=false, destructive=true, idempotent=false, openWorld=true

**Action Output Schemas:**

<details><summary>analytics_issues_count</summary>

```json
{"additionalProperties":false,"properties":{"group_path":{"type":"string"},"issues_count":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["group_path","issues_count"],"type":"object"}
```

</details>

<details><summary>analytics_members_count</summary>

```json
{"additionalProperties":false,"properties":{"group_path":{"type":"string"},"new_members_count":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["group_path","new_members_count"],"type":"object"}
```

</details>

<details><summary>analytics_mr_count</summary>

```json
{"additionalProperties":false,"properties":{"group_path":{"type":"string"},"merge_requests_count":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["group_path","merge_requests_count"],"type":"object"}
```

</details>

<details><summary>archive</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>badge_add</summary>

```json
{"additionalProperties":false,"properties":{"badge":{"additionalProperties":false,"properties":{"id":{"type":"integer"},"image_url":{"type":"string"},"kind":{"type":"string"},"link_url":{"type":"string"},"name":{"type":"string"},"rendered_image_url":{"type":"string"},"rendered_link_url":{"type":"string"}},"required":["id","link_url","image_url"],"type":"object"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["badge"],"type":"object"}
```

</details>

<details><summary>badge_delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>badge_edit</summary>

```json
{"additionalProperties":false,"properties":{"badge":{"additionalProperties":false,"properties":{"id":{"type":"integer"},"image_url":{"type":"string"},"kind":{"type":"string"},"link_url":{"type":"string"},"name":{"type":"string"},"rendered_image_url":{"type":"string"},"rendered_link_url":{"type":"string"}},"required":["id","link_url","image_url"],"type":"object"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["badge"],"type":"object"}
```

</details>

<details><summary>badge_get</summary>

```json
{"additionalProperties":false,"properties":{"badge":{"additionalProperties":false,"properties":{"id":{"type":"integer"},"image_url":{"type":"string"},"kind":{"type":"string"},"link_url":{"type":"string"},"name":{"type":"string"},"rendered_image_url":{"type":"string"},"rendered_link_url":{"type":"string"}},"required":["id","link_url","image_url"],"type":"object"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["badge"],"type":"object"}
```

</details>

<details><summary>badge_list</summary>

```json
{"additionalProperties":false,"properties":{"badges":{"items":{"additionalProperties":false,"properties":{"id":{"type":"integer"},"image_url":{"type":"string"},"kind":{"type":"string"},"link_url":{"type":"string"},"name":{"type":"string"},"rendered_image_url":{"type":"string"},"rendered_link_url":{"type":"string"}},"required":["id","link_url","image_url"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["badges","pagination"],"type":"object"}
```

</details>

<details><summary>badge_preview</summary>

```json
{"additionalProperties":false,"properties":{"badge":{"additionalProperties":false,"properties":{"id":{"type":"integer"},"image_url":{"type":"string"},"kind":{"type":"string"},"link_url":{"type":"string"},"name":{"type":"string"},"rendered_image_url":{"type":"string"},"rendered_link_url":{"type":"string"}},"required":["id","link_url","image_url"],"type":"object"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["badge"],"type":"object"}
```

</details>

<details><summary>create</summary>

```json
{"additionalProperties":false,"properties":{"avatar_url":{"type":"string"},"created_at":{"type":"string"},"default_branch":{"type":"string"},"description":{"type":"string"},"full_name":{"type":"string"},"full_path":{"type":"string"},"id":{"type":"integer"},"lfs_enabled":{"type":"boolean"},"marked_for_deletion_on":{"type":"string"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"parent_id":{"type":"integer"},"path":{"type":"string"},"project_creation_level":{"type":"string"},"request_access_enabled":{"type":"boolean"},"shared_runners_setting":{"type":"string"},"subgroup_creation_level":{"type":"string"},"visibility":{"type":"string"},"web_url":{"type":"string"}},"required":["id","name","path","full_path","visibility","web_url","request_access_enabled","lfs_enabled"],"type":"object"}
```

</details>

<details><summary>credential_delete_ssh_key</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>credential_list_pats</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"},"tokens":{"items":{"additionalProperties":false,"properties":{"active":{"type":"boolean"},"created_at":{"type":"string"},"description":{"type":"string"},"expires_at":{"type":"string"},"id":{"type":"integer"},"last_used_at":{"type":"string"},"name":{"type":"string"},"revoked":{"type":"boolean"},"scopes":{"items":{"type":"string"},"type":["null","array"]},"state":{"type":"string"},"user_id":{"type":"integer"}},"required":["id","name","revoked","user_id","active"],"type":"object"},"type":["null","array"]}},"required":["tokens","pagination"],"type":"object"}
```

</details>

<details><summary>credential_list_ssh_keys</summary>

```json
{"additionalProperties":false,"properties":{"keys":{"items":{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"expires_at":{"type":"string"},"id":{"type":"integer"},"key":{"type":"string"},"last_used_at":{"type":"string"},"title":{"type":"string"},"usage_type":{"type":"string"},"user_id":{"type":"integer"}},"required":["id","title","user_id"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["keys","pagination"],"type":"object"}
```

</details>

<details><summary>credential_revoke_pat</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>epic_board_get</summary>

```json
{"additionalProperties":false,"properties":{"id":{"type":"integer"},"labels":{"items":{"type":"string"},"type":["null","array"]},"lists":{"items":{"additionalProperties":false,"properties":{"id":{"type":"integer"},"label":{"type":"string"},"label_id":{"type":"integer"},"position":{"type":"integer"}},"required":["id","position"],"type":"object"},"type":["null","array"]},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["id","name"],"type":"object"}
```

</details>

<details><summary>epic_board_list</summary>

```json
{"additionalProperties":false,"properties":{"boards":{"items":{"additionalProperties":false,"properties":{"id":{"type":"integer"},"labels":{"items":{"type":"string"},"type":["null","array"]},"lists":{"items":{"additionalProperties":false,"properties":{"id":{"type":"integer"},"label":{"type":"string"},"label_id":{"type":"integer"},"position":{"type":"integer"}},"required":["id","position"],"type":"object"},"type":["null","array"]},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["id","name"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["boards","pagination"],"type":"object"}
```

</details>

<details><summary>epic_create</summary>

```json
{"additionalProperties":false,"properties":{"assignees":{"items":{"type":"string"},"type":["null","array"]},"author":{"type":"string"},"closed_at":{"type":"string"},"color":{"type":"string"},"confidential":{"type":"boolean"},"created_at":{"type":"string"},"description":{"type":"string"},"due_date":{"type":"string"},"health_status":{"type":"string"},"id":{"type":"integer"},"iid":{"type":"integer"},"labels":{"items":{"type":"string"},"type":["null","array"]},"linked_items":{"items":{"additionalProperties":false,"properties":{"iid":{"type":"integer"},"link_type":{"type":"string"},"path":{"type":"string"}},"required":["iid","link_type"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"parent_iid":{"type":"integer"},"parent_path":{"type":"string"},"start_date":{"type":"string"},"state":{"type":"string"},"status":{"type":"string"},"title":{"type":"string"},"type":{"type":"string"},"updated_at":{"type":"string"},"web_url":{"type":"string"},"weight":{"type":["null","integer"]}},"required":["id","iid","type","state","title"],"type":"object"}
```

</details>

<details><summary>epic_delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>epic_discussion_add_note</summary>

```json
{"additionalProperties":false,"properties":{"author":{"type":"string"},"body":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"system":{"type":"boolean"},"updated_at":{"type":"string"}},"required":["id","body","author","created_at","system"],"type":"object"}
```

</details>

<details><summary>epic_discussion_create</summary>

```json
{"additionalProperties":false,"properties":{"id":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"notes":{"items":{"additionalProperties":false,"properties":{"author":{"type":"string"},"body":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"system":{"type":"boolean"},"updated_at":{"type":"string"}},"required":["id","body","author","created_at","system"],"type":"object"},"type":["null","array"]}},"required":["id","notes"],"type":"object"}
```

</details>

<details><summary>epic_discussion_delete_note</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>epic_discussion_get</summary>

```json
{"additionalProperties":false,"properties":{"id":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"notes":{"items":{"additionalProperties":false,"properties":{"author":{"type":"string"},"body":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"system":{"type":"boolean"},"updated_at":{"type":"string"}},"required":["id","body","author","created_at","system"],"type":"object"},"type":["null","array"]}},"required":["id","notes"],"type":"object"}
```

</details>

<details><summary>epic_discussion_list</summary>

```json
{"additionalProperties":false,"properties":{"discussions":{"items":{"additionalProperties":false,"properties":{"id":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"notes":{"items":{"additionalProperties":false,"properties":{"author":{"type":"string"},"body":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"system":{"type":"boolean"},"updated_at":{"type":"string"}},"required":["id","body","author","created_at","system"],"type":"object"},"type":["null","array"]}},"required":["id","notes"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"end_cursor":{"type":"string"},"has_next_page":{"type":"boolean"},"has_previous_page":{"type":"boolean"},"start_cursor":{"type":"string"}},"required":["has_next_page","has_previous_page"],"type":"object"}},"required":["discussions","pagination"],"type":"object"}
```

</details>

<details><summary>epic_discussion_update_note</summary>

```json
{"additionalProperties":false,"properties":{"author":{"type":"string"},"body":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"system":{"type":"boolean"},"updated_at":{"type":"string"}},"required":["id","body","author","created_at","system"],"type":"object"}
```

</details>

<details><summary>epic_get</summary>

```json
{"additionalProperties":false,"properties":{"assignees":{"items":{"type":"string"},"type":["null","array"]},"author":{"type":"string"},"closed_at":{"type":"string"},"color":{"type":"string"},"confidential":{"type":"boolean"},"created_at":{"type":"string"},"description":{"type":"string"},"due_date":{"type":"string"},"health_status":{"type":"string"},"id":{"type":"integer"},"iid":{"type":"integer"},"labels":{"items":{"type":"string"},"type":["null","array"]},"linked_items":{"items":{"additionalProperties":false,"properties":{"iid":{"type":"integer"},"link_type":{"type":"string"},"path":{"type":"string"}},"required":["iid","link_type"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"parent_iid":{"type":"integer"},"parent_path":{"type":"string"},"start_date":{"type":"string"},"state":{"type":"string"},"status":{"type":"string"},"title":{"type":"string"},"type":{"type":"string"},"updated_at":{"type":"string"},"web_url":{"type":"string"},"weight":{"type":["null","integer"]}},"required":["id","iid","type","state","title"],"type":"object"}
```

</details>

<details><summary>epic_get_links</summary>

```json
{"additionalProperties":false,"properties":{"child_epics":{"items":{"additionalProperties":false,"properties":{"author":{"type":"string"},"confidential":{"type":"boolean"},"created_at":{"type":"string"},"id":{"type":"integer"},"iid":{"type":"integer"},"labels":{"items":{"type":"string"},"type":["null","array"]},"state":{"type":"string"},"title":{"type":"string"},"web_url":{"type":"string"}},"required":["id","iid","title","state"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["child_epics"],"type":"object"}
```

</details>

<details><summary>epic_issue_assign</summary>

```json
{"additionalProperties":false,"properties":{"child_gid":{"type":"string"},"epic_gid":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["epic_gid","child_gid"],"type":"object"}
```

</details>

<details><summary>epic_issue_list</summary>

```json
{"additionalProperties":false,"properties":{"issues":{"items":{"additionalProperties":false,"properties":{"author":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"string"},"iid":{"type":"integer"},"labels":{"items":{"type":"string"},"type":["null","array"]},"state":{"type":"string"},"title":{"type":"string"},"updated_at":{"type":"string"},"web_url":{"type":"string"}},"required":["id","iid","title","state"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"end_cursor":{"type":"string"},"has_next_page":{"type":"boolean"},"has_previous_page":{"type":"boolean"},"start_cursor":{"type":"string"}},"required":["has_next_page","has_previous_page"],"type":"object"}},"required":["issues","pagination"],"type":"object"}
```

</details>

<details><summary>epic_issue_remove</summary>

```json
{"additionalProperties":false,"properties":{"child_gid":{"type":"string"},"epic_gid":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["epic_gid","child_gid"],"type":"object"}
```

</details>

<details><summary>epic_issue_update</summary>

```json
{"additionalProperties":false,"properties":{"issues":{"items":{"additionalProperties":false,"properties":{"author":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"string"},"iid":{"type":"integer"},"labels":{"items":{"type":"string"},"type":["null","array"]},"state":{"type":"string"},"title":{"type":"string"},"updated_at":{"type":"string"},"web_url":{"type":"string"}},"required":["id","iid","title","state"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"end_cursor":{"type":"string"},"has_next_page":{"type":"boolean"},"has_previous_page":{"type":"boolean"},"start_cursor":{"type":"string"}},"required":["has_next_page","has_previous_page"],"type":"object"}},"required":["issues","pagination"],"type":"object"}
```

</details>

<details><summary>epic_list</summary>

```json
{"additionalProperties":false,"properties":{"epics":{"items":{"additionalProperties":false,"properties":{"assignees":{"items":{"type":"string"},"type":["null","array"]},"author":{"type":"string"},"closed_at":{"type":"string"},"color":{"type":"string"},"confidential":{"type":"boolean"},"created_at":{"type":"string"},"description":{"type":"string"},"due_date":{"type":"string"},"health_status":{"type":"string"},"id":{"type":"integer"},"iid":{"type":"integer"},"labels":{"items":{"type":"string"},"type":["null","array"]},"linked_items":{"items":{"additionalProperties":false,"properties":{"iid":{"type":"integer"},"link_type":{"type":"string"},"path":{"type":"string"}},"required":["iid","link_type"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"parent_iid":{"type":"integer"},"parent_path":{"type":"string"},"start_date":{"type":"string"},"state":{"type":"string"},"status":{"type":"string"},"title":{"type":"string"},"type":{"type":"string"},"updated_at":{"type":"string"},"web_url":{"type":"string"},"weight":{"type":["null","integer"]}},"required":["id","iid","type","state","title"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["epics"],"type":"object"}
```

</details>

<details><summary>epic_note_create</summary>

```json
{"additionalProperties":false,"properties":{"author":{"type":"string"},"body":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"system":{"type":"boolean"},"updated_at":{"type":"string"}},"required":["id","body","author","created_at","system"],"type":"object"}
```

</details>

<details><summary>epic_note_delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>epic_note_get</summary>

```json
{"additionalProperties":false,"properties":{"author":{"type":"string"},"body":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"system":{"type":"boolean"},"updated_at":{"type":"string"}},"required":["id","body","author","created_at","system"],"type":"object"}
```

</details>

<details><summary>epic_note_list</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"notes":{"items":{"additionalProperties":false,"properties":{"author":{"type":"string"},"body":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"system":{"type":"boolean"},"updated_at":{"type":"string"}},"required":["id","body","author","created_at","system"],"type":"object"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"end_cursor":{"type":"string"},"has_next_page":{"type":"boolean"},"has_previous_page":{"type":"boolean"},"start_cursor":{"type":"string"}},"required":["has_next_page","has_previous_page"],"type":"object"}},"required":["notes","pagination"],"type":"object"}
```

</details>

<details><summary>epic_note_update</summary>

```json
{"additionalProperties":false,"properties":{"author":{"type":"string"},"body":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"system":{"type":"boolean"},"updated_at":{"type":"string"}},"required":["id","body","author","created_at","system"],"type":"object"}
```

</details>

<details><summary>epic_update</summary>

```json
{"additionalProperties":false,"properties":{"assignees":{"items":{"type":"string"},"type":["null","array"]},"author":{"type":"string"},"closed_at":{"type":"string"},"color":{"type":"string"},"confidential":{"type":"boolean"},"created_at":{"type":"string"},"description":{"type":"string"},"due_date":{"type":"string"},"health_status":{"type":"string"},"id":{"type":"integer"},"iid":{"type":"integer"},"labels":{"items":{"type":"string"},"type":["null","array"]},"linked_items":{"items":{"additionalProperties":false,"properties":{"iid":{"type":"integer"},"link_type":{"type":"string"},"path":{"type":"string"}},"required":["iid","link_type"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"parent_iid":{"type":"integer"},"parent_path":{"type":"string"},"start_date":{"type":"string"},"state":{"type":"string"},"status":{"type":"string"},"title":{"type":"string"},"type":{"type":"string"},"updated_at":{"type":"string"},"web_url":{"type":"string"},"weight":{"type":["null","integer"]}},"required":["id","iid","type","state","title"],"type":"object"}
```

</details>

<details><summary>get</summary>

```json
{"additionalProperties":false,"properties":{"avatar_url":{"type":"string"},"created_at":{"type":"string"},"default_branch":{"type":"string"},"description":{"type":"string"},"full_name":{"type":"string"},"full_path":{"type":"string"},"id":{"type":"integer"},"lfs_enabled":{"type":"boolean"},"marked_for_deletion_on":{"type":"string"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"parent_id":{"type":"integer"},"path":{"type":"string"},"project_creation_level":{"type":"string"},"request_access_enabled":{"type":"boolean"},"shared_runners_setting":{"type":"string"},"subgroup_creation_level":{"type":"string"},"visibility":{"type":"string"},"web_url":{"type":"string"}},"required":["id","name","path","full_path","visibility","web_url","request_access_enabled","lfs_enabled"],"type":"object"}
```

</details>

<details><summary>group_board_create</summary>

```json
{"additionalProperties":false,"properties":{"group_id":{"type":"integer"},"group_name":{"type":"string"},"id":{"type":"integer"},"labels":{"items":{"type":"string"},"type":["null","array"]},"lists":{"items":{"additionalProperties":false,"properties":{"assignee_id":{"type":"integer"},"assignee_username":{"type":"string"},"id":{"type":"integer"},"label_id":{"type":"integer"},"label_name":{"type":"string"},"max_issue_count":{"type":"integer"},"max_issue_weight":{"type":"integer"},"milestone_id":{"type":"integer"},"milestone_title":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"position":{"type":"integer"}},"required":["id","position"],"type":"object"},"type":["null","array"]},"milestone_id":{"type":"integer"},"milestone_title":{"type":"string"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["id","name"],"type":"object"}
```

</details>

<details><summary>group_board_create_list</summary>

```json
{"additionalProperties":false,"properties":{"assignee_id":{"type":"integer"},"assignee_username":{"type":"string"},"id":{"type":"integer"},"label_id":{"type":"integer"},"label_name":{"type":"string"},"max_issue_count":{"type":"integer"},"max_issue_weight":{"type":"integer"},"milestone_id":{"type":"integer"},"milestone_title":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"position":{"type":"integer"}},"required":["id","position"],"type":"object"}
```

</details>

<details><summary>group_board_delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>group_board_delete_list</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>group_board_get</summary>

```json
{"additionalProperties":false,"properties":{"group_id":{"type":"integer"},"group_name":{"type":"string"},"id":{"type":"integer"},"labels":{"items":{"type":"string"},"type":["null","array"]},"lists":{"items":{"additionalProperties":false,"properties":{"assignee_id":{"type":"integer"},"assignee_username":{"type":"string"},"id":{"type":"integer"},"label_id":{"type":"integer"},"label_name":{"type":"string"},"max_issue_count":{"type":"integer"},"max_issue_weight":{"type":"integer"},"milestone_id":{"type":"integer"},"milestone_title":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"position":{"type":"integer"}},"required":["id","position"],"type":"object"},"type":["null","array"]},"milestone_id":{"type":"integer"},"milestone_title":{"type":"string"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["id","name"],"type":"object"}
```

</details>

<details><summary>group_board_get_list</summary>

```json
{"additionalProperties":false,"properties":{"assignee_id":{"type":"integer"},"assignee_username":{"type":"string"},"id":{"type":"integer"},"label_id":{"type":"integer"},"label_name":{"type":"string"},"max_issue_count":{"type":"integer"},"max_issue_weight":{"type":"integer"},"milestone_id":{"type":"integer"},"milestone_title":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"position":{"type":"integer"}},"required":["id","position"],"type":"object"}
```

</details>

<details><summary>group_board_list</summary>

```json
{"additionalProperties":false,"properties":{"boards":{"items":{"additionalProperties":false,"properties":{"group_id":{"type":"integer"},"group_name":{"type":"string"},"id":{"type":"integer"},"labels":{"items":{"type":"string"},"type":["null","array"]},"lists":{"items":{"additionalProperties":false,"properties":{"assignee_id":{"type":"integer"},"assignee_username":{"type":"string"},"id":{"type":"integer"},"label_id":{"type":"integer"},"label_name":{"type":"string"},"max_issue_count":{"type":"integer"},"max_issue_weight":{"type":"integer"},"milestone_id":{"type":"integer"},"milestone_title":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"position":{"type":"integer"}},"required":["id","position"],"type":"object"},"type":["null","array"]},"milestone_id":{"type":"integer"},"milestone_title":{"type":"string"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["id","name"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["boards","pagination"],"type":"object"}
```

</details>

<details><summary>group_board_list_lists</summary>

```json
{"additionalProperties":false,"properties":{"lists":{"items":{"additionalProperties":false,"properties":{"assignee_id":{"type":"integer"},"assignee_username":{"type":"string"},"id":{"type":"integer"},"label_id":{"type":"integer"},"label_name":{"type":"string"},"max_issue_count":{"type":"integer"},"max_issue_weight":{"type":"integer"},"milestone_id":{"type":"integer"},"milestone_title":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"position":{"type":"integer"}},"required":["id","position"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["lists","pagination"],"type":"object"}
```

</details>

<details><summary>group_board_update</summary>

```json
{"additionalProperties":false,"properties":{"group_id":{"type":"integer"},"group_name":{"type":"string"},"id":{"type":"integer"},"labels":{"items":{"type":"string"},"type":["null","array"]},"lists":{"items":{"additionalProperties":false,"properties":{"assignee_id":{"type":"integer"},"assignee_username":{"type":"string"},"id":{"type":"integer"},"label_id":{"type":"integer"},"label_name":{"type":"string"},"max_issue_count":{"type":"integer"},"max_issue_weight":{"type":"integer"},"milestone_id":{"type":"integer"},"milestone_title":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"position":{"type":"integer"}},"required":["id","position"],"type":"object"},"type":["null","array"]},"milestone_id":{"type":"integer"},"milestone_title":{"type":"string"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["id","name"],"type":"object"}
```

</details>

<details><summary>group_board_update_list</summary>

```json
{"additionalProperties":false,"properties":{"assignee_id":{"type":"integer"},"assignee_username":{"type":"string"},"id":{"type":"integer"},"label_id":{"type":"integer"},"label_name":{"type":"string"},"max_issue_count":{"type":"integer"},"max_issue_weight":{"type":"integer"},"milestone_id":{"type":"integer"},"milestone_title":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"position":{"type":"integer"}},"required":["id","position"],"type":"object"}
```

</details>

<details><summary>group_export_download</summary>

```json
{"additionalProperties":false,"properties":{"content_base64":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"size_bytes":{"type":"integer"}},"required":["content_base64","size_bytes"],"type":"object"}
```

</details>

<details><summary>group_export_schedule</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["message"],"type":"object"}
```

</details>

<details><summary>group_import_file</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["message"],"type":"object"}
```

</details>

<details><summary>group_label_create</summary>

```json
{"additionalProperties":false,"properties":{"closed_issues_count":{"type":"integer"},"color":{"type":"string"},"description":{"type":"string"},"id":{"type":"integer"},"is_project_label":{"type":"boolean"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"open_issues_count":{"type":"integer"},"open_merge_requests_count":{"type":"integer"},"priority":{"type":"integer"},"subscribed":{"type":"boolean"},"text_color":{"type":"string"}},"required":["id","name","color","text_color","description","open_issues_count","closed_issues_count","open_merge_requests_count","priority","is_project_label","subscribed"],"type":"object"}
```

</details>

<details><summary>group_label_delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>group_label_get</summary>

```json
{"additionalProperties":false,"properties":{"closed_issues_count":{"type":"integer"},"color":{"type":"string"},"description":{"type":"string"},"id":{"type":"integer"},"is_project_label":{"type":"boolean"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"open_issues_count":{"type":"integer"},"open_merge_requests_count":{"type":"integer"},"priority":{"type":"integer"},"subscribed":{"type":"boolean"},"text_color":{"type":"string"}},"required":["id","name","color","text_color","description","open_issues_count","closed_issues_count","open_merge_requests_count","priority","is_project_label","subscribed"],"type":"object"}
```

</details>

<details><summary>group_label_list</summary>

```json
{"additionalProperties":false,"properties":{"labels":{"items":{"additionalProperties":false,"properties":{"closed_issues_count":{"type":"integer"},"color":{"type":"string"},"description":{"type":"string"},"id":{"type":"integer"},"is_project_label":{"type":"boolean"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"open_issues_count":{"type":"integer"},"open_merge_requests_count":{"type":"integer"},"priority":{"type":"integer"},"subscribed":{"type":"boolean"},"text_color":{"type":"string"}},"required":["id","name","color","text_color","description","open_issues_count","closed_issues_count","open_merge_requests_count","priority","is_project_label","subscribed"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["labels","pagination"],"type":"object"}
```

</details>

<details><summary>group_label_subscribe</summary>

```json
{"additionalProperties":false,"properties":{"closed_issues_count":{"type":"integer"},"color":{"type":"string"},"description":{"type":"string"},"id":{"type":"integer"},"is_project_label":{"type":"boolean"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"open_issues_count":{"type":"integer"},"open_merge_requests_count":{"type":"integer"},"priority":{"type":"integer"},"subscribed":{"type":"boolean"},"text_color":{"type":"string"}},"required":["id","name","color","text_color","description","open_issues_count","closed_issues_count","open_merge_requests_count","priority","is_project_label","subscribed"],"type":"object"}
```

</details>

<details><summary>group_label_unsubscribe</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>group_label_update</summary>

```json
{"additionalProperties":false,"properties":{"closed_issues_count":{"type":"integer"},"color":{"type":"string"},"description":{"type":"string"},"id":{"type":"integer"},"is_project_label":{"type":"boolean"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"open_issues_count":{"type":"integer"},"open_merge_requests_count":{"type":"integer"},"priority":{"type":"integer"},"subscribed":{"type":"boolean"},"text_color":{"type":"string"}},"required":["id","name","color","text_color","description","open_issues_count","closed_issues_count","open_merge_requests_count","priority","is_project_label","subscribed"],"type":"object"}
```

</details>

<details><summary>group_member_add</summary>

```json
{"additionalProperties":false,"properties":{"access_level":{"type":"integer"},"access_level_description":{"type":"string"},"avatar_url":{"type":"string"},"created_at":{"type":"string"},"email":{"type":"string"},"expires_at":{"type":"string"},"id":{"type":"integer"},"is_using_seat":{"type":"boolean"},"member_role_name":{"type":"string"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"state":{"type":"string"},"username":{"type":"string"},"web_url":{"type":"string"}},"required":["id","username","name","state","web_url","access_level","access_level_description"],"type":"object"}
```

</details>

<details><summary>group_member_edit</summary>

```json
{"additionalProperties":false,"properties":{"access_level":{"type":"integer"},"access_level_description":{"type":"string"},"avatar_url":{"type":"string"},"created_at":{"type":"string"},"email":{"type":"string"},"expires_at":{"type":"string"},"id":{"type":"integer"},"is_using_seat":{"type":"boolean"},"member_role_name":{"type":"string"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"state":{"type":"string"},"username":{"type":"string"},"web_url":{"type":"string"}},"required":["id","username","name","state","web_url","access_level","access_level_description"],"type":"object"}
```

</details>

<details><summary>group_member_get</summary>

```json
{"additionalProperties":false,"properties":{"access_level":{"type":"integer"},"access_level_description":{"type":"string"},"avatar_url":{"type":"string"},"created_at":{"type":"string"},"email":{"type":"string"},"expires_at":{"type":"string"},"id":{"type":"integer"},"is_using_seat":{"type":"boolean"},"member_role_name":{"type":"string"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"state":{"type":"string"},"username":{"type":"string"},"web_url":{"type":"string"}},"required":["id","username","name","state","web_url","access_level","access_level_description"],"type":"object"}
```

</details>

<details><summary>group_member_get_inherited</summary>

```json
{"additionalProperties":false,"properties":{"access_level":{"type":"integer"},"access_level_description":{"type":"string"},"avatar_url":{"type":"string"},"created_at":{"type":"string"},"email":{"type":"string"},"expires_at":{"type":"string"},"id":{"type":"integer"},"is_using_seat":{"type":"boolean"},"member_role_name":{"type":"string"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"state":{"type":"string"},"username":{"type":"string"},"web_url":{"type":"string"}},"required":["id","username","name","state","web_url","access_level","access_level_description"],"type":"object"}
```

</details>

<details><summary>group_member_remove</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>group_member_share</summary>

```json
{"additionalProperties":false,"properties":{"description":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"path":{"type":"string"},"web_url":{"type":"string"}},"required":["id","name","path","web_url"],"type":"object"}
```

</details>

<details><summary>group_member_unshare</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>group_milestone_burndown</summary>

```json
{"additionalProperties":false,"properties":{"events":{"items":{"additionalProperties":false,"properties":{"action":{"type":"string"},"created_at":{"type":"string"},"weight":{"type":"integer"}},"required":["created_at","weight","action"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["events","pagination"],"type":"object"}
```

</details>

<details><summary>group_milestone_create</summary>

```json
{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"description":{"type":"string"},"due_date":{"type":"string"},"expired":{"type":"boolean"},"group_id":{"type":"integer"},"group_path":{"type":"string"},"id":{"type":"integer"},"iid":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"start_date":{"type":"string"},"state":{"type":"string"},"title":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","iid","group_id","title","description","state","start_date","due_date","created_at","updated_at","expired"],"type":"object"}
```

</details>

<details><summary>group_milestone_delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>group_milestone_get</summary>

```json
{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"description":{"type":"string"},"due_date":{"type":"string"},"expired":{"type":"boolean"},"group_id":{"type":"integer"},"group_path":{"type":"string"},"id":{"type":"integer"},"iid":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"start_date":{"type":"string"},"state":{"type":"string"},"title":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","iid","group_id","title","description","state","start_date","due_date","created_at","updated_at","expired"],"type":"object"}
```

</details>

<details><summary>group_milestone_issues</summary>

```json
{"additionalProperties":false,"properties":{"issues":{"items":{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"id":{"type":"integer"},"iid":{"type":"integer"},"state":{"type":"string"},"title":{"type":"string"},"web_url":{"type":"string"}},"required":["id","iid","title","state","web_url","created_at"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["issues","pagination"],"type":"object"}
```

</details>

<details><summary>group_milestone_list</summary>

```json
{"additionalProperties":false,"properties":{"milestones":{"items":{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"description":{"type":"string"},"due_date":{"type":"string"},"expired":{"type":"boolean"},"group_id":{"type":"integer"},"group_path":{"type":"string"},"id":{"type":"integer"},"iid":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"start_date":{"type":"string"},"state":{"type":"string"},"title":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","iid","group_id","title","description","state","start_date","due_date","created_at","updated_at","expired"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["milestones","pagination"],"type":"object"}
```

</details>

<details><summary>group_milestone_merge_requests</summary>

```json
{"additionalProperties":false,"properties":{"merge_requests":{"items":{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"id":{"type":"integer"},"iid":{"type":"integer"},"source_branch":{"type":"string"},"state":{"type":"string"},"target_branch":{"type":"string"},"title":{"type":"string"},"web_url":{"type":"string"}},"required":["id","iid","title","state","source_branch","target_branch","web_url","created_at"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["merge_requests","pagination"],"type":"object"}
```

</details>

<details><summary>group_milestone_update</summary>

```json
{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"description":{"type":"string"},"due_date":{"type":"string"},"expired":{"type":"boolean"},"group_id":{"type":"integer"},"group_path":{"type":"string"},"id":{"type":"integer"},"iid":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"start_date":{"type":"string"},"state":{"type":"string"},"title":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","iid","group_id","title","description","state","start_date","due_date","created_at","updated_at","expired"],"type":"object"}
```

</details>

<details><summary>group_relations_list_status</summary>

```json
{"additionalProperties":false,"properties":{"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"},"statuses":{"items":{"additionalProperties":false,"properties":{"batched":{"type":"boolean"},"batches_count":{"type":"integer"},"error":{"type":"string"},"relation":{"type":"string"},"status":{"type":"integer"},"updated_at":{"type":"string"}},"required":["relation","status","batched","batches_count"],"type":"object"},"type":["null","array"]}},"required":["statuses","pagination"],"type":"object"}
```

</details>

<details><summary>group_relations_schedule</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>group_upload_delete_by_id</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>group_upload_delete_by_secret</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>group_upload_list</summary>

```json
{"additionalProperties":false,"properties":{"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"},"uploads":{"items":{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"filename":{"type":"string"},"id":{"type":"integer"},"size":{"type":"integer"}},"required":["id","size","filename"],"type":"object"},"type":["null","array"]}},"required":["uploads","pagination"],"type":"object"}
```

</details>

<details><summary>hook_add</summary>

```json
{"additionalProperties":false,"properties":{"alert_status":{"type":"string"},"confidential_issues_events":{"type":"boolean"},"confidential_note_events":{"type":"boolean"},"created_at":{"type":"string"},"deployment_events":{"type":"boolean"},"description":{"type":"string"},"disabled_until":{"type":"string"},"enable_ssl_verification":{"type":"boolean"},"feature_flag_events":{"type":"boolean"},"group_id":{"type":"integer"},"id":{"type":"integer"},"issues_events":{"type":"boolean"},"job_events":{"type":"boolean"},"member_events":{"type":"boolean"},"merge_requests_events":{"type":"boolean"},"milestone_events":{"type":"boolean"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"note_events":{"type":"boolean"},"pipeline_events":{"type":"boolean"},"push_events":{"type":"boolean"},"releases_events":{"type":"boolean"},"signing_token_present":{"type":"boolean"},"subgroup_events":{"type":"boolean"},"tag_push_events":{"type":"boolean"},"token_present":{"type":"boolean"},"url":{"type":"string"},"url_variables":{"items":{"additionalProperties":false,"properties":{"key":{"type":"string"}},"required":["key"],"type":"object"},"type":["null","array"]},"vulnerability_events":{"type":"boolean"},"wiki_page_events":{"type":"boolean"}},"required":["id","url","group_id","push_events","tag_push_events","merge_requests_events","issues_events","note_events","job_events","pipeline_events","wiki_page_events","deployment_events","releases_events","subgroup_events","member_events","confidential_issues_events","confidential_note_events","enable_ssl_verification","feature_flag_events","milestone_events","vulnerability_events","token_present","signing_token_present"],"type":"object"}
```

</details>

<details><summary>hook_delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>hook_edit</summary>

```json
{"additionalProperties":false,"properties":{"alert_status":{"type":"string"},"confidential_issues_events":{"type":"boolean"},"confidential_note_events":{"type":"boolean"},"created_at":{"type":"string"},"deployment_events":{"type":"boolean"},"description":{"type":"string"},"disabled_until":{"type":"string"},"enable_ssl_verification":{"type":"boolean"},"feature_flag_events":{"type":"boolean"},"group_id":{"type":"integer"},"id":{"type":"integer"},"issues_events":{"type":"boolean"},"job_events":{"type":"boolean"},"member_events":{"type":"boolean"},"merge_requests_events":{"type":"boolean"},"milestone_events":{"type":"boolean"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"note_events":{"type":"boolean"},"pipeline_events":{"type":"boolean"},"push_events":{"type":"boolean"},"releases_events":{"type":"boolean"},"signing_token_present":{"type":"boolean"},"subgroup_events":{"type":"boolean"},"tag_push_events":{"type":"boolean"},"token_present":{"type":"boolean"},"url":{"type":"string"},"url_variables":{"items":{"additionalProperties":false,"properties":{"key":{"type":"string"}},"required":["key"],"type":"object"},"type":["null","array"]},"vulnerability_events":{"type":"boolean"},"wiki_page_events":{"type":"boolean"}},"required":["id","url","group_id","push_events","tag_push_events","merge_requests_events","issues_events","note_events","job_events","pipeline_events","wiki_page_events","deployment_events","releases_events","subgroup_events","member_events","confidential_issues_events","confidential_note_events","enable_ssl_verification","feature_flag_events","milestone_events","vulnerability_events","token_present","signing_token_present"],"type":"object"}
```

</details>

<details><summary>hook_get</summary>

```json
{"additionalProperties":false,"properties":{"alert_status":{"type":"string"},"confidential_issues_events":{"type":"boolean"},"confidential_note_events":{"type":"boolean"},"created_at":{"type":"string"},"deployment_events":{"type":"boolean"},"description":{"type":"string"},"disabled_until":{"type":"string"},"enable_ssl_verification":{"type":"boolean"},"feature_flag_events":{"type":"boolean"},"group_id":{"type":"integer"},"id":{"type":"integer"},"issues_events":{"type":"boolean"},"job_events":{"type":"boolean"},"member_events":{"type":"boolean"},"merge_requests_events":{"type":"boolean"},"milestone_events":{"type":"boolean"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"note_events":{"type":"boolean"},"pipeline_events":{"type":"boolean"},"push_events":{"type":"boolean"},"releases_events":{"type":"boolean"},"signing_token_present":{"type":"boolean"},"subgroup_events":{"type":"boolean"},"tag_push_events":{"type":"boolean"},"token_present":{"type":"boolean"},"url":{"type":"string"},"url_variables":{"items":{"additionalProperties":false,"properties":{"key":{"type":"string"}},"required":["key"],"type":"object"},"type":["null","array"]},"vulnerability_events":{"type":"boolean"},"wiki_page_events":{"type":"boolean"}},"required":["id","url","group_id","push_events","tag_push_events","merge_requests_events","issues_events","note_events","job_events","pipeline_events","wiki_page_events","deployment_events","releases_events","subgroup_events","member_events","confidential_issues_events","confidential_note_events","enable_ssl_verification","feature_flag_events","milestone_events","vulnerability_events","token_present","signing_token_present"],"type":"object"}
```

</details>

<details><summary>hook_list</summary>

```json
{"additionalProperties":false,"properties":{"hooks":{"items":{"additionalProperties":false,"properties":{"alert_status":{"type":"string"},"confidential_issues_events":{"type":"boolean"},"confidential_note_events":{"type":"boolean"},"created_at":{"type":"string"},"deployment_events":{"type":"boolean"},"description":{"type":"string"},"disabled_until":{"type":"string"},"enable_ssl_verification":{"type":"boolean"},"feature_flag_events":{"type":"boolean"},"group_id":{"type":"integer"},"id":{"type":"integer"},"issues_events":{"type":"boolean"},"job_events":{"type":"boolean"},"member_events":{"type":"boolean"},"merge_requests_events":{"type":"boolean"},"milestone_events":{"type":"boolean"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"note_events":{"type":"boolean"},"pipeline_events":{"type":"boolean"},"push_events":{"type":"boolean"},"releases_events":{"type":"boolean"},"signing_token_present":{"type":"boolean"},"subgroup_events":{"type":"boolean"},"tag_push_events":{"type":"boolean"},"token_present":{"type":"boolean"},"url":{"type":"string"},"url_variables":{"items":{"additionalProperties":false,"properties":{"key":{"type":"string"}},"required":["key"],"type":"object"},"type":["null","array"]},"vulnerability_events":{"type":"boolean"},"wiki_page_events":{"type":"boolean"}},"required":["id","url","group_id","push_events","tag_push_events","merge_requests_events","issues_events","note_events","job_events","pipeline_events","wiki_page_events","deployment_events","releases_events","subgroup_events","member_events","confidential_issues_events","confidential_note_events","enable_ssl_verification","feature_flag_events","milestone_events","vulnerability_events","token_present","signing_token_present"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["hooks","pagination"],"type":"object"}
```

</details>

<details><summary>issues</summary>

```json
{"additionalProperties":false,"properties":{"issues":{"items":{"additionalProperties":false,"properties":{"assignees":{"items":{"type":"string"},"type":["null","array"]},"author":{"type":"string"},"closed_at":{"type":"string"},"closed_by":{"type":"string"},"confidential":{"type":"boolean"},"created_at":{"type":"string"},"description":{"type":"string"},"discussion_locked":{"type":"boolean"},"downvotes":{"type":"integer"},"due_date":{"type":"string"},"epic_issue_id":{"type":"integer"},"health_status":{"type":"string"},"id":{"type":"integer"},"issue_iid":{"type":"integer"},"issue_type":{"type":"string"},"labels":{"items":{"type":"string"},"type":["null","array"]},"merge_request_count":{"type":"integer"},"milestone":{"type":"string"},"moved_to_id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"project_id":{"type":"integer"},"references":{"type":"string"},"state":{"type":"string"},"subscribed":{"type":"boolean"},"task_completion_count":{"type":"integer"},"task_completion_total":{"type":"integer"},"time_estimate":{"type":"integer"},"title":{"type":"string"},"total_time_spent":{"type":"integer"},"updated_at":{"type":"string"},"upvotes":{"type":"integer"},"user_notes_count":{"type":"integer"},"web_url":{"type":"string"},"weight":{"type":"integer"}},"required":["id","issue_iid","title","description","state","labels","assignees","milestone","author","web_url","created_at","updated_at","closed_at","due_date","confidential","discussion_locked","project_id","subscribed"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["issues","pagination"],"type":"object"}
```

</details>

<details><summary>ldap_link_add</summary>

```json
{"additionalProperties":false,"properties":{"cn":{"type":"string"},"filter":{"type":"string"},"group_access":{"type":"integer"},"member_role_id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"provider":{"type":"string"}},"required":["cn","group_access","provider"],"type":"object"}
```

</details>

<details><summary>ldap_link_delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>ldap_link_delete_for_provider</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>ldap_link_list</summary>

```json
{"additionalProperties":false,"properties":{"links":{"items":{"additionalProperties":false,"properties":{"cn":{"type":"string"},"filter":{"type":"string"},"group_access":{"type":"integer"},"member_role_id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"provider":{"type":"string"}},"required":["cn","group_access","provider"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["links"],"type":"object"}
```

</details>

<details><summary>list</summary>

```json
{"additionalProperties":false,"properties":{"groups":{"items":{"additionalProperties":false,"properties":{"avatar_url":{"type":"string"},"created_at":{"type":"string"},"default_branch":{"type":"string"},"description":{"type":"string"},"full_name":{"type":"string"},"full_path":{"type":"string"},"id":{"type":"integer"},"lfs_enabled":{"type":"boolean"},"marked_for_deletion_on":{"type":"string"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"parent_id":{"type":"integer"},"path":{"type":"string"},"project_creation_level":{"type":"string"},"request_access_enabled":{"type":"boolean"},"shared_runners_setting":{"type":"string"},"subgroup_creation_level":{"type":"string"},"visibility":{"type":"string"},"web_url":{"type":"string"}},"required":["id","name","path","full_path","visibility","web_url","request_access_enabled","lfs_enabled"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["groups","pagination"],"type":"object"}
```

</details>

<details><summary>members</summary>

```json
{"additionalProperties":false,"properties":{"members":{"items":{"additionalProperties":false,"properties":{"access_level":{"type":"integer"},"access_level_description":{"type":"string"},"avatar_url":{"type":"string"},"created_at":{"type":"string"},"email":{"type":"string"},"expires_at":{"type":"string"},"group_saml_provider":{"type":"string"},"id":{"type":"integer"},"member_role_name":{"type":"string"},"name":{"type":"string"},"state":{"type":"string"},"username":{"type":"string"},"web_url":{"type":"string"}},"required":["id","username","name","state","access_level","access_level_description","web_url"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["members","pagination"],"type":"object"}
```

</details>

<details><summary>projects</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"},"projects":{"items":{"additionalProperties":false,"properties":{"archived":{"type":"boolean"},"created_at":{"type":"string"},"default_branch":{"type":"string"},"description":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"path_with_namespace":{"type":"string"},"visibility":{"type":"string"},"web_url":{"type":"string"}},"required":["id","name","path_with_namespace","visibility","web_url","archived"],"type":"object"},"type":["null","array"]}},"required":["projects","pagination"],"type":"object"}
```

</details>

<details><summary>protected_branch_get</summary>

```json
{"additionalProperties":false,"properties":{"allow_force_push":{"type":"boolean"},"code_owner_approval_required":{"type":"boolean"},"id":{"type":"integer"},"merge_access_levels":{"items":{"additionalProperties":false,"properties":{"access_level":{"type":"integer"},"access_level_description":{"type":"string"},"deploy_key_id":{"type":"integer"},"group_id":{"type":"integer"},"id":{"type":"integer"},"user_id":{"type":"integer"}},"required":["id","access_level","access_level_description"],"type":"object"},"type":["null","array"]},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"push_access_levels":{"items":{"additionalProperties":false,"properties":{"access_level":{"type":"integer"},"access_level_description":{"type":"string"},"deploy_key_id":{"type":"integer"},"group_id":{"type":"integer"},"id":{"type":"integer"},"user_id":{"type":"integer"}},"required":["id","access_level","access_level_description"],"type":"object"},"type":["null","array"]},"unprotect_access_levels":{"items":{"additionalProperties":false,"properties":{"access_level":{"type":"integer"},"access_level_description":{"type":"string"},"deploy_key_id":{"type":"integer"},"group_id":{"type":"integer"},"id":{"type":"integer"},"user_id":{"type":"integer"}},"required":["id","access_level","access_level_description"],"type":"object"},"type":["null","array"]}},"required":["id","name","push_access_levels","merge_access_levels","unprotect_access_levels","allow_force_push","code_owner_approval_required"],"type":"object"}
```

</details>

<details><summary>protected_branch_list</summary>

```json
{"additionalProperties":false,"properties":{"branches":{"items":{"additionalProperties":false,"properties":{"allow_force_push":{"type":"boolean"},"code_owner_approval_required":{"type":"boolean"},"id":{"type":"integer"},"merge_access_levels":{"items":{"additionalProperties":false,"properties":{"access_level":{"type":"integer"},"access_level_description":{"type":"string"},"deploy_key_id":{"type":"integer"},"group_id":{"type":"integer"},"id":{"type":"integer"},"user_id":{"type":"integer"}},"required":["id","access_level","access_level_description"],"type":"object"},"type":["null","array"]},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"push_access_levels":{"items":{"additionalProperties":false,"properties":{"access_level":{"type":"integer"},"access_level_description":{"type":"string"},"deploy_key_id":{"type":"integer"},"group_id":{"type":"integer"},"id":{"type":"integer"},"user_id":{"type":"integer"}},"required":["id","access_level","access_level_description"],"type":"object"},"type":["null","array"]},"unprotect_access_levels":{"items":{"additionalProperties":false,"properties":{"access_level":{"type":"integer"},"access_level_description":{"type":"string"},"deploy_key_id":{"type":"integer"},"group_id":{"type":"integer"},"id":{"type":"integer"},"user_id":{"type":"integer"}},"required":["id","access_level","access_level_description"],"type":"object"},"type":["null","array"]}},"required":["id","name","push_access_levels","merge_access_levels","unprotect_access_levels","allow_force_push","code_owner_approval_required"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["branches","pagination"],"type":"object"}
```

</details>

<details><summary>protected_branch_protect</summary>

```json
{"additionalProperties":false,"properties":{"allow_force_push":{"type":"boolean"},"code_owner_approval_required":{"type":"boolean"},"id":{"type":"integer"},"merge_access_levels":{"items":{"additionalProperties":false,"properties":{"access_level":{"type":"integer"},"access_level_description":{"type":"string"},"deploy_key_id":{"type":"integer"},"group_id":{"type":"integer"},"id":{"type":"integer"},"user_id":{"type":"integer"}},"required":["id","access_level","access_level_description"],"type":"object"},"type":["null","array"]},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"push_access_levels":{"items":{"additionalProperties":false,"properties":{"access_level":{"type":"integer"},"access_level_description":{"type":"string"},"deploy_key_id":{"type":"integer"},"group_id":{"type":"integer"},"id":{"type":"integer"},"user_id":{"type":"integer"}},"required":["id","access_level","access_level_description"],"type":"object"},"type":["null","array"]},"unprotect_access_levels":{"items":{"additionalProperties":false,"properties":{"access_level":{"type":"integer"},"access_level_description":{"type":"string"},"deploy_key_id":{"type":"integer"},"group_id":{"type":"integer"},"id":{"type":"integer"},"user_id":{"type":"integer"}},"required":["id","access_level","access_level_description"],"type":"object"},"type":["null","array"]}},"required":["id","name","push_access_levels","merge_access_levels","unprotect_access_levels","allow_force_push","code_owner_approval_required"],"type":"object"}
```

</details>

<details><summary>protected_branch_unprotect</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>protected_branch_update</summary>

```json
{"additionalProperties":false,"properties":{"allow_force_push":{"type":"boolean"},"code_owner_approval_required":{"type":"boolean"},"id":{"type":"integer"},"merge_access_levels":{"items":{"additionalProperties":false,"properties":{"access_level":{"type":"integer"},"access_level_description":{"type":"string"},"deploy_key_id":{"type":"integer"},"group_id":{"type":"integer"},"id":{"type":"integer"},"user_id":{"type":"integer"}},"required":["id","access_level","access_level_description"],"type":"object"},"type":["null","array"]},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"push_access_levels":{"items":{"additionalProperties":false,"properties":{"access_level":{"type":"integer"},"access_level_description":{"type":"string"},"deploy_key_id":{"type":"integer"},"group_id":{"type":"integer"},"id":{"type":"integer"},"user_id":{"type":"integer"}},"required":["id","access_level","access_level_description"],"type":"object"},"type":["null","array"]},"unprotect_access_levels":{"items":{"additionalProperties":false,"properties":{"access_level":{"type":"integer"},"access_level_description":{"type":"string"},"deploy_key_id":{"type":"integer"},"group_id":{"type":"integer"},"id":{"type":"integer"},"user_id":{"type":"integer"}},"required":["id","access_level","access_level_description"],"type":"object"},"type":["null","array"]}},"required":["id","name","push_access_levels","merge_access_levels","unprotect_access_levels","allow_force_push","code_owner_approval_required"],"type":"object"}
```

</details>

<details><summary>protected_env_get</summary>

```json
{"additionalProperties":false,"properties":{"approval_rules":{"items":{"additionalProperties":false,"properties":{"access_level":{"type":"integer"},"access_level_description":{"type":"string"},"group_id":{"type":"integer"},"group_inheritance_type":{"type":"integer"},"id":{"type":"integer"},"required_approvals":{"type":"integer"},"user_id":{"type":"integer"}},"required":["id","access_level","access_level_description","required_approvals"],"type":"object"},"type":["null","array"]},"deploy_access_levels":{"items":{"additionalProperties":false,"properties":{"access_level":{"type":"integer"},"access_level_description":{"type":"string"},"group_id":{"type":"integer"},"group_inheritance_type":{"type":"integer"},"id":{"type":"integer"},"user_id":{"type":"integer"}},"required":["id","access_level","access_level_description"],"type":"object"},"type":["null","array"]},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"required_approval_count":{"type":"integer"}},"required":["name","deploy_access_levels","required_approval_count","approval_rules"],"type":"object"}
```

</details>

<details><summary>protected_env_list</summary>

```json
{"additionalProperties":false,"properties":{"environments":{"items":{"additionalProperties":false,"properties":{"approval_rules":{"items":{"additionalProperties":false,"properties":{"access_level":{"type":"integer"},"access_level_description":{"type":"string"},"group_id":{"type":"integer"},"group_inheritance_type":{"type":"integer"},"id":{"type":"integer"},"required_approvals":{"type":"integer"},"user_id":{"type":"integer"}},"required":["id","access_level","access_level_description","required_approvals"],"type":"object"},"type":["null","array"]},"deploy_access_levels":{"items":{"additionalProperties":false,"properties":{"access_level":{"type":"integer"},"access_level_description":{"type":"string"},"group_id":{"type":"integer"},"group_inheritance_type":{"type":"integer"},"id":{"type":"integer"},"user_id":{"type":"integer"}},"required":["id","access_level","access_level_description"],"type":"object"},"type":["null","array"]},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"required_approval_count":{"type":"integer"}},"required":["name","deploy_access_levels","required_approval_count","approval_rules"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["environments","pagination"],"type":"object"}
```

</details>

<details><summary>protected_env_protect</summary>

```json
{"additionalProperties":false,"properties":{"approval_rules":{"items":{"additionalProperties":false,"properties":{"access_level":{"type":"integer"},"access_level_description":{"type":"string"},"group_id":{"type":"integer"},"group_inheritance_type":{"type":"integer"},"id":{"type":"integer"},"required_approvals":{"type":"integer"},"user_id":{"type":"integer"}},"required":["id","access_level","access_level_description","required_approvals"],"type":"object"},"type":["null","array"]},"deploy_access_levels":{"items":{"additionalProperties":false,"properties":{"access_level":{"type":"integer"},"access_level_description":{"type":"string"},"group_id":{"type":"integer"},"group_inheritance_type":{"type":"integer"},"id":{"type":"integer"},"user_id":{"type":"integer"}},"required":["id","access_level","access_level_description"],"type":"object"},"type":["null","array"]},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"required_approval_count":{"type":"integer"}},"required":["name","deploy_access_levels","required_approval_count","approval_rules"],"type":"object"}
```

</details>

<details><summary>protected_env_unprotect</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>protected_env_update</summary>

```json
{"additionalProperties":false,"properties":{"approval_rules":{"items":{"additionalProperties":false,"properties":{"access_level":{"type":"integer"},"access_level_description":{"type":"string"},"group_id":{"type":"integer"},"group_inheritance_type":{"type":"integer"},"id":{"type":"integer"},"required_approvals":{"type":"integer"},"user_id":{"type":"integer"}},"required":["id","access_level","access_level_description","required_approvals"],"type":"object"},"type":["null","array"]},"deploy_access_levels":{"items":{"additionalProperties":false,"properties":{"access_level":{"type":"integer"},"access_level_description":{"type":"string"},"group_id":{"type":"integer"},"group_inheritance_type":{"type":"integer"},"id":{"type":"integer"},"user_id":{"type":"integer"}},"required":["id","access_level","access_level_description"],"type":"object"},"type":["null","array"]},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"required_approval_count":{"type":"integer"}},"required":["name","deploy_access_levels","required_approval_count","approval_rules"],"type":"object"}
```

</details>

<details><summary>release_list</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"},"releases":{"items":{"additionalProperties":false,"properties":{"author":{"type":"string"},"created_at":{"type":"string"},"description":{"type":"string"},"name":{"type":"string"},"released_at":{"type":"string"},"tag_name":{"type":"string"},"upcoming_release":{"type":"boolean"},"web_url":{"type":"string"}},"required":["tag_name","name","created_at"],"type":"object"},"type":["null","array"]}},"required":["releases","pagination"],"type":"object"}
```

</details>

<details><summary>restore</summary>

```json
{"additionalProperties":false,"properties":{"avatar_url":{"type":"string"},"created_at":{"type":"string"},"default_branch":{"type":"string"},"description":{"type":"string"},"full_name":{"type":"string"},"full_path":{"type":"string"},"id":{"type":"integer"},"lfs_enabled":{"type":"boolean"},"marked_for_deletion_on":{"type":"string"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"parent_id":{"type":"integer"},"path":{"type":"string"},"project_creation_level":{"type":"string"},"request_access_enabled":{"type":"boolean"},"shared_runners_setting":{"type":"string"},"subgroup_creation_level":{"type":"string"},"visibility":{"type":"string"},"web_url":{"type":"string"}},"required":["id","name","path","full_path","visibility","web_url","request_access_enabled","lfs_enabled"],"type":"object"}
```

</details>

<details><summary>saml_link_add</summary>

```json
{"additionalProperties":false,"properties":{"access_level":{"type":"integer"},"member_role_id":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"provider":{"type":"string"}},"required":["name","access_level"],"type":"object"}
```

</details>

<details><summary>saml_link_delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>saml_link_get</summary>

```json
{"additionalProperties":false,"properties":{"access_level":{"type":"integer"},"member_role_id":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"provider":{"type":"string"}},"required":["name","access_level"],"type":"object"}
```

</details>

<details><summary>saml_link_list</summary>

```json
{"additionalProperties":false,"properties":{"links":{"items":{"additionalProperties":false,"properties":{"access_level":{"type":"integer"},"member_role_id":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"provider":{"type":"string"}},"required":["name","access_level"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["links"],"type":"object"}
```

</details>

<details><summary>search</summary>

```json
{"additionalProperties":false,"properties":{"groups":{"items":{"additionalProperties":false,"properties":{"avatar_url":{"type":"string"},"created_at":{"type":"string"},"default_branch":{"type":"string"},"description":{"type":"string"},"full_name":{"type":"string"},"full_path":{"type":"string"},"id":{"type":"integer"},"lfs_enabled":{"type":"boolean"},"marked_for_deletion_on":{"type":"string"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"parent_id":{"type":"integer"},"path":{"type":"string"},"project_creation_level":{"type":"string"},"request_access_enabled":{"type":"boolean"},"shared_runners_setting":{"type":"string"},"subgroup_creation_level":{"type":"string"},"visibility":{"type":"string"},"web_url":{"type":"string"}},"required":["id","name","path","full_path","visibility","web_url","request_access_enabled","lfs_enabled"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["groups","pagination"],"type":"object"}
```

</details>

<details><summary>security_settings_update</summary>

```json
{"additionalProperties":false,"properties":{"errors":{"items":{"type":"string"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"secret_push_protection_enabled":{"type":"boolean"}},"required":["secret_push_protection_enabled"],"type":"object"}
```

</details>

<details><summary>service_account_create</summary>

```json
{"additionalProperties":false,"properties":{"email":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"username":{"type":"string"}},"required":["id","name","username","email"],"type":"object"}
```

</details>

<details><summary>service_account_delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>service_account_list</summary>

```json
{"additionalProperties":false,"properties":{"accounts":{"items":{"additionalProperties":false,"properties":{"email":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"username":{"type":"string"}},"required":["id","name","username","email"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["accounts","pagination"],"type":"object"}
```

</details>

<details><summary>service_account_pat_create</summary>

```json
{"additionalProperties":false,"properties":{"active":{"type":"boolean"},"created_at":{"type":"string"},"description":{"type":"string"},"expires_at":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"revoked":{"type":"boolean"},"scopes":{"items":{"type":"string"},"type":["null","array"]},"token":{"type":"string"},"user_id":{"type":"integer"}},"required":["id","name","revoked","scopes","user_id","active"],"type":"object"}
```

</details>

<details><summary>service_account_pat_list</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"},"tokens":{"items":{"additionalProperties":false,"properties":{"active":{"type":"boolean"},"created_at":{"type":"string"},"description":{"type":"string"},"expires_at":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"revoked":{"type":"boolean"},"scopes":{"items":{"type":"string"},"type":["null","array"]},"token":{"type":"string"},"user_id":{"type":"integer"}},"required":["id","name","revoked","scopes","user_id","active"],"type":"object"},"type":["null","array"]}},"required":["tokens","pagination"],"type":"object"}
```

</details>

<details><summary>service_account_pat_revoke</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>service_account_update</summary>

```json
{"additionalProperties":false,"properties":{"email":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"username":{"type":"string"}},"required":["id","name","username","email"],"type":"object"}
```

</details>

<details><summary>ssh_cert_create</summary>

```json
{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"id":{"type":"integer"},"key":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"title":{"type":"string"}},"required":["id","title","key"],"type":"object"}
```

</details>

<details><summary>ssh_cert_delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>ssh_cert_list</summary>

```json
{"additionalProperties":false,"properties":{"certificates":{"items":{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"id":{"type":"integer"},"key":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"title":{"type":"string"}},"required":["id","title","key"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["certificates"],"type":"object"}
```

</details>

<details><summary>subgroups</summary>

```json
{"additionalProperties":false,"properties":{"groups":{"items":{"additionalProperties":false,"properties":{"avatar_url":{"type":"string"},"created_at":{"type":"string"},"default_branch":{"type":"string"},"description":{"type":"string"},"full_name":{"type":"string"},"full_path":{"type":"string"},"id":{"type":"integer"},"lfs_enabled":{"type":"boolean"},"marked_for_deletion_on":{"type":"string"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"parent_id":{"type":"integer"},"path":{"type":"string"},"project_creation_level":{"type":"string"},"request_access_enabled":{"type":"boolean"},"shared_runners_setting":{"type":"string"},"subgroup_creation_level":{"type":"string"},"visibility":{"type":"string"},"web_url":{"type":"string"}},"required":["id","name","path","full_path","visibility","web_url","request_access_enabled","lfs_enabled"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["groups","pagination"],"type":"object"}
```

</details>

<details><summary>transfer_project</summary>

```json
{"additionalProperties":false,"properties":{"avatar_url":{"type":"string"},"created_at":{"type":"string"},"default_branch":{"type":"string"},"description":{"type":"string"},"full_name":{"type":"string"},"full_path":{"type":"string"},"id":{"type":"integer"},"lfs_enabled":{"type":"boolean"},"marked_for_deletion_on":{"type":"string"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"parent_id":{"type":"integer"},"path":{"type":"string"},"project_creation_level":{"type":"string"},"request_access_enabled":{"type":"boolean"},"shared_runners_setting":{"type":"string"},"subgroup_creation_level":{"type":"string"},"visibility":{"type":"string"},"web_url":{"type":"string"}},"required":["id","name","path","full_path","visibility","web_url","request_access_enabled","lfs_enabled"],"type":"object"}
```

</details>

<details><summary>unarchive</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>update</summary>

```json
{"additionalProperties":false,"properties":{"avatar_url":{"type":"string"},"created_at":{"type":"string"},"default_branch":{"type":"string"},"description":{"type":"string"},"full_name":{"type":"string"},"full_path":{"type":"string"},"id":{"type":"integer"},"lfs_enabled":{"type":"boolean"},"marked_for_deletion_on":{"type":"string"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"parent_id":{"type":"integer"},"path":{"type":"string"},"project_creation_level":{"type":"string"},"request_access_enabled":{"type":"boolean"},"shared_runners_setting":{"type":"string"},"subgroup_creation_level":{"type":"string"},"visibility":{"type":"string"},"web_url":{"type":"string"}},"required":["id","name","path","full_path","visibility","web_url","request_access_enabled","lfs_enabled"],"type":"object"}
```

</details>

<details><summary>wiki_create</summary>

```json
{"additionalProperties":false,"properties":{"content":{"type":"string"},"encoding":{"type":"string"},"format":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"slug":{"type":"string"},"title":{"type":"string"}},"required":["title","slug","format"],"type":"object"}
```

</details>

<details><summary>wiki_delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>wiki_edit</summary>

```json
{"additionalProperties":false,"properties":{"content":{"type":"string"},"encoding":{"type":"string"},"format":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"slug":{"type":"string"},"title":{"type":"string"}},"required":["title","slug","format"],"type":"object"}
```

</details>

<details><summary>wiki_get</summary>

```json
{"additionalProperties":false,"properties":{"content":{"type":"string"},"encoding":{"type":"string"},"format":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"slug":{"type":"string"},"title":{"type":"string"}},"required":["title","slug","format"],"type":"object"}
```

</details>

<details><summary>wiki_list</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"wiki_pages":{"items":{"additionalProperties":false,"properties":{"content":{"type":"string"},"encoding":{"type":"string"},"format":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"slug":{"type":"string"},"title":{"type":"string"}},"required":["title","slug","format"],"type":"object"},"type":["null","array"]}},"required":["wiki_pages"],"type":"object"}
```

</details>

### gitlab_interactive_issue_create

**Interactive Issue Create**

Create a GitLab issue through step-by-step prompts, with explicit confirmation before calling the GitLab API. Cancellation at any prompt aborts without creating the issue.

Input: project_id (numeric ID or URL-encoded path) selects the target project. Prompted fields are title, description, labels, confidential, and confirm. Requires permission to create issues in that project.

After invocation, the tool elicits in order:
- title (string, required) — issue title.
- description (string, optional, multi-line, Markdown) — leave empty to skip.
- labels (string, optional) — comma-separated; trimmed and deduped server-side.
- confidential (boolean, optional) — yes/no confirmation; defaults to public when declined.
- confirm (boolean, required) — final yes/no review of the assembled summary.

Behavior: cancellation/decline at any prompt aborts with no GitLab API call and no side effects. Each confirmed invocation creates ONE new issue; NON-idempotent — re-running with the same title/fields creates another issue. Side effects on success: GitLab fires issue-created webhooks and may notify issue subscribers.

When to use: human-in-the-loop issue creation. NOT for: scripted/programmatic creation — use gitlab_issue (action='create') with all fields pre-supplied.

Requires the MCP client to support the elicitation capability. If unsupported, returns a structured error naming gitlab_issue (action='create') as the alternative.

Returns: JSON with the created issue (id, issue_iid, web_url, title, state); issue_iid corresponds to GitLab's iid field.

See also: gitlab_issue.

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

### gitlab_interactive_mr_create

**Interactive MR Create**

Create a GitLab merge request through step-by-step prompts, with explicit confirmation before calling the GitLab API. Cancellation at any prompt aborts without creating the MR.

Input: project_id (numeric ID or URL-encoded path) selects the target project. Prompted fields are source_branch, target_branch, title, description, labels, remove_source_branch, squash, and confirm. Requires permission to create merge requests in that project.

After invocation, the tool elicits in order:
- source_branch (string, required) — branch with the changes to merge.
- target_branch (string, required) — branch to merge into (e.g. main, develop).
- title (string, required) — MR title.
- description (string, optional, multi-line, Markdown) — leave empty to skip.
- labels (string, optional) — comma-separated; trimmed and deduped server-side.
- remove_source_branch (boolean, optional) — yes/no confirmation; default unset.
- squash (boolean, optional) — yes/no confirmation; default unset.
- confirm (boolean, required) — final yes/no review of the assembled summary.

Behavior: cancellation/decline at any prompt aborts with no GitLab API call and no side effects. Each confirmed invocation creates ONE new merge request. NON-idempotent — GitLab rejects an already-open MR for the same source_branch to target_branch in the same project as a validation failure (HTTP 422). Retries may fail with 422 instead of returning the existing MR. Confirm branch/MR state before re-running. For scripted idempotent workflows, use gitlab_merge_request (action='create') with all fields pre-supplied and handle 422 as the expected duplicate case.

When to use: human-in-the-loop MR creation. NOT for: scripted/programmatic creation — use gitlab_merge_request (action='create') with all fields pre-supplied.

Requires the MCP client to support the elicitation capability. If unsupported, returns a structured error naming gitlab_merge_request (action='create') as the alternative.

Returns: JSON with the created MR (id, merge_request_iid, web_url, title, source_branch, target_branch, state); merge_request_iid corresponds to GitLab's iid field.

See also: gitlab_merge_request, gitlab_branch.

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

### gitlab_interactive_project_create

**Interactive Project Create**

Create a GitLab project through step-by-step prompts, with explicit confirmation before calling the GitLab API. Cancellation at any prompt aborts without creating the project except initialize_with_readme, where decline/cancel continues with false.

Input: no fields; every project detail is elicited. Requires permission to create projects for the authenticated user.

After invocation, the tool elicits in order:
- name (string, required) — project display name and (when path is omitted) URL slug.
- description (string, optional) — leave empty to skip.
- visibility (enum, required) — one of private, internal, public.
- initialize_with_readme (boolean, optional) — yes/no confirmation; explicit no, decline, or cancel continues with false.
- default_branch (string, optional) — leave empty to use the GitLab default ('main').
- confirm (boolean, required) — final yes/no review of the assembled summary.

When to use: human-in-the-loop project creation. NOT for: scripted/programmatic creation — use gitlab_project (action='create') with all fields pre-supplied.

Behavior: each successful invocation creates ONE new project after explicit user confirmation. NON-idempotent — re-running with the same project path/name can fail with 400/409. Cancellation/decline at any prompt aborts with no GitLab API call and no side effects, except initialize_with_readme where no/decline/cancel is accepted as initialize_with_readme=false. Side effects on success: GitLab may initialize a repository and notify project members.

Requires the MCP client to support the elicitation capability. If unsupported, returns a structured error naming gitlab_project (action='create') as the alternative.

Returns: JSON with the created project (id, path_with_namespace, web_url, visibility, default_branch).

See also: gitlab_project, gitlab_group.

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

### gitlab_interactive_release_create

**Interactive Release Create**

Create a GitLab release through step-by-step prompts, with explicit confirmation before calling the GitLab API. Cancellation at any prompt aborts without creating the release.

Input: project_id (numeric ID or URL-encoded path) selects the target project. Prompted fields are tag_name, name, description, and confirm. Requires permission to create releases in that project.

After invocation, the tool elicits in order:
- tag_name (string, required) — must reference an existing tag in the project; create it first via gitlab_tag (action='create').
- name (string, optional) — release title; defaults to tag_name when left empty.
- description (string, optional, multi-line, Markdown) — release notes; leave empty to skip.
- confirm (boolean, required) — final yes/no review of the assembled summary.

When to use: human-in-the-loop release publishing. NOT for: CI/automated release creation — use gitlab_release (action='create') with all fields pre-supplied.

Requires the MCP client to support the elicitation capability. If unsupported, returns a structured error naming gitlab_release (action='create') as the alternative.

Behavior: each successful invocation publishes ONE new release after explicit user confirmation. NON-idempotent — re-running with the same tag returns 409 (release already exists). Cancellation/decline at any prompt aborts with no GitLab API call and no side effects. Side effects on success: GitLab fires release-created webhooks and may notify release subscribers.

Returns: JSON with the created release (tag_name, name, description, web_url).

See also: gitlab_release, gitlab_tag.

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

### gitlab_issue

**Issue**

Use {"action":"list","params":{...}}; only top-level keys are action and params.
Action params schema: gitlab://tools/gitlab_issue.<action>.
Action guidance:
- link_create: Use to create a relationship from a source issue to a target issue, optionally across projects.
- update: Update issue fields. To close or reopen an issue with issue.update, set params.state_event to close or reopen; dynamic execute also accepts issue.close and issue.reopen aliases that fill state_event automatically.
Parameter guidance:
- link_create.issue_iid: source_issue; source: IID of the source issue receiving the link.; avoid: Do not use the target issue IID here.
- link_create.project_id: source_project; source: Project that owns the source issue.; avoid: Use target_project_id for the linked issue's project when it differs.
- link_create.target_issue_iid: target_issue; source: IID of the issue being linked to.; avoid: Do not use the source issue IID here.
- link_create.target_project_id: target_project; source: Project that owns the target issue.; avoid: For same-project links this may equal project_id; otherwise keep it distinct.
- update.state_event: issue_state_transition; source: task intent when closing or reopening an issue; avoid: Do not use state=closed/opened for transitions; use state_event=close or state_event=reopen.

Manage GitLab issues: CRUD, notes, discussions, links, time tracking, work items, award emoji, statistics, and resource events.
When to use: issue lifecycle — create, update, close, move, comment, link, time-track, and manage Work Items (including Epics). NOT for: merge requests (use gitlab_merge_request), project settings (use gitlab_project), CI/CD (use gitlab_pipeline).

Side effects: delete/move are irreversible; move changes URL and IID. Time tracking uses dedicated actions — do NOT pass time params to update.

Returns: resource object for single-item actions; paginated list ({page, per_page, total, next_page}) for *_list / list / list_all / list_group / participants / mrs_* / iteration_list_*; GraphQL cursor pagination ({nodes, page_info}) for work_item_list; {success, message} for delete actions.
Errors: 404 (hint: issue_iid is project-scoped — supply project_id; for list_all use scope/iids), 403 (hint: Reporter+ to comment, Developer+ to edit/move), 400 (hint: state_event ∈ close/reopen; dates ISO 8601; weight integer 0–9 — Premium+).

Param conventions: * = required. Most actions need project_id* + issue_iid*. List actions accept page, per_page. Work item actions use full_path* + work_item_iid* (GraphQL).

Issue CRUD:
- create: project_id*, title*, description, assignee_id, assignee_ids ([]int), labels (comma-separated), milestone_id, due_date (YYYY-MM-DD), confidential, issue_type (issue/incident/test_case/task), weight, epic_id
- get: project_id*, issue_iid*
- get_by_id: issue_id* (global ID, no project_id needed)
- list: project_id*, state (opened/closed/all), labels, not_labels, milestone, scope (created_by_me/assigned_to_me/all), search, assignee_username, author_username, iids ([]int), issue_type, confidential, created_after/before, updated_after/before (ISO 8601), order_by (created_at/updated_at/priority/due_date), sort (asc/desc)
- list_all: global issue list (no project_id). Same filters as list.
- list_group: group_id*, state, labels, milestone, scope, search, order_by, sort
- update: project_id*, issue_iid*, title, description, state_event (close/reopen), assignee_id, assignee_ids, labels, add_labels, remove_labels, milestone_id, due_date, confidential, issue_type, weight, epic_id, discussion_locked
- delete: project_id*, issue_iid* (permanent, irreversible)
- reorder: project_id*, issue_iid*, move_after_id, move_before_id
- move: project_id*, issue_iid*, to_project_id* (moves to another project)
- subscribe / unsubscribe: project_id*, issue_iid*
- create_todo: project_id*, issue_iid*

Time tracking:
- time_estimate_set: project_id*, issue_iid*, duration* (e.g. 3h30m)
- time_estimate_reset / spent_time_reset: project_id*, issue_iid*
- spent_time_add: project_id*, issue_iid*, duration*, summary
- time_stats_get: project_id*, issue_iid*

Participants & related MRs:
- participants: project_id*, issue_iid*
- mrs_closing / mrs_related: project_id*, issue_iid*

Notes (note_*): project_id*, issue_iid* for all.
- note_list: order_by, sort
- note_get / note_delete: note_id*
- note_create: body*, internal
- note_update: note_id*, body*

Issue links (link_*): project_id*, issue_iid* for all.
- link_list
- link_get / link_delete: issue_link_id*
- link_create: target_project_id*, target_issue_iid*, link_type

Discussions (discussion_*): project_id*, issue_iid* for all.
- discussion_list
- discussion_get: discussion_id*
- discussion_create: body*
- discussion_add_note: discussion_id*, body*
- discussion_update_note: discussion_id*, note_id*, body*
- discussion_delete_note: discussion_id*, note_id*

Work Items (work_item_*): full_path* for all. Use types=["Epic"] to list epics (replaces deprecated epic_list).
- work_item_list: state, search, types, author_username, label_name, confidential, sort, first, after
- work_item_get: work_item_iid*
- work_item_create: work_item_type_id*, title*, description, confidential, assignee_ids, milestone_id, label_ids, weight, health_status, color, due_date, start_date, linked_items {work_item_ids, link_type}
- work_item_update: work_item_iid*, title, state_event (CLOSE/REOPEN), description, assignee_ids, milestone_id, crm_contact_ids, parent_id, add_label_ids, remove_label_ids, start_date, due_date, weight, health_status, iteration_id, color, status (TODO/IN_PROGRESS/DONE/WONT_DO/DUPLICATE)
- work_item_delete: work_item_iid* (permanent)

Statistics:
- statistics_get: global issue stats (optional filters same as list)
- statistics_get_group: group_id*
- statistics_get_project: project_id*

Award emoji (emoji_issue_*): project_id*, issue_iid* for all.
- emoji_issue_list / emoji_issue_get (+ award_id*) / emoji_issue_delete (+ award_id*)
- emoji_issue_create: name*
- emoji_issue_note_list / emoji_issue_note_get: note_id*, (+ award_id* for get)
- emoji_issue_note_create: note_id*, name*
- emoji_issue_note_delete: note_id*, award_id*

Resource events (event_issue_*): project_id*, issue_iid* for all.
- event_issue_label_list / event_issue_label_get (+ label_event_id*)
- event_issue_milestone_list / event_issue_milestone_get (+ milestone_event_id*)
- event_issue_state_list / event_issue_state_get (+ state_event_id*)
- event_issue_iteration_list / event_issue_iteration_get (+ iteration_event_id*)
- event_issue_weight_list

Iterations (Premium+ — requires GITLAB_ENTERPRISE=true):
- iteration_list_project: project_id*, state (1=opened, 2=upcoming, 3=current, 4=closed), search, include_ancestors
- iteration_list_group: group_id*, state, search, include_ancestors

See also: gitlab_merge_request (MR lifecycle), gitlab_project (project settings, labels, milestones), gitlab_pipeline (CI/CD).

Annotations: readOnly=false, destructive=true, idempotent=false, openWorld=true

**Action Output Schemas:**

<details><summary>create</summary>

```json
{"additionalProperties":false,"properties":{"assignees":{"items":{"type":"string"},"type":["null","array"]},"author":{"type":"string"},"closed_at":{"type":"string"},"closed_by":{"type":"string"},"confidential":{"type":"boolean"},"created_at":{"type":"string"},"description":{"type":"string"},"discussion_locked":{"type":"boolean"},"downvotes":{"type":"integer"},"due_date":{"type":"string"},"epic_issue_id":{"type":"integer"},"health_status":{"type":"string"},"id":{"type":"integer"},"issue_iid":{"type":"integer"},"issue_type":{"type":"string"},"labels":{"items":{"type":"string"},"type":["null","array"]},"merge_request_count":{"type":"integer"},"milestone":{"type":"string"},"moved_to_id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"project_id":{"type":"integer"},"references":{"type":"string"},"state":{"type":"string"},"subscribed":{"type":"boolean"},"task_completion_count":{"type":"integer"},"task_completion_total":{"type":"integer"},"time_estimate":{"type":"integer"},"title":{"type":"string"},"total_time_spent":{"type":"integer"},"updated_at":{"type":"string"},"upvotes":{"type":"integer"},"user_notes_count":{"type":"integer"},"web_url":{"type":"string"},"weight":{"type":"integer"}},"required":["id","issue_iid","title","description","state","labels","assignees","milestone","author","web_url","created_at","updated_at","closed_at","due_date","confidential","discussion_locked","project_id","subscribed"],"type":"object"}
```

</details>

<details><summary>create_todo</summary>

```json
{"additionalProperties":false,"properties":{"action_name":{"type":"string"},"body":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"state":{"type":"string"},"target_title":{"type":"string"},"target_type":{"type":"string"},"target_url":{"type":"string"}},"required":["id","action_name","target_type","target_title","target_url","state"],"type":"object"}
```

</details>

<details><summary>delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>discussion_add_note</summary>

```json
{"additionalProperties":false,"properties":{"author":{"type":"string"},"body":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"system":{"type":"boolean"},"updated_at":{"type":"string"}},"required":["id","body","author","created_at","system"],"type":"object"}
```

</details>

<details><summary>discussion_create</summary>

```json
{"additionalProperties":false,"properties":{"id":{"type":"string"},"individual_note":{"type":"boolean"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"notes":{"items":{"additionalProperties":false,"properties":{"author":{"type":"string"},"body":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"system":{"type":"boolean"},"updated_at":{"type":"string"}},"required":["id","body","author","created_at","system"],"type":"object"},"type":["null","array"]}},"required":["id","individual_note","notes"],"type":"object"}
```

</details>

<details><summary>discussion_delete_note</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>discussion_get</summary>

```json
{"additionalProperties":false,"properties":{"id":{"type":"string"},"individual_note":{"type":"boolean"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"notes":{"items":{"additionalProperties":false,"properties":{"author":{"type":"string"},"body":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"system":{"type":"boolean"},"updated_at":{"type":"string"}},"required":["id","body","author","created_at","system"],"type":"object"},"type":["null","array"]}},"required":["id","individual_note","notes"],"type":"object"}
```

</details>

<details><summary>discussion_list</summary>

```json
{"additionalProperties":false,"properties":{"discussions":{"items":{"additionalProperties":false,"properties":{"id":{"type":"string"},"individual_note":{"type":"boolean"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"notes":{"items":{"additionalProperties":false,"properties":{"author":{"type":"string"},"body":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"system":{"type":"boolean"},"updated_at":{"type":"string"}},"required":["id","body","author","created_at","system"],"type":"object"},"type":["null","array"]}},"required":["id","individual_note","notes"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["discussions","pagination"],"type":"object"}
```

</details>

<details><summary>discussion_update_note</summary>

```json
{"additionalProperties":false,"properties":{"author":{"type":"string"},"body":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"system":{"type":"boolean"},"updated_at":{"type":"string"}},"required":["id","body","author","created_at","system"],"type":"object"}
```

</details>

<details><summary>emoji_issue_create</summary>

```json
{"additionalProperties":false,"properties":{"awardable_id":{"type":"integer"},"awardable_type":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"user_id":{"type":"integer"},"user_web_url":{"type":"string"},"username":{"type":"string"}},"required":["id","name","user_id","username","awardable_id","awardable_type"],"type":"object"}
```

</details>

<details><summary>emoji_issue_delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>emoji_issue_get</summary>

```json
{"additionalProperties":false,"properties":{"awardable_id":{"type":"integer"},"awardable_type":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"user_id":{"type":"integer"},"user_web_url":{"type":"string"},"username":{"type":"string"}},"required":["id","name","user_id","username","awardable_id","awardable_type"],"type":"object"}
```

</details>

<details><summary>emoji_issue_list</summary>

```json
{"additionalProperties":false,"properties":{"award_emoji":{"items":{"additionalProperties":false,"properties":{"awardable_id":{"type":"integer"},"awardable_type":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"user_id":{"type":"integer"},"user_web_url":{"type":"string"},"username":{"type":"string"}},"required":["id","name","user_id","username","awardable_id","awardable_type"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["award_emoji","pagination"],"type":"object"}
```

</details>

<details><summary>emoji_issue_note_create</summary>

```json
{"additionalProperties":false,"properties":{"awardable_id":{"type":"integer"},"awardable_type":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"user_id":{"type":"integer"},"user_web_url":{"type":"string"},"username":{"type":"string"}},"required":["id","name","user_id","username","awardable_id","awardable_type"],"type":"object"}
```

</details>

<details><summary>emoji_issue_note_delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>emoji_issue_note_get</summary>

```json
{"additionalProperties":false,"properties":{"awardable_id":{"type":"integer"},"awardable_type":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"user_id":{"type":"integer"},"user_web_url":{"type":"string"},"username":{"type":"string"}},"required":["id","name","user_id","username","awardable_id","awardable_type"],"type":"object"}
```

</details>

<details><summary>emoji_issue_note_list</summary>

```json
{"additionalProperties":false,"properties":{"award_emoji":{"items":{"additionalProperties":false,"properties":{"awardable_id":{"type":"integer"},"awardable_type":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"user_id":{"type":"integer"},"user_web_url":{"type":"string"},"username":{"type":"string"}},"required":["id","name","user_id","username","awardable_id","awardable_type"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["award_emoji","pagination"],"type":"object"}
```

</details>

<details><summary>event_issue_iteration_get</summary>

```json
{"additionalProperties":false,"properties":{"action":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"integer"},"iteration":{"additionalProperties":false,"properties":{"due_date":{"type":"string"},"group_id":{"type":"integer"},"id":{"type":"integer"},"iid":{"type":"integer"},"sequence":{"type":"integer"},"start_date":{"type":"string"},"state":{"type":"integer"},"title":{"type":"string"},"web_url":{"type":"string"}},"required":["id","iid","sequence","group_id","title","state"],"type":"object"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"resource_id":{"type":"integer"},"resource_type":{"type":"string"},"user_id":{"type":"integer"},"username":{"type":"string"}},"required":["id","action","created_at","resource_type","resource_id","user_id","username","iteration"],"type":"object"}
```

</details>

<details><summary>event_issue_iteration_list</summary>

```json
{"additionalProperties":false,"properties":{"events":{"items":{"additionalProperties":false,"properties":{"action":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"integer"},"iteration":{"additionalProperties":false,"properties":{"due_date":{"type":"string"},"group_id":{"type":"integer"},"id":{"type":"integer"},"iid":{"type":"integer"},"sequence":{"type":"integer"},"start_date":{"type":"string"},"state":{"type":"integer"},"title":{"type":"string"},"web_url":{"type":"string"}},"required":["id","iid","sequence","group_id","title","state"],"type":"object"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"resource_id":{"type":"integer"},"resource_type":{"type":"string"},"user_id":{"type":"integer"},"username":{"type":"string"}},"required":["id","action","created_at","resource_type","resource_id","user_id","username","iteration"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["events","pagination"],"type":"object"}
```

</details>

<details><summary>event_issue_label_get</summary>

```json
{"additionalProperties":false,"properties":{"action":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"integer"},"label":{"additionalProperties":false,"properties":{"color":{"type":"string"},"description":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"text_color":{"type":"string"}},"required":["id","name","color","text_color","description"],"type":"object"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"resource_id":{"type":"integer"},"resource_type":{"type":"string"},"user_id":{"type":"integer"},"username":{"type":"string"}},"required":["id","action","created_at","resource_type","resource_id","user_id","username","label"],"type":"object"}
```

</details>

<details><summary>event_issue_label_list</summary>

```json
{"additionalProperties":false,"properties":{"events":{"items":{"additionalProperties":false,"properties":{"action":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"integer"},"label":{"additionalProperties":false,"properties":{"color":{"type":"string"},"description":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"text_color":{"type":"string"}},"required":["id","name","color","text_color","description"],"type":"object"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"resource_id":{"type":"integer"},"resource_type":{"type":"string"},"user_id":{"type":"integer"},"username":{"type":"string"}},"required":["id","action","created_at","resource_type","resource_id","user_id","username","label"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["events","pagination"],"type":"object"}
```

</details>

<details><summary>event_issue_milestone_get</summary>

```json
{"additionalProperties":false,"properties":{"action":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"integer"},"milestone_id":{"type":"integer"},"milestone_title":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"resource_id":{"type":"integer"},"resource_type":{"type":"string"},"user_id":{"type":"integer"},"username":{"type":"string"}},"required":["id","action","created_at","resource_type","resource_id","user_id","username","milestone_id","milestone_title"],"type":"object"}
```

</details>

<details><summary>event_issue_milestone_list</summary>

```json
{"additionalProperties":false,"properties":{"events":{"items":{"additionalProperties":false,"properties":{"action":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"integer"},"milestone_id":{"type":"integer"},"milestone_title":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"resource_id":{"type":"integer"},"resource_type":{"type":"string"},"user_id":{"type":"integer"},"username":{"type":"string"}},"required":["id","action","created_at","resource_type","resource_id","user_id","username","milestone_id","milestone_title"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["events","pagination"],"type":"object"}
```

</details>

<details><summary>event_issue_state_get</summary>

```json
{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"resource_id":{"type":"integer"},"resource_type":{"type":"string"},"state":{"type":"string"},"user_id":{"type":"integer"},"username":{"type":"string"}},"required":["id","state","created_at","resource_type","resource_id","user_id","username"],"type":"object"}
```

</details>

<details><summary>event_issue_state_list</summary>

```json
{"additionalProperties":false,"properties":{"events":{"items":{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"resource_id":{"type":"integer"},"resource_type":{"type":"string"},"state":{"type":"string"},"user_id":{"type":"integer"},"username":{"type":"string"}},"required":["id","state","created_at","resource_type","resource_id","user_id","username"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["events","pagination"],"type":"object"}
```

</details>

<details><summary>event_issue_weight_list</summary>

```json
{"additionalProperties":false,"properties":{"events":{"items":{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"id":{"type":"integer"},"issue_id":{"type":"integer"},"resource_id":{"type":"integer"},"resource_type":{"type":"string"},"state":{"type":"string"},"user_id":{"type":"integer"},"username":{"type":"string"},"weight":{"type":"integer"}},"required":["id","created_at","resource_type","resource_id","state","issue_id","weight","user_id","username"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["events","pagination"],"type":"object"}
```

</details>

<details><summary>get</summary>

```json
{"additionalProperties":false,"properties":{"assignees":{"items":{"type":"string"},"type":["null","array"]},"author":{"type":"string"},"closed_at":{"type":"string"},"closed_by":{"type":"string"},"confidential":{"type":"boolean"},"created_at":{"type":"string"},"description":{"type":"string"},"discussion_locked":{"type":"boolean"},"downvotes":{"type":"integer"},"due_date":{"type":"string"},"epic_issue_id":{"type":"integer"},"health_status":{"type":"string"},"id":{"type":"integer"},"issue_iid":{"type":"integer"},"issue_type":{"type":"string"},"labels":{"items":{"type":"string"},"type":["null","array"]},"merge_request_count":{"type":"integer"},"milestone":{"type":"string"},"moved_to_id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"project_id":{"type":"integer"},"references":{"type":"string"},"state":{"type":"string"},"subscribed":{"type":"boolean"},"task_completion_count":{"type":"integer"},"task_completion_total":{"type":"integer"},"time_estimate":{"type":"integer"},"title":{"type":"string"},"total_time_spent":{"type":"integer"},"updated_at":{"type":"string"},"upvotes":{"type":"integer"},"user_notes_count":{"type":"integer"},"web_url":{"type":"string"},"weight":{"type":"integer"}},"required":["id","issue_iid","title","description","state","labels","assignees","milestone","author","web_url","created_at","updated_at","closed_at","due_date","confidential","discussion_locked","project_id","subscribed"],"type":"object"}
```

</details>

<details><summary>get_by_id</summary>

```json
{"additionalProperties":false,"properties":{"assignees":{"items":{"type":"string"},"type":["null","array"]},"author":{"type":"string"},"closed_at":{"type":"string"},"closed_by":{"type":"string"},"confidential":{"type":"boolean"},"created_at":{"type":"string"},"description":{"type":"string"},"discussion_locked":{"type":"boolean"},"downvotes":{"type":"integer"},"due_date":{"type":"string"},"epic_issue_id":{"type":"integer"},"health_status":{"type":"string"},"id":{"type":"integer"},"issue_iid":{"type":"integer"},"issue_type":{"type":"string"},"labels":{"items":{"type":"string"},"type":["null","array"]},"merge_request_count":{"type":"integer"},"milestone":{"type":"string"},"moved_to_id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"project_id":{"type":"integer"},"references":{"type":"string"},"state":{"type":"string"},"subscribed":{"type":"boolean"},"task_completion_count":{"type":"integer"},"task_completion_total":{"type":"integer"},"time_estimate":{"type":"integer"},"title":{"type":"string"},"total_time_spent":{"type":"integer"},"updated_at":{"type":"string"},"upvotes":{"type":"integer"},"user_notes_count":{"type":"integer"},"web_url":{"type":"string"},"weight":{"type":"integer"}},"required":["id","issue_iid","title","description","state","labels","assignees","milestone","author","web_url","created_at","updated_at","closed_at","due_date","confidential","discussion_locked","project_id","subscribed"],"type":"object"}
```

</details>

<details><summary>iteration_list_group</summary>

```json
{"additionalProperties":false,"properties":{"iterations":{"items":{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"description":{"type":"string"},"due_date":{"type":"string"},"group_id":{"type":"integer"},"id":{"type":"integer"},"iid":{"type":"integer"},"sequence":{"type":"integer"},"start_date":{"type":"string"},"state":{"type":"integer"},"title":{"type":"string"},"updated_at":{"type":"string"},"web_url":{"type":"string"}},"required":["id","iid","sequence","group_id","title","state"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["iterations","pagination"],"type":"object"}
```

</details>

<details><summary>iteration_list_project</summary>

```json
{"additionalProperties":false,"properties":{"iterations":{"items":{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"description":{"type":"string"},"due_date":{"type":"string"},"group_id":{"type":"integer"},"id":{"type":"integer"},"iid":{"type":"integer"},"sequence":{"type":"integer"},"start_date":{"type":"string"},"state":{"type":"integer"},"title":{"type":"string"},"updated_at":{"type":"string"},"web_url":{"type":"string"}},"required":["id","iid","sequence","group_id","title","state"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["iterations","pagination"],"type":"object"}
```

</details>

<details><summary>link_create</summary>

```json
{"additionalProperties":false,"properties":{"id":{"type":"integer"},"link_type":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"source_issue_iid":{"type":"integer"},"source_project_id":{"type":"integer"},"target_issue_iid":{"type":"integer"},"target_project_id":{"type":"integer"}},"required":["id","source_issue_iid","source_project_id","target_issue_iid","target_project_id","link_type"],"type":"object"}
```

</details>

<details><summary>link_delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>link_get</summary>

```json
{"additionalProperties":false,"properties":{"id":{"type":"integer"},"link_type":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"source_issue_iid":{"type":"integer"},"source_project_id":{"type":"integer"},"target_issue_iid":{"type":"integer"},"target_project_id":{"type":"integer"}},"required":["id","source_issue_iid","source_project_id","target_issue_iid","target_project_id","link_type"],"type":"object"}
```

</details>

<details><summary>link_list</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"relations":{"items":{"additionalProperties":false,"properties":{"id":{"type":"integer"},"iid":{"type":"integer"},"issue_link_id":{"type":"integer"},"link_type":{"type":"string"},"project_id":{"type":"integer"},"state":{"type":"string"},"title":{"type":"string"},"web_url":{"type":"string"}},"required":["id","iid","title","state","project_id","link_type","issue_link_id","web_url"],"type":"object"},"type":["null","array"]}},"required":["relations"],"type":"object"}
```

</details>

<details><summary>list</summary>

```json
{"additionalProperties":false,"properties":{"issues":{"items":{"additionalProperties":false,"properties":{"assignees":{"items":{"type":"string"},"type":["null","array"]},"author":{"type":"string"},"closed_at":{"type":"string"},"closed_by":{"type":"string"},"confidential":{"type":"boolean"},"created_at":{"type":"string"},"description":{"type":"string"},"discussion_locked":{"type":"boolean"},"downvotes":{"type":"integer"},"due_date":{"type":"string"},"epic_issue_id":{"type":"integer"},"health_status":{"type":"string"},"id":{"type":"integer"},"issue_iid":{"type":"integer"},"issue_type":{"type":"string"},"labels":{"items":{"type":"string"},"type":["null","array"]},"merge_request_count":{"type":"integer"},"milestone":{"type":"string"},"moved_to_id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"project_id":{"type":"integer"},"references":{"type":"string"},"state":{"type":"string"},"subscribed":{"type":"boolean"},"task_completion_count":{"type":"integer"},"task_completion_total":{"type":"integer"},"time_estimate":{"type":"integer"},"title":{"type":"string"},"total_time_spent":{"type":"integer"},"updated_at":{"type":"string"},"upvotes":{"type":"integer"},"user_notes_count":{"type":"integer"},"web_url":{"type":"string"},"weight":{"type":"integer"}},"required":["id","issue_iid","title","description","state","labels","assignees","milestone","author","web_url","created_at","updated_at","closed_at","due_date","confidential","discussion_locked","project_id","subscribed"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["issues","pagination"],"type":"object"}
```

</details>

<details><summary>list_all</summary>

```json
{"additionalProperties":false,"properties":{"issues":{"items":{"additionalProperties":false,"properties":{"assignees":{"items":{"type":"string"},"type":["null","array"]},"author":{"type":"string"},"closed_at":{"type":"string"},"closed_by":{"type":"string"},"confidential":{"type":"boolean"},"created_at":{"type":"string"},"description":{"type":"string"},"discussion_locked":{"type":"boolean"},"downvotes":{"type":"integer"},"due_date":{"type":"string"},"epic_issue_id":{"type":"integer"},"health_status":{"type":"string"},"id":{"type":"integer"},"issue_iid":{"type":"integer"},"issue_type":{"type":"string"},"labels":{"items":{"type":"string"},"type":["null","array"]},"merge_request_count":{"type":"integer"},"milestone":{"type":"string"},"moved_to_id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"project_id":{"type":"integer"},"references":{"type":"string"},"state":{"type":"string"},"subscribed":{"type":"boolean"},"task_completion_count":{"type":"integer"},"task_completion_total":{"type":"integer"},"time_estimate":{"type":"integer"},"title":{"type":"string"},"total_time_spent":{"type":"integer"},"updated_at":{"type":"string"},"upvotes":{"type":"integer"},"user_notes_count":{"type":"integer"},"web_url":{"type":"string"},"weight":{"type":"integer"}},"required":["id","issue_iid","title","description","state","labels","assignees","milestone","author","web_url","created_at","updated_at","closed_at","due_date","confidential","discussion_locked","project_id","subscribed"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["issues","pagination"],"type":"object"}
```

</details>

<details><summary>list_group</summary>

```json
{"additionalProperties":false,"properties":{"issues":{"items":{"additionalProperties":false,"properties":{"assignees":{"items":{"type":"string"},"type":["null","array"]},"author":{"type":"string"},"closed_at":{"type":"string"},"closed_by":{"type":"string"},"confidential":{"type":"boolean"},"created_at":{"type":"string"},"description":{"type":"string"},"discussion_locked":{"type":"boolean"},"downvotes":{"type":"integer"},"due_date":{"type":"string"},"epic_issue_id":{"type":"integer"},"health_status":{"type":"string"},"id":{"type":"integer"},"issue_iid":{"type":"integer"},"issue_type":{"type":"string"},"labels":{"items":{"type":"string"},"type":["null","array"]},"merge_request_count":{"type":"integer"},"milestone":{"type":"string"},"moved_to_id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"project_id":{"type":"integer"},"references":{"type":"string"},"state":{"type":"string"},"subscribed":{"type":"boolean"},"task_completion_count":{"type":"integer"},"task_completion_total":{"type":"integer"},"time_estimate":{"type":"integer"},"title":{"type":"string"},"total_time_spent":{"type":"integer"},"updated_at":{"type":"string"},"upvotes":{"type":"integer"},"user_notes_count":{"type":"integer"},"web_url":{"type":"string"},"weight":{"type":"integer"}},"required":["id","issue_iid","title","description","state","labels","assignees","milestone","author","web_url","created_at","updated_at","closed_at","due_date","confidential","discussion_locked","project_id","subscribed"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["issues","pagination"],"type":"object"}
```

</details>

<details><summary>move</summary>

```json
{"additionalProperties":false,"properties":{"assignees":{"items":{"type":"string"},"type":["null","array"]},"author":{"type":"string"},"closed_at":{"type":"string"},"closed_by":{"type":"string"},"confidential":{"type":"boolean"},"created_at":{"type":"string"},"description":{"type":"string"},"discussion_locked":{"type":"boolean"},"downvotes":{"type":"integer"},"due_date":{"type":"string"},"epic_issue_id":{"type":"integer"},"health_status":{"type":"string"},"id":{"type":"integer"},"issue_iid":{"type":"integer"},"issue_type":{"type":"string"},"labels":{"items":{"type":"string"},"type":["null","array"]},"merge_request_count":{"type":"integer"},"milestone":{"type":"string"},"moved_to_id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"project_id":{"type":"integer"},"references":{"type":"string"},"state":{"type":"string"},"subscribed":{"type":"boolean"},"task_completion_count":{"type":"integer"},"task_completion_total":{"type":"integer"},"time_estimate":{"type":"integer"},"title":{"type":"string"},"total_time_spent":{"type":"integer"},"updated_at":{"type":"string"},"upvotes":{"type":"integer"},"user_notes_count":{"type":"integer"},"web_url":{"type":"string"},"weight":{"type":"integer"}},"required":["id","issue_iid","title","description","state","labels","assignees","milestone","author","web_url","created_at","updated_at","closed_at","due_date","confidential","discussion_locked","project_id","subscribed"],"type":"object"}
```

</details>

<details><summary>mrs_closing</summary>

```json
{"additionalProperties":false,"properties":{"merge_requests":{"items":{"additionalProperties":false,"properties":{"author":{"type":"string"},"id":{"type":"integer"},"merge_request_iid":{"type":"integer"},"source_branch":{"type":"string"},"state":{"type":"string"},"target_branch":{"type":"string"},"title":{"type":"string"},"web_url":{"type":"string"}},"required":["id","merge_request_iid","title","state","source_branch","target_branch","author","web_url"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["merge_requests","pagination"],"type":"object"}
```

</details>

<details><summary>mrs_related</summary>

```json
{"additionalProperties":false,"properties":{"merge_requests":{"items":{"additionalProperties":false,"properties":{"author":{"type":"string"},"id":{"type":"integer"},"merge_request_iid":{"type":"integer"},"source_branch":{"type":"string"},"state":{"type":"string"},"target_branch":{"type":"string"},"title":{"type":"string"},"web_url":{"type":"string"}},"required":["id","merge_request_iid","title","state","source_branch","target_branch","author","web_url"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["merge_requests","pagination"],"type":"object"}
```

</details>

<details><summary>note_create</summary>

```json
{"additionalProperties":false,"properties":{"author":{"type":"string"},"body":{"type":"string"},"commit_id":{"type":"string"},"confidential":{"type":"boolean"},"created_at":{"type":"string"},"id":{"type":"integer"},"internal":{"type":"boolean"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"notable_id":{"type":"integer"},"notable_iid":{"type":"integer"},"notable_type":{"type":"string"},"project_id":{"type":"integer"},"resolvable":{"type":"boolean"},"resolved":{"type":"boolean"},"system":{"type":"boolean"},"type":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","body","author","created_at","updated_at","system","internal","confidential"],"type":"object"}
```

</details>

<details><summary>note_delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>note_get</summary>

```json
{"additionalProperties":false,"properties":{"author":{"type":"string"},"body":{"type":"string"},"commit_id":{"type":"string"},"confidential":{"type":"boolean"},"created_at":{"type":"string"},"id":{"type":"integer"},"internal":{"type":"boolean"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"notable_id":{"type":"integer"},"notable_iid":{"type":"integer"},"notable_type":{"type":"string"},"project_id":{"type":"integer"},"resolvable":{"type":"boolean"},"resolved":{"type":"boolean"},"system":{"type":"boolean"},"type":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","body","author","created_at","updated_at","system","internal","confidential"],"type":"object"}
```

</details>

<details><summary>note_list</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"notes":{"items":{"additionalProperties":false,"properties":{"author":{"type":"string"},"body":{"type":"string"},"commit_id":{"type":"string"},"confidential":{"type":"boolean"},"created_at":{"type":"string"},"id":{"type":"integer"},"internal":{"type":"boolean"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"notable_id":{"type":"integer"},"notable_iid":{"type":"integer"},"notable_type":{"type":"string"},"project_id":{"type":"integer"},"resolvable":{"type":"boolean"},"resolved":{"type":"boolean"},"system":{"type":"boolean"},"type":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","body","author","created_at","updated_at","system","internal","confidential"],"type":"object"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["notes","pagination"],"type":"object"}
```

</details>

<details><summary>note_update</summary>

```json
{"additionalProperties":false,"properties":{"author":{"type":"string"},"body":{"type":"string"},"commit_id":{"type":"string"},"confidential":{"type":"boolean"},"created_at":{"type":"string"},"id":{"type":"integer"},"internal":{"type":"boolean"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"notable_id":{"type":"integer"},"notable_iid":{"type":"integer"},"notable_type":{"type":"string"},"project_id":{"type":"integer"},"resolvable":{"type":"boolean"},"resolved":{"type":"boolean"},"system":{"type":"boolean"},"type":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","body","author","created_at","updated_at","system","internal","confidential"],"type":"object"}
```

</details>

<details><summary>participants</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"participants":{"items":{"additionalProperties":false,"properties":{"id":{"type":"integer"},"name":{"type":"string"},"username":{"type":"string"},"web_url":{"type":"string"}},"required":["id","username","name","web_url"],"type":"object"},"type":["null","array"]}},"required":["participants"],"type":"object"}
```

</details>

<details><summary>reorder</summary>

```json
{"additionalProperties":false,"properties":{"assignees":{"items":{"type":"string"},"type":["null","array"]},"author":{"type":"string"},"closed_at":{"type":"string"},"closed_by":{"type":"string"},"confidential":{"type":"boolean"},"created_at":{"type":"string"},"description":{"type":"string"},"discussion_locked":{"type":"boolean"},"downvotes":{"type":"integer"},"due_date":{"type":"string"},"epic_issue_id":{"type":"integer"},"health_status":{"type":"string"},"id":{"type":"integer"},"issue_iid":{"type":"integer"},"issue_type":{"type":"string"},"labels":{"items":{"type":"string"},"type":["null","array"]},"merge_request_count":{"type":"integer"},"milestone":{"type":"string"},"moved_to_id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"project_id":{"type":"integer"},"references":{"type":"string"},"state":{"type":"string"},"subscribed":{"type":"boolean"},"task_completion_count":{"type":"integer"},"task_completion_total":{"type":"integer"},"time_estimate":{"type":"integer"},"title":{"type":"string"},"total_time_spent":{"type":"integer"},"updated_at":{"type":"string"},"upvotes":{"type":"integer"},"user_notes_count":{"type":"integer"},"web_url":{"type":"string"},"weight":{"type":"integer"}},"required":["id","issue_iid","title","description","state","labels","assignees","milestone","author","web_url","created_at","updated_at","closed_at","due_date","confidential","discussion_locked","project_id","subscribed"],"type":"object"}
```

</details>

<details><summary>spent_time_add</summary>

```json
{"additionalProperties":false,"properties":{"human_time_estimate":{"type":"string"},"human_total_time_spent":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"time_estimate":{"type":"integer"},"total_time_spent":{"type":"integer"}},"required":["human_time_estimate","human_total_time_spent","time_estimate","total_time_spent"],"type":"object"}
```

</details>

<details><summary>spent_time_reset</summary>

```json
{"additionalProperties":false,"properties":{"human_time_estimate":{"type":"string"},"human_total_time_spent":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"time_estimate":{"type":"integer"},"total_time_spent":{"type":"integer"}},"required":["human_time_estimate","human_total_time_spent","time_estimate","total_time_spent"],"type":"object"}
```

</details>

<details><summary>statistics_get</summary>

```json
{"additionalProperties":false,"properties":{"all":{"type":"integer"},"closed":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"opened":{"type":"integer"}},"required":["all","closed","opened"],"type":"object"}
```

</details>

<details><summary>statistics_get_group</summary>

```json
{"additionalProperties":false,"properties":{"all":{"type":"integer"},"closed":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"opened":{"type":"integer"}},"required":["all","closed","opened"],"type":"object"}
```

</details>

<details><summary>statistics_get_project</summary>

```json
{"additionalProperties":false,"properties":{"all":{"type":"integer"},"closed":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"opened":{"type":"integer"}},"required":["all","closed","opened"],"type":"object"}
```

</details>

<details><summary>subscribe</summary>

```json
{"additionalProperties":false,"properties":{"assignees":{"items":{"type":"string"},"type":["null","array"]},"author":{"type":"string"},"closed_at":{"type":"string"},"closed_by":{"type":"string"},"confidential":{"type":"boolean"},"created_at":{"type":"string"},"description":{"type":"string"},"discussion_locked":{"type":"boolean"},"downvotes":{"type":"integer"},"due_date":{"type":"string"},"epic_issue_id":{"type":"integer"},"health_status":{"type":"string"},"id":{"type":"integer"},"issue_iid":{"type":"integer"},"issue_type":{"type":"string"},"labels":{"items":{"type":"string"},"type":["null","array"]},"merge_request_count":{"type":"integer"},"milestone":{"type":"string"},"moved_to_id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"project_id":{"type":"integer"},"references":{"type":"string"},"state":{"type":"string"},"subscribed":{"type":"boolean"},"task_completion_count":{"type":"integer"},"task_completion_total":{"type":"integer"},"time_estimate":{"type":"integer"},"title":{"type":"string"},"total_time_spent":{"type":"integer"},"updated_at":{"type":"string"},"upvotes":{"type":"integer"},"user_notes_count":{"type":"integer"},"web_url":{"type":"string"},"weight":{"type":"integer"}},"required":["id","issue_iid","title","description","state","labels","assignees","milestone","author","web_url","created_at","updated_at","closed_at","due_date","confidential","discussion_locked","project_id","subscribed"],"type":"object"}
```

</details>

<details><summary>time_estimate_reset</summary>

```json
{"additionalProperties":false,"properties":{"human_time_estimate":{"type":"string"},"human_total_time_spent":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"time_estimate":{"type":"integer"},"total_time_spent":{"type":"integer"}},"required":["human_time_estimate","human_total_time_spent","time_estimate","total_time_spent"],"type":"object"}
```

</details>

<details><summary>time_estimate_set</summary>

```json
{"additionalProperties":false,"properties":{"human_time_estimate":{"type":"string"},"human_total_time_spent":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"time_estimate":{"type":"integer"},"total_time_spent":{"type":"integer"}},"required":["human_time_estimate","human_total_time_spent","time_estimate","total_time_spent"],"type":"object"}
```

</details>

<details><summary>time_stats_get</summary>

```json
{"additionalProperties":false,"properties":{"human_time_estimate":{"type":"string"},"human_total_time_spent":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"time_estimate":{"type":"integer"},"total_time_spent":{"type":"integer"}},"required":["human_time_estimate","human_total_time_spent","time_estimate","total_time_spent"],"type":"object"}
```

</details>

<details><summary>unsubscribe</summary>

```json
{"additionalProperties":false,"properties":{"assignees":{"items":{"type":"string"},"type":["null","array"]},"author":{"type":"string"},"closed_at":{"type":"string"},"closed_by":{"type":"string"},"confidential":{"type":"boolean"},"created_at":{"type":"string"},"description":{"type":"string"},"discussion_locked":{"type":"boolean"},"downvotes":{"type":"integer"},"due_date":{"type":"string"},"epic_issue_id":{"type":"integer"},"health_status":{"type":"string"},"id":{"type":"integer"},"issue_iid":{"type":"integer"},"issue_type":{"type":"string"},"labels":{"items":{"type":"string"},"type":["null","array"]},"merge_request_count":{"type":"integer"},"milestone":{"type":"string"},"moved_to_id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"project_id":{"type":"integer"},"references":{"type":"string"},"state":{"type":"string"},"subscribed":{"type":"boolean"},"task_completion_count":{"type":"integer"},"task_completion_total":{"type":"integer"},"time_estimate":{"type":"integer"},"title":{"type":"string"},"total_time_spent":{"type":"integer"},"updated_at":{"type":"string"},"upvotes":{"type":"integer"},"user_notes_count":{"type":"integer"},"web_url":{"type":"string"},"weight":{"type":"integer"}},"required":["id","issue_iid","title","description","state","labels","assignees","milestone","author","web_url","created_at","updated_at","closed_at","due_date","confidential","discussion_locked","project_id","subscribed"],"type":"object"}
```

</details>

<details><summary>update</summary>

```json
{"additionalProperties":false,"properties":{"assignees":{"items":{"type":"string"},"type":["null","array"]},"author":{"type":"string"},"closed_at":{"type":"string"},"closed_by":{"type":"string"},"confidential":{"type":"boolean"},"created_at":{"type":"string"},"description":{"type":"string"},"discussion_locked":{"type":"boolean"},"downvotes":{"type":"integer"},"due_date":{"type":"string"},"epic_issue_id":{"type":"integer"},"health_status":{"type":"string"},"id":{"type":"integer"},"issue_iid":{"type":"integer"},"issue_type":{"type":"string"},"labels":{"items":{"type":"string"},"type":["null","array"]},"merge_request_count":{"type":"integer"},"milestone":{"type":"string"},"moved_to_id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"project_id":{"type":"integer"},"references":{"type":"string"},"state":{"type":"string"},"subscribed":{"type":"boolean"},"task_completion_count":{"type":"integer"},"task_completion_total":{"type":"integer"},"time_estimate":{"type":"integer"},"title":{"type":"string"},"total_time_spent":{"type":"integer"},"updated_at":{"type":"string"},"upvotes":{"type":"integer"},"user_notes_count":{"type":"integer"},"web_url":{"type":"string"},"weight":{"type":"integer"}},"required":["id","issue_iid","title","description","state","labels","assignees","milestone","author","web_url","created_at","updated_at","closed_at","due_date","confidential","discussion_locked","project_id","subscribed"],"type":"object"}
```

</details>

<details><summary>work_item_create</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"work_item":{"additionalProperties":false,"properties":{"assignees":{"items":{"type":"string"},"type":["null","array"]},"author":{"type":"string"},"closed_at":{"type":"string"},"confidential":{"type":"boolean"},"created_at":{"type":"string"},"description":{"type":"string"},"id":{"type":"integer"},"iid":{"type":"integer"},"labels":{"items":{"type":"string"},"type":["null","array"]},"linked_items":{"items":{"additionalProperties":false,"properties":{"iid":{"type":"integer"},"link_type":{"type":"string"},"path":{"type":"string"}},"required":["iid","link_type"],"type":"object"},"type":["null","array"]},"state":{"type":"string"},"status":{"type":"string"},"title":{"type":"string"},"type":{"type":"string"},"updated_at":{"type":"string"},"web_url":{"type":"string"}},"required":["id","iid","type","state","title"],"type":"object"}},"required":["work_item"],"type":"object"}
```

</details>

<details><summary>work_item_delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>work_item_get</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"work_item":{"additionalProperties":false,"properties":{"assignees":{"items":{"type":"string"},"type":["null","array"]},"author":{"type":"string"},"closed_at":{"type":"string"},"confidential":{"type":"boolean"},"created_at":{"type":"string"},"description":{"type":"string"},"id":{"type":"integer"},"iid":{"type":"integer"},"labels":{"items":{"type":"string"},"type":["null","array"]},"linked_items":{"items":{"additionalProperties":false,"properties":{"iid":{"type":"integer"},"link_type":{"type":"string"},"path":{"type":"string"}},"required":["iid","link_type"],"type":"object"},"type":["null","array"]},"state":{"type":"string"},"status":{"type":"string"},"title":{"type":"string"},"type":{"type":"string"},"updated_at":{"type":"string"},"web_url":{"type":"string"}},"required":["id","iid","type","state","title"],"type":"object"}},"required":["work_item"],"type":"object"}
```

</details>

<details><summary>work_item_list</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"work_items":{"items":{"additionalProperties":false,"properties":{"assignees":{"items":{"type":"string"},"type":["null","array"]},"author":{"type":"string"},"closed_at":{"type":"string"},"confidential":{"type":"boolean"},"created_at":{"type":"string"},"description":{"type":"string"},"id":{"type":"integer"},"iid":{"type":"integer"},"labels":{"items":{"type":"string"},"type":["null","array"]},"linked_items":{"items":{"additionalProperties":false,"properties":{"iid":{"type":"integer"},"link_type":{"type":"string"},"path":{"type":"string"}},"required":["iid","link_type"],"type":"object"},"type":["null","array"]},"state":{"type":"string"},"status":{"type":"string"},"title":{"type":"string"},"type":{"type":"string"},"updated_at":{"type":"string"},"web_url":{"type":"string"}},"required":["id","iid","type","state","title"],"type":"object"},"type":["null","array"]}},"required":["work_items"],"type":"object"}
```

</details>

<details><summary>work_item_update</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"work_item":{"additionalProperties":false,"properties":{"assignees":{"items":{"type":"string"},"type":["null","array"]},"author":{"type":"string"},"closed_at":{"type":"string"},"confidential":{"type":"boolean"},"created_at":{"type":"string"},"description":{"type":"string"},"id":{"type":"integer"},"iid":{"type":"integer"},"labels":{"items":{"type":"string"},"type":["null","array"]},"linked_items":{"items":{"additionalProperties":false,"properties":{"iid":{"type":"integer"},"link_type":{"type":"string"},"path":{"type":"string"}},"required":["iid","link_type"],"type":"object"},"type":["null","array"]},"state":{"type":"string"},"status":{"type":"string"},"title":{"type":"string"},"type":{"type":"string"},"updated_at":{"type":"string"},"web_url":{"type":"string"}},"required":["id","iid","type","state","title"],"type":"object"}},"required":["work_item"],"type":"object"}
```

</details>

### gitlab_job

**Job**

Use {"action":"list","params":{...}}; only top-level keys are action and params.
Action params schema: gitlab://tools/gitlab_job.<action>.
Action guidance:
- token_scope_remove_project: Use when removing a target project from another project's CI job token inbound allowlist.
Parameter guidance:
- token_scope_remove_project.project_id: scope_owner_project; source: Owning project whose CI job token allowlist is being changed.; avoid: Do not use the project being removed as project_id.
- token_scope_remove_project.target_project_id: target_project; source: Project being removed from or added to the allowlist.; avoid: Do not put the allowlist owner project here.

Manage GitLab CI/CD jobs and the CI/CD job token scope: lifecycle, manual play, log/artifact retrieval, and inbound trust boundaries. Erase/delete actions are destructive.
When to use: job details, logs, artifacts, retry/cancel jobs, job token scope. NOT for: pipeline-level operations (use gitlab_pipeline).

Behavior:
- Idempotent reads: list / list_project / get / trace / artifacts / download_artifacts / download_single_artifact / download_single_artifact_by_ref / list_bridges / token_scope_get / token_scope_list_inbound / token_scope_list_groups.
- retry starts a NEW job run on every call (NON-idempotent — returns a fresh job_id). play activates an existing manual job that has not yet run (same job_id; only manual jobs with rules.when=manual are eligible) and may pass new variables. cancel is idempotent (no-op once final). keep_artifacts / token_scope_patch / token_scope_add_project / token_scope_add_group are idempotent.
- Side effects: retry / play queue runners, consume CI minutes, and may trigger downstream pipelines and notifications. trace returns up to 100KB of log; download_artifacts streams up to 1MB inline (base64).
- Destructive: erase clears the job log and artifacts in place (irreversible); delete_artifacts removes a single job's artifacts; delete_project_artifacts wipes ALL artifacts across the project (irreversible). token_scope_remove_* tightens trust boundaries and may break running pipelines.

Param conventions: * = required. All job actions need project_id*. List actions accept page, per_page.

Jobs:
- list: project_id*, pipeline_id*, scope
- list_project: project_id*, scope, include_retried
- get: project_id*, job_id*
- trace: project_id*, job_id*. Returns job log (truncated to 100KB).
- cancel / retry / erase / keep_artifacts: project_id*, job_id*
- play: project_id*, job_id*, variables (array of {key, value, variable_type})
- wait: project_id*, job_id*, interval_seconds (5-60, default 10), timeout_seconds (1-3600, default 300), fail_on_error (default true)
- list_bridges: project_id*, pipeline_id*, scope
- delete_artifacts: project_id*, job_id*
- delete_project_artifacts: project_id*. Deletes ALL artifacts across project.

Artifact downloads (base64, max 1MB):
- artifacts: project_id*, job_id* — download the whole artifact archive from a known numeric job ID.
- download_artifacts: project_id*, ref_name*, job* — download the whole artifact archive by ref_name and job NAME (string). Never use with job_id.
- download_single_artifact: project_id*, job_id*, artifact_path* — use when the prompt gives a numeric job ID and one artifact file path such as coverage/report.xml. This is the single-file-by-job-id action.
- download_single_artifact_by_ref: project_id*, ref_name*, artifact_path*, job* — use when the prompt gives ref_name plus job NAME and one artifact file path. Never use with job_id.

Job token scope:
- token_scope_get / token_scope_patch: project_id*. Patch params: enabled.
- token_scope_list_inbound: project_id*
- token_scope_add_project / token_scope_remove_project: project_id*, target_project_id*
- token_scope_list_groups: project_id*
- token_scope_add_group / token_scope_remove_group: project_id*, target_group_id*

See also: gitlab_pipeline, gitlab_repository

Annotations: readOnly=false, destructive=true, idempotent=false, openWorld=true

**Action Output Schemas:**

<details><summary>artifacts</summary>

```json
{"additionalProperties":false,"properties":{"content":{"type":"string"},"job_id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"size":{"type":"integer"},"truncated":{"type":"boolean"}},"required":["size","content","truncated"],"type":"object"}
```

</details>

<details><summary>cancel</summary>

```json
{"additionalProperties":false,"properties":{"allow_failure":{"type":"boolean"},"artifacts_expire_at":{"type":"string"},"commit_sha":{"type":"string"},"coverage":{"type":"number"},"created_at":{"type":"string"},"duration":{"type":"number"},"erased_at":{"type":"string"},"failure_reason":{"type":"string"},"finished_at":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pipeline_id":{"type":"integer"},"queued_duration":{"type":"number"},"ref":{"type":"string"},"runner_id":{"type":"integer"},"stage":{"type":"string"},"started_at":{"type":"string"},"status":{"type":"string"},"tag":{"type":"boolean"},"tag_list":{"items":{"type":"string"},"type":["null","array"]},"user_username":{"type":"string"},"web_url":{"type":"string"}},"required":["id","name","stage","status","ref","tag","allow_failure","duration","queued_duration","web_url","pipeline_id","created_at"],"type":"object"}
```

</details>

<details><summary>delete_artifacts</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>delete_project_artifacts</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>download_artifacts</summary>

```json
{"additionalProperties":false,"properties":{"content":{"type":"string"},"job_id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"size":{"type":"integer"},"truncated":{"type":"boolean"}},"required":["size","content","truncated"],"type":"object"}
```

</details>

<details><summary>download_single_artifact</summary>

```json
{"additionalProperties":false,"properties":{"artifact_path":{"type":"string"},"content":{"type":"string"},"job_id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"size":{"type":"integer"},"truncated":{"type":"boolean"}},"required":["artifact_path","size","content","truncated"],"type":"object"}
```

</details>

<details><summary>download_single_artifact_by_ref</summary>

```json
{"additionalProperties":false,"properties":{"artifact_path":{"type":"string"},"content":{"type":"string"},"job_id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"size":{"type":"integer"},"truncated":{"type":"boolean"}},"required":["artifact_path","size","content","truncated"],"type":"object"}
```

</details>

<details><summary>erase</summary>

```json
{"additionalProperties":false,"properties":{"allow_failure":{"type":"boolean"},"artifacts_expire_at":{"type":"string"},"commit_sha":{"type":"string"},"coverage":{"type":"number"},"created_at":{"type":"string"},"duration":{"type":"number"},"erased_at":{"type":"string"},"failure_reason":{"type":"string"},"finished_at":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pipeline_id":{"type":"integer"},"queued_duration":{"type":"number"},"ref":{"type":"string"},"runner_id":{"type":"integer"},"stage":{"type":"string"},"started_at":{"type":"string"},"status":{"type":"string"},"tag":{"type":"boolean"},"tag_list":{"items":{"type":"string"},"type":["null","array"]},"user_username":{"type":"string"},"web_url":{"type":"string"}},"required":["id","name","stage","status","ref","tag","allow_failure","duration","queued_duration","web_url","pipeline_id","created_at"],"type":"object"}
```

</details>

<details><summary>get</summary>

```json
{"additionalProperties":false,"properties":{"allow_failure":{"type":"boolean"},"artifacts_expire_at":{"type":"string"},"commit_sha":{"type":"string"},"coverage":{"type":"number"},"created_at":{"type":"string"},"duration":{"type":"number"},"erased_at":{"type":"string"},"failure_reason":{"type":"string"},"finished_at":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pipeline_id":{"type":"integer"},"queued_duration":{"type":"number"},"ref":{"type":"string"},"runner_id":{"type":"integer"},"stage":{"type":"string"},"started_at":{"type":"string"},"status":{"type":"string"},"tag":{"type":"boolean"},"tag_list":{"items":{"type":"string"},"type":["null","array"]},"user_username":{"type":"string"},"web_url":{"type":"string"}},"required":["id","name","stage","status","ref","tag","allow_failure","duration","queued_duration","web_url","pipeline_id","created_at"],"type":"object"}
```

</details>

<details><summary>keep_artifacts</summary>

```json
{"additionalProperties":false,"properties":{"allow_failure":{"type":"boolean"},"artifacts_expire_at":{"type":"string"},"commit_sha":{"type":"string"},"coverage":{"type":"number"},"created_at":{"type":"string"},"duration":{"type":"number"},"erased_at":{"type":"string"},"failure_reason":{"type":"string"},"finished_at":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pipeline_id":{"type":"integer"},"queued_duration":{"type":"number"},"ref":{"type":"string"},"runner_id":{"type":"integer"},"stage":{"type":"string"},"started_at":{"type":"string"},"status":{"type":"string"},"tag":{"type":"boolean"},"tag_list":{"items":{"type":"string"},"type":["null","array"]},"user_username":{"type":"string"},"web_url":{"type":"string"}},"required":["id","name","stage","status","ref","tag","allow_failure","duration","queued_duration","web_url","pipeline_id","created_at"],"type":"object"}
```

</details>

<details><summary>list</summary>

```json
{"additionalProperties":false,"properties":{"jobs":{"items":{"additionalProperties":false,"properties":{"allow_failure":{"type":"boolean"},"artifacts_expire_at":{"type":"string"},"commit_sha":{"type":"string"},"coverage":{"type":"number"},"created_at":{"type":"string"},"duration":{"type":"number"},"erased_at":{"type":"string"},"failure_reason":{"type":"string"},"finished_at":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pipeline_id":{"type":"integer"},"queued_duration":{"type":"number"},"ref":{"type":"string"},"runner_id":{"type":"integer"},"stage":{"type":"string"},"started_at":{"type":"string"},"status":{"type":"string"},"tag":{"type":"boolean"},"tag_list":{"items":{"type":"string"},"type":["null","array"]},"user_username":{"type":"string"},"web_url":{"type":"string"}},"required":["id","name","stage","status","ref","tag","allow_failure","duration","queued_duration","web_url","pipeline_id","created_at"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["jobs","pagination"],"type":"object"}
```

</details>

<details><summary>list_bridges</summary>

```json
{"additionalProperties":false,"properties":{"bridges":{"items":{"additionalProperties":false,"properties":{"allow_failure":{"type":"boolean"},"coverage":{"type":"number"},"created_at":{"type":"string"},"downstream_pipeline_id":{"type":"integer"},"duration":{"type":"number"},"failure_reason":{"type":"string"},"finished_at":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"queued_duration":{"type":"number"},"ref":{"type":"string"},"stage":{"type":"string"},"started_at":{"type":"string"},"status":{"type":"string"},"tag":{"type":"boolean"},"user_username":{"type":"string"},"web_url":{"type":"string"}},"required":["id","name","stage","status","ref","tag","allow_failure","duration","queued_duration","web_url","created_at"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["bridges","pagination"],"type":"object"}
```

</details>

<details><summary>list_project</summary>

```json
{"additionalProperties":false,"properties":{"jobs":{"items":{"additionalProperties":false,"properties":{"allow_failure":{"type":"boolean"},"artifacts_expire_at":{"type":"string"},"commit_sha":{"type":"string"},"coverage":{"type":"number"},"created_at":{"type":"string"},"duration":{"type":"number"},"erased_at":{"type":"string"},"failure_reason":{"type":"string"},"finished_at":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pipeline_id":{"type":"integer"},"queued_duration":{"type":"number"},"ref":{"type":"string"},"runner_id":{"type":"integer"},"stage":{"type":"string"},"started_at":{"type":"string"},"status":{"type":"string"},"tag":{"type":"boolean"},"tag_list":{"items":{"type":"string"},"type":["null","array"]},"user_username":{"type":"string"},"web_url":{"type":"string"}},"required":["id","name","stage","status","ref","tag","allow_failure","duration","queued_duration","web_url","pipeline_id","created_at"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["jobs","pagination"],"type":"object"}
```

</details>

<details><summary>play</summary>

```json
{"additionalProperties":false,"properties":{"allow_failure":{"type":"boolean"},"artifacts_expire_at":{"type":"string"},"commit_sha":{"type":"string"},"coverage":{"type":"number"},"created_at":{"type":"string"},"duration":{"type":"number"},"erased_at":{"type":"string"},"failure_reason":{"type":"string"},"finished_at":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pipeline_id":{"type":"integer"},"queued_duration":{"type":"number"},"ref":{"type":"string"},"runner_id":{"type":"integer"},"stage":{"type":"string"},"started_at":{"type":"string"},"status":{"type":"string"},"tag":{"type":"boolean"},"tag_list":{"items":{"type":"string"},"type":["null","array"]},"user_username":{"type":"string"},"web_url":{"type":"string"}},"required":["id","name","stage","status","ref","tag","allow_failure","duration","queued_duration","web_url","pipeline_id","created_at"],"type":"object"}
```

</details>

<details><summary>retry</summary>

```json
{"additionalProperties":false,"properties":{"allow_failure":{"type":"boolean"},"artifacts_expire_at":{"type":"string"},"commit_sha":{"type":"string"},"coverage":{"type":"number"},"created_at":{"type":"string"},"duration":{"type":"number"},"erased_at":{"type":"string"},"failure_reason":{"type":"string"},"finished_at":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pipeline_id":{"type":"integer"},"queued_duration":{"type":"number"},"ref":{"type":"string"},"runner_id":{"type":"integer"},"stage":{"type":"string"},"started_at":{"type":"string"},"status":{"type":"string"},"tag":{"type":"boolean"},"tag_list":{"items":{"type":"string"},"type":["null","array"]},"user_username":{"type":"string"},"web_url":{"type":"string"}},"required":["id","name","stage","status","ref","tag","allow_failure","duration","queued_duration","web_url","pipeline_id","created_at"],"type":"object"}
```

</details>

<details><summary>token_scope_add_group</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"source_project_id":{"type":"integer"},"target_group_id":{"type":"integer"}},"required":["source_project_id","target_group_id"],"type":"object"}
```

</details>

<details><summary>token_scope_add_project</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"source_project_id":{"type":"integer"},"target_project_id":{"type":"integer"}},"required":["source_project_id","target_project_id"],"type":"object"}
```

</details>

<details><summary>token_scope_get</summary>

```json
{"additionalProperties":false,"properties":{"inbound_enabled":{"type":"boolean"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["inbound_enabled"],"type":"object"}
```

</details>

<details><summary>token_scope_list_groups</summary>

```json
{"additionalProperties":false,"properties":{"groups":{"items":{"additionalProperties":false,"properties":{"full_path":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"web_url":{"type":"string"}},"required":["id","name","full_path","web_url"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["groups","pagination"],"type":"object"}
```

</details>

<details><summary>token_scope_list_inbound</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"},"projects":{"items":{"additionalProperties":false,"properties":{"id":{"type":"integer"},"name":{"type":"string"},"path_with_namespace":{"type":"string"},"web_url":{"type":"string"}},"required":["id","name","path_with_namespace","web_url"],"type":"object"},"type":["null","array"]}},"required":["projects","pagination"],"type":"object"}
```

</details>

<details><summary>token_scope_patch</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>token_scope_remove_group</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>token_scope_remove_project</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>trace</summary>

```json
{"additionalProperties":false,"properties":{"job_id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"trace":{"type":"string"},"truncated":{"type":"boolean"}},"required":["job_id","trace","truncated"],"type":"object"}
```

</details>

<details><summary>wait</summary>

```json
{"additionalProperties":false,"properties":{"final_status":{"type":"string"},"job":{"additionalProperties":false,"properties":{"allow_failure":{"type":"boolean"},"artifacts_expire_at":{"type":"string"},"commit_sha":{"type":"string"},"coverage":{"type":"number"},"created_at":{"type":"string"},"duration":{"type":"number"},"erased_at":{"type":"string"},"failure_reason":{"type":"string"},"finished_at":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pipeline_id":{"type":"integer"},"queued_duration":{"type":"number"},"ref":{"type":"string"},"runner_id":{"type":"integer"},"stage":{"type":"string"},"started_at":{"type":"string"},"status":{"type":"string"},"tag":{"type":"boolean"},"tag_list":{"items":{"type":"string"},"type":["null","array"]},"user_username":{"type":"string"},"web_url":{"type":"string"}},"required":["id","name","stage","status","ref","tag","allow_failure","duration","queued_duration","web_url","pipeline_id","created_at"],"type":"object"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"poll_count":{"type":"integer"},"timed_out":{"type":"boolean"},"waited_for":{"type":"string"}},"required":["job","waited_for","poll_count","final_status","timed_out"],"type":"object"}
```

</details>

### gitlab_merge_request

**Merge Request**

Use {"action":"list","params":{...}}; only top-level keys are action and params.
Action params schema: gitlab://tools/gitlab_merge_request.<action>.
Action guidance:
- cancel_auto_merge: Cancels auto-merge on a merge request; it does not cancel a running pipeline.
- create: Use to open a merge request from a source branch into the target branch in a project.
- create_pipeline: Creates a new pipeline for a merge request; use pipeline.wait after receiving pipeline_id if the task asks to wait for completion.
- merge: Use to merge a merge request now, or set params.auto_merge=true when the task asks to merge when pipeline succeeds. Do not use pipeline.wait unless the task only asks to wait for an existing pipeline.
- pipelines: Lists pipelines attached to a merge request; use pipeline.wait with the returned pipeline_id only when the task asks to wait for CI completion.
Parameter guidance:
- create.source_branch: source_branch; source: Branch named after 'from'.; avoid: Do not use ref, tag_name, target_branch, or value for the source branch.
- create.target_branch: target_branch; source: Branch named after 'into' or the merge target.; avoid: Do not use source_branch, ref, tag_name, or to for the target branch.
- merge.auto_merge: merge_scheduling; source: Set true only when the user asks to merge when the pipeline succeeds or enable auto-merge.; avoid: Do not call pipeline.wait for merge-when-pipeline-succeeds requests; use merge_request.merge with auto_merge=true.
- merge.merge_request_iid: merge_request_iid; source: Project-scoped MR IID from merge_request.list or merge_request.get.; avoid: Do not use pipeline_id; merge_request.merge requires merge_request_iid.

Manage GitLab merge request lifecycle plus approval rules and settings, time tracking, subscriptions, context commits, MR dependencies (blocking MRs), todos, related issues, award emoji, and resource events. Delete permanently removes an MR.
When to use: MR lifecycle (open/list/update/merge/close/delete/rebase), approvals at MR/group/project level, time tracking, subscriptions, context commits, MR dependencies, todos, related issues, award emoji, MR resource events.
NOT for: comments, discussions, diffs, draft notes, raw diffs (use gitlab_mr_review), CI pipelines (use gitlab_pipeline; use action 'pipelines' here only to LIST MR pipelines), branches/tags (use gitlab_branch / gitlab_tag), commits in the repo (use gitlab_repository).

Returns:
- list / list_global / list_group / commits / pipelines / participants / reviewers / issues_closed / related_issues / dependencies_list / approval_rules / context_commits_list / event_*_list / emoji_*_list: arrays with pagination {page, per_page, total, next_page}.
- get / create / update / approve / merge / rebase / approval_state / approval_config / approval_rule_create / approval_rule_update / approval_settings_* / dependency_create / create_todo: MR, dependency, todo or settings object.
- time_estimate_set / spent_time_add / time_stats / time_estimate_reset / spent_time_reset: {time_estimate, total_time_spent, human_time_estimate, human_total_time_spent}.
- subscribe / unsubscribe / cancel_auto_merge / create_pipeline: updated MR or pipeline object.
- delete / unapprove / approval_reset / approval_rule_delete / context_commits_delete / dependency_delete / emoji_*_delete: {success, message}.
Errors: 404 (hint: confirm project_id and merge_request_iid — merge_request_iid is project-scoped, not the global ID), 403 (hint: requires Reporter+ to comment, Developer+ to merge, configured approvers to approve), 405/409 on merge (hint: WIP/draft, unresolved threads, failing pipelines or pending approvals — see approval_state).

Param conventions: * = required. Most actions need project_id*, merge_request_iid*. List actions accept page, per_page.

IMPORTANT for create: target_branch* — if user doesn't specify, retrieve project's default_branch via gitlab_project get; do NOT assume 'main'.
IMPORTANT for merge: auto-detects project squash/delete-branch settings — do NOT set squash or should_remove_source_branch unless user explicitly asks.

MR lifecycle:
- create: project_id*, source_branch*, target_branch*, title*, description, assignee_id, assignee_ids, reviewer_ids, labels (comma-separated), milestone_id, remove_source_branch, squash, allow_collaboration, target_project_id (forks)
- get: project_id*, merge_request_iid*
- list: project_id*, state (opened/closed/merged/all), labels, not_labels, milestone, scope, search, source_branch, target_branch, author_username, draft, iids, created_after/before, updated_after/before, order_by, sort
- list_global / list_group: same filters as list. list_group needs group_id* instead of project_id.
- update: project_id*, merge_request_iid*, title, description, target_branch, assignee_id, assignee_ids, reviewer_ids, labels, add_labels, remove_labels, milestone_id, remove_source_branch, squash, discussion_locked, allow_collaboration, state_event (close/reopen)
- merge: project_id*, merge_request_iid*, merge_commit_message, squash, should_remove_source_branch, auto_merge, sha, squash_commit_message
- approve / unapprove / rebase / delete / participants / reviewers / create_pipeline / cancel_auto_merge: project_id*, merge_request_iid*
- rebase also accepts: skip_ci
- commits / pipelines / issues_closed: project_id*, merge_request_iid*
- subscribe / unsubscribe: project_id*, merge_request_iid*

Approvals:
- approval_state / approval_rules / approval_config / approval_reset: project_id*, merge_request_iid*
- approval_rule_create: project_id*, merge_request_iid*, name*, approvals_required*, approval_project_rule_id, user_ids, group_ids
- approval_rule_update: project_id*, merge_request_iid*, approval_rule_id*, name, approvals_required, user_ids, group_ids
- approval_rule_delete: project_id*, merge_request_iid*, approval_rule_id*
- approval_settings_group_get / approval_settings_group_update: group_id*. Update params: allow_author_approval, allow_committer_approval, allow_overrides_approver_list_per_mr, retain_approvals_on_push, require_reauthentication_to_approve
- approval_settings_project_get / approval_settings_project_update: project_id*. Same params + selective_code_owner_removals.

Time tracking:
- time_estimate_set / spent_time_add: project_id*, merge_request_iid*, duration* (e.g. '3h30m', '1w2d'). spent_time_add also accepts summary.
- time_estimate_reset / spent_time_reset / time_stats: project_id*, merge_request_iid*

Context commits:
- context_commits_list / context_commits_create / context_commits_delete: project_id*, merge_request_iid*. create/delete need commits ([]string)*.

MR dependencies (blocking MRs):
- dependencies_list: project_id*, merge_request_iid* — list MRs that block this MR from merging.
- dependency_create: project_id*, merge_request_iid*, blocking_merge_request_id* (global ID of the blocking MR).
- dependency_delete: project_id*, merge_request_iid*, blocking_merge_request_id*.

Todos and related issues:
- create_todo: project_id*, merge_request_iid* — add this MR to the authenticated user's to-do list.
- related_issues: project_id*, merge_request_iid* — list issues mentioned or linked from the MR (paginated).

Award emoji:
- emoji_mr_list / emoji_mr_create / emoji_mr_delete: project_id*, merge_request_iid*, name* (create), award_id* (get/delete)
- emoji_mr_get: project_id*, merge_request_iid*, award_id*
- emoji_mr_note_list / emoji_mr_note_create / emoji_mr_note_delete: project_id*, merge_request_iid*, note_id*, name* (create), award_id* (get/delete)
- emoji_mr_note_get: project_id*, merge_request_iid*, note_id*, award_id*

Resource events:
- event_mr_label_list / event_mr_label_get: project_id*, merge_request_iid*, label_event_id* (get)
- event_mr_milestone_list / event_mr_milestone_get: project_id*, merge_request_iid*, milestone_event_id* (get)
- event_mr_state_list / event_mr_state_get: project_id*, merge_request_iid*, state_event_id* (get)

See also: gitlab_mr_review (comments, discussions, diffs, raw diffs, draft notes), gitlab_pipeline, gitlab_branch, gitlab_issue (linked/related issue lifecycle)

Annotations: readOnly=false, destructive=true, idempotent=false, openWorld=true

**Action Output Schemas:**

<details><summary>approval_config</summary>

```json
{"additionalProperties":false,"properties":{"approvals_before_merge":{"type":"integer"},"approvals_left":{"type":"integer"},"approvals_required":{"type":"integer"},"approved":{"type":"boolean"},"approved_by":{"items":{"additionalProperties":false,"properties":{"approved_at":{"type":"string"},"name":{"type":"string"}},"required":["name"],"type":"object"},"type":["null","array"]},"has_approval_rules":{"type":"boolean"},"id":{"type":"integer"},"merge_request_iid":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"project_id":{"type":"integer"},"state":{"type":"string"},"suggested_approvers":{"items":{"type":"string"},"type":["null","array"]},"title":{"type":"string"},"user_can_approve":{"type":"boolean"},"user_has_approved":{"type":"boolean"}},"required":["id","merge_request_iid","project_id","title","state","approved","approvals_required","approvals_left","approvals_before_merge","has_approval_rules","user_has_approved","user_can_approve"],"type":"object"}
```

</details>

<details><summary>approval_reset</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>approval_rule_create</summary>

```json
{"additionalProperties":false,"properties":{"approvals_required":{"type":"integer"},"approved":{"type":"boolean"},"approved_by_names":{"items":{"type":"string"},"type":["null","array"]},"contains_hidden_groups":{"type":"boolean"},"eligible_names":{"items":{"type":"string"},"type":["null","array"]},"group_names":{"items":{"type":"string"},"type":["null","array"]},"id":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"report_type":{"type":"string"},"rule_type":{"type":"string"},"section":{"type":"string"},"user_names":{"items":{"type":"string"},"type":["null","array"]}},"required":["id","name","rule_type","approvals_required","approved"],"type":"object"}
```

</details>

<details><summary>approval_rule_delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>approval_rule_update</summary>

```json
{"additionalProperties":false,"properties":{"approvals_required":{"type":"integer"},"approved":{"type":"boolean"},"approved_by_names":{"items":{"type":"string"},"type":["null","array"]},"contains_hidden_groups":{"type":"boolean"},"eligible_names":{"items":{"type":"string"},"type":["null","array"]},"group_names":{"items":{"type":"string"},"type":["null","array"]},"id":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"report_type":{"type":"string"},"rule_type":{"type":"string"},"section":{"type":"string"},"user_names":{"items":{"type":"string"},"type":["null","array"]}},"required":["id","name","rule_type","approvals_required","approved"],"type":"object"}
```

</details>

<details><summary>approval_rules</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"rules":{"items":{"additionalProperties":false,"properties":{"approvals_required":{"type":"integer"},"approved":{"type":"boolean"},"approved_by_names":{"items":{"type":"string"},"type":["null","array"]},"contains_hidden_groups":{"type":"boolean"},"eligible_names":{"items":{"type":"string"},"type":["null","array"]},"group_names":{"items":{"type":"string"},"type":["null","array"]},"id":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"report_type":{"type":"string"},"rule_type":{"type":"string"},"section":{"type":"string"},"user_names":{"items":{"type":"string"},"type":["null","array"]}},"required":["id","name","rule_type","approvals_required","approved"],"type":"object"},"type":["null","array"]}},"required":["rules"],"type":"object"}
```

</details>

<details><summary>approval_settings_group_get</summary>

```json
{"additionalProperties":false,"properties":{"allow_author_approval":{"additionalProperties":false,"properties":{"inherited_from":{"type":"string"},"locked":{"type":"boolean"},"value":{"type":"boolean"}},"required":["value","locked"],"type":"object"},"allow_committer_approval":{"additionalProperties":false,"properties":{"inherited_from":{"type":"string"},"locked":{"type":"boolean"},"value":{"type":"boolean"}},"required":["value","locked"],"type":"object"},"allow_overrides_approver_list_per_mr":{"additionalProperties":false,"properties":{"inherited_from":{"type":"string"},"locked":{"type":"boolean"},"value":{"type":"boolean"}},"required":["value","locked"],"type":"object"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"require_password_to_approve":{"additionalProperties":false,"properties":{"inherited_from":{"type":"string"},"locked":{"type":"boolean"},"value":{"type":"boolean"}},"required":["value","locked"],"type":"object"},"require_reauthentication_to_approve":{"additionalProperties":false,"properties":{"inherited_from":{"type":"string"},"locked":{"type":"boolean"},"value":{"type":"boolean"}},"required":["value","locked"],"type":"object"},"retain_approvals_on_push":{"additionalProperties":false,"properties":{"inherited_from":{"type":"string"},"locked":{"type":"boolean"},"value":{"type":"boolean"}},"required":["value","locked"],"type":"object"},"selective_code_owner_removals":{"additionalProperties":false,"properties":{"inherited_from":{"type":"string"},"locked":{"type":"boolean"},"value":{"type":"boolean"}},"required":["value","locked"],"type":"object"}},"required":["allow_author_approval","allow_committer_approval","allow_overrides_approver_list_per_mr","retain_approvals_on_push","selective_code_owner_removals","require_password_to_approve","require_reauthentication_to_approve"],"type":"object"}
```

</details>

<details><summary>approval_settings_group_update</summary>

```json
{"additionalProperties":false,"properties":{"allow_author_approval":{"additionalProperties":false,"properties":{"inherited_from":{"type":"string"},"locked":{"type":"boolean"},"value":{"type":"boolean"}},"required":["value","locked"],"type":"object"},"allow_committer_approval":{"additionalProperties":false,"properties":{"inherited_from":{"type":"string"},"locked":{"type":"boolean"},"value":{"type":"boolean"}},"required":["value","locked"],"type":"object"},"allow_overrides_approver_list_per_mr":{"additionalProperties":false,"properties":{"inherited_from":{"type":"string"},"locked":{"type":"boolean"},"value":{"type":"boolean"}},"required":["value","locked"],"type":"object"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"require_password_to_approve":{"additionalProperties":false,"properties":{"inherited_from":{"type":"string"},"locked":{"type":"boolean"},"value":{"type":"boolean"}},"required":["value","locked"],"type":"object"},"require_reauthentication_to_approve":{"additionalProperties":false,"properties":{"inherited_from":{"type":"string"},"locked":{"type":"boolean"},"value":{"type":"boolean"}},"required":["value","locked"],"type":"object"},"retain_approvals_on_push":{"additionalProperties":false,"properties":{"inherited_from":{"type":"string"},"locked":{"type":"boolean"},"value":{"type":"boolean"}},"required":["value","locked"],"type":"object"},"selective_code_owner_removals":{"additionalProperties":false,"properties":{"inherited_from":{"type":"string"},"locked":{"type":"boolean"},"value":{"type":"boolean"}},"required":["value","locked"],"type":"object"}},"required":["allow_author_approval","allow_committer_approval","allow_overrides_approver_list_per_mr","retain_approvals_on_push","selective_code_owner_removals","require_password_to_approve","require_reauthentication_to_approve"],"type":"object"}
```

</details>

<details><summary>approval_settings_project_get</summary>

```json
{"additionalProperties":false,"properties":{"allow_author_approval":{"additionalProperties":false,"properties":{"inherited_from":{"type":"string"},"locked":{"type":"boolean"},"value":{"type":"boolean"}},"required":["value","locked"],"type":"object"},"allow_committer_approval":{"additionalProperties":false,"properties":{"inherited_from":{"type":"string"},"locked":{"type":"boolean"},"value":{"type":"boolean"}},"required":["value","locked"],"type":"object"},"allow_overrides_approver_list_per_mr":{"additionalProperties":false,"properties":{"inherited_from":{"type":"string"},"locked":{"type":"boolean"},"value":{"type":"boolean"}},"required":["value","locked"],"type":"object"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"require_password_to_approve":{"additionalProperties":false,"properties":{"inherited_from":{"type":"string"},"locked":{"type":"boolean"},"value":{"type":"boolean"}},"required":["value","locked"],"type":"object"},"require_reauthentication_to_approve":{"additionalProperties":false,"properties":{"inherited_from":{"type":"string"},"locked":{"type":"boolean"},"value":{"type":"boolean"}},"required":["value","locked"],"type":"object"},"retain_approvals_on_push":{"additionalProperties":false,"properties":{"inherited_from":{"type":"string"},"locked":{"type":"boolean"},"value":{"type":"boolean"}},"required":["value","locked"],"type":"object"},"selective_code_owner_removals":{"additionalProperties":false,"properties":{"inherited_from":{"type":"string"},"locked":{"type":"boolean"},"value":{"type":"boolean"}},"required":["value","locked"],"type":"object"}},"required":["allow_author_approval","allow_committer_approval","allow_overrides_approver_list_per_mr","retain_approvals_on_push","selective_code_owner_removals","require_password_to_approve","require_reauthentication_to_approve"],"type":"object"}
```

</details>

<details><summary>approval_settings_project_update</summary>

```json
{"additionalProperties":false,"properties":{"allow_author_approval":{"additionalProperties":false,"properties":{"inherited_from":{"type":"string"},"locked":{"type":"boolean"},"value":{"type":"boolean"}},"required":["value","locked"],"type":"object"},"allow_committer_approval":{"additionalProperties":false,"properties":{"inherited_from":{"type":"string"},"locked":{"type":"boolean"},"value":{"type":"boolean"}},"required":["value","locked"],"type":"object"},"allow_overrides_approver_list_per_mr":{"additionalProperties":false,"properties":{"inherited_from":{"type":"string"},"locked":{"type":"boolean"},"value":{"type":"boolean"}},"required":["value","locked"],"type":"object"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"require_password_to_approve":{"additionalProperties":false,"properties":{"inherited_from":{"type":"string"},"locked":{"type":"boolean"},"value":{"type":"boolean"}},"required":["value","locked"],"type":"object"},"require_reauthentication_to_approve":{"additionalProperties":false,"properties":{"inherited_from":{"type":"string"},"locked":{"type":"boolean"},"value":{"type":"boolean"}},"required":["value","locked"],"type":"object"},"retain_approvals_on_push":{"additionalProperties":false,"properties":{"inherited_from":{"type":"string"},"locked":{"type":"boolean"},"value":{"type":"boolean"}},"required":["value","locked"],"type":"object"},"selective_code_owner_removals":{"additionalProperties":false,"properties":{"inherited_from":{"type":"string"},"locked":{"type":"boolean"},"value":{"type":"boolean"}},"required":["value","locked"],"type":"object"}},"required":["allow_author_approval","allow_committer_approval","allow_overrides_approver_list_per_mr","retain_approvals_on_push","selective_code_owner_removals","require_password_to_approve","require_reauthentication_to_approve"],"type":"object"}
```

</details>

<details><summary>approval_state</summary>

```json
{"additionalProperties":false,"properties":{"approval_rules_overwritten":{"type":"boolean"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"rules":{"items":{"additionalProperties":false,"properties":{"approvals_required":{"type":"integer"},"approved":{"type":"boolean"},"approved_by_names":{"items":{"type":"string"},"type":["null","array"]},"contains_hidden_groups":{"type":"boolean"},"eligible_names":{"items":{"type":"string"},"type":["null","array"]},"group_names":{"items":{"type":"string"},"type":["null","array"]},"id":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"report_type":{"type":"string"},"rule_type":{"type":"string"},"section":{"type":"string"},"user_names":{"items":{"type":"string"},"type":["null","array"]}},"required":["id","name","rule_type","approvals_required","approved"],"type":"object"},"type":["null","array"]}},"required":["approval_rules_overwritten","rules"],"type":"object"}
```

</details>

<details><summary>approve</summary>

```json
{"additionalProperties":false,"properties":{"approvals_required":{"type":"integer"},"approved":{"type":"boolean"},"approved_by_count":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["approvals_required","approved_by_count","approved"],"type":"object"}
```

</details>

<details><summary>cancel_auto_merge</summary>

```json
{"additionalProperties":false,"properties":{"allow_collaboration":{"type":"boolean"},"assignees":{"items":{"type":"string"},"type":["null","array"]},"author":{"type":"string"},"blocking_discussions_resolved":{"type":"boolean"},"changes_count":{"type":"string"},"closed_at":{"type":"string"},"closed_by":{"type":"string"},"created_at":{"type":"string"},"description":{"type":"string"},"diff_refs":{"additionalProperties":false,"properties":{"base_sha":{"type":"string"},"head_sha":{"type":"string"},"start_sha":{"type":"string"}},"required":["base_sha","head_sha","start_sha"],"type":["null","object"]},"discussion_locked":{"type":"boolean"},"diverged_commits_count":{"type":"integer"},"downvotes":{"type":"integer"},"draft":{"type":"boolean"},"first_contribution":{"type":"boolean"},"force_remove_source_branch":{"type":"boolean"},"has_conflicts":{"type":"boolean"},"head_pipeline_id":{"type":"integer"},"id":{"type":"integer"},"labels":{"items":{"type":"string"},"type":["null","array"]},"latest_build_finished_at":{"type":"string"},"latest_build_started_at":{"type":"string"},"merge_after":{"type":"string"},"merge_commit_sha":{"type":"string"},"merge_error":{"type":"string"},"merge_request_iid":{"type":"integer"},"merge_status":{"type":"string"},"merge_when_pipeline_succeeds":{"type":"boolean"},"merged_at":{"type":"string"},"merged_by":{"type":"string"},"milestone":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pipeline_id":{"type":"integer"},"pipeline_name":{"type":"string"},"pipeline_web_url":{"type":"string"},"prepared_at":{"type":"string"},"project_id":{"type":"integer"},"project_path":{"type":"string"},"rebase_in_progress":{"type":"boolean"},"references":{"type":"string"},"reviewers":{"items":{"type":"string"},"type":["null","array"]},"sha":{"type":"string"},"should_remove_source_branch":{"type":"boolean"},"source_branch":{"type":"string"},"source_project_id":{"type":"integer"},"squash":{"type":"boolean"},"squash_commit_sha":{"type":"string"},"squash_on_merge":{"type":"boolean"},"state":{"type":"string"},"subscribed":{"type":"boolean"},"target_branch":{"type":"string"},"target_project_id":{"type":"integer"},"task_completion_count":{"type":"integer"},"task_completion_total":{"type":"integer"},"time_estimate":{"type":"integer"},"title":{"type":"string"},"total_time_spent":{"type":"integer"},"updated_at":{"type":"string"},"upvotes":{"type":"integer"},"user_notes_count":{"type":"integer"},"web_url":{"type":"string"}},"required":["id","merge_request_iid","project_id","title","description","state","source_branch","target_branch","web_url","merge_status","draft","has_conflicts","blocking_discussions_resolved","discussion_locked","assignees","reviewers","labels","created_at","updated_at"],"type":"object"}
```

</details>

<details><summary>commits</summary>

```json
{"additionalProperties":false,"properties":{"commits":{"items":{"additionalProperties":false,"properties":{"author_email":{"type":"string"},"author_name":{"type":"string"},"authored_date":{"type":"string"},"committed_date":{"type":"string"},"committer_email":{"type":"string"},"committer_name":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"string"},"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"parent_ids":{"items":{"type":"string"},"type":["null","array"]},"project_id":{"type":"integer"},"short_id":{"type":"string"},"stats":{"additionalProperties":false,"properties":{"additions":{"type":"integer"},"deletions":{"type":"integer"},"total":{"type":"integer"}},"required":["additions","deletions","total"],"type":["null","object"]},"status":{"type":"string"},"title":{"type":"string"},"web_url":{"type":"string"}},"required":["id","short_id","title","author_name","author_email","committer_name","committer_email","committed_date","web_url"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["commits","pagination"],"type":"object"}
```

</details>

<details><summary>context_commits_create</summary>

```json
{"additionalProperties":false,"properties":{"commits":{"items":{"additionalProperties":false,"properties":{"author_email":{"type":"string"},"author_name":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"string"},"short_id":{"type":"string"},"title":{"type":"string"}},"required":["id","short_id","title","author_name","author_email"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["commits"],"type":"object"}
```

</details>

<details><summary>context_commits_delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>context_commits_list</summary>

```json
{"additionalProperties":false,"properties":{"commits":{"items":{"additionalProperties":false,"properties":{"author_email":{"type":"string"},"author_name":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"string"},"short_id":{"type":"string"},"title":{"type":"string"}},"required":["id","short_id","title","author_name","author_email"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["commits"],"type":"object"}
```

</details>

<details><summary>create</summary>

```json
{"additionalProperties":false,"properties":{"allow_collaboration":{"type":"boolean"},"assignees":{"items":{"type":"string"},"type":["null","array"]},"author":{"type":"string"},"blocking_discussions_resolved":{"type":"boolean"},"changes_count":{"type":"string"},"closed_at":{"type":"string"},"closed_by":{"type":"string"},"created_at":{"type":"string"},"description":{"type":"string"},"diff_refs":{"additionalProperties":false,"properties":{"base_sha":{"type":"string"},"head_sha":{"type":"string"},"start_sha":{"type":"string"}},"required":["base_sha","head_sha","start_sha"],"type":["null","object"]},"discussion_locked":{"type":"boolean"},"diverged_commits_count":{"type":"integer"},"downvotes":{"type":"integer"},"draft":{"type":"boolean"},"first_contribution":{"type":"boolean"},"force_remove_source_branch":{"type":"boolean"},"has_conflicts":{"type":"boolean"},"head_pipeline_id":{"type":"integer"},"id":{"type":"integer"},"labels":{"items":{"type":"string"},"type":["null","array"]},"latest_build_finished_at":{"type":"string"},"latest_build_started_at":{"type":"string"},"merge_after":{"type":"string"},"merge_commit_sha":{"type":"string"},"merge_error":{"type":"string"},"merge_request_iid":{"type":"integer"},"merge_status":{"type":"string"},"merge_when_pipeline_succeeds":{"type":"boolean"},"merged_at":{"type":"string"},"merged_by":{"type":"string"},"milestone":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pipeline_id":{"type":"integer"},"pipeline_name":{"type":"string"},"pipeline_web_url":{"type":"string"},"prepared_at":{"type":"string"},"project_id":{"type":"integer"},"project_path":{"type":"string"},"rebase_in_progress":{"type":"boolean"},"references":{"type":"string"},"reviewers":{"items":{"type":"string"},"type":["null","array"]},"sha":{"type":"string"},"should_remove_source_branch":{"type":"boolean"},"source_branch":{"type":"string"},"source_project_id":{"type":"integer"},"squash":{"type":"boolean"},"squash_commit_sha":{"type":"string"},"squash_on_merge":{"type":"boolean"},"state":{"type":"string"},"subscribed":{"type":"boolean"},"target_branch":{"type":"string"},"target_project_id":{"type":"integer"},"task_completion_count":{"type":"integer"},"task_completion_total":{"type":"integer"},"time_estimate":{"type":"integer"},"title":{"type":"string"},"total_time_spent":{"type":"integer"},"updated_at":{"type":"string"},"upvotes":{"type":"integer"},"user_notes_count":{"type":"integer"},"web_url":{"type":"string"}},"required":["id","merge_request_iid","project_id","title","description","state","source_branch","target_branch","web_url","merge_status","draft","has_conflicts","blocking_discussions_resolved","discussion_locked","assignees","reviewers","labels","created_at","updated_at"],"type":"object"}
```

</details>

<details><summary>create_pipeline</summary>

```json
{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"id":{"type":"integer"},"iid":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"project_id":{"type":"integer"},"ref":{"type":"string"},"sha":{"type":"string"},"source":{"type":"string"},"status":{"type":"string"},"updated_at":{"type":"string"},"web_url":{"type":"string"}},"required":["id","iid","project_id","status","source","ref","sha","name","web_url","created_at","updated_at"],"type":"object"}
```

</details>

<details><summary>create_todo</summary>

```json
{"additionalProperties":false,"properties":{"action_name":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"project_name":{"type":"string"},"state":{"type":"string"},"target_title":{"type":"string"},"target_type":{"type":"string"},"target_url":{"type":"string"}},"required":["id","action_name","target_type","target_title","target_url","state"],"type":"object"}
```

</details>

<details><summary>delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>dependencies_list</summary>

```json
{"additionalProperties":false,"properties":{"dependencies":{"items":{"additionalProperties":false,"properties":{"blocking_merge_request_id":{"type":"integer"},"blocking_merge_request_iid":{"type":"integer"},"blocking_merge_request_project_id":{"type":"integer"},"blocking_merge_request_state":{"type":"string"},"blocking_merge_request_title":{"type":"string"},"blocking_source_branch":{"type":"string"},"blocking_target_branch":{"type":"string"},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"project_id":{"type":"integer"}},"required":["id","blocking_merge_request_id","blocking_merge_request_iid","blocking_merge_request_title","blocking_merge_request_state","blocking_merge_request_project_id","blocking_source_branch","blocking_target_branch","project_id"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["dependencies"],"type":"object"}
```

</details>

<details><summary>dependency_create</summary>

```json
{"additionalProperties":false,"properties":{"blocking_merge_request_id":{"type":"integer"},"blocking_merge_request_iid":{"type":"integer"},"blocking_merge_request_project_id":{"type":"integer"},"blocking_merge_request_state":{"type":"string"},"blocking_merge_request_title":{"type":"string"},"blocking_source_branch":{"type":"string"},"blocking_target_branch":{"type":"string"},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"project_id":{"type":"integer"}},"required":["id","blocking_merge_request_id","blocking_merge_request_iid","blocking_merge_request_title","blocking_merge_request_state","blocking_merge_request_project_id","blocking_source_branch","blocking_target_branch","project_id"],"type":"object"}
```

</details>

<details><summary>dependency_delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>emoji_mr_create</summary>

```json
{"additionalProperties":false,"properties":{"awardable_id":{"type":"integer"},"awardable_type":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"user_id":{"type":"integer"},"user_web_url":{"type":"string"},"username":{"type":"string"}},"required":["id","name","user_id","username","awardable_id","awardable_type"],"type":"object"}
```

</details>

<details><summary>emoji_mr_delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>emoji_mr_get</summary>

```json
{"additionalProperties":false,"properties":{"awardable_id":{"type":"integer"},"awardable_type":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"user_id":{"type":"integer"},"user_web_url":{"type":"string"},"username":{"type":"string"}},"required":["id","name","user_id","username","awardable_id","awardable_type"],"type":"object"}
```

</details>

<details><summary>emoji_mr_list</summary>

```json
{"additionalProperties":false,"properties":{"award_emoji":{"items":{"additionalProperties":false,"properties":{"awardable_id":{"type":"integer"},"awardable_type":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"user_id":{"type":"integer"},"user_web_url":{"type":"string"},"username":{"type":"string"}},"required":["id","name","user_id","username","awardable_id","awardable_type"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["award_emoji","pagination"],"type":"object"}
```

</details>

<details><summary>emoji_mr_note_create</summary>

```json
{"additionalProperties":false,"properties":{"awardable_id":{"type":"integer"},"awardable_type":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"user_id":{"type":"integer"},"user_web_url":{"type":"string"},"username":{"type":"string"}},"required":["id","name","user_id","username","awardable_id","awardable_type"],"type":"object"}
```

</details>

<details><summary>emoji_mr_note_delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>emoji_mr_note_get</summary>

```json
{"additionalProperties":false,"properties":{"awardable_id":{"type":"integer"},"awardable_type":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"user_id":{"type":"integer"},"user_web_url":{"type":"string"},"username":{"type":"string"}},"required":["id","name","user_id","username","awardable_id","awardable_type"],"type":"object"}
```

</details>

<details><summary>emoji_mr_note_list</summary>

```json
{"additionalProperties":false,"properties":{"award_emoji":{"items":{"additionalProperties":false,"properties":{"awardable_id":{"type":"integer"},"awardable_type":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"user_id":{"type":"integer"},"user_web_url":{"type":"string"},"username":{"type":"string"}},"required":["id","name","user_id","username","awardable_id","awardable_type"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["award_emoji","pagination"],"type":"object"}
```

</details>

<details><summary>event_mr_label_get</summary>

```json
{"additionalProperties":false,"properties":{"action":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"integer"},"label":{"additionalProperties":false,"properties":{"color":{"type":"string"},"description":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"text_color":{"type":"string"}},"required":["id","name","color","text_color","description"],"type":"object"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"resource_id":{"type":"integer"},"resource_type":{"type":"string"},"user_id":{"type":"integer"},"username":{"type":"string"}},"required":["id","action","created_at","resource_type","resource_id","user_id","username","label"],"type":"object"}
```

</details>

<details><summary>event_mr_label_list</summary>

```json
{"additionalProperties":false,"properties":{"events":{"items":{"additionalProperties":false,"properties":{"action":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"integer"},"label":{"additionalProperties":false,"properties":{"color":{"type":"string"},"description":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"text_color":{"type":"string"}},"required":["id","name","color","text_color","description"],"type":"object"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"resource_id":{"type":"integer"},"resource_type":{"type":"string"},"user_id":{"type":"integer"},"username":{"type":"string"}},"required":["id","action","created_at","resource_type","resource_id","user_id","username","label"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["events","pagination"],"type":"object"}
```

</details>

<details><summary>event_mr_milestone_get</summary>

```json
{"additionalProperties":false,"properties":{"action":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"integer"},"milestone_id":{"type":"integer"},"milestone_title":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"resource_id":{"type":"integer"},"resource_type":{"type":"string"},"user_id":{"type":"integer"},"username":{"type":"string"}},"required":["id","action","created_at","resource_type","resource_id","user_id","username","milestone_id","milestone_title"],"type":"object"}
```

</details>

<details><summary>event_mr_milestone_list</summary>

```json
{"additionalProperties":false,"properties":{"events":{"items":{"additionalProperties":false,"properties":{"action":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"integer"},"milestone_id":{"type":"integer"},"milestone_title":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"resource_id":{"type":"integer"},"resource_type":{"type":"string"},"user_id":{"type":"integer"},"username":{"type":"string"}},"required":["id","action","created_at","resource_type","resource_id","user_id","username","milestone_id","milestone_title"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["events","pagination"],"type":"object"}
```

</details>

<details><summary>event_mr_state_get</summary>

```json
{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"resource_id":{"type":"integer"},"resource_type":{"type":"string"},"state":{"type":"string"},"user_id":{"type":"integer"},"username":{"type":"string"}},"required":["id","state","created_at","resource_type","resource_id","user_id","username"],"type":"object"}
```

</details>

<details><summary>event_mr_state_list</summary>

```json
{"additionalProperties":false,"properties":{"events":{"items":{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"resource_id":{"type":"integer"},"resource_type":{"type":"string"},"state":{"type":"string"},"user_id":{"type":"integer"},"username":{"type":"string"}},"required":["id","state","created_at","resource_type","resource_id","user_id","username"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["events","pagination"],"type":"object"}
```

</details>

<details><summary>get</summary>

```json
{"additionalProperties":false,"properties":{"allow_collaboration":{"type":"boolean"},"assignees":{"items":{"type":"string"},"type":["null","array"]},"author":{"type":"string"},"blocking_discussions_resolved":{"type":"boolean"},"changes_count":{"type":"string"},"closed_at":{"type":"string"},"closed_by":{"type":"string"},"created_at":{"type":"string"},"description":{"type":"string"},"diff_refs":{"additionalProperties":false,"properties":{"base_sha":{"type":"string"},"head_sha":{"type":"string"},"start_sha":{"type":"string"}},"required":["base_sha","head_sha","start_sha"],"type":["null","object"]},"discussion_locked":{"type":"boolean"},"diverged_commits_count":{"type":"integer"},"downvotes":{"type":"integer"},"draft":{"type":"boolean"},"first_contribution":{"type":"boolean"},"force_remove_source_branch":{"type":"boolean"},"has_conflicts":{"type":"boolean"},"head_pipeline_id":{"type":"integer"},"id":{"type":"integer"},"labels":{"items":{"type":"string"},"type":["null","array"]},"latest_build_finished_at":{"type":"string"},"latest_build_started_at":{"type":"string"},"merge_after":{"type":"string"},"merge_commit_sha":{"type":"string"},"merge_error":{"type":"string"},"merge_request_iid":{"type":"integer"},"merge_status":{"type":"string"},"merge_when_pipeline_succeeds":{"type":"boolean"},"merged_at":{"type":"string"},"merged_by":{"type":"string"},"milestone":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pipeline_id":{"type":"integer"},"pipeline_name":{"type":"string"},"pipeline_web_url":{"type":"string"},"prepared_at":{"type":"string"},"project_id":{"type":"integer"},"project_path":{"type":"string"},"rebase_in_progress":{"type":"boolean"},"references":{"type":"string"},"reviewers":{"items":{"type":"string"},"type":["null","array"]},"sha":{"type":"string"},"should_remove_source_branch":{"type":"boolean"},"source_branch":{"type":"string"},"source_project_id":{"type":"integer"},"squash":{"type":"boolean"},"squash_commit_sha":{"type":"string"},"squash_on_merge":{"type":"boolean"},"state":{"type":"string"},"subscribed":{"type":"boolean"},"target_branch":{"type":"string"},"target_project_id":{"type":"integer"},"task_completion_count":{"type":"integer"},"task_completion_total":{"type":"integer"},"time_estimate":{"type":"integer"},"title":{"type":"string"},"total_time_spent":{"type":"integer"},"updated_at":{"type":"string"},"upvotes":{"type":"integer"},"user_notes_count":{"type":"integer"},"web_url":{"type":"string"}},"required":["id","merge_request_iid","project_id","title","description","state","source_branch","target_branch","web_url","merge_status","draft","has_conflicts","blocking_discussions_resolved","discussion_locked","assignees","reviewers","labels","created_at","updated_at"],"type":"object"}
```

</details>

<details><summary>issues_closed</summary>

```json
{"additionalProperties":false,"properties":{"issues":{"items":{"additionalProperties":false,"properties":{"assignees":{"items":{"type":"string"},"type":["null","array"]},"author":{"type":"string"},"closed_at":{"type":"string"},"closed_by":{"type":"string"},"confidential":{"type":"boolean"},"created_at":{"type":"string"},"description":{"type":"string"},"discussion_locked":{"type":"boolean"},"downvotes":{"type":"integer"},"due_date":{"type":"string"},"epic_issue_id":{"type":"integer"},"health_status":{"type":"string"},"id":{"type":"integer"},"issue_iid":{"type":"integer"},"issue_type":{"type":"string"},"labels":{"items":{"type":"string"},"type":["null","array"]},"merge_request_count":{"type":"integer"},"milestone":{"type":"string"},"moved_to_id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"project_id":{"type":"integer"},"references":{"type":"string"},"state":{"type":"string"},"subscribed":{"type":"boolean"},"task_completion_count":{"type":"integer"},"task_completion_total":{"type":"integer"},"time_estimate":{"type":"integer"},"title":{"type":"string"},"total_time_spent":{"type":"integer"},"updated_at":{"type":"string"},"upvotes":{"type":"integer"},"user_notes_count":{"type":"integer"},"web_url":{"type":"string"},"weight":{"type":"integer"}},"required":["id","issue_iid","title","description","state","labels","assignees","milestone","author","web_url","created_at","updated_at","closed_at","due_date","confidential","discussion_locked","project_id","subscribed"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["issues","pagination"],"type":"object"}
```

</details>

<details><summary>list</summary>

```json
{"additionalProperties":false,"properties":{"merge_requests":{"items":{"additionalProperties":false,"properties":{"allow_collaboration":{"type":"boolean"},"assignees":{"items":{"type":"string"},"type":["null","array"]},"author":{"type":"string"},"blocking_discussions_resolved":{"type":"boolean"},"changes_count":{"type":"string"},"closed_at":{"type":"string"},"closed_by":{"type":"string"},"created_at":{"type":"string"},"description":{"type":"string"},"diff_refs":{"additionalProperties":false,"properties":{"base_sha":{"type":"string"},"head_sha":{"type":"string"},"start_sha":{"type":"string"}},"required":["base_sha","head_sha","start_sha"],"type":["null","object"]},"discussion_locked":{"type":"boolean"},"diverged_commits_count":{"type":"integer"},"downvotes":{"type":"integer"},"draft":{"type":"boolean"},"first_contribution":{"type":"boolean"},"force_remove_source_branch":{"type":"boolean"},"has_conflicts":{"type":"boolean"},"head_pipeline_id":{"type":"integer"},"id":{"type":"integer"},"labels":{"items":{"type":"string"},"type":["null","array"]},"latest_build_finished_at":{"type":"string"},"latest_build_started_at":{"type":"string"},"merge_after":{"type":"string"},"merge_commit_sha":{"type":"string"},"merge_error":{"type":"string"},"merge_request_iid":{"type":"integer"},"merge_status":{"type":"string"},"merge_when_pipeline_succeeds":{"type":"boolean"},"merged_at":{"type":"string"},"merged_by":{"type":"string"},"milestone":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pipeline_id":{"type":"integer"},"pipeline_name":{"type":"string"},"pipeline_web_url":{"type":"string"},"prepared_at":{"type":"string"},"project_id":{"type":"integer"},"project_path":{"type":"string"},"rebase_in_progress":{"type":"boolean"},"references":{"type":"string"},"reviewers":{"items":{"type":"string"},"type":["null","array"]},"sha":{"type":"string"},"should_remove_source_branch":{"type":"boolean"},"source_branch":{"type":"string"},"source_project_id":{"type":"integer"},"squash":{"type":"boolean"},"squash_commit_sha":{"type":"string"},"squash_on_merge":{"type":"boolean"},"state":{"type":"string"},"subscribed":{"type":"boolean"},"target_branch":{"type":"string"},"target_project_id":{"type":"integer"},"task_completion_count":{"type":"integer"},"task_completion_total":{"type":"integer"},"time_estimate":{"type":"integer"},"title":{"type":"string"},"total_time_spent":{"type":"integer"},"updated_at":{"type":"string"},"upvotes":{"type":"integer"},"user_notes_count":{"type":"integer"},"web_url":{"type":"string"}},"required":["id","merge_request_iid","project_id","title","description","state","source_branch","target_branch","web_url","merge_status","draft","has_conflicts","blocking_discussions_resolved","discussion_locked","assignees","reviewers","labels","created_at","updated_at"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["merge_requests","pagination"],"type":"object"}
```

</details>

<details><summary>list_global</summary>

```json
{"additionalProperties":false,"properties":{"merge_requests":{"items":{"additionalProperties":false,"properties":{"allow_collaboration":{"type":"boolean"},"assignees":{"items":{"type":"string"},"type":["null","array"]},"author":{"type":"string"},"blocking_discussions_resolved":{"type":"boolean"},"changes_count":{"type":"string"},"closed_at":{"type":"string"},"closed_by":{"type":"string"},"created_at":{"type":"string"},"description":{"type":"string"},"diff_refs":{"additionalProperties":false,"properties":{"base_sha":{"type":"string"},"head_sha":{"type":"string"},"start_sha":{"type":"string"}},"required":["base_sha","head_sha","start_sha"],"type":["null","object"]},"discussion_locked":{"type":"boolean"},"diverged_commits_count":{"type":"integer"},"downvotes":{"type":"integer"},"draft":{"type":"boolean"},"first_contribution":{"type":"boolean"},"force_remove_source_branch":{"type":"boolean"},"has_conflicts":{"type":"boolean"},"head_pipeline_id":{"type":"integer"},"id":{"type":"integer"},"labels":{"items":{"type":"string"},"type":["null","array"]},"latest_build_finished_at":{"type":"string"},"latest_build_started_at":{"type":"string"},"merge_after":{"type":"string"},"merge_commit_sha":{"type":"string"},"merge_error":{"type":"string"},"merge_request_iid":{"type":"integer"},"merge_status":{"type":"string"},"merge_when_pipeline_succeeds":{"type":"boolean"},"merged_at":{"type":"string"},"merged_by":{"type":"string"},"milestone":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pipeline_id":{"type":"integer"},"pipeline_name":{"type":"string"},"pipeline_web_url":{"type":"string"},"prepared_at":{"type":"string"},"project_id":{"type":"integer"},"project_path":{"type":"string"},"rebase_in_progress":{"type":"boolean"},"references":{"type":"string"},"reviewers":{"items":{"type":"string"},"type":["null","array"]},"sha":{"type":"string"},"should_remove_source_branch":{"type":"boolean"},"source_branch":{"type":"string"},"source_project_id":{"type":"integer"},"squash":{"type":"boolean"},"squash_commit_sha":{"type":"string"},"squash_on_merge":{"type":"boolean"},"state":{"type":"string"},"subscribed":{"type":"boolean"},"target_branch":{"type":"string"},"target_project_id":{"type":"integer"},"task_completion_count":{"type":"integer"},"task_completion_total":{"type":"integer"},"time_estimate":{"type":"integer"},"title":{"type":"string"},"total_time_spent":{"type":"integer"},"updated_at":{"type":"string"},"upvotes":{"type":"integer"},"user_notes_count":{"type":"integer"},"web_url":{"type":"string"}},"required":["id","merge_request_iid","project_id","title","description","state","source_branch","target_branch","web_url","merge_status","draft","has_conflicts","blocking_discussions_resolved","discussion_locked","assignees","reviewers","labels","created_at","updated_at"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["merge_requests","pagination"],"type":"object"}
```

</details>

<details><summary>list_group</summary>

```json
{"additionalProperties":false,"properties":{"merge_requests":{"items":{"additionalProperties":false,"properties":{"allow_collaboration":{"type":"boolean"},"assignees":{"items":{"type":"string"},"type":["null","array"]},"author":{"type":"string"},"blocking_discussions_resolved":{"type":"boolean"},"changes_count":{"type":"string"},"closed_at":{"type":"string"},"closed_by":{"type":"string"},"created_at":{"type":"string"},"description":{"type":"string"},"diff_refs":{"additionalProperties":false,"properties":{"base_sha":{"type":"string"},"head_sha":{"type":"string"},"start_sha":{"type":"string"}},"required":["base_sha","head_sha","start_sha"],"type":["null","object"]},"discussion_locked":{"type":"boolean"},"diverged_commits_count":{"type":"integer"},"downvotes":{"type":"integer"},"draft":{"type":"boolean"},"first_contribution":{"type":"boolean"},"force_remove_source_branch":{"type":"boolean"},"has_conflicts":{"type":"boolean"},"head_pipeline_id":{"type":"integer"},"id":{"type":"integer"},"labels":{"items":{"type":"string"},"type":["null","array"]},"latest_build_finished_at":{"type":"string"},"latest_build_started_at":{"type":"string"},"merge_after":{"type":"string"},"merge_commit_sha":{"type":"string"},"merge_error":{"type":"string"},"merge_request_iid":{"type":"integer"},"merge_status":{"type":"string"},"merge_when_pipeline_succeeds":{"type":"boolean"},"merged_at":{"type":"string"},"merged_by":{"type":"string"},"milestone":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pipeline_id":{"type":"integer"},"pipeline_name":{"type":"string"},"pipeline_web_url":{"type":"string"},"prepared_at":{"type":"string"},"project_id":{"type":"integer"},"project_path":{"type":"string"},"rebase_in_progress":{"type":"boolean"},"references":{"type":"string"},"reviewers":{"items":{"type":"string"},"type":["null","array"]},"sha":{"type":"string"},"should_remove_source_branch":{"type":"boolean"},"source_branch":{"type":"string"},"source_project_id":{"type":"integer"},"squash":{"type":"boolean"},"squash_commit_sha":{"type":"string"},"squash_on_merge":{"type":"boolean"},"state":{"type":"string"},"subscribed":{"type":"boolean"},"target_branch":{"type":"string"},"target_project_id":{"type":"integer"},"task_completion_count":{"type":"integer"},"task_completion_total":{"type":"integer"},"time_estimate":{"type":"integer"},"title":{"type":"string"},"total_time_spent":{"type":"integer"},"updated_at":{"type":"string"},"upvotes":{"type":"integer"},"user_notes_count":{"type":"integer"},"web_url":{"type":"string"}},"required":["id","merge_request_iid","project_id","title","description","state","source_branch","target_branch","web_url","merge_status","draft","has_conflicts","blocking_discussions_resolved","discussion_locked","assignees","reviewers","labels","created_at","updated_at"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["merge_requests","pagination"],"type":"object"}
```

</details>

<details><summary>merge</summary>

```json
{"additionalProperties":false,"properties":{"allow_collaboration":{"type":"boolean"},"assignees":{"items":{"type":"string"},"type":["null","array"]},"author":{"type":"string"},"blocking_discussions_resolved":{"type":"boolean"},"changes_count":{"type":"string"},"closed_at":{"type":"string"},"closed_by":{"type":"string"},"created_at":{"type":"string"},"description":{"type":"string"},"diff_refs":{"additionalProperties":false,"properties":{"base_sha":{"type":"string"},"head_sha":{"type":"string"},"start_sha":{"type":"string"}},"required":["base_sha","head_sha","start_sha"],"type":["null","object"]},"discussion_locked":{"type":"boolean"},"diverged_commits_count":{"type":"integer"},"downvotes":{"type":"integer"},"draft":{"type":"boolean"},"first_contribution":{"type":"boolean"},"force_remove_source_branch":{"type":"boolean"},"has_conflicts":{"type":"boolean"},"head_pipeline_id":{"type":"integer"},"id":{"type":"integer"},"labels":{"items":{"type":"string"},"type":["null","array"]},"latest_build_finished_at":{"type":"string"},"latest_build_started_at":{"type":"string"},"merge_after":{"type":"string"},"merge_commit_sha":{"type":"string"},"merge_error":{"type":"string"},"merge_request_iid":{"type":"integer"},"merge_status":{"type":"string"},"merge_when_pipeline_succeeds":{"type":"boolean"},"merged_at":{"type":"string"},"merged_by":{"type":"string"},"milestone":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pipeline_id":{"type":"integer"},"pipeline_name":{"type":"string"},"pipeline_web_url":{"type":"string"},"prepared_at":{"type":"string"},"project_id":{"type":"integer"},"project_path":{"type":"string"},"rebase_in_progress":{"type":"boolean"},"references":{"type":"string"},"reviewers":{"items":{"type":"string"},"type":["null","array"]},"sha":{"type":"string"},"should_remove_source_branch":{"type":"boolean"},"source_branch":{"type":"string"},"source_project_id":{"type":"integer"},"squash":{"type":"boolean"},"squash_commit_sha":{"type":"string"},"squash_on_merge":{"type":"boolean"},"state":{"type":"string"},"subscribed":{"type":"boolean"},"target_branch":{"type":"string"},"target_project_id":{"type":"integer"},"task_completion_count":{"type":"integer"},"task_completion_total":{"type":"integer"},"time_estimate":{"type":"integer"},"title":{"type":"string"},"total_time_spent":{"type":"integer"},"updated_at":{"type":"string"},"upvotes":{"type":"integer"},"user_notes_count":{"type":"integer"},"web_url":{"type":"string"}},"required":["id","merge_request_iid","project_id","title","description","state","source_branch","target_branch","web_url","merge_status","draft","has_conflicts","blocking_discussions_resolved","discussion_locked","assignees","reviewers","labels","created_at","updated_at"],"type":"object"}
```

</details>

<details><summary>participants</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"participants":{"items":{"additionalProperties":false,"properties":{"avatar_url":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"state":{"type":"string"},"username":{"type":"string"},"web_url":{"type":"string"}},"required":["id","username","name","state"],"type":"object"},"type":["null","array"]}},"required":["participants"],"type":"object"}
```

</details>

<details><summary>pipelines</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pipelines":{"items":{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"id":{"type":"integer"},"iid":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"project_id":{"type":"integer"},"ref":{"type":"string"},"sha":{"type":"string"},"source":{"type":"string"},"status":{"type":"string"},"updated_at":{"type":"string"},"web_url":{"type":"string"}},"required":["id","iid","project_id","status","source","ref","sha","name","web_url","created_at","updated_at"],"type":"object"},"type":["null","array"]}},"required":["pipelines"],"type":"object"}
```

</details>

<details><summary>rebase</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"rebase_in_progress":{"type":"boolean"}},"required":["rebase_in_progress"],"type":"object"}
```

</details>

<details><summary>related_issues</summary>

```json
{"additionalProperties":false,"properties":{"issues":{"items":{"additionalProperties":false,"properties":{"assignees":{"items":{"type":"string"},"type":["null","array"]},"author":{"type":"string"},"closed_at":{"type":"string"},"closed_by":{"type":"string"},"confidential":{"type":"boolean"},"created_at":{"type":"string"},"description":{"type":"string"},"discussion_locked":{"type":"boolean"},"downvotes":{"type":"integer"},"due_date":{"type":"string"},"epic_issue_id":{"type":"integer"},"health_status":{"type":"string"},"id":{"type":"integer"},"issue_iid":{"type":"integer"},"issue_type":{"type":"string"},"labels":{"items":{"type":"string"},"type":["null","array"]},"merge_request_count":{"type":"integer"},"milestone":{"type":"string"},"moved_to_id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"project_id":{"type":"integer"},"references":{"type":"string"},"state":{"type":"string"},"subscribed":{"type":"boolean"},"task_completion_count":{"type":"integer"},"task_completion_total":{"type":"integer"},"time_estimate":{"type":"integer"},"title":{"type":"string"},"total_time_spent":{"type":"integer"},"updated_at":{"type":"string"},"upvotes":{"type":"integer"},"user_notes_count":{"type":"integer"},"web_url":{"type":"string"},"weight":{"type":"integer"}},"required":["id","issue_iid","title","description","state","labels","assignees","milestone","author","web_url","created_at","updated_at","closed_at","due_date","confidential","discussion_locked","project_id","subscribed"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["issues","pagination"],"type":"object"}
```

</details>

<details><summary>reviewers</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"reviewers":{"items":{"additionalProperties":false,"properties":{"avatar_url":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"review_state":{"type":"string"},"state":{"type":"string"},"username":{"type":"string"},"web_url":{"type":"string"}},"required":["id","username","name","state"],"type":"object"},"type":["null","array"]}},"required":["reviewers"],"type":"object"}
```

</details>

<details><summary>spent_time_add</summary>

```json
{"additionalProperties":false,"properties":{"human_time_estimate":{"type":"string"},"human_total_time_spent":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"time_estimate":{"type":"integer"},"total_time_spent":{"type":"integer"}},"required":["human_time_estimate","human_total_time_spent","time_estimate","total_time_spent"],"type":"object"}
```

</details>

<details><summary>spent_time_reset</summary>

```json
{"additionalProperties":false,"properties":{"human_time_estimate":{"type":"string"},"human_total_time_spent":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"time_estimate":{"type":"integer"},"total_time_spent":{"type":"integer"}},"required":["human_time_estimate","human_total_time_spent","time_estimate","total_time_spent"],"type":"object"}
```

</details>

<details><summary>subscribe</summary>

```json
{"additionalProperties":false,"properties":{"allow_collaboration":{"type":"boolean"},"assignees":{"items":{"type":"string"},"type":["null","array"]},"author":{"type":"string"},"blocking_discussions_resolved":{"type":"boolean"},"changes_count":{"type":"string"},"closed_at":{"type":"string"},"closed_by":{"type":"string"},"created_at":{"type":"string"},"description":{"type":"string"},"diff_refs":{"additionalProperties":false,"properties":{"base_sha":{"type":"string"},"head_sha":{"type":"string"},"start_sha":{"type":"string"}},"required":["base_sha","head_sha","start_sha"],"type":["null","object"]},"discussion_locked":{"type":"boolean"},"diverged_commits_count":{"type":"integer"},"downvotes":{"type":"integer"},"draft":{"type":"boolean"},"first_contribution":{"type":"boolean"},"force_remove_source_branch":{"type":"boolean"},"has_conflicts":{"type":"boolean"},"head_pipeline_id":{"type":"integer"},"id":{"type":"integer"},"labels":{"items":{"type":"string"},"type":["null","array"]},"latest_build_finished_at":{"type":"string"},"latest_build_started_at":{"type":"string"},"merge_after":{"type":"string"},"merge_commit_sha":{"type":"string"},"merge_error":{"type":"string"},"merge_request_iid":{"type":"integer"},"merge_status":{"type":"string"},"merge_when_pipeline_succeeds":{"type":"boolean"},"merged_at":{"type":"string"},"merged_by":{"type":"string"},"milestone":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pipeline_id":{"type":"integer"},"pipeline_name":{"type":"string"},"pipeline_web_url":{"type":"string"},"prepared_at":{"type":"string"},"project_id":{"type":"integer"},"project_path":{"type":"string"},"rebase_in_progress":{"type":"boolean"},"references":{"type":"string"},"reviewers":{"items":{"type":"string"},"type":["null","array"]},"sha":{"type":"string"},"should_remove_source_branch":{"type":"boolean"},"source_branch":{"type":"string"},"source_project_id":{"type":"integer"},"squash":{"type":"boolean"},"squash_commit_sha":{"type":"string"},"squash_on_merge":{"type":"boolean"},"state":{"type":"string"},"subscribed":{"type":"boolean"},"target_branch":{"type":"string"},"target_project_id":{"type":"integer"},"task_completion_count":{"type":"integer"},"task_completion_total":{"type":"integer"},"time_estimate":{"type":"integer"},"title":{"type":"string"},"total_time_spent":{"type":"integer"},"updated_at":{"type":"string"},"upvotes":{"type":"integer"},"user_notes_count":{"type":"integer"},"web_url":{"type":"string"}},"required":["id","merge_request_iid","project_id","title","description","state","source_branch","target_branch","web_url","merge_status","draft","has_conflicts","blocking_discussions_resolved","discussion_locked","assignees","reviewers","labels","created_at","updated_at"],"type":"object"}
```

</details>

<details><summary>time_estimate_reset</summary>

```json
{"additionalProperties":false,"properties":{"human_time_estimate":{"type":"string"},"human_total_time_spent":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"time_estimate":{"type":"integer"},"total_time_spent":{"type":"integer"}},"required":["human_time_estimate","human_total_time_spent","time_estimate","total_time_spent"],"type":"object"}
```

</details>

<details><summary>time_estimate_set</summary>

```json
{"additionalProperties":false,"properties":{"human_time_estimate":{"type":"string"},"human_total_time_spent":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"time_estimate":{"type":"integer"},"total_time_spent":{"type":"integer"}},"required":["human_time_estimate","human_total_time_spent","time_estimate","total_time_spent"],"type":"object"}
```

</details>

<details><summary>time_stats</summary>

```json
{"additionalProperties":false,"properties":{"human_time_estimate":{"type":"string"},"human_total_time_spent":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"time_estimate":{"type":"integer"},"total_time_spent":{"type":"integer"}},"required":["human_time_estimate","human_total_time_spent","time_estimate","total_time_spent"],"type":"object"}
```

</details>

<details><summary>unapprove</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>unsubscribe</summary>

```json
{"additionalProperties":false,"properties":{"allow_collaboration":{"type":"boolean"},"assignees":{"items":{"type":"string"},"type":["null","array"]},"author":{"type":"string"},"blocking_discussions_resolved":{"type":"boolean"},"changes_count":{"type":"string"},"closed_at":{"type":"string"},"closed_by":{"type":"string"},"created_at":{"type":"string"},"description":{"type":"string"},"diff_refs":{"additionalProperties":false,"properties":{"base_sha":{"type":"string"},"head_sha":{"type":"string"},"start_sha":{"type":"string"}},"required":["base_sha","head_sha","start_sha"],"type":["null","object"]},"discussion_locked":{"type":"boolean"},"diverged_commits_count":{"type":"integer"},"downvotes":{"type":"integer"},"draft":{"type":"boolean"},"first_contribution":{"type":"boolean"},"force_remove_source_branch":{"type":"boolean"},"has_conflicts":{"type":"boolean"},"head_pipeline_id":{"type":"integer"},"id":{"type":"integer"},"labels":{"items":{"type":"string"},"type":["null","array"]},"latest_build_finished_at":{"type":"string"},"latest_build_started_at":{"type":"string"},"merge_after":{"type":"string"},"merge_commit_sha":{"type":"string"},"merge_error":{"type":"string"},"merge_request_iid":{"type":"integer"},"merge_status":{"type":"string"},"merge_when_pipeline_succeeds":{"type":"boolean"},"merged_at":{"type":"string"},"merged_by":{"type":"string"},"milestone":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pipeline_id":{"type":"integer"},"pipeline_name":{"type":"string"},"pipeline_web_url":{"type":"string"},"prepared_at":{"type":"string"},"project_id":{"type":"integer"},"project_path":{"type":"string"},"rebase_in_progress":{"type":"boolean"},"references":{"type":"string"},"reviewers":{"items":{"type":"string"},"type":["null","array"]},"sha":{"type":"string"},"should_remove_source_branch":{"type":"boolean"},"source_branch":{"type":"string"},"source_project_id":{"type":"integer"},"squash":{"type":"boolean"},"squash_commit_sha":{"type":"string"},"squash_on_merge":{"type":"boolean"},"state":{"type":"string"},"subscribed":{"type":"boolean"},"target_branch":{"type":"string"},"target_project_id":{"type":"integer"},"task_completion_count":{"type":"integer"},"task_completion_total":{"type":"integer"},"time_estimate":{"type":"integer"},"title":{"type":"string"},"total_time_spent":{"type":"integer"},"updated_at":{"type":"string"},"upvotes":{"type":"integer"},"user_notes_count":{"type":"integer"},"web_url":{"type":"string"}},"required":["id","merge_request_iid","project_id","title","description","state","source_branch","target_branch","web_url","merge_status","draft","has_conflicts","blocking_discussions_resolved","discussion_locked","assignees","reviewers","labels","created_at","updated_at"],"type":"object"}
```

</details>

<details><summary>update</summary>

```json
{"additionalProperties":false,"properties":{"allow_collaboration":{"type":"boolean"},"assignees":{"items":{"type":"string"},"type":["null","array"]},"author":{"type":"string"},"blocking_discussions_resolved":{"type":"boolean"},"changes_count":{"type":"string"},"closed_at":{"type":"string"},"closed_by":{"type":"string"},"created_at":{"type":"string"},"description":{"type":"string"},"diff_refs":{"additionalProperties":false,"properties":{"base_sha":{"type":"string"},"head_sha":{"type":"string"},"start_sha":{"type":"string"}},"required":["base_sha","head_sha","start_sha"],"type":["null","object"]},"discussion_locked":{"type":"boolean"},"diverged_commits_count":{"type":"integer"},"downvotes":{"type":"integer"},"draft":{"type":"boolean"},"first_contribution":{"type":"boolean"},"force_remove_source_branch":{"type":"boolean"},"has_conflicts":{"type":"boolean"},"head_pipeline_id":{"type":"integer"},"id":{"type":"integer"},"labels":{"items":{"type":"string"},"type":["null","array"]},"latest_build_finished_at":{"type":"string"},"latest_build_started_at":{"type":"string"},"merge_after":{"type":"string"},"merge_commit_sha":{"type":"string"},"merge_error":{"type":"string"},"merge_request_iid":{"type":"integer"},"merge_status":{"type":"string"},"merge_when_pipeline_succeeds":{"type":"boolean"},"merged_at":{"type":"string"},"merged_by":{"type":"string"},"milestone":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pipeline_id":{"type":"integer"},"pipeline_name":{"type":"string"},"pipeline_web_url":{"type":"string"},"prepared_at":{"type":"string"},"project_id":{"type":"integer"},"project_path":{"type":"string"},"rebase_in_progress":{"type":"boolean"},"references":{"type":"string"},"reviewers":{"items":{"type":"string"},"type":["null","array"]},"sha":{"type":"string"},"should_remove_source_branch":{"type":"boolean"},"source_branch":{"type":"string"},"source_project_id":{"type":"integer"},"squash":{"type":"boolean"},"squash_commit_sha":{"type":"string"},"squash_on_merge":{"type":"boolean"},"state":{"type":"string"},"subscribed":{"type":"boolean"},"target_branch":{"type":"string"},"target_project_id":{"type":"integer"},"task_completion_count":{"type":"integer"},"task_completion_total":{"type":"integer"},"time_estimate":{"type":"integer"},"title":{"type":"string"},"total_time_spent":{"type":"integer"},"updated_at":{"type":"string"},"upvotes":{"type":"integer"},"user_notes_count":{"type":"integer"},"web_url":{"type":"string"}},"required":["id","merge_request_iid","project_id","title","description","state","source_branch","target_branch","web_url","merge_status","draft","has_conflicts","blocking_discussions_resolved","discussion_locked","assignees","reviewers","labels","created_at","updated_at"],"type":"object"}
```

</details>

### gitlab_model_registry

**Model Registry**

Use {"action":"download","params":{...}}; only top-level keys are action and params.
Action params schema: gitlab://tools/gitlab_model_registry.<action>.

Download ML model package files from the GitLab Model Registry. Read-only — cannot publish or delete model versions through this tool. The underlying GitLab API requires a Premium/Ultimate plan on the target instance (server enforces it with 403); the tool itself is always registered and is not gated by GITLAB_ENTERPRISE.
When to use: pull a model artifact (.pkl, .onnx, .safetensors, .bin, .gguf, etc.) attached to a registered model version, e.g. for inference, evaluation or vendoring into a build pipeline.
NOT for: generic packages (use gitlab_package), container images (use gitlab_package registry_*), release attachments (use gitlab_release link_*), training jobs or experiment tracking, model publishing or versioning (not yet exposed through MCP).

Returns:
- download: {file_name, model_version_id, size, content_base64} — binary content is base64-encoded; large models can produce very large responses.
Errors: 404 (hint: project_id, model_version_id and path are model-registry-scoped; verify in the GitLab UI under Deploy → Model registry), 403 (hint: requires Reporter+ on the project and a Premium/Ultimate plan), 400 (hint: filename must match an asset attached to the version).

- download: project_id*, model_version_id*, path*, filename*. Returns base64-encoded file content.
  - project_id (string | int, required) — numeric ID or URL-encoded full path of the project that owns the registered model.
  - model_version_id (int, required) — registered model version ID; visible in the GitLab UI under Deploy → Model registry → <model> → Versions.
  - path (string, required) — package-relative directory of the asset (use '/' for the package root, otherwise e.g. 'artifacts/' or 'weights/').
  - filename (string, required) — exact asset filename within the package, including extension (e.g. 'model.safetensors', 'config.json').
  - Any unrecognized parameter name is rejected by the meta-tool router (strict unknown-field validation); only the reserved meta key 'confirm' is stripped before unmarshalling.

See also: gitlab_package (generic / npm / maven / conan / pypi / nuget / container packages), gitlab_release (asset links per release), gitlab_repository (raw files in the repo).

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

**Action Output Schemas:**

<details><summary>download</summary>

```json
{"additionalProperties":false,"properties":{"content_base64":{"type":"string"},"filename":{"type":"string"},"model_version_id":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"path":{"type":"string"},"project_id":{"type":"string"},"size_bytes":{"type":"integer"}},"required":["project_id","model_version_id","path","filename","content_base64","size_bytes"],"type":"object"}
```

</details>

### gitlab_mr_review

**MR Review**

Use {"action":"changes_get","params":{...}}; only top-level keys are action and params.
Action params schema: gitlab://tools/gitlab_mr_review.<action>.

Review and comment on GitLab merge requests: notes, threaded discussions (inline + general), code diffs, draft notes (batch review), diff versions, and the per-version diff payload.
When to use: post review comments, open or resolve discussion threads, fetch the diff to comment inline, queue draft notes during a session and publish them as a single review. For prompts like "inspect/view MR changes/diffs" or "without running an LLM analyzer", choose changes_get first.
NOT for: MR lifecycle — create/update/merge/approve/rebase/delete (use gitlab_merge_request), reactions on MR notes (use gitlab_merge_request emoji_mr_note_*), CI pipelines on the MR (use gitlab_pipeline or gitlab_merge_request pipelines).

IMPORTANT — action choice: use note_create only for a general/top-level MR comment with no file or line position. Use discussion_create without position for a general threaded discussion. Add a position object only for inline review comments, including prompts like "comment on this line/file/hunk". If it says draft review note or batch review, use draft_note_create first and draft_note_publish_all once at the end. For raw patch text, use raw_diffs; for structured MR changes by file, use changes_get.

Returns:
- *_list: array with pagination (page, per_page, total, next_page).
- note_*, discussion_*, draft_note_*, diff_*: resource object(s) with id, body/note, author, position (when inline).
- changes_get: {changes: [{old_path, new_path, diff, ...}], truncated_files} — if truncated, use diff_versions_list + diff_version_get, or raw_diffs for the full unified diff payload.
- raw_diffs: {raw_diff: string} — full unified diff for the MR head; ideal when changes_get returns truncated_files.
- *_delete / *_publish: {success: bool, message: string}.
Errors: 404 not found (hint: check note_id/discussion_id and merge_request_iid), 403 forbidden (hint: requires Reporter+ to comment), 400 invalid params (hint: position requires base_sha + start_sha + head_sha + new_path/old_path + new_line/old_line).

Param conventions: * = required. All actions need project_id*, merge_request_iid*. List actions accept page, per_page. position object: {base_sha, start_sha, head_sha, new_path, old_path, new_line (added/modified), old_line (removed), both lines for unchanged context}.

Notes (general comments):
- note_list: order_by (created_at/updated_at), sort
- note_get / note_delete: note_id*
- note_create: body*
- note_update: note_id*, body*

Discussions (threaded, can be inline via position):
- discussion_list
- discussion_get: discussion_id*
- discussion_create: body*, position (inline)
- discussion_reply: discussion_id*, body*
- discussion_resolve: discussion_id*, resolved* (bool)
- discussion_note_update: discussion_id*, note_id*, body, resolved
- discussion_note_delete: discussion_id*, note_id*

Changes and diff versions:
- changes_get: returns structured MR file diffs by merge_request_iid; use this for "inspect/view MR changes" and for comments that need new_path/old_path/new_line/old_line.
- raw_diffs: project_id*, merge_request_iid* — returns the full raw unified diff for the MR head (use only when a raw patch/unified diff is requested or changes_get reports truncated_files)
- diff_versions_list: list MR diff revisions
- diff_version_get: version_id*, unidiff (bool)

Draft notes (batch review, not immediately published):
- draft_note_list: order_by, sort
- draft_note_get: note_id*
- draft_note_create: note*, commit_id, in_reply_to_discussion_id, resolve_discussion (bool), position
- draft_note_update: note_id*, note, position
- draft_note_delete / draft_note_publish: note_id*
- draft_note_publish_all: publishes ALL pending drafts as a single review notification

See also: gitlab_merge_request (MR lifecycle, approvals, merge, time tracking, reactions), gitlab_pipeline (MR pipelines), gitlab_repository (file blame for context).

Annotations: readOnly=false, destructive=true, idempotent=false, openWorld=true

**Action Output Schemas:**

<details><summary>changes_get</summary>

```json
{"additionalProperties":false,"properties":{"changes":{"items":{"additionalProperties":false,"properties":{"a_mode":{"type":"string"},"b_mode":{"type":"string"},"deleted_file":{"type":"boolean"},"diff":{"type":"string"},"generated_file":{"type":"boolean"},"new_file":{"type":"boolean"},"new_path":{"type":"string"},"old_path":{"type":"string"},"renamed_file":{"type":"boolean"}},"required":["old_path","new_path","diff","new_file","renamed_file","deleted_file","a_mode","b_mode","generated_file"],"type":"object"},"type":["null","array"]},"merge_request_iid":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"truncated_files":{"items":{"type":"string"},"type":["null","array"]}},"required":["merge_request_iid","changes"],"type":"object"}
```

</details>

<details><summary>diff_version_get</summary>

```json
{"additionalProperties":false,"properties":{"base_commit_sha":{"type":"string"},"commits":{"items":{"additionalProperties":false,"properties":{"author_name":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"string"},"short_id":{"type":"string"},"title":{"type":"string"}},"required":["id","short_id","title","author_name"],"type":"object"},"type":["null","array"]},"created_at":{"type":"string"},"diffs":{"items":{"additionalProperties":false,"properties":{"a_mode":{"type":"string"},"b_mode":{"type":"string"},"deleted_file":{"type":"boolean"},"diff":{"type":"string"},"generated_file":{"type":"boolean"},"new_file":{"type":"boolean"},"new_path":{"type":"string"},"old_path":{"type":"string"},"renamed_file":{"type":"boolean"}},"required":["old_path","new_path","diff","new_file","renamed_file","deleted_file","a_mode","b_mode","generated_file"],"type":"object"},"type":["null","array"]},"head_commit_sha":{"type":"string"},"id":{"type":"integer"},"merge_request_id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"real_size":{"type":"string"},"start_commit_sha":{"type":"string"},"state":{"type":"string"}},"required":["id"],"type":"object"}
```

</details>

<details><summary>diff_versions_list</summary>

```json
{"additionalProperties":false,"properties":{"diff_versions":{"items":{"additionalProperties":false,"properties":{"base_commit_sha":{"type":"string"},"commits":{"items":{"additionalProperties":false,"properties":{"author_name":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"string"},"short_id":{"type":"string"},"title":{"type":"string"}},"required":["id","short_id","title","author_name"],"type":"object"},"type":["null","array"]},"created_at":{"type":"string"},"diffs":{"items":{"additionalProperties":false,"properties":{"a_mode":{"type":"string"},"b_mode":{"type":"string"},"deleted_file":{"type":"boolean"},"diff":{"type":"string"},"generated_file":{"type":"boolean"},"new_file":{"type":"boolean"},"new_path":{"type":"string"},"old_path":{"type":"string"},"renamed_file":{"type":"boolean"}},"required":["old_path","new_path","diff","new_file","renamed_file","deleted_file","a_mode","b_mode","generated_file"],"type":"object"},"type":["null","array"]},"head_commit_sha":{"type":"string"},"id":{"type":"integer"},"merge_request_id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"real_size":{"type":"string"},"start_commit_sha":{"type":"string"},"state":{"type":"string"}},"required":["id"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["diff_versions","pagination"],"type":"object"}
```

</details>

<details><summary>discussion_create</summary>

```json
{"additionalProperties":false,"properties":{"id":{"type":"string"},"individual_note":{"type":"boolean"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"notes":{"items":{"additionalProperties":false,"properties":{"author":{"type":"string"},"body":{"type":"string"},"commit_id":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"integer"},"internal":{"type":"boolean"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"notable_id":{"type":"integer"},"notable_iid":{"type":"integer"},"project_id":{"type":"integer"},"resolvable":{"type":"boolean"},"resolved":{"type":"boolean"},"system":{"type":"boolean"},"type":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","body","author","created_at","resolved","resolvable","system","internal"],"type":"object"},"type":["null","array"]}},"required":["id","individual_note","notes"],"type":"object"}
```

</details>

<details><summary>discussion_get</summary>

```json
{"additionalProperties":false,"properties":{"id":{"type":"string"},"individual_note":{"type":"boolean"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"notes":{"items":{"additionalProperties":false,"properties":{"author":{"type":"string"},"body":{"type":"string"},"commit_id":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"integer"},"internal":{"type":"boolean"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"notable_id":{"type":"integer"},"notable_iid":{"type":"integer"},"project_id":{"type":"integer"},"resolvable":{"type":"boolean"},"resolved":{"type":"boolean"},"system":{"type":"boolean"},"type":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","body","author","created_at","resolved","resolvable","system","internal"],"type":"object"},"type":["null","array"]}},"required":["id","individual_note","notes"],"type":"object"}
```

</details>

<details><summary>discussion_list</summary>

```json
{"additionalProperties":false,"properties":{"discussions":{"items":{"additionalProperties":false,"properties":{"id":{"type":"string"},"individual_note":{"type":"boolean"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"notes":{"items":{"additionalProperties":false,"properties":{"author":{"type":"string"},"body":{"type":"string"},"commit_id":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"integer"},"internal":{"type":"boolean"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"notable_id":{"type":"integer"},"notable_iid":{"type":"integer"},"project_id":{"type":"integer"},"resolvable":{"type":"boolean"},"resolved":{"type":"boolean"},"system":{"type":"boolean"},"type":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","body","author","created_at","resolved","resolvable","system","internal"],"type":"object"},"type":["null","array"]}},"required":["id","individual_note","notes"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["discussions","pagination"],"type":"object"}
```

</details>

<details><summary>discussion_note_delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>discussion_note_update</summary>

```json
{"additionalProperties":false,"properties":{"author":{"type":"string"},"body":{"type":"string"},"commit_id":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"integer"},"internal":{"type":"boolean"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"notable_id":{"type":"integer"},"notable_iid":{"type":"integer"},"project_id":{"type":"integer"},"resolvable":{"type":"boolean"},"resolved":{"type":"boolean"},"system":{"type":"boolean"},"type":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","body","author","created_at","resolved","resolvable","system","internal"],"type":"object"}
```

</details>

<details><summary>discussion_reply</summary>

```json
{"additionalProperties":false,"properties":{"author":{"type":"string"},"body":{"type":"string"},"commit_id":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"integer"},"internal":{"type":"boolean"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"notable_id":{"type":"integer"},"notable_iid":{"type":"integer"},"project_id":{"type":"integer"},"resolvable":{"type":"boolean"},"resolved":{"type":"boolean"},"system":{"type":"boolean"},"type":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","body","author","created_at","resolved","resolvable","system","internal"],"type":"object"}
```

</details>

<details><summary>discussion_resolve</summary>

```json
{"additionalProperties":false,"properties":{"id":{"type":"string"},"individual_note":{"type":"boolean"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"notes":{"items":{"additionalProperties":false,"properties":{"author":{"type":"string"},"body":{"type":"string"},"commit_id":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"integer"},"internal":{"type":"boolean"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"notable_id":{"type":"integer"},"notable_iid":{"type":"integer"},"project_id":{"type":"integer"},"resolvable":{"type":"boolean"},"resolved":{"type":"boolean"},"system":{"type":"boolean"},"type":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","body","author","created_at","resolved","resolvable","system","internal"],"type":"object"},"type":["null","array"]}},"required":["id","individual_note","notes"],"type":"object"}
```

</details>

<details><summary>draft_note_create</summary>

```json
{"additionalProperties":false,"properties":{"author_id":{"type":"integer"},"commit_id":{"type":"string"},"discussion_id":{"type":"string"},"id":{"type":"integer"},"merge_request_id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"note":{"type":"string"},"position":{"additionalProperties":false,"properties":{"base_sha":{"type":"string"},"head_sha":{"type":"string"},"new_line":{"type":"integer"},"new_path":{"type":"string"},"old_line":{"type":"integer"},"old_path":{"type":"string"},"start_sha":{"type":"string"}},"required":["base_sha","start_sha","head_sha"],"type":["null","object"]},"resolve_discussion":{"type":"boolean"}},"required":["id","author_id","merge_request_id","note","resolve_discussion"],"type":"object"}
```

</details>

<details><summary>draft_note_delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>draft_note_get</summary>

```json
{"additionalProperties":false,"properties":{"author_id":{"type":"integer"},"commit_id":{"type":"string"},"discussion_id":{"type":"string"},"id":{"type":"integer"},"merge_request_id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"note":{"type":"string"},"position":{"additionalProperties":false,"properties":{"base_sha":{"type":"string"},"head_sha":{"type":"string"},"new_line":{"type":"integer"},"new_path":{"type":"string"},"old_line":{"type":"integer"},"old_path":{"type":"string"},"start_sha":{"type":"string"}},"required":["base_sha","start_sha","head_sha"],"type":["null","object"]},"resolve_discussion":{"type":"boolean"}},"required":["id","author_id","merge_request_id","note","resolve_discussion"],"type":"object"}
```

</details>

<details><summary>draft_note_list</summary>

```json
{"additionalProperties":false,"properties":{"draft_notes":{"items":{"additionalProperties":false,"properties":{"author_id":{"type":"integer"},"commit_id":{"type":"string"},"discussion_id":{"type":"string"},"id":{"type":"integer"},"merge_request_id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"note":{"type":"string"},"position":{"additionalProperties":false,"properties":{"base_sha":{"type":"string"},"head_sha":{"type":"string"},"new_line":{"type":"integer"},"new_path":{"type":"string"},"old_line":{"type":"integer"},"old_path":{"type":"string"},"start_sha":{"type":"string"}},"required":["base_sha","start_sha","head_sha"],"type":["null","object"]},"resolve_discussion":{"type":"boolean"}},"required":["id","author_id","merge_request_id","note","resolve_discussion"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["draft_notes","pagination"],"type":"object"}
```

</details>

<details><summary>draft_note_publish</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>draft_note_publish_all</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>draft_note_update</summary>

```json
{"additionalProperties":false,"properties":{"author_id":{"type":"integer"},"commit_id":{"type":"string"},"discussion_id":{"type":"string"},"id":{"type":"integer"},"merge_request_id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"note":{"type":"string"},"position":{"additionalProperties":false,"properties":{"base_sha":{"type":"string"},"head_sha":{"type":"string"},"new_line":{"type":"integer"},"new_path":{"type":"string"},"old_line":{"type":"integer"},"old_path":{"type":"string"},"start_sha":{"type":"string"}},"required":["base_sha","start_sha","head_sha"],"type":["null","object"]},"resolve_discussion":{"type":"boolean"}},"required":["id","author_id","merge_request_id","note","resolve_discussion"],"type":"object"}
```

</details>

<details><summary>note_create</summary>

```json
{"additionalProperties":false,"properties":{"attachment":{"type":"string"},"author":{"type":"string"},"body":{"type":"string"},"commit_id":{"type":"string"},"confidential":{"type":"boolean"},"created_at":{"type":"string"},"expires_at":{"type":"string"},"file_name":{"type":"string"},"id":{"type":"integer"},"internal":{"type":"boolean"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"notable_id":{"type":"integer"},"notable_iid":{"type":"integer"},"notable_type":{"type":"string"},"project_id":{"type":"integer"},"resolvable":{"type":"boolean"},"resolved":{"type":"boolean"},"resolved_at":{"type":"string"},"resolved_by":{"type":"string"},"system":{"type":"boolean"},"type":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","body","author","created_at","updated_at","system","confidential"],"type":"object"}
```

</details>

<details><summary>note_delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>note_get</summary>

```json
{"additionalProperties":false,"properties":{"attachment":{"type":"string"},"author":{"type":"string"},"body":{"type":"string"},"commit_id":{"type":"string"},"confidential":{"type":"boolean"},"created_at":{"type":"string"},"expires_at":{"type":"string"},"file_name":{"type":"string"},"id":{"type":"integer"},"internal":{"type":"boolean"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"notable_id":{"type":"integer"},"notable_iid":{"type":"integer"},"notable_type":{"type":"string"},"project_id":{"type":"integer"},"resolvable":{"type":"boolean"},"resolved":{"type":"boolean"},"resolved_at":{"type":"string"},"resolved_by":{"type":"string"},"system":{"type":"boolean"},"type":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","body","author","created_at","updated_at","system","confidential"],"type":"object"}
```

</details>

<details><summary>note_list</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"notes":{"items":{"additionalProperties":false,"properties":{"attachment":{"type":"string"},"author":{"type":"string"},"body":{"type":"string"},"commit_id":{"type":"string"},"confidential":{"type":"boolean"},"created_at":{"type":"string"},"expires_at":{"type":"string"},"file_name":{"type":"string"},"id":{"type":"integer"},"internal":{"type":"boolean"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"notable_id":{"type":"integer"},"notable_iid":{"type":"integer"},"notable_type":{"type":"string"},"project_id":{"type":"integer"},"resolvable":{"type":"boolean"},"resolved":{"type":"boolean"},"resolved_at":{"type":"string"},"resolved_by":{"type":"string"},"system":{"type":"boolean"},"type":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","body","author","created_at","updated_at","system","confidential"],"type":"object"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["notes","pagination"],"type":"object"}
```

</details>

<details><summary>note_update</summary>

```json
{"additionalProperties":false,"properties":{"attachment":{"type":"string"},"author":{"type":"string"},"body":{"type":"string"},"commit_id":{"type":"string"},"confidential":{"type":"boolean"},"created_at":{"type":"string"},"expires_at":{"type":"string"},"file_name":{"type":"string"},"id":{"type":"integer"},"internal":{"type":"boolean"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"notable_id":{"type":"integer"},"notable_iid":{"type":"integer"},"notable_type":{"type":"string"},"project_id":{"type":"integer"},"resolvable":{"type":"boolean"},"resolved":{"type":"boolean"},"resolved_at":{"type":"string"},"resolved_by":{"type":"string"},"system":{"type":"boolean"},"type":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","body","author","created_at","updated_at","system","confidential"],"type":"object"}
```

</details>

<details><summary>raw_diffs</summary>

```json
{"additionalProperties":false,"properties":{"merge_request_iid":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"raw_diff":{"type":"string"}},"required":["merge_request_iid","raw_diff"],"type":"object"}
```

</details>

### gitlab_package

**Package**

Use {"action":"list","params":{...}}; only top-level keys are action and params.
Action params schema: gitlab://tools/gitlab_package.<action>.
Action guidance:
- list: List package registry packages. If ordering is requested, use order_by with one of created_at, name, version, or type; do not use updated_at, released_at, or downloaded_at.
- publish_directory: Publish all regular files from a local directory to Generic Packages. Omit include_pattern to upload every file; include_pattern is one glob, not a comma-separated file list.
Parameter guidance:
- list.order_by: package_list_sort_field; source: Use only GitLab Package Registry ordering fields accepted by the packages API.; avoid: Do not use updated_at, released_at, downloaded_at, last_downloaded_at, or id as order_by values.
- publish_directory.include_pattern: single_glob_filter; source: Optional single glob matched against file names inside directory_path; omit it to include all regular files.; avoid: Do not pass comma-separated filenames., Do not use include_pattern to enumerate exact files; omit it when all fixture files should be uploaded.

Manage GitLab package registry, container registry, and protection rules. Upload/download generic packages, list/delete packages, browse container images/tags, and configure access policies. Delete actions are destructive.
When to use: publish / download / list / delete generic packages, browse npm/maven/conan/nuget/pypi/etc. metadata, browse and prune container images and tags, manage container and package protection rules.
NOT for: release asset links — these are managed by gitlab_release link_*; secure files (use gitlab_admin secure_file_*); ML model registry artifacts (use gitlab_model_registry); upload general project attachments (use gitlab_project upload).

Behavior:
- Idempotent reads: list / file_list / registry_list_project / registry_list_group / registry_get / registry_tag_list / registry_tag_get / registry_rule_list / protection_rule_list / download.
- publish / publish_directory / publish_and_link create a NEW package version (NON-idempotent — re-publishing the same (package_name, package_version, file_name) returns 400/409 or creates a duplicate file depending on package_type). registry_rule_update / protection_rule_update are idempotent; *_create are non-idempotent on duplicate keys.
- Side effects: publish_and_link also creates a release link visible to release subscribers; download streams files to the required output_path on disk; protection_rule_create / registry_rule_create take effect immediately and may block subsequent publish/delete calls.
- Destructive: delete (entire package), file_delete (single file), registry_delete (entire image repo), registry_tag_delete / registry_tag_delete_bulk (image tags — name_regex_delete may match many tags) and *_rule_delete are irreversible. Protection rules can return 403 ('forbidden by protection rule') instead of executing the delete.

Returns:
- list / file_list / registry_list_project / registry_list_group / registry_tag_list / registry_rule_list / protection_rule_list: arrays with pagination.
- publish / publish_and_link / publish_directory / registry_get / registry_tag_get / registry_rule_create / registry_rule_update / protection_rule_create / protection_rule_update: package / image / rule object. publish_and_link also returns the created release link.
- download: {output_path, size, sha256} — files are streamed to the required output_path on disk.
- delete / file_delete / registry_delete / registry_tag_delete / registry_tag_delete_bulk / registry_rule_delete / protection_rule_delete: {success, message}.
Errors: 404 (hint: package_id, repository_id and tag_name are project-scoped), 403 (hint: requires Maintainer+ to delete; protection rules may block delete with a 'forbidden by protection rule' message), 400 (hint: file_path must exist locally; content_base64 must be valid base64; package_type must be one of GitLab's supported types).

Param conventions: * = required. Most actions need project_id*. List actions accept page, per_page.

Packages:
- publish: project_id*, package_name*, package_version*, file_name*, file_path or content_base64 (one required), status (default/hidden)
- download: project_id*, package_name*, package_version*, file_name*, output_path*
- list: project_id*, package_name, package_version, package_type (generic/npm/maven/etc.), order_by, sort
- file_list: project_id*, package_id*
- delete: project_id*, package_id*. Deletes package and all files.
- file_delete: project_id*, package_id*, package_file_id*
- publish_and_link: publish + create release link. project_id*, package_name*, package_version*, file_name*, file_path or content_base64 (one required), tag_name*, link_name, link_type
- publish_directory: project_id*, package_name*, package_version*, directory_path*, include_pattern (glob), status

Container registry:
- registry_list_project: project_id*, tags, tags_count
- registry_list_group: group_id*
- registry_get: repository_id*, tags, tags_count
- registry_delete: project_id*, repository_id*
- registry_tag_list / registry_tag_get / registry_tag_delete: project_id*, repository_id*, tag_name* (for get/delete)
- registry_tag_delete_bulk: project_id*, repository_id*, name_regex_delete, name_regex_keep, keep_n, older_than

Container registry protection rules:
- registry_rule_list: project_id*
- registry_rule_create: project_id*, repository_path_pattern*, minimum_access_level_for_push, minimum_access_level_for_delete
- registry_rule_update: project_id*, rule_id*, repository_path_pattern, minimum_access_level_for_push, minimum_access_level_for_delete
- registry_rule_delete: project_id*, rule_id*

Package protection rules:
- protection_rule_list: project_id*
- protection_rule_create: project_id*, package_name_pattern*, package_type*, minimum_access_level_for_push, minimum_access_level_for_delete
- protection_rule_update: project_id*, rule_id*, package_name_pattern, package_type, minimum_access_level_for_push, minimum_access_level_for_delete
- protection_rule_delete: project_id*, rule_id*

See also: gitlab_release (release asset links), gitlab_project

Annotations: readOnly=false, destructive=true, idempotent=false, openWorld=true

**Action Output Schemas:**

<details><summary>delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>download</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"output_path":{"type":"string"},"sha256":{"type":"string"},"size":{"type":"integer"}},"required":["output_path","size","sha256"],"type":"object"}
```

</details>

<details><summary>file_delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>file_list</summary>

```json
{"additionalProperties":false,"properties":{"files":{"items":{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"file_md5":{"type":"string"},"file_name":{"type":"string"},"file_sha1":{"type":"string"},"package_file_id":{"type":"integer"},"package_id":{"type":"integer"},"sha256":{"type":"string"},"size":{"type":"integer"}},"required":["package_file_id","package_id","file_name","size","sha256"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["files","pagination"],"type":"object"}
```

</details>

<details><summary>list</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"packages":{"items":{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"id":{"type":"integer"},"last_downloaded_at":{"type":"string"},"name":{"type":"string"},"package_type":{"type":"string"},"pipeline":{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"id":{"type":"integer"},"ref":{"type":"string"},"sha":{"type":"string"},"status":{"type":"string"},"updated_at":{"type":"string"},"user":{"additionalProperties":false,"properties":{"id":{"type":"integer"},"name":{"type":"string"},"username":{"type":"string"},"web_url":{"type":"string"}},"required":["id","username","name","web_url"],"type":["null","object"]},"web_url":{"type":"string"}},"required":["id","status","ref","sha","web_url"],"type":["null","object"]},"pipelines":{"items":{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"id":{"type":"integer"},"ref":{"type":"string"},"sha":{"type":"string"},"status":{"type":"string"},"updated_at":{"type":"string"},"user":{"additionalProperties":false,"properties":{"id":{"type":"integer"},"name":{"type":"string"},"username":{"type":"string"},"web_url":{"type":"string"}},"required":["id","username","name","web_url"],"type":["null","object"]},"web_url":{"type":"string"}},"required":["id","status","ref","sha","web_url"],"type":"object"},"type":["null","array"]},"status":{"type":"string"},"tags":{"items":{"type":"string"},"type":["null","array"]},"version":{"type":"string"},"web_path":{"type":"string"}},"required":["id","name","version","package_type","status"],"type":"object"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["packages","pagination"],"type":"object"}
```

</details>

<details><summary>protection_rule_create</summary>

```json
{"additionalProperties":false,"properties":{"id":{"type":"integer"},"minimum_access_level_for_delete":{"type":"string"},"minimum_access_level_for_push":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"package_name_pattern":{"type":"string"},"package_type":{"type":"string"},"project_id":{"type":"integer"}},"required":["id","project_id","package_name_pattern","package_type"],"type":"object"}
```

</details>

<details><summary>protection_rule_delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>protection_rule_list</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"},"rules":{"items":{"additionalProperties":false,"properties":{"id":{"type":"integer"},"minimum_access_level_for_delete":{"type":"string"},"minimum_access_level_for_push":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"package_name_pattern":{"type":"string"},"package_type":{"type":"string"},"project_id":{"type":"integer"}},"required":["id","project_id","package_name_pattern","package_type"],"type":"object"},"type":["null","array"]}},"required":["rules","pagination"],"type":"object"}
```

</details>

<details><summary>protection_rule_update</summary>

```json
{"additionalProperties":false,"properties":{"id":{"type":"integer"},"minimum_access_level_for_delete":{"type":"string"},"minimum_access_level_for_push":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"package_name_pattern":{"type":"string"},"package_type":{"type":"string"},"project_id":{"type":"integer"}},"required":["id","project_id","package_name_pattern","package_type"],"type":"object"}
```

</details>

<details><summary>publish</summary>

```json
{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"file_md5":{"type":"string"},"file_name":{"type":"string"},"file_sha1":{"type":"string"},"file_store":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"package_file_id":{"type":"integer"},"package_id":{"type":"integer"},"sha256":{"type":"string"},"size":{"type":"integer"},"updated_at":{"type":"string"},"url":{"type":"string"}},"required":["package_file_id","package_id","file_name","size","sha256","file_store","url"],"type":"object"}
```

</details>

<details><summary>publish_and_link</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"package":{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"file_md5":{"type":"string"},"file_name":{"type":"string"},"file_sha1":{"type":"string"},"file_store":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"package_file_id":{"type":"integer"},"package_id":{"type":"integer"},"sha256":{"type":"string"},"size":{"type":"integer"},"updated_at":{"type":"string"},"url":{"type":"string"}},"required":["package_file_id","package_id","file_name","size","sha256","file_store","url"],"type":"object"},"release_link":{"additionalProperties":false,"properties":{"direct_asset_url":{"type":"string"},"external":{"type":"boolean"},"id":{"type":"integer"},"link_type":{"type":"string"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"url":{"type":"string"}},"required":["id","name","url","link_type","external"],"type":"object"}},"required":["package","release_link"],"type":"object"}
```

</details>

<details><summary>publish_directory</summary>

```json
{"additionalProperties":false,"properties":{"errors":{"items":{"type":"string"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"published":{"items":{"additionalProperties":false,"properties":{"file_name":{"type":"string"},"package_file_id":{"type":"integer"},"sha256":{"type":"string"},"size":{"type":"integer"},"url":{"type":"string"}},"required":["file_name","package_file_id","size","sha256","url"],"type":"object"},"type":["null","array"]},"total_bytes":{"type":"integer"},"total_files":{"type":"integer"}},"required":["published","total_files","total_bytes"],"type":"object"}
```

</details>

<details><summary>registry_delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>registry_get</summary>

```json
{"additionalProperties":false,"properties":{"cleanup_policy_started_at":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"integer"},"location":{"type":"string"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"path":{"type":"string"},"project_id":{"type":"integer"},"status":{"type":"string"},"tags_count":{"type":"integer"}},"required":["id","name","path","project_id","location","tags_count"],"type":"object"}
```

</details>

<details><summary>registry_list_group</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"},"repositories":{"items":{"additionalProperties":false,"properties":{"cleanup_policy_started_at":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"integer"},"location":{"type":"string"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"path":{"type":"string"},"project_id":{"type":"integer"},"status":{"type":"string"},"tags_count":{"type":"integer"}},"required":["id","name","path","project_id","location","tags_count"],"type":"object"},"type":["null","array"]}},"required":["repositories","pagination"],"type":"object"}
```

</details>

<details><summary>registry_list_project</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"},"repositories":{"items":{"additionalProperties":false,"properties":{"cleanup_policy_started_at":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"integer"},"location":{"type":"string"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"path":{"type":"string"},"project_id":{"type":"integer"},"status":{"type":"string"},"tags_count":{"type":"integer"}},"required":["id","name","path","project_id","location","tags_count"],"type":"object"},"type":["null","array"]}},"required":["repositories","pagination"],"type":"object"}
```

</details>

<details><summary>registry_rule_create</summary>

```json
{"additionalProperties":false,"properties":{"id":{"type":"integer"},"minimum_access_level_for_delete":{"type":"string"},"minimum_access_level_for_push":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"project_id":{"type":"integer"},"repository_path_pattern":{"type":"string"}},"required":["id","project_id","repository_path_pattern","minimum_access_level_for_push","minimum_access_level_for_delete"],"type":"object"}
```

</details>

<details><summary>registry_rule_delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>registry_rule_list</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"},"rules":{"items":{"additionalProperties":false,"properties":{"id":{"type":"integer"},"minimum_access_level_for_delete":{"type":"string"},"minimum_access_level_for_push":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"project_id":{"type":"integer"},"repository_path_pattern":{"type":"string"}},"required":["id","project_id","repository_path_pattern","minimum_access_level_for_push","minimum_access_level_for_delete"],"type":"object"},"type":["null","array"]}},"required":["rules","pagination"],"type":"object"}
```

</details>

<details><summary>registry_rule_update</summary>

```json
{"additionalProperties":false,"properties":{"id":{"type":"integer"},"minimum_access_level_for_delete":{"type":"string"},"minimum_access_level_for_push":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"project_id":{"type":"integer"},"repository_path_pattern":{"type":"string"}},"required":["id","project_id","repository_path_pattern","minimum_access_level_for_push","minimum_access_level_for_delete"],"type":"object"}
```

</details>

<details><summary>registry_tag_delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>registry_tag_delete_bulk</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>registry_tag_get</summary>

```json
{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"digest":{"type":"string"},"location":{"type":"string"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"path":{"type":"string"},"revision":{"type":"string"},"short_revision":{"type":"string"},"total_size":{"type":"integer"}},"required":["name","path","location","total_size"],"type":"object"}
```

</details>

<details><summary>registry_tag_list</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"},"tags":{"items":{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"digest":{"type":"string"},"location":{"type":"string"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"path":{"type":"string"},"revision":{"type":"string"},"short_revision":{"type":"string"},"total_size":{"type":"integer"}},"required":["name","path","location","total_size"],"type":"object"},"type":["null","array"]}},"required":["tags","pagination"],"type":"object"}
```

</details>

### gitlab_pipeline

**Pipeline**

Use {"action":"list","params":{...}}; only top-level keys are action and params.
Action params schema: gitlab://tools/gitlab_pipeline.<action>.
Action guidance:
- schedule_create_variable: Create or update a pipeline schedule variable. The value parameter is required for both create and edit operations.
- schedule_edit_variable: Create or update a pipeline schedule variable. The value parameter is required for both create and edit operations.
- wait: Use only to poll an existing pipeline_id until a terminal status. For merge when pipeline succeeds, use merge_request.merge with auto_merge=true instead.
Parameter guidance:
- schedule_create_variable.value: pipeline_schedule_variable_value; source: Required variable value to store on the schedule; supply an explicit value even when the task only names the key.
- schedule_edit_variable.value: pipeline_schedule_variable_value; source: Required variable value to store on the schedule; supply an explicit value even when the task only names the key.
- wait.pipeline_id: pipeline_identifier; source: Pipeline ID returned by pipeline.list, pipeline.get, pipeline.latest, or merge_request.pipelines.; avoid: Do not use merge_request_iid; pipeline.wait requires pipeline_id.

Manage GitLab CI/CD pipelines plus trigger tokens, resource groups (mutual-exclusion locks), JUnit test reports, and pipeline schedules. Delete permanently removes a pipeline and all its jobs.
When to use: pipeline CRUD on a project, retry/cancel a run, fetch CI variables and JUnit test reports, manage trigger tokens, resource groups (mutual-exclusion locks), scheduled pipelines and their variables.
NOT for: jobs, logs, artifacts, manual play actions (use gitlab_job), MR-specific pipelines (use gitlab_merge_request 'pipelines' / 'create_pipeline'), CI lint or includes (use gitlab_template).

Behavior:
- Idempotent reads: list / latest / get / variables / test_report / test_report_summary / trigger_list / trigger_get / resource_group_list / resource_group_get / resource_group_upcoming_jobs / schedule_list / schedule_get / schedule_list_triggered_pipelines.
- create / schedule_run / trigger_run start a NEW run on every call (NON-idempotent — produce a fresh pipeline_id). retry re-queues failed/canceled jobs on the existing pipeline (same pipeline_id; continue using it for subsequent get/wait calls). cancel is idempotent (no-op once final). update_metadata / trigger_update / resource_group_edit / schedule_update / schedule_edit_variable / schedule_take_ownership are idempotent (same input → same state).
- Side effects: create / retry / schedule_run / trigger_run queue runners, consume CI minutes, may trigger downstream pipelines, deployments and webhooks. trigger_create returns a secret token visible only ONCE — store it immediately. wait blocks server-side until terminal state or timeout.
- Destructive: delete permanently removes the pipeline and all its jobs, artifacts, logs and traces (irreversible). trigger_delete / schedule_delete / schedule_delete_variable are irreversible.

Returns:
- list / latest / variables / test_report / test_report_summary / trigger_list / resource_group_list / resource_group_upcoming_jobs / schedule_list / schedule_list_triggered_pipelines: array(s) or aggregated payloads with pagination where applicable.
- get / create / cancel / retry / update_metadata / wait / trigger_get / trigger_create / trigger_update / trigger_run / resource_group_get / resource_group_edit / schedule_get / schedule_create / schedule_update / schedule_run / schedule_take_ownership / schedule_create_variable / schedule_edit_variable: pipeline / trigger / resource group / schedule object.
- delete / trigger_delete / schedule_delete / schedule_delete_variable: {success, message}.
Errors: 404 (hint: pipeline_id and trigger/schedule IDs are project-scoped), 403 (hint: requires Maintainer+ to delete pipelines or manage triggers/schedules), 400 (hint: cron expressions must use 5 fields; cron_timezone must be a valid TZ name; create requires 'ref').

Param conventions: * = required. All pipeline actions need project_id*. List actions accept page, per_page.

Pipelines:
- list: project_id*, status (success/failed/running/pending/canceled), scope, source, ref, sha, username
- get / cancel / retry / variables / test_report / test_report_summary: project_id*, pipeline_id*
- delete: project_id*, pipeline_id*. PERMANENTLY removes pipeline and jobs.
- latest: project_id*, ref
- create: project_id*, ref*, variables (array of {key, value, variable_type})
- update_metadata: project_id*, pipeline_id*, name*
- wait: project_id*, pipeline_id*, interval_seconds (5-60, default 10), timeout_seconds (1-3600, default 300), fail_on_error (default true)

Triggers:
- trigger_list: project_id*
- trigger_get / trigger_delete: project_id*, trigger_id*
- trigger_create: project_id*, description*
- trigger_update: project_id*, trigger_id*, description
- trigger_run: project_id*, ref*, token*, variables (map)

Resource groups:
- resource_group_list: project_id*
- resource_group_get / resource_group_edit: project_id*, key*. Edit params: process_mode.
- resource_group_upcoming_jobs: project_id*, key*

Schedules:
- schedule_list: project_id*, scope (active/inactive)
- schedule_get / schedule_delete / schedule_run / schedule_take_ownership: project_id*, schedule_id*
- schedule_create: project_id*, description*, ref*, cron*, cron_timezone, active
- schedule_update: project_id*, schedule_id*, description, ref, cron, cron_timezone, active
- schedule_create_variable: project_id*, schedule_id*, key*, value*, variable_type (env_var/file)
- schedule_edit_variable: project_id*, schedule_id*, key*, value*, variable_type
- schedule_delete_variable: project_id*, schedule_id*, key*
- schedule_list_triggered_pipelines: project_id*, schedule_id*

See also: gitlab_job (job details/logs/artifacts), gitlab_merge_request, gitlab_ci_variable

Annotations: readOnly=false, destructive=true, idempotent=false, openWorld=true

**Action Output Schemas:**

<details><summary>cancel</summary>

```json
{"additionalProperties":false,"properties":{"before_sha":{"type":"string"},"committed_at":{"type":"string"},"coverage":{"type":"string"},"created_at":{"type":"string"},"detailed_status":{"additionalProperties":false,"properties":{"details_path":{"type":"string"},"favicon":{"type":"string"},"group":{"type":"string"},"has_details":{"type":"boolean"},"icon":{"type":"string"},"label":{"type":"string"},"text":{"type":"string"},"tooltip":{"type":"string"}},"required":["icon","text","label","group","tooltip","has_details"],"type":["null","object"]},"duration":{"type":"integer"},"finished_at":{"type":"string"},"id":{"type":"integer"},"iid":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"project_id":{"type":"integer"},"queued_duration":{"type":"integer"},"ref":{"type":"string"},"sha":{"type":"string"},"source":{"type":"string"},"started_at":{"type":"string"},"status":{"type":"string"},"tag":{"type":"boolean"},"updated_at":{"type":"string"},"user_username":{"type":"string"},"web_url":{"type":"string"},"yaml_errors":{"type":"string"}},"required":["id","iid","project_id","status","source","ref","sha","name","tag","duration","queued_duration","web_url","created_at","updated_at"],"type":"object"}
```

</details>

<details><summary>create</summary>

```json
{"additionalProperties":false,"properties":{"before_sha":{"type":"string"},"committed_at":{"type":"string"},"coverage":{"type":"string"},"created_at":{"type":"string"},"detailed_status":{"additionalProperties":false,"properties":{"details_path":{"type":"string"},"favicon":{"type":"string"},"group":{"type":"string"},"has_details":{"type":"boolean"},"icon":{"type":"string"},"label":{"type":"string"},"text":{"type":"string"},"tooltip":{"type":"string"}},"required":["icon","text","label","group","tooltip","has_details"],"type":["null","object"]},"duration":{"type":"integer"},"finished_at":{"type":"string"},"id":{"type":"integer"},"iid":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"project_id":{"type":"integer"},"queued_duration":{"type":"integer"},"ref":{"type":"string"},"sha":{"type":"string"},"source":{"type":"string"},"started_at":{"type":"string"},"status":{"type":"string"},"tag":{"type":"boolean"},"updated_at":{"type":"string"},"user_username":{"type":"string"},"web_url":{"type":"string"},"yaml_errors":{"type":"string"}},"required":["id","iid","project_id","status","source","ref","sha","name","tag","duration","queued_duration","web_url","created_at","updated_at"],"type":"object"}
```

</details>

<details><summary>delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>get</summary>

```json
{"additionalProperties":false,"properties":{"before_sha":{"type":"string"},"committed_at":{"type":"string"},"coverage":{"type":"string"},"created_at":{"type":"string"},"detailed_status":{"additionalProperties":false,"properties":{"details_path":{"type":"string"},"favicon":{"type":"string"},"group":{"type":"string"},"has_details":{"type":"boolean"},"icon":{"type":"string"},"label":{"type":"string"},"text":{"type":"string"},"tooltip":{"type":"string"}},"required":["icon","text","label","group","tooltip","has_details"],"type":["null","object"]},"duration":{"type":"integer"},"finished_at":{"type":"string"},"id":{"type":"integer"},"iid":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"project_id":{"type":"integer"},"queued_duration":{"type":"integer"},"ref":{"type":"string"},"sha":{"type":"string"},"source":{"type":"string"},"started_at":{"type":"string"},"status":{"type":"string"},"tag":{"type":"boolean"},"updated_at":{"type":"string"},"user_username":{"type":"string"},"web_url":{"type":"string"},"yaml_errors":{"type":"string"}},"required":["id","iid","project_id","status","source","ref","sha","name","tag","duration","queued_duration","web_url","created_at","updated_at"],"type":"object"}
```

</details>

<details><summary>latest</summary>

```json
{"additionalProperties":false,"properties":{"before_sha":{"type":"string"},"committed_at":{"type":"string"},"coverage":{"type":"string"},"created_at":{"type":"string"},"detailed_status":{"additionalProperties":false,"properties":{"details_path":{"type":"string"},"favicon":{"type":"string"},"group":{"type":"string"},"has_details":{"type":"boolean"},"icon":{"type":"string"},"label":{"type":"string"},"text":{"type":"string"},"tooltip":{"type":"string"}},"required":["icon","text","label","group","tooltip","has_details"],"type":["null","object"]},"duration":{"type":"integer"},"finished_at":{"type":"string"},"id":{"type":"integer"},"iid":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"project_id":{"type":"integer"},"queued_duration":{"type":"integer"},"ref":{"type":"string"},"sha":{"type":"string"},"source":{"type":"string"},"started_at":{"type":"string"},"status":{"type":"string"},"tag":{"type":"boolean"},"updated_at":{"type":"string"},"user_username":{"type":"string"},"web_url":{"type":"string"},"yaml_errors":{"type":"string"}},"required":["id","iid","project_id","status","source","ref","sha","name","tag","duration","queued_duration","web_url","created_at","updated_at"],"type":"object"}
```

</details>

<details><summary>list</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"},"pipelines":{"items":{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"id":{"type":"integer"},"iid":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"project_id":{"type":"integer"},"ref":{"type":"string"},"sha":{"type":"string"},"source":{"type":"string"},"status":{"type":"string"},"updated_at":{"type":"string"},"web_url":{"type":"string"}},"required":["id","iid","project_id","status","source","ref","sha","name","web_url","created_at","updated_at"],"type":"object"},"type":["null","array"]}},"required":["pipelines","pagination"],"type":"object"}
```

</details>

<details><summary>resource_group_edit</summary>

```json
{"additionalProperties":false,"properties":{"id":{"type":"integer"},"key":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"process_mode":{"type":"string"}},"required":["id","key","process_mode"],"type":"object"}
```

</details>

<details><summary>resource_group_get</summary>

```json
{"additionalProperties":false,"properties":{"id":{"type":"integer"},"key":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"process_mode":{"type":"string"}},"required":["id","key","process_mode"],"type":"object"}
```

</details>

<details><summary>resource_group_list</summary>

```json
{"additionalProperties":false,"properties":{"groups":{"items":{"additionalProperties":false,"properties":{"id":{"type":"integer"},"key":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"process_mode":{"type":"string"}},"required":["id","key","process_mode"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["groups"],"type":"object"}
```

</details>

<details><summary>resource_group_upcoming_jobs</summary>

```json
{"additionalProperties":false,"properties":{"jobs":{"items":{"additionalProperties":false,"properties":{"id":{"type":"integer"},"name":{"type":"string"},"stage":{"type":"string"},"status":{"type":"string"}},"required":["id","name","status","stage"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["jobs"],"type":"object"}
```

</details>

<details><summary>retry</summary>

```json
{"additionalProperties":false,"properties":{"before_sha":{"type":"string"},"committed_at":{"type":"string"},"coverage":{"type":"string"},"created_at":{"type":"string"},"detailed_status":{"additionalProperties":false,"properties":{"details_path":{"type":"string"},"favicon":{"type":"string"},"group":{"type":"string"},"has_details":{"type":"boolean"},"icon":{"type":"string"},"label":{"type":"string"},"text":{"type":"string"},"tooltip":{"type":"string"}},"required":["icon","text","label","group","tooltip","has_details"],"type":["null","object"]},"duration":{"type":"integer"},"finished_at":{"type":"string"},"id":{"type":"integer"},"iid":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"project_id":{"type":"integer"},"queued_duration":{"type":"integer"},"ref":{"type":"string"},"sha":{"type":"string"},"source":{"type":"string"},"started_at":{"type":"string"},"status":{"type":"string"},"tag":{"type":"boolean"},"updated_at":{"type":"string"},"user_username":{"type":"string"},"web_url":{"type":"string"},"yaml_errors":{"type":"string"}},"required":["id","iid","project_id","status","source","ref","sha","name","tag","duration","queued_duration","web_url","created_at","updated_at"],"type":"object"}
```

</details>

<details><summary>schedule_create</summary>

```json
{"additionalProperties":false,"properties":{"active":{"type":"boolean"},"created_at":{"type":"string"},"cron":{"type":"string"},"cron_timezone":{"type":"string"},"description":{"type":"string"},"id":{"type":"integer"},"next_run_at":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"owner_name":{"type":"string"},"ref":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","description","ref","cron","cron_timezone","active"],"type":"object"}
```

</details>

<details><summary>schedule_create_variable</summary>

```json
{"additionalProperties":false,"properties":{"key":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"value":{"type":"string"},"variable_type":{"type":"string"}},"required":["key","value","variable_type"],"type":"object"}
```

</details>

<details><summary>schedule_delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>schedule_delete_variable</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>schedule_edit_variable</summary>

```json
{"additionalProperties":false,"properties":{"key":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"value":{"type":"string"},"variable_type":{"type":"string"}},"required":["key","value","variable_type"],"type":"object"}
```

</details>

<details><summary>schedule_get</summary>

```json
{"additionalProperties":false,"properties":{"active":{"type":"boolean"},"created_at":{"type":"string"},"cron":{"type":"string"},"cron_timezone":{"type":"string"},"description":{"type":"string"},"id":{"type":"integer"},"next_run_at":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"owner_name":{"type":"string"},"ref":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","description","ref","cron","cron_timezone","active"],"type":"object"}
```

</details>

<details><summary>schedule_list</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"},"schedules":{"items":{"additionalProperties":false,"properties":{"active":{"type":"boolean"},"created_at":{"type":"string"},"cron":{"type":"string"},"cron_timezone":{"type":"string"},"description":{"type":"string"},"id":{"type":"integer"},"next_run_at":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"owner_name":{"type":"string"},"ref":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","description","ref","cron","cron_timezone","active"],"type":"object"},"type":["null","array"]}},"required":["schedules","pagination"],"type":"object"}
```

</details>

<details><summary>schedule_list_triggered_pipelines</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"},"pipelines":{"items":{"additionalProperties":false,"properties":{"id":{"type":"integer"},"iid":{"type":"integer"},"ref":{"type":"string"},"sha":{"type":"string"},"source":{"type":"string"},"status":{"type":"string"},"web_url":{"type":"string"}},"required":["id","iid","ref","sha","status","source","web_url"],"type":"object"},"type":["null","array"]}},"required":["pipelines","pagination"],"type":"object"}
```

</details>

<details><summary>schedule_run</summary>

```json
{"additionalProperties":false,"properties":{"active":{"type":"boolean"},"created_at":{"type":"string"},"cron":{"type":"string"},"cron_timezone":{"type":"string"},"description":{"type":"string"},"id":{"type":"integer"},"next_run_at":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"owner_name":{"type":"string"},"ref":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","description","ref","cron","cron_timezone","active"],"type":"object"}
```

</details>

<details><summary>schedule_take_ownership</summary>

```json
{"additionalProperties":false,"properties":{"active":{"type":"boolean"},"created_at":{"type":"string"},"cron":{"type":"string"},"cron_timezone":{"type":"string"},"description":{"type":"string"},"id":{"type":"integer"},"next_run_at":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"owner_name":{"type":"string"},"ref":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","description","ref","cron","cron_timezone","active"],"type":"object"}
```

</details>

<details><summary>schedule_update</summary>

```json
{"additionalProperties":false,"properties":{"active":{"type":"boolean"},"created_at":{"type":"string"},"cron":{"type":"string"},"cron_timezone":{"type":"string"},"description":{"type":"string"},"id":{"type":"integer"},"next_run_at":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"owner_name":{"type":"string"},"ref":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","description","ref","cron","cron_timezone","active"],"type":"object"}
```

</details>

<details><summary>test_report</summary>

```json
{"additionalProperties":false,"properties":{"error_count":{"type":"integer"},"failed_count":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"skipped_count":{"type":"integer"},"success_count":{"type":"integer"},"test_suites":{"items":{"additionalProperties":false,"properties":{"error_count":{"type":"integer"},"failed_count":{"type":"integer"},"name":{"type":"string"},"skipped_count":{"type":"integer"},"success_count":{"type":"integer"},"total_count":{"type":"integer"},"total_time":{"type":"number"}},"required":["name","total_time","total_count","success_count","failed_count","skipped_count","error_count"],"type":"object"},"type":["null","array"]},"total_count":{"type":"integer"},"total_time":{"type":"number"}},"required":["total_time","total_count","success_count","failed_count","skipped_count","error_count","test_suites"],"type":"object"}
```

</details>

<details><summary>test_report_summary</summary>

```json
{"additionalProperties":false,"properties":{"error_count":{"type":"integer"},"failed_count":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"skipped_count":{"type":"integer"},"success_count":{"type":"integer"},"test_suites":{"items":{"additionalProperties":false,"properties":{"build_ids":{"items":{"type":"integer"},"type":["null","array"]},"error_count":{"type":"integer"},"failed_count":{"type":"integer"},"name":{"type":"string"},"skipped_count":{"type":"integer"},"success_count":{"type":"integer"},"total_count":{"type":"integer"},"total_time":{"type":"number"}},"required":["name","total_time","total_count","success_count","failed_count","skipped_count","error_count","build_ids"],"type":"object"},"type":["null","array"]},"total_count":{"type":"integer"},"total_time":{"type":"number"}},"required":["total_time","total_count","success_count","failed_count","skipped_count","error_count","test_suites"],"type":"object"}
```

</details>

<details><summary>trigger_create</summary>

```json
{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"description":{"type":"string"},"id":{"type":"integer"},"last_used":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"owner_id":{"type":"integer"},"owner_name":{"type":"string"},"token":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","description","token"],"type":"object"}
```

</details>

<details><summary>trigger_delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>trigger_get</summary>

```json
{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"description":{"type":"string"},"id":{"type":"integer"},"last_used":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"owner_id":{"type":"integer"},"owner_name":{"type":"string"},"token":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","description","token"],"type":"object"}
```

</details>

<details><summary>trigger_list</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"},"triggers":{"items":{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"description":{"type":"string"},"id":{"type":"integer"},"last_used":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"owner_id":{"type":"integer"},"owner_name":{"type":"string"},"token":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","description","token"],"type":"object"},"type":["null","array"]}},"required":["triggers","pagination"],"type":"object"}
```

</details>

<details><summary>trigger_run</summary>

```json
{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pipeline_id":{"type":"integer"},"ref":{"type":"string"},"sha":{"type":"string"},"status":{"type":"string"},"web_url":{"type":"string"}},"required":["pipeline_id","sha","ref","status","web_url"],"type":"object"}
```

</details>

<details><summary>trigger_update</summary>

```json
{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"description":{"type":"string"},"id":{"type":"integer"},"last_used":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"owner_id":{"type":"integer"},"owner_name":{"type":"string"},"token":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","description","token"],"type":"object"}
```

</details>

<details><summary>update_metadata</summary>

```json
{"additionalProperties":false,"properties":{"before_sha":{"type":"string"},"committed_at":{"type":"string"},"coverage":{"type":"string"},"created_at":{"type":"string"},"detailed_status":{"additionalProperties":false,"properties":{"details_path":{"type":"string"},"favicon":{"type":"string"},"group":{"type":"string"},"has_details":{"type":"boolean"},"icon":{"type":"string"},"label":{"type":"string"},"text":{"type":"string"},"tooltip":{"type":"string"}},"required":["icon","text","label","group","tooltip","has_details"],"type":["null","object"]},"duration":{"type":"integer"},"finished_at":{"type":"string"},"id":{"type":"integer"},"iid":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"project_id":{"type":"integer"},"queued_duration":{"type":"integer"},"ref":{"type":"string"},"sha":{"type":"string"},"source":{"type":"string"},"started_at":{"type":"string"},"status":{"type":"string"},"tag":{"type":"boolean"},"updated_at":{"type":"string"},"user_username":{"type":"string"},"web_url":{"type":"string"},"yaml_errors":{"type":"string"}},"required":["id","iid","project_id","status","source","ref","sha","name","tag","duration","queued_duration","web_url","created_at","updated_at"],"type":"object"}
```

</details>

<details><summary>variables</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"variables":{"items":{"additionalProperties":false,"properties":{"key":{"type":"string"},"value":{"type":"string"},"variable_type":{"type":"string"}},"required":["key","value","variable_type"],"type":"object"},"type":["null","array"]}},"required":["variables"],"type":"object"}
```

</details>

<details><summary>wait</summary>

```json
{"additionalProperties":false,"properties":{"final_status":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pipeline":{"additionalProperties":false,"properties":{"before_sha":{"type":"string"},"committed_at":{"type":"string"},"coverage":{"type":"string"},"created_at":{"type":"string"},"detailed_status":{"additionalProperties":false,"properties":{"details_path":{"type":"string"},"favicon":{"type":"string"},"group":{"type":"string"},"has_details":{"type":"boolean"},"icon":{"type":"string"},"label":{"type":"string"},"text":{"type":"string"},"tooltip":{"type":"string"}},"required":["icon","text","label","group","tooltip","has_details"],"type":["null","object"]},"duration":{"type":"integer"},"finished_at":{"type":"string"},"id":{"type":"integer"},"iid":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"project_id":{"type":"integer"},"queued_duration":{"type":"integer"},"ref":{"type":"string"},"sha":{"type":"string"},"source":{"type":"string"},"started_at":{"type":"string"},"status":{"type":"string"},"tag":{"type":"boolean"},"updated_at":{"type":"string"},"user_username":{"type":"string"},"web_url":{"type":"string"},"yaml_errors":{"type":"string"}},"required":["id","iid","project_id","status","source","ref","sha","name","tag","duration","queued_duration","web_url","created_at","updated_at"],"type":"object"},"poll_count":{"type":"integer"},"timed_out":{"type":"boolean"},"waited_for":{"type":"string"}},"required":["pipeline","waited_for","poll_count","final_status","timed_out"],"type":"object"}
```

</details>

### gitlab_project

**Project**

Use {"action":"list","params":{...}}; only top-level keys are action and params.
Action params schema: gitlab://tools/gitlab_project.<action>.
Action guidance:
- badge_add: Add a project badge. Use project_id for project badge operations; do not use group_id. Use when the task says project badge; do not use gitlab_group for project badge CRUD.
- badge_delete: Delete a project badge. Use project_id for project badge operations; do not use group_id. Use when the task says project badge; do not use gitlab_group for project badge CRUD.
- badge_edit: Edit a project badge. Use project_id for project badge operations; do not use group_id. Use when the task says project badge; do not use gitlab_group for project badge CRUD. Use the parameter name name for a new badge name; new_name is not supported.
- badge_get: Get a project badge. Use project_id for project badge operations; do not use group_id. Use when the task says project badge; do not use gitlab_group for project badge CRUD.
- badge_list: List project badges. Use project_id for project badge operations; do not use group_id. Use when the task says project badge; do not use gitlab_group for project badge CRUD.
- badge_preview: Preview a project badge. Use project_id for project badge operations; do not use group_id. Use when the task says project badge; do not use gitlab_group for project badge CRUD.
Parameter guidance:
- badge_add.project_id: scope_project; source: Project that owns the badge.; avoid: Do not use group_id for project badge actions.
- badge_delete.project_id: scope_project; source: Project that owns the badge.; avoid: Do not use group_id for project badge actions.
- badge_edit.name: badge_display_name; source: Optional replacement badge name. The parameter is named name.; avoid: Do not send new_name; badge_edit accepts name, link_url, and image_url.
- badge_edit.project_id: scope_project; source: Project that owns the badge.; avoid: Do not use group_id for project badge actions.
- badge_get.project_id: scope_project; source: Project that owns the badge.; avoid: Do not use group_id for project badge actions.
- badge_list.project_id: scope_project; source: Project that owns the badge.; avoid: Do not use group_id for project badge actions.
- badge_preview.project_id: scope_project; source: Project that owns the badge.; avoid: Do not use group_id for project badge actions.

Manage GitLab projects end-to-end: lifecycle (create/fork/transfer/archive/delete), visibility & access (members, share, approval rules, integrations, webhooks), and advanced features (mirrors, Pages, badges, boards, labels, milestones, uploads, avatars, import/export, housekeeping). Delete, unpublish, force-push and *_delete actions are destructive.
When to use: project-level configuration and metadata. NOT for: file content/commits (use gitlab_repository), branches (gitlab_branch), wiki pages (gitlab_wiki), issues (gitlab_issue), MRs (gitlab_merge_request).

Behavior:
- Idempotent reads: every get/list/*_get/*_list action plus badge_preview, languages, repository_storage_get, statistics_get.
- Idempotent mutations: update / *_update / *_edit / star / unstar / archive / unarchive / hook_set_*. NON-idempotent: create, fork, *_create, hook_add, hook_test — each invocation queues a new webhook delivery.
- Side effects: hook_add/edit/test trigger webhook deliveries; member_add/share/edit and integration_set_* notify users; transfer relocates the project and members; export_schedule / import_from_file / start_mirroring / start_housekeeping queue long-running async work (poll *_status); upload_avatar / upload mutate storage.
- Destructive: delete (unless restore window applies), *_delete (hook/label/milestone/badge/board/integration/approval_rule/mirror/upload/pages_domain/board_list), pages_unpublish, mirror_force_push, delete_shared_group, delete_fork_relation. archive is reversible via unarchive.

Returns: list/*_list actions return paginated arrays {page, per_page, total, next_page}. CRUD/get/configure/upload actions return the resource object — including label_subscribe (returns the updated label). Pure-mutation actions (delete, *_delete, mirror_force_push, start_*, *_promote, label_unsubscribe) return {success, message}.
Errors: 404 (hint: project_id may be a numeric ID or URL-encoded path like 'group%2Frepo'), 403 (hint: most mutations require Maintainer+; settings/transfers require Owner; instance-level actions require admin), 400 (hint: visibility ∈ private/internal/public; merge_method ∈ merge/rebase_merge/ff; namespace_id must be writable by the caller).

Param conventions: * = required. Most actions need project_id* (numeric ID or URL-encoded path like 'group/repo'). List actions accept page, per_page. Access levels: 10=Guest, 20=Reporter, 30=Developer, 40=Maintainer, 50=Owner.

Project CRUD:
- create: name*, namespace_id, description, visibility (private/internal/public), initialize_with_readme, default_branch, path, topics, merge_method (merge/rebase_merge/ff), squash_option (never/always/default_on/default_off), ci_config_path, feature toggles (issues/merge_requests/wiki/jobs/lfs/request_access_enabled)
- get: project_id*
- list: owned, search, visibility, archived, order_by, sort, topic, simple, min_access_level, last_activity_after/before, starred, membership, search_namespaces, statistics, include_pending_delete, include_hidden
- update: project_id*, name, description, visibility, default_branch, merge_method, topics, squash_option, merge_commit_template, squash_commit_template, merge_pipelines_enabled, merge_trains_enabled, approvals_before_merge, feature toggles
- delete: project_id*, permanently_remove, full_path (required when permanently_remove=true). Delayed deletion by default; permanently_remove bypasses it
- restore: project_id*

Project actions:
- fork: project_id*, name, path, namespace_id, namespace_path, visibility, branches, mr_default_target_self
- star / unstar / archive / unarchive / languages: project_id*
- transfer: project_id*, namespace* (ID or path)
- list_forks: project_id*, owned, search, visibility, order_by, sort
- create_fork_relation: project_id*, forked_from_id*
- delete_fork_relation: project_id*

Users and groups:
- list_user_projects: user_id* (ID or username), search, visibility, archived, order_by, sort, simple
- list_users / list_starrers: project_id*, search
- list_groups: project_id*, search, with_shared, shared_visible_only, skip_groups, shared_min_access_level
- share_with_group: project_id*, group_id*, group_access* (10-40), expires_at
- delete_shared_group: project_id*, group_id*
- list_invited_groups: project_id*, search, min_access_level
- list_user_contributed / list_user_starred: user_id*, search, visibility, archived, order_by, sort, simple

Members (member_*):
- members: project_id*, query (filter name/username)
- member_get / member_inherited: project_id*, user_id*
- member_add: project_id*, user_id or username*, access_level* (10-50), expires_at, member_role_id
- member_edit: project_id*, user_id*, access_level*, expires_at, member_role_id
- member_delete: project_id*, user_id*

Webhooks (hook_*) — project webhook event booleans are push_events, tag_push_events, issues_events, confidential_issues_events, merge_requests_events, note_events, confidential_note_events, job_events, pipeline_events, wiki_page_events, deployment_events, releases_events, emoji_events, and resource_access_token_events. Do not send member_events or subgroup_events for project hooks; those are group hook fields. Omit params that are not requested, and omit null values.
- hook_list: project_id*
- hook_get / hook_delete: project_id*, hook_id*
- hook_add: project_id*, url*, name, description, token, event booleans, enable_ssl_verification, push_events_branch_filter, custom_webhook_template, branch_filter_strategy
- hook_edit: project_id*, hook_id*, same params as hook_add
- hook_test: project_id*, hook_id*, event* (e.g. push_events)
- hook_set_custom_header / hook_set_url_variable: project_id*, hook_id*, key*, value*
- hook_delete_custom_header / hook_delete_url_variable: project_id*, hook_id*, key*

Labels (label_*):
- label_list: project_id*, search, with_counts, include_ancestor_groups
- label_get / label_delete / label_subscribe / label_unsubscribe / label_promote: project_id*, label_id*
- label_create: project_id*, name*, color* (hex), description, priority
- label_update: project_id*, label_id*, new_name, color, description, priority

Project milestones (milestone_* — use gitlab_group group_milestone_* only when the prompt explicitly says group milestone or gives a group_id/group path):
- milestone_list: project_id*, state (active/closed), title, search, include_ancestors
- milestone_get / milestone_delete: project_id*, milestone_iid*
- milestone_create: project_id*, title*, description, start_date, due_date
- milestone_update: project_id*, milestone_iid*, title, description, start_date, due_date, state_event (activate/close)
- milestone_issues / milestone_merge_requests: project_id*, milestone_iid*

Badges (badge_*):
- badge_list: project_id*, name
- badge_get / badge_delete: project_id*, badge_id*
- badge_add / badge_preview: project_id*, link_url*, image_url*, name
- badge_edit: project_id*, badge_id*, link_url, image_url, name

Boards (board_*):
- board_list: project_id*
- board_get / board_delete: project_id*, board_id*
- board_create: project_id*, name*
- board_update: project_id*, board_id*, name, assignee_id, milestone_id, labels, weight, hide_backlog_list, hide_closed_list
- board_list_list: project_id*, board_id*
- board_list_get / board_list_delete: project_id*, board_id*, list_id*
- board_list_create: project_id*, board_id*, label_id
- board_list_update: project_id*, board_id*, list_id*, position

Integrations (integration_*):
- integration_list: project_id*
- integration_get / integration_delete: project_id*, slug* (e.g. jira, slack, discord, datadog, jenkins, mattermost, telegram)
- integration_set_jira: project_id*, url*, username, password, active, api_url, jira_auth_type, jira_issue_prefix, commit_events, merge_requests_events, issues_enabled, project_keys

Uploads:
- upload: project_id*, filename*, file_path or content_base64 (one required). Returns Markdown embed
- upload_list: project_id*
- upload_delete: project_id*, upload_id*

Import/Export:
- export_schedule / export_status / export_download: project_id*
- import_from_file: file_path or content_base64 (one required), namespace, name, path, overwrite
- import_status: project_id*

Pages (pages_*):
- pages_get / pages_unpublish: project_id*
- pages_update: project_id*, pages_https_only, pages_access_level
- pages_domain_list_all: (admin only)
- pages_domain_list: project_id*
- pages_domain_get / pages_domain_delete: project_id*, domain*
- pages_domain_create / pages_domain_update: project_id*, domain*, certificate, key

Avatars:
- upload_avatar: project_id*, filename*, content_base64*
- download_avatar: project_id*

Approval rules (approval_*):
- approval_config_get: project_id*
- approval_config_change: project_id*, approvals_before_merge, reset_approvals_on_push, merge_requests_author_approval, merge_requests_disable_committers_approval, require_password_to_approve
- approval_rule_list: project_id*
- approval_rule_get / approval_rule_delete: project_id*, rule_id*
- approval_rule_create: project_id*, name*, approvals_required*, rule_type, user_ids, group_ids, protected_branch_ids, usernames, applies_to_all_protected_branches
- approval_rule_update: project_id*, rule_id*, name, approvals_required, user_ids, group_ids, protected_branch_ids, usernames

Pull mirroring:
- pull_mirror_get: project_id*
- pull_mirror_configure: project_id*, enabled, url, auth_user, auth_password, mirror_branch_regex, mirror_trigger_builds, only_mirror_protected_branches
- start_mirroring: project_id*

Remote mirrors (mirror_*):
- mirror_list: project_id*
- mirror_get / mirror_delete: project_id*, mirror_id*
- mirror_get_public_key: project_id*, mirror_id*
- mirror_add: project_id*, url*, enabled, keep_divergent_refs, only_protected_branches, mirror_branch_regex, auth_method (password/ssh_public_key)
- mirror_edit: project_id*, mirror_id*, enabled, keep_divergent_refs, only_protected_branches, mirror_branch_regex, auth_method
- mirror_force_push: project_id*, mirror_id*

Maintenance:
- start_housekeeping / repository_storage_get / statistics_get: project_id*

Admin:
- create_for_user: user_id*, name*, path, namespace_id, description, visibility, initialize_with_readme, default_branch, topics

See also: gitlab_repository (files/commits), gitlab_branch, gitlab_wiki, gitlab_issue, gitlab_merge_request, gitlab_discover_project (find project ID)

Push Rules (Premium+ — GITLAB_ENTERPRISE=true):
- push_rule_get / push_rule_delete: project_id*
- push_rule_add / push_rule_edit: project_id*, commit_message_regex, commit_message_negative_regex, branch_name_regex, author_email_regex, file_name_regex, max_file_size, deny_delete_tag, member_check, prevent_secrets, commit_committer_check, reject_unsigned_commits, reject_non_dco_commits

Security Settings (Ultimate — GITLAB_ENTERPRISE=true):
- security_settings_get: project_id*
- security_settings_update: project_id*, secret_push_protection_enabled*

Annotations: readOnly=false, destructive=true, idempotent=false, openWorld=true

**Action Output Schemas:**

<details><summary>approval_config_change</summary>

```json
{"additionalProperties":false,"properties":{"approvals_before_merge":{"type":"integer"},"disable_overriding_approvers_per_merge_request":{"type":"boolean"},"merge_requests_author_approval":{"type":"boolean"},"merge_requests_disable_committers_approval":{"type":"boolean"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"require_reauthentication_to_approve":{"type":"boolean"},"reset_approvals_on_push":{"type":"boolean"},"selective_code_owner_removals":{"type":"boolean"}},"required":["approvals_before_merge","reset_approvals_on_push","disable_overriding_approvers_per_merge_request","merge_requests_author_approval","merge_requests_disable_committers_approval","require_reauthentication_to_approve","selective_code_owner_removals"],"type":"object"}
```

</details>

<details><summary>approval_config_get</summary>

```json
{"additionalProperties":false,"properties":{"approvals_before_merge":{"type":"integer"},"disable_overriding_approvers_per_merge_request":{"type":"boolean"},"merge_requests_author_approval":{"type":"boolean"},"merge_requests_disable_committers_approval":{"type":"boolean"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"require_reauthentication_to_approve":{"type":"boolean"},"reset_approvals_on_push":{"type":"boolean"},"selective_code_owner_removals":{"type":"boolean"}},"required":["approvals_before_merge","reset_approvals_on_push","disable_overriding_approvers_per_merge_request","merge_requests_author_approval","merge_requests_disable_committers_approval","require_reauthentication_to_approve","selective_code_owner_removals"],"type":"object"}
```

</details>

<details><summary>approval_rule_create</summary>

```json
{"additionalProperties":false,"properties":{"applies_to_all_protected_branches":{"type":"boolean"},"approvals_required":{"type":"integer"},"contains_hidden_groups":{"type":"boolean"},"eligible_approvers":{"items":{"type":"string"},"type":["null","array"]},"groups":{"items":{"type":"string"},"type":["null","array"]},"id":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"report_type":{"type":"string"},"rule_type":{"type":"string"},"users":{"items":{"type":"string"},"type":["null","array"]}},"required":["id","name","approvals_required","contains_hidden_groups","applies_to_all_protected_branches"],"type":"object"}
```

</details>

<details><summary>approval_rule_delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>approval_rule_get</summary>

```json
{"additionalProperties":false,"properties":{"applies_to_all_protected_branches":{"type":"boolean"},"approvals_required":{"type":"integer"},"contains_hidden_groups":{"type":"boolean"},"eligible_approvers":{"items":{"type":"string"},"type":["null","array"]},"groups":{"items":{"type":"string"},"type":["null","array"]},"id":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"report_type":{"type":"string"},"rule_type":{"type":"string"},"users":{"items":{"type":"string"},"type":["null","array"]}},"required":["id","name","approvals_required","contains_hidden_groups","applies_to_all_protected_branches"],"type":"object"}
```

</details>

<details><summary>approval_rule_list</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"},"rules":{"items":{"additionalProperties":false,"properties":{"applies_to_all_protected_branches":{"type":"boolean"},"approvals_required":{"type":"integer"},"contains_hidden_groups":{"type":"boolean"},"eligible_approvers":{"items":{"type":"string"},"type":["null","array"]},"groups":{"items":{"type":"string"},"type":["null","array"]},"id":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"report_type":{"type":"string"},"rule_type":{"type":"string"},"users":{"items":{"type":"string"},"type":["null","array"]}},"required":["id","name","approvals_required","contains_hidden_groups","applies_to_all_protected_branches"],"type":"object"},"type":["null","array"]}},"required":["rules","pagination"],"type":"object"}
```

</details>

<details><summary>approval_rule_update</summary>

```json
{"additionalProperties":false,"properties":{"applies_to_all_protected_branches":{"type":"boolean"},"approvals_required":{"type":"integer"},"contains_hidden_groups":{"type":"boolean"},"eligible_approvers":{"items":{"type":"string"},"type":["null","array"]},"groups":{"items":{"type":"string"},"type":["null","array"]},"id":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"report_type":{"type":"string"},"rule_type":{"type":"string"},"users":{"items":{"type":"string"},"type":["null","array"]}},"required":["id","name","approvals_required","contains_hidden_groups","applies_to_all_protected_branches"],"type":"object"}
```

</details>

<details><summary>archive</summary>

```json
{"additionalProperties":false,"properties":{"allow_merge_on_skipped_pipeline":{"type":"boolean"},"approvals_before_merge":{"type":"integer"},"archived":{"type":"boolean"},"autoclose_referenced_issues":{"type":"boolean"},"avatar_url":{"type":"string"},"build_timeout":{"type":"integer"},"ci_config_path":{"type":"string"},"compliance_frameworks":{"items":{"type":"string"},"type":["null","array"]},"container_registry_enabled":{"type":"boolean"},"created_at":{"type":"string"},"creator_id":{"type":"integer"},"default_branch":{"type":"string"},"description":{"type":"string"},"empty_repo":{"type":"boolean"},"forked_from_project":{"type":"string"},"forks_count":{"type":"integer"},"http_url_to_repo":{"type":"string"},"id":{"type":"integer"},"import_url":{"type":"string"},"issues_enabled":{"type":"boolean"},"jobs_enabled":{"type":"boolean"},"last_activity_at":{"type":"string"},"lfs_enabled":{"type":"boolean"},"marked_for_deletion_on":{"type":"string"},"merge_commit_template":{"type":"string"},"merge_method":{"type":"string"},"merge_pipelines_enabled":{"type":"boolean"},"merge_request_title_regex":{"type":"string"},"merge_request_title_regex_description":{"type":"string"},"merge_requests_enabled":{"type":"boolean"},"merge_trains_enabled":{"type":"boolean"},"name":{"type":"string"},"name_with_namespace":{"type":"string"},"namespace":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"only_allow_merge_if_all_discussions_are_resolved":{"type":"boolean"},"only_allow_merge_if_pipeline_succeeds":{"type":"boolean"},"open_issues_count":{"type":"integer"},"package_registry_access_level":{"type":"string"},"packages_enabled":{"type":"boolean"},"path":{"type":"string"},"path_with_namespace":{"type":"string"},"protect_merge_request_pipelines":{"type":["null","boolean"]},"public_builds":{"type":"boolean"},"readme_url":{"type":"string"},"remove_source_branch_after_merge":{"type":"boolean"},"request_access_enabled":{"type":"boolean"},"resolve_outdated_diff_discussions":{"type":"boolean"},"shared_runners_enabled":{"type":"boolean"},"snippets_enabled":{"type":"boolean"},"squash_commit_template":{"type":"string"},"squash_option":{"type":"string"},"ssh_url_to_repo":{"type":"string"},"star_count":{"type":"integer"},"suggestion_commit_message":{"type":"string"},"topics":{"items":{"type":"string"},"type":["null","array"]},"updated_at":{"type":"string"},"visibility":{"type":"string"},"web_url":{"type":"string"},"wiki_enabled":{"type":"boolean"}},"required":["id","name","path","path_with_namespace","visibility","default_branch","web_url","description","archived","topics","only_allow_merge_if_pipeline_succeeds","only_allow_merge_if_all_discussions_are_resolved","remove_source_branch_after_merge","created_at","request_access_enabled","issues_enabled","merge_requests_enabled","wiki_enabled","jobs_enabled","lfs_enabled","allow_merge_on_skipped_pipeline","merge_pipelines_enabled","merge_trains_enabled","autoclose_referenced_issues","resolve_outdated_diff_discussions"],"type":"object"}
```

</details>

<details><summary>badge_add</summary>

```json
{"additionalProperties":false,"properties":{"badge":{"additionalProperties":false,"properties":{"id":{"type":"integer"},"image_url":{"type":"string"},"kind":{"type":"string"},"link_url":{"type":"string"},"name":{"type":"string"},"rendered_image_url":{"type":"string"},"rendered_link_url":{"type":"string"}},"required":["id","link_url","image_url"],"type":"object"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["badge"],"type":"object"}
```

</details>

<details><summary>badge_delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>badge_edit</summary>

```json
{"additionalProperties":false,"properties":{"badge":{"additionalProperties":false,"properties":{"id":{"type":"integer"},"image_url":{"type":"string"},"kind":{"type":"string"},"link_url":{"type":"string"},"name":{"type":"string"},"rendered_image_url":{"type":"string"},"rendered_link_url":{"type":"string"}},"required":["id","link_url","image_url"],"type":"object"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["badge"],"type":"object"}
```

</details>

<details><summary>badge_get</summary>

```json
{"additionalProperties":false,"properties":{"badge":{"additionalProperties":false,"properties":{"id":{"type":"integer"},"image_url":{"type":"string"},"kind":{"type":"string"},"link_url":{"type":"string"},"name":{"type":"string"},"rendered_image_url":{"type":"string"},"rendered_link_url":{"type":"string"}},"required":["id","link_url","image_url"],"type":"object"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["badge"],"type":"object"}
```

</details>

<details><summary>badge_list</summary>

```json
{"additionalProperties":false,"properties":{"badges":{"items":{"additionalProperties":false,"properties":{"id":{"type":"integer"},"image_url":{"type":"string"},"kind":{"type":"string"},"link_url":{"type":"string"},"name":{"type":"string"},"rendered_image_url":{"type":"string"},"rendered_link_url":{"type":"string"}},"required":["id","link_url","image_url"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["badges","pagination"],"type":"object"}
```

</details>

<details><summary>badge_preview</summary>

```json
{"additionalProperties":false,"properties":{"badge":{"additionalProperties":false,"properties":{"id":{"type":"integer"},"image_url":{"type":"string"},"kind":{"type":"string"},"link_url":{"type":"string"},"name":{"type":"string"},"rendered_image_url":{"type":"string"},"rendered_link_url":{"type":"string"}},"required":["id","link_url","image_url"],"type":"object"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["badge"],"type":"object"}
```

</details>

<details><summary>board_create</summary>

```json
{"additionalProperties":false,"properties":{"assignee_id":{"type":"integer"},"assignee_username":{"type":"string"},"hide_backlog_list":{"type":"boolean"},"hide_closed_list":{"type":"boolean"},"id":{"type":"integer"},"labels":{"items":{"type":"string"},"type":["null","array"]},"lists":{"items":{"additionalProperties":false,"properties":{"assignee_id":{"type":"integer"},"assignee_username":{"type":"string"},"id":{"type":"integer"},"label_id":{"type":"integer"},"label_name":{"type":"string"},"max_issue_count":{"type":"integer"},"max_issue_weight":{"type":"integer"},"milestone_id":{"type":"integer"},"milestone_title":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"position":{"type":"integer"}},"required":["id","position"],"type":"object"},"type":["null","array"]},"milestone_id":{"type":"integer"},"milestone_title":{"type":"string"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"project_id":{"type":"integer"},"project_name":{"type":"string"},"project_path":{"type":"string"},"weight":{"type":"integer"}},"required":["id","name","hide_backlog_list","hide_closed_list"],"type":"object"}
```

</details>

<details><summary>board_delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>board_get</summary>

```json
{"additionalProperties":false,"properties":{"assignee_id":{"type":"integer"},"assignee_username":{"type":"string"},"hide_backlog_list":{"type":"boolean"},"hide_closed_list":{"type":"boolean"},"id":{"type":"integer"},"labels":{"items":{"type":"string"},"type":["null","array"]},"lists":{"items":{"additionalProperties":false,"properties":{"assignee_id":{"type":"integer"},"assignee_username":{"type":"string"},"id":{"type":"integer"},"label_id":{"type":"integer"},"label_name":{"type":"string"},"max_issue_count":{"type":"integer"},"max_issue_weight":{"type":"integer"},"milestone_id":{"type":"integer"},"milestone_title":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"position":{"type":"integer"}},"required":["id","position"],"type":"object"},"type":["null","array"]},"milestone_id":{"type":"integer"},"milestone_title":{"type":"string"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"project_id":{"type":"integer"},"project_name":{"type":"string"},"project_path":{"type":"string"},"weight":{"type":"integer"}},"required":["id","name","hide_backlog_list","hide_closed_list"],"type":"object"}
```

</details>

<details><summary>board_list</summary>

```json
{"additionalProperties":false,"properties":{"boards":{"items":{"additionalProperties":false,"properties":{"assignee_id":{"type":"integer"},"assignee_username":{"type":"string"},"hide_backlog_list":{"type":"boolean"},"hide_closed_list":{"type":"boolean"},"id":{"type":"integer"},"labels":{"items":{"type":"string"},"type":["null","array"]},"lists":{"items":{"additionalProperties":false,"properties":{"assignee_id":{"type":"integer"},"assignee_username":{"type":"string"},"id":{"type":"integer"},"label_id":{"type":"integer"},"label_name":{"type":"string"},"max_issue_count":{"type":"integer"},"max_issue_weight":{"type":"integer"},"milestone_id":{"type":"integer"},"milestone_title":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"position":{"type":"integer"}},"required":["id","position"],"type":"object"},"type":["null","array"]},"milestone_id":{"type":"integer"},"milestone_title":{"type":"string"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"project_id":{"type":"integer"},"project_name":{"type":"string"},"project_path":{"type":"string"},"weight":{"type":"integer"}},"required":["id","name","hide_backlog_list","hide_closed_list"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["boards","pagination"],"type":"object"}
```

</details>

<details><summary>board_list_create</summary>

```json
{"additionalProperties":false,"properties":{"assignee_id":{"type":"integer"},"assignee_username":{"type":"string"},"id":{"type":"integer"},"label_id":{"type":"integer"},"label_name":{"type":"string"},"max_issue_count":{"type":"integer"},"max_issue_weight":{"type":"integer"},"milestone_id":{"type":"integer"},"milestone_title":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"position":{"type":"integer"}},"required":["id","position"],"type":"object"}
```

</details>

<details><summary>board_list_delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>board_list_get</summary>

```json
{"additionalProperties":false,"properties":{"assignee_id":{"type":"integer"},"assignee_username":{"type":"string"},"id":{"type":"integer"},"label_id":{"type":"integer"},"label_name":{"type":"string"},"max_issue_count":{"type":"integer"},"max_issue_weight":{"type":"integer"},"milestone_id":{"type":"integer"},"milestone_title":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"position":{"type":"integer"}},"required":["id","position"],"type":"object"}
```

</details>

<details><summary>board_list_list</summary>

```json
{"additionalProperties":false,"properties":{"lists":{"items":{"additionalProperties":false,"properties":{"assignee_id":{"type":"integer"},"assignee_username":{"type":"string"},"id":{"type":"integer"},"label_id":{"type":"integer"},"label_name":{"type":"string"},"max_issue_count":{"type":"integer"},"max_issue_weight":{"type":"integer"},"milestone_id":{"type":"integer"},"milestone_title":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"position":{"type":"integer"}},"required":["id","position"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["lists","pagination"],"type":"object"}
```

</details>

<details><summary>board_list_update</summary>

```json
{"additionalProperties":false,"properties":{"assignee_id":{"type":"integer"},"assignee_username":{"type":"string"},"id":{"type":"integer"},"label_id":{"type":"integer"},"label_name":{"type":"string"},"max_issue_count":{"type":"integer"},"max_issue_weight":{"type":"integer"},"milestone_id":{"type":"integer"},"milestone_title":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"position":{"type":"integer"}},"required":["id","position"],"type":"object"}
```

</details>

<details><summary>board_update</summary>

```json
{"additionalProperties":false,"properties":{"assignee_id":{"type":"integer"},"assignee_username":{"type":"string"},"hide_backlog_list":{"type":"boolean"},"hide_closed_list":{"type":"boolean"},"id":{"type":"integer"},"labels":{"items":{"type":"string"},"type":["null","array"]},"lists":{"items":{"additionalProperties":false,"properties":{"assignee_id":{"type":"integer"},"assignee_username":{"type":"string"},"id":{"type":"integer"},"label_id":{"type":"integer"},"label_name":{"type":"string"},"max_issue_count":{"type":"integer"},"max_issue_weight":{"type":"integer"},"milestone_id":{"type":"integer"},"milestone_title":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"position":{"type":"integer"}},"required":["id","position"],"type":"object"},"type":["null","array"]},"milestone_id":{"type":"integer"},"milestone_title":{"type":"string"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"project_id":{"type":"integer"},"project_name":{"type":"string"},"project_path":{"type":"string"},"weight":{"type":"integer"}},"required":["id","name","hide_backlog_list","hide_closed_list"],"type":"object"}
```

</details>

<details><summary>create</summary>

```json
{"additionalProperties":false,"properties":{"allow_merge_on_skipped_pipeline":{"type":"boolean"},"approvals_before_merge":{"type":"integer"},"archived":{"type":"boolean"},"autoclose_referenced_issues":{"type":"boolean"},"avatar_url":{"type":"string"},"build_timeout":{"type":"integer"},"ci_config_path":{"type":"string"},"compliance_frameworks":{"items":{"type":"string"},"type":["null","array"]},"container_registry_enabled":{"type":"boolean"},"created_at":{"type":"string"},"creator_id":{"type":"integer"},"default_branch":{"type":"string"},"description":{"type":"string"},"empty_repo":{"type":"boolean"},"forked_from_project":{"type":"string"},"forks_count":{"type":"integer"},"http_url_to_repo":{"type":"string"},"id":{"type":"integer"},"import_url":{"type":"string"},"issues_enabled":{"type":"boolean"},"jobs_enabled":{"type":"boolean"},"last_activity_at":{"type":"string"},"lfs_enabled":{"type":"boolean"},"marked_for_deletion_on":{"type":"string"},"merge_commit_template":{"type":"string"},"merge_method":{"type":"string"},"merge_pipelines_enabled":{"type":"boolean"},"merge_request_title_regex":{"type":"string"},"merge_request_title_regex_description":{"type":"string"},"merge_requests_enabled":{"type":"boolean"},"merge_trains_enabled":{"type":"boolean"},"name":{"type":"string"},"name_with_namespace":{"type":"string"},"namespace":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"only_allow_merge_if_all_discussions_are_resolved":{"type":"boolean"},"only_allow_merge_if_pipeline_succeeds":{"type":"boolean"},"open_issues_count":{"type":"integer"},"package_registry_access_level":{"type":"string"},"packages_enabled":{"type":"boolean"},"path":{"type":"string"},"path_with_namespace":{"type":"string"},"protect_merge_request_pipelines":{"type":["null","boolean"]},"public_builds":{"type":"boolean"},"readme_url":{"type":"string"},"remove_source_branch_after_merge":{"type":"boolean"},"request_access_enabled":{"type":"boolean"},"resolve_outdated_diff_discussions":{"type":"boolean"},"shared_runners_enabled":{"type":"boolean"},"snippets_enabled":{"type":"boolean"},"squash_commit_template":{"type":"string"},"squash_option":{"type":"string"},"ssh_url_to_repo":{"type":"string"},"star_count":{"type":"integer"},"suggestion_commit_message":{"type":"string"},"topics":{"items":{"type":"string"},"type":["null","array"]},"updated_at":{"type":"string"},"visibility":{"type":"string"},"web_url":{"type":"string"},"wiki_enabled":{"type":"boolean"}},"required":["id","name","path","path_with_namespace","visibility","default_branch","web_url","description","archived","topics","only_allow_merge_if_pipeline_succeeds","only_allow_merge_if_all_discussions_are_resolved","remove_source_branch_after_merge","created_at","request_access_enabled","issues_enabled","merge_requests_enabled","wiki_enabled","jobs_enabled","lfs_enabled","allow_merge_on_skipped_pipeline","merge_pipelines_enabled","merge_trains_enabled","autoclose_referenced_issues","resolve_outdated_diff_discussions"],"type":"object"}
```

</details>

<details><summary>create_for_user</summary>

```json
{"additionalProperties":false,"properties":{"allow_merge_on_skipped_pipeline":{"type":"boolean"},"approvals_before_merge":{"type":"integer"},"archived":{"type":"boolean"},"autoclose_referenced_issues":{"type":"boolean"},"avatar_url":{"type":"string"},"build_timeout":{"type":"integer"},"ci_config_path":{"type":"string"},"compliance_frameworks":{"items":{"type":"string"},"type":["null","array"]},"container_registry_enabled":{"type":"boolean"},"created_at":{"type":"string"},"creator_id":{"type":"integer"},"default_branch":{"type":"string"},"description":{"type":"string"},"empty_repo":{"type":"boolean"},"forked_from_project":{"type":"string"},"forks_count":{"type":"integer"},"http_url_to_repo":{"type":"string"},"id":{"type":"integer"},"import_url":{"type":"string"},"issues_enabled":{"type":"boolean"},"jobs_enabled":{"type":"boolean"},"last_activity_at":{"type":"string"},"lfs_enabled":{"type":"boolean"},"marked_for_deletion_on":{"type":"string"},"merge_commit_template":{"type":"string"},"merge_method":{"type":"string"},"merge_pipelines_enabled":{"type":"boolean"},"merge_request_title_regex":{"type":"string"},"merge_request_title_regex_description":{"type":"string"},"merge_requests_enabled":{"type":"boolean"},"merge_trains_enabled":{"type":"boolean"},"name":{"type":"string"},"name_with_namespace":{"type":"string"},"namespace":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"only_allow_merge_if_all_discussions_are_resolved":{"type":"boolean"},"only_allow_merge_if_pipeline_succeeds":{"type":"boolean"},"open_issues_count":{"type":"integer"},"package_registry_access_level":{"type":"string"},"packages_enabled":{"type":"boolean"},"path":{"type":"string"},"path_with_namespace":{"type":"string"},"protect_merge_request_pipelines":{"type":["null","boolean"]},"public_builds":{"type":"boolean"},"readme_url":{"type":"string"},"remove_source_branch_after_merge":{"type":"boolean"},"request_access_enabled":{"type":"boolean"},"resolve_outdated_diff_discussions":{"type":"boolean"},"shared_runners_enabled":{"type":"boolean"},"snippets_enabled":{"type":"boolean"},"squash_commit_template":{"type":"string"},"squash_option":{"type":"string"},"ssh_url_to_repo":{"type":"string"},"star_count":{"type":"integer"},"suggestion_commit_message":{"type":"string"},"topics":{"items":{"type":"string"},"type":["null","array"]},"updated_at":{"type":"string"},"visibility":{"type":"string"},"web_url":{"type":"string"},"wiki_enabled":{"type":"boolean"}},"required":["id","name","path","path_with_namespace","visibility","default_branch","web_url","description","archived","topics","only_allow_merge_if_pipeline_succeeds","only_allow_merge_if_all_discussions_are_resolved","remove_source_branch_after_merge","created_at","request_access_enabled","issues_enabled","merge_requests_enabled","wiki_enabled","jobs_enabled","lfs_enabled","allow_merge_on_skipped_pipeline","merge_pipelines_enabled","merge_trains_enabled","autoclose_referenced_issues","resolve_outdated_diff_discussions"],"type":"object"}
```

</details>

<details><summary>create_fork_relation</summary>

```json
{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"forked_from_project_id":{"type":"integer"},"forked_to_project_id":{"type":"integer"},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"updated_at":{"type":"string"}},"required":["id","forked_to_project_id","forked_from_project_id"],"type":"object"}
```

</details>

<details><summary>delete</summary>

```json
{"additionalProperties":false,"properties":{"marked_for_deletion_on":{"type":"string"},"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"permanently_removed":{"type":"boolean"},"status":{"type":"string"}},"required":["status","message","permanently_removed"],"type":"object"}
```

</details>

<details><summary>delete_fork_relation</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>delete_shared_group</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>download_avatar</summary>

```json
{"additionalProperties":false,"properties":{"content_base64":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"size_bytes":{"type":"integer"}},"required":["content_base64","size_bytes"],"type":"object"}
```

</details>

<details><summary>export_download</summary>

```json
{"additionalProperties":false,"properties":{"content_base64":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"size_bytes":{"type":"integer"}},"required":["content_base64","size_bytes"],"type":"object"}
```

</details>

<details><summary>export_schedule</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["message"],"type":"object"}
```

</details>

<details><summary>export_status</summary>

```json
{"additionalProperties":false,"properties":{"api_url":{"type":"string"},"created_at":{"type":"string"},"description":{"type":"string"},"export_status":{"type":"string"},"id":{"type":"integer"},"message":{"type":"string"},"name":{"type":"string"},"name_with_namespace":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"path":{"type":"string"},"path_with_namespace":{"type":"string"},"web_url":{"type":"string"}},"required":["id","description","name","name_with_namespace","path","path_with_namespace","export_status"],"type":"object"}
```

</details>

<details><summary>fork</summary>

```json
{"additionalProperties":false,"properties":{"allow_merge_on_skipped_pipeline":{"type":"boolean"},"approvals_before_merge":{"type":"integer"},"archived":{"type":"boolean"},"autoclose_referenced_issues":{"type":"boolean"},"avatar_url":{"type":"string"},"build_timeout":{"type":"integer"},"ci_config_path":{"type":"string"},"compliance_frameworks":{"items":{"type":"string"},"type":["null","array"]},"container_registry_enabled":{"type":"boolean"},"created_at":{"type":"string"},"creator_id":{"type":"integer"},"default_branch":{"type":"string"},"description":{"type":"string"},"empty_repo":{"type":"boolean"},"forked_from_project":{"type":"string"},"forks_count":{"type":"integer"},"http_url_to_repo":{"type":"string"},"id":{"type":"integer"},"import_url":{"type":"string"},"issues_enabled":{"type":"boolean"},"jobs_enabled":{"type":"boolean"},"last_activity_at":{"type":"string"},"lfs_enabled":{"type":"boolean"},"marked_for_deletion_on":{"type":"string"},"merge_commit_template":{"type":"string"},"merge_method":{"type":"string"},"merge_pipelines_enabled":{"type":"boolean"},"merge_request_title_regex":{"type":"string"},"merge_request_title_regex_description":{"type":"string"},"merge_requests_enabled":{"type":"boolean"},"merge_trains_enabled":{"type":"boolean"},"name":{"type":"string"},"name_with_namespace":{"type":"string"},"namespace":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"only_allow_merge_if_all_discussions_are_resolved":{"type":"boolean"},"only_allow_merge_if_pipeline_succeeds":{"type":"boolean"},"open_issues_count":{"type":"integer"},"package_registry_access_level":{"type":"string"},"packages_enabled":{"type":"boolean"},"path":{"type":"string"},"path_with_namespace":{"type":"string"},"protect_merge_request_pipelines":{"type":["null","boolean"]},"public_builds":{"type":"boolean"},"readme_url":{"type":"string"},"remove_source_branch_after_merge":{"type":"boolean"},"request_access_enabled":{"type":"boolean"},"resolve_outdated_diff_discussions":{"type":"boolean"},"shared_runners_enabled":{"type":"boolean"},"snippets_enabled":{"type":"boolean"},"squash_commit_template":{"type":"string"},"squash_option":{"type":"string"},"ssh_url_to_repo":{"type":"string"},"star_count":{"type":"integer"},"suggestion_commit_message":{"type":"string"},"topics":{"items":{"type":"string"},"type":["null","array"]},"updated_at":{"type":"string"},"visibility":{"type":"string"},"web_url":{"type":"string"},"wiki_enabled":{"type":"boolean"}},"required":["id","name","path","path_with_namespace","visibility","default_branch","web_url","description","archived","topics","only_allow_merge_if_pipeline_succeeds","only_allow_merge_if_all_discussions_are_resolved","remove_source_branch_after_merge","created_at","request_access_enabled","issues_enabled","merge_requests_enabled","wiki_enabled","jobs_enabled","lfs_enabled","allow_merge_on_skipped_pipeline","merge_pipelines_enabled","merge_trains_enabled","autoclose_referenced_issues","resolve_outdated_diff_discussions"],"type":"object"}
```

</details>

<details><summary>get</summary>

```json
{"additionalProperties":false,"properties":{"allow_merge_on_skipped_pipeline":{"type":"boolean"},"approvals_before_merge":{"type":"integer"},"archived":{"type":"boolean"},"autoclose_referenced_issues":{"type":"boolean"},"avatar_url":{"type":"string"},"build_timeout":{"type":"integer"},"ci_config_path":{"type":"string"},"compliance_frameworks":{"items":{"type":"string"},"type":["null","array"]},"container_registry_enabled":{"type":"boolean"},"created_at":{"type":"string"},"creator_id":{"type":"integer"},"default_branch":{"type":"string"},"description":{"type":"string"},"empty_repo":{"type":"boolean"},"forked_from_project":{"type":"string"},"forks_count":{"type":"integer"},"http_url_to_repo":{"type":"string"},"id":{"type":"integer"},"import_url":{"type":"string"},"issues_enabled":{"type":"boolean"},"jobs_enabled":{"type":"boolean"},"last_activity_at":{"type":"string"},"lfs_enabled":{"type":"boolean"},"marked_for_deletion_on":{"type":"string"},"merge_commit_template":{"type":"string"},"merge_method":{"type":"string"},"merge_pipelines_enabled":{"type":"boolean"},"merge_request_title_regex":{"type":"string"},"merge_request_title_regex_description":{"type":"string"},"merge_requests_enabled":{"type":"boolean"},"merge_trains_enabled":{"type":"boolean"},"name":{"type":"string"},"name_with_namespace":{"type":"string"},"namespace":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"only_allow_merge_if_all_discussions_are_resolved":{"type":"boolean"},"only_allow_merge_if_pipeline_succeeds":{"type":"boolean"},"open_issues_count":{"type":"integer"},"package_registry_access_level":{"type":"string"},"packages_enabled":{"type":"boolean"},"path":{"type":"string"},"path_with_namespace":{"type":"string"},"protect_merge_request_pipelines":{"type":["null","boolean"]},"public_builds":{"type":"boolean"},"readme_url":{"type":"string"},"remove_source_branch_after_merge":{"type":"boolean"},"request_access_enabled":{"type":"boolean"},"resolve_outdated_diff_discussions":{"type":"boolean"},"shared_runners_enabled":{"type":"boolean"},"snippets_enabled":{"type":"boolean"},"squash_commit_template":{"type":"string"},"squash_option":{"type":"string"},"ssh_url_to_repo":{"type":"string"},"star_count":{"type":"integer"},"suggestion_commit_message":{"type":"string"},"topics":{"items":{"type":"string"},"type":["null","array"]},"updated_at":{"type":"string"},"visibility":{"type":"string"},"web_url":{"type":"string"},"wiki_enabled":{"type":"boolean"}},"required":["id","name","path","path_with_namespace","visibility","default_branch","web_url","description","archived","topics","only_allow_merge_if_pipeline_succeeds","only_allow_merge_if_all_discussions_are_resolved","remove_source_branch_after_merge","created_at","request_access_enabled","issues_enabled","merge_requests_enabled","wiki_enabled","jobs_enabled","lfs_enabled","allow_merge_on_skipped_pipeline","merge_pipelines_enabled","merge_trains_enabled","autoclose_referenced_issues","resolve_outdated_diff_discussions"],"type":"object"}
```

</details>

<details><summary>hook_add</summary>

```json
{"additionalProperties":false,"properties":{"alert_status":{"type":"string"},"branch_filter_strategy":{"type":"string"},"confidential_issues_events":{"type":"boolean"},"confidential_note_events":{"type":"boolean"},"created_at":{"type":"string"},"custom_headers":{"items":{"additionalProperties":false,"properties":{"key":{"type":"string"}},"required":["key"],"type":"object"},"type":["null","array"]},"custom_webhook_template":{"type":"string"},"deployment_events":{"type":"boolean"},"description":{"type":"string"},"disabled_until":{"type":"string"},"emoji_events":{"type":"boolean"},"enable_ssl_verification":{"type":"boolean"},"feature_flag_events":{"type":"boolean"},"id":{"type":"integer"},"issues_events":{"type":"boolean"},"job_events":{"type":"boolean"},"merge_requests_events":{"type":"boolean"},"milestone_events":{"type":"boolean"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"note_events":{"type":"boolean"},"pipeline_events":{"type":"boolean"},"project_id":{"type":"integer"},"push_events":{"type":"boolean"},"push_events_branch_filter":{"type":"string"},"releases_events":{"type":"boolean"},"repository_update_events":{"type":"boolean"},"resource_access_token_events":{"type":"boolean"},"resource_deploy_token_events":{"type":"boolean"},"signing_token_present":{"type":"boolean"},"tag_push_events":{"type":"boolean"},"token_present":{"type":"boolean"},"url":{"type":"string"},"url_variables":{"items":{"additionalProperties":false,"properties":{"key":{"type":"string"}},"required":["key"],"type":"object"},"type":["null","array"]},"vulnerability_events":{"type":"boolean"},"wiki_page_events":{"type":"boolean"}},"required":["id","url","project_id","push_events","issues_events","confidential_issues_events","merge_requests_events","tag_push_events","note_events","confidential_note_events","job_events","pipeline_events","wiki_page_events","deployment_events","releases_events","milestone_events","feature_flag_events","emoji_events","enable_ssl_verification","repository_update_events","resource_access_token_events","resource_deploy_token_events","vulnerability_events","token_present","signing_token_present","created_at"],"type":"object"}
```

</details>

<details><summary>hook_delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>hook_delete_custom_header</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>hook_delete_url_variable</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>hook_edit</summary>

```json
{"additionalProperties":false,"properties":{"alert_status":{"type":"string"},"branch_filter_strategy":{"type":"string"},"confidential_issues_events":{"type":"boolean"},"confidential_note_events":{"type":"boolean"},"created_at":{"type":"string"},"custom_headers":{"items":{"additionalProperties":false,"properties":{"key":{"type":"string"}},"required":["key"],"type":"object"},"type":["null","array"]},"custom_webhook_template":{"type":"string"},"deployment_events":{"type":"boolean"},"description":{"type":"string"},"disabled_until":{"type":"string"},"emoji_events":{"type":"boolean"},"enable_ssl_verification":{"type":"boolean"},"feature_flag_events":{"type":"boolean"},"id":{"type":"integer"},"issues_events":{"type":"boolean"},"job_events":{"type":"boolean"},"merge_requests_events":{"type":"boolean"},"milestone_events":{"type":"boolean"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"note_events":{"type":"boolean"},"pipeline_events":{"type":"boolean"},"project_id":{"type":"integer"},"push_events":{"type":"boolean"},"push_events_branch_filter":{"type":"string"},"releases_events":{"type":"boolean"},"repository_update_events":{"type":"boolean"},"resource_access_token_events":{"type":"boolean"},"resource_deploy_token_events":{"type":"boolean"},"signing_token_present":{"type":"boolean"},"tag_push_events":{"type":"boolean"},"token_present":{"type":"boolean"},"url":{"type":"string"},"url_variables":{"items":{"additionalProperties":false,"properties":{"key":{"type":"string"}},"required":["key"],"type":"object"},"type":["null","array"]},"vulnerability_events":{"type":"boolean"},"wiki_page_events":{"type":"boolean"}},"required":["id","url","project_id","push_events","issues_events","confidential_issues_events","merge_requests_events","tag_push_events","note_events","confidential_note_events","job_events","pipeline_events","wiki_page_events","deployment_events","releases_events","milestone_events","feature_flag_events","emoji_events","enable_ssl_verification","repository_update_events","resource_access_token_events","resource_deploy_token_events","vulnerability_events","token_present","signing_token_present","created_at"],"type":"object"}
```

</details>

<details><summary>hook_get</summary>

```json
{"additionalProperties":false,"properties":{"alert_status":{"type":"string"},"branch_filter_strategy":{"type":"string"},"confidential_issues_events":{"type":"boolean"},"confidential_note_events":{"type":"boolean"},"created_at":{"type":"string"},"custom_headers":{"items":{"additionalProperties":false,"properties":{"key":{"type":"string"}},"required":["key"],"type":"object"},"type":["null","array"]},"custom_webhook_template":{"type":"string"},"deployment_events":{"type":"boolean"},"description":{"type":"string"},"disabled_until":{"type":"string"},"emoji_events":{"type":"boolean"},"enable_ssl_verification":{"type":"boolean"},"feature_flag_events":{"type":"boolean"},"id":{"type":"integer"},"issues_events":{"type":"boolean"},"job_events":{"type":"boolean"},"merge_requests_events":{"type":"boolean"},"milestone_events":{"type":"boolean"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"note_events":{"type":"boolean"},"pipeline_events":{"type":"boolean"},"project_id":{"type":"integer"},"push_events":{"type":"boolean"},"push_events_branch_filter":{"type":"string"},"releases_events":{"type":"boolean"},"repository_update_events":{"type":"boolean"},"resource_access_token_events":{"type":"boolean"},"resource_deploy_token_events":{"type":"boolean"},"signing_token_present":{"type":"boolean"},"tag_push_events":{"type":"boolean"},"token_present":{"type":"boolean"},"url":{"type":"string"},"url_variables":{"items":{"additionalProperties":false,"properties":{"key":{"type":"string"}},"required":["key"],"type":"object"},"type":["null","array"]},"vulnerability_events":{"type":"boolean"},"wiki_page_events":{"type":"boolean"}},"required":["id","url","project_id","push_events","issues_events","confidential_issues_events","merge_requests_events","tag_push_events","note_events","confidential_note_events","job_events","pipeline_events","wiki_page_events","deployment_events","releases_events","milestone_events","feature_flag_events","emoji_events","enable_ssl_verification","repository_update_events","resource_access_token_events","resource_deploy_token_events","vulnerability_events","token_present","signing_token_present","created_at"],"type":"object"}
```

</details>

<details><summary>hook_list</summary>

```json
{"additionalProperties":false,"properties":{"hooks":{"items":{"additionalProperties":false,"properties":{"alert_status":{"type":"string"},"branch_filter_strategy":{"type":"string"},"confidential_issues_events":{"type":"boolean"},"confidential_note_events":{"type":"boolean"},"created_at":{"type":"string"},"custom_headers":{"items":{"additionalProperties":false,"properties":{"key":{"type":"string"}},"required":["key"],"type":"object"},"type":["null","array"]},"custom_webhook_template":{"type":"string"},"deployment_events":{"type":"boolean"},"description":{"type":"string"},"disabled_until":{"type":"string"},"emoji_events":{"type":"boolean"},"enable_ssl_verification":{"type":"boolean"},"feature_flag_events":{"type":"boolean"},"id":{"type":"integer"},"issues_events":{"type":"boolean"},"job_events":{"type":"boolean"},"merge_requests_events":{"type":"boolean"},"milestone_events":{"type":"boolean"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"note_events":{"type":"boolean"},"pipeline_events":{"type":"boolean"},"project_id":{"type":"integer"},"push_events":{"type":"boolean"},"push_events_branch_filter":{"type":"string"},"releases_events":{"type":"boolean"},"repository_update_events":{"type":"boolean"},"resource_access_token_events":{"type":"boolean"},"resource_deploy_token_events":{"type":"boolean"},"signing_token_present":{"type":"boolean"},"tag_push_events":{"type":"boolean"},"token_present":{"type":"boolean"},"url":{"type":"string"},"url_variables":{"items":{"additionalProperties":false,"properties":{"key":{"type":"string"}},"required":["key"],"type":"object"},"type":["null","array"]},"vulnerability_events":{"type":"boolean"},"wiki_page_events":{"type":"boolean"}},"required":["id","url","project_id","push_events","issues_events","confidential_issues_events","merge_requests_events","tag_push_events","note_events","confidential_note_events","job_events","pipeline_events","wiki_page_events","deployment_events","releases_events","milestone_events","feature_flag_events","emoji_events","enable_ssl_verification","repository_update_events","resource_access_token_events","resource_deploy_token_events","vulnerability_events","token_present","signing_token_present","created_at"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["hooks","pagination"],"type":"object"}
```

</details>

<details><summary>hook_set_custom_header</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>hook_set_url_variable</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>hook_test</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["message"],"type":"object"}
```

</details>

<details><summary>import_from_file</summary>

```json
{"additionalProperties":false,"properties":{"correlation_id":{"type":"string"},"created_at":{"type":"string"},"description":{"type":"string"},"id":{"type":"integer"},"import_error":{"type":"string"},"import_status":{"type":"string"},"import_type":{"type":"string"},"name":{"type":"string"},"name_with_namespace":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"path":{"type":"string"},"path_with_namespace":{"type":"string"}},"required":["id","description","name","name_with_namespace","path","path_with_namespace","import_status"],"type":"object"}
```

</details>

<details><summary>import_status</summary>

```json
{"additionalProperties":false,"properties":{"correlation_id":{"type":"string"},"created_at":{"type":"string"},"description":{"type":"string"},"id":{"type":"integer"},"import_error":{"type":"string"},"import_status":{"type":"string"},"import_type":{"type":"string"},"name":{"type":"string"},"name_with_namespace":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"path":{"type":"string"},"path_with_namespace":{"type":"string"}},"required":["id","description","name","name_with_namespace","path","path_with_namespace","import_status"],"type":"object"}
```

</details>

<details><summary>integration_delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>integration_get</summary>

```json
{"additionalProperties":false,"properties":{"integration":{"additionalProperties":false,"properties":{"active":{"type":"boolean"},"created_at":{"type":"string"},"id":{"type":"integer"},"slug":{"type":"string"},"title":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","title","slug","active"],"type":"object"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["integration"],"type":"object"}
```

</details>

<details><summary>integration_list</summary>

```json
{"additionalProperties":false,"properties":{"integrations":{"items":{"additionalProperties":false,"properties":{"active":{"type":"boolean"},"created_at":{"type":"string"},"id":{"type":"integer"},"slug":{"type":"string"},"title":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","title","slug","active"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["integrations"],"type":"object"}
```

</details>

<details><summary>integration_set_jira</summary>

```json
{"additionalProperties":false,"properties":{"integration":{"additionalProperties":false,"properties":{"active":{"type":"boolean"},"created_at":{"type":"string"},"id":{"type":"integer"},"slug":{"type":"string"},"title":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","title","slug","active"],"type":"object"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["integration"],"type":"object"}
```

</details>

<details><summary>label_create</summary>

```json
{"additionalProperties":false,"properties":{"closed_issues_count":{"type":"integer"},"color":{"type":"string"},"description":{"type":"string"},"id":{"type":"integer"},"is_project_label":{"type":"boolean"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"open_issues_count":{"type":"integer"},"open_merge_requests_count":{"type":"integer"},"priority":{"type":"integer"},"subscribed":{"type":"boolean"},"text_color":{"type":"string"}},"required":["id","name","color","text_color","description","open_issues_count","closed_issues_count","open_merge_requests_count","priority","is_project_label","subscribed"],"type":"object"}
```

</details>

<details><summary>label_delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>label_get</summary>

```json
{"additionalProperties":false,"properties":{"closed_issues_count":{"type":"integer"},"color":{"type":"string"},"description":{"type":"string"},"id":{"type":"integer"},"is_project_label":{"type":"boolean"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"open_issues_count":{"type":"integer"},"open_merge_requests_count":{"type":"integer"},"priority":{"type":"integer"},"subscribed":{"type":"boolean"},"text_color":{"type":"string"}},"required":["id","name","color","text_color","description","open_issues_count","closed_issues_count","open_merge_requests_count","priority","is_project_label","subscribed"],"type":"object"}
```

</details>

<details><summary>label_list</summary>

```json
{"additionalProperties":false,"properties":{"labels":{"items":{"additionalProperties":false,"properties":{"closed_issues_count":{"type":"integer"},"color":{"type":"string"},"description":{"type":"string"},"id":{"type":"integer"},"is_project_label":{"type":"boolean"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"open_issues_count":{"type":"integer"},"open_merge_requests_count":{"type":"integer"},"priority":{"type":"integer"},"subscribed":{"type":"boolean"},"text_color":{"type":"string"}},"required":["id","name","color","text_color","description","open_issues_count","closed_issues_count","open_merge_requests_count","priority","is_project_label","subscribed"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["labels","pagination"],"type":"object"}
```

</details>

<details><summary>label_promote</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>label_subscribe</summary>

```json
{"additionalProperties":false,"properties":{"closed_issues_count":{"type":"integer"},"color":{"type":"string"},"description":{"type":"string"},"id":{"type":"integer"},"is_project_label":{"type":"boolean"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"open_issues_count":{"type":"integer"},"open_merge_requests_count":{"type":"integer"},"priority":{"type":"integer"},"subscribed":{"type":"boolean"},"text_color":{"type":"string"}},"required":["id","name","color","text_color","description","open_issues_count","closed_issues_count","open_merge_requests_count","priority","is_project_label","subscribed"],"type":"object"}
```

</details>

<details><summary>label_unsubscribe</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>label_update</summary>

```json
{"additionalProperties":false,"properties":{"closed_issues_count":{"type":"integer"},"color":{"type":"string"},"description":{"type":"string"},"id":{"type":"integer"},"is_project_label":{"type":"boolean"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"open_issues_count":{"type":"integer"},"open_merge_requests_count":{"type":"integer"},"priority":{"type":"integer"},"subscribed":{"type":"boolean"},"text_color":{"type":"string"}},"required":["id","name","color","text_color","description","open_issues_count","closed_issues_count","open_merge_requests_count","priority","is_project_label","subscribed"],"type":"object"}
```

</details>

<details><summary>languages</summary>

```json
{"additionalProperties":false,"properties":{"languages":{"items":{"additionalProperties":false,"properties":{"name":{"type":"string"},"percentage":{"type":"number"}},"required":["name","percentage"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["languages"],"type":"object"}
```

</details>

<details><summary>list</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"},"projects":{"items":{"additionalProperties":false,"properties":{"allow_merge_on_skipped_pipeline":{"type":"boolean"},"approvals_before_merge":{"type":"integer"},"archived":{"type":"boolean"},"autoclose_referenced_issues":{"type":"boolean"},"avatar_url":{"type":"string"},"build_timeout":{"type":"integer"},"ci_config_path":{"type":"string"},"compliance_frameworks":{"items":{"type":"string"},"type":["null","array"]},"container_registry_enabled":{"type":"boolean"},"created_at":{"type":"string"},"creator_id":{"type":"integer"},"default_branch":{"type":"string"},"description":{"type":"string"},"empty_repo":{"type":"boolean"},"forked_from_project":{"type":"string"},"forks_count":{"type":"integer"},"http_url_to_repo":{"type":"string"},"id":{"type":"integer"},"import_url":{"type":"string"},"issues_enabled":{"type":"boolean"},"jobs_enabled":{"type":"boolean"},"last_activity_at":{"type":"string"},"lfs_enabled":{"type":"boolean"},"marked_for_deletion_on":{"type":"string"},"merge_commit_template":{"type":"string"},"merge_method":{"type":"string"},"merge_pipelines_enabled":{"type":"boolean"},"merge_request_title_regex":{"type":"string"},"merge_request_title_regex_description":{"type":"string"},"merge_requests_enabled":{"type":"boolean"},"merge_trains_enabled":{"type":"boolean"},"name":{"type":"string"},"name_with_namespace":{"type":"string"},"namespace":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"only_allow_merge_if_all_discussions_are_resolved":{"type":"boolean"},"only_allow_merge_if_pipeline_succeeds":{"type":"boolean"},"open_issues_count":{"type":"integer"},"package_registry_access_level":{"type":"string"},"packages_enabled":{"type":"boolean"},"path":{"type":"string"},"path_with_namespace":{"type":"string"},"protect_merge_request_pipelines":{"type":["null","boolean"]},"public_builds":{"type":"boolean"},"readme_url":{"type":"string"},"remove_source_branch_after_merge":{"type":"boolean"},"request_access_enabled":{"type":"boolean"},"resolve_outdated_diff_discussions":{"type":"boolean"},"shared_runners_enabled":{"type":"boolean"},"snippets_enabled":{"type":"boolean"},"squash_commit_template":{"type":"string"},"squash_option":{"type":"string"},"ssh_url_to_repo":{"type":"string"},"star_count":{"type":"integer"},"suggestion_commit_message":{"type":"string"},"topics":{"items":{"type":"string"},"type":["null","array"]},"updated_at":{"type":"string"},"visibility":{"type":"string"},"web_url":{"type":"string"},"wiki_enabled":{"type":"boolean"}},"required":["id","name","path","path_with_namespace","visibility","default_branch","web_url","description","archived","topics","only_allow_merge_if_pipeline_succeeds","only_allow_merge_if_all_discussions_are_resolved","remove_source_branch_after_merge","created_at","request_access_enabled","issues_enabled","merge_requests_enabled","wiki_enabled","jobs_enabled","lfs_enabled","allow_merge_on_skipped_pipeline","merge_pipelines_enabled","merge_trains_enabled","autoclose_referenced_issues","resolve_outdated_diff_discussions"],"type":"object"},"type":["null","array"]}},"required":["projects","pagination"],"type":"object"}
```

</details>

<details><summary>list_forks</summary>

```json
{"additionalProperties":false,"properties":{"forks":{"items":{"additionalProperties":false,"properties":{"allow_merge_on_skipped_pipeline":{"type":"boolean"},"approvals_before_merge":{"type":"integer"},"archived":{"type":"boolean"},"autoclose_referenced_issues":{"type":"boolean"},"avatar_url":{"type":"string"},"build_timeout":{"type":"integer"},"ci_config_path":{"type":"string"},"compliance_frameworks":{"items":{"type":"string"},"type":["null","array"]},"container_registry_enabled":{"type":"boolean"},"created_at":{"type":"string"},"creator_id":{"type":"integer"},"default_branch":{"type":"string"},"description":{"type":"string"},"empty_repo":{"type":"boolean"},"forked_from_project":{"type":"string"},"forks_count":{"type":"integer"},"http_url_to_repo":{"type":"string"},"id":{"type":"integer"},"import_url":{"type":"string"},"issues_enabled":{"type":"boolean"},"jobs_enabled":{"type":"boolean"},"last_activity_at":{"type":"string"},"lfs_enabled":{"type":"boolean"},"marked_for_deletion_on":{"type":"string"},"merge_commit_template":{"type":"string"},"merge_method":{"type":"string"},"merge_pipelines_enabled":{"type":"boolean"},"merge_request_title_regex":{"type":"string"},"merge_request_title_regex_description":{"type":"string"},"merge_requests_enabled":{"type":"boolean"},"merge_trains_enabled":{"type":"boolean"},"name":{"type":"string"},"name_with_namespace":{"type":"string"},"namespace":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"only_allow_merge_if_all_discussions_are_resolved":{"type":"boolean"},"only_allow_merge_if_pipeline_succeeds":{"type":"boolean"},"open_issues_count":{"type":"integer"},"package_registry_access_level":{"type":"string"},"packages_enabled":{"type":"boolean"},"path":{"type":"string"},"path_with_namespace":{"type":"string"},"protect_merge_request_pipelines":{"type":["null","boolean"]},"public_builds":{"type":"boolean"},"readme_url":{"type":"string"},"remove_source_branch_after_merge":{"type":"boolean"},"request_access_enabled":{"type":"boolean"},"resolve_outdated_diff_discussions":{"type":"boolean"},"shared_runners_enabled":{"type":"boolean"},"snippets_enabled":{"type":"boolean"},"squash_commit_template":{"type":"string"},"squash_option":{"type":"string"},"ssh_url_to_repo":{"type":"string"},"star_count":{"type":"integer"},"suggestion_commit_message":{"type":"string"},"topics":{"items":{"type":"string"},"type":["null","array"]},"updated_at":{"type":"string"},"visibility":{"type":"string"},"web_url":{"type":"string"},"wiki_enabled":{"type":"boolean"}},"required":["id","name","path","path_with_namespace","visibility","default_branch","web_url","description","archived","topics","only_allow_merge_if_pipeline_succeeds","only_allow_merge_if_all_discussions_are_resolved","remove_source_branch_after_merge","created_at","request_access_enabled","issues_enabled","merge_requests_enabled","wiki_enabled","jobs_enabled","lfs_enabled","allow_merge_on_skipped_pipeline","merge_pipelines_enabled","merge_trains_enabled","autoclose_referenced_issues","resolve_outdated_diff_discussions"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["forks","pagination"],"type":"object"}
```

</details>

<details><summary>list_groups</summary>

```json
{"additionalProperties":false,"properties":{"groups":{"items":{"additionalProperties":false,"properties":{"avatar_url":{"type":"string"},"full_name":{"type":"string"},"full_path":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"web_url":{"type":"string"}},"required":["id","name","full_name","full_path"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["groups","pagination"],"type":"object"}
```

</details>

<details><summary>list_invited_groups</summary>

```json
{"additionalProperties":false,"properties":{"groups":{"items":{"additionalProperties":false,"properties":{"avatar_url":{"type":"string"},"full_name":{"type":"string"},"full_path":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"web_url":{"type":"string"}},"required":["id","name","full_name","full_path"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["groups","pagination"],"type":"object"}
```

</details>

<details><summary>list_starrers</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"},"starrers":{"items":{"additionalProperties":false,"properties":{"starred_since":{"type":"string"},"user":{"additionalProperties":false,"properties":{"avatar_url":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"state":{"type":"string"},"username":{"type":"string"},"web_url":{"type":"string"}},"required":["id","name","username","state"],"type":"object"}},"required":["starred_since","user"],"type":"object"},"type":["null","array"]}},"required":["starrers","pagination"],"type":"object"}
```

</details>

<details><summary>list_user_contributed</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"},"projects":{"items":{"additionalProperties":false,"properties":{"allow_merge_on_skipped_pipeline":{"type":"boolean"},"approvals_before_merge":{"type":"integer"},"archived":{"type":"boolean"},"autoclose_referenced_issues":{"type":"boolean"},"avatar_url":{"type":"string"},"build_timeout":{"type":"integer"},"ci_config_path":{"type":"string"},"compliance_frameworks":{"items":{"type":"string"},"type":["null","array"]},"container_registry_enabled":{"type":"boolean"},"created_at":{"type":"string"},"creator_id":{"type":"integer"},"default_branch":{"type":"string"},"description":{"type":"string"},"empty_repo":{"type":"boolean"},"forked_from_project":{"type":"string"},"forks_count":{"type":"integer"},"http_url_to_repo":{"type":"string"},"id":{"type":"integer"},"import_url":{"type":"string"},"issues_enabled":{"type":"boolean"},"jobs_enabled":{"type":"boolean"},"last_activity_at":{"type":"string"},"lfs_enabled":{"type":"boolean"},"marked_for_deletion_on":{"type":"string"},"merge_commit_template":{"type":"string"},"merge_method":{"type":"string"},"merge_pipelines_enabled":{"type":"boolean"},"merge_request_title_regex":{"type":"string"},"merge_request_title_regex_description":{"type":"string"},"merge_requests_enabled":{"type":"boolean"},"merge_trains_enabled":{"type":"boolean"},"name":{"type":"string"},"name_with_namespace":{"type":"string"},"namespace":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"only_allow_merge_if_all_discussions_are_resolved":{"type":"boolean"},"only_allow_merge_if_pipeline_succeeds":{"type":"boolean"},"open_issues_count":{"type":"integer"},"package_registry_access_level":{"type":"string"},"packages_enabled":{"type":"boolean"},"path":{"type":"string"},"path_with_namespace":{"type":"string"},"protect_merge_request_pipelines":{"type":["null","boolean"]},"public_builds":{"type":"boolean"},"readme_url":{"type":"string"},"remove_source_branch_after_merge":{"type":"boolean"},"request_access_enabled":{"type":"boolean"},"resolve_outdated_diff_discussions":{"type":"boolean"},"shared_runners_enabled":{"type":"boolean"},"snippets_enabled":{"type":"boolean"},"squash_commit_template":{"type":"string"},"squash_option":{"type":"string"},"ssh_url_to_repo":{"type":"string"},"star_count":{"type":"integer"},"suggestion_commit_message":{"type":"string"},"topics":{"items":{"type":"string"},"type":["null","array"]},"updated_at":{"type":"string"},"visibility":{"type":"string"},"web_url":{"type":"string"},"wiki_enabled":{"type":"boolean"}},"required":["id","name","path","path_with_namespace","visibility","default_branch","web_url","description","archived","topics","only_allow_merge_if_pipeline_succeeds","only_allow_merge_if_all_discussions_are_resolved","remove_source_branch_after_merge","created_at","request_access_enabled","issues_enabled","merge_requests_enabled","wiki_enabled","jobs_enabled","lfs_enabled","allow_merge_on_skipped_pipeline","merge_pipelines_enabled","merge_trains_enabled","autoclose_referenced_issues","resolve_outdated_diff_discussions"],"type":"object"},"type":["null","array"]}},"required":["projects","pagination"],"type":"object"}
```

</details>

<details><summary>list_user_projects</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"},"projects":{"items":{"additionalProperties":false,"properties":{"allow_merge_on_skipped_pipeline":{"type":"boolean"},"approvals_before_merge":{"type":"integer"},"archived":{"type":"boolean"},"autoclose_referenced_issues":{"type":"boolean"},"avatar_url":{"type":"string"},"build_timeout":{"type":"integer"},"ci_config_path":{"type":"string"},"compliance_frameworks":{"items":{"type":"string"},"type":["null","array"]},"container_registry_enabled":{"type":"boolean"},"created_at":{"type":"string"},"creator_id":{"type":"integer"},"default_branch":{"type":"string"},"description":{"type":"string"},"empty_repo":{"type":"boolean"},"forked_from_project":{"type":"string"},"forks_count":{"type":"integer"},"http_url_to_repo":{"type":"string"},"id":{"type":"integer"},"import_url":{"type":"string"},"issues_enabled":{"type":"boolean"},"jobs_enabled":{"type":"boolean"},"last_activity_at":{"type":"string"},"lfs_enabled":{"type":"boolean"},"marked_for_deletion_on":{"type":"string"},"merge_commit_template":{"type":"string"},"merge_method":{"type":"string"},"merge_pipelines_enabled":{"type":"boolean"},"merge_request_title_regex":{"type":"string"},"merge_request_title_regex_description":{"type":"string"},"merge_requests_enabled":{"type":"boolean"},"merge_trains_enabled":{"type":"boolean"},"name":{"type":"string"},"name_with_namespace":{"type":"string"},"namespace":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"only_allow_merge_if_all_discussions_are_resolved":{"type":"boolean"},"only_allow_merge_if_pipeline_succeeds":{"type":"boolean"},"open_issues_count":{"type":"integer"},"package_registry_access_level":{"type":"string"},"packages_enabled":{"type":"boolean"},"path":{"type":"string"},"path_with_namespace":{"type":"string"},"protect_merge_request_pipelines":{"type":["null","boolean"]},"public_builds":{"type":"boolean"},"readme_url":{"type":"string"},"remove_source_branch_after_merge":{"type":"boolean"},"request_access_enabled":{"type":"boolean"},"resolve_outdated_diff_discussions":{"type":"boolean"},"shared_runners_enabled":{"type":"boolean"},"snippets_enabled":{"type":"boolean"},"squash_commit_template":{"type":"string"},"squash_option":{"type":"string"},"ssh_url_to_repo":{"type":"string"},"star_count":{"type":"integer"},"suggestion_commit_message":{"type":"string"},"topics":{"items":{"type":"string"},"type":["null","array"]},"updated_at":{"type":"string"},"visibility":{"type":"string"},"web_url":{"type":"string"},"wiki_enabled":{"type":"boolean"}},"required":["id","name","path","path_with_namespace","visibility","default_branch","web_url","description","archived","topics","only_allow_merge_if_pipeline_succeeds","only_allow_merge_if_all_discussions_are_resolved","remove_source_branch_after_merge","created_at","request_access_enabled","issues_enabled","merge_requests_enabled","wiki_enabled","jobs_enabled","lfs_enabled","allow_merge_on_skipped_pipeline","merge_pipelines_enabled","merge_trains_enabled","autoclose_referenced_issues","resolve_outdated_diff_discussions"],"type":"object"},"type":["null","array"]}},"required":["projects","pagination"],"type":"object"}
```

</details>

<details><summary>list_user_starred</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"},"projects":{"items":{"additionalProperties":false,"properties":{"allow_merge_on_skipped_pipeline":{"type":"boolean"},"approvals_before_merge":{"type":"integer"},"archived":{"type":"boolean"},"autoclose_referenced_issues":{"type":"boolean"},"avatar_url":{"type":"string"},"build_timeout":{"type":"integer"},"ci_config_path":{"type":"string"},"compliance_frameworks":{"items":{"type":"string"},"type":["null","array"]},"container_registry_enabled":{"type":"boolean"},"created_at":{"type":"string"},"creator_id":{"type":"integer"},"default_branch":{"type":"string"},"description":{"type":"string"},"empty_repo":{"type":"boolean"},"forked_from_project":{"type":"string"},"forks_count":{"type":"integer"},"http_url_to_repo":{"type":"string"},"id":{"type":"integer"},"import_url":{"type":"string"},"issues_enabled":{"type":"boolean"},"jobs_enabled":{"type":"boolean"},"last_activity_at":{"type":"string"},"lfs_enabled":{"type":"boolean"},"marked_for_deletion_on":{"type":"string"},"merge_commit_template":{"type":"string"},"merge_method":{"type":"string"},"merge_pipelines_enabled":{"type":"boolean"},"merge_request_title_regex":{"type":"string"},"merge_request_title_regex_description":{"type":"string"},"merge_requests_enabled":{"type":"boolean"},"merge_trains_enabled":{"type":"boolean"},"name":{"type":"string"},"name_with_namespace":{"type":"string"},"namespace":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"only_allow_merge_if_all_discussions_are_resolved":{"type":"boolean"},"only_allow_merge_if_pipeline_succeeds":{"type":"boolean"},"open_issues_count":{"type":"integer"},"package_registry_access_level":{"type":"string"},"packages_enabled":{"type":"boolean"},"path":{"type":"string"},"path_with_namespace":{"type":"string"},"protect_merge_request_pipelines":{"type":["null","boolean"]},"public_builds":{"type":"boolean"},"readme_url":{"type":"string"},"remove_source_branch_after_merge":{"type":"boolean"},"request_access_enabled":{"type":"boolean"},"resolve_outdated_diff_discussions":{"type":"boolean"},"shared_runners_enabled":{"type":"boolean"},"snippets_enabled":{"type":"boolean"},"squash_commit_template":{"type":"string"},"squash_option":{"type":"string"},"ssh_url_to_repo":{"type":"string"},"star_count":{"type":"integer"},"suggestion_commit_message":{"type":"string"},"topics":{"items":{"type":"string"},"type":["null","array"]},"updated_at":{"type":"string"},"visibility":{"type":"string"},"web_url":{"type":"string"},"wiki_enabled":{"type":"boolean"}},"required":["id","name","path","path_with_namespace","visibility","default_branch","web_url","description","archived","topics","only_allow_merge_if_pipeline_succeeds","only_allow_merge_if_all_discussions_are_resolved","remove_source_branch_after_merge","created_at","request_access_enabled","issues_enabled","merge_requests_enabled","wiki_enabled","jobs_enabled","lfs_enabled","allow_merge_on_skipped_pipeline","merge_pipelines_enabled","merge_trains_enabled","autoclose_referenced_issues","resolve_outdated_diff_discussions"],"type":"object"},"type":["null","array"]}},"required":["projects","pagination"],"type":"object"}
```

</details>

<details><summary>list_users</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"},"users":{"items":{"additionalProperties":false,"properties":{"avatar_url":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"state":{"type":"string"},"username":{"type":"string"},"web_url":{"type":"string"}},"required":["id","name","username","state"],"type":"object"},"type":["null","array"]}},"required":["users","pagination"],"type":"object"}
```

</details>

<details><summary>member_add</summary>

```json
{"additionalProperties":false,"properties":{"access_level":{"type":"integer"},"access_level_description":{"type":"string"},"avatar_url":{"type":"string"},"created_at":{"type":"string"},"email":{"type":"string"},"expires_at":{"type":"string"},"id":{"type":"integer"},"is_using_seat":{"type":"boolean"},"member_role_name":{"type":"string"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"state":{"type":"string"},"username":{"type":"string"},"web_url":{"type":"string"}},"required":["id","username","name","state","access_level","access_level_description","web_url"],"type":"object"}
```

</details>

<details><summary>member_delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>member_edit</summary>

```json
{"additionalProperties":false,"properties":{"access_level":{"type":"integer"},"access_level_description":{"type":"string"},"avatar_url":{"type":"string"},"created_at":{"type":"string"},"email":{"type":"string"},"expires_at":{"type":"string"},"id":{"type":"integer"},"is_using_seat":{"type":"boolean"},"member_role_name":{"type":"string"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"state":{"type":"string"},"username":{"type":"string"},"web_url":{"type":"string"}},"required":["id","username","name","state","access_level","access_level_description","web_url"],"type":"object"}
```

</details>

<details><summary>member_get</summary>

```json
{"additionalProperties":false,"properties":{"access_level":{"type":"integer"},"access_level_description":{"type":"string"},"avatar_url":{"type":"string"},"created_at":{"type":"string"},"email":{"type":"string"},"expires_at":{"type":"string"},"id":{"type":"integer"},"is_using_seat":{"type":"boolean"},"member_role_name":{"type":"string"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"state":{"type":"string"},"username":{"type":"string"},"web_url":{"type":"string"}},"required":["id","username","name","state","access_level","access_level_description","web_url"],"type":"object"}
```

</details>

<details><summary>member_inherited</summary>

```json
{"additionalProperties":false,"properties":{"access_level":{"type":"integer"},"access_level_description":{"type":"string"},"avatar_url":{"type":"string"},"created_at":{"type":"string"},"email":{"type":"string"},"expires_at":{"type":"string"},"id":{"type":"integer"},"is_using_seat":{"type":"boolean"},"member_role_name":{"type":"string"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"state":{"type":"string"},"username":{"type":"string"},"web_url":{"type":"string"}},"required":["id","username","name","state","access_level","access_level_description","web_url"],"type":"object"}
```

</details>

<details><summary>members</summary>

```json
{"additionalProperties":false,"properties":{"members":{"items":{"additionalProperties":false,"properties":{"access_level":{"type":"integer"},"access_level_description":{"type":"string"},"avatar_url":{"type":"string"},"created_at":{"type":"string"},"email":{"type":"string"},"expires_at":{"type":"string"},"id":{"type":"integer"},"is_using_seat":{"type":"boolean"},"member_role_name":{"type":"string"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"state":{"type":"string"},"username":{"type":"string"},"web_url":{"type":"string"}},"required":["id","username","name","state","access_level","access_level_description","web_url"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["members","pagination"],"type":"object"}
```

</details>

<details><summary>milestone_create</summary>

```json
{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"description":{"type":"string"},"due_date":{"type":"string"},"expired":{"type":"boolean"},"group_id":{"type":"integer"},"id":{"type":"integer"},"iid":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"project_id":{"type":"integer"},"start_date":{"type":"string"},"state":{"type":"string"},"title":{"type":"string"},"updated_at":{"type":"string"},"web_url":{"type":"string"}},"required":["id","iid","project_id","title","description","state","start_date","due_date","web_url","created_at","updated_at","expired"],"type":"object"}
```

</details>

<details><summary>milestone_delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>milestone_get</summary>

```json
{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"description":{"type":"string"},"due_date":{"type":"string"},"expired":{"type":"boolean"},"group_id":{"type":"integer"},"id":{"type":"integer"},"iid":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"project_id":{"type":"integer"},"start_date":{"type":"string"},"state":{"type":"string"},"title":{"type":"string"},"updated_at":{"type":"string"},"web_url":{"type":"string"}},"required":["id","iid","project_id","title","description","state","start_date","due_date","web_url","created_at","updated_at","expired"],"type":"object"}
```

</details>

<details><summary>milestone_issues</summary>

```json
{"additionalProperties":false,"properties":{"issues":{"items":{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"id":{"type":"integer"},"iid":{"type":"integer"},"state":{"type":"string"},"title":{"type":"string"},"web_url":{"type":"string"}},"required":["id","iid","title","state","web_url","created_at"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["issues","pagination"],"type":"object"}
```

</details>

<details><summary>milestone_list</summary>

```json
{"additionalProperties":false,"properties":{"milestones":{"items":{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"description":{"type":"string"},"due_date":{"type":"string"},"expired":{"type":"boolean"},"group_id":{"type":"integer"},"id":{"type":"integer"},"iid":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"project_id":{"type":"integer"},"start_date":{"type":"string"},"state":{"type":"string"},"title":{"type":"string"},"updated_at":{"type":"string"},"web_url":{"type":"string"}},"required":["id","iid","project_id","title","description","state","start_date","due_date","web_url","created_at","updated_at","expired"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["milestones","pagination"],"type":"object"}
```

</details>

<details><summary>milestone_merge_requests</summary>

```json
{"additionalProperties":false,"properties":{"merge_requests":{"items":{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"id":{"type":"integer"},"iid":{"type":"integer"},"source_branch":{"type":"string"},"state":{"type":"string"},"target_branch":{"type":"string"},"title":{"type":"string"},"web_url":{"type":"string"}},"required":["id","iid","title","state","source_branch","target_branch","web_url","created_at"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["merge_requests","pagination"],"type":"object"}
```

</details>

<details><summary>milestone_update</summary>

```json
{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"description":{"type":"string"},"due_date":{"type":"string"},"expired":{"type":"boolean"},"group_id":{"type":"integer"},"id":{"type":"integer"},"iid":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"project_id":{"type":"integer"},"start_date":{"type":"string"},"state":{"type":"string"},"title":{"type":"string"},"updated_at":{"type":"string"},"web_url":{"type":"string"}},"required":["id","iid","project_id","title","description","state","start_date","due_date","web_url","created_at","updated_at","expired"],"type":"object"}
```

</details>

<details><summary>mirror_add</summary>

```json
{"additionalProperties":false,"properties":{"auth_method":{"type":"string"},"enabled":{"type":"boolean"},"host_keys":{"items":{"additionalProperties":false,"properties":{"fingerprint_sha256":{"type":"string"}},"required":["fingerprint_sha256"],"type":"object"},"type":["null","array"]},"id":{"type":"integer"},"keep_divergent_refs":{"type":"boolean"},"last_error":{"type":"string"},"last_successful_update_at":{"type":"string"},"last_update_at":{"type":"string"},"last_update_started_at":{"type":"string"},"mirror_branch_regex":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"only_protected_branches":{"type":"boolean"},"update_status":{"type":"string"},"url":{"type":"string"}},"required":["id","enabled","url","update_status","only_protected_branches","keep_divergent_refs"],"type":"object"}
```

</details>

<details><summary>mirror_delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>mirror_edit</summary>

```json
{"additionalProperties":false,"properties":{"auth_method":{"type":"string"},"enabled":{"type":"boolean"},"host_keys":{"items":{"additionalProperties":false,"properties":{"fingerprint_sha256":{"type":"string"}},"required":["fingerprint_sha256"],"type":"object"},"type":["null","array"]},"id":{"type":"integer"},"keep_divergent_refs":{"type":"boolean"},"last_error":{"type":"string"},"last_successful_update_at":{"type":"string"},"last_update_at":{"type":"string"},"last_update_started_at":{"type":"string"},"mirror_branch_regex":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"only_protected_branches":{"type":"boolean"},"update_status":{"type":"string"},"url":{"type":"string"}},"required":["id","enabled","url","update_status","only_protected_branches","keep_divergent_refs"],"type":"object"}
```

</details>

<details><summary>mirror_force_push</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>mirror_get</summary>

```json
{"additionalProperties":false,"properties":{"auth_method":{"type":"string"},"enabled":{"type":"boolean"},"host_keys":{"items":{"additionalProperties":false,"properties":{"fingerprint_sha256":{"type":"string"}},"required":["fingerprint_sha256"],"type":"object"},"type":["null","array"]},"id":{"type":"integer"},"keep_divergent_refs":{"type":"boolean"},"last_error":{"type":"string"},"last_successful_update_at":{"type":"string"},"last_update_at":{"type":"string"},"last_update_started_at":{"type":"string"},"mirror_branch_regex":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"only_protected_branches":{"type":"boolean"},"update_status":{"type":"string"},"url":{"type":"string"}},"required":["id","enabled","url","update_status","only_protected_branches","keep_divergent_refs"],"type":"object"}
```

</details>

<details><summary>mirror_get_public_key</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"public_key":{"type":"string"}},"required":["public_key"],"type":"object"}
```

</details>

<details><summary>mirror_list</summary>

```json
{"additionalProperties":false,"properties":{"mirrors":{"items":{"additionalProperties":false,"properties":{"auth_method":{"type":"string"},"enabled":{"type":"boolean"},"host_keys":{"items":{"additionalProperties":false,"properties":{"fingerprint_sha256":{"type":"string"}},"required":["fingerprint_sha256"],"type":"object"},"type":["null","array"]},"id":{"type":"integer"},"keep_divergent_refs":{"type":"boolean"},"last_error":{"type":"string"},"last_successful_update_at":{"type":"string"},"last_update_at":{"type":"string"},"last_update_started_at":{"type":"string"},"mirror_branch_regex":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"only_protected_branches":{"type":"boolean"},"update_status":{"type":"string"},"url":{"type":"string"}},"required":["id","enabled","url","update_status","only_protected_branches","keep_divergent_refs"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["mirrors","pagination"],"type":"object"}
```

</details>

<details><summary>pages_domain_create</summary>

```json
{"additionalProperties":false,"properties":{"auto_ssl_enabled":{"type":"boolean"},"certificate":{"additionalProperties":false,"properties":{"certificate":{"type":"string"},"certificate_text":{"type":"string"},"expiration":{"type":"string"},"expired":{"type":"boolean"},"subject":{"type":"string"}},"required":["subject","expired"],"type":"object"},"domain":{"type":"string"},"enabled_until":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"project_id":{"type":"integer"},"project_path":{"type":"string"},"url":{"type":"string"},"verification_code":{"type":"string"},"verified":{"type":"boolean"}},"required":["domain","auto_ssl_enabled","url","project_id","verified","verification_code","certificate"],"type":"object"}
```

</details>

<details><summary>pages_domain_delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>pages_domain_get</summary>

```json
{"additionalProperties":false,"properties":{"auto_ssl_enabled":{"type":"boolean"},"certificate":{"additionalProperties":false,"properties":{"certificate":{"type":"string"},"certificate_text":{"type":"string"},"expiration":{"type":"string"},"expired":{"type":"boolean"},"subject":{"type":"string"}},"required":["subject","expired"],"type":"object"},"domain":{"type":"string"},"enabled_until":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"project_id":{"type":"integer"},"project_path":{"type":"string"},"url":{"type":"string"},"verification_code":{"type":"string"},"verified":{"type":"boolean"}},"required":["domain","auto_ssl_enabled","url","project_id","verified","verification_code","certificate"],"type":"object"}
```

</details>

<details><summary>pages_domain_list</summary>

```json
{"additionalProperties":false,"properties":{"domains":{"items":{"additionalProperties":false,"properties":{"auto_ssl_enabled":{"type":"boolean"},"certificate":{"additionalProperties":false,"properties":{"certificate":{"type":"string"},"certificate_text":{"type":"string"},"expiration":{"type":"string"},"expired":{"type":"boolean"},"subject":{"type":"string"}},"required":["subject","expired"],"type":"object"},"domain":{"type":"string"},"enabled_until":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"project_id":{"type":"integer"},"project_path":{"type":"string"},"url":{"type":"string"},"verification_code":{"type":"string"},"verified":{"type":"boolean"}},"required":["domain","auto_ssl_enabled","url","project_id","verified","verification_code","certificate"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["domains","pagination"],"type":"object"}
```

</details>

<details><summary>pages_domain_list_all</summary>

```json
{"additionalProperties":false,"properties":{"domains":{"items":{"additionalProperties":false,"properties":{"auto_ssl_enabled":{"type":"boolean"},"certificate":{"additionalProperties":false,"properties":{"certificate":{"type":"string"},"certificate_text":{"type":"string"},"expiration":{"type":"string"},"expired":{"type":"boolean"},"subject":{"type":"string"}},"required":["subject","expired"],"type":"object"},"domain":{"type":"string"},"enabled_until":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"project_id":{"type":"integer"},"project_path":{"type":"string"},"url":{"type":"string"},"verification_code":{"type":"string"},"verified":{"type":"boolean"}},"required":["domain","auto_ssl_enabled","url","project_id","verified","verification_code","certificate"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["domains"],"type":"object"}
```

</details>

<details><summary>pages_domain_update</summary>

```json
{"additionalProperties":false,"properties":{"auto_ssl_enabled":{"type":"boolean"},"certificate":{"additionalProperties":false,"properties":{"certificate":{"type":"string"},"certificate_text":{"type":"string"},"expiration":{"type":"string"},"expired":{"type":"boolean"},"subject":{"type":"string"}},"required":["subject","expired"],"type":"object"},"domain":{"type":"string"},"enabled_until":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"project_id":{"type":"integer"},"project_path":{"type":"string"},"url":{"type":"string"},"verification_code":{"type":"string"},"verified":{"type":"boolean"}},"required":["domain","auto_ssl_enabled","url","project_id","verified","verification_code","certificate"],"type":"object"}
```

</details>

<details><summary>pages_get</summary>

```json
{"additionalProperties":false,"properties":{"deployments":{"items":{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"path_prefix":{"type":"string"},"root_directory":{"type":"string"},"url":{"type":"string"}},"required":["created_at","url","path_prefix","root_directory"],"type":"object"},"type":["null","array"]},"force_https":{"type":"boolean"},"is_unique_domain_enabled":{"type":"boolean"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"primary_domain":{"type":"string"},"url":{"type":"string"}},"required":["url","is_unique_domain_enabled","force_https","primary_domain"],"type":"object"}
```

</details>

<details><summary>pages_unpublish</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>pages_update</summary>

```json
{"additionalProperties":false,"properties":{"deployments":{"items":{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"path_prefix":{"type":"string"},"root_directory":{"type":"string"},"url":{"type":"string"}},"required":["created_at","url","path_prefix","root_directory"],"type":"object"},"type":["null","array"]},"force_https":{"type":"boolean"},"is_unique_domain_enabled":{"type":"boolean"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"primary_domain":{"type":"string"},"url":{"type":"string"}},"required":["url","is_unique_domain_enabled","force_https","primary_domain"],"type":"object"}
```

</details>

<details><summary>pull_mirror_configure</summary>

```json
{"additionalProperties":false,"properties":{"enabled":{"type":"boolean"},"id":{"type":"integer"},"last_error":{"type":"string"},"last_successful_update_at":{"type":"string"},"last_update_at":{"type":"string"},"last_update_started_at":{"type":"string"},"mirror_branch_regex":{"type":"string"},"mirror_overwrites_diverged_branches":{"type":"boolean"},"mirror_trigger_builds":{"type":"boolean"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"only_mirror_protected_branches":{"type":"boolean"},"update_status":{"type":"string"},"url":{"type":"string"}},"required":["id","enabled","mirror_trigger_builds","only_mirror_protected_branches","mirror_overwrites_diverged_branches"],"type":"object"}
```

</details>

<details><summary>pull_mirror_get</summary>

```json
{"additionalProperties":false,"properties":{"enabled":{"type":"boolean"},"id":{"type":"integer"},"last_error":{"type":"string"},"last_successful_update_at":{"type":"string"},"last_update_at":{"type":"string"},"last_update_started_at":{"type":"string"},"mirror_branch_regex":{"type":"string"},"mirror_overwrites_diverged_branches":{"type":"boolean"},"mirror_trigger_builds":{"type":"boolean"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"only_mirror_protected_branches":{"type":"boolean"},"update_status":{"type":"string"},"url":{"type":"string"}},"required":["id","enabled","mirror_trigger_builds","only_mirror_protected_branches","mirror_overwrites_diverged_branches"],"type":"object"}
```

</details>

<details><summary>push_rule_add</summary>

```json
{"additionalProperties":false,"properties":{"author_email_regex":{"type":"string"},"branch_name_regex":{"type":"string"},"commit_committer_check":{"type":"boolean"},"commit_committer_name_check":{"type":"boolean"},"commit_message_negative_regex":{"type":"string"},"commit_message_regex":{"type":"string"},"created_at":{"type":"string"},"deny_delete_tag":{"type":"boolean"},"file_name_regex":{"type":"string"},"id":{"type":"integer"},"max_file_size":{"type":"integer"},"member_check":{"type":"boolean"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"prevent_secrets":{"type":"boolean"},"project_id":{"type":"integer"},"reject_non_dco_commits":{"type":"boolean"},"reject_unsigned_commits":{"type":"boolean"}},"required":["id","project_id","deny_delete_tag","member_check","prevent_secrets","max_file_size","commit_committer_check","commit_committer_name_check","reject_unsigned_commits","reject_non_dco_commits"],"type":"object"}
```

</details>

<details><summary>push_rule_delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>push_rule_edit</summary>

```json
{"additionalProperties":false,"properties":{"author_email_regex":{"type":"string"},"branch_name_regex":{"type":"string"},"commit_committer_check":{"type":"boolean"},"commit_committer_name_check":{"type":"boolean"},"commit_message_negative_regex":{"type":"string"},"commit_message_regex":{"type":"string"},"created_at":{"type":"string"},"deny_delete_tag":{"type":"boolean"},"file_name_regex":{"type":"string"},"id":{"type":"integer"},"max_file_size":{"type":"integer"},"member_check":{"type":"boolean"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"prevent_secrets":{"type":"boolean"},"project_id":{"type":"integer"},"reject_non_dco_commits":{"type":"boolean"},"reject_unsigned_commits":{"type":"boolean"}},"required":["id","project_id","deny_delete_tag","member_check","prevent_secrets","max_file_size","commit_committer_check","commit_committer_name_check","reject_unsigned_commits","reject_non_dco_commits"],"type":"object"}
```

</details>

<details><summary>push_rule_get</summary>

```json
{"additionalProperties":false,"properties":{"author_email_regex":{"type":"string"},"branch_name_regex":{"type":"string"},"commit_committer_check":{"type":"boolean"},"commit_committer_name_check":{"type":"boolean"},"commit_message_negative_regex":{"type":"string"},"commit_message_regex":{"type":"string"},"created_at":{"type":"string"},"deny_delete_tag":{"type":"boolean"},"file_name_regex":{"type":"string"},"id":{"type":"integer"},"max_file_size":{"type":"integer"},"member_check":{"type":"boolean"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"prevent_secrets":{"type":"boolean"},"project_id":{"type":"integer"},"reject_non_dco_commits":{"type":"boolean"},"reject_unsigned_commits":{"type":"boolean"}},"required":["id","project_id","deny_delete_tag","member_check","prevent_secrets","max_file_size","commit_committer_check","commit_committer_name_check","reject_unsigned_commits","reject_non_dco_commits"],"type":"object"}
```

</details>

<details><summary>repository_storage_get</summary>

```json
{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"disk_path":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"project_id":{"type":"integer"},"repository_storage":{"type":"string"}},"required":["project_id","disk_path","repository_storage"],"type":"object"}
```

</details>

<details><summary>restore</summary>

```json
{"additionalProperties":false,"properties":{"allow_merge_on_skipped_pipeline":{"type":"boolean"},"approvals_before_merge":{"type":"integer"},"archived":{"type":"boolean"},"autoclose_referenced_issues":{"type":"boolean"},"avatar_url":{"type":"string"},"build_timeout":{"type":"integer"},"ci_config_path":{"type":"string"},"compliance_frameworks":{"items":{"type":"string"},"type":["null","array"]},"container_registry_enabled":{"type":"boolean"},"created_at":{"type":"string"},"creator_id":{"type":"integer"},"default_branch":{"type":"string"},"description":{"type":"string"},"empty_repo":{"type":"boolean"},"forked_from_project":{"type":"string"},"forks_count":{"type":"integer"},"http_url_to_repo":{"type":"string"},"id":{"type":"integer"},"import_url":{"type":"string"},"issues_enabled":{"type":"boolean"},"jobs_enabled":{"type":"boolean"},"last_activity_at":{"type":"string"},"lfs_enabled":{"type":"boolean"},"marked_for_deletion_on":{"type":"string"},"merge_commit_template":{"type":"string"},"merge_method":{"type":"string"},"merge_pipelines_enabled":{"type":"boolean"},"merge_request_title_regex":{"type":"string"},"merge_request_title_regex_description":{"type":"string"},"merge_requests_enabled":{"type":"boolean"},"merge_trains_enabled":{"type":"boolean"},"name":{"type":"string"},"name_with_namespace":{"type":"string"},"namespace":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"only_allow_merge_if_all_discussions_are_resolved":{"type":"boolean"},"only_allow_merge_if_pipeline_succeeds":{"type":"boolean"},"open_issues_count":{"type":"integer"},"package_registry_access_level":{"type":"string"},"packages_enabled":{"type":"boolean"},"path":{"type":"string"},"path_with_namespace":{"type":"string"},"protect_merge_request_pipelines":{"type":["null","boolean"]},"public_builds":{"type":"boolean"},"readme_url":{"type":"string"},"remove_source_branch_after_merge":{"type":"boolean"},"request_access_enabled":{"type":"boolean"},"resolve_outdated_diff_discussions":{"type":"boolean"},"shared_runners_enabled":{"type":"boolean"},"snippets_enabled":{"type":"boolean"},"squash_commit_template":{"type":"string"},"squash_option":{"type":"string"},"ssh_url_to_repo":{"type":"string"},"star_count":{"type":"integer"},"suggestion_commit_message":{"type":"string"},"topics":{"items":{"type":"string"},"type":["null","array"]},"updated_at":{"type":"string"},"visibility":{"type":"string"},"web_url":{"type":"string"},"wiki_enabled":{"type":"boolean"}},"required":["id","name","path","path_with_namespace","visibility","default_branch","web_url","description","archived","topics","only_allow_merge_if_pipeline_succeeds","only_allow_merge_if_all_discussions_are_resolved","remove_source_branch_after_merge","created_at","request_access_enabled","issues_enabled","merge_requests_enabled","wiki_enabled","jobs_enabled","lfs_enabled","allow_merge_on_skipped_pipeline","merge_pipelines_enabled","merge_trains_enabled","autoclose_referenced_issues","resolve_outdated_diff_discussions"],"type":"object"}
```

</details>

<details><summary>security_settings_get</summary>

```json
{"additionalProperties":false,"properties":{"auto_fix_container_scanning":{"type":"boolean"},"auto_fix_dast":{"type":"boolean"},"auto_fix_dependency_scanning":{"type":"boolean"},"auto_fix_sast":{"type":"boolean"},"container_scanning_for_registry_enabled":{"type":"boolean"},"continuous_vulnerability_scans_enabled":{"type":"boolean"},"created_at":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"project_id":{"type":"integer"},"secret_push_protection_enabled":{"type":"boolean"},"updated_at":{"type":"string"}},"required":["project_id","auto_fix_container_scanning","auto_fix_dast","auto_fix_dependency_scanning","auto_fix_sast","continuous_vulnerability_scans_enabled","container_scanning_for_registry_enabled","secret_push_protection_enabled"],"type":"object"}
```

</details>

<details><summary>security_settings_update</summary>

```json
{"additionalProperties":false,"properties":{"auto_fix_container_scanning":{"type":"boolean"},"auto_fix_dast":{"type":"boolean"},"auto_fix_dependency_scanning":{"type":"boolean"},"auto_fix_sast":{"type":"boolean"},"container_scanning_for_registry_enabled":{"type":"boolean"},"continuous_vulnerability_scans_enabled":{"type":"boolean"},"created_at":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"project_id":{"type":"integer"},"secret_push_protection_enabled":{"type":"boolean"},"updated_at":{"type":"string"}},"required":["project_id","auto_fix_container_scanning","auto_fix_dast","auto_fix_dependency_scanning","auto_fix_sast","continuous_vulnerability_scans_enabled","container_scanning_for_registry_enabled","secret_push_protection_enabled"],"type":"object"}
```

</details>

<details><summary>share_with_group</summary>

```json
{"additionalProperties":false,"properties":{"access_role":{"type":"string"},"group_access":{"type":"integer"},"group_id":{"type":"integer"},"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["message"],"type":"object"}
```

</details>

<details><summary>star</summary>

```json
{"additionalProperties":false,"properties":{"allow_merge_on_skipped_pipeline":{"type":"boolean"},"approvals_before_merge":{"type":"integer"},"archived":{"type":"boolean"},"autoclose_referenced_issues":{"type":"boolean"},"avatar_url":{"type":"string"},"build_timeout":{"type":"integer"},"ci_config_path":{"type":"string"},"compliance_frameworks":{"items":{"type":"string"},"type":["null","array"]},"container_registry_enabled":{"type":"boolean"},"created_at":{"type":"string"},"creator_id":{"type":"integer"},"default_branch":{"type":"string"},"description":{"type":"string"},"empty_repo":{"type":"boolean"},"forked_from_project":{"type":"string"},"forks_count":{"type":"integer"},"http_url_to_repo":{"type":"string"},"id":{"type":"integer"},"import_url":{"type":"string"},"issues_enabled":{"type":"boolean"},"jobs_enabled":{"type":"boolean"},"last_activity_at":{"type":"string"},"lfs_enabled":{"type":"boolean"},"marked_for_deletion_on":{"type":"string"},"merge_commit_template":{"type":"string"},"merge_method":{"type":"string"},"merge_pipelines_enabled":{"type":"boolean"},"merge_request_title_regex":{"type":"string"},"merge_request_title_regex_description":{"type":"string"},"merge_requests_enabled":{"type":"boolean"},"merge_trains_enabled":{"type":"boolean"},"name":{"type":"string"},"name_with_namespace":{"type":"string"},"namespace":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"only_allow_merge_if_all_discussions_are_resolved":{"type":"boolean"},"only_allow_merge_if_pipeline_succeeds":{"type":"boolean"},"open_issues_count":{"type":"integer"},"package_registry_access_level":{"type":"string"},"packages_enabled":{"type":"boolean"},"path":{"type":"string"},"path_with_namespace":{"type":"string"},"protect_merge_request_pipelines":{"type":["null","boolean"]},"public_builds":{"type":"boolean"},"readme_url":{"type":"string"},"remove_source_branch_after_merge":{"type":"boolean"},"request_access_enabled":{"type":"boolean"},"resolve_outdated_diff_discussions":{"type":"boolean"},"shared_runners_enabled":{"type":"boolean"},"snippets_enabled":{"type":"boolean"},"squash_commit_template":{"type":"string"},"squash_option":{"type":"string"},"ssh_url_to_repo":{"type":"string"},"star_count":{"type":"integer"},"suggestion_commit_message":{"type":"string"},"topics":{"items":{"type":"string"},"type":["null","array"]},"updated_at":{"type":"string"},"visibility":{"type":"string"},"web_url":{"type":"string"},"wiki_enabled":{"type":"boolean"}},"required":["id","name","path","path_with_namespace","visibility","default_branch","web_url","description","archived","topics","only_allow_merge_if_pipeline_succeeds","only_allow_merge_if_all_discussions_are_resolved","remove_source_branch_after_merge","created_at","request_access_enabled","issues_enabled","merge_requests_enabled","wiki_enabled","jobs_enabled","lfs_enabled","allow_merge_on_skipped_pipeline","merge_pipelines_enabled","merge_trains_enabled","autoclose_referenced_issues","resolve_outdated_diff_discussions"],"type":"object"}
```

</details>

<details><summary>start_housekeeping</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>start_mirroring</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>statistics_get</summary>

```json
{"additionalProperties":false,"properties":{"days":{"items":{"additionalProperties":false,"properties":{"count":{"type":"integer"},"date":{"type":"string"}},"required":["date","count"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"total_fetches":{"type":"integer"}},"required":["total_fetches","days"],"type":"object"}
```

</details>

<details><summary>transfer</summary>

```json
{"additionalProperties":false,"properties":{"allow_merge_on_skipped_pipeline":{"type":"boolean"},"approvals_before_merge":{"type":"integer"},"archived":{"type":"boolean"},"autoclose_referenced_issues":{"type":"boolean"},"avatar_url":{"type":"string"},"build_timeout":{"type":"integer"},"ci_config_path":{"type":"string"},"compliance_frameworks":{"items":{"type":"string"},"type":["null","array"]},"container_registry_enabled":{"type":"boolean"},"created_at":{"type":"string"},"creator_id":{"type":"integer"},"default_branch":{"type":"string"},"description":{"type":"string"},"empty_repo":{"type":"boolean"},"forked_from_project":{"type":"string"},"forks_count":{"type":"integer"},"http_url_to_repo":{"type":"string"},"id":{"type":"integer"},"import_url":{"type":"string"},"issues_enabled":{"type":"boolean"},"jobs_enabled":{"type":"boolean"},"last_activity_at":{"type":"string"},"lfs_enabled":{"type":"boolean"},"marked_for_deletion_on":{"type":"string"},"merge_commit_template":{"type":"string"},"merge_method":{"type":"string"},"merge_pipelines_enabled":{"type":"boolean"},"merge_request_title_regex":{"type":"string"},"merge_request_title_regex_description":{"type":"string"},"merge_requests_enabled":{"type":"boolean"},"merge_trains_enabled":{"type":"boolean"},"name":{"type":"string"},"name_with_namespace":{"type":"string"},"namespace":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"only_allow_merge_if_all_discussions_are_resolved":{"type":"boolean"},"only_allow_merge_if_pipeline_succeeds":{"type":"boolean"},"open_issues_count":{"type":"integer"},"package_registry_access_level":{"type":"string"},"packages_enabled":{"type":"boolean"},"path":{"type":"string"},"path_with_namespace":{"type":"string"},"protect_merge_request_pipelines":{"type":["null","boolean"]},"public_builds":{"type":"boolean"},"readme_url":{"type":"string"},"remove_source_branch_after_merge":{"type":"boolean"},"request_access_enabled":{"type":"boolean"},"resolve_outdated_diff_discussions":{"type":"boolean"},"shared_runners_enabled":{"type":"boolean"},"snippets_enabled":{"type":"boolean"},"squash_commit_template":{"type":"string"},"squash_option":{"type":"string"},"ssh_url_to_repo":{"type":"string"},"star_count":{"type":"integer"},"suggestion_commit_message":{"type":"string"},"topics":{"items":{"type":"string"},"type":["null","array"]},"updated_at":{"type":"string"},"visibility":{"type":"string"},"web_url":{"type":"string"},"wiki_enabled":{"type":"boolean"}},"required":["id","name","path","path_with_namespace","visibility","default_branch","web_url","description","archived","topics","only_allow_merge_if_pipeline_succeeds","only_allow_merge_if_all_discussions_are_resolved","remove_source_branch_after_merge","created_at","request_access_enabled","issues_enabled","merge_requests_enabled","wiki_enabled","jobs_enabled","lfs_enabled","allow_merge_on_skipped_pipeline","merge_pipelines_enabled","merge_trains_enabled","autoclose_referenced_issues","resolve_outdated_diff_discussions"],"type":"object"}
```

</details>

<details><summary>unarchive</summary>

```json
{"additionalProperties":false,"properties":{"allow_merge_on_skipped_pipeline":{"type":"boolean"},"approvals_before_merge":{"type":"integer"},"archived":{"type":"boolean"},"autoclose_referenced_issues":{"type":"boolean"},"avatar_url":{"type":"string"},"build_timeout":{"type":"integer"},"ci_config_path":{"type":"string"},"compliance_frameworks":{"items":{"type":"string"},"type":["null","array"]},"container_registry_enabled":{"type":"boolean"},"created_at":{"type":"string"},"creator_id":{"type":"integer"},"default_branch":{"type":"string"},"description":{"type":"string"},"empty_repo":{"type":"boolean"},"forked_from_project":{"type":"string"},"forks_count":{"type":"integer"},"http_url_to_repo":{"type":"string"},"id":{"type":"integer"},"import_url":{"type":"string"},"issues_enabled":{"type":"boolean"},"jobs_enabled":{"type":"boolean"},"last_activity_at":{"type":"string"},"lfs_enabled":{"type":"boolean"},"marked_for_deletion_on":{"type":"string"},"merge_commit_template":{"type":"string"},"merge_method":{"type":"string"},"merge_pipelines_enabled":{"type":"boolean"},"merge_request_title_regex":{"type":"string"},"merge_request_title_regex_description":{"type":"string"},"merge_requests_enabled":{"type":"boolean"},"merge_trains_enabled":{"type":"boolean"},"name":{"type":"string"},"name_with_namespace":{"type":"string"},"namespace":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"only_allow_merge_if_all_discussions_are_resolved":{"type":"boolean"},"only_allow_merge_if_pipeline_succeeds":{"type":"boolean"},"open_issues_count":{"type":"integer"},"package_registry_access_level":{"type":"string"},"packages_enabled":{"type":"boolean"},"path":{"type":"string"},"path_with_namespace":{"type":"string"},"protect_merge_request_pipelines":{"type":["null","boolean"]},"public_builds":{"type":"boolean"},"readme_url":{"type":"string"},"remove_source_branch_after_merge":{"type":"boolean"},"request_access_enabled":{"type":"boolean"},"resolve_outdated_diff_discussions":{"type":"boolean"},"shared_runners_enabled":{"type":"boolean"},"snippets_enabled":{"type":"boolean"},"squash_commit_template":{"type":"string"},"squash_option":{"type":"string"},"ssh_url_to_repo":{"type":"string"},"star_count":{"type":"integer"},"suggestion_commit_message":{"type":"string"},"topics":{"items":{"type":"string"},"type":["null","array"]},"updated_at":{"type":"string"},"visibility":{"type":"string"},"web_url":{"type":"string"},"wiki_enabled":{"type":"boolean"}},"required":["id","name","path","path_with_namespace","visibility","default_branch","web_url","description","archived","topics","only_allow_merge_if_pipeline_succeeds","only_allow_merge_if_all_discussions_are_resolved","remove_source_branch_after_merge","created_at","request_access_enabled","issues_enabled","merge_requests_enabled","wiki_enabled","jobs_enabled","lfs_enabled","allow_merge_on_skipped_pipeline","merge_pipelines_enabled","merge_trains_enabled","autoclose_referenced_issues","resolve_outdated_diff_discussions"],"type":"object"}
```

</details>

<details><summary>unstar</summary>

```json
{"additionalProperties":false,"properties":{"allow_merge_on_skipped_pipeline":{"type":"boolean"},"approvals_before_merge":{"type":"integer"},"archived":{"type":"boolean"},"autoclose_referenced_issues":{"type":"boolean"},"avatar_url":{"type":"string"},"build_timeout":{"type":"integer"},"ci_config_path":{"type":"string"},"compliance_frameworks":{"items":{"type":"string"},"type":["null","array"]},"container_registry_enabled":{"type":"boolean"},"created_at":{"type":"string"},"creator_id":{"type":"integer"},"default_branch":{"type":"string"},"description":{"type":"string"},"empty_repo":{"type":"boolean"},"forked_from_project":{"type":"string"},"forks_count":{"type":"integer"},"http_url_to_repo":{"type":"string"},"id":{"type":"integer"},"import_url":{"type":"string"},"issues_enabled":{"type":"boolean"},"jobs_enabled":{"type":"boolean"},"last_activity_at":{"type":"string"},"lfs_enabled":{"type":"boolean"},"marked_for_deletion_on":{"type":"string"},"merge_commit_template":{"type":"string"},"merge_method":{"type":"string"},"merge_pipelines_enabled":{"type":"boolean"},"merge_request_title_regex":{"type":"string"},"merge_request_title_regex_description":{"type":"string"},"merge_requests_enabled":{"type":"boolean"},"merge_trains_enabled":{"type":"boolean"},"name":{"type":"string"},"name_with_namespace":{"type":"string"},"namespace":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"only_allow_merge_if_all_discussions_are_resolved":{"type":"boolean"},"only_allow_merge_if_pipeline_succeeds":{"type":"boolean"},"open_issues_count":{"type":"integer"},"package_registry_access_level":{"type":"string"},"packages_enabled":{"type":"boolean"},"path":{"type":"string"},"path_with_namespace":{"type":"string"},"protect_merge_request_pipelines":{"type":["null","boolean"]},"public_builds":{"type":"boolean"},"readme_url":{"type":"string"},"remove_source_branch_after_merge":{"type":"boolean"},"request_access_enabled":{"type":"boolean"},"resolve_outdated_diff_discussions":{"type":"boolean"},"shared_runners_enabled":{"type":"boolean"},"snippets_enabled":{"type":"boolean"},"squash_commit_template":{"type":"string"},"squash_option":{"type":"string"},"ssh_url_to_repo":{"type":"string"},"star_count":{"type":"integer"},"suggestion_commit_message":{"type":"string"},"topics":{"items":{"type":"string"},"type":["null","array"]},"updated_at":{"type":"string"},"visibility":{"type":"string"},"web_url":{"type":"string"},"wiki_enabled":{"type":"boolean"}},"required":["id","name","path","path_with_namespace","visibility","default_branch","web_url","description","archived","topics","only_allow_merge_if_pipeline_succeeds","only_allow_merge_if_all_discussions_are_resolved","remove_source_branch_after_merge","created_at","request_access_enabled","issues_enabled","merge_requests_enabled","wiki_enabled","jobs_enabled","lfs_enabled","allow_merge_on_skipped_pipeline","merge_pipelines_enabled","merge_trains_enabled","autoclose_referenced_issues","resolve_outdated_diff_discussions"],"type":"object"}
```

</details>

<details><summary>update</summary>

```json
{"additionalProperties":false,"properties":{"allow_merge_on_skipped_pipeline":{"type":"boolean"},"approvals_before_merge":{"type":"integer"},"archived":{"type":"boolean"},"autoclose_referenced_issues":{"type":"boolean"},"avatar_url":{"type":"string"},"build_timeout":{"type":"integer"},"ci_config_path":{"type":"string"},"compliance_frameworks":{"items":{"type":"string"},"type":["null","array"]},"container_registry_enabled":{"type":"boolean"},"created_at":{"type":"string"},"creator_id":{"type":"integer"},"default_branch":{"type":"string"},"description":{"type":"string"},"empty_repo":{"type":"boolean"},"forked_from_project":{"type":"string"},"forks_count":{"type":"integer"},"http_url_to_repo":{"type":"string"},"id":{"type":"integer"},"import_url":{"type":"string"},"issues_enabled":{"type":"boolean"},"jobs_enabled":{"type":"boolean"},"last_activity_at":{"type":"string"},"lfs_enabled":{"type":"boolean"},"marked_for_deletion_on":{"type":"string"},"merge_commit_template":{"type":"string"},"merge_method":{"type":"string"},"merge_pipelines_enabled":{"type":"boolean"},"merge_request_title_regex":{"type":"string"},"merge_request_title_regex_description":{"type":"string"},"merge_requests_enabled":{"type":"boolean"},"merge_trains_enabled":{"type":"boolean"},"name":{"type":"string"},"name_with_namespace":{"type":"string"},"namespace":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"only_allow_merge_if_all_discussions_are_resolved":{"type":"boolean"},"only_allow_merge_if_pipeline_succeeds":{"type":"boolean"},"open_issues_count":{"type":"integer"},"package_registry_access_level":{"type":"string"},"packages_enabled":{"type":"boolean"},"path":{"type":"string"},"path_with_namespace":{"type":"string"},"protect_merge_request_pipelines":{"type":["null","boolean"]},"public_builds":{"type":"boolean"},"readme_url":{"type":"string"},"remove_source_branch_after_merge":{"type":"boolean"},"request_access_enabled":{"type":"boolean"},"resolve_outdated_diff_discussions":{"type":"boolean"},"shared_runners_enabled":{"type":"boolean"},"snippets_enabled":{"type":"boolean"},"squash_commit_template":{"type":"string"},"squash_option":{"type":"string"},"ssh_url_to_repo":{"type":"string"},"star_count":{"type":"integer"},"suggestion_commit_message":{"type":"string"},"topics":{"items":{"type":"string"},"type":["null","array"]},"updated_at":{"type":"string"},"visibility":{"type":"string"},"web_url":{"type":"string"},"wiki_enabled":{"type":"boolean"}},"required":["id","name","path","path_with_namespace","visibility","default_branch","web_url","description","archived","topics","only_allow_merge_if_pipeline_succeeds","only_allow_merge_if_all_discussions_are_resolved","remove_source_branch_after_merge","created_at","request_access_enabled","issues_enabled","merge_requests_enabled","wiki_enabled","jobs_enabled","lfs_enabled","allow_merge_on_skipped_pipeline","merge_pipelines_enabled","merge_trains_enabled","autoclose_referenced_issues","resolve_outdated_diff_discussions"],"type":"object"}
```

</details>

<details><summary>upload</summary>

```json
{"additionalProperties":false,"properties":{"alt":{"type":"string"},"full_path":{"type":"string"},"full_url":{"type":"string"},"markdown":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"url":{"type":"string"}},"required":["alt","url","full_path","markdown"],"type":"object"}
```

</details>

<details><summary>upload_avatar</summary>

```json
{"additionalProperties":false,"properties":{"allow_merge_on_skipped_pipeline":{"type":"boolean"},"approvals_before_merge":{"type":"integer"},"archived":{"type":"boolean"},"autoclose_referenced_issues":{"type":"boolean"},"avatar_url":{"type":"string"},"build_timeout":{"type":"integer"},"ci_config_path":{"type":"string"},"compliance_frameworks":{"items":{"type":"string"},"type":["null","array"]},"container_registry_enabled":{"type":"boolean"},"created_at":{"type":"string"},"creator_id":{"type":"integer"},"default_branch":{"type":"string"},"description":{"type":"string"},"empty_repo":{"type":"boolean"},"forked_from_project":{"type":"string"},"forks_count":{"type":"integer"},"http_url_to_repo":{"type":"string"},"id":{"type":"integer"},"import_url":{"type":"string"},"issues_enabled":{"type":"boolean"},"jobs_enabled":{"type":"boolean"},"last_activity_at":{"type":"string"},"lfs_enabled":{"type":"boolean"},"marked_for_deletion_on":{"type":"string"},"merge_commit_template":{"type":"string"},"merge_method":{"type":"string"},"merge_pipelines_enabled":{"type":"boolean"},"merge_request_title_regex":{"type":"string"},"merge_request_title_regex_description":{"type":"string"},"merge_requests_enabled":{"type":"boolean"},"merge_trains_enabled":{"type":"boolean"},"name":{"type":"string"},"name_with_namespace":{"type":"string"},"namespace":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"only_allow_merge_if_all_discussions_are_resolved":{"type":"boolean"},"only_allow_merge_if_pipeline_succeeds":{"type":"boolean"},"open_issues_count":{"type":"integer"},"package_registry_access_level":{"type":"string"},"packages_enabled":{"type":"boolean"},"path":{"type":"string"},"path_with_namespace":{"type":"string"},"protect_merge_request_pipelines":{"type":["null","boolean"]},"public_builds":{"type":"boolean"},"readme_url":{"type":"string"},"remove_source_branch_after_merge":{"type":"boolean"},"request_access_enabled":{"type":"boolean"},"resolve_outdated_diff_discussions":{"type":"boolean"},"shared_runners_enabled":{"type":"boolean"},"snippets_enabled":{"type":"boolean"},"squash_commit_template":{"type":"string"},"squash_option":{"type":"string"},"ssh_url_to_repo":{"type":"string"},"star_count":{"type":"integer"},"suggestion_commit_message":{"type":"string"},"topics":{"items":{"type":"string"},"type":["null","array"]},"updated_at":{"type":"string"},"visibility":{"type":"string"},"web_url":{"type":"string"},"wiki_enabled":{"type":"boolean"}},"required":["id","name","path","path_with_namespace","visibility","default_branch","web_url","description","archived","topics","only_allow_merge_if_pipeline_succeeds","only_allow_merge_if_all_discussions_are_resolved","remove_source_branch_after_merge","created_at","request_access_enabled","issues_enabled","merge_requests_enabled","wiki_enabled","jobs_enabled","lfs_enabled","allow_merge_on_skipped_pipeline","merge_pipelines_enabled","merge_trains_enabled","autoclose_referenced_issues","resolve_outdated_diff_discussions"],"type":"object"}
```

</details>

<details><summary>upload_delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>upload_list</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"uploads":{"items":{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"filename":{"type":"string"},"id":{"type":"integer"},"size":{"type":"integer"},"uploaded_by":{"type":"string"}},"required":["id","size","filename"],"type":"object"},"type":["null","array"]}},"required":["uploads"],"type":"object"}
```

</details>

### gitlab_release

**Release**

Use {"action":"list","params":{...}}; only top-level keys are action and params.
Action params schema: gitlab://tools/gitlab_release.<action>.
Action guidance:
- link_create: Create a single release asset link. The url must be an absolute http, https, or ftp URL; do not pass local file paths or relative paths as url.
- link_create_batch: Create multiple release asset links in one call. Use absolute URLs returned by package publish actions for package assets.
- link_update: Update an existing release asset link by link_id. When changing url, use an absolute http, https, or ftp URL; do not pass local file paths or relative paths as url.
Parameter guidance:
- link_create.url: release_asset_absolute_url; source: Absolute URL accepted by GitLab release links. For package assets, use the URL returned by package publish actions.; avoid: Do not use local file paths, relative paths, or package file names as url., Do not construct package registry URLs manually when a package publish action returned the asset URL.
- link_create_batch.links: release_asset_links; source: Array of link objects. Each item supports only name, url, and link_type; url must be absolute.; avoid: Do not send direct_asset_path or filepath to link_create_batch., For package assets, use the package URLs returned by gitlab_package publish actions instead of constructing URLs manually.
- link_update.link_id: release_asset_link_identifier; source: Use the release link ID returned by release.link_create, release.link_create_batch, or release.link_list.; avoid: Do not use link_update to create a new release asset link; call link_create or link_create_batch first.
- link_update.url: release_asset_absolute_url; source: Absolute URL accepted by GitLab release links. For package assets, use the URL returned by package publish actions.; avoid: Do not use local file paths, relative paths, or package file names as url., Do not construct package registry URLs manually when a package publish action returned the asset URL.

Manage GitLab releases and their asset links (binaries, packages, runbooks). Releases wrap a Git tag with notes, milestones and downloadable assets. Delete is destructive: it removes the release but preserves the underlying tag.
When to use: publish a release for a tag, create a release and its tag from a ref, list/get/update releases, attach asset links to a release, batch-attach links after a CI build.
NOT for: uploading binaries to the package registry (use gitlab_package), milestones (use gitlab_project milestone_*).

Returns:
- list: array of releases with pagination.
- get / get_latest / create / update: release object {name, tag_name, description, released_at, assets: {sources, links}, evidences, milestones}.
- link_list: array of {id, name, url, link_type, direct_asset_path}.
- link_create / link_create_batch / link_get / link_update: link object(s).
- delete / link_delete: {success: bool, message: string}.
Errors: 404 not found (hint: verify tag_name), 403 forbidden (hint: requires Developer+ for create, Maintainer+ for update/delete), 400 invalid params (hint: link url must be absolute (http, https, or ftp)).

Param conventions: * = required. All actions need project_id*. Release actions need tag_name*. Link actions need tag_name* + link_id* (except link_create / link_create_batch / link_list).

Releases:
- create: project_id*, tag_name*, ref (branch/SHA when tag_name does not exist or the prompt says from ref), name, description (Markdown), released_at (ISO 8601), milestones ([]string), tag_message
- get: project_id*, tag_name*
- get_latest: project_id*
- list: project_id*, order_by (released_at/created_at), sort (asc/desc), page, per_page
- update: project_id*, tag_name*, name, description, released_at, milestones
- delete: project_id*, tag_name*

Asset links:
- link_create: project_id*, tag_name*, name*, url*, link_type (runbook/package/image/other), filepath, direct_asset_path
- link_create_batch: project_id*, tag_name*, links* (array of {name, url, link_type})
- link_get: project_id*, tag_name*, link_id*
- link_list: project_id*, tag_name*, page, per_page
- link_update: project_id*, tag_name*, link_id*, name, url, filepath, direct_asset_path, link_type
- link_delete: project_id*, tag_name*, link_id*

See also: gitlab_tag (standalone tag CRUD), gitlab_package (upload binaries; link_create can point at the package URL), gitlab_project (milestones referenced by releases).

Annotations: readOnly=false, destructive=true, idempotent=false, openWorld=true

**Action Output Schemas:**

<details><summary>create</summary>

```json
{"additionalProperties":false,"properties":{"assets_count":{"type":"integer"},"assets_links":{"items":{"additionalProperties":false,"properties":{"direct_asset_url":{"type":"string"},"external":{"type":"boolean"},"id":{"type":"integer"},"link_type":{"type":"string"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"url":{"type":"string"}},"required":["id","name","url","link_type","external"],"type":"object"},"type":["null","array"]},"assets_sources":{"items":{"additionalProperties":false,"properties":{"format":{"type":"string"},"url":{"type":"string"}},"required":["format","url"],"type":"object"},"type":["null","array"]},"author":{"type":"string"},"commit_path":{"type":"string"},"commit_sha":{"type":"string"},"created_at":{"type":"string"},"description":{"type":"string"},"description_html":{"type":"string"},"evidences":{"items":{"additionalProperties":false,"properties":{"collected_at":{"type":"string"},"filepath":{"type":"string"},"sha":{"type":"string"}},"required":["sha","filepath"],"type":"object"},"type":["null","array"]},"milestones":{"items":{"type":"string"},"type":["null","array"]},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"released_at":{"type":"string"},"tag_name":{"type":"string"},"tag_path":{"type":"string"},"upcoming_release":{"type":"boolean"},"web_url":{"type":"string"}},"required":["tag_name","name","description","created_at","released_at"],"type":"object"}
```

</details>

<details><summary>delete</summary>

```json
{"additionalProperties":false,"properties":{"assets_count":{"type":"integer"},"assets_links":{"items":{"additionalProperties":false,"properties":{"direct_asset_url":{"type":"string"},"external":{"type":"boolean"},"id":{"type":"integer"},"link_type":{"type":"string"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"url":{"type":"string"}},"required":["id","name","url","link_type","external"],"type":"object"},"type":["null","array"]},"assets_sources":{"items":{"additionalProperties":false,"properties":{"format":{"type":"string"},"url":{"type":"string"}},"required":["format","url"],"type":"object"},"type":["null","array"]},"author":{"type":"string"},"commit_path":{"type":"string"},"commit_sha":{"type":"string"},"created_at":{"type":"string"},"description":{"type":"string"},"description_html":{"type":"string"},"evidences":{"items":{"additionalProperties":false,"properties":{"collected_at":{"type":"string"},"filepath":{"type":"string"},"sha":{"type":"string"}},"required":["sha","filepath"],"type":"object"},"type":["null","array"]},"milestones":{"items":{"type":"string"},"type":["null","array"]},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"released_at":{"type":"string"},"tag_name":{"type":"string"},"tag_path":{"type":"string"},"upcoming_release":{"type":"boolean"},"web_url":{"type":"string"}},"required":["tag_name","name","description","created_at","released_at"],"type":"object"}
```

</details>

<details><summary>get</summary>

```json
{"additionalProperties":false,"properties":{"assets_count":{"type":"integer"},"assets_links":{"items":{"additionalProperties":false,"properties":{"direct_asset_url":{"type":"string"},"external":{"type":"boolean"},"id":{"type":"integer"},"link_type":{"type":"string"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"url":{"type":"string"}},"required":["id","name","url","link_type","external"],"type":"object"},"type":["null","array"]},"assets_sources":{"items":{"additionalProperties":false,"properties":{"format":{"type":"string"},"url":{"type":"string"}},"required":["format","url"],"type":"object"},"type":["null","array"]},"author":{"type":"string"},"commit_path":{"type":"string"},"commit_sha":{"type":"string"},"created_at":{"type":"string"},"description":{"type":"string"},"description_html":{"type":"string"},"evidences":{"items":{"additionalProperties":false,"properties":{"collected_at":{"type":"string"},"filepath":{"type":"string"},"sha":{"type":"string"}},"required":["sha","filepath"],"type":"object"},"type":["null","array"]},"milestones":{"items":{"type":"string"},"type":["null","array"]},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"released_at":{"type":"string"},"tag_name":{"type":"string"},"tag_path":{"type":"string"},"upcoming_release":{"type":"boolean"},"web_url":{"type":"string"}},"required":["tag_name","name","description","created_at","released_at"],"type":"object"}
```

</details>

<details><summary>get_latest</summary>

```json
{"additionalProperties":false,"properties":{"assets_count":{"type":"integer"},"assets_links":{"items":{"additionalProperties":false,"properties":{"direct_asset_url":{"type":"string"},"external":{"type":"boolean"},"id":{"type":"integer"},"link_type":{"type":"string"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"url":{"type":"string"}},"required":["id","name","url","link_type","external"],"type":"object"},"type":["null","array"]},"assets_sources":{"items":{"additionalProperties":false,"properties":{"format":{"type":"string"},"url":{"type":"string"}},"required":["format","url"],"type":"object"},"type":["null","array"]},"author":{"type":"string"},"commit_path":{"type":"string"},"commit_sha":{"type":"string"},"created_at":{"type":"string"},"description":{"type":"string"},"description_html":{"type":"string"},"evidences":{"items":{"additionalProperties":false,"properties":{"collected_at":{"type":"string"},"filepath":{"type":"string"},"sha":{"type":"string"}},"required":["sha","filepath"],"type":"object"},"type":["null","array"]},"milestones":{"items":{"type":"string"},"type":["null","array"]},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"released_at":{"type":"string"},"tag_name":{"type":"string"},"tag_path":{"type":"string"},"upcoming_release":{"type":"boolean"},"web_url":{"type":"string"}},"required":["tag_name","name","description","created_at","released_at"],"type":"object"}
```

</details>

<details><summary>link_create</summary>

```json
{"additionalProperties":false,"properties":{"direct_asset_url":{"type":"string"},"external":{"type":"boolean"},"id":{"type":"integer"},"link_type":{"type":"string"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"url":{"type":"string"}},"required":["id","name","url","link_type","external"],"type":"object"}
```

</details>

<details><summary>link_create_batch</summary>

```json
{"additionalProperties":false,"properties":{"created":{"items":{"additionalProperties":false,"properties":{"direct_asset_url":{"type":"string"},"external":{"type":"boolean"},"id":{"type":"integer"},"link_type":{"type":"string"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"url":{"type":"string"}},"required":["id","name","url","link_type","external"],"type":"object"},"type":["null","array"]},"failed":{"items":{"type":"string"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["created"],"type":"object"}
```

</details>

<details><summary>link_delete</summary>

```json
{"additionalProperties":false,"properties":{"direct_asset_url":{"type":"string"},"external":{"type":"boolean"},"id":{"type":"integer"},"link_type":{"type":"string"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"url":{"type":"string"}},"required":["id","name","url","link_type","external"],"type":"object"}
```

</details>

<details><summary>link_get</summary>

```json
{"additionalProperties":false,"properties":{"direct_asset_url":{"type":"string"},"external":{"type":"boolean"},"id":{"type":"integer"},"link_type":{"type":"string"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"url":{"type":"string"}},"required":["id","name","url","link_type","external"],"type":"object"}
```

</details>

<details><summary>link_list</summary>

```json
{"additionalProperties":false,"properties":{"links":{"items":{"additionalProperties":false,"properties":{"direct_asset_url":{"type":"string"},"external":{"type":"boolean"},"id":{"type":"integer"},"link_type":{"type":"string"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"url":{"type":"string"}},"required":["id","name","url","link_type","external"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["links","pagination"],"type":"object"}
```

</details>

<details><summary>link_update</summary>

```json
{"additionalProperties":false,"properties":{"direct_asset_url":{"type":"string"},"external":{"type":"boolean"},"id":{"type":"integer"},"link_type":{"type":"string"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"url":{"type":"string"}},"required":["id","name","url","link_type","external"],"type":"object"}
```

</details>

<details><summary>list</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"},"releases":{"items":{"additionalProperties":false,"properties":{"assets_count":{"type":"integer"},"assets_links":{"items":{"additionalProperties":false,"properties":{"direct_asset_url":{"type":"string"},"external":{"type":"boolean"},"id":{"type":"integer"},"link_type":{"type":"string"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"url":{"type":"string"}},"required":["id","name","url","link_type","external"],"type":"object"},"type":["null","array"]},"assets_sources":{"items":{"additionalProperties":false,"properties":{"format":{"type":"string"},"url":{"type":"string"}},"required":["format","url"],"type":"object"},"type":["null","array"]},"author":{"type":"string"},"commit_path":{"type":"string"},"commit_sha":{"type":"string"},"created_at":{"type":"string"},"description":{"type":"string"},"description_html":{"type":"string"},"evidences":{"items":{"additionalProperties":false,"properties":{"collected_at":{"type":"string"},"filepath":{"type":"string"},"sha":{"type":"string"}},"required":["sha","filepath"],"type":"object"},"type":["null","array"]},"milestones":{"items":{"type":"string"},"type":["null","array"]},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"released_at":{"type":"string"},"tag_name":{"type":"string"},"tag_path":{"type":"string"},"upcoming_release":{"type":"boolean"},"web_url":{"type":"string"}},"required":["tag_name","name","description","created_at","released_at"],"type":"object"},"type":["null","array"]}},"required":["releases","pagination"],"type":"object"}
```

</details>

<details><summary>update</summary>

```json
{"additionalProperties":false,"properties":{"assets_count":{"type":"integer"},"assets_links":{"items":{"additionalProperties":false,"properties":{"direct_asset_url":{"type":"string"},"external":{"type":"boolean"},"id":{"type":"integer"},"link_type":{"type":"string"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"url":{"type":"string"}},"required":["id","name","url","link_type","external"],"type":"object"},"type":["null","array"]},"assets_sources":{"items":{"additionalProperties":false,"properties":{"format":{"type":"string"},"url":{"type":"string"}},"required":["format","url"],"type":"object"},"type":["null","array"]},"author":{"type":"string"},"commit_path":{"type":"string"},"commit_sha":{"type":"string"},"created_at":{"type":"string"},"description":{"type":"string"},"description_html":{"type":"string"},"evidences":{"items":{"additionalProperties":false,"properties":{"collected_at":{"type":"string"},"filepath":{"type":"string"},"sha":{"type":"string"}},"required":["sha","filepath"],"type":"object"},"type":["null","array"]},"milestones":{"items":{"type":"string"},"type":["null","array"]},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"released_at":{"type":"string"},"tag_name":{"type":"string"},"tag_path":{"type":"string"},"upcoming_release":{"type":"boolean"},"web_url":{"type":"string"}},"required":["tag_name","name","description","created_at","released_at"],"type":"object"}
```

</details>

### gitlab_repository

**Repository**

Use {"action":"archive","params":{...}}; only top-level keys are action and params.
Action params schema: gitlab://tools/gitlab_repository.<action>.
Action guidance:
- compare: Compares two refs using params.from and params.to; use before analyze.release_notes when the task asks to inspect the diff.

Browse and manage GitLab repository content: file tree, read/write/delete files, commits, diffs, cherry-pick, revert, blame, compare branches, contributors, archives, changelogs, submodules, render markdown, and commit discussions. File delete is destructive.
	When to use: exact file/commit operations, diffs for a known commit SHA, blame, compare, archives, submodules, markdown rendering. NOT for: full-text code search (use gitlab_search action code), MR changes/diffs by merge_request_iid (use gitlab_mr_review changes_get/raw_diffs), branch CRUD (use gitlab_branch), tag CRUD (use gitlab_tag).

Behavior:
- Idempotent reads: tree, blob, raw_blob, archive, compare, merge_base, contributors, file_get/raw/metadata/raw_metadata/blame, list_submodules, read_submodule_file, file_history, commit_list/get/diff/refs/comments/merge_requests/statuses/signature, commit_discussion_list/get, markdown_render, changelog_generate.
- file_create / file_update / file_delete / commit_create / commit_cherry_pick / commit_revert / update_submodule / changelog_add are NON-idempotent: when preconditions are satisfied each call produces a new commit SHA; otherwise they fail (e.g. 400 on conflict, 409 on stale last_commit_id). Use last_commit_id on file_update/file_delete for optimistic-concurrency safety.
- commit_status_set is idempotent per (sha, name, ref); commit_comment_create / commit_discussion_create / commit_discussion_add_note append rather than replace. commit_discussion_update_note replaces the existing note body.
- Side effects: any commit-producing action triggers webhooks, CI pipelines, and protected-branch / push-rule checks; archive returns large binary payloads (base64).
- File delete is destructive at the working-tree level but git history is preserved.

Returns: JSON with resource data. Lists include pagination (page, per_page, total, next_page). Void actions return confirmation.
Errors: 404 (hint: confirm project_id, ref/sha, and file_path — paths are URL-encoded), 403 (hint: file_create/file_update/file_delete and commit_* require Developer+; protected branches may need Maintainer+), 400 (hint: file_update/file_delete accept last_commit_id for optimistic concurrency; commit_create needs at least one entry in actions).

Param conventions: * = required. Most actions need project_id*. List actions accept page, per_page.

Repository browsing:
- tree: project_id*, path, ref, recursive
- compare: project_id*, from*, to*, straight
- contributors: project_id*, order_by (name/email/commits), sort
- merge_base: project_id*, refs* (array of 2+ branch/tag/SHA)
- blob / raw_blob: project_id*, sha*
- archive: project_id*, sha, format (tar.gz/zip/tar.bz2), path

Changelogs:
- changelog_add: project_id*, version*, branch, config_file, file, from, to, message, trailer
- changelog_generate: project_id*, version*, config_file, from, to, trailer

Commits:
- commit_create: project_id*, branch*, commit_message*, actions* (array of {action: create/update/delete/move, file_path, content, previous_path}), start_branch, author_email, author_name
- commit_list: project_id*, ref_name, since, until, path, author, with_stats
- file_history: alias for commit_list filtered by path* — list commits modifying a specific file
- commit_get: project_id*, sha*
- commit_diff: project_id*, sha* — commit SHA only; not for merge_request_iid or MR changes.
- commit_refs: project_id*, sha*, type (branch/tag/all)
- commit_comments / commit_merge_requests: project_id*, sha*
- commit_comment_create: project_id*, sha*, note*, path, line, line_type (new/old)
- commit_statuses: project_id*, sha*, ref, stage, name, pipeline_id, all
- commit_status_set: project_id*, sha*, state* (pending/running/success/failed/canceled), ref, name, context, target_url, description, coverage, pipeline_id
- commit_cherry_pick: project_id*, sha*, branch*, dry_run, message
- commit_revert: project_id*, sha*, branch*
- commit_signature: project_id*, sha*

Files:
- file_get / file_raw / file_metadata / file_raw_metadata / file_blame: project_id*, file_path*, ref. Use only when the exact repository file_path is known; use gitlab_search/code for text search across files. Blame also accepts range_start, range_end.
  - file_metadata: HEAD-style metadata for the file content endpoint (size, encoding, content_sha256, blob_id, last_commit_id, ref).
  - file_raw_metadata: HEAD-style metadata for the raw file endpoint (size, content_type, ref) — useful to size-check before downloading via file_raw.
- file_create: project_id*, file_path*, branch*, commit_message*, content, start_branch, encoding (text/base64), author_email, author_name, execute_filemode
- file_update: project_id*, file_path*, branch*, commit_message*, content, start_branch, encoding, author_email, author_name, last_commit_id, execute_filemode
- file_delete: project_id*, file_path*, branch*, commit_message*, start_branch, author_email, author_name, last_commit_id

Submodules:
- update_submodule: project_id*, submodule* (URL-encoded path), branch*, commit_sha*, commit_message
- list_submodules: project_id*, ref
- read_submodule_file: project_id*, submodule_path*, file_path*, ref

Markdown:
- markdown_render: text*, gfm, project (path for resolving references)

Commit discussions:
- commit_discussion_list: project_id*, commit_id*
- commit_discussion_get: project_id*, commit_id*, discussion_id*
- commit_discussion_create: project_id*, commit_id*, body*, position
- commit_discussion_add_note: project_id*, commit_id*, discussion_id*, body*
- commit_discussion_update_note: project_id*, commit_id*, discussion_id*, note_id*, body*
- commit_discussion_delete_note: project_id*, commit_id*, discussion_id*, note_id*

See also: gitlab_branch, gitlab_tag, gitlab_project, gitlab_merge_request

Annotations: readOnly=false, destructive=true, idempotent=false, openWorld=true

**Action Output Schemas:**

<details><summary>archive</summary>

```json
{"additionalProperties":false,"properties":{"format":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"project_id":{"type":"string"},"sha":{"type":"string"},"url":{"type":"string"}},"required":["project_id","format","url"],"type":"object"}
```

</details>

<details><summary>blob</summary>

```json
{"additionalProperties":false,"properties":{"content":{"type":"string"},"content_category":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"sha":{"type":"string"},"size":{"type":"integer"}},"required":["sha","size","content","content_category"],"type":"object"}
```

</details>

<details><summary>changelog_add</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"success":{"type":"boolean"},"version":{"type":"string"}},"required":["success","version"],"type":"object"}
```

</details>

<details><summary>changelog_generate</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"notes":{"type":"string"}},"required":["notes"],"type":"object"}
```

</details>

<details><summary>commit_cherry_pick</summary>

```json
{"additionalProperties":false,"properties":{"author_email":{"type":"string"},"author_name":{"type":"string"},"authored_date":{"type":"string"},"committed_date":{"type":"string"},"committer_email":{"type":"string"},"committer_name":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"string"},"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"parent_ids":{"items":{"type":"string"},"type":["null","array"]},"project_id":{"type":"integer"},"short_id":{"type":"string"},"stats":{"additionalProperties":false,"properties":{"additions":{"type":"integer"},"deletions":{"type":"integer"},"total":{"type":"integer"}},"required":["additions","deletions","total"],"type":["null","object"]},"status":{"type":"string"},"title":{"type":"string"},"web_url":{"type":"string"}},"required":["id","short_id","title","author_name","author_email","committer_name","committer_email","committed_date","web_url"],"type":"object"}
```

</details>

<details><summary>commit_comment_create</summary>

```json
{"additionalProperties":false,"properties":{"author":{"type":"string"},"line":{"type":"integer"},"line_type":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"note":{"type":"string"},"path":{"type":"string"}},"required":["note","author"],"type":"object"}
```

</details>

<details><summary>commit_comments</summary>

```json
{"additionalProperties":false,"properties":{"comments":{"items":{"additionalProperties":false,"properties":{"author":{"type":"string"},"line":{"type":"integer"},"line_type":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"note":{"type":"string"},"path":{"type":"string"}},"required":["note","author"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["comments","pagination"],"type":"object"}
```

</details>

<details><summary>commit_create</summary>

```json
{"additionalProperties":false,"properties":{"author_email":{"type":"string"},"author_name":{"type":"string"},"authored_date":{"type":"string"},"committed_date":{"type":"string"},"committer_email":{"type":"string"},"committer_name":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"string"},"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"parent_ids":{"items":{"type":"string"},"type":["null","array"]},"project_id":{"type":"integer"},"short_id":{"type":"string"},"stats":{"additionalProperties":false,"properties":{"additions":{"type":"integer"},"deletions":{"type":"integer"},"total":{"type":"integer"}},"required":["additions","deletions","total"],"type":["null","object"]},"status":{"type":"string"},"title":{"type":"string"},"web_url":{"type":"string"}},"required":["id","short_id","title","author_name","author_email","committer_name","committer_email","committed_date","web_url"],"type":"object"}
```

</details>

<details><summary>commit_diff</summary>

```json
{"additionalProperties":false,"properties":{"diffs":{"items":{"additionalProperties":false,"properties":{"a_mode":{"type":"string"},"b_mode":{"type":"string"},"deleted_file":{"type":"boolean"},"diff":{"type":"string"},"new_file":{"type":"boolean"},"new_path":{"type":"string"},"old_path":{"type":"string"},"renamed_file":{"type":"boolean"}},"required":["old_path","new_path","diff","new_file","renamed_file","deleted_file"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["diffs","pagination"],"type":"object"}
```

</details>

<details><summary>commit_discussion_add_note</summary>

```json
{"additionalProperties":false,"properties":{"author":{"type":"string"},"body":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"system":{"type":"boolean"},"updated_at":{"type":"string"}},"required":["id","body","author","created_at","system"],"type":"object"}
```

</details>

<details><summary>commit_discussion_create</summary>

```json
{"additionalProperties":false,"properties":{"id":{"type":"string"},"individual_note":{"type":"boolean"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"notes":{"items":{"additionalProperties":false,"properties":{"author":{"type":"string"},"body":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"system":{"type":"boolean"},"updated_at":{"type":"string"}},"required":["id","body","author","created_at","system"],"type":"object"},"type":["null","array"]}},"required":["id","individual_note","notes"],"type":"object"}
```

</details>

<details><summary>commit_discussion_delete_note</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>commit_discussion_get</summary>

```json
{"additionalProperties":false,"properties":{"id":{"type":"string"},"individual_note":{"type":"boolean"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"notes":{"items":{"additionalProperties":false,"properties":{"author":{"type":"string"},"body":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"system":{"type":"boolean"},"updated_at":{"type":"string"}},"required":["id","body","author","created_at","system"],"type":"object"},"type":["null","array"]}},"required":["id","individual_note","notes"],"type":"object"}
```

</details>

<details><summary>commit_discussion_list</summary>

```json
{"additionalProperties":false,"properties":{"discussions":{"items":{"additionalProperties":false,"properties":{"id":{"type":"string"},"individual_note":{"type":"boolean"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"notes":{"items":{"additionalProperties":false,"properties":{"author":{"type":"string"},"body":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"system":{"type":"boolean"},"updated_at":{"type":"string"}},"required":["id","body","author","created_at","system"],"type":"object"},"type":["null","array"]}},"required":["id","individual_note","notes"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["discussions","pagination"],"type":"object"}
```

</details>

<details><summary>commit_discussion_update_note</summary>

```json
{"additionalProperties":false,"properties":{"author":{"type":"string"},"body":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"system":{"type":"boolean"},"updated_at":{"type":"string"}},"required":["id","body","author","created_at","system"],"type":"object"}
```

</details>

<details><summary>commit_get</summary>

```json
{"additionalProperties":false,"properties":{"author_email":{"type":"string"},"author_name":{"type":"string"},"committed_date":{"type":"string"},"committer_email":{"type":"string"},"committer_name":{"type":"string"},"id":{"type":"string"},"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"parent_ids":{"items":{"type":"string"},"type":["null","array"]},"short_id":{"type":"string"},"stats":{"additionalProperties":false,"properties":{"additions":{"type":"integer"},"deletions":{"type":"integer"},"total":{"type":"integer"}},"required":["additions","deletions","total"],"type":["null","object"]},"status":{"type":"string"},"title":{"type":"string"},"web_url":{"type":"string"}},"required":["id","short_id","title","message","author_name","author_email","committer_name","committer_email","committed_date","web_url","parent_ids"],"type":"object"}
```

</details>

<details><summary>commit_list</summary>

```json
{"additionalProperties":false,"properties":{"commits":{"items":{"additionalProperties":false,"properties":{"author_email":{"type":"string"},"author_name":{"type":"string"},"authored_date":{"type":"string"},"committed_date":{"type":"string"},"committer_email":{"type":"string"},"committer_name":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"string"},"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"parent_ids":{"items":{"type":"string"},"type":["null","array"]},"project_id":{"type":"integer"},"short_id":{"type":"string"},"stats":{"additionalProperties":false,"properties":{"additions":{"type":"integer"},"deletions":{"type":"integer"},"total":{"type":"integer"}},"required":["additions","deletions","total"],"type":["null","object"]},"status":{"type":"string"},"title":{"type":"string"},"web_url":{"type":"string"}},"required":["id","short_id","title","author_name","author_email","committer_name","committer_email","committed_date","web_url"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["commits","pagination"],"type":"object"}
```

</details>

<details><summary>commit_merge_requests</summary>

```json
{"additionalProperties":false,"properties":{"merge_requests":{"items":{"additionalProperties":false,"properties":{"author":{"type":"string"},"id":{"type":"integer"},"merge_request_iid":{"type":"integer"},"source_branch":{"type":"string"},"state":{"type":"string"},"target_branch":{"type":"string"},"title":{"type":"string"},"web_url":{"type":"string"}},"required":["id","merge_request_iid","title","state","source_branch","target_branch","web_url"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["merge_requests"],"type":"object"}
```

</details>

<details><summary>commit_refs</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"},"refs":{"items":{"additionalProperties":false,"properties":{"name":{"type":"string"},"type":{"type":"string"}},"required":["type","name"],"type":"object"},"type":["null","array"]}},"required":["refs","pagination"],"type":"object"}
```

</details>

<details><summary>commit_revert</summary>

```json
{"additionalProperties":false,"properties":{"author_email":{"type":"string"},"author_name":{"type":"string"},"authored_date":{"type":"string"},"committed_date":{"type":"string"},"committer_email":{"type":"string"},"committer_name":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"string"},"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"parent_ids":{"items":{"type":"string"},"type":["null","array"]},"project_id":{"type":"integer"},"short_id":{"type":"string"},"stats":{"additionalProperties":false,"properties":{"additions":{"type":"integer"},"deletions":{"type":"integer"},"total":{"type":"integer"}},"required":["additions","deletions","total"],"type":["null","object"]},"status":{"type":"string"},"title":{"type":"string"},"web_url":{"type":"string"}},"required":["id","short_id","title","author_name","author_email","committer_name","committer_email","committed_date","web_url"],"type":"object"}
```

</details>

<details><summary>commit_signature</summary>

```json
{"additionalProperties":false,"properties":{"gpg_key_id":{"type":"integer"},"gpg_key_primary_keyid":{"type":"string"},"gpg_key_subkey_id":{"type":"integer"},"gpg_key_user_email":{"type":"string"},"gpg_key_user_name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"verification_status":{"type":"string"}},"required":["gpg_key_id","gpg_key_primary_keyid","gpg_key_user_name","gpg_key_user_email","verification_status"],"type":"object"}
```

</details>

<details><summary>commit_status_set</summary>

```json
{"additionalProperties":false,"properties":{"allow_failure":{"type":"boolean"},"author":{"type":"string"},"coverage":{"type":"number"},"created_at":{"type":"string"},"description":{"type":"string"},"finished_at":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pipeline_id":{"type":"integer"},"ref":{"type":"string"},"sha":{"type":"string"},"started_at":{"type":"string"},"status":{"type":"string"},"target_url":{"type":"string"}},"required":["id","sha","ref","status","name"],"type":"object"}
```

</details>

<details><summary>commit_statuses</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"},"statuses":{"items":{"additionalProperties":false,"properties":{"allow_failure":{"type":"boolean"},"author":{"type":"string"},"coverage":{"type":"number"},"created_at":{"type":"string"},"description":{"type":"string"},"finished_at":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pipeline_id":{"type":"integer"},"ref":{"type":"string"},"sha":{"type":"string"},"started_at":{"type":"string"},"status":{"type":"string"},"target_url":{"type":"string"}},"required":["id","sha","ref","status","name"],"type":"object"},"type":["null","array"]}},"required":["statuses","pagination"],"type":"object"}
```

</details>

<details><summary>compare</summary>

```json
{"additionalProperties":false,"properties":{"commits":{"items":{"additionalProperties":false,"properties":{"author_email":{"type":"string"},"author_name":{"type":"string"},"authored_date":{"type":"string"},"committed_date":{"type":"string"},"committer_email":{"type":"string"},"committer_name":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"string"},"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"parent_ids":{"items":{"type":"string"},"type":["null","array"]},"project_id":{"type":"integer"},"short_id":{"type":"string"},"stats":{"additionalProperties":false,"properties":{"additions":{"type":"integer"},"deletions":{"type":"integer"},"total":{"type":"integer"}},"required":["additions","deletions","total"],"type":["null","object"]},"status":{"type":"string"},"title":{"type":"string"},"web_url":{"type":"string"}},"required":["id","short_id","title","author_name","author_email","committer_name","committer_email","committed_date","web_url"],"type":"object"},"type":["null","array"]},"compare_same_ref":{"type":"boolean"},"compare_timeout":{"type":"boolean"},"diffs":{"items":{"additionalProperties":false,"properties":{"a_mode":{"type":"string"},"b_mode":{"type":"string"},"deleted_file":{"type":"boolean"},"diff":{"type":"string"},"new_file":{"type":"boolean"},"new_path":{"type":"string"},"old_path":{"type":"string"},"renamed_file":{"type":"boolean"}},"required":["old_path","new_path","diff","new_file","renamed_file","deleted_file"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"web_url":{"type":"string"}},"required":["commits","diffs","compare_timeout","compare_same_ref","web_url"],"type":"object"}
```

</details>

<details><summary>contributors</summary>

```json
{"additionalProperties":false,"properties":{"contributors":{"items":{"additionalProperties":false,"properties":{"additions":{"type":"integer"},"commits":{"type":"integer"},"deletions":{"type":"integer"},"email":{"type":"string"},"name":{"type":"string"}},"required":["name","email","commits","additions","deletions"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["contributors","pagination"],"type":"object"}
```

</details>

<details><summary>file_blame</summary>

```json
{"additionalProperties":false,"properties":{"file_path":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"ranges":{"items":{"additionalProperties":false,"properties":{"commit":{"additionalProperties":false,"properties":{"author_email":{"type":"string"},"author_name":{"type":"string"},"authored_date":{"type":"string"},"committed_date":{"type":"string"},"id":{"type":"string"},"message":{"type":"string"}},"required":["id","message","author_name","author_email"],"type":"object"},"lines":{"items":{"type":"string"},"type":["null","array"]}},"required":["commit","lines"],"type":"object"},"type":["null","array"]}},"required":["file_path","ranges"],"type":"object"}
```

</details>

<details><summary>file_create</summary>

```json
{"additionalProperties":false,"properties":{"branch":{"type":"string"},"commit_id":{"type":"string"},"file_path":{"type":"string"},"last_commit_id":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["file_path","branch"],"type":"object"}
```

</details>

<details><summary>file_delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>file_get</summary>

```json
{"additionalProperties":false,"properties":{"blob_id":{"type":"string"},"commit_id":{"type":"string"},"content":{"type":"string"},"content_category":{"type":"string"},"encoding":{"type":"string"},"execute_filemode":{"type":"boolean"},"file_name":{"type":"string"},"file_path":{"type":"string"},"last_commit_id":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"ref":{"type":"string"},"size":{"type":"integer"}},"required":["file_name","file_path","size","encoding","content","content_category","ref","blob_id","commit_id","last_commit_id","execute_filemode"],"type":"object"}
```

</details>

<details><summary>file_history</summary>

```json
{"additionalProperties":false,"properties":{"commits":{"items":{"additionalProperties":false,"properties":{"author_email":{"type":"string"},"author_name":{"type":"string"},"authored_date":{"type":"string"},"committed_date":{"type":"string"},"committer_email":{"type":"string"},"committer_name":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"string"},"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"parent_ids":{"items":{"type":"string"},"type":["null","array"]},"project_id":{"type":"integer"},"short_id":{"type":"string"},"stats":{"additionalProperties":false,"properties":{"additions":{"type":"integer"},"deletions":{"type":"integer"},"total":{"type":"integer"}},"required":["additions","deletions","total"],"type":["null","object"]},"status":{"type":"string"},"title":{"type":"string"},"web_url":{"type":"string"}},"required":["id","short_id","title","author_name","author_email","committer_name","committer_email","committed_date","web_url"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["commits","pagination"],"type":"object"}
```

</details>

<details><summary>file_metadata</summary>

```json
{"additionalProperties":false,"properties":{"blob_id":{"type":"string"},"commit_id":{"type":"string"},"content_sha256":{"type":"string"},"encoding":{"type":"string"},"execute_filemode":{"type":"boolean"},"file_name":{"type":"string"},"file_path":{"type":"string"},"last_commit_id":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"ref":{"type":"string"},"size":{"type":"integer"}},"required":["file_name","file_path","size","encoding","ref","blob_id","commit_id","last_commit_id","execute_filemode","content_sha256"],"type":"object"}
```

</details>

<details><summary>file_raw</summary>

```json
{"additionalProperties":false,"properties":{"content":{"type":"string"},"content_category":{"type":"string"},"file_path":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"size":{"type":"integer"}},"required":["file_path","size","content","content_category"],"type":"object"}
```

</details>

<details><summary>file_raw_metadata</summary>

```json
{"additionalProperties":false,"properties":{"blob_id":{"type":"string"},"commit_id":{"type":"string"},"content_sha256":{"type":"string"},"encoding":{"type":"string"},"execute_filemode":{"type":"boolean"},"file_name":{"type":"string"},"file_path":{"type":"string"},"last_commit_id":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"ref":{"type":"string"},"size":{"type":"integer"}},"required":["file_name","file_path","size","encoding","ref","blob_id","commit_id","last_commit_id","execute_filemode","content_sha256"],"type":"object"}
```

</details>

<details><summary>file_update</summary>

```json
{"additionalProperties":false,"properties":{"branch":{"type":"string"},"commit_id":{"type":"string"},"file_path":{"type":"string"},"last_commit_id":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["file_path","branch"],"type":"object"}
```

</details>

<details><summary>list_submodules</summary>

```json
{"additionalProperties":false,"properties":{"count":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"submodules":{"items":{"additionalProperties":false,"properties":{"commit_sha":{"type":"string"},"name":{"type":"string"},"path":{"type":"string"},"resolved_project":{"type":"string"},"url":{"type":"string"}},"required":["name","path","url","commit_sha"],"type":"object"},"type":["null","array"]}},"required":["submodules","count"],"type":"object"}
```

</details>

<details><summary>markdown_render</summary>

```json
{"additionalProperties":false,"properties":{"html":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["html"],"type":"object"}
```

</details>

<details><summary>merge_base</summary>

```json
{"additionalProperties":false,"properties":{"author_email":{"type":"string"},"author_name":{"type":"string"},"authored_date":{"type":"string"},"committed_date":{"type":"string"},"committer_email":{"type":"string"},"committer_name":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"string"},"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"parent_ids":{"items":{"type":"string"},"type":["null","array"]},"project_id":{"type":"integer"},"short_id":{"type":"string"},"stats":{"additionalProperties":false,"properties":{"additions":{"type":"integer"},"deletions":{"type":"integer"},"total":{"type":"integer"}},"required":["additions","deletions","total"],"type":["null","object"]},"status":{"type":"string"},"title":{"type":"string"},"web_url":{"type":"string"}},"required":["id","short_id","title","author_name","author_email","committer_name","committer_email","committed_date","web_url"],"type":"object"}
```

</details>

<details><summary>raw_blob</summary>

```json
{"additionalProperties":false,"properties":{"content":{"type":"string"},"content_category":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"sha":{"type":"string"},"size":{"type":"integer"}},"required":["sha","size","content","content_category"],"type":"object"}
```

</details>

<details><summary>read_submodule_file</summary>

```json
{"additionalProperties":false,"properties":{"commit_sha":{"type":"string"},"content":{"type":"string"},"encoding":{"type":"string"},"file_name":{"type":"string"},"file_path":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"resolved_project":{"type":"string"},"size":{"type":"integer"},"submodule_path":{"type":"string"}},"required":["file_name","file_path","submodule_path","resolved_project","commit_sha","size","content","encoding"],"type":"object"}
```

</details>

<details><summary>tree</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"},"tree":{"items":{"additionalProperties":false,"properties":{"id":{"type":"string"},"mode":{"type":"string"},"name":{"type":"string"},"path":{"type":"string"},"type":{"type":"string"}},"required":["id","name","type","path","mode"],"type":"object"},"type":["null","array"]}},"required":["tree","pagination"],"type":"object"}
```

</details>

<details><summary>update_submodule</summary>

```json
{"additionalProperties":false,"properties":{"author_email":{"type":"string"},"author_name":{"type":"string"},"committed_date":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"string"},"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"short_id":{"type":"string"},"title":{"type":"string"}},"required":["id","short_id","title","author_name","author_email","message"],"type":"object"}
```

</details>

### gitlab_runner

**Runner**

Use {"action":"list","params":{...}}; only top-level keys are action and params.
Action params schema: gitlab://tools/gitlab_runner.<action>.
Parameter guidance:
- delete_registered.runner_id: runner_identifier; source: Use gitlab_runner_list, gitlab_runner_list_project, gitlab_runner_list_group, or gitlab_runner_get; runner_id is the global runner ID.; avoid: Do not pass project_id as runner_id., For project assignment actions, project_id identifies the project scope while runner_id identifies the runner.
- disable_project.project_id: scope_owner_project; source: Use gitlab_project get/list outputs; accepts numeric ID or namespace/project path.; avoid: project_id identifies the project scope, not the runner., Use runner_id for the runner to enable, disable, reset, or inspect.
- disable_project.runner_id: runner_identifier; source: Use gitlab_runner_list, gitlab_runner_list_project, gitlab_runner_list_group, or gitlab_runner_get; runner_id is the global runner ID.; avoid: Do not pass project_id as runner_id., For project assignment actions, project_id identifies the project scope while runner_id identifies the runner.
- enable_project.project_id: scope_owner_project; source: Use gitlab_project get/list outputs; accepts numeric ID or namespace/project path.; avoid: project_id identifies the project scope, not the runner., Use runner_id for the runner to enable, disable, reset, or inspect.
- enable_project.runner_id: runner_identifier; source: Use gitlab_runner_list, gitlab_runner_list_project, gitlab_runner_list_group, or gitlab_runner_get; runner_id is the global runner ID.; avoid: Do not pass project_id as runner_id., For project assignment actions, project_id identifies the project scope while runner_id identifies the runner.
- get.runner_id: runner_identifier; source: Use gitlab_runner_list, gitlab_runner_list_project, gitlab_runner_list_group, or gitlab_runner_get; runner_id is the global runner ID.; avoid: Do not pass project_id as runner_id., For project assignment actions, project_id identifies the project scope while runner_id identifies the runner.
- jobs.runner_id: runner_identifier; source: Use gitlab_runner_list, gitlab_runner_list_project, gitlab_runner_list_group, or gitlab_runner_get; runner_id is the global runner ID.; avoid: Do not pass project_id as runner_id., For project assignment actions, project_id identifies the project scope while runner_id identifies the runner.
- list_group.group_id: scope_owner_group; source: Use gitlab_group get/list outputs; accepts numeric ID or full group path.
- list_project.project_id: scope_owner_project; source: Use gitlab_project get/list outputs; accepts numeric ID or namespace/project path.; avoid: project_id identifies the project scope, not the runner., Use runner_id for the runner to enable, disable, reset, or inspect.
- remove.runner_id: runner_identifier; source: Use gitlab_runner_list, gitlab_runner_list_project, gitlab_runner_list_group, or gitlab_runner_get; runner_id is the global runner ID.; avoid: Do not pass project_id as runner_id., For project assignment actions, project_id identifies the project scope while runner_id identifies the runner.
- reset_group_reg_token.group_id: scope_owner_group; source: Use gitlab_group get/list outputs; accepts numeric ID or full group path.
- reset_project_reg_token.project_id: scope_owner_project; source: Use gitlab_project get/list outputs; accepts numeric ID or namespace/project path.; avoid: project_id identifies the project scope, not the runner., Use runner_id for the runner to enable, disable, reset, or inspect.
- reset_token.runner_id: runner_identifier; source: Use gitlab_runner_list, gitlab_runner_list_project, gitlab_runner_list_group, or gitlab_runner_get; runner_id is the global runner ID.; avoid: Do not pass project_id as runner_id., For project assignment actions, project_id identifies the project scope while runner_id identifies the runner.
- update.runner_id: runner_identifier; source: Use gitlab_runner_list, gitlab_runner_list_project, gitlab_runner_list_group, or gitlab_runner_get; runner_id is the global runner ID.; avoid: Do not pass project_id as runner_id., For project assignment actions, project_id identifies the project scope while runner_id identifies the runner.

Manage GitLab CI/CD runners (instance, group, project) and runner controllers (admin, experimental): CRUD, registration tokens, and job assignments. Remove/delete/revoke and reset_token actions are destructive — revoking the registration token only invalidates future registrations; already-registered runners keep operating using their existing runner authentication tokens.
Valid actions: controller_create, controller_delete, controller_get, controller_list, controller_scope_add_instance, controller_scope_add_runner, controller_scope_list, controller_scope_remove_instance, controller_scope_remove_runner, controller_token_create, controller_token_get, controller_token_list, controller_token_revoke, controller_token_rotate, controller_update, delete_by_token, delete_registered, disable_project, enable_project, get, jobs, list, list_all, list_group, list_managers, list_project, register, remove, reset_group_reg_token, reset_instance_reg_token, reset_project_reg_token, reset_token, update, verify

When to use: register or pause runners, change runner tags / access_level / maximum_timeout, attach or detach runners from a project / group, rotate registration tokens, drive runner controllers (CRUD + scopes + tokens) for admins.
NOT for: pipeline runs (use gitlab_pipeline), job logs / retry / play (use gitlab_job), CI variables (use gitlab_ci_variable), CI lint or templates (use gitlab_template), self-hosted GitLab Runner installation (out of scope — install via the GitLab Runner CLI).

Returns:
- list / list_all / list_project / list_group / list_managers / jobs / controller_list / controller_scope_list / controller_token_list: arrays with pagination {page, per_page, total, next_page}.
- get / update / register / reset_*_token / enable_project / controller_get / controller_create / controller_update / controller_scope_add_* / controller_token_get / controller_token_create / controller_token_rotate: runner / controller / token object. register and reset_*_token / controller_token_create / controller_token_rotate include the cleartext token only ONCE — store it securely.
- verify / remove / delete_registered / delete_by_token / disable_project / controller_delete / controller_scope_remove_* / controller_token_revoke: {success, message}.
Errors: 401/403 (hint: list_all / register with admin token / runner controller actions require admin), 404 (hint: runner_id and controller_id are global, project / group context only filters), 400 (hint: access_level ∈ not_protected / ref_protected; tag_list is a comma-separated string; deprecated reset_*_reg_token endpoints — prefer controller_token_create).

Param conventions: * = required. List actions accept page, per_page. Runner IDs are integers.

Runner CRUD:
- list: type, status, paused, tag_list (comma-separated)
- list_all: (admin) type, status, paused, tag_list
- get / remove: runner_id*
- update: runner_id*, description, paused, tag_list, run_untagged, locked, access_level, maximum_timeout, maintenance_note
- jobs: runner_id*, status (running/success/failed/canceled), order_by, sort, page, per_page

Project/Group runners:
- list_project: project_id*, type, status, tag_list
- enable_project: project_id*, runner_id*
- disable_project: project_id*, runner_id*
- list_group: group_id*, type, status, tag_list

Registration and tokens:
- register: token*, description, paused, locked, run_untagged, tag_list, access_level, maximum_timeout, maintenance_note
- delete_registered: runner_id*
- delete_by_token: token*
- verify: token*
- reset_token: runner_id*
- reset_instance_reg_token: (deprecated, no params)
- reset_group_reg_token: group_id* (deprecated)
- reset_project_reg_token: project_id* (deprecated)
- list_managers: runner_id*

Runner controllers (admin, experimental):
- controller_list
- controller_get / controller_delete: controller_id*
- controller_create: description, state (enabled/disabled/dry_run)
- controller_update: controller_id*, description, state

Controller scopes:
- controller_scope_list / controller_scope_add_instance / controller_scope_remove_instance: controller_id*
- controller_scope_add_runner / controller_scope_remove_runner: controller_id*, runner_id*

Controller tokens:
- controller_token_list: controller_id*
- controller_token_get / controller_token_rotate / controller_token_revoke: controller_id*, token_id*
- controller_token_create: controller_id*, description

See also: gitlab_pipeline, gitlab_job

Annotations: readOnly=false, destructive=true, idempotent=false, openWorld=true

**Action Output Schemas:**

<details><summary>controller_create</summary>

```json
{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"description":{"type":"string"},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"state":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","description","state"],"type":"object"}
```

</details>

<details><summary>controller_delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>controller_get</summary>

```json
{"additionalProperties":false,"properties":{"connected":{"type":"boolean"},"created_at":{"type":"string"},"description":{"type":"string"},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"state":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","description","state","connected"],"type":"object"}
```

</details>

<details><summary>controller_list</summary>

```json
{"additionalProperties":false,"properties":{"controllers":{"items":{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"description":{"type":"string"},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"state":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","description","state"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["controllers","pagination"],"type":"object"}
```

</details>

<details><summary>controller_scope_add_instance</summary>

```json
{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"updated_at":{"type":"string"}},"type":"object"}
```

</details>

<details><summary>controller_scope_add_runner</summary>

```json
{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"runner_id":{"type":"integer"},"updated_at":{"type":"string"}},"required":["runner_id"],"type":"object"}
```

</details>

<details><summary>controller_scope_list</summary>

```json
{"additionalProperties":false,"properties":{"instance_level_scopings":{"items":{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"updated_at":{"type":"string"}},"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"runner_level_scopings":{"items":{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"runner_id":{"type":"integer"},"updated_at":{"type":"string"}},"required":["runner_id"],"type":"object"},"type":["null","array"]}},"required":["instance_level_scopings","runner_level_scopings"],"type":"object"}
```

</details>

<details><summary>controller_scope_remove_instance</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>controller_scope_remove_runner</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>controller_token_create</summary>

```json
{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"description":{"type":"string"},"id":{"type":"integer"},"last_used_at":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"runner_controller_id":{"type":"integer"},"token":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","runner_controller_id","description"],"type":"object"}
```

</details>

<details><summary>controller_token_get</summary>

```json
{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"description":{"type":"string"},"id":{"type":"integer"},"last_used_at":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"runner_controller_id":{"type":"integer"},"token":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","runner_controller_id","description"],"type":"object"}
```

</details>

<details><summary>controller_token_list</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"},"tokens":{"items":{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"description":{"type":"string"},"id":{"type":"integer"},"last_used_at":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"runner_controller_id":{"type":"integer"},"token":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","runner_controller_id","description"],"type":"object"},"type":["null","array"]}},"required":["tokens","pagination"],"type":"object"}
```

</details>

<details><summary>controller_token_revoke</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>controller_token_rotate</summary>

```json
{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"description":{"type":"string"},"id":{"type":"integer"},"last_used_at":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"runner_controller_id":{"type":"integer"},"token":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","runner_controller_id","description"],"type":"object"}
```

</details>

<details><summary>controller_update</summary>

```json
{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"description":{"type":"string"},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"state":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","description","state"],"type":"object"}
```

</details>

<details><summary>delete_by_token</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>delete_registered</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>disable_project</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>enable_project</summary>

```json
{"additionalProperties":false,"properties":{"description":{"type":"string"},"id":{"type":"integer"},"is_shared":{"type":"boolean"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"online":{"type":"boolean"},"paused":{"type":"boolean"},"runner_type":{"type":"string"},"status":{"type":"string"}},"required":["id","description","name","paused","is_shared","runner_type","online","status"],"type":"object"}
```

</details>

<details><summary>get</summary>

```json
{"additionalProperties":false,"properties":{"access_level":{"type":"string"},"contacted_at":{"type":"string"},"description":{"type":"string"},"group_count":{"type":"integer"},"id":{"type":"integer"},"is_shared":{"type":"boolean"},"locked":{"type":"boolean"},"maintenance_note":{"type":"string"},"maximum_timeout":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"online":{"type":"boolean"},"paused":{"type":"boolean"},"project_count":{"type":"integer"},"run_untagged":{"type":"boolean"},"runner_type":{"type":"string"},"status":{"type":"string"},"tag_list":{"items":{"type":"string"},"type":["null","array"]}},"required":["id","description","name","paused","is_shared","runner_type","online","status","run_untagged","locked","access_level"],"type":"object"}
```

</details>

<details><summary>jobs</summary>

```json
{"additionalProperties":false,"properties":{"jobs":{"items":{"additionalProperties":false,"properties":{"allow_failure":{"type":"boolean"},"artifacts_expire_at":{"type":"string"},"commit_sha":{"type":"string"},"coverage":{"type":"number"},"created_at":{"type":"string"},"duration":{"type":"number"},"erased_at":{"type":"string"},"failure_reason":{"type":"string"},"finished_at":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pipeline_id":{"type":"integer"},"queued_duration":{"type":"number"},"ref":{"type":"string"},"runner_id":{"type":"integer"},"stage":{"type":"string"},"started_at":{"type":"string"},"status":{"type":"string"},"tag":{"type":"boolean"},"tag_list":{"items":{"type":"string"},"type":["null","array"]},"user_username":{"type":"string"},"web_url":{"type":"string"}},"required":["id","name","stage","status","ref","tag","allow_failure","duration","queued_duration","web_url","pipeline_id","created_at"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["jobs","pagination"],"type":"object"}
```

</details>

<details><summary>list</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"},"runners":{"items":{"additionalProperties":false,"properties":{"description":{"type":"string"},"id":{"type":"integer"},"is_shared":{"type":"boolean"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"online":{"type":"boolean"},"paused":{"type":"boolean"},"runner_type":{"type":"string"},"status":{"type":"string"}},"required":["id","description","name","paused","is_shared","runner_type","online","status"],"type":"object"},"type":["null","array"]}},"required":["runners","pagination"],"type":"object"}
```

</details>

<details><summary>list_all</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"},"runners":{"items":{"additionalProperties":false,"properties":{"description":{"type":"string"},"id":{"type":"integer"},"is_shared":{"type":"boolean"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"online":{"type":"boolean"},"paused":{"type":"boolean"},"runner_type":{"type":"string"},"status":{"type":"string"}},"required":["id","description","name","paused","is_shared","runner_type","online","status"],"type":"object"},"type":["null","array"]}},"required":["runners","pagination"],"type":"object"}
```

</details>

<details><summary>list_group</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"},"runners":{"items":{"additionalProperties":false,"properties":{"description":{"type":"string"},"id":{"type":"integer"},"is_shared":{"type":"boolean"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"online":{"type":"boolean"},"paused":{"type":"boolean"},"runner_type":{"type":"string"},"status":{"type":"string"}},"required":["id","description","name","paused","is_shared","runner_type","online","status"],"type":"object"},"type":["null","array"]}},"required":["runners","pagination"],"type":"object"}
```

</details>

<details><summary>list_managers</summary>

```json
{"additionalProperties":false,"properties":{"managers":{"items":{"additionalProperties":false,"properties":{"architecture":{"type":"string"},"contacted_at":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"integer"},"ip_address":{"type":"string"},"platform":{"type":"string"},"revision":{"type":"string"},"status":{"type":"string"},"system_id":{"type":"string"},"version":{"type":"string"}},"required":["id","system_id","version","revision","platform","architecture","ip_address","status"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["managers"],"type":"object"}
```

</details>

<details><summary>list_project</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"},"runners":{"items":{"additionalProperties":false,"properties":{"description":{"type":"string"},"id":{"type":"integer"},"is_shared":{"type":"boolean"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"online":{"type":"boolean"},"paused":{"type":"boolean"},"runner_type":{"type":"string"},"status":{"type":"string"}},"required":["id","description","name","paused","is_shared","runner_type","online","status"],"type":"object"},"type":["null","array"]}},"required":["runners","pagination"],"type":"object"}
```

</details>

<details><summary>register</summary>

```json
{"additionalProperties":false,"properties":{"description":{"type":"string"},"id":{"type":"integer"},"is_shared":{"type":"boolean"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"online":{"type":"boolean"},"paused":{"type":"boolean"},"runner_type":{"type":"string"},"status":{"type":"string"}},"required":["id","description","name","paused","is_shared","runner_type","online","status"],"type":"object"}
```

</details>

<details><summary>remove</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>reset_group_reg_token</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"token":{"type":"string"},"token_expires_at":{"type":"string"}},"required":["token"],"type":"object"}
```

</details>

<details><summary>reset_instance_reg_token</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"token":{"type":"string"},"token_expires_at":{"type":"string"}},"required":["token"],"type":"object"}
```

</details>

<details><summary>reset_project_reg_token</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"token":{"type":"string"},"token_expires_at":{"type":"string"}},"required":["token"],"type":"object"}
```

</details>

<details><summary>reset_token</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"token":{"type":"string"},"token_expires_at":{"type":"string"}},"required":["token"],"type":"object"}
```

</details>

<details><summary>update</summary>

```json
{"additionalProperties":false,"properties":{"access_level":{"type":"string"},"contacted_at":{"type":"string"},"description":{"type":"string"},"group_count":{"type":"integer"},"id":{"type":"integer"},"is_shared":{"type":"boolean"},"locked":{"type":"boolean"},"maintenance_note":{"type":"string"},"maximum_timeout":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"online":{"type":"boolean"},"paused":{"type":"boolean"},"project_count":{"type":"integer"},"run_untagged":{"type":"boolean"},"runner_type":{"type":"string"},"status":{"type":"string"},"tag_list":{"items":{"type":"string"},"type":["null","array"]}},"required":["id","description","name","paused","is_shared","runner_type","online","status","run_untagged","locked","access_level"],"type":"object"}
```

</details>

<details><summary>verify</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

### gitlab_search

**Search**

Use {"action":"code","params":{...}}; only top-level keys are action and params.
Action params schema: gitlab://tools/gitlab_search.<action>.
Action guidance:
- code: Search code blobs and file contents. Use for text, symbols, snippets, or filenames inside repositories; do not use for project or repository name discovery.
- projects: Search project records by project name, path, namespace, or description. Use when the task asks to find projects or repositories; do not use for code contents.

Search GitLab by scope (instance / group / project) for code, MRs, issues, commits, milestones, notes, projects, snippets, users, or wiki pages. Read-only.
When to use: full-text search across the supplied scope. Use action code for prompts like "search code for ..." or "find occurrences of ...". Most actions accept project_id and / or group_id; if both are omitted the search runs at instance level (an authenticated user always has implicit instance scope on GitLab.com).
NOT for: discovering a project from a git remote (use gitlab_discover_project), listing labels / milestones / issues with structured filters (use gitlab_project, gitlab_issue, gitlab_merge_request — those support filters like state/labels/milestone), reading a known file path's contents (use gitlab_repository file_get).

Scope precedence: project_id > group_id > global. Pagination: page, per_page (max 100). All actions need query*. Optional search_type selects the GitLab search backend: basic, advanced, or zoekt. The value must match the per-action schema enum and the requested backend must be enabled on the target GitLab instance.

Returns:
- code: array of {basename, data, path, ref, startline, project_id} blobs.
- merge_requests / issues: arrays of MR / issue objects.
- commits: array of {id, short_id, title, author_name, committed_date, project_id}.
- milestones / projects / snippets / users / wiki: arrays of resource summaries.
- notes: array of {id, body, notable_type, notable_id, notable_iid} entries.
All lists paginate with {page, per_page, total, next_page}.
Errors: 403 (hint: project_id / group_id must be visible to the caller), 404 (hint: project_id / group_id wrong or no permission), 400 (hint: query must not be empty; some scopes only support global — e.g. snippets; if search_type was supplied, retry without it or choose a backend enabled on this GitLab instance).

- code: query*, project_id, group_id, ref, search_type
- merge_requests / issues / commits / milestones / users / wiki: query*, project_id, group_id, search_type
- notes: query*, project_id* (project-scoped only), search_type
- projects: query*, group_id, search_type
- snippets: query*, search_type (global only)

See also: gitlab_discover_project (resolve git remote URL → project_id), gitlab_project / gitlab_merge_request / gitlab_issue (structured filtering).

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

**Action Output Schemas:**

<details><summary>code</summary>

```json
{"additionalProperties":false,"properties":{"blobs":{"items":{"additionalProperties":false,"properties":{"basename":{"type":"string"},"data":{"type":"string"},"filename":{"type":"string"},"path":{"type":"string"},"project_id":{"type":"integer"},"ref":{"type":"string"},"startline":{"type":"integer"}},"required":["basename","data","path","filename","ref","startline","project_id"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["blobs","pagination"],"type":"object"}
```

</details>

<details><summary>commits</summary>

```json
{"additionalProperties":false,"properties":{"commits":{"items":{"additionalProperties":false,"properties":{"author_email":{"type":"string"},"author_name":{"type":"string"},"authored_date":{"type":"string"},"committed_date":{"type":"string"},"committer_email":{"type":"string"},"committer_name":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"string"},"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"parent_ids":{"items":{"type":"string"},"type":["null","array"]},"project_id":{"type":"integer"},"short_id":{"type":"string"},"stats":{"additionalProperties":false,"properties":{"additions":{"type":"integer"},"deletions":{"type":"integer"},"total":{"type":"integer"}},"required":["additions","deletions","total"],"type":["null","object"]},"status":{"type":"string"},"title":{"type":"string"},"web_url":{"type":"string"}},"required":["id","short_id","title","author_name","author_email","committer_name","committer_email","committed_date","web_url"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["commits","pagination"],"type":"object"}
```

</details>

<details><summary>issues</summary>

```json
{"additionalProperties":false,"properties":{"issues":{"items":{"additionalProperties":false,"properties":{"assignees":{"items":{"type":"string"},"type":["null","array"]},"author":{"type":"string"},"closed_at":{"type":"string"},"closed_by":{"type":"string"},"confidential":{"type":"boolean"},"created_at":{"type":"string"},"description":{"type":"string"},"discussion_locked":{"type":"boolean"},"downvotes":{"type":"integer"},"due_date":{"type":"string"},"epic_issue_id":{"type":"integer"},"health_status":{"type":"string"},"id":{"type":"integer"},"issue_iid":{"type":"integer"},"issue_type":{"type":"string"},"labels":{"items":{"type":"string"},"type":["null","array"]},"merge_request_count":{"type":"integer"},"milestone":{"type":"string"},"moved_to_id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"project_id":{"type":"integer"},"references":{"type":"string"},"state":{"type":"string"},"subscribed":{"type":"boolean"},"task_completion_count":{"type":"integer"},"task_completion_total":{"type":"integer"},"time_estimate":{"type":"integer"},"title":{"type":"string"},"total_time_spent":{"type":"integer"},"updated_at":{"type":"string"},"upvotes":{"type":"integer"},"user_notes_count":{"type":"integer"},"web_url":{"type":"string"},"weight":{"type":"integer"}},"required":["id","issue_iid","title","description","state","labels","assignees","milestone","author","web_url","created_at","updated_at","closed_at","due_date","confidential","discussion_locked","project_id","subscribed"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["issues","pagination"],"type":"object"}
```

</details>

<details><summary>merge_requests</summary>

```json
{"additionalProperties":false,"properties":{"merge_requests":{"items":{"additionalProperties":false,"properties":{"allow_collaboration":{"type":"boolean"},"assignees":{"items":{"type":"string"},"type":["null","array"]},"author":{"type":"string"},"blocking_discussions_resolved":{"type":"boolean"},"changes_count":{"type":"string"},"closed_at":{"type":"string"},"closed_by":{"type":"string"},"created_at":{"type":"string"},"description":{"type":"string"},"diff_refs":{"additionalProperties":false,"properties":{"base_sha":{"type":"string"},"head_sha":{"type":"string"},"start_sha":{"type":"string"}},"required":["base_sha","head_sha","start_sha"],"type":["null","object"]},"discussion_locked":{"type":"boolean"},"diverged_commits_count":{"type":"integer"},"downvotes":{"type":"integer"},"draft":{"type":"boolean"},"first_contribution":{"type":"boolean"},"force_remove_source_branch":{"type":"boolean"},"has_conflicts":{"type":"boolean"},"head_pipeline_id":{"type":"integer"},"id":{"type":"integer"},"labels":{"items":{"type":"string"},"type":["null","array"]},"latest_build_finished_at":{"type":"string"},"latest_build_started_at":{"type":"string"},"merge_after":{"type":"string"},"merge_commit_sha":{"type":"string"},"merge_error":{"type":"string"},"merge_request_iid":{"type":"integer"},"merge_status":{"type":"string"},"merge_when_pipeline_succeeds":{"type":"boolean"},"merged_at":{"type":"string"},"merged_by":{"type":"string"},"milestone":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pipeline_id":{"type":"integer"},"pipeline_name":{"type":"string"},"pipeline_web_url":{"type":"string"},"prepared_at":{"type":"string"},"project_id":{"type":"integer"},"project_path":{"type":"string"},"rebase_in_progress":{"type":"boolean"},"references":{"type":"string"},"reviewers":{"items":{"type":"string"},"type":["null","array"]},"sha":{"type":"string"},"should_remove_source_branch":{"type":"boolean"},"source_branch":{"type":"string"},"source_project_id":{"type":"integer"},"squash":{"type":"boolean"},"squash_commit_sha":{"type":"string"},"squash_on_merge":{"type":"boolean"},"state":{"type":"string"},"subscribed":{"type":"boolean"},"target_branch":{"type":"string"},"target_project_id":{"type":"integer"},"task_completion_count":{"type":"integer"},"task_completion_total":{"type":"integer"},"time_estimate":{"type":"integer"},"title":{"type":"string"},"total_time_spent":{"type":"integer"},"updated_at":{"type":"string"},"upvotes":{"type":"integer"},"user_notes_count":{"type":"integer"},"web_url":{"type":"string"}},"required":["id","merge_request_iid","project_id","title","description","state","source_branch","target_branch","web_url","merge_status","draft","has_conflicts","blocking_discussions_resolved","discussion_locked","assignees","reviewers","labels","created_at","updated_at"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["merge_requests","pagination"],"type":"object"}
```

</details>

<details><summary>milestones</summary>

```json
{"additionalProperties":false,"properties":{"milestones":{"items":{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"description":{"type":"string"},"due_date":{"type":"string"},"expired":{"type":"boolean"},"group_id":{"type":"integer"},"id":{"type":"integer"},"iid":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"project_id":{"type":"integer"},"start_date":{"type":"string"},"state":{"type":"string"},"title":{"type":"string"},"updated_at":{"type":"string"},"web_url":{"type":"string"}},"required":["id","iid","project_id","title","description","state","start_date","due_date","web_url","created_at","updated_at","expired"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["milestones","pagination"],"type":"object"}
```

</details>

<details><summary>notes</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"notes":{"items":{"additionalProperties":false,"properties":{"author":{"type":"string"},"body":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"integer"},"notable_id":{"type":"integer"},"notable_iid":{"type":"integer"},"notable_type":{"type":"string"},"system":{"type":"boolean"},"updated_at":{"type":"string"}},"required":["id","body","author","created_at","updated_at","notable_type","notable_id","system"],"type":"object"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["notes","pagination"],"type":"object"}
```

</details>

<details><summary>projects</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"},"projects":{"items":{"additionalProperties":false,"properties":{"allow_merge_on_skipped_pipeline":{"type":"boolean"},"approvals_before_merge":{"type":"integer"},"archived":{"type":"boolean"},"autoclose_referenced_issues":{"type":"boolean"},"avatar_url":{"type":"string"},"build_timeout":{"type":"integer"},"ci_config_path":{"type":"string"},"compliance_frameworks":{"items":{"type":"string"},"type":["null","array"]},"container_registry_enabled":{"type":"boolean"},"created_at":{"type":"string"},"creator_id":{"type":"integer"},"default_branch":{"type":"string"},"description":{"type":"string"},"empty_repo":{"type":"boolean"},"forked_from_project":{"type":"string"},"forks_count":{"type":"integer"},"http_url_to_repo":{"type":"string"},"id":{"type":"integer"},"import_url":{"type":"string"},"issues_enabled":{"type":"boolean"},"jobs_enabled":{"type":"boolean"},"last_activity_at":{"type":"string"},"lfs_enabled":{"type":"boolean"},"marked_for_deletion_on":{"type":"string"},"merge_commit_template":{"type":"string"},"merge_method":{"type":"string"},"merge_pipelines_enabled":{"type":"boolean"},"merge_request_title_regex":{"type":"string"},"merge_request_title_regex_description":{"type":"string"},"merge_requests_enabled":{"type":"boolean"},"merge_trains_enabled":{"type":"boolean"},"name":{"type":"string"},"name_with_namespace":{"type":"string"},"namespace":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"only_allow_merge_if_all_discussions_are_resolved":{"type":"boolean"},"only_allow_merge_if_pipeline_succeeds":{"type":"boolean"},"open_issues_count":{"type":"integer"},"package_registry_access_level":{"type":"string"},"packages_enabled":{"type":"boolean"},"path":{"type":"string"},"path_with_namespace":{"type":"string"},"protect_merge_request_pipelines":{"type":["null","boolean"]},"public_builds":{"type":"boolean"},"readme_url":{"type":"string"},"remove_source_branch_after_merge":{"type":"boolean"},"request_access_enabled":{"type":"boolean"},"resolve_outdated_diff_discussions":{"type":"boolean"},"shared_runners_enabled":{"type":"boolean"},"snippets_enabled":{"type":"boolean"},"squash_commit_template":{"type":"string"},"squash_option":{"type":"string"},"ssh_url_to_repo":{"type":"string"},"star_count":{"type":"integer"},"suggestion_commit_message":{"type":"string"},"topics":{"items":{"type":"string"},"type":["null","array"]},"updated_at":{"type":"string"},"visibility":{"type":"string"},"web_url":{"type":"string"},"wiki_enabled":{"type":"boolean"}},"required":["id","name","path","path_with_namespace","visibility","default_branch","web_url","description","archived","topics","only_allow_merge_if_pipeline_succeeds","only_allow_merge_if_all_discussions_are_resolved","remove_source_branch_after_merge","created_at","request_access_enabled","issues_enabled","merge_requests_enabled","wiki_enabled","jobs_enabled","lfs_enabled","allow_merge_on_skipped_pipeline","merge_pipelines_enabled","merge_trains_enabled","autoclose_referenced_issues","resolve_outdated_diff_discussions"],"type":"object"},"type":["null","array"]}},"required":["projects","pagination"],"type":"object"}
```

</details>

<details><summary>snippets</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"},"snippets":{"items":{"additionalProperties":false,"properties":{"author":{"type":"string"},"created_at":{"type":"string"},"description":{"type":"string"},"file_name":{"type":"string"},"id":{"type":"integer"},"project_id":{"type":"integer"},"raw_url":{"type":"string"},"title":{"type":"string"},"updated_at":{"type":"string"},"visibility":{"type":"string"},"web_url":{"type":"string"}},"required":["id","title","file_name","description","visibility","author","web_url","raw_url","created_at","updated_at"],"type":"object"},"type":["null","array"]}},"required":["snippets","pagination"],"type":"object"}
```

</details>

<details><summary>users</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"},"users":{"items":{"additionalProperties":false,"properties":{"avatar_url":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"state":{"type":"string"},"username":{"type":"string"},"web_url":{"type":"string"}},"required":["id","username","name","state","avatar_url","web_url"],"type":"object"},"type":["null","array"]}},"required":["users","pagination"],"type":"object"}
```

</details>

<details><summary>wiki</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"},"wiki_blobs":{"items":{"additionalProperties":false,"properties":{"content":{"type":"string"},"format":{"type":"string"},"slug":{"type":"string"},"title":{"type":"string"}},"required":["slug","title","content","format"],"type":"object"},"type":["null","array"]}},"required":["wiki_blobs","pagination"],"type":"object"}
```

</details>

### gitlab_snippet

**Snippet**

Use {"action":"list","params":{...}}; only top-level keys are action and params.
Action params schema: gitlab://tools/gitlab_snippet.<action>.

Manage GitLab snippets (personal, project-scoped, and explore feed): CRUD snippet metadata and content, threaded discussions, notes (project snippets only), and award emoji on snippets and snippet notes. Delete is destructive and irreversible.
When to use: store/share standalone code or text outside a repo, comment on existing snippets, react with emoji on a snippet or snippet note, browse public snippets via explore.
NOT for: files in a repository (use gitlab_repository), wiki pages (use gitlab_wiki), MR/issue notes (use gitlab_mr_review or gitlab_issue), custom group emoji (use gitlab_custom_emoji — enterprise).

Returns:
- *_list / list_all / explore: array with pagination.
- *_get / *_create / *_update: snippet object {id, title, file_name, files, visibility, author, web_url, raw_url}.
- content / project_content: raw snippet body as text.
- file_content: raw content of a single file in a multi-file snippet.
- discussion_* / note_*: discussion or note object.
- emoji_*: award emoji object.
- *_delete: {success: bool, message: string}.
Errors: 404 not found, 403 forbidden (hint: requires Reporter+ for project snippets; private snippets require ownership), 400 invalid params (hint: visibility ∈ private/internal/public).

Param conventions: * = required. List actions accept page, per_page. visibility ∈ private/internal/public.

Personal snippets:
- list / list_all / explore: (no required params)
- get / content: snippet_id*
- file_content: snippet_id*, file_path*
- create: title*, file_name*, content*, visibility, description
- update: snippet_id*, title, file_name, content, visibility, description
- delete: snippet_id*

Project snippets:
- project_list: project_id*
- project_get / project_content: project_id*, snippet_id*
- project_create: project_id*, title*, file_name*, content*, visibility
- project_update: project_id*, snippet_id*, title, visibility, files* to change snippet file content. For updating existing content use files: [{"action":"update","file_path":"<returned file_path>","content":"..."}]; do not put file_path/content directly under params.
- project_delete: project_id*, snippet_id*

Discussions (threaded):
- discussion_list: snippet_id*
- discussion_get: snippet_id*, discussion_id*
- discussion_create: snippet_id*, body*
- discussion_add_note: snippet_id*, discussion_id*, body*
- discussion_update_note: snippet_id*, discussion_id*, note_id*, body*
- discussion_delete_note: snippet_id*, discussion_id*, note_id*

Notes (project snippets only) — all need project_id*, snippet_id*:
- note_list: order_by, sort
- note_get / note_delete: note_id*
- note_create: body*
- note_update: note_id*, body*

Award emoji — all need project_id*, snippet_id* (snippet emoji) or project_id*, snippet_id*, note_id* (note emoji):
- emoji_snippet_list / emoji_snippet_note_list: (no extra params)
- emoji_snippet_get / emoji_snippet_note_get: award_id*
- emoji_snippet_create / emoji_snippet_note_create: name*
- emoji_snippet_delete / emoji_snippet_note_delete: award_id*

See also: gitlab_repository (project files and commits), gitlab_wiki (long-form project docs), gitlab_project (project membership and visibility), gitlab_custom_emoji (define group-level custom emoji).

Annotations: readOnly=false, destructive=true, idempotent=false, openWorld=true

**Action Output Schemas:**

<details><summary>content</summary>

```json
{"additionalProperties":false,"properties":{"content":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"snippet_id":{"type":"integer"}},"required":["snippet_id","content"],"type":"object"}
```

</details>

<details><summary>create</summary>

```json
{"additionalProperties":false,"properties":{"author":{"additionalProperties":false,"properties":{"email":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"state":{"type":"string"},"username":{"type":"string"}},"required":["id","username","name","email","state"],"type":"object"},"created_at":{"type":["null","string"]},"description":{"type":"string"},"file_name":{"type":"string"},"files":{"items":{"additionalProperties":false,"properties":{"path":{"type":"string"},"raw_url":{"type":"string"}},"required":["path","raw_url"],"type":"object"},"type":["null","array"]},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"project_id":{"type":"integer"},"raw_url":{"type":"string"},"title":{"type":"string"},"updated_at":{"type":["null","string"]},"visibility":{"type":"string"},"web_url":{"type":"string"}},"required":["id","title","file_name","description","visibility","author","web_url","raw_url"],"type":"object"}
```

</details>

<details><summary>delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>discussion_add_note</summary>

```json
{"additionalProperties":false,"properties":{"author":{"type":"string"},"body":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"system":{"type":"boolean"},"updated_at":{"type":"string"}},"required":["id","body","author","created_at","system"],"type":"object"}
```

</details>

<details><summary>discussion_create</summary>

```json
{"additionalProperties":false,"properties":{"id":{"type":"string"},"individual_note":{"type":"boolean"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"notes":{"items":{"additionalProperties":false,"properties":{"author":{"type":"string"},"body":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"system":{"type":"boolean"},"updated_at":{"type":"string"}},"required":["id","body","author","created_at","system"],"type":"object"},"type":["null","array"]}},"required":["id","individual_note","notes"],"type":"object"}
```

</details>

<details><summary>discussion_delete_note</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>discussion_get</summary>

```json
{"additionalProperties":false,"properties":{"id":{"type":"string"},"individual_note":{"type":"boolean"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"notes":{"items":{"additionalProperties":false,"properties":{"author":{"type":"string"},"body":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"system":{"type":"boolean"},"updated_at":{"type":"string"}},"required":["id","body","author","created_at","system"],"type":"object"},"type":["null","array"]}},"required":["id","individual_note","notes"],"type":"object"}
```

</details>

<details><summary>discussion_list</summary>

```json
{"additionalProperties":false,"properties":{"discussions":{"items":{"additionalProperties":false,"properties":{"id":{"type":"string"},"individual_note":{"type":"boolean"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"notes":{"items":{"additionalProperties":false,"properties":{"author":{"type":"string"},"body":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"system":{"type":"boolean"},"updated_at":{"type":"string"}},"required":["id","body","author","created_at","system"],"type":"object"},"type":["null","array"]}},"required":["id","individual_note","notes"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["discussions","pagination"],"type":"object"}
```

</details>

<details><summary>discussion_update_note</summary>

```json
{"additionalProperties":false,"properties":{"author":{"type":"string"},"body":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"system":{"type":"boolean"},"updated_at":{"type":"string"}},"required":["id","body","author","created_at","system"],"type":"object"}
```

</details>

<details><summary>emoji_snippet_create</summary>

```json
{"additionalProperties":false,"properties":{"awardable_id":{"type":"integer"},"awardable_type":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"user_id":{"type":"integer"},"user_web_url":{"type":"string"},"username":{"type":"string"}},"required":["id","name","user_id","username","awardable_id","awardable_type"],"type":"object"}
```

</details>

<details><summary>emoji_snippet_delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>emoji_snippet_get</summary>

```json
{"additionalProperties":false,"properties":{"awardable_id":{"type":"integer"},"awardable_type":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"user_id":{"type":"integer"},"user_web_url":{"type":"string"},"username":{"type":"string"}},"required":["id","name","user_id","username","awardable_id","awardable_type"],"type":"object"}
```

</details>

<details><summary>emoji_snippet_list</summary>

```json
{"additionalProperties":false,"properties":{"award_emoji":{"items":{"additionalProperties":false,"properties":{"awardable_id":{"type":"integer"},"awardable_type":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"user_id":{"type":"integer"},"user_web_url":{"type":"string"},"username":{"type":"string"}},"required":["id","name","user_id","username","awardable_id","awardable_type"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["award_emoji","pagination"],"type":"object"}
```

</details>

<details><summary>emoji_snippet_note_create</summary>

```json
{"additionalProperties":false,"properties":{"awardable_id":{"type":"integer"},"awardable_type":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"user_id":{"type":"integer"},"user_web_url":{"type":"string"},"username":{"type":"string"}},"required":["id","name","user_id","username","awardable_id","awardable_type"],"type":"object"}
```

</details>

<details><summary>emoji_snippet_note_delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>emoji_snippet_note_get</summary>

```json
{"additionalProperties":false,"properties":{"awardable_id":{"type":"integer"},"awardable_type":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"user_id":{"type":"integer"},"user_web_url":{"type":"string"},"username":{"type":"string"}},"required":["id","name","user_id","username","awardable_id","awardable_type"],"type":"object"}
```

</details>

<details><summary>emoji_snippet_note_list</summary>

```json
{"additionalProperties":false,"properties":{"award_emoji":{"items":{"additionalProperties":false,"properties":{"awardable_id":{"type":"integer"},"awardable_type":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"user_id":{"type":"integer"},"user_web_url":{"type":"string"},"username":{"type":"string"}},"required":["id","name","user_id","username","awardable_id","awardable_type"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["award_emoji","pagination"],"type":"object"}
```

</details>

<details><summary>explore</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"},"snippets":{"items":{"additionalProperties":false,"properties":{"author":{"additionalProperties":false,"properties":{"email":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"state":{"type":"string"},"username":{"type":"string"}},"required":["id","username","name","email","state"],"type":"object"},"created_at":{"type":["null","string"]},"description":{"type":"string"},"file_name":{"type":"string"},"files":{"items":{"additionalProperties":false,"properties":{"path":{"type":"string"},"raw_url":{"type":"string"}},"required":["path","raw_url"],"type":"object"},"type":["null","array"]},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"project_id":{"type":"integer"},"raw_url":{"type":"string"},"title":{"type":"string"},"updated_at":{"type":["null","string"]},"visibility":{"type":"string"},"web_url":{"type":"string"}},"required":["id","title","file_name","description","visibility","author","web_url","raw_url"],"type":"object"},"type":["null","array"]}},"required":["snippets","pagination"],"type":"object"}
```

</details>

<details><summary>file_content</summary>

```json
{"additionalProperties":false,"properties":{"content":{"type":"string"},"file_name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"ref":{"type":"string"},"snippet_id":{"type":"integer"}},"required":["snippet_id","ref","file_name","content"],"type":"object"}
```

</details>

<details><summary>get</summary>

```json
{"additionalProperties":false,"properties":{"author":{"additionalProperties":false,"properties":{"email":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"state":{"type":"string"},"username":{"type":"string"}},"required":["id","username","name","email","state"],"type":"object"},"created_at":{"type":["null","string"]},"description":{"type":"string"},"file_name":{"type":"string"},"files":{"items":{"additionalProperties":false,"properties":{"path":{"type":"string"},"raw_url":{"type":"string"}},"required":["path","raw_url"],"type":"object"},"type":["null","array"]},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"project_id":{"type":"integer"},"raw_url":{"type":"string"},"title":{"type":"string"},"updated_at":{"type":["null","string"]},"visibility":{"type":"string"},"web_url":{"type":"string"}},"required":["id","title","file_name","description","visibility","author","web_url","raw_url"],"type":"object"}
```

</details>

<details><summary>list</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"},"snippets":{"items":{"additionalProperties":false,"properties":{"author":{"additionalProperties":false,"properties":{"email":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"state":{"type":"string"},"username":{"type":"string"}},"required":["id","username","name","email","state"],"type":"object"},"created_at":{"type":["null","string"]},"description":{"type":"string"},"file_name":{"type":"string"},"files":{"items":{"additionalProperties":false,"properties":{"path":{"type":"string"},"raw_url":{"type":"string"}},"required":["path","raw_url"],"type":"object"},"type":["null","array"]},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"project_id":{"type":"integer"},"raw_url":{"type":"string"},"title":{"type":"string"},"updated_at":{"type":["null","string"]},"visibility":{"type":"string"},"web_url":{"type":"string"}},"required":["id","title","file_name","description","visibility","author","web_url","raw_url"],"type":"object"},"type":["null","array"]}},"required":["snippets","pagination"],"type":"object"}
```

</details>

<details><summary>list_all</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"},"snippets":{"items":{"additionalProperties":false,"properties":{"author":{"additionalProperties":false,"properties":{"email":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"state":{"type":"string"},"username":{"type":"string"}},"required":["id","username","name","email","state"],"type":"object"},"created_at":{"type":["null","string"]},"description":{"type":"string"},"file_name":{"type":"string"},"files":{"items":{"additionalProperties":false,"properties":{"path":{"type":"string"},"raw_url":{"type":"string"}},"required":["path","raw_url"],"type":"object"},"type":["null","array"]},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"project_id":{"type":"integer"},"raw_url":{"type":"string"},"title":{"type":"string"},"updated_at":{"type":["null","string"]},"visibility":{"type":"string"},"web_url":{"type":"string"}},"required":["id","title","file_name","description","visibility","author","web_url","raw_url"],"type":"object"},"type":["null","array"]}},"required":["snippets","pagination"],"type":"object"}
```

</details>

<details><summary>note_create</summary>

```json
{"additionalProperties":false,"properties":{"author":{"type":"string"},"body":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"notable_id":{"type":"integer"},"notable_type":{"type":"string"},"system":{"type":"boolean"},"updated_at":{"type":"string"}},"required":["id","body","author","created_at","system"],"type":"object"}
```

</details>

<details><summary>note_delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>note_get</summary>

```json
{"additionalProperties":false,"properties":{"author":{"type":"string"},"body":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"notable_id":{"type":"integer"},"notable_type":{"type":"string"},"system":{"type":"boolean"},"updated_at":{"type":"string"}},"required":["id","body","author","created_at","system"],"type":"object"}
```

</details>

<details><summary>note_list</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"notes":{"items":{"additionalProperties":false,"properties":{"author":{"type":"string"},"body":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"notable_id":{"type":"integer"},"notable_type":{"type":"string"},"system":{"type":"boolean"},"updated_at":{"type":"string"}},"required":["id","body","author","created_at","system"],"type":"object"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["notes","pagination"],"type":"object"}
```

</details>

<details><summary>note_update</summary>

```json
{"additionalProperties":false,"properties":{"author":{"type":"string"},"body":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"notable_id":{"type":"integer"},"notable_type":{"type":"string"},"system":{"type":"boolean"},"updated_at":{"type":"string"}},"required":["id","body","author","created_at","system"],"type":"object"}
```

</details>

<details><summary>project_content</summary>

```json
{"additionalProperties":false,"properties":{"content":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"snippet_id":{"type":"integer"}},"required":["snippet_id","content"],"type":"object"}
```

</details>

<details><summary>project_create</summary>

```json
{"additionalProperties":false,"properties":{"author":{"additionalProperties":false,"properties":{"email":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"state":{"type":"string"},"username":{"type":"string"}},"required":["id","username","name","email","state"],"type":"object"},"created_at":{"type":["null","string"]},"description":{"type":"string"},"file_name":{"type":"string"},"files":{"items":{"additionalProperties":false,"properties":{"path":{"type":"string"},"raw_url":{"type":"string"}},"required":["path","raw_url"],"type":"object"},"type":["null","array"]},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"project_id":{"type":"integer"},"raw_url":{"type":"string"},"title":{"type":"string"},"updated_at":{"type":["null","string"]},"visibility":{"type":"string"},"web_url":{"type":"string"}},"required":["id","title","file_name","description","visibility","author","web_url","raw_url"],"type":"object"}
```

</details>

<details><summary>project_delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>project_get</summary>

```json
{"additionalProperties":false,"properties":{"author":{"additionalProperties":false,"properties":{"email":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"state":{"type":"string"},"username":{"type":"string"}},"required":["id","username","name","email","state"],"type":"object"},"created_at":{"type":["null","string"]},"description":{"type":"string"},"file_name":{"type":"string"},"files":{"items":{"additionalProperties":false,"properties":{"path":{"type":"string"},"raw_url":{"type":"string"}},"required":["path","raw_url"],"type":"object"},"type":["null","array"]},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"project_id":{"type":"integer"},"raw_url":{"type":"string"},"title":{"type":"string"},"updated_at":{"type":["null","string"]},"visibility":{"type":"string"},"web_url":{"type":"string"}},"required":["id","title","file_name","description","visibility","author","web_url","raw_url"],"type":"object"}
```

</details>

<details><summary>project_list</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"},"snippets":{"items":{"additionalProperties":false,"properties":{"author":{"additionalProperties":false,"properties":{"email":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"state":{"type":"string"},"username":{"type":"string"}},"required":["id","username","name","email","state"],"type":"object"},"created_at":{"type":["null","string"]},"description":{"type":"string"},"file_name":{"type":"string"},"files":{"items":{"additionalProperties":false,"properties":{"path":{"type":"string"},"raw_url":{"type":"string"}},"required":["path","raw_url"],"type":"object"},"type":["null","array"]},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"project_id":{"type":"integer"},"raw_url":{"type":"string"},"title":{"type":"string"},"updated_at":{"type":["null","string"]},"visibility":{"type":"string"},"web_url":{"type":"string"}},"required":["id","title","file_name","description","visibility","author","web_url","raw_url"],"type":"object"},"type":["null","array"]}},"required":["snippets","pagination"],"type":"object"}
```

</details>

<details><summary>project_update</summary>

```json
{"additionalProperties":false,"properties":{"author":{"additionalProperties":false,"properties":{"email":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"state":{"type":"string"},"username":{"type":"string"}},"required":["id","username","name","email","state"],"type":"object"},"created_at":{"type":["null","string"]},"description":{"type":"string"},"file_name":{"type":"string"},"files":{"items":{"additionalProperties":false,"properties":{"path":{"type":"string"},"raw_url":{"type":"string"}},"required":["path","raw_url"],"type":"object"},"type":["null","array"]},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"project_id":{"type":"integer"},"raw_url":{"type":"string"},"title":{"type":"string"},"updated_at":{"type":["null","string"]},"visibility":{"type":"string"},"web_url":{"type":"string"}},"required":["id","title","file_name","description","visibility","author","web_url","raw_url"],"type":"object"}
```

</details>

<details><summary>update</summary>

```json
{"additionalProperties":false,"properties":{"author":{"additionalProperties":false,"properties":{"email":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"state":{"type":"string"},"username":{"type":"string"}},"required":["id","username","name","email","state"],"type":"object"},"created_at":{"type":["null","string"]},"description":{"type":"string"},"file_name":{"type":"string"},"files":{"items":{"additionalProperties":false,"properties":{"path":{"type":"string"},"raw_url":{"type":"string"}},"required":["path","raw_url"],"type":"object"},"type":["null","array"]},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"project_id":{"type":"integer"},"raw_url":{"type":"string"},"title":{"type":"string"},"updated_at":{"type":["null","string"]},"visibility":{"type":"string"},"web_url":{"type":"string"}},"required":["id","title","file_name","description","visibility","author","web_url","raw_url"],"type":"object"}
```

</details>

### gitlab_storage_move

**Storage Move**

Use {"action":"get_project","params":{...}}; only top-level keys are action and params.
Action params schema: gitlab://tools/gitlab_storage_move.<action>.

Manage repository storage moves for projects, groups, and snippets (admin only).
Returns: JSON with resource data. Lists include pagination (page, per_page, total, next_page). Errors: 404 not found, 403 forbidden — with actionable hints.

Param conventions: * = required. retrieve_all/list actions accept page, per_page. Each resource type (project/group/snippet) has the same action pattern.

Project storage moves:
- retrieve_all_project: page, per_page
- retrieve_project: project_id*, page, per_page
- get_project: id*
- get_project_for_project: project_id*, id*
- schedule_project: project_id*, destination_storage_name
- schedule_all_project: source_storage_name, destination_storage_name

Group storage moves:
- retrieve_all_group: page, per_page
- retrieve_group: group_id*, page, per_page
- get_group: id*
- get_group_for_group: group_id*, id*
- schedule_group: group_id*, destination_storage_name
- schedule_all_group: source_storage_name, destination_storage_name

Snippet storage moves:
- retrieve_all_snippet: page, per_page
- retrieve_snippet: snippet_id*, page, per_page
- get_snippet: id*
- get_snippet_for_snippet: snippet_id*, id*
- schedule_snippet: snippet_id*, destination_storage_name
- schedule_all_snippet: source_storage_name, destination_storage_name

See also: gitlab_admin

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

**Action Output Schemas:**

<details><summary>get_group</summary>

```json
{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"destination_storage_name":{"type":"string"},"group":{"additionalProperties":false,"properties":{"id":{"type":"integer"},"name":{"type":"string"},"web_url":{"type":"string"}},"required":["id","name"],"type":["null","object"]},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"source_storage_name":{"type":"string"},"state":{"type":"string"}},"required":["id","created_at","state","source_storage_name","destination_storage_name"],"type":"object"}
```

</details>

<details><summary>get_group_for_group</summary>

```json
{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"destination_storage_name":{"type":"string"},"group":{"additionalProperties":false,"properties":{"id":{"type":"integer"},"name":{"type":"string"},"web_url":{"type":"string"}},"required":["id","name"],"type":["null","object"]},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"source_storage_name":{"type":"string"},"state":{"type":"string"}},"required":["id","created_at","state","source_storage_name","destination_storage_name"],"type":"object"}
```

</details>

<details><summary>get_project</summary>

```json
{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"destination_storage_name":{"type":"string"},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"project":{"additionalProperties":false,"properties":{"id":{"type":"integer"},"name":{"type":"string"},"path_with_namespace":{"type":"string"}},"required":["id","name","path_with_namespace"],"type":["null","object"]},"source_storage_name":{"type":"string"},"state":{"type":"string"}},"required":["id","created_at","state","source_storage_name","destination_storage_name"],"type":"object"}
```

</details>

<details><summary>get_project_for_project</summary>

```json
{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"destination_storage_name":{"type":"string"},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"project":{"additionalProperties":false,"properties":{"id":{"type":"integer"},"name":{"type":"string"},"path_with_namespace":{"type":"string"}},"required":["id","name","path_with_namespace"],"type":["null","object"]},"source_storage_name":{"type":"string"},"state":{"type":"string"}},"required":["id","created_at","state","source_storage_name","destination_storage_name"],"type":"object"}
```

</details>

<details><summary>get_snippet</summary>

```json
{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"destination_storage_name":{"type":"string"},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"snippet":{"additionalProperties":false,"properties":{"id":{"type":"integer"},"title":{"type":"string"},"web_url":{"type":"string"}},"required":["id","title"],"type":["null","object"]},"source_storage_name":{"type":"string"},"state":{"type":"string"}},"required":["id","created_at","state","source_storage_name","destination_storage_name"],"type":"object"}
```

</details>

<details><summary>get_snippet_for_snippet</summary>

```json
{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"destination_storage_name":{"type":"string"},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"snippet":{"additionalProperties":false,"properties":{"id":{"type":"integer"},"title":{"type":"string"},"web_url":{"type":"string"}},"required":["id","title"],"type":["null","object"]},"source_storage_name":{"type":"string"},"state":{"type":"string"}},"required":["id","created_at","state","source_storage_name","destination_storage_name"],"type":"object"}
```

</details>

<details><summary>retrieve_all_group</summary>

```json
{"additionalProperties":false,"properties":{"moves":{"items":{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"destination_storage_name":{"type":"string"},"group":{"additionalProperties":false,"properties":{"id":{"type":"integer"},"name":{"type":"string"},"web_url":{"type":"string"}},"required":["id","name"],"type":["null","object"]},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"source_storage_name":{"type":"string"},"state":{"type":"string"}},"required":["id","created_at","state","source_storage_name","destination_storage_name"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["moves","pagination"],"type":"object"}
```

</details>

<details><summary>retrieve_all_project</summary>

```json
{"additionalProperties":false,"properties":{"moves":{"items":{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"destination_storage_name":{"type":"string"},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"project":{"additionalProperties":false,"properties":{"id":{"type":"integer"},"name":{"type":"string"},"path_with_namespace":{"type":"string"}},"required":["id","name","path_with_namespace"],"type":["null","object"]},"source_storage_name":{"type":"string"},"state":{"type":"string"}},"required":["id","created_at","state","source_storage_name","destination_storage_name"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["moves","pagination"],"type":"object"}
```

</details>

<details><summary>retrieve_all_snippet</summary>

```json
{"additionalProperties":false,"properties":{"moves":{"items":{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"destination_storage_name":{"type":"string"},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"snippet":{"additionalProperties":false,"properties":{"id":{"type":"integer"},"title":{"type":"string"},"web_url":{"type":"string"}},"required":["id","title"],"type":["null","object"]},"source_storage_name":{"type":"string"},"state":{"type":"string"}},"required":["id","created_at","state","source_storage_name","destination_storage_name"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["moves","pagination"],"type":"object"}
```

</details>

<details><summary>retrieve_group</summary>

```json
{"additionalProperties":false,"properties":{"moves":{"items":{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"destination_storage_name":{"type":"string"},"group":{"additionalProperties":false,"properties":{"id":{"type":"integer"},"name":{"type":"string"},"web_url":{"type":"string"}},"required":["id","name"],"type":["null","object"]},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"source_storage_name":{"type":"string"},"state":{"type":"string"}},"required":["id","created_at","state","source_storage_name","destination_storage_name"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["moves","pagination"],"type":"object"}
```

</details>

<details><summary>retrieve_project</summary>

```json
{"additionalProperties":false,"properties":{"moves":{"items":{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"destination_storage_name":{"type":"string"},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"project":{"additionalProperties":false,"properties":{"id":{"type":"integer"},"name":{"type":"string"},"path_with_namespace":{"type":"string"}},"required":["id","name","path_with_namespace"],"type":["null","object"]},"source_storage_name":{"type":"string"},"state":{"type":"string"}},"required":["id","created_at","state","source_storage_name","destination_storage_name"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["moves","pagination"],"type":"object"}
```

</details>

<details><summary>retrieve_snippet</summary>

```json
{"additionalProperties":false,"properties":{"moves":{"items":{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"destination_storage_name":{"type":"string"},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"snippet":{"additionalProperties":false,"properties":{"id":{"type":"integer"},"title":{"type":"string"},"web_url":{"type":"string"}},"required":["id","title"],"type":["null","object"]},"source_storage_name":{"type":"string"},"state":{"type":"string"}},"required":["id","created_at","state","source_storage_name","destination_storage_name"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["moves","pagination"],"type":"object"}
```

</details>

<details><summary>schedule_all_group</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["message"],"type":"object"}
```

</details>

<details><summary>schedule_all_project</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["message"],"type":"object"}
```

</details>

<details><summary>schedule_all_snippet</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["message"],"type":"object"}
```

</details>

<details><summary>schedule_group</summary>

```json
{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"destination_storage_name":{"type":"string"},"group":{"additionalProperties":false,"properties":{"id":{"type":"integer"},"name":{"type":"string"},"web_url":{"type":"string"}},"required":["id","name"],"type":["null","object"]},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"source_storage_name":{"type":"string"},"state":{"type":"string"}},"required":["id","created_at","state","source_storage_name","destination_storage_name"],"type":"object"}
```

</details>

<details><summary>schedule_project</summary>

```json
{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"destination_storage_name":{"type":"string"},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"project":{"additionalProperties":false,"properties":{"id":{"type":"integer"},"name":{"type":"string"},"path_with_namespace":{"type":"string"}},"required":["id","name","path_with_namespace"],"type":["null","object"]},"source_storage_name":{"type":"string"},"state":{"type":"string"}},"required":["id","created_at","state","source_storage_name","destination_storage_name"],"type":"object"}
```

</details>

<details><summary>schedule_snippet</summary>

```json
{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"destination_storage_name":{"type":"string"},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"snippet":{"additionalProperties":false,"properties":{"id":{"type":"integer"},"title":{"type":"string"},"web_url":{"type":"string"}},"required":["id","title"],"type":["null","object"]},"source_storage_name":{"type":"string"},"state":{"type":"string"}},"required":["id","created_at","state","source_storage_name","destination_storage_name"],"type":"object"}
```

</details>

### gitlab_tag

**Tag**

Use {"action":"list","params":{...}}; only top-level keys are action and params.
Action params schema: gitlab://tools/gitlab_tag.<action>.

Manage Git tags and tag protections in a project, plus GPG signature inspection. Delete is destructive and also removes any release attached to the tag.
When to use: create/list/delete tags, protect or unprotect tag patterns, verify a tag's GPG/X.509 signature.
NOT for: releases (use gitlab_release — a release wraps a tag with notes/assets), branches (use gitlab_branch), repository file/commit operations (use gitlab_repository).

Returns:
- list / list_protected: array of {name, target, message, protected, ...} with pagination.
- get / create / get_protected / protect: tag or protection object.
- get_signature: {signature_type, gpg_key_id, verification_status, ...} or X.509 equivalent.
- delete / unprotect: {success: bool, message: string}.
Errors: 404 not found, 403 forbidden (hint: requires Maintainer+ to protect/unprotect), 400 invalid params (hint: tag name must not exist for create).

Param conventions: * = required. All actions need project_id*. Access levels: 0 = no one, 30 = Developer, 40 = Maintainer.

- create: project_id*, tag_name*, ref* (branch/tag/SHA), message (annotated tag if non-empty)
- get / delete: project_id*, tag_name*
- list: project_id*, search, order_by (name/updated/version), sort (asc/desc)
- get_signature: project_id*, tag_name*
- list_protected: project_id*
- get_protected / unprotect: project_id*, tag_name*
- protect: project_id*, tag_name* (literal or wildcard e.g. 'v*'), create_access_level (0/30/40), allowed_to_create (array of {user_id|group_id|deploy_key_id|access_level})

See also: gitlab_release (releases use tags as anchors), gitlab_repository (commits referenced by tags), gitlab_branch (branches).

Annotations: readOnly=false, destructive=true, idempotent=false, openWorld=true

**Action Output Schemas:**

<details><summary>create</summary>

```json
{"additionalProperties":false,"properties":{"commit_message":{"type":"string"},"commit_sha":{"type":"string"},"created_at":{"type":"string"},"message":{"type":"string"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"protected":{"type":"boolean"},"target":{"type":"string"}},"required":["name","target","message","protected"],"type":"object"}
```

</details>

<details><summary>delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>get</summary>

```json
{"additionalProperties":false,"properties":{"commit_message":{"type":"string"},"commit_sha":{"type":"string"},"created_at":{"type":"string"},"message":{"type":"string"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"protected":{"type":"boolean"},"target":{"type":"string"}},"required":["name","target","message","protected"],"type":"object"}
```

</details>

<details><summary>get_protected</summary>

```json
{"additionalProperties":false,"properties":{"create_access_levels":{"items":{"additionalProperties":false,"properties":{"access_level":{"type":"integer"},"access_level_description":{"type":"string"},"deploy_key_id":{"type":"integer"},"group_id":{"type":"integer"},"id":{"type":"integer"},"user_id":{"type":"integer"}},"required":["id","access_level","access_level_description"],"type":"object"},"type":["null","array"]},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["name","create_access_levels"],"type":"object"}
```

</details>

<details><summary>get_signature</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"signature_type":{"type":"string"},"verification_status":{"type":"string"},"x509_certificate":{"additionalProperties":false,"properties":{"certificate_status":{"type":"string"},"email":{"type":"string"},"id":{"type":"integer"},"serial_number":{"type":"string"},"subject":{"type":"string"},"subject_key_identifier":{"type":"string"},"x509_issuer":{"additionalProperties":false,"properties":{"crl_url":{"type":"string"},"id":{"type":"integer"},"subject":{"type":"string"},"subject_key_identifier":{"type":"string"}},"required":["id","subject","subject_key_identifier"],"type":"object"}},"required":["id","subject","subject_key_identifier","email","serial_number","certificate_status","x509_issuer"],"type":"object"}},"required":["signature_type","verification_status","x509_certificate"],"type":"object"}
```

</details>

<details><summary>list</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"},"tags":{"items":{"additionalProperties":false,"properties":{"commit_message":{"type":"string"},"commit_sha":{"type":"string"},"created_at":{"type":"string"},"message":{"type":"string"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"protected":{"type":"boolean"},"target":{"type":"string"}},"required":["name","target","message","protected"],"type":"object"},"type":["null","array"]}},"required":["tags","pagination"],"type":"object"}
```

</details>

<details><summary>list_protected</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"},"tags":{"items":{"additionalProperties":false,"properties":{"create_access_levels":{"items":{"additionalProperties":false,"properties":{"access_level":{"type":"integer"},"access_level_description":{"type":"string"},"deploy_key_id":{"type":"integer"},"group_id":{"type":"integer"},"id":{"type":"integer"},"user_id":{"type":"integer"}},"required":["id","access_level","access_level_description"],"type":"object"},"type":["null","array"]},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["name","create_access_levels"],"type":"object"},"type":["null","array"]}},"required":["tags","pagination"],"type":"object"}
```

</details>

<details><summary>protect</summary>

```json
{"additionalProperties":false,"properties":{"create_access_levels":{"items":{"additionalProperties":false,"properties":{"access_level":{"type":"integer"},"access_level_description":{"type":"string"},"deploy_key_id":{"type":"integer"},"group_id":{"type":"integer"},"id":{"type":"integer"},"user_id":{"type":"integer"}},"required":["id","access_level","access_level_description"],"type":"object"},"type":["null","array"]},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["name","create_access_levels"],"type":"object"}
```

</details>

<details><summary>unprotect</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

### gitlab_template

**Template**

Use {"action":"ci_yml_get","params":{...}}; only top-level keys are action and params.
Action params schema: gitlab://tools/gitlab_template.<action>.

Browse GitLab built-in templates (gitignore, CI/CD YAML, Dockerfile, license, project scaffolding) and lint CI configuration. Read-only; ci_lint may resolve `include:` directives that fetch remote URLs.
When to use: discover available built-in templates, fetch a template body to commit into a project, validate a .gitlab-ci.yml before pushing, or list project scaffolds.
NOT for: reusable Catalog components published by groups (use gitlab_ci_catalog), running pipelines (use gitlab_pipeline), CI/CD variables (use gitlab_ci_variable), repository files (use gitlab_repository).

Returns:
- *_list: [{key, name}] with pagination (page, per_page, total, next_page).
- *_get: {name, content} — paste `content` into the target file.
- lint / lint_project: {valid (bool), errors: [string], warnings: [string], merged_yaml (string), jobs: [...] when include_jobs=true}.
Errors: 404 not found (hint: check key or template_type), 403 forbidden, 400 invalid params (hint: content required for lint, project_id required for project_template_*).

Param conventions: * = required. template_type ∈ {dockerfiles, gitignores, gitlab_ci_ymls, licenses}.

CI lint:
- lint: project_id*, content*, dry_run (bool), include_jobs (bool), ref
- lint_project: project_id*, content_ref, dry_run (bool), dry_run_ref, include_jobs (bool), ref

Global templates:
- ci_yml_list / dockerfile_list / gitignore_list: page, per_page
- ci_yml_get / dockerfile_get / gitignore_get: key*
- license_list: page, per_page, popular (bool)
- license_get: key*, project, fullname

Project templates:
- project_template_list: project_id*, template_type*, page, per_page
- project_template_get: project_id*, template_type*, key*

See also: gitlab_ci_catalog (reusable Catalog components), gitlab_pipeline (run pipelines), gitlab_project (project membership/settings).

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

**Action Output Schemas:**

<details><summary>ci_yml_get</summary>

```json
{"additionalProperties":false,"properties":{"content":{"type":"string"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["name","content"],"type":"object"}
```

</details>

<details><summary>ci_yml_list</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"},"templates":{"items":{"additionalProperties":false,"properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"type":"object"},"type":["null","array"]}},"required":["templates","pagination"],"type":"object"}
```

</details>

<details><summary>dockerfile_get</summary>

```json
{"additionalProperties":false,"properties":{"content":{"type":"string"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["name","content"],"type":"object"}
```

</details>

<details><summary>dockerfile_list</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"},"templates":{"items":{"additionalProperties":false,"properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"type":"object"},"type":["null","array"]}},"required":["templates","pagination"],"type":"object"}
```

</details>

<details><summary>gitignore_get</summary>

```json
{"additionalProperties":false,"properties":{"content":{"type":"string"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["name","content"],"type":"object"}
```

</details>

<details><summary>gitignore_list</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"},"templates":{"items":{"additionalProperties":false,"properties":{"key":{"type":"string"},"name":{"type":"string"}},"required":["key","name"],"type":"object"},"type":["null","array"]}},"required":["templates","pagination"],"type":"object"}
```

</details>

<details><summary>license_get</summary>

```json
{"additionalProperties":false,"properties":{"conditions":{"items":{"type":"string"},"type":["null","array"]},"content":{"type":"string"},"description":{"type":"string"},"featured":{"type":"boolean"},"html_url":{"type":"string"},"key":{"type":"string"},"limitations":{"items":{"type":"string"},"type":["null","array"]},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"nickname":{"type":"string"},"permissions":{"items":{"type":"string"},"type":["null","array"]},"source_url":{"type":"string"}},"required":["key","name","featured"],"type":"object"}
```

</details>

<details><summary>license_list</summary>

```json
{"additionalProperties":false,"properties":{"licenses":{"items":{"additionalProperties":false,"properties":{"conditions":{"items":{"type":"string"},"type":["null","array"]},"content":{"type":"string"},"description":{"type":"string"},"featured":{"type":"boolean"},"html_url":{"type":"string"},"key":{"type":"string"},"limitations":{"items":{"type":"string"},"type":["null","array"]},"name":{"type":"string"},"nickname":{"type":"string"},"permissions":{"items":{"type":"string"},"type":["null","array"]},"source_url":{"type":"string"}},"required":["key","name","featured"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["licenses","pagination"],"type":"object"}
```

</details>

<details><summary>lint</summary>

```json
{"additionalProperties":false,"properties":{"errors":{"items":{"type":"string"},"type":["null","array"]},"includes":{"items":{"additionalProperties":false,"properties":{"context_project":{"type":"string"},"location":{"type":"string"},"type":{"type":"string"}},"required":["type","location"],"type":"object"},"type":["null","array"]},"merged_yaml":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"valid":{"type":"boolean"},"warnings":{"items":{"type":"string"},"type":["null","array"]}},"required":["valid"],"type":"object"}
```

</details>

<details><summary>lint_project</summary>

```json
{"additionalProperties":false,"properties":{"errors":{"items":{"type":"string"},"type":["null","array"]},"includes":{"items":{"additionalProperties":false,"properties":{"context_project":{"type":"string"},"location":{"type":"string"},"type":{"type":"string"}},"required":["type","location"],"type":"object"},"type":["null","array"]},"merged_yaml":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"valid":{"type":"boolean"},"warnings":{"items":{"type":"string"},"type":["null","array"]}},"required":["valid"],"type":"object"}
```

</details>

<details><summary>project_template_get</summary>

```json
{"additionalProperties":false,"properties":{"conditions":{"items":{"type":"string"},"type":["null","array"]},"content":{"type":"string"},"description":{"type":"string"},"html_url":{"type":"string"},"key":{"type":"string"},"limitations":{"items":{"type":"string"},"type":["null","array"]},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"nickname":{"type":"string"},"permissions":{"items":{"type":"string"},"type":["null","array"]},"popular":{"type":"boolean"},"source_url":{"type":"string"}},"required":["key","name"],"type":"object"}
```

</details>

<details><summary>project_template_list</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"},"templates":{"items":{"additionalProperties":false,"properties":{"conditions":{"items":{"type":"string"},"type":["null","array"]},"content":{"type":"string"},"description":{"type":"string"},"html_url":{"type":"string"},"key":{"type":"string"},"limitations":{"items":{"type":"string"},"type":["null","array"]},"name":{"type":"string"},"nickname":{"type":"string"},"permissions":{"items":{"type":"string"},"type":["null","array"]},"popular":{"type":"boolean"},"source_url":{"type":"string"}},"required":["key","name"],"type":"object"},"type":["null","array"]}},"required":["templates","pagination"],"type":"object"}
```

</details>

### gitlab_user

**User**

Use {"action":"list","params":{...}}; only top-level keys are action and params.
Action params schema: gitlab://tools/gitlab_user.<action>.

User management for GitLab: full user account CRUD plus SSH/GPG keys, emails, personal access tokens (PATs), impersonation tokens, user status, todos, contribution events, notification settings, namespaces, and avatars. This is the canonical user management tool — covers the entire /users API surface. Delete / block / ban / reject actions are destructive.
When to use: any user-management workflow — user CRUD (create / modify / delete / block / unblock / ban / unban / approve / reject / activate / deactivate), SSH/GPG key management, personal access token (PAT) management, impersonation tokens (admin), todos, contribution events, notification settings, namespaces, avatars, current-user status. NOT for: deploy tokens or project/group access tokens (use gitlab_access), instance-wide admin operations (use gitlab_admin), project/group memberships (use gitlab_project / gitlab_group).

Param conventions: * = required. User IDs are integers. List actions accept page, per_page. Actions ending in _for_user take the same params as the base action plus user_id*. Plain ssh_keys / gpg_keys / emails (no suffix) operate on the current authenticated user with no params.

Current user:
- current: returns authenticated user info. The legacy alias me is accepted and normalized to current, but current is the canonical action to emit.
- current_user_status: returns emoji, message, availability.
- set_status: emoji, message, availability (not_set/busy), clear_status_after (30_minutes/3_hours/8_hours/1_day/3_days/7_days/30_days)

User CRUD (admin):
- list: search, username, active, blocked, external, order_by, sort
- get: user_id*
- get_status: user_id*
- create: email*, name*, username*, password, reset_password, force_random_password, skip_confirmation, admin, external, bio, location, job_title, organization, projects_limit, note
- modify: user_id*, email, name, username, bio, location, job_title, organization, projects_limit, admin, external, note
- delete: user_id*
- associations_count: user_id*

User state (admin):
- block / unblock / ban / unban / activate / deactivate / approve / reject / disable_two_factor: user_id*

SSH keys:
- get_ssh_key: key_id*
- get_ssh_key_for_user: user_id*, key_id*
- add_ssh_key: title*, key*, expires_at, usage_type (auth/signing)
- delete_ssh_key: key_id*
- delete_ssh_key_for_user: user_id*, key_id*

GPG keys:
- get_gpg_key: key_id*
- get_gpg_key_for_user: user_id*, key_id*
- add_gpg_key: key* (armored GPG public key)
- delete_gpg_key: key_id*
- delete_gpg_key_for_user: user_id*, key_id*

Emails:
- get_email: email_id*
- add_email: email*, skip_confirmation
- add_email_for_user: user_id*, email*, skip_confirmation
- delete_email: email_id*
- delete_email_for_user: user_id*, email_id*

Tokens:
- list_impersonation_tokens: user_id*, state (active/inactive)
- get_impersonation_token: user_id*, token_id*
- create_impersonation_token: user_id*, name*, scopes*, expires_at
- revoke_impersonation_token: user_id*, token_id*
- create_personal_access_token: user_id*, name*, scopes*, description, expires_at
- create_current_user_pat: name*, scopes*, description, expires_at

Activity and events:
- activities: (admin) from (YYYY-MM-DD)
- memberships: user_id*, type (Project/Namespace)
- contribution_events: user_id*, action, target_type, before, after, sort
- event_list_project: project_id*, action, target_type, before, after, sort
- event_list_contributions: action, target_type, before, after, sort

Todos:
- todo_list: action, author_id, project_id, group_id, state (pending/done), type
- todo_mark_done: id*
- todo_mark_all_done: no params

Notifications:
- notification_global_get / notification_global_update: no ID needed. Update params: level, notification_email, event booleans
- notification_project_get / notification_project_update: project_id*. Update params: level, event booleans
- notification_group_get / notification_group_update: group_id*. Update params: level, event booleans

Keys and namespaces:
- key_get_with_user: key_id*. Returns SSH key with user info.
- key_get_by_fingerprint: fingerprint*
- namespace_list: search, owned_only
- namespace_get: namespace_id*
- namespace_exists: namespace*, parent_id
- namespace_search: search*
- avatar_get: email*, size

Misc:
- create_runner: runner_type*, group_id, project_id, description, paused, locked, run_untagged, tag_list, access_level, maximum_timeout, maintenance_note
- delete_identity: user_id*, provider*

Service Accounts (Premium+ — GITLAB_ENTERPRISE=true):
- create_service_account: name, username, email
- list_service_accounts: order_by, sort

See also: gitlab_access (deploy/access tokens), gitlab_admin (instance administration)

Annotations: readOnly=false, destructive=true, idempotent=false, openWorld=true

**Action Output Schemas:**

<details><summary>activate</summary>

```json
{"additionalProperties":false,"properties":{"action":{"type":"string"},"success":{"type":"boolean"},"user_id":{"type":"integer"}},"required":["user_id","action","success"],"type":"object"}
```

</details>

<details><summary>activities</summary>

```json
{"additionalProperties":false,"properties":{"activities":{"items":{"additionalProperties":false,"properties":{"last_activity_on":{"type":"string"},"username":{"type":"string"}},"required":["username"],"type":"object"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["activities","pagination"],"type":"object"}
```

</details>

<details><summary>add_email</summary>

```json
{"additionalProperties":false,"properties":{"confirmed_at":{"type":"string"},"email":{"type":"string"},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["id","email"],"type":"object"}
```

</details>

<details><summary>add_email_for_user</summary>

```json
{"additionalProperties":false,"properties":{"confirmed_at":{"type":"string"},"email":{"type":"string"},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["id","email"],"type":"object"}
```

</details>

<details><summary>add_gpg_key</summary>

```json
{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"id":{"type":"integer"},"key":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["id","key"],"type":"object"}
```

</details>

<details><summary>add_gpg_key_for_user</summary>

```json
{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"id":{"type":"integer"},"key":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["id","key"],"type":"object"}
```

</details>

<details><summary>add_ssh_key</summary>

```json
{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"expires_at":{"type":"string"},"id":{"type":"integer"},"key":{"type":"string"},"title":{"type":"string"},"usage_type":{"type":"string"}},"required":["id","title","key"],"type":"object"}
```

</details>

<details><summary>add_ssh_key_for_user</summary>

```json
{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"expires_at":{"type":"string"},"id":{"type":"integer"},"key":{"type":"string"},"title":{"type":"string"},"usage_type":{"type":"string"}},"required":["id","title","key"],"type":"object"}
```

</details>

<details><summary>approve</summary>

```json
{"additionalProperties":false,"properties":{"action":{"type":"string"},"success":{"type":"boolean"},"user_id":{"type":"integer"}},"required":["user_id","action","success"],"type":"object"}
```

</details>

<details><summary>associations_count</summary>

```json
{"additionalProperties":false,"properties":{"groups_count":{"type":"integer"},"issues_count":{"type":"integer"},"merge_requests_count":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"projects_count":{"type":"integer"}},"required":["groups_count","projects_count","issues_count","merge_requests_count"],"type":"object"}
```

</details>

<details><summary>avatar_get</summary>

```json
{"additionalProperties":false,"properties":{"avatar_url":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["avatar_url"],"type":"object"}
```

</details>

<details><summary>ban</summary>

```json
{"additionalProperties":false,"properties":{"action":{"type":"string"},"success":{"type":"boolean"},"user_id":{"type":"integer"}},"required":["user_id","action","success"],"type":"object"}
```

</details>

<details><summary>block</summary>

```json
{"additionalProperties":false,"properties":{"action":{"type":"string"},"success":{"type":"boolean"},"user_id":{"type":"integer"}},"required":["user_id","action","success"],"type":"object"}
```

</details>

<details><summary>contribution_events</summary>

```json
{"additionalProperties":false,"properties":{"events":{"items":{"additionalProperties":false,"properties":{"action_name":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"integer"},"project_id":{"type":"integer"},"target_id":{"type":"integer"},"target_iid":{"type":"integer"},"target_title":{"type":"string"},"target_type":{"type":"string"},"target_url":{"type":"string"},"title":{"type":"string"}},"required":["id","project_id","action_name"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["events","pagination"],"type":"object"}
```

</details>

<details><summary>create</summary>

```json
{"additionalProperties":false,"properties":{"avatar_url":{"type":"string"},"bio":{"type":"string"},"bot":{"type":"boolean"},"can_create_group":{"type":"boolean"},"can_create_project":{"type":"boolean"},"color_scheme_id":{"type":"integer"},"created_at":{"type":"string"},"current_sign_in_at":{"type":"string"},"email":{"type":"string"},"external":{"type":"boolean"},"id":{"type":"integer"},"is_admin":{"type":"boolean"},"job_title":{"type":"string"},"last_activity_on":{"type":"string"},"location":{"type":"string"},"locked":{"type":"boolean"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"note":{"type":"string"},"organization":{"type":"string"},"private_profile":{"type":"boolean"},"projects_limit":{"type":"integer"},"public_email":{"type":"string"},"scim_identities":{"items":{"additionalProperties":false,"properties":{"active":{"type":"boolean"},"extern_uid":{"type":"string"},"group_id":{"type":"integer"}},"required":["extern_uid","group_id","active"],"type":"object"},"type":["null","array"]},"state":{"type":"string"},"theme_id":{"type":"integer"},"two_factor_enabled":{"type":"boolean"},"username":{"type":"string"},"using_license_seat":{"type":"boolean"},"web_url":{"type":"string"},"website_url":{"type":"string"}},"required":["id","username","email","name","state","web_url","avatar_url","is_admin","bot","two_factor_enabled","external","locked","private_profile","projects_limit","can_create_project","can_create_group","using_license_seat"],"type":"object"}
```

</details>

<details><summary>create_current_user_pat</summary>

```json
{"additionalProperties":false,"properties":{"active":{"type":"boolean"},"created_at":{"type":"string"},"description":{"type":"string"},"expires_at":{"type":"string"},"id":{"type":"integer"},"last_used_at":{"type":"string"},"name":{"type":"string"},"revoked":{"type":"boolean"},"scopes":{"items":{"type":"string"},"type":["null","array"]},"token":{"type":"string"},"user_id":{"type":"integer"}},"required":["id","name","active","scopes","revoked","user_id"],"type":"object"}
```

</details>

<details><summary>create_impersonation_token</summary>

```json
{"additionalProperties":false,"properties":{"active":{"type":"boolean"},"created_at":{"type":"string"},"expires_at":{"type":"string"},"id":{"type":"integer"},"last_used_at":{"type":"string"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"revoked":{"type":"boolean"},"scopes":{"items":{"type":"string"},"type":["null","array"]},"token":{"type":"string"}},"required":["id","name","active","scopes","revoked"],"type":"object"}
```

</details>

<details><summary>create_personal_access_token</summary>

```json
{"additionalProperties":false,"properties":{"active":{"type":"boolean"},"created_at":{"type":"string"},"description":{"type":"string"},"expires_at":{"type":"string"},"id":{"type":"integer"},"last_used_at":{"type":"string"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"revoked":{"type":"boolean"},"scopes":{"items":{"type":"string"},"type":["null","array"]},"token":{"type":"string"},"user_id":{"type":"integer"}},"required":["id","name","active","scopes","revoked","user_id"],"type":"object"}
```

</details>

<details><summary>create_runner</summary>

```json
{"additionalProperties":false,"properties":{"id":{"type":"integer"},"token":{"type":"string"},"token_expires_at":{"type":"string"}},"required":["id","token"],"type":"object"}
```

</details>

<details><summary>create_service_account</summary>

```json
{"additionalProperties":false,"properties":{"avatar_url":{"type":"string"},"bio":{"type":"string"},"bot":{"type":"boolean"},"can_create_group":{"type":"boolean"},"can_create_project":{"type":"boolean"},"color_scheme_id":{"type":"integer"},"created_at":{"type":"string"},"current_sign_in_at":{"type":"string"},"email":{"type":"string"},"external":{"type":"boolean"},"id":{"type":"integer"},"is_admin":{"type":"boolean"},"job_title":{"type":"string"},"last_activity_on":{"type":"string"},"location":{"type":"string"},"locked":{"type":"boolean"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"note":{"type":"string"},"organization":{"type":"string"},"private_profile":{"type":"boolean"},"projects_limit":{"type":"integer"},"public_email":{"type":"string"},"scim_identities":{"items":{"additionalProperties":false,"properties":{"active":{"type":"boolean"},"extern_uid":{"type":"string"},"group_id":{"type":"integer"}},"required":["extern_uid","group_id","active"],"type":"object"},"type":["null","array"]},"state":{"type":"string"},"theme_id":{"type":"integer"},"two_factor_enabled":{"type":"boolean"},"username":{"type":"string"},"using_license_seat":{"type":"boolean"},"web_url":{"type":"string"},"website_url":{"type":"string"}},"required":["id","username","email","name","state","web_url","avatar_url","is_admin","bot","two_factor_enabled","external","locked","private_profile","projects_limit","can_create_project","can_create_group","using_license_seat"],"type":"object"}
```

</details>

<details><summary>current</summary>

```json
{"additionalProperties":false,"properties":{"avatar_url":{"type":"string"},"bio":{"type":"string"},"bot":{"type":"boolean"},"can_create_group":{"type":"boolean"},"can_create_project":{"type":"boolean"},"color_scheme_id":{"type":"integer"},"created_at":{"type":"string"},"current_sign_in_at":{"type":"string"},"email":{"type":"string"},"external":{"type":"boolean"},"id":{"type":"integer"},"is_admin":{"type":"boolean"},"job_title":{"type":"string"},"last_activity_on":{"type":"string"},"location":{"type":"string"},"locked":{"type":"boolean"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"note":{"type":"string"},"organization":{"type":"string"},"private_profile":{"type":"boolean"},"projects_limit":{"type":"integer"},"public_email":{"type":"string"},"scim_identities":{"items":{"additionalProperties":false,"properties":{"active":{"type":"boolean"},"extern_uid":{"type":"string"},"group_id":{"type":"integer"}},"required":["extern_uid","group_id","active"],"type":"object"},"type":["null","array"]},"state":{"type":"string"},"theme_id":{"type":"integer"},"two_factor_enabled":{"type":"boolean"},"username":{"type":"string"},"using_license_seat":{"type":"boolean"},"web_url":{"type":"string"},"website_url":{"type":"string"}},"required":["id","username","email","name","state","web_url","avatar_url","is_admin","bot","two_factor_enabled","external","locked","private_profile","projects_limit","can_create_project","can_create_group","using_license_seat"],"type":"object"}
```

</details>

<details><summary>current_user_status</summary>

```json
{"additionalProperties":false,"properties":{"availability":{"type":"string"},"clear_status_at":{"type":"string"},"emoji":{"type":"string"},"message":{"type":"string"},"message_html":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"type":"object"}
```

</details>

<details><summary>deactivate</summary>

```json
{"additionalProperties":false,"properties":{"action":{"type":"string"},"success":{"type":"boolean"},"user_id":{"type":"integer"}},"required":["user_id","action","success"],"type":"object"}
```

</details>

<details><summary>delete</summary>

```json
{"additionalProperties":false,"properties":{"deleted":{"type":"boolean"},"user_id":{"type":"integer"}},"required":["user_id","deleted"],"type":"object"}
```

</details>

<details><summary>delete_email</summary>

```json
{"additionalProperties":false,"properties":{"deleted":{"type":"boolean"},"email_id":{"type":"integer"}},"required":["email_id","deleted"],"type":"object"}
```

</details>

<details><summary>delete_email_for_user</summary>

```json
{"additionalProperties":false,"properties":{"deleted":{"type":"boolean"},"email_id":{"type":"integer"}},"required":["email_id","deleted"],"type":"object"}
```

</details>

<details><summary>delete_gpg_key</summary>

```json
{"additionalProperties":false,"properties":{"deleted":{"type":"boolean"},"key_id":{"type":"integer"}},"required":["key_id","deleted"],"type":"object"}
```

</details>

<details><summary>delete_gpg_key_for_user</summary>

```json
{"additionalProperties":false,"properties":{"deleted":{"type":"boolean"},"key_id":{"type":"integer"}},"required":["key_id","deleted"],"type":"object"}
```

</details>

<details><summary>delete_identity</summary>

```json
{"additionalProperties":false,"properties":{"deleted":{"type":"boolean"},"provider":{"type":"string"},"user_id":{"type":"integer"}},"required":["user_id","provider","deleted"],"type":"object"}
```

</details>

<details><summary>delete_ssh_key</summary>

```json
{"additionalProperties":false,"properties":{"deleted":{"type":"boolean"},"key_id":{"type":"integer"}},"required":["key_id","deleted"],"type":"object"}
```

</details>

<details><summary>delete_ssh_key_for_user</summary>

```json
{"additionalProperties":false,"properties":{"deleted":{"type":"boolean"},"key_id":{"type":"integer"}},"required":["key_id","deleted"],"type":"object"}
```

</details>

<details><summary>disable_two_factor</summary>

```json
{"additionalProperties":false,"properties":{"action":{"type":"string"},"success":{"type":"boolean"},"user_id":{"type":"integer"}},"required":["user_id","action","success"],"type":"object"}
```

</details>

<details><summary>emails</summary>

```json
{"additionalProperties":false,"properties":{"emails":{"items":{"additionalProperties":false,"properties":{"confirmed_at":{"type":"string"},"email":{"type":"string"},"id":{"type":"integer"}},"required":["id","email"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["emails"],"type":"object"}
```

</details>

<details><summary>emails_for_user</summary>

```json
{"additionalProperties":false,"properties":{"emails":{"items":{"additionalProperties":false,"properties":{"confirmed_at":{"type":"string"},"email":{"type":"string"},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["id","email"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["emails"],"type":"object"}
```

</details>

<details><summary>event_list_contributions</summary>

```json
{"additionalProperties":false,"properties":{"events":{"items":{"additionalProperties":false,"properties":{"action_name":{"type":"string"},"author_id":{"type":"integer"},"author_username":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"integer"},"project_id":{"type":"integer"},"target_id":{"type":"integer"},"target_iid":{"type":"integer"},"target_title":{"type":"string"},"target_type":{"type":"string"},"target_url":{"type":"string"},"title":{"type":"string"}},"required":["id","project_id","action_name","author_id"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["events","pagination"],"type":"object"}
```

</details>

<details><summary>event_list_project</summary>

```json
{"additionalProperties":false,"properties":{"events":{"items":{"additionalProperties":false,"properties":{"action_name":{"type":"string"},"author_id":{"type":"integer"},"author_username":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"integer"},"project_id":{"type":"integer"},"target_id":{"type":"integer"},"target_iid":{"type":"integer"},"target_title":{"type":"string"},"target_type":{"type":"string"},"target_url":{"type":"string"},"title":{"type":"string"}},"required":["id","project_id","action_name","author_id"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["events","pagination"],"type":"object"}
```

</details>

<details><summary>get</summary>

```json
{"additionalProperties":false,"properties":{"avatar_url":{"type":"string"},"bio":{"type":"string"},"bot":{"type":"boolean"},"can_create_group":{"type":"boolean"},"can_create_project":{"type":"boolean"},"color_scheme_id":{"type":"integer"},"created_at":{"type":"string"},"current_sign_in_at":{"type":"string"},"email":{"type":"string"},"external":{"type":"boolean"},"id":{"type":"integer"},"is_admin":{"type":"boolean"},"job_title":{"type":"string"},"last_activity_on":{"type":"string"},"location":{"type":"string"},"locked":{"type":"boolean"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"note":{"type":"string"},"organization":{"type":"string"},"private_profile":{"type":"boolean"},"projects_limit":{"type":"integer"},"public_email":{"type":"string"},"scim_identities":{"items":{"additionalProperties":false,"properties":{"active":{"type":"boolean"},"extern_uid":{"type":"string"},"group_id":{"type":"integer"}},"required":["extern_uid","group_id","active"],"type":"object"},"type":["null","array"]},"state":{"type":"string"},"theme_id":{"type":"integer"},"two_factor_enabled":{"type":"boolean"},"username":{"type":"string"},"using_license_seat":{"type":"boolean"},"web_url":{"type":"string"},"website_url":{"type":"string"}},"required":["id","username","email","name","state","web_url","avatar_url","is_admin","bot","two_factor_enabled","external","locked","private_profile","projects_limit","can_create_project","can_create_group","using_license_seat"],"type":"object"}
```

</details>

<details><summary>get_email</summary>

```json
{"additionalProperties":false,"properties":{"confirmed_at":{"type":"string"},"email":{"type":"string"},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["id","email"],"type":"object"}
```

</details>

<details><summary>get_gpg_key</summary>

```json
{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"id":{"type":"integer"},"key":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["id","key"],"type":"object"}
```

</details>

<details><summary>get_gpg_key_for_user</summary>

```json
{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"id":{"type":"integer"},"key":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["id","key"],"type":"object"}
```

</details>

<details><summary>get_impersonation_token</summary>

```json
{"additionalProperties":false,"properties":{"active":{"type":"boolean"},"created_at":{"type":"string"},"expires_at":{"type":"string"},"id":{"type":"integer"},"last_used_at":{"type":"string"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"revoked":{"type":"boolean"},"scopes":{"items":{"type":"string"},"type":["null","array"]},"token":{"type":"string"}},"required":["id","name","active","scopes","revoked"],"type":"object"}
```

</details>

<details><summary>get_ssh_key</summary>

```json
{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"expires_at":{"type":"string"},"id":{"type":"integer"},"key":{"type":"string"},"title":{"type":"string"},"usage_type":{"type":"string"}},"required":["id","title","key"],"type":"object"}
```

</details>

<details><summary>get_ssh_key_for_user</summary>

```json
{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"expires_at":{"type":"string"},"id":{"type":"integer"},"key":{"type":"string"},"title":{"type":"string"},"usage_type":{"type":"string"}},"required":["id","title","key"],"type":"object"}
```

</details>

<details><summary>get_status</summary>

```json
{"additionalProperties":false,"properties":{"availability":{"type":"string"},"clear_status_at":{"type":"string"},"emoji":{"type":"string"},"message":{"type":"string"},"message_html":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"type":"object"}
```

</details>

<details><summary>gpg_keys</summary>

```json
{"additionalProperties":false,"properties":{"keys":{"items":{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"id":{"type":"integer"},"key":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["id","key"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["keys"],"type":"object"}
```

</details>

<details><summary>gpg_keys_for_user</summary>

```json
{"additionalProperties":false,"properties":{"keys":{"items":{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"id":{"type":"integer"},"key":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["id","key"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["keys"],"type":"object"}
```

</details>

<details><summary>key_get_by_fingerprint</summary>

```json
{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"id":{"type":"integer"},"key":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"title":{"type":"string"},"user":{"additionalProperties":false,"properties":{"id":{"type":"integer"},"name":{"type":"string"},"username":{"type":"string"}},"required":["id","username","name"],"type":"object"}},"required":["id","title","key","user"],"type":"object"}
```

</details>

<details><summary>key_get_with_user</summary>

```json
{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"id":{"type":"integer"},"key":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"title":{"type":"string"},"user":{"additionalProperties":false,"properties":{"id":{"type":"integer"},"name":{"type":"string"},"username":{"type":"string"}},"required":["id","username","name"],"type":"object"}},"required":["id","title","key","user"],"type":"object"}
```

</details>

<details><summary>list</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"},"users":{"items":{"additionalProperties":false,"properties":{"avatar_url":{"type":"string"},"bio":{"type":"string"},"bot":{"type":"boolean"},"can_create_group":{"type":"boolean"},"can_create_project":{"type":"boolean"},"color_scheme_id":{"type":"integer"},"created_at":{"type":"string"},"current_sign_in_at":{"type":"string"},"email":{"type":"string"},"external":{"type":"boolean"},"id":{"type":"integer"},"is_admin":{"type":"boolean"},"job_title":{"type":"string"},"last_activity_on":{"type":"string"},"location":{"type":"string"},"locked":{"type":"boolean"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"note":{"type":"string"},"organization":{"type":"string"},"private_profile":{"type":"boolean"},"projects_limit":{"type":"integer"},"public_email":{"type":"string"},"scim_identities":{"items":{"additionalProperties":false,"properties":{"active":{"type":"boolean"},"extern_uid":{"type":"string"},"group_id":{"type":"integer"}},"required":["extern_uid","group_id","active"],"type":"object"},"type":["null","array"]},"state":{"type":"string"},"theme_id":{"type":"integer"},"two_factor_enabled":{"type":"boolean"},"username":{"type":"string"},"using_license_seat":{"type":"boolean"},"web_url":{"type":"string"},"website_url":{"type":"string"}},"required":["id","username","email","name","state","web_url","avatar_url","is_admin","bot","two_factor_enabled","external","locked","private_profile","projects_limit","can_create_project","can_create_group","using_license_seat"],"type":"object"},"type":["null","array"]}},"required":["users","pagination"],"type":"object"}
```

</details>

<details><summary>list_impersonation_tokens</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"tokens":{"items":{"additionalProperties":false,"properties":{"active":{"type":"boolean"},"created_at":{"type":"string"},"expires_at":{"type":"string"},"id":{"type":"integer"},"last_used_at":{"type":"string"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"revoked":{"type":"boolean"},"scopes":{"items":{"type":"string"},"type":["null","array"]},"token":{"type":"string"}},"required":["id","name","active","scopes","revoked"],"type":"object"},"type":["null","array"]}},"required":["tokens"],"type":"object"}
```

</details>

<details><summary>list_service_accounts</summary>

```json
{"additionalProperties":false,"properties":{"accounts":{"items":{"additionalProperties":false,"properties":{"id":{"type":"integer"},"name":{"type":"string"},"username":{"type":"string"}},"required":["id","username","name"],"type":"object"},"type":["null","array"]}},"required":["accounts"],"type":"object"}
```

</details>

<details><summary>me</summary>

```json
{"additionalProperties":false,"properties":{"avatar_url":{"type":"string"},"bio":{"type":"string"},"bot":{"type":"boolean"},"can_create_group":{"type":"boolean"},"can_create_project":{"type":"boolean"},"color_scheme_id":{"type":"integer"},"created_at":{"type":"string"},"current_sign_in_at":{"type":"string"},"email":{"type":"string"},"external":{"type":"boolean"},"id":{"type":"integer"},"is_admin":{"type":"boolean"},"job_title":{"type":"string"},"last_activity_on":{"type":"string"},"location":{"type":"string"},"locked":{"type":"boolean"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"note":{"type":"string"},"organization":{"type":"string"},"private_profile":{"type":"boolean"},"projects_limit":{"type":"integer"},"public_email":{"type":"string"},"scim_identities":{"items":{"additionalProperties":false,"properties":{"active":{"type":"boolean"},"extern_uid":{"type":"string"},"group_id":{"type":"integer"}},"required":["extern_uid","group_id","active"],"type":"object"},"type":["null","array"]},"state":{"type":"string"},"theme_id":{"type":"integer"},"two_factor_enabled":{"type":"boolean"},"username":{"type":"string"},"using_license_seat":{"type":"boolean"},"web_url":{"type":"string"},"website_url":{"type":"string"}},"required":["id","username","email","name","state","web_url","avatar_url","is_admin","bot","two_factor_enabled","external","locked","private_profile","projects_limit","can_create_project","can_create_group","using_license_seat"],"type":"object"}
```

</details>

<details><summary>memberships</summary>

```json
{"additionalProperties":false,"properties":{"memberships":{"items":{"additionalProperties":false,"properties":{"access_level":{"type":"integer"},"source_id":{"type":"integer"},"source_name":{"type":"string"},"source_type":{"type":"string"}},"required":["source_id","source_name","source_type","access_level"],"type":"object"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["memberships","pagination"],"type":"object"}
```

</details>

<details><summary>modify</summary>

```json
{"additionalProperties":false,"properties":{"avatar_url":{"type":"string"},"bio":{"type":"string"},"bot":{"type":"boolean"},"can_create_group":{"type":"boolean"},"can_create_project":{"type":"boolean"},"color_scheme_id":{"type":"integer"},"created_at":{"type":"string"},"current_sign_in_at":{"type":"string"},"email":{"type":"string"},"external":{"type":"boolean"},"id":{"type":"integer"},"is_admin":{"type":"boolean"},"job_title":{"type":"string"},"last_activity_on":{"type":"string"},"location":{"type":"string"},"locked":{"type":"boolean"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"note":{"type":"string"},"organization":{"type":"string"},"private_profile":{"type":"boolean"},"projects_limit":{"type":"integer"},"public_email":{"type":"string"},"scim_identities":{"items":{"additionalProperties":false,"properties":{"active":{"type":"boolean"},"extern_uid":{"type":"string"},"group_id":{"type":"integer"}},"required":["extern_uid","group_id","active"],"type":"object"},"type":["null","array"]},"state":{"type":"string"},"theme_id":{"type":"integer"},"two_factor_enabled":{"type":"boolean"},"username":{"type":"string"},"using_license_seat":{"type":"boolean"},"web_url":{"type":"string"},"website_url":{"type":"string"}},"required":["id","username","email","name","state","web_url","avatar_url","is_admin","bot","two_factor_enabled","external","locked","private_profile","projects_limit","can_create_project","can_create_group","using_license_seat"],"type":"object"}
```

</details>

<details><summary>namespace_exists</summary>

```json
{"additionalProperties":false,"properties":{"exists":{"type":"boolean"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"suggests":{"items":{"type":"string"},"type":["null","array"]}},"required":["exists"],"type":"object"}
```

</details>

<details><summary>namespace_get</summary>

```json
{"additionalProperties":false,"properties":{"avatar_url":{"type":"string"},"billable_members_count":{"type":"integer"},"full_path":{"type":"string"},"id":{"type":"integer"},"kind":{"type":"string"},"members_count_with_descendants":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"parent_id":{"type":"integer"},"path":{"type":"string"},"plan":{"type":"string"},"trial":{"type":"boolean"},"web_url":{"type":"string"}},"required":["id","name","path","kind","full_path"],"type":"object"}
```

</details>

<details><summary>namespace_list</summary>

```json
{"additionalProperties":false,"properties":{"namespaces":{"items":{"additionalProperties":false,"properties":{"avatar_url":{"type":"string"},"billable_members_count":{"type":"integer"},"full_path":{"type":"string"},"id":{"type":"integer"},"kind":{"type":"string"},"members_count_with_descendants":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"parent_id":{"type":"integer"},"path":{"type":"string"},"plan":{"type":"string"},"trial":{"type":"boolean"},"web_url":{"type":"string"}},"required":["id","name","path","kind","full_path"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["namespaces","pagination"],"type":"object"}
```

</details>

<details><summary>namespace_search</summary>

```json
{"additionalProperties":false,"properties":{"namespaces":{"items":{"additionalProperties":false,"properties":{"avatar_url":{"type":"string"},"billable_members_count":{"type":"integer"},"full_path":{"type":"string"},"id":{"type":"integer"},"kind":{"type":"string"},"members_count_with_descendants":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"parent_id":{"type":"integer"},"path":{"type":"string"},"plan":{"type":"string"},"trial":{"type":"boolean"},"web_url":{"type":"string"}},"required":["id","name","path","kind","full_path"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["namespaces","pagination"],"type":"object"}
```

</details>

<details><summary>notification_global_get</summary>

```json
{"additionalProperties":false,"properties":{"events":{"additionalProperties":false,"properties":{"close_issue":{"type":"boolean"},"close_merge_request":{"type":"boolean"},"failed_pipeline":{"type":"boolean"},"fixed_pipeline":{"type":"boolean"},"issue_due":{"type":"boolean"},"merge_merge_request":{"type":"boolean"},"merge_when_pipeline_succeeds":{"type":"boolean"},"moved_project":{"type":"boolean"},"new_epic":{"type":"boolean"},"new_issue":{"type":"boolean"},"new_merge_request":{"type":"boolean"},"new_note":{"type":"boolean"},"push_to_merge_request":{"type":"boolean"},"reassign_issue":{"type":"boolean"},"reassign_merge_request":{"type":"boolean"},"reopen_issue":{"type":"boolean"},"reopen_merge_request":{"type":"boolean"},"success_pipeline":{"type":"boolean"}},"required":["close_issue","close_merge_request","failed_pipeline","fixed_pipeline","issue_due","merge_when_pipeline_succeeds","merge_merge_request","moved_project","new_issue","new_merge_request","new_epic","new_note","push_to_merge_request","reassign_issue","reassign_merge_request","reopen_issue","reopen_merge_request","success_pipeline"],"type":["null","object"]},"level":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"notification_email":{"type":"string"}},"required":["level"],"type":"object"}
```

</details>

<details><summary>notification_global_update</summary>

```json
{"additionalProperties":false,"properties":{"events":{"additionalProperties":false,"properties":{"close_issue":{"type":"boolean"},"close_merge_request":{"type":"boolean"},"failed_pipeline":{"type":"boolean"},"fixed_pipeline":{"type":"boolean"},"issue_due":{"type":"boolean"},"merge_merge_request":{"type":"boolean"},"merge_when_pipeline_succeeds":{"type":"boolean"},"moved_project":{"type":"boolean"},"new_epic":{"type":"boolean"},"new_issue":{"type":"boolean"},"new_merge_request":{"type":"boolean"},"new_note":{"type":"boolean"},"push_to_merge_request":{"type":"boolean"},"reassign_issue":{"type":"boolean"},"reassign_merge_request":{"type":"boolean"},"reopen_issue":{"type":"boolean"},"reopen_merge_request":{"type":"boolean"},"success_pipeline":{"type":"boolean"}},"required":["close_issue","close_merge_request","failed_pipeline","fixed_pipeline","issue_due","merge_when_pipeline_succeeds","merge_merge_request","moved_project","new_issue","new_merge_request","new_epic","new_note","push_to_merge_request","reassign_issue","reassign_merge_request","reopen_issue","reopen_merge_request","success_pipeline"],"type":["null","object"]},"level":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"notification_email":{"type":"string"}},"required":["level"],"type":"object"}
```

</details>

<details><summary>notification_group_get</summary>

```json
{"additionalProperties":false,"properties":{"events":{"additionalProperties":false,"properties":{"close_issue":{"type":"boolean"},"close_merge_request":{"type":"boolean"},"failed_pipeline":{"type":"boolean"},"fixed_pipeline":{"type":"boolean"},"issue_due":{"type":"boolean"},"merge_merge_request":{"type":"boolean"},"merge_when_pipeline_succeeds":{"type":"boolean"},"moved_project":{"type":"boolean"},"new_epic":{"type":"boolean"},"new_issue":{"type":"boolean"},"new_merge_request":{"type":"boolean"},"new_note":{"type":"boolean"},"push_to_merge_request":{"type":"boolean"},"reassign_issue":{"type":"boolean"},"reassign_merge_request":{"type":"boolean"},"reopen_issue":{"type":"boolean"},"reopen_merge_request":{"type":"boolean"},"success_pipeline":{"type":"boolean"}},"required":["close_issue","close_merge_request","failed_pipeline","fixed_pipeline","issue_due","merge_when_pipeline_succeeds","merge_merge_request","moved_project","new_issue","new_merge_request","new_epic","new_note","push_to_merge_request","reassign_issue","reassign_merge_request","reopen_issue","reopen_merge_request","success_pipeline"],"type":["null","object"]},"level":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"notification_email":{"type":"string"}},"required":["level"],"type":"object"}
```

</details>

<details><summary>notification_group_update</summary>

```json
{"additionalProperties":false,"properties":{"events":{"additionalProperties":false,"properties":{"close_issue":{"type":"boolean"},"close_merge_request":{"type":"boolean"},"failed_pipeline":{"type":"boolean"},"fixed_pipeline":{"type":"boolean"},"issue_due":{"type":"boolean"},"merge_merge_request":{"type":"boolean"},"merge_when_pipeline_succeeds":{"type":"boolean"},"moved_project":{"type":"boolean"},"new_epic":{"type":"boolean"},"new_issue":{"type":"boolean"},"new_merge_request":{"type":"boolean"},"new_note":{"type":"boolean"},"push_to_merge_request":{"type":"boolean"},"reassign_issue":{"type":"boolean"},"reassign_merge_request":{"type":"boolean"},"reopen_issue":{"type":"boolean"},"reopen_merge_request":{"type":"boolean"},"success_pipeline":{"type":"boolean"}},"required":["close_issue","close_merge_request","failed_pipeline","fixed_pipeline","issue_due","merge_when_pipeline_succeeds","merge_merge_request","moved_project","new_issue","new_merge_request","new_epic","new_note","push_to_merge_request","reassign_issue","reassign_merge_request","reopen_issue","reopen_merge_request","success_pipeline"],"type":["null","object"]},"level":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"notification_email":{"type":"string"}},"required":["level"],"type":"object"}
```

</details>

<details><summary>notification_project_get</summary>

```json
{"additionalProperties":false,"properties":{"events":{"additionalProperties":false,"properties":{"close_issue":{"type":"boolean"},"close_merge_request":{"type":"boolean"},"failed_pipeline":{"type":"boolean"},"fixed_pipeline":{"type":"boolean"},"issue_due":{"type":"boolean"},"merge_merge_request":{"type":"boolean"},"merge_when_pipeline_succeeds":{"type":"boolean"},"moved_project":{"type":"boolean"},"new_epic":{"type":"boolean"},"new_issue":{"type":"boolean"},"new_merge_request":{"type":"boolean"},"new_note":{"type":"boolean"},"push_to_merge_request":{"type":"boolean"},"reassign_issue":{"type":"boolean"},"reassign_merge_request":{"type":"boolean"},"reopen_issue":{"type":"boolean"},"reopen_merge_request":{"type":"boolean"},"success_pipeline":{"type":"boolean"}},"required":["close_issue","close_merge_request","failed_pipeline","fixed_pipeline","issue_due","merge_when_pipeline_succeeds","merge_merge_request","moved_project","new_issue","new_merge_request","new_epic","new_note","push_to_merge_request","reassign_issue","reassign_merge_request","reopen_issue","reopen_merge_request","success_pipeline"],"type":["null","object"]},"level":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"notification_email":{"type":"string"}},"required":["level"],"type":"object"}
```

</details>

<details><summary>notification_project_update</summary>

```json
{"additionalProperties":false,"properties":{"events":{"additionalProperties":false,"properties":{"close_issue":{"type":"boolean"},"close_merge_request":{"type":"boolean"},"failed_pipeline":{"type":"boolean"},"fixed_pipeline":{"type":"boolean"},"issue_due":{"type":"boolean"},"merge_merge_request":{"type":"boolean"},"merge_when_pipeline_succeeds":{"type":"boolean"},"moved_project":{"type":"boolean"},"new_epic":{"type":"boolean"},"new_issue":{"type":"boolean"},"new_merge_request":{"type":"boolean"},"new_note":{"type":"boolean"},"push_to_merge_request":{"type":"boolean"},"reassign_issue":{"type":"boolean"},"reassign_merge_request":{"type":"boolean"},"reopen_issue":{"type":"boolean"},"reopen_merge_request":{"type":"boolean"},"success_pipeline":{"type":"boolean"}},"required":["close_issue","close_merge_request","failed_pipeline","fixed_pipeline","issue_due","merge_when_pipeline_succeeds","merge_merge_request","moved_project","new_issue","new_merge_request","new_epic","new_note","push_to_merge_request","reassign_issue","reassign_merge_request","reopen_issue","reopen_merge_request","success_pipeline"],"type":["null","object"]},"level":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"notification_email":{"type":"string"}},"required":["level"],"type":"object"}
```

</details>

<details><summary>reject</summary>

```json
{"additionalProperties":false,"properties":{"action":{"type":"string"},"success":{"type":"boolean"},"user_id":{"type":"integer"}},"required":["user_id","action","success"],"type":"object"}
```

</details>

<details><summary>revoke_impersonation_token</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"revoked":{"type":"boolean"},"token_id":{"type":"integer"},"user_id":{"type":"integer"}},"required":["user_id","token_id","revoked"],"type":"object"}
```

</details>

<details><summary>set_status</summary>

```json
{"additionalProperties":false,"properties":{"availability":{"type":"string"},"clear_status_at":{"type":"string"},"emoji":{"type":"string"},"message":{"type":"string"},"message_html":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"type":"object"}
```

</details>

<details><summary>ssh_keys</summary>

```json
{"additionalProperties":false,"properties":{"keys":{"items":{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"expires_at":{"type":"string"},"id":{"type":"integer"},"key":{"type":"string"},"title":{"type":"string"},"usage_type":{"type":"string"}},"required":["id","title","key"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["keys","pagination"],"type":"object"}
```

</details>

<details><summary>ssh_keys_for_user</summary>

```json
{"additionalProperties":false,"properties":{"keys":{"items":{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"expires_at":{"type":"string"},"id":{"type":"integer"},"key":{"type":"string"},"title":{"type":"string"},"usage_type":{"type":"string"}},"required":["id","title","key"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["keys","pagination"],"type":"object"}
```

</details>

<details><summary>todo_list</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"},"todos":{"items":{"additionalProperties":false,"properties":{"action_name":{"type":"string"},"author_name":{"type":"string"},"body":{"type":"string"},"created_at":{"type":"string"},"id":{"type":"integer"},"project_name":{"type":"string"},"state":{"type":"string"},"target_title":{"type":"string"},"target_type":{"type":"string"},"target_url":{"type":"string"}},"required":["id","action_name","target_type","target_title","target_url","state"],"type":"object"},"type":["null","array"]}},"required":["todos","pagination"],"type":"object"}
```

</details>

<details><summary>todo_mark_all_done</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["message"],"type":"object"}
```

</details>

<details><summary>todo_mark_done</summary>

```json
{"additionalProperties":false,"properties":{"id":{"type":"integer"},"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["id","message"],"type":"object"}
```

</details>

<details><summary>unban</summary>

```json
{"additionalProperties":false,"properties":{"action":{"type":"string"},"success":{"type":"boolean"},"user_id":{"type":"integer"}},"required":["user_id","action","success"],"type":"object"}
```

</details>

<details><summary>unblock</summary>

```json
{"additionalProperties":false,"properties":{"action":{"type":"string"},"success":{"type":"boolean"},"user_id":{"type":"integer"}},"required":["user_id","action","success"],"type":"object"}
```

</details>

### gitlab_wiki

**Wiki**

Use {"action":"list","params":{...}}; only top-level keys are action and params.
Action params schema: gitlab://tools/gitlab_wiki.<action>.

CRUD project wiki pages and upload attachments to wikis. Delete is destructive and irreversible.
When to use: read, write, or delete wiki pages of a project; attach images or files referenced from wiki content.
NOT for: repository files or commits (use gitlab_repository), code snippets (use gitlab_snippet), group-level wikis (Enterprise/Premium — use gitlab_group when GITLAB_ENTERPRISE=true), issues or MR descriptions (use gitlab_issue / gitlab_merge_request).

Returns:
- get / create / update: {slug, title, format, content, encoding}.
- list: array of {slug, title, format} (content omitted unless with_content=true).
- delete: {success: bool, message: string}.
- upload_attachment: {file_name, url, alt, markdown} — embed `markdown` directly in a page.
Errors: 404 not found (hint: check slug or project_id), 403 forbidden (hint: wiki disabled or insufficient role), 400 invalid params (hint: title/content required, slug must be URL-encoded).

Param conventions: * = required. All actions need project_id* (numeric ID or url-encoded path). slug is the URL-encoded page path (e.g. `docs%2Fsetup`). format default = markdown. content max ~1 MB.

- list: project_id*, with_content (bool)
- get: project_id*, slug*, render_html (bool), version (commit SHA)
- create: project_id*, title*, content*, format (markdown/rdoc/asciidoc/org)
- update: project_id*, slug*, title, content, format
- delete: project_id*, slug*
- upload_attachment: project_id*, filename*, content_base64 OR file_path (exactly one), branch

See also: gitlab_project (settings/membership), gitlab_repository (file commits), gitlab_snippet (standalone code snippets).

Annotations: readOnly=false, destructive=true, idempotent=false, openWorld=true

**Action Output Schemas:**

<details><summary>create</summary>

```json
{"additionalProperties":false,"properties":{"content":{"type":"string"},"encoding":{"type":"string"},"format":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"slug":{"type":"string"},"title":{"type":"string"}},"required":["title","slug","format"],"type":"object"}
```

</details>

<details><summary>delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>get</summary>

```json
{"additionalProperties":false,"properties":{"content":{"type":"string"},"encoding":{"type":"string"},"format":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"slug":{"type":"string"},"title":{"type":"string"}},"required":["title","slug","format"],"type":"object"}
```

</details>

<details><summary>list</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"wiki_pages":{"items":{"additionalProperties":false,"properties":{"content":{"type":"string"},"encoding":{"type":"string"},"format":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"slug":{"type":"string"},"title":{"type":"string"}},"required":["title","slug","format"],"type":"object"},"type":["null","array"]}},"required":["wiki_pages"],"type":"object"}
```

</details>

<details><summary>update</summary>

```json
{"additionalProperties":false,"properties":{"content":{"type":"string"},"encoding":{"type":"string"},"format":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"slug":{"type":"string"},"title":{"type":"string"}},"required":["title","slug","format"],"type":"object"}
```

</details>

<details><summary>upload_attachment</summary>

```json
{"additionalProperties":false,"properties":{"branch":{"type":"string"},"file_name":{"type":"string"},"file_path":{"type":"string"},"markdown":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"url":{"type":"string"}},"required":["file_name","file_path","branch","url","markdown"],"type":"object"}
```

</details>

## Enterprise-Only Meta-Tools

These 17 tools require GITLAB_ENTERPRISE=true. GitLab.com-only tools, including Orbit, also require GITLAB_URL=https://gitlab.com.

### gitlab_attestation

**Attestation**

Use {"action":"list","params":{...}}; only top-level keys are action and params.
Action params schema: gitlab://tools/gitlab_attestation.<action>.

List and download build attestations (SLSA provenance) for project artifacts.
Returns: JSON with resource data. Lists include pagination (page, per_page, total, next_page). Errors: 404 not found, 403 forbidden — with actionable hints.

- list: project_id*, subject_digest*
- download: project_id*, attestation_iid*

See also: gitlab_pipeline, gitlab_package

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

**Action Output Schemas:**

<details><summary>download</summary>

```json
{"additionalProperties":false,"properties":{"attestation_iid":{"type":"integer"},"content_base64":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"size":{"type":"integer"}},"required":["attestation_iid","size","content_base64"],"type":"object"}
```

</details>

<details><summary>list</summary>

```json
{"additionalProperties":false,"properties":{"attestations":{"items":{"additionalProperties":false,"properties":{"build_id":{"type":"integer"},"created_at":{"type":"string"},"download_url":{"type":"string"},"expire_at":{"type":"string"},"id":{"type":"integer"},"iid":{"type":"integer"},"predicate_kind":{"type":"string"},"predicate_type":{"type":"string"},"project_id":{"type":"integer"},"status":{"type":"string"},"subject_digest":{"type":"string"},"updated_at":{"type":"string"}},"required":["id","iid","project_id","build_id","status"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["attestations"],"type":"object"}
```

</details>

### gitlab_audit_event

**Audit Event**

Use {"action":"get_group","params":{...}}; only top-level keys are action and params.
Action params schema: gitlab://tools/gitlab_audit_event.<action>.

List and get GitLab audit events at instance, group, and project levels for compliance tracking.
Returns: JSON with resource data. Lists include pagination (page, per_page, total, next_page). Errors: 404 not found, 403 forbidden — with actionable hints.

Common optional params: created_after (YYYY-MM-DD), created_before, page, per_page.

- list_instance: (admin only) created_after, created_before
- get_instance: event_id*
- list_group: group_id*, created_after, created_before
- get_group: group_id*, event_id*
- list_project: project_id*, created_after, created_before
- get_project: project_id*, event_id*

See also: gitlab_admin

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

**Action Output Schemas:**

<details><summary>get_group</summary>

```json
{"additionalProperties":false,"properties":{"author_id":{"type":"integer"},"created_at":{"type":"string"},"details":{"additionalProperties":false,"properties":{"author_name":{"type":"string"},"custom_message":{"type":"string"},"entity_path":{"type":"string"},"ip_address":{"type":"string"},"target_details":{"type":"string"},"target_id":{"type":"string"},"target_type":{"type":"string"}},"type":"object"},"entity_id":{"type":"integer"},"entity_type":{"type":"string"},"event_name":{"type":"string"},"event_type":{"type":"string"},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["id","author_id","entity_id","entity_type","event_name","event_type","details","created_at"],"type":"object"}
```

</details>

<details><summary>get_instance</summary>

```json
{"additionalProperties":false,"properties":{"author_id":{"type":"integer"},"created_at":{"type":"string"},"details":{"additionalProperties":false,"properties":{"author_name":{"type":"string"},"custom_message":{"type":"string"},"entity_path":{"type":"string"},"ip_address":{"type":"string"},"target_details":{"type":"string"},"target_id":{"type":"string"},"target_type":{"type":"string"}},"type":"object"},"entity_id":{"type":"integer"},"entity_type":{"type":"string"},"event_name":{"type":"string"},"event_type":{"type":"string"},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["id","author_id","entity_id","entity_type","event_name","event_type","details","created_at"],"type":"object"}
```

</details>

<details><summary>get_project</summary>

```json
{"additionalProperties":false,"properties":{"author_id":{"type":"integer"},"created_at":{"type":"string"},"details":{"additionalProperties":false,"properties":{"author_name":{"type":"string"},"custom_message":{"type":"string"},"entity_path":{"type":"string"},"ip_address":{"type":"string"},"target_details":{"type":"string"},"target_id":{"type":"string"},"target_type":{"type":"string"}},"type":"object"},"entity_id":{"type":"integer"},"entity_type":{"type":"string"},"event_name":{"type":"string"},"event_type":{"type":"string"},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["id","author_id","entity_id","entity_type","event_name","event_type","details","created_at"],"type":"object"}
```

</details>

<details><summary>list_group</summary>

```json
{"additionalProperties":false,"properties":{"audit_events":{"items":{"additionalProperties":false,"properties":{"author_id":{"type":"integer"},"created_at":{"type":"string"},"details":{"additionalProperties":false,"properties":{"author_name":{"type":"string"},"custom_message":{"type":"string"},"entity_path":{"type":"string"},"ip_address":{"type":"string"},"target_details":{"type":"string"},"target_id":{"type":"string"},"target_type":{"type":"string"}},"type":"object"},"entity_id":{"type":"integer"},"entity_type":{"type":"string"},"event_name":{"type":"string"},"event_type":{"type":"string"},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["id","author_id","entity_id","entity_type","event_name","event_type","details","created_at"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["audit_events","pagination"],"type":"object"}
```

</details>

<details><summary>list_instance</summary>

```json
{"additionalProperties":false,"properties":{"audit_events":{"items":{"additionalProperties":false,"properties":{"author_id":{"type":"integer"},"created_at":{"type":"string"},"details":{"additionalProperties":false,"properties":{"author_name":{"type":"string"},"custom_message":{"type":"string"},"entity_path":{"type":"string"},"ip_address":{"type":"string"},"target_details":{"type":"string"},"target_id":{"type":"string"},"target_type":{"type":"string"}},"type":"object"},"entity_id":{"type":"integer"},"entity_type":{"type":"string"},"event_name":{"type":"string"},"event_type":{"type":"string"},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["id","author_id","entity_id","entity_type","event_name","event_type","details","created_at"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["audit_events","pagination"],"type":"object"}
```

</details>

<details><summary>list_project</summary>

```json
{"additionalProperties":false,"properties":{"audit_events":{"items":{"additionalProperties":false,"properties":{"author_id":{"type":"integer"},"created_at":{"type":"string"},"details":{"additionalProperties":false,"properties":{"author_name":{"type":"string"},"custom_message":{"type":"string"},"entity_path":{"type":"string"},"ip_address":{"type":"string"},"target_details":{"type":"string"},"target_id":{"type":"string"},"target_type":{"type":"string"}},"type":"object"},"entity_id":{"type":"integer"},"entity_type":{"type":"string"},"event_name":{"type":"string"},"event_type":{"type":"string"},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["id","author_id","entity_id","entity_type","event_name","event_type","details","created_at"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["audit_events","pagination"],"type":"object"}
```

</details>

### gitlab_compliance_policy

**Compliance Policy**

Use {"action":"get","params":{...}}; only top-level keys are action and params.
Action params schema: gitlab://tools/gitlab_compliance_policy.<action>.

Get and update admin compliance policy settings (CSP namespace configuration).
Returns: JSON with resource data for get/update actions. Errors: 404 not found, 403 forbidden, 400 invalid params — with actionable hints.

- get: no params
- update: csp_namespace_id (int64)

See also: gitlab_admin

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

**Action Output Schemas:**

<details><summary>get</summary>

```json
{"additionalProperties":false,"properties":{"csp_namespace_id":{"type":["null","integer"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["csp_namespace_id"],"type":"object"}
```

</details>

<details><summary>update</summary>

```json
{"additionalProperties":false,"properties":{"csp_namespace_id":{"type":["null","integer"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["csp_namespace_id"],"type":"object"}
```

</details>

### gitlab_dependency

**Dependency**

Use {"action":"list","params":{...}}; only top-level keys are action and params.
Action params schema: gitlab://tools/gitlab_dependency.<action>.

List project dependencies and create/download SBOM exports (CycloneDX).
Returns: JSON with resource data. The list action includes pagination (page, per_page, total, next_page). export_create/export_get return export metadata, and export_download returns the CycloneDX payload. Errors: 404 not found, 403 forbidden, 400 invalid params — with actionable hints.

- list: project_id*, package_manager, page, per_page
- export_create: pipeline_id*, export_type (default: sbom)
- export_get: export_id*
- export_download: export_id*. CycloneDX JSON, max 1MB.

See also: gitlab_project, gitlab_vulnerability

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

**Action Output Schemas:**

<details><summary>export_create</summary>

```json
{"additionalProperties":false,"properties":{"download":{"type":"string"},"has_finished":{"type":"boolean"},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"self":{"type":"string"}},"required":["id","has_finished","self","download"],"type":"object"}
```

</details>

<details><summary>export_download</summary>

```json
{"additionalProperties":false,"properties":{"content":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["content"],"type":"object"}
```

</details>

<details><summary>export_get</summary>

```json
{"additionalProperties":false,"properties":{"download":{"type":"string"},"has_finished":{"type":"boolean"},"id":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"self":{"type":"string"}},"required":["id","has_finished","self","download"],"type":"object"}
```

</details>

<details><summary>list</summary>

```json
{"additionalProperties":false,"properties":{"dependencies":{"items":{"additionalProperties":false,"properties":{"dependency_file_path":{"type":"string"},"licenses":{"items":{"additionalProperties":false,"properties":{"name":{"type":"string"},"url":{"type":"string"}},"required":["name"],"type":"object"},"type":["null","array"]},"name":{"type":"string"},"package_manager":{"type":"string"},"version":{"type":"string"},"vulnerabilities":{"items":{"additionalProperties":false,"properties":{"id":{"type":"integer"},"name":{"type":"string"},"severity":{"type":"string"},"url":{"type":"string"}},"required":["name","severity","id"],"type":"object"},"type":["null","array"]}},"required":["name","version","package_manager","dependency_file_path"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["dependencies","pagination"],"type":"object"}
```

</details>

### gitlab_dora_metrics

**Dora Metrics**

Use {"action":"group","params":{...}}; only top-level keys are action and params.
Action params schema: gitlab://tools/gitlab_dora_metrics.<action>.

Get DORA metrics: deployment frequency, lead time, MTTR, change failure rate.
	Returns: JSON with metric data. Errors: 404 not found, 403 forbidden — with actionable hints.

Common params: metric* (deployment_frequency|lead_time_for_changes|time_to_restore_service|change_failure_rate), start_date (YYYY-MM-DD), end_date, interval (daily/monthly/all), environment_tiers (array).

- project: project_id*, metric*, start_date, end_date, interval, environment_tiers
- group: group_id*, metric*, start_date, end_date, interval, environment_tiers

See also: gitlab_environment, gitlab_pipeline

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

**Action Output Schemas:**

<details><summary>group</summary>

```json
{"additionalProperties":false,"properties":{"metrics":{"items":{"additionalProperties":false,"properties":{"date":{"type":"string"},"value":{"type":"number"}},"required":["date","value"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["metrics"],"type":"object"}
```

</details>

<details><summary>project</summary>

```json
{"additionalProperties":false,"properties":{"metrics":{"items":{"additionalProperties":false,"properties":{"date":{"type":"string"},"value":{"type":"number"}},"required":["date","value"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["metrics"],"type":"object"}
```

</details>

### gitlab_enterprise_user

**Enterprise User**

Use {"action":"list","params":{...}}; only top-level keys are action and params.
Action params schema: gitlab://tools/gitlab_enterprise_user.<action>.

Manage enterprise users for a GitLab group: list, get, disable 2FA, delete.
Returns: JSON with resource data. Lists include pagination (page, per_page, total, next_page). Void actions return confirmation. Errors: 404 not found, 403 forbidden, 400 invalid params — with actionable hints.

All actions need group_id*.

- list: group_id*, username, search, active, blocked, created_after, created_before, two_factor, page, per_page
- get: group_id*, user_id*
- disable_2fa: group_id*, user_id*
- delete: group_id*, user_id*, hard_delete

See also: gitlab_group, gitlab_user

Annotations: readOnly=false, destructive=true, idempotent=false, openWorld=true

**Action Output Schemas:**

<details><summary>delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>disable_2fa</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>get</summary>

```json
{"additionalProperties":false,"properties":{"bot":{"type":"boolean"},"created_at":{"type":"string"},"email":{"type":"string"},"external":{"type":"boolean"},"id":{"type":"integer"},"is_admin":{"type":"boolean"},"locked":{"type":"boolean"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"state":{"type":"string"},"two_factor_enabled":{"type":"boolean"},"username":{"type":"string"},"web_url":{"type":"string"}},"required":["id","username","name","email","state","web_url","is_admin","bot","two_factor_enabled","external","locked"],"type":"object"}
```

</details>

<details><summary>list</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"},"users":{"items":{"additionalProperties":false,"properties":{"bot":{"type":"boolean"},"created_at":{"type":"string"},"email":{"type":"string"},"external":{"type":"boolean"},"id":{"type":"integer"},"is_admin":{"type":"boolean"},"locked":{"type":"boolean"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"state":{"type":"string"},"two_factor_enabled":{"type":"boolean"},"username":{"type":"string"},"web_url":{"type":"string"}},"required":["id","username","name","email","state","web_url","is_admin","bot","two_factor_enabled","external","locked"],"type":"object"},"type":["null","array"]}},"required":["users","pagination"],"type":"object"}
```

</details>

### gitlab_external_status_check

**External Status Check**

Use {"action":"create_project","params":{...}}; only top-level keys are action and params.
Action params schema: gitlab://tools/gitlab_external_status_check.<action>.

Manage external status checks for MRs and projects. CRUD checks and set/retry status.
Returns: JSON with resource data. Lists include pagination (page, per_page, total, next_page). Void actions return confirmation. Errors: 404 not found, 403 forbidden, 400 invalid params — with actionable hints.

Param conventions: * = required.

- list_project_checks: project_id*, page, per_page
- list_project_mr_checks: project_id*, merge_request_iid*, page, per_page
- list_project: project_id*, page, per_page
- create_project: project_id*, name*, external_url*, shared_secret, protected_branch_ids
- delete_project: project_id*, check_id*
- update_project: project_id*, check_id*, name, external_url, shared_secret, protected_branch_ids
- retry_project: project_id*, merge_request_iid*, check_id*
- set_project_mr_status: project_id*, merge_request_iid*, sha*, external_status_check_id*, status*

See also: gitlab_merge_request

Annotations: readOnly=false, destructive=true, idempotent=false, openWorld=true

**Action Output Schemas:**

<details><summary>create_project</summary>

```json
{"additionalProperties":false,"properties":{"external_url":{"type":"string"},"hmac":{"type":"boolean"},"id":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"project_id":{"type":"integer"},"protected_branches":{"items":{"additionalProperties":false,"properties":{"code_owner_approval_required":{"type":"boolean"},"id":{"type":"integer"},"name":{"type":"string"},"project_id":{"type":"integer"}},"required":["id","project_id","name","code_owner_approval_required"],"type":"object"},"type":["null","array"]}},"required":["id","name","project_id","external_url","hmac"],"type":"object"}
```

</details>

<details><summary>delete_project</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>list_project</summary>

```json
{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"external_url":{"type":"string"},"hmac":{"type":"boolean"},"id":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"project_id":{"type":"integer"},"protected_branches":{"items":{"additionalProperties":false,"properties":{"code_owner_approval_required":{"type":"boolean"},"id":{"type":"integer"},"name":{"type":"string"},"project_id":{"type":"integer"}},"required":["id","project_id","name","code_owner_approval_required"],"type":"object"},"type":["null","array"]}},"required":["id","name","project_id","external_url","hmac"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["items","pagination"],"type":"object"}
```

</details>

<details><summary>list_project_checks</summary>

```json
{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"external_url":{"type":"string"},"hmac":{"type":"boolean"},"id":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"project_id":{"type":"integer"},"protected_branches":{"items":{"additionalProperties":false,"properties":{"code_owner_approval_required":{"type":"boolean"},"id":{"type":"integer"},"name":{"type":"string"},"project_id":{"type":"integer"}},"required":["id","project_id","name","code_owner_approval_required"],"type":"object"},"type":["null","array"]}},"required":["id","name","project_id","external_url","hmac"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["items","pagination"],"type":"object"}
```

</details>

<details><summary>list_project_mr_checks</summary>

```json
{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"external_url":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"status":{"type":"string"}},"required":["id","name","external_url","status"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"}},"required":["items","pagination"],"type":"object"}
```

</details>

<details><summary>retry_project</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>set_project_mr_status</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>update_project</summary>

```json
{"additionalProperties":false,"properties":{"external_url":{"type":"string"},"hmac":{"type":"boolean"},"id":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"project_id":{"type":"integer"},"protected_branches":{"items":{"additionalProperties":false,"properties":{"code_owner_approval_required":{"type":"boolean"},"id":{"type":"integer"},"name":{"type":"string"},"project_id":{"type":"integer"}},"required":["id","project_id","name","code_owner_approval_required"],"type":"object"},"type":["null","array"]}},"required":["id","name","project_id","external_url","hmac"],"type":"object"}
```

</details>

### gitlab_geo

**Geo**

Use {"action":"list","params":{...}}; only top-level keys are action and params.
Action params schema: gitlab://tools/gitlab_geo.<action>.

Manage Geo replication sites: CRUD, repair OAuth, and check replication status (admin, Premium/Ultimate).
Returns: JSON with resource data. Lists include pagination (page, per_page, total, next_page). Void actions return confirmation. Errors: 404 not found, 403 forbidden, 400 invalid params — with actionable hints.

Param conventions: * = required.

- list / list_status: page, per_page
- get / get_status / delete / repair: id*
- create: name, url, primary, enabled, internal_url, files_max_capacity, repos_max_capacity, verification_max_capacity, container_repositories_max_capacity, sync_object_storage, selective_sync_type, selective_sync_shards, selective_sync_namespace_ids, minimum_reverification_interval
- edit: id*, plus create params (except primary, sync_object_storage)

See also: gitlab_admin

Annotations: readOnly=false, destructive=true, idempotent=false, openWorld=true

**Action Output Schemas:**

<details><summary>create</summary>

```json
{"additionalProperties":false,"properties":{"container_repositories_max_capacity":{"type":"integer"},"current":{"type":"boolean"},"enabled":{"type":"boolean"},"files_max_capacity":{"type":"integer"},"id":{"type":"integer"},"internal_url":{"type":"string"},"minimum_reverification_interval":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"primary":{"type":"boolean"},"repos_max_capacity":{"type":"integer"},"selective_sync_namespace_ids":{"items":{"type":"integer"},"type":["null","array"]},"selective_sync_shards":{"items":{"type":"string"},"type":["null","array"]},"selective_sync_type":{"type":"string"},"sync_object_storage":{"type":"boolean"},"url":{"type":"string"},"verification_max_capacity":{"type":"integer"},"web_edit_url":{"type":"string"}},"required":["id","name","url","primary","enabled","current","files_max_capacity","repos_max_capacity","verification_max_capacity","container_repositories_max_capacity","minimum_reverification_interval","sync_object_storage"],"type":"object"}
```

</details>

<details><summary>delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>edit</summary>

```json
{"additionalProperties":false,"properties":{"container_repositories_max_capacity":{"type":"integer"},"current":{"type":"boolean"},"enabled":{"type":"boolean"},"files_max_capacity":{"type":"integer"},"id":{"type":"integer"},"internal_url":{"type":"string"},"minimum_reverification_interval":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"primary":{"type":"boolean"},"repos_max_capacity":{"type":"integer"},"selective_sync_namespace_ids":{"items":{"type":"integer"},"type":["null","array"]},"selective_sync_shards":{"items":{"type":"string"},"type":["null","array"]},"selective_sync_type":{"type":"string"},"sync_object_storage":{"type":"boolean"},"url":{"type":"string"},"verification_max_capacity":{"type":"integer"},"web_edit_url":{"type":"string"}},"required":["id","name","url","primary","enabled","current","files_max_capacity","repos_max_capacity","verification_max_capacity","container_repositories_max_capacity","minimum_reverification_interval","sync_object_storage"],"type":"object"}
```

</details>

<details><summary>get</summary>

```json
{"additionalProperties":false,"properties":{"container_repositories_max_capacity":{"type":"integer"},"current":{"type":"boolean"},"enabled":{"type":"boolean"},"files_max_capacity":{"type":"integer"},"id":{"type":"integer"},"internal_url":{"type":"string"},"minimum_reverification_interval":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"primary":{"type":"boolean"},"repos_max_capacity":{"type":"integer"},"selective_sync_namespace_ids":{"items":{"type":"integer"},"type":["null","array"]},"selective_sync_shards":{"items":{"type":"string"},"type":["null","array"]},"selective_sync_type":{"type":"string"},"sync_object_storage":{"type":"boolean"},"url":{"type":"string"},"verification_max_capacity":{"type":"integer"},"web_edit_url":{"type":"string"}},"required":["id","name","url","primary","enabled","current","files_max_capacity","repos_max_capacity","verification_max_capacity","container_repositories_max_capacity","minimum_reverification_interval","sync_object_storage"],"type":"object"}
```

</details>

<details><summary>get_status</summary>

```json
{"additionalProperties":false,"properties":{"db_replication_lag_seconds":{"type":"integer"},"geo_node_id":{"type":"integer"},"health":{"type":"string"},"health_status":{"type":"string"},"healthy":{"type":"boolean"},"job_artifacts_synced_in_percentage":{"type":"string"},"lfs_objects_synced_in_percentage":{"type":"string"},"missing_oauth_application":{"type":"boolean"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"projects_count":{"type":"integer"},"revision":{"type":"string"},"storage_shards_match":{"type":"boolean"},"updated_at":{"type":"string"},"uploads_synced_in_percentage":{"type":"string"},"version":{"type":"string"}},"required":["geo_node_id","healthy","health","health_status","missing_oauth_application","db_replication_lag_seconds","projects_count","lfs_objects_synced_in_percentage","job_artifacts_synced_in_percentage","uploads_synced_in_percentage","version","revision","storage_shards_match","updated_at"],"type":"object"}
```

</details>

<details><summary>list</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"},"sites":{"items":{"additionalProperties":false,"properties":{"container_repositories_max_capacity":{"type":"integer"},"current":{"type":"boolean"},"enabled":{"type":"boolean"},"files_max_capacity":{"type":"integer"},"id":{"type":"integer"},"internal_url":{"type":"string"},"minimum_reverification_interval":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"primary":{"type":"boolean"},"repos_max_capacity":{"type":"integer"},"selective_sync_namespace_ids":{"items":{"type":"integer"},"type":["null","array"]},"selective_sync_shards":{"items":{"type":"string"},"type":["null","array"]},"selective_sync_type":{"type":"string"},"sync_object_storage":{"type":"boolean"},"url":{"type":"string"},"verification_max_capacity":{"type":"integer"},"web_edit_url":{"type":"string"}},"required":["id","name","url","primary","enabled","current","files_max_capacity","repos_max_capacity","verification_max_capacity","container_repositories_max_capacity","minimum_reverification_interval","sync_object_storage"],"type":"object"},"type":["null","array"]}},"required":["sites","pagination"],"type":"object"}
```

</details>

<details><summary>list_status</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"},"statuses":{"items":{"additionalProperties":false,"properties":{"db_replication_lag_seconds":{"type":"integer"},"geo_node_id":{"type":"integer"},"health":{"type":"string"},"health_status":{"type":"string"},"healthy":{"type":"boolean"},"job_artifacts_synced_in_percentage":{"type":"string"},"lfs_objects_synced_in_percentage":{"type":"string"},"missing_oauth_application":{"type":"boolean"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"projects_count":{"type":"integer"},"revision":{"type":"string"},"storage_shards_match":{"type":"boolean"},"updated_at":{"type":"string"},"uploads_synced_in_percentage":{"type":"string"},"version":{"type":"string"}},"required":["geo_node_id","healthy","health","health_status","missing_oauth_application","db_replication_lag_seconds","projects_count","lfs_objects_synced_in_percentage","job_artifacts_synced_in_percentage","uploads_synced_in_percentage","version","revision","storage_shards_match","updated_at"],"type":"object"},"type":["null","array"]}},"required":["statuses","pagination"],"type":"object"}
```

</details>

<details><summary>repair</summary>

```json
{"additionalProperties":false,"properties":{"container_repositories_max_capacity":{"type":"integer"},"current":{"type":"boolean"},"enabled":{"type":"boolean"},"files_max_capacity":{"type":"integer"},"id":{"type":"integer"},"internal_url":{"type":"string"},"minimum_reverification_interval":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"primary":{"type":"boolean"},"repos_max_capacity":{"type":"integer"},"selective_sync_namespace_ids":{"items":{"type":"integer"},"type":["null","array"]},"selective_sync_shards":{"items":{"type":"string"},"type":["null","array"]},"selective_sync_type":{"type":"string"},"sync_object_storage":{"type":"boolean"},"url":{"type":"string"},"verification_max_capacity":{"type":"integer"},"web_edit_url":{"type":"string"}},"required":["id","name","url","primary","enabled","current","files_max_capacity","repos_max_capacity","verification_max_capacity","container_repositories_max_capacity","minimum_reverification_interval","sync_object_storage"],"type":"object"}
```

</details>

### gitlab_group_scim

**Group Scim**

Use {"action":"list","params":{...}}; only top-level keys are action and params.
Action params schema: gitlab://tools/gitlab_group_scim.<action>.

Manage SCIM identities for GitLab group provisioning.
Returns: JSON with resource data. Lists include pagination (page, per_page, total, next_page). Void actions return confirmation. Errors: 404 not found, 403 forbidden, 400 invalid params — with actionable hints.

All actions need group_id*.

- list: group_id*
- get / delete: group_id*, uid*
- update: group_id*, uid*, extern_uid*

See also: gitlab_group, gitlab_user

Annotations: readOnly=false, destructive=true, idempotent=false, openWorld=true

**Action Output Schemas:**

<details><summary>delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>get</summary>

```json
{"additionalProperties":false,"properties":{"active":{"type":"boolean"},"external_uid":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"user_id":{"type":"integer"}},"required":["external_uid","user_id","active"],"type":"object"}
```

</details>

<details><summary>list</summary>

```json
{"additionalProperties":false,"properties":{"identities":{"items":{"additionalProperties":false,"properties":{"active":{"type":"boolean"},"external_uid":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"user_id":{"type":"integer"}},"required":["external_uid","user_id","active"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["identities"],"type":"object"}
```

</details>

<details><summary>update</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"updated":{"type":"boolean"}},"required":["updated","message"],"type":"object"}
```

</details>

### gitlab_member_role

**Member Role**

Use {"action":"create_group","params":{...}}; only top-level keys are action and params.
Action params schema: gitlab://tools/gitlab_member_role.<action>.

Manage custom member roles at instance or group level. Fine-grained permissions beyond standard access levels.
Returns: JSON with resource data. Lists include pagination (page, per_page, total, next_page). Void actions return confirmation. Errors: 404 not found, 403 forbidden, 400 invalid params — with actionable hints.

Instance-level:
- list_instance: no params
- create_instance: name*, base_access_level* (10/20/30/40/50), description, permissions (object)
- delete_instance: member_role_id*

Group-level:
- list_group: group_id*
- create_group: group_id*, name*, base_access_level*, description, permissions
- delete_group: group_id*, member_role_id*

See also: gitlab_group, gitlab_user

Annotations: readOnly=false, destructive=true, idempotent=false, openWorld=true

**Action Output Schemas:**

<details><summary>create_group</summary>

```json
{"additionalProperties":false,"properties":{"admin_cicd_variables":{"description":"Allow admin CI/CD variables","type":["null","boolean"]},"admin_compliance_framework":{"description":"Allow admin compliance framework","type":["null","boolean"]},"admin_group_member":{"description":"Allow admin group members","type":["null","boolean"]},"admin_merge_request":{"description":"Allow admin merge requests","type":["null","boolean"]},"admin_push_rules":{"description":"Allow admin push rules","type":["null","boolean"]},"admin_terraform_state":{"description":"Allow admin Terraform state","type":["null","boolean"]},"admin_vulnerability":{"description":"Allow admin vulnerability","type":["null","boolean"]},"admin_web_hook":{"description":"Allow admin webhooks","type":["null","boolean"]},"archive_project":{"description":"Allow archive project","type":["null","boolean"]},"base_access_level":{"type":"integer"},"description":{"type":"string"},"group_id":{"type":"integer"},"id":{"type":"integer"},"manage_deploy_tokens":{"description":"Allow manage deploy tokens","type":["null","boolean"]},"manage_group_access_tokens":{"description":"Allow manage group access tokens","type":["null","boolean"]},"manage_merge_request_settings":{"description":"Allow manage MR settings","type":["null","boolean"]},"manage_project_access_tokens":{"description":"Allow manage project access tokens","type":["null","boolean"]},"manage_security_policy_link":{"description":"Allow manage security policy link","type":["null","boolean"]},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"read_code":{"description":"Allow read code","type":["null","boolean"]},"read_dependency":{"description":"Allow read dependency","type":["null","boolean"]},"read_runners":{"description":"Allow read runners","type":["null","boolean"]},"read_vulnerability":{"description":"Allow read vulnerability","type":["null","boolean"]},"remove_group":{"description":"Allow remove group","type":["null","boolean"]},"remove_project":{"description":"Allow remove project","type":["null","boolean"]}},"required":["id","name","base_access_level"],"type":"object"}
```

</details>

<details><summary>create_instance</summary>

```json
{"additionalProperties":false,"properties":{"admin_cicd_variables":{"description":"Allow admin CI/CD variables","type":["null","boolean"]},"admin_compliance_framework":{"description":"Allow admin compliance framework","type":["null","boolean"]},"admin_group_member":{"description":"Allow admin group members","type":["null","boolean"]},"admin_merge_request":{"description":"Allow admin merge requests","type":["null","boolean"]},"admin_push_rules":{"description":"Allow admin push rules","type":["null","boolean"]},"admin_terraform_state":{"description":"Allow admin Terraform state","type":["null","boolean"]},"admin_vulnerability":{"description":"Allow admin vulnerability","type":["null","boolean"]},"admin_web_hook":{"description":"Allow admin webhooks","type":["null","boolean"]},"archive_project":{"description":"Allow archive project","type":["null","boolean"]},"base_access_level":{"type":"integer"},"description":{"type":"string"},"group_id":{"type":"integer"},"id":{"type":"integer"},"manage_deploy_tokens":{"description":"Allow manage deploy tokens","type":["null","boolean"]},"manage_group_access_tokens":{"description":"Allow manage group access tokens","type":["null","boolean"]},"manage_merge_request_settings":{"description":"Allow manage MR settings","type":["null","boolean"]},"manage_project_access_tokens":{"description":"Allow manage project access tokens","type":["null","boolean"]},"manage_security_policy_link":{"description":"Allow manage security policy link","type":["null","boolean"]},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"read_code":{"description":"Allow read code","type":["null","boolean"]},"read_dependency":{"description":"Allow read dependency","type":["null","boolean"]},"read_runners":{"description":"Allow read runners","type":["null","boolean"]},"read_vulnerability":{"description":"Allow read vulnerability","type":["null","boolean"]},"remove_group":{"description":"Allow remove group","type":["null","boolean"]},"remove_project":{"description":"Allow remove project","type":["null","boolean"]}},"required":["id","name","base_access_level"],"type":"object"}
```

</details>

<details><summary>delete_group</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>delete_instance</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>list_group</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"roles":{"items":{"additionalProperties":false,"properties":{"admin_cicd_variables":{"description":"Allow admin CI/CD variables","type":["null","boolean"]},"admin_compliance_framework":{"description":"Allow admin compliance framework","type":["null","boolean"]},"admin_group_member":{"description":"Allow admin group members","type":["null","boolean"]},"admin_merge_request":{"description":"Allow admin merge requests","type":["null","boolean"]},"admin_push_rules":{"description":"Allow admin push rules","type":["null","boolean"]},"admin_terraform_state":{"description":"Allow admin Terraform state","type":["null","boolean"]},"admin_vulnerability":{"description":"Allow admin vulnerability","type":["null","boolean"]},"admin_web_hook":{"description":"Allow admin webhooks","type":["null","boolean"]},"archive_project":{"description":"Allow archive project","type":["null","boolean"]},"base_access_level":{"type":"integer"},"description":{"type":"string"},"group_id":{"type":"integer"},"id":{"type":"integer"},"manage_deploy_tokens":{"description":"Allow manage deploy tokens","type":["null","boolean"]},"manage_group_access_tokens":{"description":"Allow manage group access tokens","type":["null","boolean"]},"manage_merge_request_settings":{"description":"Allow manage MR settings","type":["null","boolean"]},"manage_project_access_tokens":{"description":"Allow manage project access tokens","type":["null","boolean"]},"manage_security_policy_link":{"description":"Allow manage security policy link","type":["null","boolean"]},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"read_code":{"description":"Allow read code","type":["null","boolean"]},"read_dependency":{"description":"Allow read dependency","type":["null","boolean"]},"read_runners":{"description":"Allow read runners","type":["null","boolean"]},"read_vulnerability":{"description":"Allow read vulnerability","type":["null","boolean"]},"remove_group":{"description":"Allow remove group","type":["null","boolean"]},"remove_project":{"description":"Allow remove project","type":["null","boolean"]}},"required":["id","name","base_access_level"],"type":"object"},"type":["null","array"]}},"required":["roles"],"type":"object"}
```

</details>

<details><summary>list_instance</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"roles":{"items":{"additionalProperties":false,"properties":{"admin_cicd_variables":{"description":"Allow admin CI/CD variables","type":["null","boolean"]},"admin_compliance_framework":{"description":"Allow admin compliance framework","type":["null","boolean"]},"admin_group_member":{"description":"Allow admin group members","type":["null","boolean"]},"admin_merge_request":{"description":"Allow admin merge requests","type":["null","boolean"]},"admin_push_rules":{"description":"Allow admin push rules","type":["null","boolean"]},"admin_terraform_state":{"description":"Allow admin Terraform state","type":["null","boolean"]},"admin_vulnerability":{"description":"Allow admin vulnerability","type":["null","boolean"]},"admin_web_hook":{"description":"Allow admin webhooks","type":["null","boolean"]},"archive_project":{"description":"Allow archive project","type":["null","boolean"]},"base_access_level":{"type":"integer"},"description":{"type":"string"},"group_id":{"type":"integer"},"id":{"type":"integer"},"manage_deploy_tokens":{"description":"Allow manage deploy tokens","type":["null","boolean"]},"manage_group_access_tokens":{"description":"Allow manage group access tokens","type":["null","boolean"]},"manage_merge_request_settings":{"description":"Allow manage MR settings","type":["null","boolean"]},"manage_project_access_tokens":{"description":"Allow manage project access tokens","type":["null","boolean"]},"manage_security_policy_link":{"description":"Allow manage security policy link","type":["null","boolean"]},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"read_code":{"description":"Allow read code","type":["null","boolean"]},"read_dependency":{"description":"Allow read dependency","type":["null","boolean"]},"read_runners":{"description":"Allow read runners","type":["null","boolean"]},"read_vulnerability":{"description":"Allow read vulnerability","type":["null","boolean"]},"remove_group":{"description":"Allow remove group","type":["null","boolean"]},"remove_project":{"description":"Allow remove project","type":["null","boolean"]}},"required":["id","name","base_access_level"],"type":"object"},"type":["null","array"]}},"required":["roles"],"type":"object"}
```

</details>

### gitlab_merge_train

**Merge Train**

Use {"action":"get","params":{...}}; only top-level keys are action and params.
Action params schema: gitlab://tools/gitlab_merge_train.<action>.

Manage GitLab merge trains (automated merge queues). List, get, and add MRs to merge trains.
Returns: JSON with resource data. Lists include pagination (page, per_page, total, next_page). Errors: 404 not found, 403 forbidden — with actionable hints.

Param conventions: * = required. All actions need project_id*.

- list_project: project_id*, scope (active/complete), sort (asc/desc), page, per_page
- list_branch: project_id*, target_branch*, scope, sort, page, per_page
- get: project_id*, merge_request_iid*
- add: project_id*, merge_request_iid*, auto_merge (bool), sha, squash (bool)

See also: gitlab_merge_request, gitlab_pipeline

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

**Action Output Schemas:**

<details><summary>add</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"},"trains":{"items":{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"duration":{"type":"integer"},"id":{"type":"integer"},"merge_request":{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"id":{"type":"integer"},"iid":{"type":"integer"},"project_id":{"type":"integer"},"state":{"type":"string"},"title":{"type":"string"},"updated_at":{"type":"string"},"web_url":{"type":"string"}},"required":["id","iid","project_id","title","state"],"type":"object"},"merged_at":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pipeline_id":{"type":"integer"},"status":{"type":"string"},"target_branch":{"type":"string"},"updated_at":{"type":"string"},"user":{"type":"string"}},"required":["id","merge_request","target_branch","status","duration"],"type":"object"},"type":["null","array"]}},"required":["trains","pagination"],"type":"object"}
```

</details>

<details><summary>get</summary>

```json
{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"duration":{"type":"integer"},"id":{"type":"integer"},"merge_request":{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"id":{"type":"integer"},"iid":{"type":"integer"},"project_id":{"type":"integer"},"state":{"type":"string"},"title":{"type":"string"},"updated_at":{"type":"string"},"web_url":{"type":"string"}},"required":["id","iid","project_id","title","state"],"type":"object"},"merged_at":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pipeline_id":{"type":"integer"},"status":{"type":"string"},"target_branch":{"type":"string"},"updated_at":{"type":"string"},"user":{"type":"string"}},"required":["id","merge_request","target_branch","status","duration"],"type":"object"}
```

</details>

<details><summary>list_branch</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"},"trains":{"items":{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"duration":{"type":"integer"},"id":{"type":"integer"},"merge_request":{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"id":{"type":"integer"},"iid":{"type":"integer"},"project_id":{"type":"integer"},"state":{"type":"string"},"title":{"type":"string"},"updated_at":{"type":"string"},"web_url":{"type":"string"}},"required":["id","iid","project_id","title","state"],"type":"object"},"merged_at":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pipeline_id":{"type":"integer"},"status":{"type":"string"},"target_branch":{"type":"string"},"updated_at":{"type":"string"},"user":{"type":"string"}},"required":["id","merge_request","target_branch","status","duration"],"type":"object"},"type":["null","array"]}},"required":["trains","pagination"],"type":"object"}
```

</details>

<details><summary>list_project</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"has_more":{"type":"boolean"},"next_page":{"type":"integer"},"page":{"type":"integer"},"per_page":{"type":"integer"},"prev_page":{"type":"integer"},"total_items":{"type":"integer"},"total_pages":{"type":"integer"}},"required":["page","per_page","total_items","total_pages","next_page","prev_page","has_more"],"type":"object"},"trains":{"items":{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"duration":{"type":"integer"},"id":{"type":"integer"},"merge_request":{"additionalProperties":false,"properties":{"created_at":{"type":"string"},"id":{"type":"integer"},"iid":{"type":"integer"},"project_id":{"type":"integer"},"state":{"type":"string"},"title":{"type":"string"},"updated_at":{"type":"string"},"web_url":{"type":"string"}},"required":["id","iid","project_id","title","state"],"type":"object"},"merged_at":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pipeline_id":{"type":"integer"},"status":{"type":"string"},"target_branch":{"type":"string"},"updated_at":{"type":"string"},"user":{"type":"string"}},"required":["id","merge_request","target_branch","status","duration"],"type":"object"},"type":["null","array"]}},"required":["trains","pagination"],"type":"object"}
```

</details>

### gitlab_orbit

**Orbit**

Use {"action":"dsl","params":{...}}; only top-level keys are action and params.
Action params schema: gitlab://tools/gitlab_orbit.<action>.
Action guidance:
- dsl: Retrieve the experimental GitLab Orbit query DSL schema or LLM grammar.
- graph_status: Inspect experimental GitLab Orbit graph indexing status for one scope.
- query: Execute a read-only experimental GitLab Orbit Knowledge Graph query.
- schema: Inspect the experimental GitLab Orbit Knowledge Graph ontology.
- status: Inspect experimental GitLab Orbit cluster health on GitLab.com.
- tools: List the experimental GitLab Orbit MCP tool manifest and parameter schemas.

GitLab orbit actions.

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

**Action Output Schemas:**

<details><summary>dsl</summary>

```json
{"additionalProperties":false,"properties":{"content":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"response_format":{"type":"string"}},"type":"object"}
```

</details>

<details><summary>graph_status</summary>

```json
{"additionalProperties":false,"properties":{"domains":{"items":{"additionalProperties":false,"properties":{"items":{"items":{"additionalProperties":false,"properties":{"count":{"type":"integer"},"name":{"type":"string"}},"required":["count"],"type":"object"},"type":["null","array"]},"name":{"type":"string"}},"type":"object"},"type":["null","array"]},"formatted_text":{"type":"string"},"indexing":{"additionalProperties":false,"properties":{"last_completed_at":{"type":"string"},"last_duration_ms":{"type":"integer"},"last_error":{"type":"string"},"last_started_at":{"type":"string"},"state":{"type":"string"}},"type":["null","object"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"projects":{"additionalProperties":false,"properties":{"indexed":{"type":"integer"},"total_known":{"type":"integer"}},"required":["indexed","total_known"],"type":["null","object"]}},"type":"object"}
```

</details>

<details><summary>query</summary>

```json
{"additionalProperties":false,"properties":{"formatted_text":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"query_type":{"type":"string"},"raw_query_strings":{"items":{"type":"string"},"type":["null","array"]},"result":true,"row_count":{"type":"integer"}},"type":"object"}
```

</details>

<details><summary>schema</summary>

```json
{"additionalProperties":false,"properties":{"domains":{"items":{"additionalProperties":false,"properties":{"description":{"type":"string"},"name":{"type":"string"},"node_names":{"items":{"type":"string"},"type":["null","array"]}},"type":"object"},"type":["null","array"]},"edges":{"items":{"additionalProperties":false,"properties":{"description":{"type":"string"},"name":{"type":"string"},"variants":{"items":{"additionalProperties":false,"properties":{"source_type":{"type":"string"},"target_type":{"type":"string"}},"type":"object"},"type":["null","array"]}},"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"nodes":{"items":true,"type":["null","array"]},"schema_version":{"type":"string"}},"type":"object"}
```

</details>

<details><summary>status</summary>

```json
{"additionalProperties":false,"properties":{"components":{"items":{"additionalProperties":false,"properties":{"metrics":true,"name":{"type":"string"},"replicas":{"additionalProperties":false,"properties":{"desired":{"type":"integer"},"ready":{"type":"integer"}},"required":["ready","desired"],"type":["null","object"]},"status":{"type":"string"}},"type":"object"},"type":["null","array"]},"formatted_text":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"},"timestamp":{"type":"string"},"version":{"type":"string"}},"type":"object"}
```

</details>

<details><summary>tools</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"tools":{"items":{"additionalProperties":false,"properties":{"description":{"type":"string"},"name":{"type":"string"},"parameters":true},"type":"object"},"type":["null","array"]}},"type":"object"}
```

</details>

### gitlab_project_alias

**Project Alias**

Use {"action":"list","params":{...}}; only top-level keys are action and params.
Action params schema: gitlab://tools/gitlab_project_alias.<action>.

CRUD project aliases: short names that redirect to projects (admin, Premium/Ultimate).
Returns: JSON with resource data. Lists include pagination (page, per_page, total, next_page). Void actions return confirmation. Errors: 404 not found, 403 forbidden, 400 invalid params — with actionable hints.

- list: no params
- get / delete: name*
- create: name*, project_id* (int64)

See also: gitlab_project

Annotations: readOnly=false, destructive=true, idempotent=false, openWorld=true

**Action Output Schemas:**

<details><summary>create</summary>

```json
{"additionalProperties":false,"properties":{"id":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"project_id":{"type":"integer"}},"required":["id","project_id","name"],"type":"object"}
```

</details>

<details><summary>delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>get</summary>

```json
{"additionalProperties":false,"properties":{"id":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"project_id":{"type":"integer"}},"required":["id","project_id","name"],"type":"object"}
```

</details>

<details><summary>list</summary>

```json
{"additionalProperties":false,"properties":{"aliases":{"items":{"additionalProperties":false,"properties":{"id":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"project_id":{"type":"integer"}},"required":["id","project_id","name"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["aliases"],"type":"object"}
```

</details>

### gitlab_security_attribute

**Security Attribute**

Use {"action":"create","params":{...}}; only top-level keys are action and params.
Action params schema: gitlab://tools/gitlab_security_attribute.<action>.
Action guidance:
- bulk_update: Apply security attributes to many groups and projects in one request.
- create: Create security attributes under an existing security category.
- delete: Delete an editable custom security attribute.
- project_update: Add or remove security attributes on a project.
- update: Update security attribute metadata.

Manage GitLab security attributes via GraphQL (Premium/Ultimate). Security attributes classify groups and projects under namespace-level security categories.
Returns: JSON with created or updated attribute data, project update counts, or destructive confirmation messages. Destructive actions require confirmation.

Param conventions: IDs are numeric GitLab IDs; mode is one of ADD, REMOVE, or REPLACE.

- create: namespace_id*, category_id*, attributes* (array of {name, description, color})
- update: attribute_id*, name, description, color
- delete: attribute_id*
- project_update: project_id*, add_attribute_ids, remove_attribute_ids
- bulk_update: group_ids or project_ids*, attribute_ids*, mode*

See also: gitlab_security_category, gitlab_project, gitlab_group

Annotations: readOnly=false, destructive=true, idempotent=false, openWorld=true

**Action Output Schemas:**

<details><summary>bulk_update</summary>

```json
{"additionalProperties":false,"properties":{"attribute_ids":{"items":{"type":"integer"},"type":["null","array"]},"group_ids":{"items":{"type":"integer"},"type":["null","array"]},"message":{"type":"string"},"mode":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"project_ids":{"items":{"type":"integer"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message","mode","attribute_ids"],"type":"object"}
```

</details>

<details><summary>create</summary>

```json
{"additionalProperties":false,"properties":{"attributes":{"items":{"additionalProperties":false,"properties":{"color":{"type":"string"},"description":{"type":"string"},"editable_state":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"security_category":{"additionalProperties":false,"properties":{"description":{"type":"string"},"editable_state":{"type":"string"},"id":{"type":"integer"},"multiple_selection":{"type":"boolean"},"name":{"type":"string"},"template_type":{"type":"string"}},"required":["id","name","multiple_selection"],"type":["null","object"]}},"required":["id","name","color"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]}},"required":["attributes"],"type":"object"}
```

</details>

<details><summary>delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>project_update</summary>

```json
{"additionalProperties":false,"properties":{"added_count":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"removed_count":{"type":"integer"}},"required":["added_count","removed_count"],"type":"object"}
```

</details>

<details><summary>update</summary>

```json
{"additionalProperties":false,"properties":{"color":{"type":"string"},"description":{"type":"string"},"editable_state":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"security_category":{"additionalProperties":false,"properties":{"description":{"type":"string"},"editable_state":{"type":"string"},"id":{"type":"integer"},"multiple_selection":{"type":"boolean"},"name":{"type":"string"},"template_type":{"type":"string"}},"required":["id","name","multiple_selection"],"type":["null","object"]}},"required":["id","name","color"],"type":"object"}
```

</details>

### gitlab_security_category

**Security Category**

Use {"action":"create","params":{...}}; only top-level keys are action and params.
Action params schema: gitlab://tools/gitlab_security_category.<action>.
Action guidance:
- create: Create a security category before creating security attributes under it.
- delete: Delete a custom security category and its associated attributes.
- update: Update editable custom security category metadata.

Manage GitLab security categories via GraphQL (Premium/Ultimate). Categories group namespace-level security attributes and control whether multiple attributes can be selected.
Returns: JSON with category metadata and nested attribute summaries. Delete is destructive and requires confirmation because associated attributes are also deleted.

Param conventions: IDs are numeric GitLab IDs.

- create: namespace_id*, name*, description, multiple_selection
- update: category_id*, namespace_id*, name, description
- delete: category_id*

See also: gitlab_security_attribute, gitlab_group, gitlab_project

Annotations: readOnly=false, destructive=true, idempotent=false, openWorld=true

**Action Output Schemas:**

<details><summary>create</summary>

```json
{"additionalProperties":false,"properties":{"description":{"type":"string"},"editable_state":{"type":"string"},"id":{"type":"integer"},"multiple_selection":{"type":"boolean"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"security_attributes":{"items":{"additionalProperties":false,"properties":{"color":{"type":"string"},"description":{"type":"string"},"editable_state":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"}},"required":["id","name","color"],"type":"object"},"type":["null","array"]},"template_type":{"type":"string"}},"required":["id","name","multiple_selection"],"type":"object"}
```

</details>

<details><summary>delete</summary>

```json
{"additionalProperties":false,"properties":{"message":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"status":{"type":"string"}},"required":["status","message"],"type":"object"}
```

</details>

<details><summary>update</summary>

```json
{"additionalProperties":false,"properties":{"description":{"type":"string"},"editable_state":{"type":"string"},"id":{"type":"integer"},"multiple_selection":{"type":"boolean"},"name":{"type":"string"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"security_attributes":{"items":{"additionalProperties":false,"properties":{"color":{"type":"string"},"description":{"type":"string"},"editable_state":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"}},"required":["id","name","color"],"type":"object"},"type":["null","array"]},"template_type":{"type":"string"}},"required":["id","name","multiple_selection"],"type":"object"}
```

</details>

### gitlab_security_finding

**Security Finding**

Use {"action":"list","params":{...}}; only top-level keys are action and params.
Action params schema: gitlab://tools/gitlab_security_finding.<action>.

List pipeline security report findings via GraphQL (Premium/Ultimate). Replaces deprecated REST vulnerability_findings endpoint.
Returns: JSON with resource data. The list action accepts first/after cursor pagination and returns action-specific pagination metadata. Errors: 404 not found, 403 forbidden — with actionable hints.

- list: project_path*, pipeline_iid*, severity, confidence, scanner, report_type (arrays), first, after

See also: gitlab_vulnerability, gitlab_pipeline

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

**Action Output Schemas:**

<details><summary>list</summary>

```json
{"additionalProperties":false,"properties":{"findings":{"items":{"additionalProperties":false,"properties":{"confidence":{"type":"string"},"description":{"type":"string"},"evidence":{"additionalProperties":false,"properties":{"data":{"type":"string"},"source":{"type":"string"}},"type":["null","object"]},"identifiers":{"items":{"additionalProperties":false,"properties":{"external_id":{"type":"string"},"external_type":{"type":"string"},"name":{"type":"string"},"url":{"type":"string"}},"required":["name"],"type":"object"},"type":["null","array"]},"location":{"additionalProperties":false,"properties":{"blob_path":{"type":"string"},"end_line":{"type":"integer"},"file":{"type":"string"},"start_line":{"type":"integer"}},"type":["null","object"]},"name":{"type":"string"},"report_type":{"type":"string"},"scanner":{"additionalProperties":false,"properties":{"external_id":{"type":"string"},"name":{"type":"string"},"vendor":{"type":"string"}},"required":["name"],"type":["null","object"]},"severity":{"type":"string"},"solution":{"type":"string"},"state":{"type":"string"},"title":{"type":"string"},"uuid":{"type":"string"},"vulnerability_id":{"type":"string"},"vulnerability_state":{"type":"string"}},"required":["uuid","name","severity","report_type","state"],"type":"object"},"type":["null","array"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"end_cursor":{"type":"string"},"has_next_page":{"type":"boolean"},"has_previous_page":{"type":"boolean"},"start_cursor":{"type":"string"}},"required":["has_next_page","has_previous_page"],"type":"object"}},"required":["findings","pagination"],"type":"object"}
```

</details>

### gitlab_vulnerability

**Vulnerability**

Use {"action":"list","params":{...}}; only top-level keys are action and params.
Action params schema: gitlab://tools/gitlab_vulnerability.<action>.

List, triage, and summarize project vulnerabilities (Premium/Ultimate, GraphQL). Actions: list, get, dismiss, confirm, resolve, revert, severity_count, pipeline_security_summary.
Returns: JSON with resource data. The list action accepts first/after cursor pagination and returns action-specific pagination metadata. Void actions return confirmation. Errors: 404 not found, 403 forbidden, 400 invalid params — with actionable hints.

Param conventions: * = required. GID format: gid://gitlab/Vulnerability/42.

- list: project_path*, severity, state, scanner, report_type (arrays), has_issues, has_resolution, sort, first, after
- get / confirm / resolve / revert: id* (GID)
- dismiss: id* (GID), comment, dismissal_reason (ACCEPTABLE_RISK/FALSE_POSITIVE/MITIGATING_CONTROL/USED_IN_TESTS/NOT_APPLICABLE)
- severity_count: project_path*
- pipeline_security_summary: project_path*, pipeline_iid*

See also: gitlab_security_finding, gitlab_pipeline

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

**Action Output Schemas:**

<details><summary>confirm</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"vulnerability":{"additionalProperties":false,"properties":{"confirmed_at":{"type":"string"},"description":{"type":"string"},"detected_at":{"type":"string"},"dismissal_reason":{"type":"string"},"dismissed_at":{"type":"string"},"has_issues":{"type":"boolean"},"has_merge_request":{"type":"boolean"},"has_solutions":{"type":"boolean"},"id":{"type":"string"},"identifiers":{"items":{"additionalProperties":false,"properties":{"external_id":{"type":"string"},"external_type":{"type":"string"},"name":{"type":"string"},"url":{"type":"string"}},"required":["name"],"type":"object"},"type":["null","array"]},"location":{"additionalProperties":false,"properties":{"blob_path":{"type":"string"},"end_line":{"type":"integer"},"file":{"type":"string"},"start_line":{"type":"integer"}},"type":["null","object"]},"primary_identifier":{"additionalProperties":false,"properties":{"external_id":{"type":"string"},"external_type":{"type":"string"},"name":{"type":"string"},"url":{"type":"string"}},"required":["name"],"type":["null","object"]},"project":{"additionalProperties":false,"properties":{"full_path":{"type":"string"},"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name","full_path"],"type":["null","object"]},"report_type":{"type":"string"},"resolved_at":{"type":"string"},"scanner":{"additionalProperties":false,"properties":{"name":{"type":"string"},"scanner_id":{"type":"string"},"vendor":{"type":"string"}},"required":["name"],"type":["null","object"]},"severity":{"type":"string"},"solution":{"type":"string"},"state":{"type":"string"},"title":{"type":"string"},"web_url":{"type":"string"}},"required":["id","title","severity","state"],"type":"object"}},"required":["vulnerability"],"type":"object"}
```

</details>

<details><summary>dismiss</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"vulnerability":{"additionalProperties":false,"properties":{"confirmed_at":{"type":"string"},"description":{"type":"string"},"detected_at":{"type":"string"},"dismissal_reason":{"type":"string"},"dismissed_at":{"type":"string"},"has_issues":{"type":"boolean"},"has_merge_request":{"type":"boolean"},"has_solutions":{"type":"boolean"},"id":{"type":"string"},"identifiers":{"items":{"additionalProperties":false,"properties":{"external_id":{"type":"string"},"external_type":{"type":"string"},"name":{"type":"string"},"url":{"type":"string"}},"required":["name"],"type":"object"},"type":["null","array"]},"location":{"additionalProperties":false,"properties":{"blob_path":{"type":"string"},"end_line":{"type":"integer"},"file":{"type":"string"},"start_line":{"type":"integer"}},"type":["null","object"]},"primary_identifier":{"additionalProperties":false,"properties":{"external_id":{"type":"string"},"external_type":{"type":"string"},"name":{"type":"string"},"url":{"type":"string"}},"required":["name"],"type":["null","object"]},"project":{"additionalProperties":false,"properties":{"full_path":{"type":"string"},"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name","full_path"],"type":["null","object"]},"report_type":{"type":"string"},"resolved_at":{"type":"string"},"scanner":{"additionalProperties":false,"properties":{"name":{"type":"string"},"scanner_id":{"type":"string"},"vendor":{"type":"string"}},"required":["name"],"type":["null","object"]},"severity":{"type":"string"},"solution":{"type":"string"},"state":{"type":"string"},"title":{"type":"string"},"web_url":{"type":"string"}},"required":["id","title","severity","state"],"type":"object"}},"required":["vulnerability"],"type":"object"}
```

</details>

<details><summary>get</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"vulnerability":{"additionalProperties":false,"properties":{"confirmed_at":{"type":"string"},"description":{"type":"string"},"detected_at":{"type":"string"},"dismissal_reason":{"type":"string"},"dismissed_at":{"type":"string"},"has_issues":{"type":"boolean"},"has_merge_request":{"type":"boolean"},"has_solutions":{"type":"boolean"},"id":{"type":"string"},"identifiers":{"items":{"additionalProperties":false,"properties":{"external_id":{"type":"string"},"external_type":{"type":"string"},"name":{"type":"string"},"url":{"type":"string"}},"required":["name"],"type":"object"},"type":["null","array"]},"location":{"additionalProperties":false,"properties":{"blob_path":{"type":"string"},"end_line":{"type":"integer"},"file":{"type":"string"},"start_line":{"type":"integer"}},"type":["null","object"]},"primary_identifier":{"additionalProperties":false,"properties":{"external_id":{"type":"string"},"external_type":{"type":"string"},"name":{"type":"string"},"url":{"type":"string"}},"required":["name"],"type":["null","object"]},"project":{"additionalProperties":false,"properties":{"full_path":{"type":"string"},"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name","full_path"],"type":["null","object"]},"report_type":{"type":"string"},"resolved_at":{"type":"string"},"scanner":{"additionalProperties":false,"properties":{"name":{"type":"string"},"scanner_id":{"type":"string"},"vendor":{"type":"string"}},"required":["name"],"type":["null","object"]},"severity":{"type":"string"},"solution":{"type":"string"},"state":{"type":"string"},"title":{"type":"string"},"web_url":{"type":"string"}},"required":["id","title","severity","state"],"type":"object"}},"required":["vulnerability"],"type":"object"}
```

</details>

<details><summary>list</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"pagination":{"additionalProperties":false,"properties":{"end_cursor":{"type":"string"},"has_next_page":{"type":"boolean"},"has_previous_page":{"type":"boolean"},"start_cursor":{"type":"string"}},"required":["has_next_page","has_previous_page"],"type":"object"},"vulnerabilities":{"items":{"additionalProperties":false,"properties":{"confirmed_at":{"type":"string"},"description":{"type":"string"},"detected_at":{"type":"string"},"dismissal_reason":{"type":"string"},"dismissed_at":{"type":"string"},"has_issues":{"type":"boolean"},"has_merge_request":{"type":"boolean"},"has_solutions":{"type":"boolean"},"id":{"type":"string"},"identifiers":{"items":{"additionalProperties":false,"properties":{"external_id":{"type":"string"},"external_type":{"type":"string"},"name":{"type":"string"},"url":{"type":"string"}},"required":["name"],"type":"object"},"type":["null","array"]},"location":{"additionalProperties":false,"properties":{"blob_path":{"type":"string"},"end_line":{"type":"integer"},"file":{"type":"string"},"start_line":{"type":"integer"}},"type":["null","object"]},"primary_identifier":{"additionalProperties":false,"properties":{"external_id":{"type":"string"},"external_type":{"type":"string"},"name":{"type":"string"},"url":{"type":"string"}},"required":["name"],"type":["null","object"]},"project":{"additionalProperties":false,"properties":{"full_path":{"type":"string"},"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name","full_path"],"type":["null","object"]},"report_type":{"type":"string"},"resolved_at":{"type":"string"},"scanner":{"additionalProperties":false,"properties":{"name":{"type":"string"},"scanner_id":{"type":"string"},"vendor":{"type":"string"}},"required":["name"],"type":["null","object"]},"severity":{"type":"string"},"solution":{"type":"string"},"state":{"type":"string"},"title":{"type":"string"},"web_url":{"type":"string"}},"required":["id","title","severity","state"],"type":"object"},"type":["null","array"]}},"required":["vulnerabilities","pagination"],"type":"object"}
```

</details>

<details><summary>pipeline_security_summary</summary>

```json
{"additionalProperties":false,"properties":{"api_fuzzing":{"additionalProperties":false,"properties":{"scanned_resources_count":{"type":"integer"},"scanned_resources_csv_path":{"type":"string"},"vulnerabilities_count":{"type":"integer"}},"required":["vulnerabilities_count","scanned_resources_count"],"type":["null","object"]},"cluster_image_scanning":{"additionalProperties":false,"properties":{"scanned_resources_count":{"type":"integer"},"scanned_resources_csv_path":{"type":"string"},"vulnerabilities_count":{"type":"integer"}},"required":["vulnerabilities_count","scanned_resources_count"],"type":["null","object"]},"container_scanning":{"additionalProperties":false,"properties":{"scanned_resources_count":{"type":"integer"},"scanned_resources_csv_path":{"type":"string"},"vulnerabilities_count":{"type":"integer"}},"required":["vulnerabilities_count","scanned_resources_count"],"type":["null","object"]},"coverage_fuzzing":{"additionalProperties":false,"properties":{"scanned_resources_count":{"type":"integer"},"scanned_resources_csv_path":{"type":"string"},"vulnerabilities_count":{"type":"integer"}},"required":["vulnerabilities_count","scanned_resources_count"],"type":["null","object"]},"dast":{"additionalProperties":false,"properties":{"scanned_resources_count":{"type":"integer"},"scanned_resources_csv_path":{"type":"string"},"vulnerabilities_count":{"type":"integer"}},"required":["vulnerabilities_count","scanned_resources_count"],"type":["null","object"]},"dependency_scanning":{"additionalProperties":false,"properties":{"scanned_resources_count":{"type":"integer"},"scanned_resources_csv_path":{"type":"string"},"vulnerabilities_count":{"type":"integer"}},"required":["vulnerabilities_count","scanned_resources_count"],"type":["null","object"]},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"sast":{"additionalProperties":false,"properties":{"scanned_resources_count":{"type":"integer"},"scanned_resources_csv_path":{"type":"string"},"vulnerabilities_count":{"type":"integer"}},"required":["vulnerabilities_count","scanned_resources_count"],"type":["null","object"]},"secret_detection":{"additionalProperties":false,"properties":{"scanned_resources_count":{"type":"integer"},"scanned_resources_csv_path":{"type":"string"},"vulnerabilities_count":{"type":"integer"}},"required":["vulnerabilities_count","scanned_resources_count"],"type":["null","object"]},"total_vulnerabilities":{"type":"integer"}},"required":["total_vulnerabilities"],"type":"object"}
```

</details>

<details><summary>resolve</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"vulnerability":{"additionalProperties":false,"properties":{"confirmed_at":{"type":"string"},"description":{"type":"string"},"detected_at":{"type":"string"},"dismissal_reason":{"type":"string"},"dismissed_at":{"type":"string"},"has_issues":{"type":"boolean"},"has_merge_request":{"type":"boolean"},"has_solutions":{"type":"boolean"},"id":{"type":"string"},"identifiers":{"items":{"additionalProperties":false,"properties":{"external_id":{"type":"string"},"external_type":{"type":"string"},"name":{"type":"string"},"url":{"type":"string"}},"required":["name"],"type":"object"},"type":["null","array"]},"location":{"additionalProperties":false,"properties":{"blob_path":{"type":"string"},"end_line":{"type":"integer"},"file":{"type":"string"},"start_line":{"type":"integer"}},"type":["null","object"]},"primary_identifier":{"additionalProperties":false,"properties":{"external_id":{"type":"string"},"external_type":{"type":"string"},"name":{"type":"string"},"url":{"type":"string"}},"required":["name"],"type":["null","object"]},"project":{"additionalProperties":false,"properties":{"full_path":{"type":"string"},"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name","full_path"],"type":["null","object"]},"report_type":{"type":"string"},"resolved_at":{"type":"string"},"scanner":{"additionalProperties":false,"properties":{"name":{"type":"string"},"scanner_id":{"type":"string"},"vendor":{"type":"string"}},"required":["name"],"type":["null","object"]},"severity":{"type":"string"},"solution":{"type":"string"},"state":{"type":"string"},"title":{"type":"string"},"web_url":{"type":"string"}},"required":["id","title","severity","state"],"type":"object"}},"required":["vulnerability"],"type":"object"}
```

</details>

<details><summary>revert</summary>

```json
{"additionalProperties":false,"properties":{"next_steps":{"items":{"type":"string"},"type":["null","array"]},"vulnerability":{"additionalProperties":false,"properties":{"confirmed_at":{"type":"string"},"description":{"type":"string"},"detected_at":{"type":"string"},"dismissal_reason":{"type":"string"},"dismissed_at":{"type":"string"},"has_issues":{"type":"boolean"},"has_merge_request":{"type":"boolean"},"has_solutions":{"type":"boolean"},"id":{"type":"string"},"identifiers":{"items":{"additionalProperties":false,"properties":{"external_id":{"type":"string"},"external_type":{"type":"string"},"name":{"type":"string"},"url":{"type":"string"}},"required":["name"],"type":"object"},"type":["null","array"]},"location":{"additionalProperties":false,"properties":{"blob_path":{"type":"string"},"end_line":{"type":"integer"},"file":{"type":"string"},"start_line":{"type":"integer"}},"type":["null","object"]},"primary_identifier":{"additionalProperties":false,"properties":{"external_id":{"type":"string"},"external_type":{"type":"string"},"name":{"type":"string"},"url":{"type":"string"}},"required":["name"],"type":["null","object"]},"project":{"additionalProperties":false,"properties":{"full_path":{"type":"string"},"id":{"type":"string"},"name":{"type":"string"}},"required":["id","name","full_path"],"type":["null","object"]},"report_type":{"type":"string"},"resolved_at":{"type":"string"},"scanner":{"additionalProperties":false,"properties":{"name":{"type":"string"},"scanner_id":{"type":"string"},"vendor":{"type":"string"}},"required":["name"],"type":["null","object"]},"severity":{"type":"string"},"solution":{"type":"string"},"state":{"type":"string"},"title":{"type":"string"},"web_url":{"type":"string"}},"required":["id","title","severity","state"],"type":"object"}},"required":["vulnerability"],"type":"object"}
```

</details>

<details><summary>severity_count</summary>

```json
{"additionalProperties":false,"properties":{"critical":{"type":"integer"},"high":{"type":"integer"},"info":{"type":"integer"},"low":{"type":"integer"},"medium":{"type":"integer"},"next_steps":{"items":{"type":"string"},"type":["null","array"]},"total":{"type":"integer"},"unknown":{"type":"integer"}},"required":["critical","high","medium","low","info","unknown","total"],"type":"object"}
```

</details>

## Individual Tools

When `TOOL_SURFACE=individual`, up to 1023 individual tools are registered on GitLab.com Enterprise/Premium; self-managed Enterprise/Premium registers 1017.
Grouped by domain:

### access (8 tools)

#### gitlab_access_request_approve_group

Approve a group access request. Optionally set the access level (10=Guest, 20=Reporter, 30=Developer, 40=Maintainer).

**Parameters:**

- `access_level` (integer): Access level to grant (10=Guest, 20=Reporter, 30=Developer, 40=Maintainer)
- `group_id` (string) (required): Group ID or path
- `user_id` (integer) (required): User ID of the access requester

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_access_request_approve_project

Approve a project access request. Optionally set the access level (10=Guest, 20=Reporter, 30=Developer, 40=Maintainer).

**Parameters:**

- `access_level` (integer): Access level to grant (10=Guest, 20=Reporter, 30=Developer, 40=Maintainer)
- `project_id` (string) (required): Project ID or path
- `user_id` (integer) (required): User ID of the access requester

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_access_request_deny_group

Deny a group access request. This action cannot be undone.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `group_id` (string) (required): Group ID or path
- `user_id` (integer) (required): User ID of the access requester

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_access_request_deny_project

Deny a project access request. This action cannot be undone.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `project_id` (string) (required): Project ID or path
- `user_id` (integer) (required): User ID of the access requester

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_access_request_list_group

List access requests for a GitLab group.

**Parameters:**

- `group_id` (string) (required): Group ID or path
- `page` (integer): Page number for pagination
- `per_page` (integer): Number of items per page

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_access_request_list_project

List access requests for a GitLab project.

**Parameters:**

- `page` (integer): Page number for pagination
- `per_page` (integer): Number of items per page
- `project_id` (string) (required): Project ID or path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_access_request_request_group

Request access to a GitLab group for the authenticated user.

**Parameters:**

- `group_id` (string) (required): Group ID or path

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_access_request_request_project

Request access to a GitLab project for the authenticated user.

**Parameters:**

- `project_id` (string) (required): Project ID or path

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

### activate (1 tools)

#### gitlab_activate_user

Activate a deactivated GitLab user (admin only). Deactivated users have been inactive and need reactivation.

**Parameters:**

- `user_id` (integer) (required): The ID of the user

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

### add (18 tools)

#### gitlab_add_commit_discussion_note

Add a reply note to an existing commit discussion thread.

**Parameters:**

- `body` (string) (required): Note body (Markdown supported)
- `commit_sha` (string) (required): Commit SHA
- `discussion_id` (string) (required): Discussion ID to reply to
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_add_email

Add an email address to the currently authenticated GitLab user.

**Parameters:**

- `email` (string) (required): Email address to add
- `skip_confirmation` (boolean): Skip confirmation email (admin only)

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_add_email_for_user

Add an email address to a specific GitLab user (admin only). Requires user ID and email address.

**Parameters:**

- `email` (string) (required): Email address to add
- `skip_confirmation` (boolean): Skip confirmation email (admin only)
- `user_id` (integer) (required): GitLab user ID

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_add_epic_discussion_note

Add a reply note to an existing epic discussion thread via the Work Items GraphQL API.

**Parameters:**

- `body` (string) (required): Note body (Markdown supported)
- `discussion_id` (string) (required): Discussion ID to reply to
- `epic_iid` (integer) (required): Epic IID within the group
- `full_path` (string) (required): Full path of the group (e.g. my-group)

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_add_gpg_key

Add a GPG key to the currently authenticated GitLab user. Requires the armored GPG public key.

**Parameters:**

- `key` (string) (required): The armored GPG public key content

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_add_gpg_key_for_user

Add a GPG key to a specific GitLab user (admin only). Requires user ID and GPG public key.

**Parameters:**

- `key` (string) (required): The armored GPG public key content
- `user_id` (integer) (required): The ID of the user

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_add_group_badge

Add a new badge to a group. Badge URLs support placeholders like %{project_path}, %{default_branch}, %{commit_sha}.

**Parameters:**

- `group_id` (string) (required): Group ID or URL-encoded path
- `image_url` (string) (required): Badge image URL (supports placeholders)
- `link_url` (string) (required): Badge link URL (supports placeholders)
- `name` (string): Badge name

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_add_group_job_token_allowlist

Add a group to the CI/CD job token allowlist.

**Parameters:**

- `project_id` (string) (required): Project ID or URL-encoded path
- `target_group_id` (integer) (required): ID of the group to add to the allowlist

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_add_issue_discussion_note

Add a reply note to an existing issue discussion thread.

**Parameters:**

- `body` (string) (required): Note body (Markdown supported)
- `discussion_id` (string) (required): Discussion ID to reply to
- `issue_iid` (integer) (required): Issue internal ID
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_add_license

Add a new GitLab license (admin). Requires the Base64-encoded license string.

**Parameters:**

- `license` (string) (required): The license string (Base64-encoded)

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_add_merge_request_to_merge_train

Add a merge request to a merge train.

**Parameters:**

- `auto_merge` (boolean): Enable auto-merge when pipeline succeeds
- `merge_request_iid` (integer) (required): Merge request internal ID
- `project_id` (string) (required): Project ID or URL-encoded path
- `sha` (string): Head SHA of the merge request to verify
- `squash` (boolean): Squash commits when merging

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_add_project_badge

Add a new badge to a project. Badge URLs support placeholders like %{project_path}, %{default_branch}, %{commit_sha}.

**Parameters:**

- `image_url` (string) (required): Badge image URL (supports placeholders)
- `link_url` (string) (required): Badge link URL (supports placeholders)
- `name` (string): Badge name
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_add_project_job_token_allowlist

Add a project to the CI/CD job token inbound allowlist.

**Parameters:**

- `project_id` (string) (required): Project ID or URL-encoded path
- `target_project_id` (integer) (required): ID of the project to add to the allowlist

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_add_project_mirror

Create a new remote push mirror for a GitLab project. This push-mirror endpoint may use URL-embedded credentials when GitLab requires inline authentication; treat embedded credentials as secrets and redact them from logs, telemetry, and errors. Pull mirroring uses separate auth_user/auth_password fields and must not put credentials in the URL.

**Parameters:**

- `auth_method` (string): Authentication method (password or ssh_public_key)
- `enabled` (boolean): Whether the mirror is enabled
- `host_keys` (array of strings): SSH host keys for the remote mirror
- `keep_divergent_refs` (boolean): Keep divergent refs on the remote
- `mirror_branch_regex` (string): Regex pattern for branches to mirror
- `only_protected_branches` (boolean): Mirror only protected branches
- `project_id` (string) (required): Project ID or URL-encoded path
- `url` (string) (required): 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

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_add_snippet_discussion_note

Add a reply note to an existing snippet discussion thread.

**Parameters:**

- `body` (string) (required): Note body (Markdown supported)
- `discussion_id` (string) (required): Discussion ID to reply to
- `project_id` (string) (required): Project ID or URL-encoded path
- `snippet_id` (integer) (required): Snippet ID

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_add_ssh_key

Add an SSH key to the currently authenticated GitLab user. Requires a title and the public key content.

**Parameters:**

- `expires_at` (string): Expiration date in ISO 8601 format (YYYY-MM-DD)
- `key` (string) (required): The SSH public key content
- `title` (string) (required): A descriptive title for the SSH key
- `usage_type` (string): Usage type: auth or signing (default: auth)

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_add_ssh_key_for_user

Add an SSH key to a specific GitLab user (admin only). Requires user ID, title, and public key content.

**Parameters:**

- `expires_at` (string): Expiration date in ISO 8601 format (YYYY-MM-DD)
- `key` (string) (required): The SSH public key content
- `title` (string) (required): A descriptive title for the SSH key
- `usage_type` (string): Usage type: auth or signing (default: auth)
- `user_id` (integer) (required): The ID of the user

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_add_system_hook

Add a new system hook (admin). Requires URL. Optionally configure event subscriptions and SSL verification.

**Parameters:**

- `branch_filter_strategy` (string): Branch filter strategy: wildcard, regex, or all_branches
- `description` (string): Description for the hook
- `enable_ssl_verification` (boolean): Enable SSL verification for the hook URL
- `merge_requests_events` (boolean): Trigger on merge request events
- `name` (string): Descriptive name for the hook
- `push_events` (boolean): Trigger on push events
- `push_events_branch_filter` (string): Branch filter for push events (wildcard, regex, or branch name)
- `repository_update_events` (boolean): Trigger on repository update events
- `signing_token` (string): Write-only signing token for webhook signature validation
- `tag_push_events` (boolean): Trigger on tag push events
- `token` (string): Secret token for payload validation
- `url` (string) (required): Hook URL to receive events

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

### analyze (5 tools)

#### gitlab_analyze_ci_configuration

Analyze a GitLab project's CI/CD configuration using LLM-assisted analysis via MCP sampling. Lints the CI config, fetches merged YAML and includes, then requests LLM analysis for best practices, performance, security, and maintainability. Requires the MCP client to support the sampling capability (human-in-the-loop approval).

**Parameters:**

- `content_ref` (string) (required): Branch or tag for CI content (defaults to default branch)
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_analyze_deployment_history

Analyze deployment history and patterns for a GitLab project using LLM-assisted analysis via MCP sampling. Fetches recent deployments, then requests LLM to assess deployment frequency, success rate, rollback patterns, and suggest improvements. Requires the MCP client to support the sampling capability (human-in-the-loop approval).

**Parameters:**

- `environment` (string): Filter by environment name (e.g. production, staging)
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_analyze_issue_scope

Analyze a GitLab issue's scope and effort using LLM-assisted analysis via MCP sampling. Fetches issue details, time stats, participants, related MRs, and discussion notes, then requests LLM to assess scope, complexity, risks, and whether the issue should be broken down. Requires the MCP client to support the sampling capability (human-in-the-loop approval).

**Parameters:**

- `issue_iid` (integer) (required): Issue internal ID
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_analyze_mr_changes

Analyze a GitLab merge request using LLM-assisted code review via MCP sampling. Fetches MR details and diffs, then requests LLM analysis for code quality, bugs, and improvements. Requires the MCP client to support the sampling capability (human-in-the-loop approval).

**Parameters:**

- `merge_request_iid` (integer) (required): Merge request internal ID
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_analyze_pipeline_failure

Analyze a GitLab pipeline failure using LLM-assisted root cause analysis via MCP sampling. Fetches pipeline details, failed jobs and their traces, then requests LLM analysis for root cause, fix suggestions, and impact assessment. Requires the MCP client to support the sampling capability (human-in-the-loop approval).

**Parameters:**

- `pipeline_id` (integer) (required): Pipeline ID to analyze
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

### approve (1 tools)

#### gitlab_approve_user

Approve a pending GitLab user registration (admin only). Required when user sign-up requires admin approval.

**Parameters:**

- `user_id` (integer) (required): The ID of the user

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

### ban (1 tools)

#### gitlab_ban_user

Ban a GitLab user, hiding their activity and preventing login (admin only). More restrictive than blocking.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `user_id` (integer) (required): The ID of the user

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

### block (1 tools)

#### gitlab_block_user

Block a GitLab user, preventing login and API access (admin only). The user's contributions remain intact.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `user_id` (integer) (required): The ID of the user

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

### board (10 tools)

#### gitlab_board_create

Create a new issue board in a project

**Parameters:**

- `name` (string) (required): Board name
- `project_id` (string) (required): Project ID or path

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_board_delete

Delete an issue board from a project. This action cannot be undone.

**Parameters:**

- `board_id` (integer) (required): Board ID
- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `project_id` (string) (required): Project ID or path

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_board_get

Get a single issue board

**Parameters:**

- `board_id` (integer) (required): Board ID
- `project_id` (string) (required): Project ID or path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_board_list

List all issue boards for a project

**Parameters:**

- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `project_id` (string) (required): Project ID or path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_board_list_create

Create a new list in an issue board

**Parameters:**

- `assignee_id` (integer): Assignee ID to create an assignee list
- `board_id` (integer) (required): Board ID
- `iteration_id` (integer): Iteration ID to create an iteration list
- `label_id` (integer): Label ID to create a label list
- `milestone_id` (integer): Milestone ID to create a milestone list
- `project_id` (string) (required): Project ID or path

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_board_list_delete

Delete a list from an issue board. This action cannot be undone.

**Parameters:**

- `board_id` (integer) (required): Board ID
- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `list_id` (integer) (required): Board list ID
- `project_id` (string) (required): Project ID or path

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_board_list_get

Get a single list from an issue board

**Parameters:**

- `board_id` (integer) (required): Board ID
- `list_id` (integer) (required): Board list ID
- `project_id` (string) (required): Project ID or path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_board_list_lists

List all lists in an issue board

**Parameters:**

- `board_id` (integer) (required): Board ID
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `project_id` (string) (required): Project ID or path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_board_list_update

Update (reorder) a list in an issue board

**Parameters:**

- `board_id` (integer) (required): Board ID
- `list_id` (integer) (required): Board list ID
- `position` (integer) (required): New position of the list
- `project_id` (string) (required): Project ID or path

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_board_update

Update an existing issue board

**Parameters:**

- `assignee_id` (integer): Assignee user ID
- `board_id` (integer) (required): Board ID
- `hide_backlog_list` (boolean): Hide the Open list
- `hide_closed_list` (boolean): Hide the Closed list
- `labels` (string): Comma-separated board scope labels
- `milestone_id` (integer): Milestone ID
- `name` (string): Board name
- `project_id` (string) (required): Project ID or path
- `weight` (integer): Board scope weight

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

### branch (7 tools)

#### gitlab_branch_create

Create a new Git branch in a GitLab project from a ref (branch name, tag name, or commit SHA). Returns: branch name, merged/protected/default status, web URL, and latest commit ID. See also: gitlab_mr_create, gitlab_branch_list.

**Parameters:**

- `branch_name` (string) (required): New branch name (param 'branch_name' not 'branch' or 'name')
- `project_id` (string) (required): Project ID or URL-encoded path
- `ref` (string) (required): Branch name, tag, or commit SHA to create from

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_branch_delete

Delete a branch from a GitLab repository. Cannot delete the default branch or protected branches.

**Parameters:**

- `branch_name` (string) (required): Branch name to delete
- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_branch_delete_merged

Delete all branches that have been merged into the default branch. The default branch and protected branches are never deleted.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_branch_get

Retrieve detailed information about a single branch in a GitLab project. Returns branch name, merged/protected/default status, web URL, and latest commit ID.

**Parameters:**

- `branch_name` (string) (required): Branch name to retrieve (param 'branch_name' not 'branch')
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_branch_list

List Git branches in a GitLab project. Supports optional name search filter. Returns paginated results including each branch's protection status and latest commit info.

**Parameters:**

- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `project_id` (string) (required): Project ID or URL-encoded path
- `search` (string): Filter branches by name (substring match)

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_branch_protect

Protect a GitLab repository branch by setting push and merge access levels (0=no access, 30=developer, 40=maintainer, 60=admin). Protected branches cannot be force-pushed or deleted. Returns: branch name, push/merge access levels, allow_force_push, and code_owner_approval_required. See also: gitlab_branch_unprotect, gitlab_protected_branches_list.

**Parameters:**

- `allow_force_push` (boolean): Allow force push to this branch
- `branch_name` (string) (required): Branch name or wildcard (e.g. 'main' or 'release/*')
- `code_owner_approval_required` (boolean): Require CODEOWNERS approval for changes to matching files
- `merge_access_level` (integer): Access level for merge (0=No access 30=Developer 40=Maintainer)
- `project_id` (string) (required): Project ID or URL-encoded path
- `push_access_level` (integer): Access level for push (0=No access 30=Developer 40=Maintainer)

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_branch_unprotect

Remove all protection rules from a GitLab branch, allowing unrestricted push, merge, and force-push access.

**Parameters:**

- `branch_name` (string) (required): Name of the protected branch to remove
- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

### bulk (1 tools)

#### gitlab_bulk_update_security_attributes

Add, remove, or replace GitLab security attributes on multiple groups and projects via GraphQL. Requires Premium or Ultimate. Returns: bulk update status, execution mode, and selected target/attribute IDs. See also: gitlab_security_attribute, gitlab_project, gitlab_group. API docs: https://docs.gitlab.com/api/graphql/reference/#mutationbulkupdatesecurityattributes

**Parameters:**

- `attribute_ids` (array of integers) (required): Security attribute IDs to apply
- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `group_ids` (array of integers): Numeric group IDs to update
- `mode` (string) (required): Bulk update mode: ADD, REMOVE, or REPLACE
- `project_ids` (array of integers): Numeric project IDs to update

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

### cancel (2 tools)

#### gitlab_cancel_bulk_import

Cancel an in-progress bulk import migration. Returns the migration with updated status.

**Parameters:**

- `id` (integer) (required): Bulk import ID

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_cancel_github_import

Cancel an ongoing GitHub project import

**Parameters:**

- `project_id` (integer) (required): The GitLab project ID of the import to cancel

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

### change (1 tools)

#### gitlab_change_plan_limits

Change plan limits (admin). Requires plan_name; optionally set individual file size limits.

**Parameters:**

- `conan_max_file_size` (integer): Maximum Conan package file size in bytes
- `generic_packages_max_file_size` (integer): Maximum generic package file size in bytes
- `helm_max_file_size` (integer): Maximum Helm chart file size in bytes
- `maven_max_file_size` (integer): Maximum Maven package file size in bytes
- `npm_max_file_size` (integer): Maximum NPM package file size in bytes
- `nuget_max_file_size` (integer): Maximum NuGet package file size in bytes
- `plan_name` (string) (required): Plan name to update (e.g. default, free, bronze, silver, gold, premium, ultimate)
- `pypi_max_file_size` (integer): Maximum PyPI package file size in bytes
- `terraform_module_max_file_size` (integer): Maximum Terraform module file size in bytes

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

### ci (7 tools)

#### gitlab_ci_lint

Validate arbitrary CI/CD YAML content within a project's namespace context. Useful for testing CI configuration changes before committing. Returns validation status, errors, warnings, and merged YAML.

**Parameters:**

- `content` (string) (required): CI/CD YAML content to validate
- `dry_run` (boolean) (required): Run pipeline creation simulation
- `include_jobs` (boolean) (required): Include expanded job list in the response
- `project_id` (string) (required): Project ID or URL-encoded path (namespace context)
- `ref` (string) (required): Branch or tag to use for CI includes resolution

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_ci_lint_project

Validate a project's CI/CD configuration (.gitlab-ci.yml) from the repository. Returns validation status, errors, warnings, merged YAML, and includes.

**Parameters:**

- `content_ref` (string) (required): Branch or tag to use for the CI configuration content
- `dry_run` (boolean) (required): Run pipeline creation simulation
- `dry_run_ref` (string) (required): Branch or tag to use as context for the dry run
- `include_jobs` (boolean) (required): Include expanded job list in the response
- `project_id` (string) (required): Project ID or URL-encoded path
- `ref` (string) (required): Branch or tag to use for CI includes resolution

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_ci_variable_create

Create a new CI/CD variable in a GitLab project. Requires key and value. Optionally set type (env_var/file), protection, masking, and environment scope. Returns: key, value, variable_type, protected, masked, environment_scope. See also: gitlab_ci_variable_list.

**Parameters:**

- `description` (string) (required): Variable description
- `environment_scope` (string) (required): Environment scope (default: *)
- `key` (string) (required): Variable key name
- `masked` (boolean) (required): Mask variable value in job logs
- `masked_and_hidden` (boolean) (required): Mask and hide variable value
- `project_id` (string) (required): Project ID or URL-encoded path
- `protected` (boolean) (required): Only expose in protected branches/tags
- `raw` (boolean) (required): Treat variable value as raw string
- `value` (string) (required): Variable value
- `variable_type` (string) (required): Variable type: env_var or file

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_ci_variable_delete

Delete a CI/CD variable from a GitLab project by key. Optionally filter by environment scope. This action cannot be undone.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `environment_scope` (string) (required): Filter by environment scope
- `key` (string) (required): Variable key name
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_ci_variable_get

Get a specific CI/CD variable by key from a GitLab project. Optionally filter by environment scope when duplicate keys exist. Returns: key, value, variable_type, protected, masked, environment_scope. See also: gitlab_ci_variable_list.

**Parameters:**

- `environment_scope` (string) (required): Filter by environment scope
- `key` (string) (required): Variable key name
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_ci_variable_list

List CI/CD variables for a GitLab project. Returns paginated results with variable key, type, protection, masking, and environment scope.

**Parameters:**

- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_ci_variable_update

Update an existing CI/CD variable in a GitLab project. Specify the key to update and any fields to change: value, type, protection, masking, environment scope. Returns: key, value, variable_type, protected, masked, environment_scope. See also: gitlab_ci_variable_get.

**Parameters:**

- `description` (string) (required): Updated variable description
- `environment_scope` (string) (required): Filter by environment scope
- `key` (string) (required): Variable key name
- `masked` (boolean) (required): Mask variable value in job logs
- `project_id` (string) (required): Project ID or URL-encoded path
- `protected` (boolean) (required): Only expose in protected branches/tags
- `raw` (boolean) (required): Treat variable value as raw string
- `value` (string) (required): Updated variable value
- `variable_type` (string) (required): Variable type: env_var or file

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

### commit (13 tools)

#### gitlab_commit_cherry_pick

Cherry-pick a commit to a target branch. Supports dry_run to check for conflicts without creating the commit, and custom commit message. Returns: id, short_id, title, author_name, committed_date, web_url. See also: gitlab_commit_get, gitlab_branch_create.

**Parameters:**

- `branch` (string) (required): Target branch name
- `dry_run` (boolean): If true, does not create the commit but checks for conflicts
- `message` (string): Custom commit message (defaults to original)
- `project_id` (string) (required): Project ID or URL-encoded path
- `sha` (string) (required): Commit SHA to cherry-pick

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_commit_comment_create

Post a comment on a commit. Supports file-level inline comments with path and line number.

**Parameters:**

- `line` (integer): Line number to comment on
- `line_type` (string): Line type: new or old (default: new)
- `note` (string) (required): Comment text
- `path` (string): File path to comment on (for inline comments)
- `project_id` (string) (required): Project ID or URL-encoded path
- `sha` (string) (required): Commit SHA

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_commit_comments

List comments on a specific commit. Returns comment text, file path, line number, and author with pagination.

**Parameters:**

- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `project_id` (string) (required): Project ID or URL-encoded path
- `sha` (string) (required): Commit SHA

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_commit_create

Create a Git commit with one or more file actions in a GitLab repository. Each action in the 'actions' array requires: 'action' (create/update/delete/move/chmod), 'file_path', and 'content' (required for create and update). For 'move' actions, also set 'previous_path'. Supports multi-file atomic commits on any branch with optional author override and start_branch to create new branches. Returns: id, short_id, title, author_name, committed_date, web_url. See also: gitlab_commit_get, gitlab_branch_create.

**Parameters:**

- `actions` (array of objects) (required): List of file actions (create, update, delete, move)
- `author_email` (string): Custom author email
- `author_name` (string): Custom author name
- `branch` (string) (required): Target branch name
- `commit_message` (string) (required): Commit message
- `force` (boolean): When true, force-overwrite the target branch even if a conflict exists
- `project_id` (string) (required): Project ID or URL-encoded path
- `start_branch` (string): Branch to start from if target branch does not exist
- `start_sha` (string): SHA to start from if target branch does not exist (alternative to start_branch)

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_commit_diff

List the diffs (changed files) for a specific commit in a GitLab project. Returns old/new paths, diff text, and flags for new/renamed/deleted files with pagination.

**Parameters:**

- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `project_id` (string) (required): Project ID or URL-encoded path
- `sha` (string) (required): Commit SHA hash to get diffs for
- `unidiff` (boolean): Return diffs in unified diff format

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_commit_get

Retrieve a single commit by SHA from a GitLab project. Returns commit ID, title, full message, author/committer info, parent IDs, stats (additions/deletions/total), and web URL. See also: gitlab_commit_diff, gitlab_commit_merge_requests.

**Parameters:**

- `project_id` (string) (required): Project ID or URL-encoded path
- `sha` (string) (required): Commit SHA hash to retrieve

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_commit_list

List commits in a GitLab repository. Supports filtering by branch/tag (ref_name), date range (since/until in ISO 8601), file path, and author. Optionally includes commit stats (additions/deletions). Returns commit ID, title, author, date, and web URL with pagination.

**Parameters:**

- `author` (string): Filter by commit author name or email
- `first_parent` (boolean): Follow only the first parent commit upon seeing a merge commit
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `path` (string): File path to filter commits by (only commits touching this path)
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `project_id` (string) (required): Project ID or URL-encoded path
- `ref_name` (string): Branch name, tag, or commit SHA to list commits from (default: default branch)
- `since` (string): Return commits after this date (ISO 8601 format, e.g. 2025-01-01T00:00:00Z)
- `until` (string): Return commits before this date (ISO 8601 format, e.g. 2025-12-31T23:59:59Z)
- `with_stats` (boolean): Include commit stats (additions, deletions, total)

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_commit_merge_requests

List merge requests associated with a commit. Returns MR IID, title, state, source/target branches, author, and web URL.

**Parameters:**

- `project_id` (string) (required): Project ID or URL-encoded path
- `sha` (string) (required): Commit SHA

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_commit_refs

Get branches and tags a commit is pushed to. Returns ref type (branch/tag) and name. Supports filtering by type and pagination.

**Parameters:**

- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `project_id` (string) (required): Project ID or URL-encoded path
- `sha` (string) (required): Commit SHA to look up
- `type` (string): Filter by ref type: branch, tag, or all (default: all)

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_commit_revert

Revert a commit on a target branch. Creates a new commit that undoes the changes of the specified commit. Returns: id, short_id, title, author_name, committed_date, web_url. See also: gitlab_commit_get, gitlab_branch_create.

**Parameters:**

- `branch` (string) (required): Target branch name
- `project_id` (string) (required): Project ID or URL-encoded path
- `sha` (string) (required): Commit SHA to revert

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_commit_signature

Get the GPG signature of a commit if it was signed. Returns verification status, key ID, user name, and email.

**Parameters:**

- `project_id` (string) (required): Project ID or URL-encoded path
- `sha` (string) (required): Commit SHA

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_commit_status_set

Set the pipeline status of a commit. State can be: pending, running, success, failed, or canceled. Supports optional ref, name, target_url, description, coverage, and pipeline_id. Returns: id, sha, ref, status, name, description, coverage, pipeline_id. See also: gitlab_commit_statuses.

**Parameters:**

- `context` (string): Status context label (overrides name)
- `coverage` (number): Code coverage percentage
- `description` (string): Short description of the status
- `name` (string): Status name / context
- `pipeline_id` (integer): Pipeline ID to associate the status with
- `project_id` (string) (required): Project ID or URL-encoded path
- `ref` (string): Branch or tag name
- `sha` (string) (required): Commit SHA
- `state` (string) (required): Status state: pending, running, success, failed, canceled
- `target_url` (string): URL to link from the status

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_commit_statuses

List pipeline statuses of a commit. Returns status state, name, ref, description, and coverage. Supports filtering by ref, stage, name, and pipeline_id with pagination.

**Parameters:**

- `all` (boolean): Return all statuses including retries
- `name` (string): Status name filter
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `pipeline_id` (integer): Pipeline ID filter
- `project_id` (string) (required): Project ID or URL-encoded path
- `ref` (string): Branch or tag name filter
- `sha` (string) (required): Commit SHA
- `stage` (string): Stage name filter

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

### confirm (1 tools)

#### gitlab_confirm_vulnerability

Confirm a detected vulnerability (requires Ultimate/Premium). Changes state from DETECTED to CONFIRMED. Returns: updated vulnerability state. See also: gitlab_get_vulnerability, gitlab_dismiss_vulnerability, gitlab_resolve_vulnerability.

**Parameters:**

- `id` (string) (required): Vulnerability GID (e.g. gid://gitlab/Vulnerability/42)

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

### create (30 tools)

#### gitlab_create_application

Create an OAuth2 application (admin). Params: name (required), redirect_uri (required), scopes (required), confidential.

**Parameters:**

- `confidential` (boolean): Whether application is confidential
- `name` (string) (required): Application name
- `redirect_uri` (string) (required): OAuth2 redirect URI
- `scopes` (string) (required): Space-separated list of scopes

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_create_broadcast_message

Create a broadcast message. Requires admin access.

**Parameters:**

- `broadcast_type` (string): Type: banner or notification
- `dismissable` (boolean): Whether message can be dismissed
- `ends_at` (string): End time in ISO 8601 format
- `font` (string): Font for the message
- `message` (string) (required): Message text. Supports Markdown.
- `starts_at` (string): Start time in ISO 8601 format
- `target_access_levels` (array of integers): Access levels to target (10=Guest,20=Reporter,30=Developer,40=Maintainer,50=Owner)
- `target_path` (string): Target path to show message on
- `theme` (string): Theme: indigo, light-indigo, blue, light-blue, green, light-green, red, light-red

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_create_cluster_agent_token

Create a token for a cluster agent

**Parameters:**

- `agent_id` (integer) (required): Agent ID
- `description` (string) (required): Token description
- `name` (string) (required): Token name
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_create_commit_discussion

Create a new discussion thread on a project commit. Supports inline diff comments via position.

**Parameters:**

- `body` (string) (required): Discussion body (Markdown supported)
- `commit_sha` (string) (required): Commit SHA
- `position` (object): Position for inline diff comments
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_create_current_user_pat

Create a personal access token for the currently authenticated GitLab user. Requires token name and scopes.

**Parameters:**

- `description` (string): Description for the token
- `expires_at` (string): Token expiration date (YYYY-MM-DD)
- `name` (string) (required): Name of the personal access token
- `scopes` (array of strings) (required): Array of scopes

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_create_custom_emoji

Create a custom emoji in a GitLab group via GraphQL API. Requires group path, emoji name (without colons), and image URL. Returns: created emoji with ID, name, URL, and created date. See also: gitlab_list_custom_emoji, gitlab_delete_custom_emoji.

**Parameters:**

- `group_path` (string) (required): required,Group full path (e.g. my-group)
- `name` (string) (required): required,Emoji name without colons (e.g. party_parrot)
- `url` (string) (required): required,URL to the emoji image (PNG or GIF recommended)

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_create_dependency_list_export

Create a dependency list export (SBOM) for a pipeline. Returns: export ID and status. Use gitlab_get_dependency_list_export to check status, then gitlab_download_dependency_list_export to download. See also: gitlab_get_dependency_list_export, gitlab_download_dependency_list_export.

**Parameters:**

- `export_type` (string): Export type (default: sbom)
- `pipeline_id` (integer) (required): Pipeline ID to export dependencies from

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_create_epic_discussion

Create a new discussion thread on a group epic via the Work Items GraphQL API.

**Parameters:**

- `body` (string) (required): Discussion body (Markdown supported)
- `epic_iid` (integer) (required): Epic IID within the group
- `full_path` (string) (required): Full path of the group (e.g. my-group)

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_create_error_tracking_client_key

Create a new error tracking client key for a GitLab project.

**Parameters:**

- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_create_freeze_period

Create a deploy freeze period with cron-based start and end times.

**Parameters:**

- `cron_timezone` (string): Timezone for cron expressions (e.g. America/New_York)
- `freeze_end` (string) (required): Cron expression for freeze end (e.g. 0 7 * * 1)
- `freeze_start` (string) (required): Cron expression for freeze start (e.g. 0 23 * * 5)
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_create_geo_site

Create a new Geo replication site.

**Parameters:**

- `container_repositories_max_capacity` (integer): Max number of concurrent container repository syncs
- `enabled` (boolean): Whether the site is enabled
- `files_max_capacity` (integer): Max number of LFS/attachment backfill downloads
- `internal_url` (string): Internal URL of the Geo site
- `minimum_reverification_interval` (integer): Minimum interval (days) before re-verification
- `name` (string): Unique name of the Geo site
- `primary` (boolean): Whether this is a primary site
- `repos_max_capacity` (integer): Max number of concurrent repository backfill syncs
- `selective_sync_namespace_ids` (array of integers): Namespace IDs to sync (when selective_sync_type=namespaces)
- `selective_sync_shards` (array of strings): Storage shards to sync (when selective_sync_type=shards)
- `selective_sync_type` (string): Selective sync type: namespaces or shards
- `sync_object_storage` (boolean): Whether to sync object-stored data
- `url` (string): External URL of the Geo site
- `verification_max_capacity` (integer): Max number of concurrent verification jobs

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_create_group_member_role

Create a custom member role for a GitLab group. Define name, base access level, and optional permissions.

**Parameters:**

- `admin_cicd_variables` (boolean): Allow admin CI/CD variables
- `admin_compliance_framework` (boolean): Allow admin compliance framework
- `admin_group_member` (boolean): Allow admin group members
- `admin_merge_request` (boolean): Allow admin merge requests
- `admin_push_rules` (boolean): Allow admin push rules
- `admin_terraform_state` (boolean): Allow admin Terraform state
- `admin_vulnerability` (boolean): Allow admin vulnerability
- `admin_web_hook` (boolean): Allow admin webhooks
- `archive_project` (boolean): Allow archive project
- `base_access_level` (integer) (required): Base access level (10=Guest, 20=Reporter, 30=Developer, 40=Maintainer)
- `description` (string): Description of the custom role
- `group_id` (string) (required): Group ID or URL-encoded path
- `manage_deploy_tokens` (boolean): Allow manage deploy tokens
- `manage_group_access_tokens` (boolean): Allow manage group access tokens
- `manage_merge_request_settings` (boolean): Allow manage MR settings
- `manage_project_access_tokens` (boolean): Allow manage project access tokens
- `manage_security_policy_link` (boolean): Allow manage security policy link
- `name` (string) (required): Name of the custom role
- `read_code` (boolean): Allow read code
- `read_dependency` (boolean): Allow read dependency
- `read_runners` (boolean): Allow read runners
- `read_vulnerability` (boolean): Allow read vulnerability
- `remove_group` (boolean): Allow remove group
- `remove_project` (boolean): Allow remove project

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_create_group_ssh_certificate

Create an SSH certificate for a GitLab group. Provide a public key and title.

**Parameters:**

- `group_id` (string) (required): Group ID or URL-encoded path
- `key` (string) (required): SSH public key content
- `title` (string) (required): Title for the SSH certificate

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_create_impersonation_token

Create an impersonation token for a GitLab user (admin only). Requires user ID, token name, and scopes.

**Parameters:**

- `expires_at` (string): Token expiration date (YYYY-MM-DD)
- `name` (string) (required): Name of the impersonation token
- `scopes` (array of strings) (required): Array of scopes (api/read_user/read_api/read_repository/write_repository/read_registry/write_registry/sudo/admin_mode/create_runner/manage_runner/ai_features/k8s_proxy)
- `user_id` (integer) (required): GitLab user ID

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_create_instance_member_role

Create a custom member role at the GitLab instance level. Define name, base access level, and optional permissions.

**Parameters:**

- `admin_cicd_variables` (boolean): Allow admin CI/CD variables
- `admin_compliance_framework` (boolean): Allow admin compliance framework
- `admin_group_member` (boolean): Allow admin group members
- `admin_merge_request` (boolean): Allow admin merge requests
- `admin_push_rules` (boolean): Allow admin push rules
- `admin_terraform_state` (boolean): Allow admin Terraform state
- `admin_vulnerability` (boolean): Allow admin vulnerability
- `admin_web_hook` (boolean): Allow admin webhooks
- `archive_project` (boolean): Allow archive project
- `base_access_level` (integer) (required): Base access level (10=Guest, 20=Reporter, 30=Developer, 40=Maintainer)
- `description` (string): Description of the custom role
- `manage_deploy_tokens` (boolean): Allow manage deploy tokens
- `manage_group_access_tokens` (boolean): Allow manage group access tokens
- `manage_merge_request_settings` (boolean): Allow manage MR settings
- `manage_project_access_tokens` (boolean): Allow manage project access tokens
- `manage_security_policy_link` (boolean): Allow manage security policy link
- `name` (string) (required): Name of the custom role
- `read_code` (boolean): Allow read code
- `read_dependency` (boolean): Allow read dependency
- `read_runners` (boolean): Allow read runners
- `read_vulnerability` (boolean): Allow read vulnerability
- `remove_group` (boolean): Allow remove group
- `remove_project` (boolean): Allow remove project

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_create_issue_discussion

Create a new discussion thread on a project issue.

**Parameters:**

- `body` (string) (required): Discussion body (Markdown supported)
- `issue_iid` (integer) (required): Issue internal ID
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_create_mr_context_commits

Add context commits to a merge request. Context commits are additional commits relevant to the MR that are not part of the source branch diff. Provide a list of commit SHAs to attach.

**Parameters:**

- `commits` (array of strings) (required): List of commit SHAs to add as context
- `merge_request_iid` (integer) (required): Merge request IID
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_create_package_protection_rule

Create a package protection rule for a GitLab project. Restricts push/delete operations on packages matching a name pattern.

**Parameters:**

- `minimum_access_level_for_delete` (string): Minimum access level for delete (maintainer, owner, admin)
- `minimum_access_level_for_push` (string): Minimum access level for push (maintainer, owner, admin)
- `package_name_pattern` (string) (required): Package name pattern with optional wildcards (e.g. @my-scope/my-pkg*)
- `package_type` (string) (required): Package type (npm, pypi, maven, generic, etc.)
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_create_personal_access_token

Create a personal access token for a specific GitLab user (admin only). Requires user ID, token name, and scopes.

**Parameters:**

- `description` (string): Description for the token
- `expires_at` (string): Token expiration date (YYYY-MM-DD)
- `name` (string) (required): Name of the personal access token
- `scopes` (array of strings) (required): Array of scopes
- `user_id` (integer) (required): GitLab user ID

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_create_project_alias

Create a new project alias (admin-only). Maps an alias name to a project ID.

**Parameters:**

- `name` (string) (required): The alias name to create
- `project_id` (integer) (required): The numeric project ID to alias

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_create_project_external_status_check

Create an external status check for a project. Requires project_id, name, and external_url. Optionally set shared_secret for HMAC and protected_branch_ids.

**Parameters:**

- `external_url` (string) (required): External URL for the status check
- `name` (string) (required): Name of the external status check
- `project_id` (string) (required): Project ID or URL-encoded path
- `protected_branch_ids` (array of integers): IDs of protected branches to scope the check to
- `shared_secret` (string): Shared secret for HMAC verification

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_create_secure_file

Create a new CI/CD secure file. Provide either file_path (absolute path to a local file) or content_base64 (base64-encoded content), not both.

**Parameters:**

- `content_base64` (string): Base64-encoded file content. Only one of file_path or content_base64 should be provided.
- `file_path` (string): Absolute path to a local file on the MCP server filesystem. Alternative to content_base64. Only one of file_path or content_base64 should be provided.
- `name` (string) (required): Name for the secure file
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_create_security_attribute

Create one or more GitLab security attributes under a security category via GraphQL. Requires Premium or Ultimate. Returns: created security attributes and their categories. See also: gitlab_security_category, gitlab_project, gitlab_group. API docs: https://docs.gitlab.com/api/graphql/reference/#mutationsecurityattributecreate

**Parameters:**

- `attributes` (array of objects) (required): Security attributes to create
- `category_id` (integer) (required): Numeric security category ID
- `namespace_id` (integer) (required): Numeric namespace ID

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_create_security_category

Create a GitLab security category in a namespace via GraphQL. Requires Premium or Ultimate. Returns: created security category. See also: gitlab_security_attribute, gitlab_group, gitlab_project. API docs: https://docs.gitlab.com/api/graphql/reference/#mutationsecuritycategorycreate

**Parameters:**

- `description` (string): Security category description
- `multiple_selection` (boolean): Whether multiple attributes can be selected for the category
- `name` (string) (required): Security category name
- `namespace_id` (integer) (required): Numeric namespace ID

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_create_service_account

Create a new GitLab service account user. Service accounts are machine users for automation.

**Parameters:**

- `email` (string): Email for the service account
- `name` (string): Name for the service account
- `username` (string): Username for the service account

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_create_snippet_discussion

Create a new discussion thread on a project snippet.

**Parameters:**

- `body` (string) (required): Discussion body (Markdown supported)
- `project_id` (string) (required): Project ID or URL-encoded path
- `snippet_id` (integer) (required): Snippet ID

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_create_topic

Create a new project topic. Requires admin access.

**Parameters:**

- `description` (string): Topic description
- `name` (string) (required): Topic name (slug-like unique identifier)
- `title` (string): Topic display title

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_create_user

Create a new GitLab user account (admin only). Requires email, name, and username. Supports setting password, admin status, and profile details.

**Parameters:**

- `admin` (boolean): Grant admin privileges
- `bio` (string): User bio text
- `email` (string) (required): The user email address
- `external` (boolean): Mark user as external
- `force_random_password` (boolean): Set a random password instead of requiring one
- `job_title` (string): User job title
- `location` (string): User location
- `name` (string) (required): The user display name
- `note` (string): Admin note about the user
- `organization` (string): User organization
- `password` (string): The user password (required unless reset_password or force_random_password is set)
- `projects_limit` (integer): Maximum number of projects the user can create
- `reset_password` (boolean): Send a password reset email instead of setting password
- `skip_confirmation` (boolean): Skip confirmation email and activate user immediately
- `username` (string) (required): The username

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_create_user_runner

Create a GitLab CI runner linked to the current user. Runners execute CI/CD jobs. Specify runner_type (instance_type, group_type, or project_type).

**Parameters:**

- `access_level` (string): Access level: not_protected or ref_protected
- `description` (string): Runner description
- `group_id` (integer): Group ID (required for group_type runners)
- `locked` (boolean): Whether the runner should be locked
- `maintenance_note` (string): Maintenance note for the runner
- `maximum_timeout` (integer): Maximum timeout for jobs in seconds
- `paused` (boolean): Whether the runner should be paused
- `project_id` (integer): Project ID (required for project_type runners)
- `run_untagged` (boolean): Whether the runner can run untagged jobs
- `runner_type` (string) (required): Runner type: instance_type or group_type or project_type
- `tag_list` (array of strings): List of runner tags

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_create_work_item

Create a new work item. Requires full_path, work_item_type_id, and title. Supports linked_items to link other work items on creation. Experimental: the Work Items API may introduce breaking changes between minor versions.

**Parameters:**

- `assignee_ids` (array of integers): Global IDs of assignees
- `color` (string): Color hex code (e.g. #fefefe)
- `confidential` (boolean): Whether the work item is confidential
- `description` (string): Description of the work item
- `due_date` (string): Due date (YYYY-MM-DD)
- `full_path` (string) (required): Full path of the project or group
- `health_status` (string): Health status (onTrack/needsAttention/atRisk)
- `label_ids` (array of integers): Global IDs of labels
- `linked_items` (object): Linked work items to add on creation
- `milestone_id` (integer): Global ID of the milestone
- `start_date` (string): Start date (YYYY-MM-DD)
- `title` (string) (required): Title of the work item
- `weight` (integer): Weight of the work item
- `work_item_type_id` (string) (required): Global ID of work item type (e.g. gid://gitlab/WorkItems::Type/1 for Issue)

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

### current (1 tools)

#### gitlab_current_user_status

Retrieve the status of the currently authenticated GitLab user. Returns emoji, message, availability, and clear-at time.

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

### deactivate (1 tools)

#### gitlab_deactivate_user

Deactivate an active GitLab user (admin only). Deactivated users cannot login but accounts are preserved.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `user_id` (integer) (required): The ID of the user

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

### delete (47 tools)

#### gitlab_delete_alert_metric_image

Delete a metric image from a GitLab alert.

**Parameters:**

- `alert_iid` (integer) (required): Alert IID
- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `image_id` (integer) (required): Metric image ID
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_delete_application

Delete an OAuth2 application (admin). Params: id (required).

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `id` (integer) (required): Application ID to delete

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_delete_broadcast_message

Delete a broadcast message. Requires admin access.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `id` (integer) (required): Broadcast message ID

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_delete_cluster_agent

Delete a cluster agent

**Parameters:**

- `agent_id` (integer) (required): Agent ID
- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_delete_commit_discussion_note

Delete a note from a commit discussion thread.

**Parameters:**

- `commit_sha` (string) (required): Commit SHA
- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `discussion_id` (string) (required): Discussion ID
- `note_id` (integer) (required): Note ID to delete
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_delete_custom_attribute

Delete a custom attribute for a user, group, or project (admin). Params: resource_type (required), resource_id (required), key (required).

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `key` (string) (required): Attribute key to delete
- `resource_id` (integer) (required): ID of the resource
- `resource_type` (string) (required): Resource type: user, group, or project

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_delete_custom_emoji

Delete a custom emoji from a GitLab group via GraphQL API. Requires the emoji GID. Returns: confirmation message. See also: gitlab_list_custom_emoji.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `id` (string) (required): required,Custom emoji GID (e.g. gid://gitlab/CustomEmoji/1)

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_delete_email

Delete an email address from the currently authenticated GitLab user.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `email_id` (integer) (required): Email ID to delete

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_delete_email_for_user

Delete an email address from a specific GitLab user (admin only).

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `email_id` (integer) (required): Email ID to delete
- `user_id` (integer) (required): GitLab user ID

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_delete_enterprise_user

Delete an enterprise user from a group.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `group_id` (string) (required): Group ID or URL-encoded path
- `hard_delete` (boolean): Permanently delete user instead of soft delete
- `user_id` (integer) (required): User ID

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_delete_epic_discussion_note

Delete a note from an epic discussion thread via the Work Items GraphQL API.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `epic_iid` (integer) (required): Epic IID within the group
- `full_path` (string) (required): Full path of the group (e.g. my-group)
- `note_id` (integer) (required): Note ID to delete

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_delete_error_tracking_client_key

Delete an error tracking client key for a GitLab project.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `key_id` (integer) (required): Client key ID
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_delete_feature_flag

Delete a feature flag (admin). Requires the flag name.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `name` (string) (required): Feature flag name to delete

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_delete_freeze_period

Delete a deploy freeze period from a project.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `freeze_period_id` (integer) (required): Freeze period ID
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_delete_geo_site

Delete a Geo replication site by ID.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `id` (integer) (required): Numeric ID of the Geo site

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_delete_gpg_key

Delete a GPG key from the currently authenticated GitLab user.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `key_id` (integer) (required): The ID of the GPG key to delete

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_delete_gpg_key_for_user

Delete a GPG key from a specific GitLab user (admin only).

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `key_id` (integer) (required): The ID of the GPG key to delete
- `user_id` (integer) (required): The ID of the user

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_delete_group_badge

Remove a badge from a group.

**Parameters:**

- `badge_id` (integer) (required): Badge ID
- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `group_id` (string) (required): Group ID or URL-encoded path

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_delete_group_markdown_upload_by_id

Delete a group markdown upload by ID.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `group_id` (string) (required): The ID or URL-encoded path of the group
- `upload_id` (integer) (required): The ID of the upload to delete

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_delete_group_markdown_upload_by_secret

Delete a group markdown upload by secret and filename.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `filename` (string) (required): The filename of the upload
- `group_id` (string) (required): The ID or URL-encoded path of the group
- `secret` (string) (required): The secret of the upload

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_delete_group_member_role

Delete a custom member role from a GitLab group.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `group_id` (string) (required): Group ID or URL-encoded path
- `member_role_id` (integer) (required): Member role ID to delete

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_delete_group_scim_identity

Delete a SCIM identity from a GitLab group.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `group_id` (string) (required): Group ID or URL-encoded path
- `uid` (string) (required): SCIM external UID of the user

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_delete_group_ssh_certificate

Delete an SSH certificate from a GitLab group.

**Parameters:**

- `certificate_id` (integer) (required): SSH certificate ID
- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `group_id` (string) (required): Group ID or URL-encoded path

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_delete_group_ssh_key

Delete an SSH key managed by a GitLab group.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `group_id` (string) (required): Group ID or URL-encoded path
- `key_id` (integer) (required): SSH key ID

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_delete_instance_member_role

Delete a custom member role at the GitLab instance level.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `member_role_id` (integer) (required): Member role ID to delete

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_delete_integration

Delete (disable) a project integration by slug. Supports the same slugs as get, plus 'slack-application' for disabling the GitLab for Slack app.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `project_id` (string) (required): Project ID or URL-encoded path
- `slug` (string) (required): 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)

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_delete_issue_discussion_note

Delete a note from an issue discussion thread.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `discussion_id` (string) (required): Discussion ID
- `issue_iid` (integer) (required): Issue internal ID
- `note_id` (integer) (required): Note ID to delete
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_delete_license

Delete a GitLab license by ID (admin).

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `id` (integer) (required): License ID to delete

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_delete_mr_context_commits

Remove context commits from a merge request. Provide the list of commit SHAs to detach from the MR context.

**Parameters:**

- `commits` (array of strings) (required): List of commit SHAs to remove from context
- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `merge_request_iid` (integer) (required): Merge request IID
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_delete_package_protection_rule

Delete a package protection rule from a GitLab project.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `project_id` (string) (required): Project ID or URL-encoded path
- `rule_id` (integer) (required): Package protection rule ID

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_delete_project_alias

Delete a project alias by name (admin-only).

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `name` (string) (required): The alias name to delete

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_delete_project_badge

Remove a badge from a project.

**Parameters:**

- `badge_id` (integer) (required): Badge ID
- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_delete_project_external_status_check

Delete an external status check from a project. Requires project_id and check_id.

**Parameters:**

- `check_id` (integer) (required): External status check ID to delete
- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_delete_project_mirror

Delete a remote push mirror from a GitLab project.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `mirror_id` (integer) (required): Remote mirror ID
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_delete_security_attribute

Delete a GitLab security attribute via GraphQL. Requires Premium or Ultimate. Returns: deletion confirmation. See also: gitlab_security_category, gitlab_project, gitlab_group. API docs: https://docs.gitlab.com/api/graphql/reference/#mutationsecurityattributedestroy

**Parameters:**

- `attribute_id` (integer) (required): Numeric security attribute ID
- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_delete_security_category

Delete a GitLab security category and its associated security attributes via GraphQL. Requires Premium or Ultimate. Returns: deletion confirmation. See also: gitlab_security_attribute, gitlab_group, gitlab_project. API docs: https://docs.gitlab.com/api/graphql/reference/#mutationsecuritycategorydestroy

**Parameters:**

- `category_id` (integer) (required): Numeric security category ID
- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_delete_snippet_discussion_note

Delete a note from a snippet discussion thread.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `discussion_id` (string) (required): Discussion ID
- `note_id` (integer) (required): Note ID to delete
- `project_id` (string) (required): Project ID or URL-encoded path
- `snippet_id` (integer) (required): Snippet ID

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_delete_ssh_key

Delete an SSH key from the currently authenticated GitLab user.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `key_id` (integer) (required): The ID of the SSH key to delete

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_delete_ssh_key_for_user

Delete an SSH key from a specific GitLab user (admin only).

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `key_id` (integer) (required): The ID of the SSH key to delete
- `user_id` (integer) (required): The ID of the user

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_delete_system_hook

Delete a system hook by ID (admin).

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `id` (integer) (required): System hook ID to delete

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_delete_system_hook_url_variable

Delete one URL variable from an instance system hook. Returns: a success status and message naming the variable key. See also: gitlab_set_system_hook_url_variable, gitlab_get_system_hook.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `id` (integer) (required): System hook ID
- `key` (string) (required): URL variable key name to delete

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_delete_terraform_state

Delete a Terraform state

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `name` (string) (required): Terraform state name
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_delete_terraform_state_version

Delete a specific version of a Terraform state

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `name` (string) (required): Terraform state name
- `project_id` (string) (required): Project ID or URL-encoded path
- `serial` (integer) (required): State version serial number

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_delete_topic

Delete a project topic. Requires admin access.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `topic_id` (integer) (required): Topic ID

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_delete_user

Delete a GitLab user account (admin only). This permanently removes the user and all their data. Use gitlab_block_user if you want to preserve data.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `user_id` (integer) (required): The ID of the user to delete

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_delete_user_identity

Delete a user's identity provider link (e.g., LDAP, SAML) from GitLab (admin only). The user account itself is preserved.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `provider` (string) (required): The external provider name (e.g. ldap or saml)
- `user_id` (integer) (required): The ID of the user

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_delete_work_item

Permanently delete a work item by IID. This action cannot be undone. Experimental: the Work Items API may introduce breaking changes between minor versions.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `full_path` (string) (required): Full path of the project or group (e.g. my-group/my-project)
- `work_item_iid` (integer) (required): Work item IID

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

### deploy (18 tools)

#### gitlab_deploy_key_add

Add a deploy key to a GitLab project with title, public SSH key, and optional push access and expiry date.

**Parameters:**

- `can_push` (boolean): Whether the key can push to the project
- `expires_at` (string): Expiry date (YYYY-MM-DD)
- `key` (string) (required): Public SSH key content
- `project_id` (string) (required): Project ID or path
- `title` (string) (required): Deploy key title

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_deploy_key_add_instance

Create an instance-level deploy key with title, public SSH key, and optional expiry date. Requires admin access.

**Parameters:**

- `expires_at` (string): Expiry date (YYYY-MM-DD)
- `key` (string) (required): Public SSH key content
- `title` (string) (required): Deploy key title

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_deploy_key_delete

Remove a deploy key from a GitLab project.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `deploy_key_id` (integer) (required): Deploy key ID returned by deploy key operations; do not use deploy_token_id
- `project_id` (string) (required): Project ID or path

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_deploy_key_enable

Enable an existing deploy key for a project (e.g., a key shared from another project).

**Parameters:**

- `deploy_key_id` (integer) (required): Deploy key ID to enable; do not use deploy_token_id
- `project_id` (string) (required): Project ID or path

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_deploy_key_get

Get a specific deploy key for a project by its ID.

**Parameters:**

- `deploy_key_id` (integer) (required): Deploy key ID returned by deploy key operations; do not use deploy_token_id
- `project_id` (string) (required): Project ID or path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_deploy_key_list_all

List all instance-level deploy keys. Requires admin access. Filter by public keys.

**Parameters:**

- `page` (integer): Page number for pagination
- `per_page` (integer): Results per page (max 100)
- `public` (boolean): Filter by public keys

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_deploy_key_list_project

List all deploy keys for a GitLab project.

**Parameters:**

- `page` (integer): Page number for pagination
- `per_page` (integer): Results per page (max 100)
- `project_id` (string) (required): Project ID or path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_deploy_key_list_user_project

List all deploy keys across projects for a specific user.

**Parameters:**

- `page` (integer): Page number for pagination
- `per_page` (integer): Results per page (max 100)
- `user_id` (string) (required): User ID or username

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_deploy_key_update

Update an existing deploy key's title or push access permission.

**Parameters:**

- `can_push` (boolean): Whether the key can push to the project
- `deploy_key_id` (integer) (required): Deploy key ID returned by deploy key operations; do not use deploy_token_id
- `project_id` (string) (required): Project ID or path
- `title` (string): New deploy key title

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_deploy_token_create_group

Create a deploy token for a group with name, scopes, optional username and expiry date.

**Parameters:**

- `expires_at` (string): Expiry date (YYYY-MM-DD)
- `group_id` (string) (required): Group ID or URL-encoded path
- `name` (string) (required): Deploy token name
- `scopes` (array of strings) (required): Array of scopes (read_repository, read_registry, write_registry, read_package_registry, write_package_registry)
- `username` (string): Username for the deploy token

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_deploy_token_create_project

Create a deploy token for a project with name, scopes, optional username and expiry date.

**Parameters:**

- `expires_at` (string): Expiry date (YYYY-MM-DD)
- `name` (string) (required): Deploy token name
- `project_id` (string) (required): Project ID or URL-encoded path
- `scopes` (array of strings) (required): Array of scopes (read_repository, read_registry, write_registry, read_package_registry, write_package_registry)
- `username` (string): Username for the deploy token

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_deploy_token_delete_group

Delete a deploy token from a group. This action cannot be undone.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `deploy_token_id` (integer) (required): Deploy token ID
- `group_id` (string) (required): Group ID or URL-encoded path

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_deploy_token_delete_project

Delete a deploy token from a project. This action cannot be undone.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `deploy_token_id` (integer) (required): Deploy token ID
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_deploy_token_get_group

Get a specific deploy token for a group.

**Parameters:**

- `deploy_token_id` (integer) (required): Deploy token ID
- `group_id` (string) (required): Group ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_deploy_token_get_project

Get a specific deploy token for a project.

**Parameters:**

- `deploy_token_id` (integer) (required): Deploy token ID
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_deploy_token_list_all

List all instance-level deploy tokens. Requires admin access.

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_deploy_token_list_group

List all deploy tokens for a GitLab group.

**Parameters:**

- `group_id` (string) (required): Group ID or URL-encoded path
- `page` (integer): Page number for pagination
- `per_page` (integer): Results per page (max 100)

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_deploy_token_list_project

List all deploy tokens for a GitLab project.

**Parameters:**

- `page` (integer): Page number for pagination
- `per_page` (integer): Results per page (max 100)
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

### deployment (6 tools)

#### gitlab_deployment_approve_or_reject

Approve or reject a deployment that is blocked waiting for manual approval (environments with required approvals). Set status to 'approved' or 'rejected'. Only works when the deployment is in 'blocked' state — use gitlab_deployment_get to check status first. Optionally include a comment.

**Parameters:**

- `comment` (string): Optional comment for the approval or rejection
- `deployment_id` (integer) (required): Deployment ID
- `project_id` (string) (required): Project ID or URL-encoded path
- `status` (string) (required): Approval status: approved or rejected

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_deployment_create

Create a new deployment in a GitLab project. Requires environment name, git ref, and SHA. Optionally specify tag flag and initial status. Returns: id, iid, ref, sha, status, user_name, environment_name, created_at. See also: gitlab_deployment_get, gitlab_environment_get.

**Parameters:**

- `environment` (string) (required): Name of the environment to deploy to
- `project_id` (string) (required): Project ID or URL-encoded path
- `ref` (string) (required): Git branch or tag to deploy
- `sha` (string) (required): Git SHA to deploy
- `status` (string): Deployment status: created or running or success or failed or canceled
- `tag` (boolean): Whether the ref is a tag (default: false)

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_deployment_delete

Permanently delete a deployment from a GitLab project. This action cannot be undone.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `deployment_id` (integer) (required): Deployment ID
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_deployment_get

Get details of a specific deployment in a GitLab project by its ID. Returns deployment ref, SHA, status, user, environment, and timestamps.

**Parameters:**

- `deployment_id` (integer) (required): Deployment ID
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_deployment_list

List deployments for a GitLab project. Supports filtering by environment name and status (created, running, success, failed, canceled). Returns paginated results with deployment details.

**Parameters:**

- `environment` (string): Filter by environment name
- `order_by` (string): Order by id or iid or created_at or updated_at or finished_at or ref (default: id)
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `project_id` (string) (required): Project ID or URL-encoded path
- `sort` (string): Sort order: asc or desc (default: asc)
- `status` (string): Filter by status: created or running or success or failed or canceled

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_deployment_update

Update the status of an existing deployment in a GitLab project. Use to transition a deployment between states: created, running, success, failed, canceled. Returns: id, iid, ref, sha, status, user_name, environment_name, updated_at. See also: gitlab_deployment_get.

**Parameters:**

- `deployment_id` (integer) (required): Deployment ID
- `project_id` (string) (required): Project ID or URL-encoded path
- `status` (string) (required): New deployment status: created or running or success or failed or canceled

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

### disable (2 tools)

#### gitlab_disable_2fa_enterprise_user

Disable two-factor authentication for an enterprise user.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `group_id` (string) (required): Group ID or URL-encoded path
- `user_id` (integer) (required): User ID

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_disable_two_factor

Disable two-factor authentication for a GitLab user (admin only). Use with caution as this reduces account security.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `user_id` (integer) (required): The ID of the user

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

### discover (1 tools)

#### gitlab_discover_project

Resolve a full git remote URL to a GitLab project and return its project_id and metadata. Read-only; performs a lookup against the GitLab Projects API; no side effects.

**Parameters:**

- `remote_url` (string) (required): Full git remote URL (HTTPS or SSH) exactly as shown in .git/config or 'git remote -v' output. IMPORTANT: pass the complete URL including the scheme (https://) or user prefix (git@). Examples: 'https://gitlab.example.com/group/project.git' or 'git@gitlab.example.com:group/project.git'. Do not pass plain project paths such as group/project, and do not synthesize URLs by adding .git to a project path; project paths are already valid project_id values.

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

### dismiss (1 tools)

#### gitlab_dismiss_vulnerability

Dismiss a vulnerability with optional comment and reason (requires Ultimate/Premium). Valid reasons: ACCEPTABLE_RISK, FALSE_POSITIVE, MITIGATING_CONTROL, USED_IN_TESTS, NOT_APPLICABLE. Returns: updated vulnerability state. See also: gitlab_get_vulnerability, gitlab_revert_vulnerability, gitlab_resolve_vulnerability.

**Parameters:**

- `comment` (string): Reason for dismissal
- `dismissal_reason` (string): Dismissal reason: ACCEPTABLE_RISK, FALSE_POSITIVE, MITIGATING_CONTROL, USED_IN_TESTS, NOT_APPLICABLE
- `id` (string) (required): Vulnerability GID (e.g. gid://gitlab/Vulnerability/42)

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

### download (5 tools)

#### gitlab_download_attestation

Download a specific build attestation by IID. Returns the attestation content as base64-encoded data.

**Parameters:**

- `attestation_iid` (integer) (required): Attestation IID (project-scoped)
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_download_dependency_list_export

Download a completed dependency list export (CycloneDX SBOM JSON). Returns: raw SBOM content (limited to 1MB). See also: gitlab_create_dependency_list_export, gitlab_get_dependency_list_export.

**Parameters:**

- `export_id` (integer) (required): Dependency list export ID

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_download_group_export

Download the finished export archive of a group. Returns the archive as base64-encoded content.

**Parameters:**

- `group_id` (string) (required): Group ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_download_ml_model_package

Download a machine learning model package file from the GitLab model registry.

**Parameters:**

- `filename` (string) (required): Name of the file to download
- `model_version_id` (string) (required): Model version ID (numeric or string like candidate:5)
- `path` (string) (required): Path within the model package
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_download_project_export

Download the finished export archive of a project. Returns the archive as base64-encoded content.

**Parameters:**

- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

### edit (6 tools)

#### gitlab_edit_geo_site

Update configuration of an existing Geo site.

**Parameters:**

- `container_repositories_max_capacity` (integer): Max number of concurrent container repository syncs
- `enabled` (boolean): Whether the site is enabled
- `files_max_capacity` (integer): Max number of LFS/attachment backfill downloads
- `id` (integer) (required): Numeric ID of the Geo site
- `internal_url` (string): Internal URL of the Geo site
- `minimum_reverification_interval` (integer): Minimum interval (days) before re-verification
- `name` (string): Unique name of the Geo site
- `repos_max_capacity` (integer): Max number of concurrent repository backfill syncs
- `selective_sync_namespace_ids` (array of integers): Namespace IDs to sync
- `selective_sync_shards` (array of strings): Storage shards to sync
- `selective_sync_type` (string): Selective sync type: namespaces or shards
- `url` (string): External URL of the Geo site
- `verification_max_capacity` (integer): Max number of concurrent verification jobs

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_edit_group_badge

Edit an existing group badge.

**Parameters:**

- `badge_id` (integer) (required): Badge ID
- `group_id` (string) (required): Group ID or URL-encoded path
- `image_url` (string): New badge image URL
- `link_url` (string): New badge link URL
- `name` (string): New badge name. Use name, not new_name

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_edit_project_badge

Edit an existing project badge.

**Parameters:**

- `badge_id` (integer) (required): Badge ID
- `image_url` (string): New badge image URL
- `link_url` (string): New badge link URL
- `name` (string): New badge name. Use name, not new_name
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_edit_project_mirror

Update an existing remote push mirror configuration for a GitLab project.

**Parameters:**

- `auth_method` (string): Authentication method (password or ssh_public_key)
- `enabled` (boolean): Whether the mirror is enabled
- `host_keys` (array of strings): SSH host keys for the remote mirror
- `keep_divergent_refs` (boolean): Keep divergent refs on the remote
- `mirror_branch_regex` (string): Regex pattern for branches to mirror
- `mirror_id` (integer) (required): Remote mirror ID
- `only_protected_branches` (boolean): Mirror only protected branches
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_edit_resource_group

Edit a resource group process mode.

**Parameters:**

- `key` (string) (required): Resource group key
- `process_mode` (string) (required): Process mode (newest_first, oldest_first, unordered)
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_edit_system_hook

Edit an instance system hook, including event triggers, SSL verification, and URL settings. Returns: the updated system hook object. See also: gitlab_get_system_hook, gitlab_list_system_hooks, gitlab_test_system_hook.

**Parameters:**

- `branch_filter_strategy` (string): Branch filter strategy: wildcard, regex, or all_branches
- `description` (string): Updated hook description
- `enable_ssl_verification` (boolean): Enable SSL verification for the hook URL
- `id` (integer) (required): System hook ID to edit
- `merge_requests_events` (boolean): Trigger on merge request events
- `name` (string): Updated hook name
- `push_events` (boolean): Trigger on push events
- `push_events_branch_filter` (string): Branch filter for push events (wildcard, regex, or branch name)
- `repository_update_events` (boolean): Trigger on repository update events
- `signing_token` (string): Updated write-only signing token for webhook signature validation
- `tag_push_events` (boolean): Trigger on tag push events
- `token` (string): Updated secret token for payload validation
- `url` (string): Updated hook URL

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

### enable (1 tools)

#### gitlab_enable_disable_error_tracking

Enable or disable error tracking for a GitLab project.

**Parameters:**

- `active` (boolean) (required): Enable or disable error tracking
- `integrated` (boolean) (required): Use integrated error tracking
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

### environment (6 tools)

#### gitlab_environment_create

Create a new environment in a GitLab project. Specify name (required), description, external URL, and tier (production, staging, testing, development, other). Returns: id, name, slug, state, tier, external_url, created_at. See also: gitlab_environment_get.

**Parameters:**

- `description` (string): Description of the environment
- `external_url` (string): URL of the environment's external deployment
- `name` (string) (required): Environment name (e.g. production, staging)
- `project_id` (string) (required): Project ID or URL-encoded path
- `tier` (string): Deployment tier: production, staging, testing, development, other

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_environment_delete

Permanently delete an environment from a GitLab project. The environment must be stopped before it can be deleted.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `environment_id` (integer) (required): Environment ID
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_environment_get

Get details of a specific environment in a GitLab project by its ID. Returns environment name, state, tier, external URL, and timestamps.

**Parameters:**

- `environment_id` (integer) (required): Environment ID
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_environment_list

List environments for a GitLab project. Supports filtering by name, search term, and state. Returns paginated results with environment details including tier, state, and external URL.

**Parameters:**

- `name` (string): Filter by exact environment name
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `project_id` (string) (required): Project ID or URL-encoded path
- `search` (string): Search environments by name (fuzzy)
- `states` (string): Filter by state: available, stopping, stopped

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_environment_stop

Stop a running environment in a GitLab project. Triggers any on_stop actions defined in CI/CD. Use force=true to stop even if the environment has active deployments. Returns: id, name, slug, state, tier, external_url. See also: gitlab_environment_get.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `environment_id` (integer) (required): Environment ID
- `force` (boolean): Force stop even if environment has active deployments
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_environment_update

Update an existing environment in a GitLab project. Can modify name, description, external URL, and tier. Returns: id, name, slug, state, tier, external_url, updated_at. See also: gitlab_environment_get.

**Parameters:**

- `description` (string): Updated description
- `environment_id` (integer) (required): Environment ID
- `external_url` (string): Updated external URL
- `name` (string): New environment name
- `project_id` (string) (required): Project ID or URL-encoded path
- `tier` (string): Updated tier: production, staging, testing, development, other

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

### epic (15 tools)

#### gitlab_epic_create

Create a new epic in a GitLab group (via Work Items GraphQL API). Supports title, description, confidentiality, color, dates, assignees, labels, weight, and health status.

**Parameters:**

- `assignee_ids` (array of integers): Global IDs of assignees
- `color` (string): Epic color (hex format, e.g. #FF0000)
- `confidential` (boolean): Whether the epic is confidential
- `description` (string): Epic description (Markdown supported)
- `due_date` (string): Due date (YYYY-MM-DD)
- `full_path` (string) (required): Full path of the group (e.g. my-group)
- `health_status` (string): Health status (onTrack/needsAttention/atRisk)
- `label_ids` (array of integers): Global IDs of labels
- `start_date` (string): Start date (YYYY-MM-DD)
- `title` (string) (required): Epic title
- `weight` (integer): Weight of the epic

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_epic_delete

Permanently delete an epic from a GitLab group (via Work Items GraphQL API).

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `epic_iid` (integer) (required): Epic IID within the group
- `full_path` (string) (required): Full path of the group (e.g. my-group)

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_epic_get

Get a single group epic by its IID (via Work Items GraphQL API). Returns title, description, state, labels, dates, author, assignees, linked items, and health status.

**Parameters:**

- `epic_iid` (integer) (required): Epic IID within the group
- `full_path` (string) (required): Full path of the group (e.g. my-group)

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_epic_get_links

Get all child epics of a parent epic (via REST API). Returns the list of sub-epics linked to the specified epic.

**Parameters:**

- `epic_iid` (integer) (required): Epic IID within the group
- `full_path` (string) (required): Full path of the group (e.g. my-group)

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_epic_issue_assign

Assign an existing issue to a GitLab group epic via the Work Items GraphQL API. The issue is identified by its project path and IID.

**Parameters:**

- `child_iid` (integer) (required): IID of the issue to assign to the epic
- `child_project_path` (string) (required): Full project path of the issue to assign (e.g. my-group/my-project)
- `epic_iid` (integer) (required): Epic IID within the group
- `full_path` (string) (required): Full path of the group that contains the epic

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_epic_issue_list

List all child issues of a GitLab group epic via the Work Items GraphQL API. Supports cursor-based pagination.

**Parameters:**

- `after` (string): Cursor for forward pagination (from previous response end_cursor)
- `before` (string): Cursor for backward pagination (from previous response start_cursor)
- `epic_iid` (integer) (required): Epic IID within the group
- `first` (integer): Number of items to return (default 20, max 100)
- `full_path` (string) (required): Full path of the group (e.g. my-group or my-group/sub-group)
- `last` (integer): Number of items from the end (backward pagination)

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_epic_issue_remove

Remove an issue from a GitLab group epic via the Work Items GraphQL API. Clears the child's parent reference.

**Parameters:**

- `child_iid` (integer) (required): IID of the issue to remove from the epic
- `child_project_path` (string) (required): Full project path of the issue to remove
- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `epic_iid` (integer) (required): Epic IID within the group
- `full_path` (string) (required): Full path of the group that contains the epic

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_epic_issue_update

Reorder an issue within a GitLab group epic via the Work Items GraphQL API. Moves the issue before or after a reference issue.

**Parameters:**

- `adjacent_id` (string): Work item GID of the reference issue to position relative to
- `child_id` (string) (required): Work item GID of the issue to reorder (from list output id field)
- `epic_iid` (integer) (required): Epic IID within the group
- `full_path` (string) (required): Full path of the group that contains the epic
- `relative_position` (string): Position relative to adjacent item: BEFORE or AFTER

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_epic_list

List epics for a GitLab group (via Work Items GraphQL API with type=Epic). Supports filtering by state, labels, author, search text, and cursor-based pagination.

**Parameters:**

- `after` (string): Cursor for forward pagination
- `author_username` (string): Filter by author username
- `confidential` (boolean): Filter by confidentiality
- `first` (integer): Number of items to return (cursor-based pagination)
- `full_path` (string) (required): Full path of the group (e.g. my-group or my-group/sub-group)
- `include_ancestors` (boolean): Include epics from ancestor groups
- `include_descendants` (boolean): Include epics from descendant groups
- `label_name` (array of strings): Filter by label names
- `search` (string): Search in title and description
- `sort` (string): Sort order
- `state` (string): Filter by state (opened/closed/all)

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_epic_note_create

Add a comment (note) to a GitLab group epic via the Work Items GraphQL API. Supports Markdown formatting.

**Parameters:**

- `body` (string) (required): Note body (Markdown supported)
- `epic_iid` (integer) (required): Epic IID within the group
- `full_path` (string) (required): Full path of the group (e.g. my-group)

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_epic_note_delete

Permanently delete a comment from a GitLab group epic via the Work Items GraphQL API. Only the note author or a group maintainer can delete a note.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `epic_iid` (integer) (required): Epic IID within the group
- `full_path` (string) (required): Full path of the group (e.g. my-group)
- `note_id` (integer) (required): ID of the note to delete

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_epic_note_get

Get a single comment (note) from a GitLab group epic by its note ID via the Work Items GraphQL API, including author, timestamps, body, and system flag.

**Parameters:**

- `epic_iid` (integer) (required): Epic IID within the group
- `full_path` (string) (required): Full path of the group (e.g. my-group)
- `note_id` (integer) (required): ID of the note to retrieve

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_epic_note_list

List all comments (notes) on a GitLab group epic via the Work Items GraphQL API. Supports cursor-based pagination.

**Parameters:**

- `after` (string): Cursor for forward pagination (from previous response end_cursor)
- `before` (string): Cursor for backward pagination (from previous response start_cursor)
- `epic_iid` (integer) (required): Epic IID within the group
- `first` (integer): Number of items to return (default 20, max 100)
- `full_path` (string) (required): Full path of the group (e.g. my-group or my-group/sub-group)
- `last` (integer): Number of items from the end (backward pagination)

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_epic_note_update

Edit the body text of an existing comment on a GitLab group epic via the Work Items GraphQL API. Only the note author or a group maintainer can update a note.

**Parameters:**

- `body` (string) (required): Updated note body (Markdown supported)
- `epic_iid` (integer) (required): Epic IID within the group
- `full_path` (string) (required): Full path of the group (e.g. my-group)
- `note_id` (integer) (required): ID of the note to update

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_epic_update

Update an existing group epic (via Work Items GraphQL API). Can modify title, description, labels, state (CLOSE/REOPEN), confidentiality, parent, color, dates, assignees, weight, health status, and status.

**Parameters:**

- `add_label_ids` (array of integers): Global IDs of labels to add
- `assignee_ids` (array of integers): Global IDs of assignees (empty array to remove all)
- `color` (string): Epic color (hex format)
- `description` (string): Updated description (Markdown supported)
- `due_date` (string): Due date (YYYY-MM-DD)
- `epic_iid` (integer) (required): Epic IID within the group
- `full_path` (string) (required): Full path of the group (e.g. my-group)
- `health_status` (string): Health status (onTrack/needsAttention/atRisk)
- `parent_id` (integer): Global ID of the parent epic work item
- `remove_label_ids` (array of integers): Global IDs of labels to remove
- `start_date` (string): Start date (YYYY-MM-DD)
- `state_event` (string): State event: CLOSE or REOPEN
- `status` (string): Work item status: TODO, IN_PROGRESS, DONE, WONT_DO, or DUPLICATE
- `title` (string): Updated epic title
- `weight` (integer): Weight of the epic

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

### feature (5 tools)

#### gitlab_feature_flag_create

Create a new feature flag for a project.

**Parameters:**

- `active` (boolean): Whether the flag is active
- `description` (string): Feature flag description
- `name` (string) (required): Feature flag name
- `project_id` (string) (required): Project ID or path
- `strategies` (string): JSON array of strategy objects: [{name, parameters, scopes}]
- `version` (string): Version of the feature flag (new_version_flag)

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_feature_flag_delete

Delete a feature flag.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `name` (string) (required): Feature flag name
- `project_id` (string) (required): Project ID or path

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_feature_flag_get

Get a single feature flag by name.

**Parameters:**

- `name` (string) (required): Feature flag name
- `project_id` (string) (required): Project ID or path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_feature_flag_list

List feature flags for a project.

**Parameters:**

- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `project_id` (string) (required): Project ID or path
- `scope` (string): Filter by scope (enabled or disabled)

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_feature_flag_update

Update an existing feature flag.

**Parameters:**

- `active` (boolean): Whether the flag is active
- `description` (string): Feature flag description
- `name` (string) (required): Current feature flag name
- `new_name` (string): New feature flag name
- `project_id` (string) (required): Project ID or path
- `strategies` (string): JSON array of strategy objects: [{id, name, parameters, scopes}]

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

### ff (5 tools)

#### gitlab_ff_user_list_create

Create a new feature flag user list.

**Parameters:**

- `name` (string) (required): User list name
- `project_id` (string) (required): Project ID or path
- `user_xids` (string) (required): Comma-separated list of user external IDs

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_ff_user_list_delete

Delete a feature flag user list.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `project_id` (string) (required): Project ID or path
- `user_list_iid` (integer) (required): Feature flag user list internal ID returned by list or create; do not use the user list name

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_ff_user_list_get

Get a single feature flag user list by IID.

**Parameters:**

- `project_id` (string) (required): Project ID or path
- `user_list_iid` (integer) (required): Feature flag user list internal ID returned by list or create; do not use the user list name

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_ff_user_list_list

List feature flag user lists for a project.

**Parameters:**

- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `project_id` (string) (required): Project ID or path
- `search` (string): Search by name

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_ff_user_list_update

Update a feature flag user list.

**Parameters:**

- `name` (string): New user list name
- `project_id` (string) (required): Project ID or path
- `user_list_iid` (integer) (required): Feature flag user list internal ID returned by list or create; do not use the user list name
- `user_xids` (string): Comma-separated list of user external IDs

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

### file (8 tools)

#### gitlab_file_blame

Get blame information for a file in a GitLab repository. Shows which commit and author last modified each line range. Supports optional line range filtering. Returns: file_path and blame ranges with commit ID, author, message, and lines. See also: gitlab_file_get, gitlab_commit_get.

**Parameters:**

- `file_path` (string) (required): URL-encoded full path of the file
- `project_id` (string) (required): Project ID or URL-encoded path
- `range_end` (integer): End line number for blame range
- `range_start` (integer): Start line number for blame range
- `ref` (string): Branch, tag, or commit SHA (defaults to default branch)

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_file_create

Create a new file in a GitLab repository. Requires branch and commit message. Optionally specify encoding (text/base64), start_branch, and author info. Returns: file_path, branch, and current commit metadata when available. See also: gitlab_commit_create, gitlab_file_get.

**Parameters:**

- `author_email` (string): Commit author email
- `author_name` (string): Commit author name
- `branch` (string) (required): Branch to create the file on
- `commit_message` (string) (required): Commit message
- `content` (string) (required): File content
- `encoding` (string): Content encoding: text or base64 (default: text)
- `execute_filemode` (boolean): Enable execute permission on the file
- `file_path` (string) (required): URL-encoded full path of the new file
- `project_id` (string) (required): Project ID or URL-encoded path
- `start_branch` (string): Branch to start from (creates new branch if different from branch)

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_file_delete

Delete a file from a GitLab repository. Requires branch and commit message. This action cannot be undone.

**Parameters:**

- `author_email` (string): Commit author email
- `author_name` (string): Commit author name
- `branch` (string) (required): Branch to delete the file from
- `commit_message` (string) (required): Commit message
- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `file_path` (string) (required): URL-encoded full path of the file to delete
- `last_commit_id` (string): Last known commit ID for optimistic locking
- `project_id` (string) (required): Project ID or URL-encoded path
- `start_branch` (string): Branch to start from

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_file_get

Retrieve the decoded content of a single file from a GitLab repository at a specific ref (branch name, tag name, or commit SHA). Returns file content, size, encoding, and last commit ID. This is the primary tool for reading file contents. For raw text without metadata use gitlab_file_raw. For metadata only (no content) use gitlab_file_metadata.

**Parameters:**

- `file_path` (string) (required): URL-encoded full path of the file (e.g. src%2Fmain.go or src/main.go)
- `project_id` (string) (required): Project ID or URL-encoded path
- `ref` (string): Branch name, tag, or commit SHA (defaults to default branch)

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_file_metadata

Get file metadata WITHOUT retrieving content. Use this to check file existence or properties; for content use gitlab_file_get. Returns: file_name, size, encoding, blob_id, commit_id, last_commit_id, and SHA-256.

**Parameters:**

- `file_path` (string) (required): URL-encoded full path of the file
- `project_id` (string) (required): Project ID or URL-encoded path
- `ref` (string): Branch, tag, or commit SHA (defaults to default branch)

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_file_raw

Get the raw content of a file from a GitLab repository as plain text without metadata. Use gitlab_file_get if you also need metadata. Returns: file_path, size, and content as plain text. See also: gitlab_file_get.

**Parameters:**

- `file_path` (string) (required): URL-encoded full path of the file
- `project_id` (string) (required): Project ID or URL-encoded path
- `ref` (string): Branch, tag, or commit SHA (defaults to default branch)

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_file_raw_metadata

Get file metadata via HEAD request to the raw file endpoint. Returns size, encoding, blob ID, commit IDs, and SHA-256 without retrieving content. Lighter than gitlab_file_metadata — uses a HEAD request instead of GET.

**Parameters:**

- `file_path` (string) (required): URL-encoded full path of the file
- `project_id` (string) (required): Project ID or URL-encoded path
- `ref` (string): Branch, tag, or commit SHA (defaults to default branch)

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_file_update

Update an existing file in a GitLab repository. Requires branch and commit message. Supports last_commit_id for optimistic locking. Returns: file_path, branch, and current commit metadata when available. See also: gitlab_file_get.

**Parameters:**

- `author_email` (string): Commit author email
- `author_name` (string): Commit author name
- `branch` (string) (required): Branch to update the file on
- `commit_message` (string) (required): Commit message
- `content` (string) (required): New file content
- `encoding` (string): Content encoding: text or base64 (default: text)
- `execute_filemode` (boolean): Enable execute permission on the file
- `file_path` (string) (required): URL-encoded full path of the file to update
- `last_commit_id` (string): Last known commit ID for optimistic locking
- `project_id` (string) (required): Project ID or URL-encoded path
- `start_branch` (string): Branch to start from

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

### find (1 tools)

#### gitlab_find_technical_debt

Find and analyze technical debt in a GitLab project using LLM-assisted analysis via MCP sampling. Searches for TODO, FIXME, HACK, XXX, and DEPRECATED markers in source code, then requests LLM to categorize, prioritize, and recommend a remediation strategy. Requires the MCP client to support the sampling capability (human-in-the-loop approval).

**Parameters:**

- `project_id` (string) (required): Project ID or URL-encoded path
- `ref` (string) (required): Branch or tag to search in (defaults to default branch)

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

### force (1 tools)

#### gitlab_force_push_mirror_update

Trigger an immediate update for a remote push mirror, bypassing the normal schedule.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `mirror_id` (integer) (required): Remote mirror ID
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

### generate (2 tools)

#### gitlab_generate_milestone_report

Generate a comprehensive milestone progress report using LLM-assisted analysis via MCP sampling. Fetches milestone details, linked issues and merge requests, then requests LLM to produce a data-driven progress report with metrics, risks, and recommendations. Requires the MCP client to support the sampling capability (human-in-the-loop approval).

**Parameters:**

- `milestone_iid` (integer) (required): Milestone IID (project-scoped)
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_generate_release_notes

Generate polished release notes using LLM-assisted analysis via MCP sampling. Compares two Git refs, fetches commits and merged MRs with labels, then requests LLM to produce categorized release notes (Features, Bug Fixes, Improvements, Breaking Changes). Requires the MCP client to support the sampling capability (human-in-the-loop approval).

**Parameters:**

- `from` (string) (required): Starting ref: tag, branch or SHA
- `project_id` (string) (required): Project ID or URL-encoded path
- `to` (string) (required): Ending ref: tag, branch or SHA (defaults to HEAD)

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

### get (89 tools)

#### gitlab_get_appearance

Get current application appearance settings. Requires admin access.

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_application_statistics

Get application statistics (admin). Returns counts for users, projects, groups, issues, MRs, etc.

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_avatar

Get the avatar URL for an email address.

**Parameters:**

- `email` (string) (required): Email address to look up avatar for
- `size` (integer) (required): Desired avatar size in pixels

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_broadcast_message

Get a specific broadcast message by ID. Requires admin access.

**Parameters:**

- `id` (integer) (required): Broadcast message ID

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_bulk_import

Get details of a single bulk import migration by ID.

**Parameters:**

- `id` (integer) (required): Bulk import ID

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_bulk_import_entity

Get details of a single bulk import migration entity by bulk_import_id and entity_id.

**Parameters:**

- `bulk_import_id` (integer) (required): Bulk import ID
- `entity_id` (integer) (required): Entity ID within the bulk import

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_catalog_resource

Get a CI/CD Catalog resource by GID or project full path. Returns: full resource details including README, released versions, components with their input parameters and include paths. See also: gitlab_list_catalog_resources, gitlab_template.

**Parameters:**

- `full_path` (string): Full path of the project hosting the resource (e.g. my-group/my-components). Use either id or full_path.
- `id` (string): Catalog resource GID (e.g. gid://gitlab/Ci::CatalogResource/1). Use either id or full_path.

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_ci_yml_template

Get a single GitLab CI YAML template by key. Returns the template name and content.

**Parameters:**

- `key` (string) (required): Template key (e.g. Go, Python)

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_cluster_agent

Get details of a cluster agent

**Parameters:**

- `agent_id` (integer) (required): Agent ID
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_cluster_agent_token

Get details of a cluster agent token

**Parameters:**

- `agent_id` (integer) (required): Agent ID
- `project_id` (string) (required): Project ID or URL-encoded path
- `token_id` (integer) (required): Token ID

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_commit_discussion

Get a single discussion thread on a project commit.

**Parameters:**

- `commit_sha` (string) (required): Commit SHA
- `discussion_id` (string) (required): Discussion ID
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_compliance_policy_settings

Get the admin-level compliance policy settings for the GitLab instance.

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_custom_attribute

Get a custom attribute by key for a user, group, or project (admin). Params: resource_type (required), resource_id (required), key (required).

**Parameters:**

- `key` (string) (required): Attribute key
- `resource_id` (integer) (required): ID of the resource
- `resource_type` (string) (required): Resource type: user, group, or project

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_dependency_list_export

Check the status of a dependency list export. Returns: export ID, completion status, and download URL when ready. See also: gitlab_create_dependency_list_export, gitlab_download_dependency_list_export.

**Parameters:**

- `export_id` (integer) (required): Dependency list export ID

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_dockerfile_template

Get a single Dockerfile template by key.

**Parameters:**

- `key` (string) (required): Template key

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_email

Retrieve a specific email address by its ID.

**Parameters:**

- `email_id` (integer) (required): Email ID to retrieve

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_enterprise_user

Get details of a specific enterprise user.

**Parameters:**

- `group_id` (string) (required): Group ID or URL-encoded path
- `user_id` (integer) (required): User ID

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_epic_discussion

Get a single discussion thread on a group epic via the Work Items GraphQL API.

**Parameters:**

- `discussion_id` (string) (required): Discussion ID
- `epic_iid` (integer) (required): Epic IID within the group
- `full_path` (string) (required): Full path of the group (e.g. my-group)

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_error_tracking_settings

Get error tracking settings for a GitLab project.

**Parameters:**

- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_freeze_period

Get a single deploy freeze period by ID.

**Parameters:**

- `freeze_period_id` (integer) (required): Freeze period ID
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_geo_site

Get configuration of a specific Geo site by ID.

**Parameters:**

- `id` (integer) (required): Numeric ID of the Geo site

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_gitignore_template

Get a single gitignore template by key.

**Parameters:**

- `key` (string) (required): Template key (e.g. Go, Python, Node)

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_gpg_key

Retrieve a specific GPG key by its ID for the current user.

**Parameters:**

- `key_id` (integer) (required): The ID of the GPG key

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_gpg_key_for_user

Retrieve a specific GPG key for a specific user by user ID and key ID.

**Parameters:**

- `key_id` (integer) (required): The ID of the GPG key
- `user_id` (integer) (required): The ID of the user

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_group_audit_event

Get a single group-level audit event by ID. Returns: audit event with ID, author, entity, event details, and created timestamp. See also: gitlab_list_group_audit_events.

**Parameters:**

- `event_id` (integer) (required): Audit event ID
- `group_id` (string) (required): Group ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_group_badge

Get a specific group badge by ID.

**Parameters:**

- `badge_id` (integer) (required): Badge ID
- `group_id` (string) (required): Group ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_group_dora_metrics

Get DORA metrics for a GitLab group. Requires metric type (deployment_frequency, lead_time_for_changes, time_to_restore_service, change_failure_rate). Supports date range and interval filtering. Returns: list of date/value data points. See also: gitlab_get_project_dora_metrics, gitlab_environment_list.

**Parameters:**

- `end_date` (string): End date (YYYY-MM-DD)
- `environment_tiers` (array of strings): Filter by environment tiers (e.g. production, staging)
- `group_id` (string) (required): Group ID or URL-encoded path
- `interval` (string): Aggregation interval: daily, monthly, all (default: daily)
- `metric` (string) (required): DORA metric type: deployment_frequency, lead_time_for_changes, time_to_restore_service, change_failure_rate
- `start_date` (string): Start date (YYYY-MM-DD)

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_group_issue_statistics

Get issue statistics for a group.

**Parameters:**

- `group_id` (string) (required): Group ID or URL-encoded path
- `labels` (string) (required): Comma-separated label names
- `milestone` (string) (required): Milestone title
- `scope` (string) (required): Scope: created_by_me, assigned_to_me, all
- `search` (string) (required): Search string

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_group_mr_approval_settings

Get group-level merge request approval settings: whether author/committer approval is allowed, approver list overrides, approval retention on push, and reauthentication requirements. Settings may be locked or inherited from parent groups.

**Parameters:**

- `group_id` (string) (required): Group ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_group_scim_identity

Get a single SCIM identity for a GitLab group by UID.

**Parameters:**

- `group_id` (string) (required): Group ID or URL-encoded path
- `uid` (string) (required): SCIM external UID of the user

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_group_storage_move

Get a single group repository storage move by ID (admin only).

**Parameters:**

- `id` (integer) (required): Numeric ID of the storage move

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_group_storage_move_for_group

Get a single repository storage move for a specific group (admin only).

**Parameters:**

- `group_id` (integer) (required): Numeric ID of the group
- `id` (integer) (required): Numeric ID of the storage move

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_impersonation_token

Retrieve a specific impersonation token by user ID and token ID.

**Parameters:**

- `token_id` (integer) (required): Impersonation token ID
- `user_id` (integer) (required): GitLab user ID

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_instance_audit_event

Get a single instance-level audit event by ID (admin only). Returns: audit event with ID, author, entity, event details, and created timestamp. See also: gitlab_list_instance_audit_events.

**Parameters:**

- `event_id` (integer) (required): Audit event ID

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_integration

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).

**Parameters:**

- `project_id` (string) (required): Project ID or URL-encoded path
- `slug` (string) (required): 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)

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_issue_discussion

Get a single discussion thread on a project issue.

**Parameters:**

- `discussion_id` (string) (required): Discussion ID
- `issue_iid` (integer) (required): Issue internal ID
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_issue_statistics

Get global issue statistics (counts of all/opened/closed issues).

**Parameters:**

- `labels` (string) (required): Comma-separated label names
- `milestone` (string) (required): Milestone title
- `scope` (string) (required): Scope: created_by_me, assigned_to_me, all
- `search` (string) (required): Search string

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_job_token_access_settings

Get the CI/CD job token access settings for a GitLab project.

**Parameters:**

- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_key_by_fingerprint

Get an SSH key and its user by SSH key fingerprint (SHA256: or MD5:).

**Parameters:**

- `fingerprint` (string) (required): SSH key fingerprint (e.g. SHA256:abc123 or MD5:aa:bb:cc)

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_key_with_user

Get an SSH key and its associated user by key ID.

**Parameters:**

- `key_id` (integer) (required): SSH key ID

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_license

Get current GitLab license information (admin). Returns plan, expiry, user counts and licensee.

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_license_template

Get a single license template by key. Optionally substitute project name and full name.

**Parameters:**

- `fullname` (string): Full name to replace in license
- `key` (string) (required): License template key (e.g. mit, apache-2.0)
- `project` (string): Project name to replace in license

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_merge_request_on_merge_train

Get the merge train status for a specific merge request.

**Parameters:**

- `merge_request_iid` (integer) (required): Merge request internal ID
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_metadata

Get GitLab instance metadata (version, revision, KAS info, enterprise flag).

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_metric_definitions

Get metric definitions as YAML (admin). Returns all metric definitions used in service ping.

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_non_sql_metrics

Get non-SQL service ping metrics (admin). Returns instance info, license details, and settings.

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_plan_limits

Get current plan limits (admin). Optionally filter by plan name (default, free, bronze, silver, gold, premium, ultimate).

**Parameters:**

- `plan_name` (string): Plan name to filter (e.g. default, free, bronze, silver, gold, premium, ultimate)

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_project_alias

Get a specific project alias by name (admin-only).

**Parameters:**

- `name` (string) (required): The alias name to look up

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_project_audit_event

Get a single project-level audit event by ID. Returns: audit event with ID, author, entity, event details, and created timestamp. See also: gitlab_list_project_audit_events.

**Parameters:**

- `event_id` (integer) (required): Audit event ID
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_project_badge

Get a specific project badge by ID.

**Parameters:**

- `badge_id` (integer) (required): Badge ID
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_project_dora_metrics

Get DORA metrics for a GitLab project. Requires metric type (deployment_frequency, lead_time_for_changes, time_to_restore_service, change_failure_rate). Supports date range and interval filtering. Returns: list of date/value data points. See also: gitlab_get_group_dora_metrics, gitlab_environment_list.

**Parameters:**

- `end_date` (string): End date (YYYY-MM-DD)
- `environment_tiers` (array of strings): Filter by environment tiers (e.g. production, staging)
- `interval` (string): Aggregation interval: daily, monthly, all (default: daily)
- `metric` (string) (required): DORA metric type: deployment_frequency, lead_time_for_changes, time_to_restore_service, change_failure_rate
- `project_id` (string) (required): Project ID or URL-encoded path
- `start_date` (string): Start date (YYYY-MM-DD)

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_project_export_status

Get the export status of a project, including download links when the export is finished.

**Parameters:**

- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_project_import_status

Get the import status of a project.

**Parameters:**

- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_project_issue_statistics

Get issue statistics for a project.

**Parameters:**

- `labels` (string) (required): Comma-separated label names
- `milestone` (string) (required): Milestone title
- `project_id` (string) (required): Project ID or URL-encoded path
- `scope` (string) (required): Scope: created_by_me, assigned_to_me, all
- `search` (string) (required): Search string

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_project_mirror

Get a single remote push mirror for a GitLab project by its mirror ID, including URL, status, timestamps, and configuration.

**Parameters:**

- `mirror_id` (integer) (required): Remote mirror ID
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_project_mirror_public_key

Get the SSH public key for a remote push mirror, used for SSH-based mirror authentication.

**Parameters:**

- `mirror_id` (integer) (required): Remote mirror ID
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_project_mr_approval_settings

Get project-level merge request approval settings: whether author/committer approval is allowed, approver list overrides, approval retention on push, selective code owner removals, and reauthentication requirements. Settings may be locked or inherited from parent group.

**Parameters:**

- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_project_security_settings

Get security settings for a GitLab project. Returns auto-fix, vulnerability scanning, and secret push protection status.

**Parameters:**

- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_project_statistics

Get project fetch statistics for the last 30 days.

**Parameters:**

- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_project_storage_move

Get a single project repository storage move by ID (admin only).

**Parameters:**

- `id` (integer) (required): Numeric ID of the storage move

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_project_storage_move_for_project

Get a single repository storage move for a specific project (admin only).

**Parameters:**

- `id` (integer) (required): Numeric ID of the storage move
- `project_id` (integer) (required): Numeric ID of the project

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_project_template

Get a single project template by type and key.

**Parameters:**

- `key` (string) (required): Template key/name
- `project_id` (string) (required): Project ID or URL-encoded path
- `template_type` (string) (required): Template type: dockerfiles, gitignores, gitlab_ci_ymls, licenses

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_recently_added_members_count

Get the count of recently added members in a group (last 90 days).

**Parameters:**

- `group_path` (string) (required): Full path of the group (e.g. my-group or parent/child)

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_recently_created_issues_count

Get the count of recently created issues for a group (last 90 days).

**Parameters:**

- `group_path` (string) (required): Full path of the group (e.g. my-group or parent/child)

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_recently_created_mr_count

Get the count of recently created merge requests for a group (last 90 days).

**Parameters:**

- `group_path` (string) (required): Full path of the group (e.g. my-group or parent/child)

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_resource_group

Get details of a resource group.

**Parameters:**

- `key` (string) (required): Resource group key
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_service_ping

Get service ping data (admin). Returns recorded_at, license info, and usage counts.

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_settings

Get current application settings. Requires admin access. Returns all instance-level settings as key-value pairs.

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_sidekiq_compound_metrics

Get all Sidekiq metrics in a single compound response (admin). Returns queue metrics, process metrics, and job statistics combined.

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_sidekiq_job_stats

Get Sidekiq job statistics (admin). Returns processed, failed, and enqueued counts.

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_sidekiq_process_metrics

Get Sidekiq process metrics (admin). Returns information about running Sidekiq processes.

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_sidekiq_queue_metrics

Get Sidekiq queue metrics (admin). Returns backlog and latency for all queues.

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_snippet_discussion

Get a single discussion thread on a project snippet.

**Parameters:**

- `discussion_id` (string) (required): Discussion ID
- `project_id` (string) (required): Project ID or URL-encoded path
- `snippet_id` (integer) (required): Snippet ID

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_snippet_storage_move

Get a single snippet repository storage move by ID (admin only).

**Parameters:**

- `id` (integer) (required): Numeric ID of the storage move

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_snippet_storage_move_for_snippet

Get a single repository storage move for a specific snippet (admin only).

**Parameters:**

- `id` (integer) (required): Numeric ID of the storage move
- `snippet_id` (integer) (required): Numeric ID of the snippet

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_ssh_key

Retrieve a specific SSH key by its ID for the current user.

**Parameters:**

- `key_id` (integer) (required): The ID of the SSH key

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_ssh_key_for_user

Retrieve a specific SSH key for a specific user by user ID and key ID.

**Parameters:**

- `key_id` (integer) (required): The ID of the SSH key
- `user_id` (integer) (required): The ID of the user

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_status_geo_site

Retrieve replication status of a specific Geo site by ID.

**Parameters:**

- `id` (integer) (required): Numeric ID of the Geo site

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_system_hook

Get a system hook by ID (admin).

**Parameters:**

- `id` (integer) (required): System hook ID

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_terraform_state

Get details of a Terraform state

**Parameters:**

- `name` (string) (required): Terraform state name
- `project_path` (string) (required): Full project path (e.g. group/project)

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_topic

Get a specific project topic by ID.

**Parameters:**

- `topic_id` (integer) (required): Topic ID

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_usage_queries

Get service ping SQL queries (admin). Returns the raw SQL queries used for service ping collection.

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_user

Retrieve detailed information about a specific GitLab user by their ID. Returns profile details including username, email, state, bio, and admin status.

**Parameters:**

- `user_id` (integer) (required): The ID of the user to retrieve

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_user_activities

List last activity dates for GitLab users (admin only). Useful for auditing inactive accounts.

**Parameters:**

- `from` (string): Only activities after this date (YYYY-MM-DD)
- `page` (integer): Page number for pagination
- `per_page` (integer): Number of items per page (max 100)

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_user_associations_count

Get the count of a user's associations including groups, projects, issues, and merge requests. Useful for understanding user activity scope before account management operations.

**Parameters:**

- `user_id` (integer) (required): The ID of the user

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_user_memberships

List a user's project and group memberships with access levels (admin only). Useful for auditing user permissions.

**Parameters:**

- `page` (integer): Page number for pagination
- `per_page` (integer): Number of items per page (max 100)
- `type` (string): Filter by membership type: Project or Namespace
- `user_id` (integer) (required): The ID of the user

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_user_status

Retrieve the status of a specific GitLab user. Returns emoji, message, availability, and clear-at time.

**Parameters:**

- `user_id` (integer) (required): The ID of the user whose status to retrieve

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_vulnerability

Get a single vulnerability by GID (requires Ultimate/Premium). Returns: full vulnerability details including identifiers, scanner, location, solution, and linked issues/MRs. See also: gitlab_list_vulnerabilities, gitlab_confirm_vulnerability, gitlab_dismiss_vulnerability.

**Parameters:**

- `id` (string) (required): Vulnerability GID (e.g. gid://gitlab/Vulnerability/42)

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_get_work_item

Get a single work item by IID. Experimental: the Work Items API may introduce breaking changes between minor versions.

**Parameters:**

- `full_path` (string) (required): Full path of the project or group (e.g. my-group/my-project)
- `work_item_iid` (integer) (required): Work item IID

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

### group (95 tools)

#### gitlab_group_access_token_create

Create a new group access token with specified name, scopes, access level, and optional expiry date.

**Parameters:**

- `access_level` (integer): Access level: 10 (guest), 20 (reporter), 30 (developer), 40 (maintainer), 50 (owner)
- `description` (string): Token description
- `expires_at` (string): Expiry date in YYYY-MM-DD format
- `group_id` (string) (required): Group ID or URL-encoded path
- `name` (string) (required): Token name
- `scopes` (array of strings) (required): Token scopes: api, read_api, read_repository, write_repository, etc.

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_group_access_token_get

Get a specific group access token by its ID.

**Parameters:**

- `group_id` (string) (required): Group ID or URL-encoded path
- `token_id` (integer) (required): Access token ID

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_group_access_token_list

List all access tokens for a GitLab group. Filter by state (active, inactive).

**Parameters:**

- `group_id` (string) (required): Group ID or URL-encoded path
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `state` (string): Token state filter: active, inactive

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_group_access_token_revoke

Revoke a group access token. This action cannot be undone.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `group_id` (string) (required): Group ID or URL-encoded path
- `token_id` (integer) (required): Access token ID to revoke

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_group_access_token_rotate

Rotate a group access token, generating a new token value. Optionally set a new expiry date.

**Parameters:**

- `expires_at` (string): New expiry date in YYYY-MM-DD format
- `group_id` (string) (required): Group ID or URL-encoded path
- `token_id` (integer) (required): Access token ID

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_group_access_token_rotate_self

Rotate the group access token used for the current request. Returns the new token value.

**Parameters:**

- `expires_at` (string): New expiry date in YYYY-MM-DD format
- `group_id` (string) (required): Group ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_group_archive

Archive a GitLab group. Requires Owner role or administrator.

**Parameters:**

- `group_id` (string) (required): Group ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_group_board_create

Create a new issue board in a group

**Parameters:**

- `group_id` (string) (required): Group ID or path
- `name` (string) (required): Board name

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_group_board_delete

Delete a group issue board. This action cannot be undone.

**Parameters:**

- `board_id` (integer) (required): Board ID
- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `group_id` (string) (required): Group ID or path

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_group_board_get

Get a single group issue board

**Parameters:**

- `board_id` (integer) (required): Board ID
- `group_id` (string) (required): Group ID or path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_group_board_list

List all issue boards for a group

**Parameters:**

- `group_id` (string) (required): Group ID or path
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_group_board_list_create

Create a new list in a group issue board

**Parameters:**

- `board_id` (integer) (required): Board ID
- `group_id` (string) (required): Group ID or path
- `label_id` (integer) (required): Label ID to create a label list

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_group_board_list_delete

Delete a list from a group issue board. This action cannot be undone.

**Parameters:**

- `board_id` (integer) (required): Board ID
- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `group_id` (string) (required): Group ID or path
- `list_id` (integer) (required): Board list ID

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_group_board_list_get

Get a single list from a group issue board

**Parameters:**

- `board_id` (integer) (required): Board ID
- `group_id` (string) (required): Group ID or path
- `list_id` (integer) (required): Board list ID

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_group_board_list_lists

List all lists in a group issue board

**Parameters:**

- `board_id` (integer) (required): Board ID
- `group_id` (string) (required): Group ID or path
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_group_board_list_update

Update (reorder) a list in a group issue board

**Parameters:**

- `board_id` (integer) (required): Board ID
- `group_id` (string) (required): Group ID or path
- `list_id` (integer) (required): Board list ID
- `position` (integer) (required): New position of the list

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_group_board_update

Update an existing group issue board

**Parameters:**

- `assignee_id` (integer): Assignee user ID
- `board_id` (integer) (required): Board ID
- `group_id` (string) (required): Group ID or path
- `labels` (string): Comma-separated board scope labels
- `milestone_id` (integer): Milestone ID
- `name` (string): Board name
- `weight` (integer): Board scope weight

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_group_create

Create a new GitLab group. Requires name; optionally set path, description, visibility, parent_id (for subgroups), request_access_enabled, lfs_enabled, and default_branch. Returns: id, name, path, full_path, visibility, web_url, parent_id. See also: gitlab_group_get, gitlab_group_list.

**Parameters:**

- `default_branch` (string): Default branch name
- `description` (string): Group description
- `lfs_enabled` (boolean): Enable Git LFS
- `name` (string) (required): Group name
- `parent_id` (integer): Parent group ID (creates a subgroup)
- `path` (string): Group URL path (defaults to kebab-case of name)
- `request_access_enabled` (boolean): Allow users to request access
- `visibility` (string): Visibility level (private, internal, public)

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_group_delete

Delete a GitLab group. On instances with delayed deletion, the group is marked for deletion. Set permanently_remove=true with full_path to bypass delayed deletion.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `full_path` (string): Full path (required when permanently_remove=true)
- `group_id` (string) (required): Group ID or URL-encoded path
- `permanently_remove` (boolean): Permanently remove instead of marking for deletion

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_group_epic_board_get

Get a single epic board in a GitLab group by its ID, including board lists (columns) and labels.

**Parameters:**

- `board_id` (integer) (required): Epic board ID
- `group_id` (string) (required): Group ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_group_epic_board_list

List all epic boards in a GitLab group. Supports pagination.

**Parameters:**

- `group_id` (string) (required): Group ID or URL-encoded path
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_group_get

Retrieve detailed metadata for a GitLab group including name, path, full path, description, visibility, web URL, and parent group. Accepts numeric group ID or URL-encoded path (e.g. 'group/subgroup').

**Parameters:**

- `group_id` (string) (required): Group ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_group_hook_add

Add a new webhook to a GitLab group. Requires URL; optionally configure event triggers, SSL verification, secret token, and branch filter.

**Parameters:**

- `confidential_issues_events` (boolean): Trigger on confidential issue events
- `confidential_note_events` (boolean): Trigger on confidential note events
- `deployment_events` (boolean): Trigger on deployment events
- `description` (string): Hook description
- `enable_ssl_verification` (boolean): Enable SSL verification for the hook endpoint
- `feature_flag_events` (boolean): Trigger on feature flag events
- `group_id` (string) (required): Group ID or URL-encoded path
- `issues_events` (boolean): Trigger on issue events
- `job_events` (boolean): Trigger on job events
- `member_events` (boolean): Trigger on member events
- `merge_requests_events` (boolean): Trigger on merge request events
- `milestone_events` (boolean): Trigger on milestone events
- `name` (string): Hook name
- `note_events` (boolean): Trigger on comment events
- `pipeline_events` (boolean): Trigger on pipeline events
- `push_events` (boolean): Trigger on push events
- `push_events_branch_filter` (string): Branch filter for push events (e.g. 'main')
- `releases_events` (boolean): Trigger on release events
- `signing_token` (string): Write-only signing token for webhook signature validation
- `subgroup_events` (boolean): Trigger on subgroup events
- `tag_push_events` (boolean): Trigger on tag push events
- `token` (string): Secret token for payload validation
- `url` (string): Webhook URL (required for add)
- `vulnerability_events` (boolean): Trigger on vulnerability events
- `wiki_page_events` (boolean): Trigger on wiki page events

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_group_hook_delete

Delete a webhook from a GitLab group.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `group_id` (string) (required): Group ID or URL-encoded path
- `hook_id` (integer) (required): Hook ID to delete

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_group_hook_edit

Edit an existing group webhook. Supports changing URL, events, SSL verification, secret token, and branch filter.

**Parameters:**

- `confidential_issues_events` (boolean): Trigger on confidential issue events
- `confidential_note_events` (boolean): Trigger on confidential note events
- `deployment_events` (boolean): Trigger on deployment events
- `description` (string): Hook description
- `enable_ssl_verification` (boolean): Enable SSL verification for the hook endpoint
- `feature_flag_events` (boolean): Trigger on feature flag events
- `group_id` (string) (required): Group ID or URL-encoded path
- `hook_id` (integer) (required): Hook ID to edit
- `issues_events` (boolean): Trigger on issue events
- `job_events` (boolean): Trigger on job events
- `member_events` (boolean): Trigger on member events
- `merge_requests_events` (boolean): Trigger on merge request events
- `milestone_events` (boolean): Trigger on milestone events
- `name` (string): Hook name
- `note_events` (boolean): Trigger on comment events
- `pipeline_events` (boolean): Trigger on pipeline events
- `push_events` (boolean): Trigger on push events
- `push_events_branch_filter` (string): Branch filter for push events (e.g. 'main')
- `releases_events` (boolean): Trigger on release events
- `signing_token` (string): Write-only signing token for webhook signature validation
- `subgroup_events` (boolean): Trigger on subgroup events
- `tag_push_events` (boolean): Trigger on tag push events
- `token` (string): Secret token for payload validation
- `url` (string): Webhook URL (required for add)
- `vulnerability_events` (boolean): Trigger on vulnerability events
- `wiki_page_events` (boolean): Trigger on wiki page events

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_group_hook_get

Get details of a specific group webhook by hook ID. Returns URL, enabled events, SSL status, and alert status.

**Parameters:**

- `group_id` (string) (required): Group ID or URL-encoded path
- `hook_id` (integer) (required): Hook ID

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_group_hook_list

List webhooks configured for a GitLab group. Returns hook URL, enabled events, SSL verification status, and creation date with pagination.

**Parameters:**

- `group_id` (string) (required): Group ID or URL-encoded path
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_group_invite

Invite a user to a group by email or user ID. Requires access_level (10=Guest, 20=Reporter, 30=Developer, 40=Maintainer, 50=Owner).

**Parameters:**

- `access_level` (integer) (required): Access level (10=Guest 20=Reporter 30=Developer 40=Maintainer 50=Owner)
- `email` (string): Email address to invite (either email or user_id required)
- `expires_at` (string): Expiration date for the invitation (YYYY-MM-DD)
- `group_id` (string) (required): Group ID or URL-encoded path
- `user_id` (integer): User ID to invite (either email or user_id required)

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_group_invite_list_pending

List all pending invitations for a group. Supports filtering by query and pagination.

**Parameters:**

- `group_id` (string) (required): Group ID or URL-encoded path
- `page` (integer): Page number for pagination (default 1)
- `per_page` (integer): Number of items per page (default 20, max 100)
- `query` (string): Filter invitations by email or name

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_group_label_create

Create a new label in a GitLab group with a name, color (hex), optional description, and optional priority.

**Parameters:**

- `color` (string) (required): Label color in hex format (e.g. #FF0000)
- `description` (string): Label description
- `group_id` (string) (required): Group ID or URL-encoded path
- `name` (string) (required): Label name
- `priority` (integer): Label priority (lower is higher priority, 0 means no priority)

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_group_label_delete

Delete a group label by ID or name.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `group_id` (string) (required): Group ID or URL-encoded path
- `label_id` (string) (required): Label ID or name

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_group_label_get

Get details of a single group label by ID or name, including color, description, priority, and issue/MR counts.

**Parameters:**

- `group_id` (string) (required): Group ID or URL-encoded path
- `label_id` (string) (required): Label ID or name

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_group_label_list

List all labels for a GitLab group. Supports filtering by search keyword, including issue/MR counts (with_counts), ancestor/descendant groups, and group-only labels. Returns label name, color, description, open/closed issue counts, and MR counts with pagination.

**Parameters:**

- `group_id` (string) (required): Group ID or URL-encoded path
- `include_ancestor_groups` (boolean): Include labels from ancestor groups
- `include_descendant_groups` (boolean): Include labels from descendant groups
- `only_group_labels` (boolean): Only return group-level labels (exclude project labels)
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `search` (string): Filter labels by keyword search
- `with_counts` (boolean): Include issue and merge request counts

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_group_label_subscribe

Subscribe to a group label to receive notifications when the label is applied to issues or merge requests.

**Parameters:**

- `group_id` (string) (required): Group ID or URL-encoded path
- `label_id` (string) (required): Label ID or name

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_group_label_unsubscribe

Unsubscribe from a group label to stop receiving notifications.

**Parameters:**

- `group_id` (string) (required): Group ID or URL-encoded path
- `label_id` (string) (required): Label ID or name

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_group_label_update

Update an existing group label. Can change name, color, description, or priority. Only specified fields are modified.

**Parameters:**

- `color` (string): New label color in hex format
- `description` (string): New label description
- `group_id` (string) (required): Group ID or URL-encoded path
- `label_id` (string) (required): Label ID or name
- `new_name` (string): New label name
- `priority` (integer): New label priority (0 to remove)

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_group_ldap_link_add

Add an LDAP group link to a GitLab group (by CN or filter).

**Parameters:**

- `cn` (string): LDAP Common Name (CN)
- `filter` (string): LDAP filter
- `group_access` (integer) (required): Access level (10=Guest 20=Reporter 30=Developer 40=Maintainer 50=Owner)
- `group_id` (string) (required): Group ID or URL-encoded path
- `member_role_id` (integer): Custom member role ID
- `provider` (string) (required): LDAP provider name

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_group_ldap_link_delete

Delete a group LDAP link by CN or filter.

**Parameters:**

- `cn` (string): LDAP Common Name to delete
- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `filter` (string): LDAP filter to delete
- `group_id` (string) (required): Group ID or URL-encoded path
- `provider` (string): LDAP provider name

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_group_ldap_link_delete_for_provider

Delete a group LDAP link for a specific provider.

**Parameters:**

- `cn` (string) (required): LDAP Common Name
- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `group_id` (string) (required): Group ID or URL-encoded path
- `provider` (string) (required): LDAP provider name

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_group_ldap_link_list

List all LDAP group links for a GitLab group.

**Parameters:**

- `group_id` (string) (required): Group ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_group_list

List GitLab groups accessible to the authenticated user. Supports filtering by search term, ownership, and top-level only. Returns paginated results including group name, path, visibility, and web URL.

**Parameters:**

- `all_available` (boolean): Show all groups accessible by the authenticated user
- `order_by` (string): Order groups by field (name, path, id, similarity)
- `owned` (boolean): Limit to groups explicitly owned by the authenticated user
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `search` (string): Filter groups by name or path
- `skip_groups` (array of integers): Group IDs to exclude from results
- `sort` (string): Sort direction (asc, desc)
- `statistics` (boolean): Include group statistics (storage, counts)
- `top_level_only` (boolean): Limit to top-level groups (exclude subgroups)
- `visibility` (string): Filter by visibility (public, internal, private)
- `with_custom_attributes` (boolean): Include custom attributes in the response

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_group_member_add

Add a member to a GitLab group. Specify user by user_id or username, and set access level (10=Guest, 20=Reporter, 30=Developer, 40=Maintainer, 50=Owner). Optionally set expiration date.

**Parameters:**

- `access_level` (integer) (required): Access level (10=Guest, 20=Reporter, 30=Developer, 40=Maintainer, 50=Owner)
- `expires_at` (string): Membership expiration date (YYYY-MM-DD)
- `group_id` (string) (required): Group ID or URL-encoded path
- `user_id` (integer): User ID to add
- `username` (string): Username to add (alternative to user_id)

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_group_member_edit

Edit a member of a GitLab group. Update access level or expiration date for an existing member.

**Parameters:**

- `access_level` (integer): New access level (10=Guest, 20=Reporter, 30=Developer, 40=Maintainer, 50=Owner)
- `expires_at` (string): New membership expiration date (YYYY-MM-DD)
- `group_id` (string) (required): Group ID or URL-encoded path
- `user_id` (integer) (required): User ID

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_group_member_get

Get a single member of a GitLab group by user ID. Returns user details including access level, state, and expiration date.

**Parameters:**

- `group_id` (string) (required): Group ID or URL-encoded path
- `user_id` (integer) (required): User ID

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_group_member_get_inherited

Get a single inherited member of a GitLab group by user ID. Returns member details including access level inherited from parent groups.

**Parameters:**

- `group_id` (string) (required): Group ID or URL-encoded path
- `user_id` (integer) (required): User ID

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_group_member_remove

Remove a member from a GitLab group. Optionally skip subresource removal and unassign issuables.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `group_id` (string) (required): Group ID or URL-encoded path
- `skip_subresources` (boolean): Skip removal from subresources
- `unassign_issuables` (boolean): Unassign issues and merge requests
- `user_id` (integer) (required): User ID to remove

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_group_members_list

List all members of a GitLab group including inherited members. Returns user ID, username, name, state, access level (10=Guest, 20=Reporter, 30=Developer, 40=Maintainer, 50=Owner), and web URL. Supports filtering by name/username query.

**Parameters:**

- `group_id` (string) (required): Group ID or URL-encoded path
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `query` (string): Filter members by name or username

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_group_milestone_burndown_events

List all burndown chart events for a group milestone. Returns event timestamps, weights, and actions with pagination.

**Parameters:**

- `group_id` (string) (required): Group ID or URL-encoded path
- `milestone_iid` (integer) (required): Milestone IID (group-scoped). Use gitlab_group_milestone_list to find IIDs
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_group_milestone_create

Create a new milestone in a GitLab group with a title, optional description, start date and due date (YYYY-MM-DD).

**Parameters:**

- `description` (string): Milestone description
- `due_date` (string): Due date (YYYY-MM-DD)
- `group_id` (string) (required): Group ID or URL-encoded path
- `start_date` (string): Start date (YYYY-MM-DD)
- `title` (string) (required): Milestone title

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_group_milestone_delete

Delete a group milestone by IID.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `group_id` (string) (required): Group ID or URL-encoded path
- `milestone_iid` (integer) (required): Milestone IID (group-scoped). Use gitlab_group_milestone_list to find IIDs

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_group_milestone_get

Get details of a single group milestone by IID, including title, state, start/due dates, and timestamps.

**Parameters:**

- `group_id` (string) (required): Group ID or URL-encoded path
- `milestone_iid` (integer) (required): Milestone IID (group-scoped). Use gitlab_group_milestone_list to find IIDs

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_group_milestone_issues

List all issues assigned to a group milestone. Returns issue ID, IID, title, state, and web URL with pagination.

**Parameters:**

- `group_id` (string) (required): Group ID or URL-encoded path
- `milestone_iid` (integer) (required): Milestone IID (group-scoped). Use gitlab_group_milestone_list to find IIDs
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_group_milestone_list

List all milestones for a GitLab group. Supports filtering by state, title, search, IIDs, date ranges, and ancestor/descendant groups. Returns milestone title, state, dates, and pagination.

**Parameters:**

- `containing_date` (string): Return milestones containing this date (YYYY-MM-DD)
- `group_id` (string) (required): Group ID or URL-encoded path
- `iids` (array of integers): Filter by milestone IIDs
- `include_ancestors` (boolean): Include milestones from ancestor groups
- `include_descendants` (boolean): Include milestones from descendant groups
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `search` (string): Search milestones by title or description
- `search_title` (string): Search milestones by title only
- `state` (string): Filter by state (active, closed)
- `title` (string): Filter by exact milestone title
- `updated_after` (string): Return milestones updated after date (YYYY-MM-DD)
- `updated_before` (string): Return milestones updated before date (YYYY-MM-DD)

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_group_milestone_merge_requests

List all merge requests assigned to a group milestone. Returns MR ID, IID, title, state, source/target branches with pagination.

**Parameters:**

- `group_id` (string) (required): Group ID or URL-encoded path
- `milestone_iid` (integer) (required): Milestone IID (group-scoped). Use gitlab_group_milestone_list to find IIDs
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_group_milestone_update

Update an existing group milestone. Can change title, description, dates, or state (activate/close). Only specified fields are modified.

**Parameters:**

- `description` (string): Milestone description
- `due_date` (string): Due date (YYYY-MM-DD)
- `group_id` (string) (required): Group ID or URL-encoded path
- `milestone_iid` (integer) (required): Milestone IID (group-scoped). Use gitlab_group_milestone_list to find IIDs
- `start_date` (string): Start date (YYYY-MM-DD)
- `state_event` (string): State transition: activate or close
- `title` (string): Milestone title

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_group_projects

List projects belonging to a GitLab group. Supports filtering by search, archived status, visibility, and including subgroup projects. Returns project name, path, visibility, and archived status with pagination.

**Parameters:**

- `archived` (boolean): Filter archived projects
- `group_id` (string) (required): Group ID or URL-encoded path
- `include_subgroups` (boolean): Include projects in subgroups
- `order_by` (string): Order by field (id, name, path, created_at, updated_at, last_activity_at, similarity)
- `owned` (boolean): Limit to projects owned by current user
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `search` (string): Filter projects by name
- `simple` (boolean): Return limited fields
- `sort` (string): Sort direction (asc, desc)
- `starred` (boolean): Limit to starred projects
- `visibility` (string): Filter by visibility (public, internal, private)
- `with_shared` (boolean): Include shared projects

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_group_protected_branch_get

Get a single group-level protected branch rule by name.

**Parameters:**

- `branch` (string) (required): Branch name or wildcard
- `group_id` (string) (required): Group ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_group_protected_branch_list

List all protected branches for a GitLab group.

**Parameters:**

- `group_id` (string) (required): Group ID or URL-encoded path
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `search` (string): Search by branch name

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_group_protected_branch_protect

Protect a branch at the group level.

**Parameters:**

- `allow_force_push` (boolean): Allow force push
- `allowed_to_merge` (array of objects): Users/groups allowed to merge
- `allowed_to_push` (array of objects): Users/groups allowed to push
- `allowed_to_unprotect` (array of objects): Users/groups allowed to unprotect
- `code_owner_approval_required` (boolean): Require code owner approval
- `group_id` (string) (required): Group ID or URL-encoded path
- `merge_access_level` (integer): Merge access level
- `name` (string) (required): Branch name or wildcard to protect
- `push_access_level` (integer): Push access level (0=No access, 30=Developer, 40=Maintainer, 60=Admin)
- `unprotect_access_level` (integer): Unprotect access level

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_group_protected_branch_unprotect

Remove a group-level protected branch rule.

**Parameters:**

- `branch` (string) (required): Branch name or wildcard to unprotect
- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `group_id` (string) (required): Group ID or URL-encoded path

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_group_protected_branch_update

Update a group-level protected branch rule.

**Parameters:**

- `allow_force_push` (boolean): Allow force push
- `allowed_to_merge` (array of objects): Users/groups allowed to merge
- `allowed_to_push` (array of objects): Users/groups allowed to push
- `allowed_to_unprotect` (array of objects): Users/groups allowed to unprotect
- `branch` (string) (required): Branch name or wildcard
- `code_owner_approval_required` (boolean): Require code owner approval
- `group_id` (string) (required): Group ID or URL-encoded path
- `name` (string): New branch name or wildcard

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_group_protected_environment_get

Get a single group-level protected environment by name.

**Parameters:**

- `environment` (string) (required): Environment name
- `group_id` (string) (required): Group ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_group_protected_environment_list

List all protected environments for a GitLab group.

**Parameters:**

- `group_id` (string) (required): Group ID or URL-encoded path
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_group_protected_environment_protect

Protect an environment at the group level.

**Parameters:**

- `approval_rules` (array of objects): Approval rules
- `deploy_access_levels` (array of objects): Deploy access levels
- `group_id` (string) (required): Group ID or URL-encoded path
- `name` (string) (required): Environment name to protect
- `required_approval_count` (integer): Required number of approvals

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_group_protected_environment_unprotect

Remove protection from a group-level environment.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `environment` (string) (required): Environment name to unprotect
- `group_id` (string) (required): Group ID or URL-encoded path

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_group_protected_environment_update

Update a group-level protected environment.

**Parameters:**

- `approval_rules` (array of objects): Updated approval rules
- `deploy_access_levels` (array of objects): Updated deploy access levels
- `environment` (string) (required): Environment name
- `group_id` (string) (required): Group ID or URL-encoded path
- `name` (string): New environment name
- `required_approval_count` (integer): Required number of approvals

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_group_release_list

List releases across all projects in a GitLab group.

**Parameters:**

- `group_id` (string) (required): Group ID or URL-encoded path
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `simple` (boolean): Return only limited fields

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_group_restore

Restore a GitLab group that was marked for deletion.

**Parameters:**

- `group_id` (string) (required): Group ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_group_saml_link_add

Add a SAML group link to a GitLab group.

**Parameters:**

- `access_level` (integer) (required): Access level (10=Guest 20=Reporter 30=Developer 40=Maintainer 50=Owner)
- `group_id` (string) (required): Group ID or URL-encoded path
- `member_role_id` (integer): Custom member role ID
- `provider` (string): SAML provider name
- `saml_group_name` (string) (required): Name of the SAML group

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_group_saml_link_delete

Delete a SAML group link from a GitLab group.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `group_id` (string) (required): Group ID or URL-encoded path
- `saml_group_name` (string) (required): Name of the SAML group to delete

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_group_saml_link_get

Get a single SAML group link by name.

**Parameters:**

- `group_id` (string) (required): Group ID or URL-encoded path
- `saml_group_name` (string) (required): Name of the SAML group

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_group_saml_link_list

List all SAML group links for a GitLab group.

**Parameters:**

- `group_id` (string) (required): Group ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_group_search

Search for GitLab groups by name. Returns matching groups with their details.

**Parameters:**

- `query` (string) (required): Search query string

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_group_service_account_create

Create a service account in a GitLab group (top-level only).

**Parameters:**

- `email` (string): Service account email
- `group_id` (string) (required): Group ID or URL-encoded path (top-level only)
- `name` (string): Service account name
- `username` (string): Service account username

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_group_service_account_delete

Delete a service account from a GitLab group (top-level only).

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `group_id` (string) (required): Group ID or URL-encoded path (top-level only)
- `hard_delete` (boolean): Hard delete the service account
- `service_account_id` (integer) (required): Service account user ID

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_group_service_account_list

List all service accounts for a GitLab group.

**Parameters:**

- `group_id` (string) (required): Group ID or URL-encoded path
- `order_by` (string): Order by id or username
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `sort` (string): Sort direction: asc or desc

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_group_service_account_pat_create

Create a personal access token for a group service account.

**Parameters:**

- `description` (string): Token description
- `expires_at` (string): Expiration date (YYYY-MM-DD)
- `group_id` (string) (required): Group ID or URL-encoded path
- `name` (string) (required): Token name
- `scopes` (array of strings) (required): Token scopes (e.g. api read_api read_user)
- `service_account_id` (integer) (required): Service account user ID

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_group_service_account_pat_list

List personal access tokens for a group service account.

**Parameters:**

- `group_id` (string) (required): Group ID or URL-encoded path
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `service_account_id` (integer) (required): Service account user ID

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_group_service_account_pat_revoke

Revoke a personal access token for a group service account.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `group_id` (string) (required): Group ID or URL-encoded path
- `service_account_id` (integer) (required): Service account user ID
- `token_id` (integer) (required): Personal access token ID to revoke

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_group_service_account_update

Update a service account in a GitLab group (top-level only).

**Parameters:**

- `email` (string): New email
- `group_id` (string) (required): Group ID or URL-encoded path (top-level only)
- `name` (string): New name
- `service_account_id` (integer) (required): Service account user ID
- `username` (string): New username

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_group_share

Share a GitLab group with another group, granting the shared group a specified access level. Optionally set an expiration date.

**Parameters:**

- `expires_at` (string): Share expiration date (YYYY-MM-DD)
- `group_access` (integer) (required): Access level for the shared group (10=Guest, 20=Reporter, 30=Developer, 40=Maintainer)
- `group_id` (string) (required): Group ID or URL-encoded path to share
- `share_group_id` (integer) (required): Group ID to share with

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_group_transfer_project

Transfer a project into a group namespace. Moves the project to become a member of the specified group.

**Parameters:**

- `group_id` (string) (required): Group ID or URL-encoded path
- `project_id` (string) (required): Project ID or URL-encoded path to transfer

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_group_unarchive

Unarchive a previously archived GitLab group. Requires Owner role or administrator.

**Parameters:**

- `group_id` (string) (required): Group ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_group_unshare

Stop sharing a GitLab group with another group, removing the group-level access.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `group_id` (string) (required): Group ID or URL-encoded path
- `share_group_id` (integer) (required): Group ID to stop sharing with

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_group_update

Update an existing GitLab group. Supports changing name, path, description, visibility, request_access_enabled, lfs_enabled, and default_branch. Returns: id, name, path, full_path, visibility, web_url, parent_id. See also: gitlab_group_get.

**Parameters:**

- `default_branch` (string): Default branch name
- `description` (string): Group description
- `group_id` (string) (required): Group ID or URL-encoded path
- `lfs_enabled` (boolean): Enable Git LFS
- `name` (string): Group name
- `path` (string): Group URL path
- `request_access_enabled` (boolean): Allow users to request access
- `visibility` (string): Visibility level (private, internal, public)

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_group_variable_create

Create a new CI/CD variable in a GitLab group. Requires key and value. Optionally set type (env_var/file), protection, masking, and environment scope. Returns: key, value, variable_type, protected, masked, environment_scope. See also: gitlab_group_variable_list.

**Parameters:**

- `description` (string): Variable description
- `environment_scope` (string): Environment scope (default: *)
- `group_id` (string) (required): Group ID or URL-encoded path
- `key` (string) (required): Variable key name
- `masked` (boolean): Mask variable value in job logs
- `masked_and_hidden` (boolean): Mask and hide variable value
- `protected` (boolean): Only expose in protected branches/tags
- `raw` (boolean): Treat variable value as raw string
- `value` (string) (required): Variable value
- `variable_type` (string): Variable type: env_var or file

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_group_variable_delete

Delete a CI/CD variable from a GitLab group by key. Optionally filter by environment scope. This action cannot be undone.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `environment_scope` (string): Filter by environment scope
- `group_id` (string) (required): Group ID or URL-encoded path
- `key` (string) (required): Variable key name

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_group_variable_get

Get a specific CI/CD variable by key from a GitLab group. Optionally filter by environment scope when duplicate keys exist. Returns: key, value, variable_type, protected, masked, environment_scope. See also: gitlab_group_variable_list.

**Parameters:**

- `environment_scope` (string): Filter by environment scope
- `group_id` (string) (required): Group ID or URL-encoded path
- `key` (string) (required): Variable key name

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_group_variable_list

List CI/CD variables for a GitLab group. Returns paginated results with variable key, type, protection, masking, and environment scope.

**Parameters:**

- `group_id` (string) (required): Group ID or URL-encoded path
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_group_variable_update

Update an existing CI/CD variable in a GitLab group. Specify the key to update and any fields to change: value, type, protection, masking, environment scope. Returns: key, value, variable_type, protected, masked, environment_scope. See also: gitlab_group_variable_get.

**Parameters:**

- `description` (string): Updated variable description
- `environment_scope` (string): Filter by environment scope
- `group_id` (string) (required): Group ID or URL-encoded path
- `key` (string) (required): Variable key name
- `masked` (boolean): Mask variable value in job logs
- `protected` (boolean): Only expose in protected branches/tags
- `raw` (boolean): Treat variable value as raw string
- `value` (string): Updated variable value
- `variable_type` (string): Variable type: env_var or file

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_group_wiki_create

Create a new wiki page in a GitLab group.

**Parameters:**

- `content` (string) (required): Content of the wiki page
- `format` (string): Content format: markdown (default), rdoc, asciidoc, or org
- `group_id` (string) (required): Group ID or URL-encoded path
- `title` (string) (required): Title of the wiki page

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_group_wiki_delete

Delete a wiki page from a GitLab group.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `group_id` (string) (required): Group ID or URL-encoded path
- `slug` (string) (required): URL-encoded slug of the wiki page to delete

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_group_wiki_edit

Edit an existing wiki page in a GitLab group.

**Parameters:**

- `content` (string): New content
- `format` (string): Content format: markdown, rdoc, asciidoc, or org
- `group_id` (string) (required): Group ID or URL-encoded path
- `slug` (string) (required): URL-encoded slug of the wiki page to edit
- `title` (string): New title

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_group_wiki_get

Get a single wiki page from a GitLab group by slug.

**Parameters:**

- `group_id` (string) (required): Group ID or URL-encoded path
- `render_html` (boolean): Return HTML-rendered content
- `slug` (string) (required): URL-encoded slug of the wiki page
- `version` (string): Wiki page version SHA

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_group_wiki_list

List all wiki pages in a GitLab group. Optionally include page content.

**Parameters:**

- `group_id` (string) (required): Group ID or URL-encoded path
- `with_content` (boolean): Include page content in the response

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

### import (6 tools)

#### gitlab_import_from_bitbucket_cloud

Import a repository from Bitbucket Cloud into GitLab

**Parameters:**

- `bitbucket_app_password` (string) (required): Bitbucket Cloud app password. Treat as secret: do not log or store it, and redact it in telemetry/errors
- `bitbucket_username` (string) (required): Bitbucket Cloud username
- `new_name` (string): New name for the imported project
- `repo_path` (string) (required): Bitbucket repository path (e.g. owner/repo)
- `target_namespace` (string) (required): Target namespace for the imported project

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_import_from_bitbucket_server

Import a repository from Bitbucket Server into GitLab

**Parameters:**

- `bitbucket_server_project` (string) (required): Bitbucket Server project key
- `bitbucket_server_repo` (string) (required): Bitbucket Server repository slug
- `bitbucket_server_url` (string) (required): Bitbucket Server URL
- `bitbucket_server_username` (string) (required): Bitbucket Server username
- `new_name` (string): New name for the imported project
- `new_namespace` (string): Target namespace for the imported project
- `personal_access_token` (string) (required): Bitbucket Server personal access token. Treat as secret: do not log or store it, and redact it in telemetry/errors
- `timeout_strategy` (string): Timeout strategy (optimistic or pessimistic)

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_import_from_github

Import a repository from GitHub into GitLab

**Parameters:**

- `github_hostname` (string): GitHub hostname for GitHub Enterprise
- `new_name` (string): New name for the imported project
- `personal_access_token` (string) (required): GitHub personal access token. Treat as secret: do not log or store it, and redact it in telemetry/errors
- `repo_id` (integer) (required): GitHub repository ID
- `target_namespace` (string) (required): Target namespace for the imported project
- `timeout_strategy` (string): Timeout strategy (optimistic or pessimistic)

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_import_github_gists

Import GitHub gists into GitLab snippets

**Parameters:**

- `personal_access_token` (string) (required): GitHub personal access token. Treat as secret: do not log or store it, and redact it in telemetry/errors

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_import_group_from_file

Import a group from an export archive file. Requires a local .tar.gz archive path under the current working directory, OS temp directory, or GITLAB_MCP_ALLOWED_IMPORT_DIRS after symlink resolution.

**Parameters:**

- `file` (string) (required): 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
- `name` (string) (required): Name for the imported group
- `parent_id` (integer): ID of the parent group to import into
- `path` (string) (required): URL path for the imported group

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_import_project_from_file

Import a project from an export archive file. Accepts either base64-encoded content or a local .tar.gz file_path under the current working directory, OS temp directory, or GITLAB_MCP_ALLOWED_IMPORT_DIRS after symlink resolution.

**Parameters:**

- `content_base64` (string): Base64-encoded export archive content. Only one of file_path or content_base64 should be provided.
- `file_path` (string): 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): Name for the imported project
- `namespace` (string): Namespace to import the project into (user or group path)
- `overwrite` (boolean): If true, overwrite an existing project with the same path
- `path` (string): URL path for the imported project

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

### instance (5 tools)

#### gitlab_instance_variable_create

Create a new CI/CD variable at the GitLab instance level. Requires key and value. Optionally set type (env_var/file), protection, and masking.

**Parameters:**

- `description` (string): Variable description
- `key` (string) (required): Variable key name
- `masked` (boolean): Mask variable value in job logs
- `protected` (boolean): Only expose in protected branches/tags
- `raw` (boolean): Treat variable value as raw string
- `value` (string) (required): Variable value
- `variable_type` (string): Variable type: env_var or file

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_instance_variable_delete

Delete a CI/CD variable from the GitLab instance level by key. This action cannot be undone.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `key` (string) (required): Variable key name

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_instance_variable_get

Get a specific CI/CD variable by key from the GitLab instance level.

**Parameters:**

- `key` (string) (required): Variable key name

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_instance_variable_list

List CI/CD variables at the GitLab instance level. Returns paginated results with variable key, type, protection, and masking.

**Parameters:**

- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_instance_variable_update

Update an existing CI/CD variable at the GitLab instance level. Specify the key to update and any fields to change.

**Parameters:**

- `description` (string): Updated variable description
- `key` (string) (required): Variable key name
- `masked` (boolean): Mask variable value in job logs
- `protected` (boolean): Only expose in protected branches/tags
- `raw` (boolean): Treat variable value as raw string
- `value` (string): Updated variable value
- `variable_type` (string): Variable type: env_var or file

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

### interactive (4 tools)

#### gitlab_interactive_issue_create

Create a GitLab issue through step-by-step prompts, with explicit confirmation before calling the GitLab API. Cancellation at any prompt aborts without creating the issue.

**Parameters:**

- `project_id` (string) (required): Project ID or URL-encoded path where the issue will be created

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_interactive_mr_create

Create a GitLab merge request through step-by-step prompts, with explicit confirmation before calling the GitLab API. Cancellation at any prompt aborts without creating the MR.

**Parameters:**

- `project_id` (string) (required): Project ID or URL-encoded path where the MR will be created

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_interactive_project_create

Create a GitLab project through step-by-step prompts, with explicit confirmation before calling the GitLab API. Cancellation at any prompt aborts without creating the project except initialize_with_readme, where decline/cancel continues with false.

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_interactive_release_create

Create a GitLab release through step-by-step prompts, with explicit confirmation before calling the GitLab API. Cancellation at any prompt aborts without creating the release.

**Parameters:**

- `project_id` (string) (required): Project ID or URL-encoded path where the release will be created

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

### issue (47 tools)

#### gitlab_issue_create

Create a new issue in a GitLab project. Supports title, description (Markdown), assignees, labels, milestone, due date, confidential flag, issue_type (issue/incident/test_case/task), weight, and epic_id. Returns the created issue with ID, IID, state, and web URL. See also: gitlab_issue_list, gitlab_issue_note_create.

**Parameters:**

- `assignee_id` (integer): Single user ID to assign (use assignee_ids for multiple)
- `assignee_ids` (array of integers): User IDs to assign
- `confidential` (boolean): Mark issue as confidential
- `created_at` (string): Creation date override (ISO 8601, requires admin permissions)
- `description` (string): Issue description (Markdown supported)
- `discussion_to_resolve` (string): Discussion ID to mark as resolved by this issue
- `due_date` (string): Due date in YYYY-MM-DD format
- `epic_id` (integer): Epic ID to associate the issue with
- `issue_type` (string): Issue type (issue, incident, test_case, task)
- `labels` (string): Comma-separated labels to apply
- `merge_request_to_resolve_discussions_of` (integer): MR IID whose unresolved discussions become issues
- `milestone_id` (integer): Milestone ID to associate
- `project_id` (string) (required): Project ID or URL-encoded path
- `title` (string) (required): Issue title
- `weight` (integer): Issue weight (0 or higher)

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_issue_create_todo

Create a to-do item for the authenticated user on the specified issue. The to-do will appear in the user's GitLab to-do list.

**Parameters:**

- `issue_iid` (integer) (required): Issue internal ID
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_issue_delete

Permanently delete a GitLab issue. This action cannot be undone. Requires at least Maintainer access level.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `issue_iid` (integer) (required): Issue IID (project-scoped internal ID, not 'issue_id')
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_issue_emoji_create

Add an award emoji reaction to a project issue.

**Parameters:**

- `issue_iid` (integer) (required): Issue IID (project-scoped internal ID)
- `name` (string) (required): Emoji name without colons (e.g. thumbsup)
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_issue_emoji_delete

Delete an award emoji from a project issue.

**Parameters:**

- `award_id` (integer) (required): Award emoji ID
- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `issue_iid` (integer) (required): Issue IID (project-scoped internal ID)
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_issue_emoji_get

Get a single award emoji on a project issue.

**Parameters:**

- `award_id` (integer) (required): Award emoji ID
- `issue_iid` (integer) (required): Issue IID (project-scoped internal ID)
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_issue_emoji_list

List all award emoji on a project issue.

**Parameters:**

- `issue_iid` (integer) (required): Issue IID (project-scoped internal ID)
- `page` (integer): Page number for pagination (default 1)
- `per_page` (integer): Number of items per page (default 20, max 100)
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_issue_get

Retrieve a single GitLab issue by its project-scoped IID (the '#N' number shown in URLs and UI, NOT the global numeric ID). For global IDs, use gitlab_issue_get_by_id instead. Returns title, description, state, labels, assignees, milestone, author, timestamps, and web URL. See also: gitlab_issue_note_list, gitlab_issue_mrs_closing.

**Parameters:**

- `issue_iid` (integer) (required): Issue IID (project-scoped internal ID, not 'issue_id')
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_issue_get_by_id

Retrieve a single GitLab issue by its global numeric ID (the 'id' field, NOT the '#N' IID shown in URLs). Use this only when you have a global ID from another API response. For the common case of looking up issue #N in a project, use gitlab_issue_get with the IID instead.

**Parameters:**

- `issue_id` (integer) (required): The global issue ID (not the project-scoped IID)

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_issue_iteration_event_get

Get a single iteration event for a project issue.

**Parameters:**

- `issue_iid` (integer) (required): Issue internal ID
- `iteration_event_id` (integer) (required): Iteration event ID
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_issue_iteration_event_list

List iteration events for a project issue. Shows when iterations were added or removed.

**Parameters:**

- `issue_iid` (integer) (required): Issue internal ID
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_issue_label_event_get

Get a single label event for a project issue.

**Parameters:**

- `issue_iid` (integer) (required): Issue internal ID
- `label_event_id` (integer) (required): Label event ID
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_issue_label_event_list

List label events for a project issue. Shows when labels were added or removed.

**Parameters:**

- `issue_iid` (integer) (required): Issue internal ID
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_issue_link_create

Create a link between two issues. Specify source project/issue and target project/issue. Link types: relates_to (default), blocks, is_blocked_by.

**Parameters:**

- `issue_iid` (integer) (required): Source issue IID
- `link_type` (string) (required): Link type: relates_to (default), blocks, or is_blocked_by
- `project_id` (string) (required): Source project ID or URL-encoded path
- `target_issue_iid` (string) (required): Target issue IID
- `target_project_id` (string) (required): Target project ID or path

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_issue_link_delete

Delete an issue link, removing the two-way relationship between the linked issues. This action cannot be undone.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `issue_iid` (integer) (required): Issue IID
- `issue_link_id` (integer) (required): Issue link ID to remove
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_issue_link_get

Get a specific issue link by ID, returning source and target issue details with link type.

**Parameters:**

- `issue_iid` (integer) (required): Issue IID
- `issue_link_id` (integer) (required): Issue link ID
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_issue_link_list

List issue relations (linked issues) for a given issue in a GitLab project. Returns related issues with link type (relates_to, blocks, is_blocked_by).

**Parameters:**

- `issue_iid` (integer) (required): Issue IID
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_issue_list

List issues for a GitLab project with filters for state, labels, milestone, assignee, author, and search. Returns paginated results with issue details. See also: gitlab_issue_get, gitlab_issue_create.

**Parameters:**

- `assignee_username` (string): Filter by assignee username
- `author_username` (string): Filter by author username
- `confidential` (boolean): Filter by confidential status
- `created_after` (string): Return issues created after date (ISO 8601 format, e.g. 2025-01-01T00:00:00Z)
- `created_before` (string): Return issues created before date (ISO 8601 format, e.g. 2025-12-31T23:59:59Z)
- `iids` (array of integers): Filter by issue internal IDs
- `issue_type` (string): Filter by issue type (issue, incident, test_case, task)
- `labels` (string): Comma-separated label names to filter by
- `milestone` (string): Milestone title to filter by
- `not_labels` (string): Comma-separated label names to exclude
- `order_by` (string): Order by field (created_at, updated_at, priority, due_date)
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `project_id` (string) (required): Project ID or URL-encoded path
- `scope` (string): Filter by scope (created_by_me, assigned_to_me, all)
- `search` (string): Search in title and description
- `sort` (string): Sort direction (asc, desc)
- `state` (string): Filter by state (opened, closed, all)
- `updated_after` (string): Return issues updated after date (ISO 8601 format, e.g. 2025-01-01T00:00:00Z)
- `updated_before` (string): Return issues updated before date (ISO 8601 format, e.g. 2025-12-31T23:59:59Z)

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_issue_list_all

List issues visible to the authenticated user across all projects (global scope). Supports filtering by state, labels, milestone, scope, search, assignee, author, time range, confidential flag, and ordering. Returns paginated results. See also: gitlab_issue_list, gitlab_issue_get.

**Parameters:**

- `assignee_username` (string): Filter by assignee username
- `author_username` (string): Filter by author username
- `confidential` (boolean): Filter by confidential status
- `created_after` (string): Return issues created after date (ISO 8601)
- `created_before` (string): Return issues created before date (ISO 8601)
- `labels` (string): Comma-separated label names to filter by
- `milestone` (string): Milestone title to filter by
- `order_by` (string): Order by field (created_at, updated_at, priority, due_date)
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `scope` (string): Filter by scope (created_by_me, assigned_to_me, all)
- `search` (string): Search in title and description
- `sort` (string): Sort direction (asc, desc)
- `state` (string): Filter by state (opened, closed, all)
- `updated_after` (string): Return issues updated after date (ISO 8601)
- `updated_before` (string): Return issues updated before date (ISO 8601)

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_issue_list_group

List issues across all projects in a GitLab group. Supports filtering by state, labels, milestone, scope, time range, assignee, author, and search. Returns paginated issue details including project reference. See also: gitlab_issue_list, gitlab_issue_get.

**Parameters:**

- `author_username` (string): Filter by author username
- `created_after` (string): Return issues created after date (ISO 8601)
- `created_before` (string): Return issues created before date (ISO 8601)
- `group_id` (string) (required): Group ID or URL-encoded path
- `labels` (string): Comma-separated list of labels to filter by
- `milestone` (string): Milestone title to filter by
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `scope` (string): Scope (created_by_me, assigned_to_me, all)
- `search` (string): Search in title and description
- `state` (string): Filter by state (opened, closed, all)
- `updated_after` (string): Return issues updated after date (ISO 8601)
- `updated_before` (string): Return issues updated before date (ISO 8601)

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_issue_milestone_event_get

Get a single milestone event for a project issue.

**Parameters:**

- `issue_iid` (integer) (required): Issue internal ID
- `milestone_event_id` (integer) (required): Milestone event ID
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_issue_milestone_event_list

List milestone events for a project issue. Shows when milestones were added or removed.

**Parameters:**

- `issue_iid` (integer) (required): Issue internal ID
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_issue_move

Move an issue from one project to another. Requires at least Reporter access on both the source and target projects.

**Parameters:**

- `issue_iid` (integer) (required): Issue internal ID
- `project_id` (string) (required): Source project ID or URL-encoded path
- `to_project_id` (integer) (required): Target project ID to move issue to

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_issue_mrs_closing

List merge requests that will close this issue when merged. Returns MR details including source/target branches. See also: gitlab_mr_get, gitlab_issue_mrs_related.

**Parameters:**

- `issue_iid` (integer) (required): Issue internal ID
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_issue_mrs_related

List merge requests related to this issue. Returns MR details including source/target branches. See also: gitlab_issue_get, gitlab_mr_list.

**Parameters:**

- `issue_iid` (integer) (required): Issue internal ID
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_issue_note_create

Add a comment (note) to a GitLab issue. Supports Markdown formatting and optional internal visibility flag (visible only to project members).

**Parameters:**

- `body` (string) (required): Note body (Markdown supported)
- `internal` (boolean): Mark note as internal (visible only to project members)
- `issue_iid` (integer) (required): Issue internal ID
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_issue_note_delete

Permanently delete a comment from a GitLab issue. Only the note author or a project maintainer can delete a note.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `issue_iid` (integer) (required): Issue internal ID
- `note_id` (integer) (required): ID of the note to delete
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_issue_note_emoji_create

Add an award emoji reaction to a project issue note.

**Parameters:**

- `issue_iid` (integer) (required): Issue IID (project-scoped internal ID)
- `name` (string) (required): Emoji name without colons (e.g. thumbsup)
- `note_id` (integer) (required): Note ID
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_issue_note_emoji_delete

Delete an award emoji from a project issue note.

**Parameters:**

- `award_id` (integer) (required): Award emoji ID
- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `issue_iid` (integer) (required): Issue IID (project-scoped internal ID)
- `note_id` (integer) (required): Note ID
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_issue_note_emoji_get

Get a single award emoji on a project issue note.

**Parameters:**

- `award_id` (integer) (required): Award emoji ID
- `issue_iid` (integer) (required): Issue IID (project-scoped internal ID)
- `note_id` (integer) (required): Note ID
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_issue_note_emoji_list

List all award emoji on a project issue note.

**Parameters:**

- `issue_iid` (integer) (required): Issue IID (project-scoped internal ID)
- `note_id` (integer) (required): Note ID
- `page` (integer): Page number for pagination (default 1)
- `per_page` (integer): Number of items per page (default 20, max 100)
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_issue_note_get

Get a single comment (note) from a GitLab issue by its note ID, including author, timestamps, body, and internal/system flags.

**Parameters:**

- `issue_iid` (integer) (required): Issue internal ID
- `note_id` (integer) (required): ID of the note to retrieve
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_issue_note_list

List all comments (notes) on a GitLab issue. Supports ordering by created_at or updated_at, sort direction, and pagination.

**Parameters:**

- `issue_iid` (integer) (required): Issue internal ID
- `order_by` (string): Order by field (created_at, updated_at)
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `project_id` (string) (required): Project ID or URL-encoded path
- `sort` (string): Sort direction (asc, desc)

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_issue_note_update

Edit the body text of an existing comment on a GitLab issue. Only the note author or a project maintainer can update a note.

**Parameters:**

- `body` (string) (required): Updated note body (Markdown supported)
- `issue_iid` (integer) (required): Issue internal ID
- `note_id` (integer) (required): ID of the note to update
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_issue_participants

List all participants (users who engaged) in an issue. Returns usernames, names, and profile URLs. See also: gitlab_issue_get, gitlab_project_members_list.

**Parameters:**

- `issue_iid` (integer) (required): Issue IID (project-scoped internal ID, not 'issue_id')
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_issue_reorder

Reorder an issue by specifying the issue to position it before or after. Use move_after_id and/or move_before_id to set the relative position.

**Parameters:**

- `issue_iid` (integer) (required): Issue internal ID
- `move_after_id` (integer): ID of issue to position after
- `move_before_id` (integer): ID of issue to position before
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_issue_spent_time_add

Add spent time to an issue using a human-readable duration (e.g. 1h, 30m) with an optional summary.

**Parameters:**

- `duration` (string) (required): Human-readable duration (e.g. 1h, 30m, 1w2d)
- `issue_iid` (integer) (required): Issue internal ID
- `project_id` (string) (required): Project ID or URL-encoded path
- `summary` (string): Optional summary of work done

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_issue_spent_time_reset

Reset the total spent time for an issue to zero.

**Parameters:**

- `issue_iid` (integer) (required): Issue IID (project-scoped internal ID, not 'issue_id')
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_issue_state_event_get

Get a single state event for a project issue.

**Parameters:**

- `issue_iid` (integer) (required): Issue internal ID
- `project_id` (string) (required): Project ID or URL-encoded path
- `state_event_id` (integer) (required): State event ID

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_issue_state_event_list

List state events for a project issue. Shows when the issue was opened, closed, or reopened.

**Parameters:**

- `issue_iid` (integer) (required): Issue internal ID
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_issue_subscribe

Subscribe the authenticated user to an issue to receive notifications on updates.

**Parameters:**

- `issue_iid` (integer) (required): Issue internal ID
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_issue_time_estimate_reset

Reset the time estimate for an issue back to zero.

**Parameters:**

- `issue_iid` (integer) (required): Issue IID (project-scoped internal ID, not 'issue_id')
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_issue_time_estimate_set

Set the time estimate for an issue using a human-readable duration (e.g. 3h30m, 1w2d).

**Parameters:**

- `duration` (string) (required): Human-readable duration (e.g. 3h30m, 1w2d)
- `issue_iid` (integer) (required): Issue internal ID
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_issue_time_stats_get

Get time tracking statistics for an issue (estimate and spent time).

**Parameters:**

- `issue_iid` (integer) (required): Issue IID (project-scoped internal ID, not 'issue_id')
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_issue_unsubscribe

Unsubscribe the authenticated user from an issue to stop receiving notifications.

**Parameters:**

- `issue_iid` (integer) (required): Issue internal ID
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_issue_update

Update a GitLab issue. Supports changing title, description, state (close/reopen), assignees, labels (replace, add, or remove), milestone, due date, confidential flag, issue_type, weight, and discussion_locked. Only specified fields are modified.

**Parameters:**

- `add_labels` (string): Comma-separated labels to add without removing existing
- `assignee_id` (integer): Single user ID to assign (use assignee_ids for multiple)
- `assignee_ids` (array of integers): New assignee user IDs
- `confidential` (boolean): Update confidential flag
- `description` (string): New description (Markdown supported)
- `discussion_locked` (boolean): Lock discussions on this issue
- `due_date` (string): New due date in YYYY-MM-DD format
- `epic_id` (integer): Epic ID to associate (EE only)
- `issue_iid` (integer) (required): Issue IID (project-scoped internal ID, not 'issue_id')
- `issue_type` (string): Issue type (issue, incident, test_case, task)
- `labels` (string): Comma-separated labels to replace all existing
- `milestone_id` (integer): New milestone ID (0 to unset; omit to leave unchanged)
- `project_id` (string) (required): Project ID or URL-encoded path
- `remove_labels` (string): Comma-separated labels to remove
- `state_event` (string): State transition; set to close or reopen when changing issue state.
- `title` (string): New title
- `weight` (integer): Issue weight (0 or higher)

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_issue_weight_event_list

List weight events for a project issue. Shows when weight was changed.

**Parameters:**

- `issue_iid` (integer) (required): Issue internal ID
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

### job (17 tools)

#### gitlab_job_artifacts

Download the artifacts archive (zip) for a specific job. Returns base64-encoded content (limited to 1MB). Use for retrieving build outputs.

**Parameters:**

- `job_id` (integer) (required): Job ID to retrieve
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_job_cancel

Cancel a running or pending CI/CD job in a GitLab project. Returns the updated job details.

**Parameters:**

- `job_id` (integer) (required): Job ID to act on
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_job_delete_artifacts

Delete the artifacts for a specific job.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `job_id` (integer) (required): Job ID to delete artifacts from
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_job_delete_project_artifacts

Delete all artifacts across an entire project. This is a destructive operation.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_job_download_artifacts

Download the artifacts archive for a specific ref and optional job name. Returns base64-encoded content (limited to 1MB).

**Parameters:**

- `job` (string) (required): Job name to download artifacts from
- `project_id` (string) (required): Project ID or URL-encoded path
- `ref_name` (string) (required): Branch or tag name

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_job_download_single_artifact

Download a single artifact file from a job by its path within the archive. Returns raw file content. Useful for reading specific build outputs like test results or coverage reports.

**Parameters:**

- `artifact_path` (string) (required): Path to the artifact file within the archive
- `job_id` (integer) (required): Job ID
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_job_download_single_artifact_by_ref

Download a single artifact file by branch/tag name and artifact path. Returns raw file content from the latest successful pipeline for that ref.

**Parameters:**

- `artifact_path` (string) (required): Path to the artifact file within the archive
- `job` (string) (required): Job name
- `project_id` (string) (required): Project ID or URL-encoded path
- `ref_name` (string) (required): Branch or tag name

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_job_erase

Erase a job's trace log and artifacts. Returns the updated job details with erased_at timestamp.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `job_id` (integer) (required): Job ID to act on
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_job_get

Retrieve detailed information about a specific CI/CD job in a GitLab project. Returns job ID, name, status, stage, pipeline, runner, duration, coverage, timestamps, and web URL.

**Parameters:**

- `job_id` (integer) (required): Job ID to retrieve
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_job_keep_artifacts

Prevent a job's artifacts from being deleted when expiration is set. Returns updated job details.

**Parameters:**

- `job_id` (integer) (required): Job ID to act on
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_job_list

List jobs for a specific pipeline in a GitLab project. Supports filtering by scope (created, pending, running, failed, success, canceled, skipped, manual). Returns job ID, name, status, stage, runner, duration, and web URL with pagination.

**Parameters:**

- `include_retried` (boolean): Include retried jobs in the response
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `pipeline_id` (integer) (required): Pipeline ID to list jobs for
- `project_id` (string) (required): Project ID or URL-encoded path
- `scope` (array of strings): Filter by job status: created, pending, running, failed, success, canceled, skipped, waiting_for_resource, manual

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_job_list_bridges

List pipeline bridge (trigger) jobs for a pipeline. Bridge jobs connect upstream and downstream pipelines. Returns bridge ID, name, stage, status, duration, and downstream pipeline ID.

**Parameters:**

- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `pipeline_id` (integer) (required): Pipeline ID to list bridge jobs for
- `project_id` (string) (required): Project ID or URL-encoded path
- `scope` (array of strings): Filter by job status: created, pending, running, failed, success, canceled, skipped, manual

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_job_list_project

List all jobs across a GitLab project (not limited to a single pipeline). Supports filtering by scope and pagination. Returns job ID, name, status, stage, duration.

**Parameters:**

- `include_retried` (boolean): Include retried jobs in the response
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `project_id` (string) (required): Project ID or URL-encoded path
- `scope` (array of strings): Filter by job status: created, pending, running, failed, success, canceled, skipped, waiting_for_resource, manual

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_job_play

Trigger (play) a manual CI/CD job. Supports passing job variables. Returns updated job details.

**Parameters:**

- `job_id` (integer) (required): Job ID to run
- `project_id` (string) (required): Project ID or URL-encoded path
- `variables` (array of objects): Job variables to pass

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_job_retry

Retry a failed or canceled CI/CD job in a GitLab project. Returns the new job details.

**Parameters:**

- `job_id` (integer) (required): Job ID to act on
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_job_trace

Retrieve the log (trace) output of a CI/CD job. Returns the raw log text, truncated to the last 100KB if larger. There is no pagination — if the log is truncated, the beginning is lost. Useful for debugging failed jobs by examining the most recent output.

**Parameters:**

- `job_id` (integer) (required): Job ID to get trace log for
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_job_wait

Wait for a CI/CD job to reach a terminal state (success, failed, canceled, skipped, manual). Polls the job status at a configurable interval and sends progress notifications. Returns the final job details when done or when the timeout is reached.

**Parameters:**

- `fail_on_error` (boolean): Return isError when job ends in failed/canceled status (default true)
- `interval_seconds` (integer): Polling interval in seconds (5-60, default 10)
- `job_id` (integer) (required): Job ID to wait for
- `project_id` (string) (required): Project ID or URL-encoded path
- `timeout_seconds` (integer): Maximum wait time in seconds (1-3600, default 300)

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

### label (8 tools)

#### gitlab_label_create

Create a new label in a GitLab project with a name, color (hex), optional description, and optional priority. Returns: label ID, name, color, description, priority, and subscribed status. See also: gitlab_label_list, gitlab_issue_create.

**Parameters:**

- `color` (string) (required): Label color in hex format (e.g. #FF0000)
- `description` (string): Label description
- `name` (string) (required): Label name
- `priority` (integer): Label priority (lower is higher priority, 0 means no priority)
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_label_delete

Delete a project label by ID or name.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `label_id` (string) (required): Label ID or name
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_label_get

Get details of a single project label by ID or name. Returns: ID, name, color, description, priority, open/closed issue counts, open MR count, and subscribed status. See also: gitlab_label_update.

**Parameters:**

- `label_id` (string) (required): Label ID or name
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_label_list

List all labels for a GitLab project. Supports filtering by search keyword, including issue/MR counts (with_counts), and including labels from ancestor groups. Returns label name, color, description, open/closed issue counts, and merge request counts with pagination.

**Parameters:**

- `include_ancestor_groups` (boolean): Include labels from ancestor groups
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `project_id` (string) (required): Project ID or URL-encoded path
- `search` (string): Filter labels by keyword search
- `with_counts` (boolean): Include issue and merge request counts

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_label_promote

Promote a project label to a group label, making it available to all projects in the group.

**Parameters:**

- `label_id` (string) (required): Label ID or name
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_label_subscribe

Subscribe to a project label to receive notifications when the label is applied to issues or merge requests. Returns: label details with subscribed status set to true. See also: gitlab_label_get.

**Parameters:**

- `label_id` (string) (required): Label ID or name
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_label_unsubscribe

Unsubscribe from a project label to stop receiving notifications.

**Parameters:**

- `label_id` (string) (required): Label ID or name
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_label_update

Update an existing project label. Can change name, color, description, or priority. Only specified fields are modified. Returns: updated label with ID, name, color, description, and priority. See also: gitlab_label_get.

**Parameters:**

- `color` (string): New label color in hex format
- `description` (string): New label description
- `label_id` (string) (required): Label ID or name
- `new_name` (string): New label name
- `priority` (integer): New label priority (0 to remove)
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

### list (78 tools)

#### gitlab_list_alert_metric_images

List metric images for a GitLab alert.

**Parameters:**

- `alert_iid` (integer) (required): Alert IID
- `page` (integer) (required): Page number for pagination
- `per_page` (integer) (required): Number of items per page
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_list_applications

List all OAuth2 applications (admin). Params: page, per_page.

**Parameters:**

- `page` (integer): Page number for pagination
- `per_page` (integer): Number of items per page

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_list_attestations

List all build attestations for a project matching a subject digest.

**Parameters:**

- `project_id` (string) (required): Project ID or URL-encoded path
- `subject_digest` (string) (required): Subject digest (hash) to filter attestations

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_list_branch_rules

List branch rules for a project via GraphQL API. Provides an aggregated read-only view of branch protections, approval rules, and external status checks. Returns: paginated list with name, protection status, force push, code owner approval, approval rules, and external status checks. See also: gitlab_branch_protect, gitlab_branch_list.

**Parameters:**

- `after` (string): Cursor for forward pagination (from previous response end_cursor)
- `before` (string): Cursor for backward pagination (from previous response start_cursor)
- `first` (integer): Number of items to return (default 20, max 100)
- `last` (integer): Number of items from the end (backward pagination)
- `project_path` (string) (required): required,Project full path (e.g. my-group/my-project)

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_list_broadcast_messages

List all broadcast messages. Requires admin access.

**Parameters:**

- `page` (integer): Page number
- `per_page` (integer): Items per page

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_list_bulk_import_entities

List bulk import migration entities. When bulk_import_id is provided, scopes to that import; otherwise returns all entities visible to the caller. Optionally filter by status.

**Parameters:**

- `bulk_import_id` (integer): Bulk import ID. If omitted, returns entities across all imports.
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `status` (string): Filter by entity status: created, started, finished, timeout, failed, canceled

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_list_bulk_import_entity_failures

List failed import records for a bulk import migration entity. Useful for diagnosing failed migrations.

**Parameters:**

- `bulk_import_id` (integer) (required): Bulk import ID
- `entity_id` (integer) (required): Entity ID within the bulk import

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_list_bulk_imports

List all group or project bulk import migrations visible to the caller. Optionally filter by status.

**Parameters:**

- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `status` (string): Filter by status: created, started, finished, timeout, failed, canceled

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_list_catalog_resources

List CI/CD Catalog resources. Search the catalog of reusable CI/CD components. Supports filtering by search text, scope (ALL or NAMESPACED), and sorting. Returns: paginated list with name, stars, forks, and latest version. See also: gitlab_get_catalog_resource, gitlab_template.

**Parameters:**

- `after` (string): Cursor for forward pagination (from previous response end_cursor)
- `before` (string): Cursor for backward pagination (from previous response start_cursor)
- `first` (integer): Number of items to return (default 20, max 100)
- `last` (integer): Number of items from the end (backward pagination)
- `scope` (string): Filter scope: ALL (default) or NAMESPACED
- `search` (string): Search resources by name or description
- `sort` (string): Sort order: NAME_ASC (default), NAME_DESC, LATEST_RELEASED_AT_ASC, LATEST_RELEASED_AT_DESC, STAR_COUNT_ASC, STAR_COUNT_DESC

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_list_ci_yml_templates

List all available GitLab CI YAML templates. Returns key and name for each template.

**Parameters:**

- `page` (integer): Page number for pagination
- `per_page` (integer): Items per page

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_list_cluster_agent_tokens

List tokens for a cluster agent

**Parameters:**

- `agent_id` (integer) (required): Agent ID
- `page` (integer) (required): Page number for pagination
- `per_page` (integer) (required): Number of items per page
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_list_cluster_agents

List cluster agents for a GitLab project

**Parameters:**

- `page` (integer) (required): Page number for pagination
- `per_page` (integer) (required): Number of items per page
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_list_commit_discussions

List discussion threads on a project commit.

**Parameters:**

- `commit_sha` (string) (required): Commit SHA
- `page` (integer): Page number for pagination
- `per_page` (integer): Number of items per page
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_list_custom_attributes

List custom attributes for a user, group, or project (admin). Params: resource_type (required: user|group|project), resource_id (required).

**Parameters:**

- `resource_id` (integer) (required): ID of the resource
- `resource_type` (string) (required): Resource type: user, group, or project

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_list_custom_emoji

List custom emoji for a GitLab group via GraphQL API. Returns: paginated list with ID, name, URL, and created date. See also: gitlab_create_custom_emoji.

**Parameters:**

- `after` (string): Cursor for forward pagination (from previous response end_cursor)
- `before` (string): Cursor for backward pagination (from previous response start_cursor)
- `first` (integer): Number of items to return (default 20, max 100)
- `group_path` (string) (required): required,Group full path (e.g. my-group)
- `last` (integer): Number of items from the end (backward pagination)

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_list_deployment_merge_requests

List merge requests associated with a specific deployment in a GitLab project.

**Parameters:**

- `deployment_id` (integer) (required): Deployment ID
- `order_by` (string): Order by: created_at or updated_at
- `page` (integer): Page number for pagination
- `per_page` (integer): Number of items per page (max 100)
- `project_id` (string) (required): Project ID or URL-encoded path
- `sort` (string): Sort order: asc or desc
- `state` (string): Filter by state: opened, closed, merged, all

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_list_dockerfile_templates

List all available Dockerfile templates.

**Parameters:**

- `page` (integer): Page number for pagination
- `per_page` (integer): Items per page

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_list_emails

List email addresses for the currently authenticated GitLab user. Returns email ID, address, and confirmation status.

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_list_emails_for_user

List email addresses for a specific GitLab user by user ID.

**Parameters:**

- `page` (integer): Page number for pagination
- `per_page` (integer): Items per page (max 100)
- `user_id` (integer) (required): GitLab user ID

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_list_enterprise_users

List all enterprise users for a GitLab group.

**Parameters:**

- `active` (boolean): Filter for active users only
- `blocked` (boolean): Filter for blocked users only
- `created_after` (string): Filter users created after this date (ISO 8601)
- `created_before` (string): Filter users created before this date (ISO 8601)
- `group_id` (string) (required): Group ID or URL-encoded path
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `search` (string): Search by name or username or email
- `two_factor` (string): Filter by 2FA status: enabled or disabled
- `username` (string): Filter by exact username

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_list_epic_discussions

List discussion threads on a group epic via the Work Items GraphQL API.

**Parameters:**

- `after` (string): Cursor for forward pagination (from previous response end_cursor)
- `before` (string): Cursor for backward pagination (from previous response start_cursor)
- `epic_iid` (integer) (required): Epic IID within the group
- `first` (integer): Number of items to return (default 20, max 100)
- `full_path` (string) (required): Full path of the group (e.g. my-group or my-group/sub-group)
- `last` (integer): Number of items from the end (backward pagination)

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_list_error_tracking_client_keys

List error tracking client keys for a GitLab project.

**Parameters:**

- `page` (integer) (required): Page number for pagination
- `per_page` (integer) (required): Number of items per page
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_list_feature_definitions

List all feature definitions (admin). Returns name, type, group, milestone and default_enabled for each definition.

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_list_features

List all feature flags (admin). Returns name, state and gates for each flag.

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_list_freeze_periods

List deploy freeze periods for a GitLab project.

**Parameters:**

- `page` (integer): Page number for pagination
- `per_page` (integer): Number of items per page
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_list_geo_sites

List all Geo replication sites.

**Parameters:**

- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_list_gitignore_templates

List all available gitignore templates.

**Parameters:**

- `page` (integer): Page number for pagination
- `per_page` (integer): Items per page

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_list_gpg_keys

List GPG keys for the currently authenticated GitLab user.

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_list_gpg_keys_for_user

List GPG keys for a specific GitLab user by user ID.

**Parameters:**

- `user_id` (integer) (required): The ID of the user

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_list_group_audit_events

List audit events for a GitLab group. Supports filtering by date range. Returns: paginated list of audit events with ID, author, entity, event details. See also: gitlab_get_group_audit_event, gitlab_list_instance_audit_events, gitlab_list_project_audit_events.

**Parameters:**

- `created_after` (string): Return events created after this date (ISO 8601 YYYY-MM-DD)
- `created_before` (string): Return events created before this date (ISO 8601 YYYY-MM-DD)
- `group_id` (string) (required): Group ID or URL-encoded path
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_list_group_badges

List all badges of a group.

**Parameters:**

- `group_id` (string) (required): Group ID or URL-encoded path
- `name` (string): Filter by badge name
- `page` (integer): Page number
- `per_page` (integer): Items per page

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_list_group_iterations

List iterations for a group. Iterations provide time-boxed planning periods.

**Parameters:**

- `group_id` (string) (required): Group ID or URL-encoded path
- `include_ancestors` (boolean): Include ancestor iterations
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `search` (string): Search by title
- `state` (string): Filter by state: opened, upcoming, current, closed, all

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_list_group_markdown_uploads

List markdown uploads for a group.

**Parameters:**

- `group_id` (string) (required): The ID or URL-encoded path of the group
- `page` (integer): Page number for pagination
- `per_page` (integer): Number of items per page

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_list_group_member_roles

List all custom member roles for a GitLab group.

**Parameters:**

- `group_id` (string) (required): Group ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_list_group_personal_access_tokens

List personal access tokens managed by a GitLab group. Supports filtering by name, state, and revoked status.

**Parameters:**

- `group_id` (string) (required): Group ID or URL-encoded path
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `revoked` (boolean): Filter by revoked status
- `search` (string): Filter tokens by name
- `state` (string): Filter by state (active, inactive)

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_list_group_relations_export_status

List the status of group relations exports.

**Parameters:**

- `group_id` (string) (required): The ID or URL-encoded path of the group
- `page` (integer): Page number for pagination
- `per_page` (integer): Number of items per page
- `relation` (string): Filter by relation type

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_list_group_scim_identities

List all SCIM identities for a GitLab group. Returns external UIDs, user IDs, and active status.

**Parameters:**

- `group_id` (string) (required): Group ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_list_group_ssh_certificates

List all SSH certificates for a GitLab group.

**Parameters:**

- `group_id` (string) (required): Group ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_list_group_ssh_keys

List SSH keys managed by a GitLab group.

**Parameters:**

- `group_id` (string) (required): Group ID or URL-encoded path
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_list_impersonation_tokens

List all impersonation tokens for a GitLab user by user ID. Optionally filter by state (all/active/inactive).

**Parameters:**

- `page` (integer): Page number for pagination
- `per_page` (integer): Items per page (max 100)
- `state` (string): Filter by state: all/active/inactive
- `user_id` (integer) (required): GitLab user ID

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_list_instance_audit_events

List instance-level audit events (admin only). Supports filtering by date range. Returns: paginated list of audit events with ID, author, entity, event details. See also: gitlab_get_instance_audit_event, gitlab_list_group_audit_events, gitlab_list_project_audit_events.

**Parameters:**

- `created_after` (string): Return events created after this date (ISO 8601 YYYY-MM-DD)
- `created_before` (string): Return events created before this date (ISO 8601 YYYY-MM-DD)
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_list_instance_member_roles

List all custom member roles at the GitLab instance level. Requires admin access.

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_list_integrations

List all integrations (services) configured for a project, including their active status.

**Parameters:**

- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_list_issue_discussions

List discussion threads on a project issue.

**Parameters:**

- `issue_iid` (integer) (required): Issue internal ID
- `page` (integer): Page number for pagination
- `per_page` (integer): Number of items per page
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_list_job_token_group_allowlist

List groups on the CI/CD job token allowlist for a GitLab project.

**Parameters:**

- `page` (integer): Page number for pagination
- `per_page` (integer): Number of items per page (max 100)
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_list_job_token_inbound_allowlist

List projects on the CI/CD job token inbound allowlist for a GitLab project.

**Parameters:**

- `page` (integer): Page number for pagination
- `per_page` (integer): Number of items per page (max 100)
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_list_license_templates

List all available open-source license templates. Optionally filter by popular.

**Parameters:**

- `page` (integer): Page number for pagination
- `per_page` (integer): Items per page
- `popular` (boolean): Filter by popular licenses

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_list_merge_request_in_merge_train

List merge requests in a merge train for a specific target branch.

**Parameters:**

- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `project_id` (string) (required): Project ID or URL-encoded path
- `scope` (string): Filter by scope: active, complete
- `sort` (string): Sort order: asc or desc
- `target_branch` (string) (required): Target branch name

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_list_mr_context_commits

List context commits associated with a merge request. Context commits are additional commits relevant to the MR but not in the diff. Returns commit SHA, title, and author for each.

**Parameters:**

- `merge_request_iid` (integer) (required): Merge request IID
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_list_package_protection_rules

List all package protection rules for a GitLab project. Protection rules restrict who can push or delete matching packages.

**Parameters:**

- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_list_project_aliases

List all project aliases (admin-only). Project aliases allow accessing projects via alternative names.

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_list_project_audit_events

List audit events for a GitLab project. Supports filtering by date range. Returns: paginated list of audit events with ID, author, entity, event details. See also: gitlab_get_project_audit_event, gitlab_list_group_audit_events, gitlab_list_instance_audit_events.

**Parameters:**

- `created_after` (string): Return events created after this date (ISO 8601 YYYY-MM-DD)
- `created_before` (string): Return events created before this date (ISO 8601 YYYY-MM-DD)
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_list_project_badges

List all badges of a project, including inherited group badges.

**Parameters:**

- `name` (string): Filter by badge name
- `page` (integer): Page number
- `per_page` (integer): Items per page
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_list_project_dependencies

List dependencies for a GitLab project. Supports filtering by package manager. Returns: paginated list with name, version, package manager, file path, vulnerabilities, and licenses. See also: gitlab_create_dependency_list_export, gitlab_list_vulnerabilities.

**Parameters:**

- `package_manager` (string): Filter by package manager (bundler, composer, conan, go, gradle, maven, npm, nuget, pip, pipenv, pnpm, yarn, sbt, setuptools)
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_list_project_external_status_checks

List external status checks configured for a project. Returns: paginated list with ID, name, external URL, HMAC, protected branches count.

**Parameters:**

- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_list_project_iterations

List iterations for a project. Iterations provide time-boxed planning periods.

**Parameters:**

- `include_ancestors` (boolean): Include ancestor iterations
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `project_id` (string) (required): Project ID or URL-encoded path
- `search` (string): Search by title
- `state` (string): Filter by state: opened, upcoming, current, closed, all

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_list_project_merge_trains

List all merge trains for a project.

**Parameters:**

- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `project_id` (string) (required): Project ID or URL-encoded path
- `scope` (string): Filter by scope: active, complete
- `sort` (string): Sort order: asc or desc

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_list_project_mirrors

List all remote push mirrors configured for a GitLab project. Returns mirror URL, status, enabled state, and configuration.

**Parameters:**

- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_list_project_mr_external_status_checks

List external status checks for a project merge request. Returns: paginated list with ID, name, external URL, status.

**Parameters:**

- `merge_request_iid` (integer) (required): Merge request internal ID
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_list_project_status_checks

List project-level external status checks. Returns: paginated list with ID, name, external URL, HMAC, protected branches.

**Parameters:**

- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_list_project_templates

List project templates of a given type (dockerfiles, gitignores, gitlab_ci_ymls, licenses).

**Parameters:**

- `page` (integer) (required): Page number for pagination
- `per_page` (integer) (required): Number of items per page
- `project_id` (string) (required): Project ID or URL-encoded path
- `template_type` (string) (required): Template type: dockerfiles, gitignores, gitlab_ci_ymls, licenses

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_list_repository_submodules

List all Git submodules defined in a repository. Parses .gitmodules and enriches each entry with the current commit SHA pointer and resolved project path.

**Parameters:**

- `project_id` (string) (required): Project ID or URL-encoded path
- `ref` (string): Branch name, tag, or commit SHA (defaults to default branch)

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_list_resource_group_upcoming_jobs

List upcoming jobs for a resource group.

**Parameters:**

- `key` (string) (required): Resource group key
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_list_resource_groups

List resource groups for a GitLab project.

**Parameters:**

- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_list_secure_files

List CI/CD secure files for a GitLab project.

**Parameters:**

- `page` (integer) (required): Page number for pagination
- `per_page` (integer) (required): Number of items per page
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_list_security_findings

List security report findings for a pipeline (requires Ultimate/Premium). Replaces deprecated REST vulnerability_findings endpoint. Supports filtering by severity, confidence, scanner, and report type. Returns: paginated list with finding details, scanner info, and linked vulnerabilities. See also: gitlab_list_vulnerabilities, gitlab_pipeline_security_summary.

**Parameters:**

- `after` (string): Cursor for forward pagination (from previous response end_cursor)
- `before` (string): Cursor for backward pagination (from previous response start_cursor)
- `confidence` (array of strings): Filter by confidence: CONFIRMED, MEDIUM, LOW
- `first` (integer): Number of items to return (default 20, max 100)
- `last` (integer): Number of items from the end (backward pagination)
- `pipeline_iid` (string) (required): Pipeline IID within the project
- `project_path` (string) (required): Full path of the project (e.g. my-group/my-project)
- `report_type` (array of strings): Filter by report type: SAST, DAST, DEPENDENCY_SCANNING, CONTAINER_SCANNING, SECRET_DETECTION, COVERAGE_FUZZING, API_FUZZING, CLUSTER_IMAGE_SCANNING
- `scanner` (array of strings): Filter by scanner external IDs
- `severity` (array of strings): Filter by severity: CRITICAL, HIGH, MEDIUM, LOW, INFO, UNKNOWN

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_list_service_accounts

List all GitLab service accounts with optional ordering and pagination.

**Parameters:**

- `order_by` (string): Field to order by (id/username/name)
- `page` (integer): Page number for pagination
- `per_page` (integer): Items per page (max 100)
- `sort` (string): Sort direction (asc/desc)

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_list_snippet_discussions

List discussion threads on a project snippet.

**Parameters:**

- `page` (integer): Page number for pagination
- `per_page` (integer): Number of items per page
- `project_id` (string) (required): Project ID or URL-encoded path
- `snippet_id` (integer) (required): Snippet ID

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_list_ssh_keys

List SSH keys for the currently authenticated GitLab user. Returns key ID, title, key content, usage type, and creation/expiration dates.

**Parameters:**

- `page` (integer): Page number for pagination
- `per_page` (integer): Number of items per page (max 100)

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_list_ssh_keys_for_user

List SSH keys for a specific GitLab user by user ID. Returns key ID, title, content, usage type, and dates.

**Parameters:**

- `page` (integer): Page number for pagination
- `per_page` (integer): Number of items per page (max 100)
- `user_id` (integer) (required): The ID of the user

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_list_status_all_geo_sites

Retrieve replication status of all Geo sites.

**Parameters:**

- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_list_system_hooks

List all system hooks (admin). Returns ID, URL and event subscriptions.

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_list_terraform_states

List Terraform states for a GitLab project

**Parameters:**

- `project_path` (string) (required): Full project path (e.g. group/project)

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_list_topics

List project topics. Can be filtered by search query.

**Parameters:**

- `page` (integer): Page number
- `per_page` (integer): Items per page
- `search` (string): Filter topics by search query

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_list_user_contribution_events

List contribution events for a specific GitLab user. Returns events with action type, target information, and timestamps. Supports filtering by action, target type, date range, and pagination.

**Parameters:**

- `action` (string): Filter by action type: created | updated | closed | reopened | pushed | commented | merged | joined | left | destroyed | expired | approved
- `after` (string): Only events after this date (YYYY-MM-DD)
- `before` (string): Only events before this date (YYYY-MM-DD)
- `page` (integer): Page number for pagination
- `per_page` (integer): Number of items per page (max 100)
- `sort` (string): Sort order: asc or desc
- `target_type` (string): Filter by target type: Issue | Milestone | MergeRequest | Note | Project | Snippet | User
- `user_id` (integer) (required): The ID of the user whose events to retrieve

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_list_users

List GitLab users with optional filters. Supports search by name/username/email, filtering by active/blocked/external status, ordering, and pagination. Useful for finding users or auditing accounts.

**Parameters:**

- `active` (boolean): Filter for active users only
- `blocked` (boolean): Filter for blocked users only
- `external` (boolean): Filter for external users only
- `order_by` (string): Order by: id | name | username | created_at | updated_at
- `page` (integer): Page number for pagination
- `per_page` (integer): Number of items per page (max 100)
- `search` (string): Search users by name or username or email
- `sort` (string): Sort order: asc or desc
- `username` (string): Filter by exact username

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_list_vulnerabilities

List project vulnerabilities (requires Ultimate/Premium). Supports filtering by severity, state, scanner, report type. Returns: paginated list with severity, state, scanner, and detected date. See also: gitlab_get_vulnerability, gitlab_vulnerability_severity_count, gitlab_list_security_findings.

**Parameters:**

- `after` (string): Cursor for forward pagination (from previous response end_cursor)
- `before` (string): Cursor for backward pagination (from previous response start_cursor)
- `first` (integer): Number of items to return (default 20, max 100)
- `has_issues` (boolean): Filter by whether a linked issue exists
- `has_resolution` (boolean): Filter by whether a resolution exists
- `last` (integer): Number of items from the end (backward pagination)
- `project_path` (string) (required): Full path of the project (e.g. my-group/my-project)
- `report_type` (array of strings): Filter by report type: SAST, DAST, DEPENDENCY_SCANNING, CONTAINER_SCANNING, SECRET_DETECTION, COVERAGE_FUZZING, API_FUZZING, CLUSTER_IMAGE_SCANNING
- `scanner` (array of strings): Filter by scanner external IDs
- `severity` (array of strings): Filter by severity: CRITICAL, HIGH, MEDIUM, LOW, INFO, UNKNOWN
- `sort` (string): Sort order: severity_desc, severity_asc, detected_desc, detected_asc
- `state` (array of strings): Filter by state: DETECTED, CONFIRMED, DISMISSED, RESOLVED

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_list_work_items

List work items for a project or group. Supports filtering by state, type, labels, author, search. Experimental: the Work Items API may introduce breaking changes between minor versions.

**Parameters:**

- `after` (string): Cursor for forward pagination
- `author_username` (string): Filter by author username
- `confidential` (boolean): Filter by confidentiality
- `first` (integer): Number of items to return (cursor-based pagination)
- `full_path` (string) (required): Full path of the project or group
- `include_ancestors` (boolean): Include ancestor work items
- `include_descendants` (boolean): Include descendant work items
- `label_name` (array of strings): Filter by label names
- `search` (string): Search in title and description
- `sort` (string): Sort order
- `state` (string): Filter by state (opened/closed/all)
- `types` (array of strings): Filter by work item types

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

### lock (1 tools)

#### gitlab_lock_terraform_state

Lock a Terraform state

**Parameters:**

- `name` (string) (required): Terraform state name
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

### mark (1 tools)

#### gitlab_mark_migration

Mark a pending database migration as successfully executed (admin). Params: version (required), database (optional).

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `database` (string): Database name (optional, e.g. main or ci)
- `version` (integer) (required): Migration version number to mark as successful

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

### milestone (7 tools)

#### gitlab_milestone_create

Create a new milestone in a GitLab project. Requires title; optionally set description, start_date (YYYY-MM-DD), and due_date (YYYY-MM-DD). Returns: milestone IID, title, state, start/due dates, web URL, and expiration status. See also: gitlab_milestone_get.

**Parameters:**

- `description` (string): Milestone description
- `due_date` (string): Due date (YYYY-MM-DD)
- `project_id` (string) (required): Project ID or URL-encoded path
- `start_date` (string): Start date (YYYY-MM-DD)
- `title` (string) (required): Milestone title

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_milestone_delete

Delete a project milestone by IID. This action is irreversible.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `milestone_iid` (integer) (required): Milestone IID (project-scoped). Use gitlab_milestone_list to find IIDs
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_milestone_get

Get details of a single project milestone by IID. Returns milestone title, description, state, start/due dates, web URL, and expiration status.

**Parameters:**

- `milestone_iid` (integer) (required): Milestone IID (project-scoped). Use gitlab_milestone_list to find IIDs
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_milestone_issues

List all issues assigned to a project milestone by IID. Returns issue IID, title, state, web URL, and creation date with pagination.

**Parameters:**

- `milestone_iid` (integer) (required): Milestone IID (project-scoped). Use gitlab_milestone_list to find IIDs
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_milestone_list

List milestones for a GitLab project. Supports filtering by state (active, closed), exact title, search keyword, and including milestones from ancestor groups. Returns milestone title, description, state, start/due dates, web URL, and expiration status with pagination.

**Parameters:**

- `iids` (array of integers): Filter by milestone IIDs
- `include_ancestors` (boolean): Include milestones from parent groups
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `project_id` (string) (required): Project ID or URL-encoded path
- `search` (string): Search milestones by title or description
- `state` (string): Filter by state (active, closed)
- `title` (string): Filter by exact milestone title

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_milestone_merge_requests

List all merge requests assigned to a project milestone by IID. Returns MR IID, title, state, source/target branches, web URL, and creation date with pagination.

**Parameters:**

- `milestone_iid` (integer) (required): Milestone IID (project-scoped). Use gitlab_milestone_list to find IIDs
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_milestone_update

Update an existing project milestone by IID. Supports changing title, description, start_date, due_date, and state_event (activate/close). Returns: updated milestone with IID, title, state, dates, web URL, and expired flag. See also: gitlab_milestone_get.

**Parameters:**

- `description` (string): Milestone description
- `due_date` (string): Due date (YYYY-MM-DD)
- `milestone_iid` (integer) (required): Milestone IID (project-scoped). Use gitlab_milestone_list to find IIDs
- `project_id` (string) (required): Project ID or URL-encoded path
- `start_date` (string): Start date (YYYY-MM-DD)
- `state_event` (string): State transition: activate or close
- `title` (string): Milestone title

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

### modify (1 tools)

#### gitlab_modify_user

Modify an existing GitLab user account (admin only). Supports updating email, name, username, password, admin status, profile details, and permissions.

**Parameters:**

- `admin` (boolean): Grant or revoke admin privileges
- `bio` (string): New bio text
- `can_create_group` (boolean): Allow user to create groups
- `email` (string): New email address
- `external` (boolean): Mark or unmark as external
- `job_title` (string): New job title
- `location` (string): New location
- `locked` (boolean): Lock or unlock the user account
- `name` (string): New display name
- `note` (string): New admin note
- `organization` (string): New organization
- `password` (string): New password
- `private_profile` (boolean): Set profile as private
- `projects_limit` (integer): New maximum projects limit
- `skip_reconfirmation` (boolean): Skip reconfirmation on email change
- `user_id` (integer) (required): The ID of the user to modify
- `username` (string): New username

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

### mr (74 tools)

#### gitlab_mr_add_spent_time

Add spent time to a GitLab merge request. Duration uses human-readable format (e.g. '1h', '30m', '1w2d'). Optional summary describes the work done. Returns updated time stats.

**Parameters:**

- `duration` (string) (required): Human-readable duration (e.g. 1h, 30m, 1w2d)
- `merge_request_iid` (integer) (required): Merge request IID (project-scoped, not 'merge_request_id')
- `project_id` (string) (required): Project ID or URL-encoded path
- `summary` (string): Optional summary of work done

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_mr_approval_config

Get the approval configuration for a merge request: total required approvals, list of users who already approved, suggested approvers, and whether the current user has approved. Use this to see who approved. For rule-level status, use gitlab_mr_approval_state.

**Parameters:**

- `merge_request_iid` (integer) (required): Merge request internal ID
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_mr_approval_reset

Reset all approvals on a GitLab merge request. Requires project_id and merge_request_iid.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `merge_request_iid` (integer) (required): Merge request internal ID
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_mr_approval_rule_create

Create an approval rule on a GitLab merge request. Specify the rule name, required approvals, and optionally user/group IDs.

**Parameters:**

- `approval_project_rule_id` (integer) (required): Project-level approval rule ID to inherit from
- `approvals_required` (integer) (required): Number of approvals required
- `group_ids` (array of integers) (required): Group IDs eligible to approve
- `merge_request_iid` (integer) (required): Merge request internal ID
- `name` (string) (required): Rule name
- `project_id` (string) (required): Project ID or URL-encoded path
- `user_ids` (array of integers) (required): User IDs eligible to approve

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_mr_approval_rule_delete

Delete an approval rule from a GitLab merge request. Requires project_id, merge_request_iid, and approval_rule_id.

**Parameters:**

- `approval_rule_id` (integer) (required): Approval rule ID
- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `merge_request_iid` (integer) (required): Merge request internal ID
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_mr_approval_rule_update

Update an existing approval rule on a GitLab merge request. Modify the rule name, required approvals, or user/group IDs.

**Parameters:**

- `approval_rule_id` (integer) (required): Approval rule ID
- `approvals_required` (integer) (required): Number of approvals required
- `group_ids` (array of integers) (required): Group IDs eligible to approve
- `merge_request_iid` (integer) (required): Merge request internal ID
- `name` (string) (required): Rule name
- `project_id` (string) (required): Project ID or URL-encoded path
- `user_ids` (array of integers) (required): User IDs eligible to approve

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_mr_approval_rules

List the approval rules configured for a merge request: rule names, types (regular, code_owner, any_approver), required approval count, current approvers, and eligible approvers. Use this to understand the rule configuration. For overall approval status, use gitlab_mr_approval_state instead.

**Parameters:**

- `merge_request_iid` (integer) (required): Merge request internal ID
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_mr_approval_state

Get the overall approval state of a merge request: whether it is approved, which rules are satisfied or pending, and whether rules have been overridden. This is the primary tool for checking 'can this MR be merged?'. For editing approval rules, use gitlab_mr_approval_rules. For who approved, use gitlab_mr_approval_config.

**Parameters:**

- `merge_request_iid` (integer) (required): Merge request internal ID
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_mr_approve

Approve a GitLab merge request. Adds the authenticated user's approval to the merge request's approval list.

**Parameters:**

- `merge_request_iid` (integer) (required): Merge request IID (project-scoped, not 'merge_request_id')
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_mr_cancel_auto_merge

Cancel the 'merge when pipeline succeeds' (auto-merge) setting on a GitLab merge request. Returns the updated merge request details. Requires appropriate permissions; returns 405 if already merged/closed or 406 if auto-merge was not enabled.

**Parameters:**

- `merge_request_iid` (integer) (required): Merge request IID (project-scoped, not 'merge_request_id')
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_mr_changes_get

Get the current file diffs (changes) for a merge request. This is the primary tool for viewing MR changes. Returns old/new paths, diff content, file status (added/deleted/renamed), and file modes. For historical diff versions use gitlab_mr_diff_versions_list. For raw git-apply format use gitlab_mr_raw_diffs.

**Parameters:**

- `merge_request_iid` (integer) (required): Merge request internal ID
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_mr_commits

List all commits in a GitLab merge request. Returns commit ID, title, author, date, and web URL with pagination.

**Parameters:**

- `merge_request_iid` (integer) (required): Merge request IID (project-scoped, not 'merge_request_id')
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_mr_create

Create a new merge request in a GitLab project. Requires source and target branch names. IMPORTANT: if the user does not specify a target branch, retrieve the project default branch via gitlab_project_get and use its default_branch value — do NOT assume 'main'. Supports title, Markdown description, assignee IDs, reviewer IDs, labels, milestone ID, allow_collaboration, and target_project_id (for cross-project/fork MRs). The squash and remove_source_branch options are omitted by default to preserve repository-level settings; only set them when the user explicitly requests it.

**Parameters:**

- `allow_collaboration` (boolean): Allow commits from upstream members who can merge to target branch
- `assignee_id` (integer): Single user ID to assign (use assignee_ids for multiple)
- `assignee_ids` (array of integers): User IDs to assign
- `description` (string): Merge request description (Markdown supported)
- `labels` (string): Comma-separated labels to apply
- `milestone_id` (integer): Milestone ID to associate with the merge request
- `project_id` (string) (required): Project ID or URL-encoded path
- `remove_source_branch` (boolean): Delete source branch after merge. Only set if explicitly requested by the user. Omit to preserve repository defaults
- `reviewer_ids` (array of integers): User IDs to add as reviewers
- `source_branch` (string) (required): Source branch name
- `squash` (boolean): Squash commits on merge. Only set if explicitly requested by the user. Omit to preserve repository defaults
- `target_branch` (string) (required): Target branch name. If not specified by the user use the project default branch from gitlab_project_get (do NOT assume main)
- `target_project_id` (integer): Target project ID (for cross-project/fork MRs)
- `title` (string) (required): Merge request title

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_mr_create_pipeline

Create a new pipeline for a GitLab merge request. Triggers a CI/CD pipeline run on the MR's source branch. Returns the created pipeline details.

**Parameters:**

- `merge_request_iid` (integer) (required): Merge request IID (project-scoped, not 'merge_request_id')
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_mr_create_todo

Create a to-do item on a GitLab merge request for the authenticated user. Adds the MR to the user's to-do list for later follow-up.

**Parameters:**

- `merge_request_iid` (integer) (required): Merge request IID (project-scoped, not 'merge_request_id')
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_mr_delete

Permanently delete a GitLab merge request. This action cannot be undone. Requires at least Maintainer access level.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `merge_request_iid` (integer) (required): Merge request IID to delete (project-scoped, not 'merge_request_id')
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_mr_dependencies_list

List all merge request dependencies (blockers) for a GitLab merge request. Returns the list of MRs that must be merged before this MR can be merged. Requires Premium or Ultimate license.

**Parameters:**

- `merge_request_iid` (integer) (required): Merge request IID (project-scoped, not 'merge_request_id')
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_mr_dependency_create

Create a merge request dependency (blocker). The specified blocking MR must be merged before this MR can be merged. Requires Premium or Ultimate license.

**Parameters:**

- `blocking_merge_request_id` (integer) (required): ID of the merge request that blocks this one
- `merge_request_iid` (integer) (required): Merge request IID (project-scoped, not 'merge_request_id')
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_mr_dependency_delete

Remove a merge request dependency (blocker). The specified blocking MR will no longer prevent this MR from being merged. Requires Premium or Ultimate license.

**Parameters:**

- `blocking_merge_request_id` (integer) (required): ID of the blocking merge request to remove
- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `merge_request_iid` (integer) (required): Merge request IID (project-scoped, not 'merge_request_id')
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_mr_diff_version_get

Get a single merge request diff version with its commits and file diffs. Use the version_id from gitlab_mr_diff_versions_list. Optionally request unified diff format.

**Parameters:**

- `merge_request_iid` (integer) (required): Merge request internal ID
- `project_id` (string) (required): Project ID or URL-encoded path
- `unidiff` (boolean): Return diffs in unified diff format (default: false)
- `version_id` (integer) (required): Diff version ID

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_mr_diff_versions_list

List all diff versions (historical snapshots) of a merge request. Returns version IDs, SHAs, state, and timestamps — NOT the actual diffs. Use gitlab_mr_diff_version_get with a version_id to retrieve diffs for a specific version. For current diffs, use gitlab_mr_changes_get instead.

**Parameters:**

- `merge_request_iid` (integer) (required): Merge request internal ID
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_mr_discussion_create

Start a new threaded discussion on a GitLab merge request. For a general discussion, just provide 'body'. For an inline diff comment, also provide 'position' with base_sha, start_sha, head_sha (get these from gitlab_mr_get diff_refs field), new_path, and old_line/new_line.

**Parameters:**

- `body` (string) (required): Discussion body
- `merge_request_iid` (integer) (required): Merge request IID (project-scoped, not 'merge_request_id')
- `position` (object): Diff position for inline comments. Omit for general MR discussions.
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_mr_discussion_get

Get a single discussion thread from a GitLab merge request by its discussion ID, including all notes in the thread.

**Parameters:**

- `discussion_id` (string) (required): ID of the discussion
- `merge_request_iid` (integer) (required): Merge request IID (project-scoped, not 'merge_request_id')
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_mr_discussion_list

List all discussion threads on a GitLab merge request including inline diff comments and general discussions. Each thread contains its notes and resolution status. Returns paginated results.

**Parameters:**

- `merge_request_iid` (integer) (required): Merge request IID (project-scoped, not 'merge_request_id')
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_mr_discussion_note_delete

Delete a note from a merge request discussion thread. Only the note author or project maintainers can delete notes.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `discussion_id` (string) (required): ID of the discussion containing the note
- `merge_request_iid` (integer) (required): Merge request IID (project-scoped, not 'merge_request_id')
- `note_id` (integer) (required): ID of the note to delete
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_mr_discussion_note_update

Update the body or resolved status of a note within a merge request discussion thread. You can modify the text, change resolution status, or both.

**Parameters:**

- `body` (string): New body text (Markdown). Leave empty to keep current body.
- `discussion_id` (string) (required): ID of the discussion containing the note
- `merge_request_iid` (integer) (required): Merge request IID (project-scoped, not 'merge_request_id')
- `note_id` (integer) (required): ID of the note to update
- `project_id` (string) (required): Project ID or URL-encoded path
- `resolved` (boolean): Set to true to resolve, false to unresolve. Omit to leave unchanged.

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_mr_discussion_reply

Add a reply to an existing discussion thread on a GitLab merge request. The reply appears nested under the original discussion note.

**Parameters:**

- `body` (string) (required): Reply body
- `discussion_id` (string) (required): ID of the discussion to reply to
- `merge_request_iid` (integer) (required): Merge request IID (project-scoped, not 'merge_request_id')
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_mr_discussion_resolve

Resolve or unresolve a discussion thread on a GitLab merge request. Resolved discussions are collapsed in the UI to reduce review noise.

**Parameters:**

- `discussion_id` (string) (required): ID of the discussion to resolve
- `merge_request_iid` (integer) (required): Merge request IID (project-scoped, not 'merge_request_id')
- `project_id` (string) (required): Project ID or URL-encoded path
- `resolved` (boolean) (required): True to resolve, false to unresolve

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_mr_draft_note_create

Create a new draft note (pending review comment) on a GitLab merge request. Supports inline diff comments on specific lines via the position parameter. Draft notes stay private until published with draft_note_publish_all. Prefer this over discussion_create for code reviews to batch all comments into a single notification.

**Parameters:**

- `commit_id` (string): SHA of the commit to comment on
- `in_reply_to_discussion_id` (string): Discussion ID to reply to
- `merge_request_iid` (integer) (required): Merge request internal ID
- `note` (string) (required): Note body text (Markdown)
- `position` (object): Diff position for inline comments on specific lines. Omit for general MR comments.
- `project_id` (string) (required): Project ID or URL-encoded path
- `resolve_discussion` (boolean): Resolve the discussion when published

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_mr_draft_note_delete

Permanently delete a draft note from a GitLab merge request. Only the draft author can delete it.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `merge_request_iid` (integer) (required): Merge request internal ID
- `note_id` (integer) (required): Draft note ID
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_mr_draft_note_get

Get a single draft note from a GitLab merge request by its ID. Returns the note body, author, and associated commit/discussion details.

**Parameters:**

- `merge_request_iid` (integer) (required): Merge request internal ID
- `note_id` (integer) (required): Draft note ID
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_mr_draft_note_list

List all draft notes (pending review comments) on a GitLab merge request. Draft notes are only visible to the author until published. Supports pagination and sorting.

**Parameters:**

- `merge_request_iid` (integer) (required): Merge request internal ID
- `order_by` (string): Order by: id (default)
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `project_id` (string) (required): Project ID or URL-encoded path
- `sort` (string): Sort: asc or desc (default)

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_mr_draft_note_publish

Publish a single draft note on a GitLab merge request, making it visible to all participants. This action cannot be undone.

**Parameters:**

- `merge_request_iid` (integer) (required): Merge request internal ID
- `note_id` (integer) (required): Draft note ID
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_mr_draft_note_publish_all

Publish all pending draft notes on a GitLab merge request at once, making them visible to all participants. This action cannot be undone.

**Parameters:**

- `merge_request_iid` (integer) (required): Merge request internal ID
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_mr_draft_note_update

Update the body text of an existing draft note on a GitLab merge request. Only the draft author can update it.

**Parameters:**

- `merge_request_iid` (integer) (required): Merge request internal ID
- `note` (string): Updated note body text (Markdown)
- `note_id` (integer) (required): Draft note ID
- `position` (object): Updated diff position for inline comments
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_mr_emoji_create

Add an award emoji reaction to a merge request.

**Parameters:**

- `merge_request_iid` (integer) (required): Merge request IID (project-scoped, not 'merge_request_id')
- `name` (string) (required): Emoji name without colons (e.g. thumbsup)
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_mr_emoji_delete

Delete an award emoji from a merge request.

**Parameters:**

- `award_id` (integer) (required): Award emoji ID
- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `merge_request_iid` (integer) (required): Merge request IID (project-scoped, not 'merge_request_id')
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_mr_emoji_get

Get a single award emoji on a merge request.

**Parameters:**

- `award_id` (integer) (required): Award emoji ID
- `merge_request_iid` (integer) (required): Merge request IID (project-scoped, not 'merge_request_id')
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_mr_emoji_list

List all award emoji on a merge request.

**Parameters:**

- `merge_request_iid` (integer) (required): Merge request IID (project-scoped, not 'merge_request_id')
- `page` (integer): Page number for pagination (default 1)
- `per_page` (integer): Number of items per page (default 20, max 100)
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_mr_get

Retrieve detailed information about a GitLab merge request by its IID (project-scoped ID), including title, description, state, source/target branches, author, assignees, reviewers, labels, and pipeline status. See also: gitlab_mr_changes_get, gitlab_mr_discussion_list.

**Parameters:**

- `merge_request_iid` (integer) (required): Merge request IID (project-scoped, not 'merge_request_id')
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_mr_issues_closed

List all issues that would be closed when a GitLab merge request is merged. Returns issue details including IID, title, state, author, and labels with pagination.

**Parameters:**

- `merge_request_iid` (integer) (required): Merge request IID (project-scoped, not 'merge_request_id')
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_mr_label_event_get

Get a single label event for a merge request.

**Parameters:**

- `label_event_id` (integer) (required): Label event ID
- `merge_request_iid` (integer) (required): Merge request internal ID
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_mr_label_event_list

List label events for a merge request. Shows when labels were added or removed.

**Parameters:**

- `merge_request_iid` (integer) (required): Merge request internal ID
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_mr_list

List merge requests in a GitLab project. Supports filtering by state (opened/closed/merged/all), author, assignee, reviewer, labels, milestone, and source/target branch. Returns paginated results.

**Parameters:**

- `author_username` (string): Filter by author username
- `created_after` (string): Return MRs created after date (ISO 8601 format, e.g. 2025-01-01T00:00:00Z)
- `created_before` (string): Return MRs created before date (ISO 8601 format, e.g. 2025-12-31T23:59:59Z)
- `draft` (boolean): Filter by draft status (true=only drafts, false=only non-drafts)
- `iids` (array of integers): Filter by merge request internal IDs
- `labels` (string): Comma-separated label names to filter by
- `milestone` (string): Milestone title to filter by
- `not_labels` (string): Comma-separated label names to exclude
- `order_by` (string): Order by field (created_at, updated_at, title)
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `project_id` (string) (required): Project ID or URL-encoded path
- `scope` (string): Filter by scope (created_by_me, assigned_to_me, all)
- `search` (string): Search in title and description
- `sort` (string): Sort direction (asc, desc)
- `source_branch` (string): Filter by source branch name
- `state` (string): Filter by state (opened, closed, merged, all)
- `target_branch` (string): Filter by target branch name
- `updated_after` (string): Return MRs updated after date (ISO 8601 format, e.g. 2025-01-01T00:00:00Z)
- `updated_before` (string): Return MRs updated before date (ISO 8601 format, e.g. 2025-12-31T23:59:59Z)

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_mr_list_global

List merge requests across all projects visible to the authenticated user. Supports filtering by state (opened/closed/merged/all), author, reviewer, labels, milestone, draft status, and date ranges. Returns paginated results.

**Parameters:**

- `author_username` (string): Filter by author username
- `created_after` (string): Return MRs created after date (ISO 8601)
- `created_before` (string): Return MRs created before date (ISO 8601)
- `draft` (boolean): Filter by draft status (true=only drafts, false=only non-drafts)
- `labels` (string): Comma-separated label names to filter by
- `milestone` (string): Milestone title to filter by
- `not_labels` (string): Comma-separated label names to exclude
- `order_by` (string): Order by field (created_at, updated_at)
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `reviewer_username` (string): Filter by reviewer username
- `scope` (string): Filter by scope (created_by_me, assigned_to_me, all)
- `search` (string): Search in title and description
- `sort` (string): Sort direction (asc, desc)
- `source_branch` (string): Filter by source branch name
- `state` (string): Filter by state (opened, closed, merged, all)
- `target_branch` (string): Filter by target branch name
- `updated_after` (string): Return MRs updated after date (ISO 8601)
- `updated_before` (string): Return MRs updated before date (ISO 8601)

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_mr_list_group

List merge requests in a GitLab group. Supports filtering by state (opened/closed/merged/all), author, reviewer, labels, milestone, draft status, and date ranges. Returns paginated results.

**Parameters:**

- `author_username` (string): Filter by author username
- `created_after` (string): Return MRs created after date (ISO 8601)
- `created_before` (string): Return MRs created before date (ISO 8601)
- `draft` (boolean): Filter by draft status (true=only drafts, false=only non-drafts)
- `group_id` (string) (required): Group ID or URL-encoded path
- `labels` (string): Comma-separated label names to filter by
- `milestone` (string): Milestone title to filter by
- `not_labels` (string): Comma-separated label names to exclude
- `order_by` (string): Order by field (created_at, updated_at)
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `reviewer_username` (string): Filter by reviewer username
- `scope` (string): Filter by scope (created_by_me, assigned_to_me, all)
- `search` (string): Search in title and description
- `sort` (string): Sort direction (asc, desc)
- `source_branch` (string): Filter by source branch name
- `state` (string): Filter by state (opened, closed, merged, all)
- `target_branch` (string): Filter by target branch name
- `updated_after` (string): Return MRs updated after date (ISO 8601)
- `updated_before` (string): Return MRs updated before date (ISO 8601)

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_mr_merge

Merge an accepted GitLab merge request into its target branch. Supports optional squash commits, custom merge commit message, and automatic source branch deletion after merge. The server automatically detects enforced project settings (squash_on_merge, force_remove_source_branch) and applies them — you do NOT need to set squash or should_remove_source_branch unless the user explicitly requests a specific value.

**Parameters:**

- `auto_merge` (boolean): Set true only when the user asks to merge when the pipeline succeeds or enable auto-merge.
- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `merge_commit_message` (string): Custom merge commit message
- `merge_request_iid` (integer) (required): Merge request IID (project-scoped, not 'merge_request_id')
- `project_id` (string) (required): Project ID or URL-encoded path
- `sha` (string): Head SHA of the merge request — merge only if HEAD matches (safety check)
- `should_remove_source_branch` (boolean): Delete source branch after merge. Only set if explicitly requested by the user. Omit to preserve repository defaults
- `squash` (boolean): Squash commits on merge. Only set if explicitly requested by the user. Omit to preserve repository defaults
- `squash_commit_message` (string): Custom squash commit message (used when squash is enabled)

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_mr_milestone_event_get

Get a single milestone event for a merge request.

**Parameters:**

- `merge_request_iid` (integer) (required): Merge request internal ID
- `milestone_event_id` (integer) (required): Milestone event ID
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_mr_milestone_event_list

List milestone events for a merge request. Shows when milestones were added or removed.

**Parameters:**

- `merge_request_iid` (integer) (required): Merge request internal ID
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_mr_note_create

Add a comment (note) to a GitLab merge request. The comment appears in the merge request's activity timeline as a top-level note.

**Parameters:**

- `body` (string) (required): Comment body (Markdown supported)
- `merge_request_iid` (integer) (required): Merge request IID (project-scoped, not 'merge_request_id')
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_mr_note_delete

Permanently delete a comment from a GitLab merge request. Only the note author or a project maintainer can delete a note.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `merge_request_iid` (integer) (required): Merge request IID (project-scoped, not 'merge_request_id')
- `note_id` (integer) (required): ID of the note to delete
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_mr_note_emoji_create

Add an award emoji reaction to a merge request note.

**Parameters:**

- `merge_request_iid` (integer) (required): Merge request IID (project-scoped, not 'merge_request_id')
- `name` (string) (required): Emoji name without colons (e.g. thumbsup)
- `note_id` (integer) (required): Note ID
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_mr_note_emoji_delete

Delete an award emoji from a merge request note.

**Parameters:**

- `award_id` (integer) (required): Award emoji ID
- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `merge_request_iid` (integer) (required): Merge request IID (project-scoped, not 'merge_request_id')
- `note_id` (integer) (required): Note ID
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_mr_note_emoji_get

Get a single award emoji on a merge request note.

**Parameters:**

- `award_id` (integer) (required): Award emoji ID
- `merge_request_iid` (integer) (required): Merge request IID (project-scoped, not 'merge_request_id')
- `note_id` (integer) (required): Note ID
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_mr_note_emoji_list

List all award emoji on a merge request note.

**Parameters:**

- `merge_request_iid` (integer) (required): Merge request IID (project-scoped, not 'merge_request_id')
- `note_id` (integer) (required): Note ID
- `page` (integer): Page number for pagination (default 1)
- `per_page` (integer): Number of items per page (default 20, max 100)
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_mr_note_get

Get a single comment (note) from a GitLab merge request by its note ID, including author, timestamps, resolution status, and body.

**Parameters:**

- `merge_request_iid` (integer) (required): Merge request IID (project-scoped, not 'merge_request_id')
- `note_id` (integer) (required): ID of the note to retrieve
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_mr_note_update

Edit the body text of an existing comment on a GitLab merge request. Only the note author or a project maintainer can update a note.

**Parameters:**

- `body` (string) (required): Updated comment body
- `merge_request_iid` (integer) (required): Merge request IID (project-scoped, not 'merge_request_id')
- `note_id` (integer) (required): ID of the note to update
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_mr_notes_list

List all comments (notes) on a GitLab merge request ordered by creation date. Includes both user comments and system-generated notes (status changes, label updates).

**Parameters:**

- `merge_request_iid` (integer) (required): Merge request IID (project-scoped, not 'merge_request_id')
- `order_by` (string): Order by field (created_at, updated_at)
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `project_id` (string) (required): Project ID or URL-encoded path
- `sort` (string): Sort direction (asc, desc)

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_mr_participants

List all participants (users who have interacted via comments, approvals, or commits) in a GitLab merge request. This includes anyone who participated, not just assigned reviewers. For assigned reviewers with review state, use gitlab_mr_reviewers instead.

**Parameters:**

- `merge_request_iid` (integer) (required): Merge request IID (project-scoped, not 'merge_request_id')
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_mr_pipelines

List all pipelines associated with a GitLab merge request. Returns pipeline ID, status, source, ref, SHA, and web URL.

**Parameters:**

- `merge_request_iid` (integer) (required): Merge request IID (project-scoped, not 'merge_request_id')
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_mr_raw_diffs

Get the raw unified-diff output for a merge request in plain-text git-apply format. Use this for programmatic diff analysis or patch application. For human-readable structured diffs, use gitlab_mr_changes_get instead.

**Parameters:**

- `merge_request_iid` (integer) (required): Merge request internal ID
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_mr_rebase

Rebase a merge request's source branch against its target branch. Optionally skip triggering CI pipeline after rebase. Returns whether the rebase is in progress.

**Parameters:**

- `merge_request_iid` (integer) (required): Merge request IID to rebase (project-scoped, not 'merge_request_id')
- `project_id` (string) (required): Project ID or URL-encoded path
- `skip_ci` (boolean): Skip triggering CI pipeline after rebase

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_mr_related_issues

List all issues related to a GitLab merge request (mentioned or linked). Returns issue details including IID, title, state, author, and labels with pagination.

**Parameters:**

- `merge_request_iid` (integer) (required): Merge request IID (project-scoped, not 'merge_request_id')
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_mr_reset_spent_time

Reset the total spent time for a GitLab merge request to zero. Returns updated time stats.

**Parameters:**

- `merge_request_iid` (integer) (required): Merge request IID (project-scoped, not 'merge_request_id')
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_mr_reset_time_estimate

Reset the time estimate for a GitLab merge request to zero. Returns updated time stats.

**Parameters:**

- `merge_request_iid` (integer) (required): Merge request IID (project-scoped, not 'merge_request_id')
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_mr_reviewers

List the explicitly assigned reviewers of a GitLab merge request with their review state (approved/reviewed/unreviewed) and assignment date. For all users who interacted (comments, commits, approvals), use gitlab_mr_participants instead.

**Parameters:**

- `merge_request_iid` (integer) (required): Merge request IID (project-scoped, not 'merge_request_id')
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_mr_set_time_estimate

Set the time estimate for a GitLab merge request using a human-readable duration string (e.g. '3h30m', '1w2d'). Returns updated time stats.

**Parameters:**

- `duration` (string) (required): Human-readable duration (e.g. 3h30m, 1w2d)
- `merge_request_iid` (integer) (required): Merge request IID (project-scoped, not 'merge_request_id')
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_mr_state_event_get

Get a single state event for a merge request.

**Parameters:**

- `merge_request_iid` (integer) (required): Merge request internal ID
- `project_id` (string) (required): Project ID or URL-encoded path
- `state_event_id` (integer) (required): State event ID

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_mr_state_event_list

List state events for a merge request. Shows when the MR was opened, closed, merged, or reopened.

**Parameters:**

- `merge_request_iid` (integer) (required): Merge request internal ID
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_mr_subscribe

Subscribe to a GitLab merge request to receive notifications. Returns the updated MR. Returns 304 if already subscribed.

**Parameters:**

- `merge_request_iid` (integer) (required): Merge request IID (project-scoped, not 'merge_request_id')
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_mr_time_stats

Get time tracking statistics for a GitLab merge request including estimated time and total time spent in both human-readable and seconds format.

**Parameters:**

- `merge_request_iid` (integer) (required): Merge request IID (project-scoped, not 'merge_request_id')
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_mr_unapprove

Remove the authenticated user's approval from a GitLab merge request.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `merge_request_iid` (integer) (required): Merge request IID (project-scoped, not 'merge_request_id')
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_mr_unsubscribe

Unsubscribe from a GitLab merge request to stop receiving notifications. Returns the updated MR. Returns 304 if not subscribed.

**Parameters:**

- `merge_request_iid` (integer) (required): Merge request IID (project-scoped, not 'merge_request_id')
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_mr_update

Update a GitLab merge request's title, description, target branch, assignees, reviewers, labels (replace, add, or remove), milestone, discussion_locked, allow_collaboration, or state event (close/reopen). The squash and remove_source_branch options are omitted by default to preserve repository-level settings; only set them when explicitly requested. Only specified fields are changed.

**Parameters:**

- `add_labels` (string): Comma-separated label names to add without removing existing
- `allow_collaboration` (boolean): Allow commits from upstream members who can merge to target branch
- `assignee_id` (integer): Single user ID to assign (use assignee_ids for multiple)
- `assignee_ids` (array of integers): User IDs to assign as merge request assignees
- `description` (string): New description
- `discussion_locked` (boolean): Lock discussions on the merge request
- `labels` (string): Comma-separated label names to replace all labels on the merge request
- `merge_request_iid` (integer) (required): Merge request IID (project-scoped, not 'merge_request_id')
- `milestone_id` (integer): Milestone ID (0 to unset)
- `project_id` (string) (required): Project ID or URL-encoded path
- `remove_labels` (string): Comma-separated label names to remove
- `remove_source_branch` (boolean): Delete source branch after merge. Only set if explicitly requested
- `reviewer_ids` (array of integers): User IDs to add as reviewers
- `squash` (boolean): Squash commits on merge. Only set if explicitly requested
- `state_event` (string): State transition (close, reopen)
- `target_branch` (string): New target branch
- `title` (string): New title

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

### namespace (4 tools)

#### gitlab_namespace_exists

Check whether a namespace path exists (is taken). Returns availability and suggested alternatives if the path is taken.

**Parameters:**

- `id` (string) (required): Namespace path to check for existence
- `parent_id` (integer): Parent namespace ID to scope the check

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_namespace_get

Get details of a single namespace by ID or path.

**Parameters:**

- `id` (string) (required): Namespace ID or path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_namespace_list

List all namespaces visible to the authenticated user. Supports filtering by search, owned-only, top-level-only, and pagination.

**Parameters:**

- `owned_only` (boolean): If true return only namespaces owned by the authenticated user
- `page` (integer): Page number for pagination (default 1)
- `per_page` (integer): Number of items per page (default 20, max 100)
- `search` (string): Filter namespaces by search term
- `top_level_only` (boolean): If true return only top-level namespaces

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_namespace_search

Search namespaces by query string. Returns matching namespaces with pagination.

**Parameters:**

- `query` (string) (required): Search query string for namespaces

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

### notification (6 tools)

#### gitlab_notification_global_get

Get global notification settings for the authenticated user.

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_notification_global_update

Update global notification settings for the authenticated user.

**Parameters:**

- `close_issue` (boolean): Notify on issue close
- `close_merge_request` (boolean): Notify on MR close
- `failed_pipeline` (boolean): Notify on pipeline failure
- `fixed_pipeline` (boolean): Notify on pipeline fix
- `issue_due` (boolean): Notify on issue due date
- `level` (string): Notification level: disabled, participating, watch, global, mention, custom
- `merge_merge_request` (boolean): Notify on MR merge
- `merge_when_pipeline_succeeds` (boolean): Notify on merge when pipeline succeeds
- `moved_project` (boolean): Notify on project move
- `new_epic` (boolean): Notify on new epic
- `new_issue` (boolean): Notify on new issue
- `new_merge_request` (boolean): Notify on new MR
- `new_note` (boolean): Notify on new note
- `notification_email` (string): Email address for notifications
- `push_to_merge_request` (boolean): Notify on push to MR
- `reassign_issue` (boolean): Notify on issue reassign
- `reassign_merge_request` (boolean): Notify on MR reassign
- `reopen_issue` (boolean): Notify on issue reopen
- `reopen_merge_request` (boolean): Notify on MR reopen
- `success_pipeline` (boolean): Notify on pipeline success

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_notification_group_get

Get notification settings for a specific group.

**Parameters:**

- `group_id` (string) (required): Group ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_notification_group_update

Update notification settings for a specific group.

**Parameters:**

- `close_issue` (boolean): Notify on issue close
- `close_merge_request` (boolean): Notify on MR close
- `failed_pipeline` (boolean): Notify on pipeline failure
- `fixed_pipeline` (boolean): Notify on pipeline fix
- `group_id` (string) (required): Group ID or URL-encoded path
- `issue_due` (boolean): Notify on issue due date
- `level` (string): Notification level: disabled, participating, watch, global, mention, custom
- `merge_merge_request` (boolean): Notify on MR merge
- `merge_when_pipeline_succeeds` (boolean): Notify on merge when pipeline succeeds
- `moved_project` (boolean): Notify on project move
- `new_epic` (boolean): Notify on new epic
- `new_issue` (boolean): Notify on new issue
- `new_merge_request` (boolean): Notify on new MR
- `new_note` (boolean): Notify on new note
- `notification_email` (string): Email address for notifications
- `push_to_merge_request` (boolean): Notify on push to MR
- `reassign_issue` (boolean): Notify on issue reassign
- `reassign_merge_request` (boolean): Notify on MR reassign
- `reopen_issue` (boolean): Notify on issue reopen
- `reopen_merge_request` (boolean): Notify on MR reopen
- `success_pipeline` (boolean): Notify on pipeline success

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_notification_project_get

Get notification settings for a specific project.

**Parameters:**

- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_notification_project_update

Update notification settings for a specific project.

**Parameters:**

- `close_issue` (boolean): Notify on issue close
- `close_merge_request` (boolean): Notify on MR close
- `failed_pipeline` (boolean): Notify on pipeline failure
- `fixed_pipeline` (boolean): Notify on pipeline fix
- `issue_due` (boolean): Notify on issue due date
- `level` (string): Notification level: disabled, participating, watch, global, mention, custom
- `merge_merge_request` (boolean): Notify on MR merge
- `merge_when_pipeline_succeeds` (boolean): Notify on merge when pipeline succeeds
- `moved_project` (boolean): Notify on project move
- `new_epic` (boolean): Notify on new epic
- `new_issue` (boolean): Notify on new issue
- `new_merge_request` (boolean): Notify on new MR
- `new_note` (boolean): Notify on new note
- `notification_email` (string): Email address for notifications
- `project_id` (string) (required): Project ID or URL-encoded path
- `push_to_merge_request` (boolean): Notify on push to MR
- `reassign_issue` (boolean): Notify on issue reassign
- `reassign_merge_request` (boolean): Notify on MR reassign
- `reopen_issue` (boolean): Notify on issue reopen
- `reopen_merge_request` (boolean): Notify on MR reopen
- `success_pipeline` (boolean): Notify on pipeline success

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

### orbit (6 tools)

#### gitlab_orbit_dsl

Retrieve the experimental GitLab Orbit query DSL schema or LLM grammar.

**Parameters:**

- `response_format` (string): Response format to request: raw or llm. Defaults to raw.

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_orbit_graph_status

Inspect experimental GitLab Orbit graph indexing status for one scope.

**Parameters:**

- `full_path` (string): Full path of a group or project to inspect, for example gitlab-org/gitlab. Set exactly one scope field.
- `namespace_id` (integer): Namespace/group ID to inspect. Set exactly one of namespace_id, project_id, or full_path.
- `project_id` (integer): Project ID to inspect. Set exactly one of namespace_id, project_id, or full_path.
- `response_format` (string): Response format to request: raw or llm. Defaults to raw.

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_orbit_query

Execute a read-only experimental GitLab Orbit Knowledge Graph query.

**Parameters:**

- `query` (object) (required): Orbit query DSL JSON object
- `response_format` (string): Response format to request: raw or llm. Defaults to raw.

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_orbit_schema

Inspect the experimental GitLab Orbit Knowledge Graph ontology.

**Parameters:**

- `expand` (array of strings): Node names to expand with full properties and relationships.
- `format` (string): Schema response format to request: raw or llm. Defaults to raw.
- `response_format` (string): Alias for format, accepted for compatibility with GitLab's public Orbit API documentation.

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_orbit_status

Inspect experimental GitLab Orbit cluster health on GitLab.com.

**Parameters:**

- `response_format` (string): Response format to request: raw or llm. Defaults to raw.

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_orbit_tools

List the experimental GitLab Orbit MCP tool manifest and parameter schemas.

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

### package (8 tools)

#### gitlab_package_delete

Delete a package and all its files from the GitLab Package Registry. This action cannot be undone.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `package_id` (string) (required): Package ID to delete
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_package_download

Download a file from the GitLab Generic Package Registry and save it to a local path. Returns the output path, file size, and SHA256 checksum.

**Parameters:**

- `file_name` (string) (required): File name to download
- `output_path` (string) (required): Absolute path where the file will be saved on the local filesystem
- `package_name` (string) (required): Package name
- `package_version` (string) (required): Package version
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_package_file_delete

Delete a single file from a package in the GitLab Package Registry. This action cannot be undone.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `package_file_id` (string) (required): Package file ID to delete
- `package_id` (string) (required): Package ID
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_package_file_list

List files within a specific package. Returns file ID, name, size, and SHA256 for each file with pagination.

**Parameters:**

- `package_id` (string) (required): Package ID
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_package_list

List packages in a GitLab project. Can filter by name, version, type, and supports pagination and sorting.

**Parameters:**

- `include_versionless` (boolean): Include versionless packages
- `order_by` (string): Order by package registry field: created_at, name, version, or type.
- `package_name` (string): Filter by package name
- `package_type` (string): Filter by type (generic, npm, maven, etc.)
- `package_version` (string): Filter by package version
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `project_id` (string) (required): Project ID or URL-encoded path
- `sort` (string): Sort direction: asc or desc
- `status` (string): Filter by status: default, hidden, processing, error, pending_destruction, or deprecated.

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_package_publish

Upload a single file to the GitLab Generic Package Registry. Provide either file_path (absolute local path) or content_base64 (base64-encoded content), not both. Returns the package file ID, size, SHA256, and the real download URL in the 'url' field. Use that 'url' value with gitlab_release_link_create to attach the package to a release — do NOT construct package URLs manually. To upload multiple files at once, use gitlab_package_publish_directory instead. To publish and link to a release in one step, use gitlab_package_publish_and_link.

**Parameters:**

- `content_base64` (string): Base64-encoded file content. Only one should be provided.
- `file_name` (string) (required): Name of the file within the package
- `file_path` (string): Absolute path to a local file. Alternative to content_base64. Only one of file_path or content_base64 should be provided.
- `package_name` (string) (required): Package name (alphanumeric, dots, dashes, underscores)
- `package_version` (string) (required): Package version (e.g. 1.0.0)
- `project_id` (string) (required): Project ID or URL-encoded path
- `status` (string): Package status: default or hidden

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_package_publish_and_link

Upload a file to the Generic Package Registry and create a release asset link pointing to it in one step (recommended over separate publish + link calls). Provide either file_path or content_base64 for the file content. The release identified by tag_name must already exist. Automatically uses the real download URL — no manual URL construction needed.

**Parameters:**

- `content_base64` (string): Base64-encoded file content. Alternative to file_path.
- `file_name` (string) (required): Name of the file within the package
- `file_path` (string): Absolute path to a local file. Alternative to content_base64.
- `link_name` (string): Display name of the release link. Defaults to file_name if omitted. MUST be the exact filename — never add descriptive suffixes.
- `link_type` (string): Type of the release link: package, runbook, image, or other. Defaults to package.
- `package_name` (string) (required): Package name (alphanumeric, dots, dashes, underscores)
- `package_version` (string) (required): Package version (e.g. 1.0.0)
- `project_id` (string) (required): Project ID or URL-encoded path
- `status` (string): Package status: default or hidden
- `tag_name` (string) (required): Tag name of the release to link the package file to

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_package_publish_directory

Batch-upload all matching files from a local directory to the Generic Package Registry. Walks the directory (non-recursive), filters by an optional glob pattern (e.g. *.tar.gz, *.exe), and publishes each file. Ideal for uploading release binaries or build artifacts in bulk. Returns the list of published files with checksums and URLs.

**Parameters:**

- `directory_path` (string) (required): Absolute path to a local directory whose files will be published
- `include_pattern` (string): Single glob pattern to filter files within the directory (e.g. *.txt or *.tar.gz). If omitted, all regular files are included. Do not pass comma-separated filenames.
- `package_name` (string) (required): Package name (alphanumeric, dots, dashes, underscores)
- `package_version` (string) (required): Package version (e.g. 1.0.0)
- `project_id` (string) (required): Project ID or URL-encoded path
- `status` (string): Package status: default or hidden

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

### pages (9 tools)

#### gitlab_pages_domain_create

Create a new Pages domain for a project. Optionally configure SSL certificate.

**Parameters:**

- `auto_ssl_enabled` (boolean): Enable automatic SSL certificate provisioning
- `certificate` (string): PEM-encoded SSL certificate
- `domain` (string) (required): Custom domain name (e.g. example.com)
- `key` (string): PEM-encoded private key for the certificate
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_pages_domain_delete

Delete a Pages domain from a project.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `domain` (string) (required): The Pages domain name to delete
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_pages_domain_get

Get a single Pages domain for a project, including certificate details.

**Parameters:**

- `domain` (string) (required): The Pages domain name
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_pages_domain_list

List Pages domains for a specific project. Supports pagination.

**Parameters:**

- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_pages_domain_list_all

List all Pages domains across all projects accessible to the authenticated user.

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_pages_domain_update

Update an existing Pages domain for a project. Can update SSL settings.

**Parameters:**

- `auto_ssl_enabled` (boolean): Enable automatic SSL certificate provisioning
- `certificate` (string): PEM-encoded SSL certificate
- `domain` (string) (required): The Pages domain name to update
- `key` (string): PEM-encoded private key for the certificate
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_pages_get

Get Pages settings for a project. Returns URL, unique domain status, HTTPS enforcement, deployments, and primary domain.

**Parameters:**

- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_pages_unpublish

Unpublish Pages for a project. Removes all published Pages content.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_pages_update

Update Pages settings for a project. Can configure unique domain, HTTPS enforcement, and primary domain.

**Parameters:**

- `pages_https_only` (boolean): Enforce HTTPS for Pages
- `pages_primary_domain` (string): Primary domain for Pages
- `pages_unique_domain_enabled` (boolean): Enable unique domain for Pages
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

### patch (1 tools)

#### gitlab_patch_job_token_access_settings

Update the CI/CD job token access settings for a GitLab project.

**Parameters:**

- `enabled` (boolean) (required): Enable or disable the CI/CD job token scope
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

### personal (6 tools)

#### gitlab_personal_access_token_get

Get a personal access token by ID. Use token_id=0 to retrieve the current token used for authentication.

**Parameters:**

- `token_id` (integer) (required): Access token ID (required, use 0 for current token)

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_personal_access_token_list

List personal access tokens. Filter by state, search by name, or filter by user ID (admin only).

**Parameters:**

- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `search` (string): Search by token name
- `state` (string): Token state filter: active, inactive
- `user_id` (integer): Filter by user ID (admin only)

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_personal_access_token_revoke

Revoke a personal access token by ID. This action cannot be undone.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `token_id` (integer) (required): Access token ID to revoke

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_personal_access_token_revoke_self

Revoke the personal access token used for the current request. This action cannot be undone.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_personal_access_token_rotate

Rotate a personal access token, generating a new token value. Optionally set a new expiry date.

**Parameters:**

- `expires_at` (string): New expiry date in YYYY-MM-DD format
- `token_id` (integer) (required): Access token ID

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_personal_access_token_rotate_self

Rotate the personal access token used for the current request. Returns the new token value.

**Parameters:**

- `expires_at` (string): New expiry date in YYYY-MM-DD format

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

### pipeline (30 tools)

#### gitlab_pipeline_cancel

Cancel a running pipeline in a GitLab project. Returns the updated pipeline details with canceled status.

**Parameters:**

- `pipeline_id` (integer) (required): Pipeline ID to act on
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_pipeline_create

Create a new pipeline for a branch or tag. Optionally pass variables (key/value pairs with type env_var or file). Returns: id, iid, status, source, ref, sha, web_url, duration, coverage, timestamps. See also: gitlab_pipeline_get, gitlab_job_list.

**Parameters:**

- `project_id` (string) (required): Project ID or URL-encoded path
- `ref` (string) (required): Branch or tag name to run the pipeline for
- `variables` (array of objects): Pipeline variables to set

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_pipeline_delete

Permanently delete a pipeline and all its jobs. This action cannot be undone. Requires at least Maintainer access level.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `pipeline_id` (integer) (required): Pipeline ID to delete
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_pipeline_get

Retrieve detailed information about a specific pipeline in a GitLab project. Returns pipeline ID, status, source, ref, SHA, duration, coverage, user, timestamps, and YAML errors. See also: gitlab_job_list, gitlab_pipeline_test_report.

**Parameters:**

- `pipeline_id` (integer) (required): Pipeline ID to retrieve
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_pipeline_latest

Get the latest pipeline for a project, optionally filtered by branch/tag ref. Returns full pipeline details.

**Parameters:**

- `project_id` (string) (required): Project ID or URL-encoded path
- `ref` (string): Branch or tag name to filter by (defaults to the default branch)

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_pipeline_list

List pipelines for a GitLab project. Supports filtering by status (success, failed, running, pending, canceled), scope (running, pending, finished, branches, tags), source (push, web, schedule, merge_request_event), ref (branch/tag), SHA, and username. Returns pipeline ID, status, source, ref, web URL, and timestamps with pagination.

**Parameters:**

- `created_after` (string): Return pipelines created after date (ISO 8601 format, e.g. 2025-01-01T00:00:00Z)
- `created_before` (string): Return pipelines created before date (ISO 8601 format, e.g. 2025-12-31T23:59:59Z)
- `name` (string): Filter by pipeline name
- `order_by` (string): Order by field (id, status, ref, updated_at, user_id)
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `project_id` (string) (required): Project ID or URL-encoded path
- `ref` (string): Filter by branch or tag name
- `scope` (string): Filter by scope (running, pending, finished, branches, tags)
- `sha` (string): Filter by commit SHA
- `sort` (string): Sort direction (asc, desc)
- `source` (string): Filter by source (push, web, trigger, schedule, api, external, pipeline, chat, merge_request_event)
- `status` (string): Filter by status (created, waiting_for_resource, preparing, pending, running, success, failed, canceled, skipped, manual, scheduled)
- `updated_after` (string): Return pipelines updated after date (ISO 8601 format, e.g. 2025-01-01T00:00:00Z)
- `updated_before` (string): Return pipelines updated before date (ISO 8601 format, e.g. 2025-12-31T23:59:59Z)
- `username` (string): Filter by username that triggered the pipeline
- `yaml_errors` (boolean): Return only pipelines with YAML errors

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_pipeline_retry

Retry only the failed jobs in a pipeline (successful jobs are not re-run). Returns the updated pipeline details. To retry a specific job, use gitlab_job_retry instead.

**Parameters:**

- `pipeline_id` (integer) (required): Pipeline ID to act on
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_pipeline_schedule_create

Create a new pipeline schedule in a GitLab project. Requires description, ref (branch/tag), and cron expression. Optionally set timezone and active state. Returns: id, description, ref, cron, cron_timezone, next_run_at, active, owner_name. See also: gitlab_pipeline_schedule_get.

**Parameters:**

- `active` (boolean): Whether the schedule is active (default: true)
- `cron` (string) (required): Cron expression (e.g. 0 1 * * *)
- `cron_timezone` (string): Cron timezone (e.g. UTC or America/New_York)
- `description` (string) (required): Schedule description
- `project_id` (string) (required): Project ID or URL-encoded path
- `ref` (string) (required): Branch or tag to run the pipeline on

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_pipeline_schedule_create_variable

Create a new variable for a pipeline schedule. Variables are passed to pipelines triggered by the schedule. Supports env_var (default) and file types. Returns: key, value, variable_type. See also: gitlab_pipeline_schedule_get.

**Parameters:**

- `key` (string) (required): Variable key
- `project_id` (string) (required): Project ID or URL-encoded path
- `schedule_id` (integer) (required): Pipeline schedule ID
- `value` (string) (required): Variable value. Required when creating a schedule variable
- `variable_type` (string): Variable type: env_var (default) or file

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_pipeline_schedule_delete

Permanently delete a pipeline schedule from a GitLab project. This action cannot be undone.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `project_id` (string) (required): Project ID or URL-encoded path
- `schedule_id` (integer) (required): Pipeline schedule ID

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_pipeline_schedule_delete_variable

Delete a pipeline schedule variable by key. This action cannot be undone.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `key` (string) (required): Variable key to delete
- `project_id` (string) (required): Project ID or URL-encoded path
- `schedule_id` (integer) (required): Pipeline schedule ID

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_pipeline_schedule_edit_variable

Edit an existing pipeline schedule variable by key. Updates the value and optionally the variable type. Returns: key, value, variable_type. See also: gitlab_pipeline_schedule_get.

**Parameters:**

- `key` (string) (required): Variable key to edit
- `project_id` (string) (required): Project ID or URL-encoded path
- `schedule_id` (integer) (required): Pipeline schedule ID
- `value` (string) (required): New variable value. Required when editing a schedule variable
- `variable_type` (string): Variable type: env_var or file

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_pipeline_schedule_get

Get details of a specific pipeline schedule in a GitLab project by its ID. Returns description, ref, cron expression, timezone, active state, owner, and timestamps.

**Parameters:**

- `project_id` (string) (required): Project ID or URL-encoded path
- `schedule_id` (integer) (required): Pipeline schedule ID

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_pipeline_schedule_list

List pipeline schedules for a GitLab project. Supports filtering by scope (active, inactive). Returns paginated results with schedule details.

**Parameters:**

- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `project_id` (string) (required): Project ID or URL-encoded path
- `scope` (string): Filter by scope: active or inactive

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_pipeline_schedule_list_triggered_pipelines

List all pipelines that were triggered by a specific pipeline schedule. Returns paginated results with pipeline ID, ref, status, and source.

**Parameters:**

- `page` (integer): Page number for pagination
- `per_page` (integer): Items per page (max 100)
- `project_id` (string) (required): Project ID or URL-encoded path
- `schedule_id` (integer) (required): Pipeline schedule ID

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_pipeline_schedule_run

Trigger an immediate run of a pipeline schedule. Executes the schedule now regardless of its cron timing. Returns the updated schedule details.

**Parameters:**

- `project_id` (string) (required): Project ID or URL-encoded path
- `schedule_id` (integer) (required): Pipeline schedule ID

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_pipeline_schedule_take_ownership

Take ownership of a pipeline schedule, making the current user the owner. Returns the updated schedule details.

**Parameters:**

- `project_id` (string) (required): Project ID or URL-encoded path
- `schedule_id` (integer) (required): Pipeline schedule ID

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_pipeline_schedule_update

Update an existing pipeline schedule in a GitLab project. All fields are optional: description, ref, cron, timezone, active state. Returns: id, description, ref, cron, cron_timezone, next_run_at, active, owner_name. See also: gitlab_pipeline_schedule_get.

**Parameters:**

- `active` (boolean): Enable or disable the schedule
- `cron` (string): Updated cron expression
- `cron_timezone` (string): Updated cron timezone
- `description` (string): Updated description
- `project_id` (string) (required): Project ID or URL-encoded path
- `ref` (string): Updated branch or tag
- `schedule_id` (integer) (required): Pipeline schedule ID

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_pipeline_security_summary

Get security report summary for a pipeline (requires Ultimate/Premium). Returns: scanner-level breakdown (SAST, DAST, dependency scanning, container scanning, secret detection, coverage fuzzing, API fuzzing, cluster image scanning) with vulnerability counts. See also: gitlab_vulnerability_severity_count, gitlab_list_vulnerabilities, gitlab_list_security_findings.

**Parameters:**

- `pipeline_iid` (string) (required): Pipeline IID (internal ID within the project)
- `project_path` (string) (required): Full path of the project (e.g. my-group/my-project)

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_pipeline_test_report

Get the full test report for a pipeline. Returns total/passed/failed/skipped/error counts and per-suite breakdowns.

**Parameters:**

- `pipeline_id` (integer) (required): Pipeline ID to retrieve
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_pipeline_test_report_summary

Get a summary of the test report for a pipeline. Returns aggregated counts and per-suite summaries with build IDs.

**Parameters:**

- `pipeline_id` (integer) (required): Pipeline ID to retrieve
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_pipeline_trigger_create

Create a new pipeline trigger token

**Parameters:**

- `description` (string) (required): Trigger token description
- `project_id` (string) (required): Project ID or path

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_pipeline_trigger_delete

Delete a pipeline trigger token

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `project_id` (string) (required): Project ID or path
- `trigger_id` (integer) (required): Pipeline trigger ID

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_pipeline_trigger_get

Get a single pipeline trigger token

**Parameters:**

- `project_id` (string) (required): Project ID or path
- `trigger_id` (integer) (required): Pipeline trigger ID

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_pipeline_trigger_list

List pipeline trigger tokens for a project

**Parameters:**

- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `project_id` (string) (required): Project ID or path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_pipeline_trigger_run

Trigger a pipeline using a trigger token

**Parameters:**

- `project_id` (string) (required): Project ID or path
- `ref` (string) (required): Branch or tag name to run pipeline on
- `token` (string) (required): Pipeline trigger token
- `variables` (string): JSON object of key-value variable pairs

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_pipeline_trigger_update

Update a pipeline trigger token description

**Parameters:**

- `description` (string): New trigger token description
- `project_id` (string) (required): Project ID or path
- `trigger_id` (integer) (required): Pipeline trigger ID

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_pipeline_update_metadata

Update the display name of an existing pipeline. This is the only field that can be changed — status, ref, variables, and other fields cannot be updated. Returns: id, iid, status, source, ref, sha, web_url, duration. See also: gitlab_pipeline_get.

**Parameters:**

- `name` (string) (required): New pipeline name
- `pipeline_id` (integer) (required): Pipeline ID to update
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_pipeline_variables

Get the variables for a specific pipeline. Returns variable keys, values, and types.

**Parameters:**

- `pipeline_id` (integer) (required): Pipeline ID to retrieve
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_pipeline_wait

Wait for a pipeline to reach a terminal state (success, failed, canceled, skipped, manual). Polls the pipeline status at a configurable interval and sends progress notifications. Returns the final pipeline details when done or when the timeout is reached.

**Parameters:**

- `fail_on_error` (boolean): Return isError when pipeline ends in failed/canceled status (default true)
- `interval_seconds` (integer): Polling interval in seconds (5-60, default 10)
- `pipeline_id` (integer) (required): Pipeline ID returned by pipeline.list, pipeline.get, pipeline.latest, or merge_request.pipelines; do not use merge_request_iid.
- `project_id` (string) (required): Project ID or URL-encoded path
- `timeout_seconds` (integer): Maximum wait time in seconds (1-3600, default 300)

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

### preview (2 tools)

#### gitlab_preview_group_badge

Preview how a group badge renders after placeholder interpolation, without creating it.

**Parameters:**

- `group_id` (string) (required): Group ID or URL-encoded path
- `image_url` (string) (required): Badge image URL with placeholders
- `link_url` (string) (required): Badge link URL with placeholders
- `name` (string): Badge name

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_preview_project_badge

Preview how a project badge renders after placeholder interpolation, without creating it.

**Parameters:**

- `image_url` (string) (required): Badge image URL with placeholders
- `link_url` (string) (required): Badge link URL with placeholders
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

### project (78 tools)

#### gitlab_project_access_token_create

Create a new project access token with specified name, scopes, access level, and optional expiry date.

**Parameters:**

- `access_level` (integer): Access level: 10 (guest), 20 (reporter), 30 (developer), 40 (maintainer)
- `description` (string): Token description
- `expires_at` (string): Expiry date in YYYY-MM-DD format
- `name` (string) (required): Token name
- `project_id` (string) (required): Project ID or URL-encoded path
- `scopes` (array of strings) (required): Token scopes: api, read_api, read_repository, write_repository, etc.

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_project_access_token_get

Get a specific project access token by its ID.

**Parameters:**

- `project_id` (string) (required): Project ID or URL-encoded path
- `token_id` (integer) (required): Access token ID

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_project_access_token_list

List all access tokens for a GitLab project. Filter by state (active, inactive).

**Parameters:**

- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `project_id` (string) (required): Project ID or URL-encoded path
- `state` (string): Token state filter: active, inactive

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_project_access_token_revoke

Revoke a project access token. This action cannot be undone.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `project_id` (string) (required): Project ID or URL-encoded path
- `token_id` (integer) (required): Access token ID to revoke

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_project_access_token_rotate

Rotate a project access token, generating a new token value. Optionally set a new expiry date.

**Parameters:**

- `expires_at` (string): New expiry date in YYYY-MM-DD format
- `project_id` (string) (required): Project ID or URL-encoded path
- `token_id` (integer) (required): Access token ID

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_project_access_token_rotate_self

Rotate the project access token used for the current request. Returns the new token value.

**Parameters:**

- `expires_at` (string): New expiry date in YYYY-MM-DD format
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_project_add_push_rule

Add push rule configuration to a project. Enforce commit message format, branch naming, file size limits, secret detection, and signed commits.

**Parameters:**

- `author_email_regex` (string): Regex to validate author email addresses
- `branch_name_regex` (string): Regex to validate branch names
- `commit_committer_check` (boolean): Reject commits where committer is not a project member
- `commit_committer_name_check` (boolean): Reject commits where committer name does not match user name
- `commit_message_negative_regex` (string): Regex that commit messages must NOT match
- `commit_message_regex` (string): Regex that commit messages must match
- `deny_delete_tag` (boolean): Deny tag deletion
- `file_name_regex` (string): Regex for disallowed file names
- `max_file_size` (integer): Maximum file size (MB). 0 means unlimited
- `member_check` (boolean): Only allow commits from project members
- `prevent_secrets` (boolean): Reject files that are likely to contain secrets
- `project_id` (string) (required): Project ID or URL-encoded path
- `reject_non_dco_commits` (boolean): Reject commits without DCO certification
- `reject_unsigned_commits` (boolean): Reject commits that are not GPG signed

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_project_approval_config_change

Update the project-level merge request approval configuration. Only specified fields are modified.

**Parameters:**

- `approvals_before_merge` (integer): Number of approvals required before merge
- `disable_overriding_approvers_per_merge_request` (boolean): Prevent overriding approvers per MR
- `merge_requests_author_approval` (boolean): Allow MR author to approve their own MR
- `merge_requests_disable_committers_approval` (boolean): Prevent MR committers from approving
- `project_id` (string) (required): Project ID or URL-encoded path
- `require_reauthentication_to_approve` (boolean): Require reauthentication to approve
- `reset_approvals_on_push` (boolean): Reset approvals when new commits are pushed
- `selective_code_owner_removals` (boolean): Only remove code owner approvals when relevant files change

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_project_approval_config_get

Get the project-level merge request approval configuration including required approvals, author self-approval, committer approval, and password requirements.

**Parameters:**

- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_project_approval_rule_create

Create a new project-level approval rule with the specified number of required approvals and approver groups/users.

**Parameters:**

- `applies_to_all_protected_branches` (boolean): Apply this rule to all protected branches
- `approvals_required` (integer) (required): Number of approvals required
- `group_ids` (array of integers): Group IDs to assign as approvers
- `name` (string) (required): Rule name
- `project_id` (string) (required): Project ID or URL-encoded path
- `protected_branch_ids` (array of integers): Protected branch IDs to scope the rule to
- `rule_type` (string): Rule type (regular, code_owner)
- `user_ids` (array of integers): User IDs to assign as approvers
- `usernames` (array of strings): Usernames to assign as approvers

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_project_approval_rule_delete

Delete a project-level approval rule.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `project_id` (string) (required): Project ID or URL-encoded path
- `rule_id` (integer) (required): Approval rule ID to delete

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_project_approval_rule_get

Get details of a specific project-level approval rule.

**Parameters:**

- `project_id` (string) (required): Project ID or URL-encoded path
- `rule_id` (integer) (required): Approval rule ID

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_project_approval_rule_list

List project-level approval rules. Each rule specifies the number of required approvals and eligible approvers.

**Parameters:**

- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_project_approval_rule_update

Update an existing project-level approval rule. Only specified fields are modified.

**Parameters:**

- `applies_to_all_protected_branches` (boolean): Apply this rule to all protected branches
- `approvals_required` (integer): Updated number of approvals required
- `group_ids` (array of integers): Updated group IDs to assign as approvers
- `name` (string): Updated rule name
- `project_id` (string) (required): Project ID or URL-encoded path
- `protected_branch_ids` (array of integers): Updated protected branch IDs
- `rule_id` (integer) (required): Approval rule ID
- `user_ids` (array of integers): Updated user IDs to assign as approvers
- `usernames` (array of strings): Updated usernames to assign as approvers

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_project_archive

Archive a GitLab project, making it read-only. Archived projects are hidden from default project list.

**Parameters:**

- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_project_create

Create a new GitLab project (repository). Supports setting namespace, visibility (private/internal/public), description, default branch, optional README initialization, merge method, squash option, topics, and feature flags (issues_enabled, merge_requests_enabled, wiki_enabled, jobs_enabled, lfs_enabled, request_access_enabled). Also supports CI/CD config path, allow_merge_on_skipped_pipeline, remove_source_branch_after_merge, and autoclose_referenced_issues.

**Parameters:**

- `allow_merge_on_skipped_pipeline` (boolean): Allow merge when pipeline is skipped
- `autoclose_referenced_issues` (boolean): Auto-close referenced issues on merge
- `build_timeout` (integer): Build timeout in seconds
- `ci_config_path` (string): Custom CI/CD configuration file path
- `ci_forward_deployment_enabled` (boolean): Enable CI/CD forward deployment
- `container_registry_access_level` (string): Container registry access level (disabled, private, enabled)
- `default_branch` (string): Default branch name
- `description` (string): Project description
- `import_url` (string): URL to import repository from
- `initialize_with_readme` (boolean): Initialize with a README
- `issues_enabled` (boolean): Enable issues feature
- `jobs_enabled` (boolean): Enable CI/CD jobs
- `lfs_enabled` (boolean): Enable Git LFS
- `merge_method` (string): Merge method (merge, rebase_merge, ff)
- `merge_requests_enabled` (boolean): Enable merge requests feature
- `name` (string) (required): Project name
- `namespace_id` (integer): Namespace ID (defaults to personal namespace)
- `only_allow_merge_if_all_discussions_are_resolved` (boolean): Only allow merge when all discussions are resolved
- `only_allow_merge_if_pipeline_succeeds` (boolean): Only allow merge when pipeline succeeds
- `package_registry_access_level` (string): Package registry access level (disabled, private, enabled)
- `packages_enabled` (boolean): Enable packages feature (deprecated: use package_registry_access_level)
- `pages_access_level` (string): Pages access level (disabled, private, enabled, public)
- `path` (string): Project path slug (defaults from name)
- `protect_merge_request_pipelines` (boolean): Prevent merge request pipeline settings from being modified by users with lower permissions
- `public_builds` (boolean): Enable public access to pipelines
- `remove_source_branch_after_merge` (boolean): Remove source branch after merge by default
- `request_access_enabled` (boolean): Allow users to request access
- `shared_runners_enabled` (boolean): Enable shared runners
- `snippets_access_level` (string): Snippets access level (disabled, private, enabled)
- `squash_option` (string): Squash option (never, always, default_on, default_off)
- `suggestion_commit_message` (string): Default commit message for suggestions
- `topics` (array of strings): Topic tags for the project
- `visibility` (string): Visibility level (private, internal, public)
- `wiki_enabled` (boolean): Enable wiki feature

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_project_create_for_user

Create a new project owned by the specified user (admin operation). The project is created in the target user's personal namespace by default.

**Parameters:**

- `default_branch` (string): Default branch name
- `description` (string): Project description
- `initialize_with_readme` (boolean): Initialize with a README
- `issues_enabled` (boolean): Enable issues feature
- `jobs_enabled` (boolean): Enable CI/CD jobs
- `merge_requests_enabled` (boolean): Enable merge requests feature
- `name` (string) (required): Project name
- `namespace_id` (integer): Namespace ID (defaults to user personal namespace)
- `path` (string): Project path slug (defaults from name)
- `topics` (array of strings): Topic tags for the project
- `user_id` (integer) (required): Target user ID who will own the project
- `visibility` (string): Visibility level (private, internal, public)
- `wiki_enabled` (boolean): Enable wiki feature

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_project_create_fork_relation

Create a fork relation between two existing projects. This makes the project appear as forked from the specified source project.

**Parameters:**

- `forked_from_id` (integer) (required): ID of the project to set as the fork source
- `project_id` (string) (required): Project ID or URL-encoded path of the forked project

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_project_delete

Delete a GitLab project. On instances with delayed deletion enabled, the project is marked for deletion (scheduled) rather than removed immediately — the response includes the scheduled deletion date. Set permanently_remove=true with full_path to bypass delayed deletion and permanently remove the project immediately (requires admin on some instances). Use gitlab_project_restore to cancel a scheduled deletion. Use gitlab_project_list with include_pending_delete=true to see projects awaiting deletion.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `full_path` (string): Full path of the project to confirm permanent removal (required when permanently_remove is true)
- `permanently_remove` (boolean): If true, immediately and permanently delete the project bypassing delayed deletion. Requires admin permissions on some GitLab instances.
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_project_delete_fork_relation

Remove the fork relation from a project. The project will no longer be marked as a fork.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_project_delete_push_rule

Delete the push rule configuration from a project. This removes all push restrictions (commit format, branch naming, file size, etc.).

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_project_delete_shared_group

Remove a shared group from a project, revoking the group's access.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `group_id` (integer) (required): Group ID to remove from project sharing
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_project_download_avatar

Download the avatar image for a project as base64-encoded data.

**Parameters:**

- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_project_edit_push_rule

Modify the push rule configuration of a project. Update commit message, branch name, file restrictions, or signing requirements.

**Parameters:**

- `author_email_regex` (string): Regex to validate author email addresses
- `branch_name_regex` (string): Regex to validate branch names
- `commit_committer_check` (boolean): Reject commits where committer is not a project member
- `commit_committer_name_check` (boolean): Reject commits where committer name does not match user name
- `commit_message_negative_regex` (string): Regex that commit messages must NOT match
- `commit_message_regex` (string): Regex that commit messages must match
- `deny_delete_tag` (boolean): Deny tag deletion
- `file_name_regex` (string): Regex for disallowed file names
- `max_file_size` (integer): Maximum file size (MB). 0 means unlimited
- `member_check` (boolean): Only allow commits from project members
- `prevent_secrets` (boolean): Reject files that are likely to contain secrets
- `project_id` (string) (required): Project ID or URL-encoded path
- `reject_non_dco_commits` (boolean): Reject commits without DCO certification
- `reject_unsigned_commits` (boolean): Reject commits that are not GPG signed

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_project_event_list

List all visible events for a project. Supports filtering by action type, target type, date range, sort order, and pagination.

**Parameters:**

- `action` (string): Filter by action type (created, updated, closed, reopened, pushed, commented, merged, joined, left, destroyed, expired)
- `after` (string): Return events after this date (YYYY-MM-DD)
- `before` (string): Return events before this date (YYYY-MM-DD)
- `page` (integer): Page number for pagination (default 1)
- `per_page` (integer): Number of items per page (default 20, max 100)
- `project_id` (string) (required): Project ID or URL-encoded path
- `sort` (string): Sort order (asc or desc, default desc)
- `target_type` (string): Filter by target type (issue, milestone, merge_request, note, project, snippet, user)

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_project_fork

Fork a GitLab project into a new project. Optionally specify target namespace (namespace_id or namespace_path), name, path, description, visibility, branches to include, and whether MR default target should be the fork itself (mr_default_target_self).

**Parameters:**

- `branches` (string): Branches to fork (empty=all)
- `description` (string): Description for the forked project
- `mr_default_target_self` (boolean): MR default target is the fork itself instead of upstream
- `name` (string): Name for the forked project
- `namespace_id` (integer): Namespace ID to fork into
- `namespace_path` (string): Namespace path to fork into
- `path` (string): Path slug for the forked project
- `project_id` (string) (required): Source project ID or URL-encoded path
- `visibility` (string): Visibility level (private, internal, public)

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_project_get

Retrieve detailed metadata for a GitLab project including name, description, visibility, web URL, default branch, and namespace. Accepts numeric project ID or URL-encoded path (e.g. 'group/subgroup/project'). The response includes default_branch which MUST be used instead of assuming 'main' when generating repository file URLs. Set statistics=true to include repository statistics, license=true to include license info, with_custom_attributes=true to include custom attributes.

**Parameters:**

- `license` (boolean): Include license information in response
- `project_id` (string) (required): Project ID or URL-encoded path (e.g. 'user/repo' or 42)
- `statistics` (boolean): Include project statistics (commit count, storage sizes)
- `with_custom_attributes` (boolean): Include custom attributes in response

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_project_get_push_rules

Get the push rule configuration for a project (commit message, branch name, file size restrictions, etc.).

**Parameters:**

- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_project_hook_add

Add a webhook to a GitLab project. Configure the URL, secret token, SSL verification, and which events trigger the webhook (push, issues, MRs, tags, notes, jobs, pipelines, wiki, deployments, releases, emoji, etc.).

**Parameters:**

- `branch_filter_strategy` (string): Branch filter strategy (wildcard, regex, all_branches)
- `confidential_issues_events` (boolean): Trigger on confidential issue events
- `confidential_note_events` (boolean): Trigger on confidential note events
- `custom_webhook_template` (string): Custom webhook payload template
- `deployment_events` (boolean): Trigger on deployment events
- `description` (string): Webhook description
- `emoji_events` (boolean): Trigger on emoji events
- `enable_ssl_verification` (boolean): Enable SSL verification for webhook
- `feature_flag_events` (boolean): Trigger on feature flag events
- `issues_events` (boolean): Trigger on issue events
- `job_events` (boolean): Trigger on CI job events
- `merge_requests_events` (boolean): Trigger on merge request events
- `milestone_events` (boolean): Trigger on milestone events
- `name` (string): Webhook name
- `note_events` (boolean): Trigger on note/comment events
- `pipeline_events` (boolean): Trigger on pipeline events
- `project_id` (string) (required): Project ID or URL-encoded path
- `push_events` (boolean): Trigger on push events
- `push_events_branch_filter` (string): Branch filter for push events
- `releases_events` (boolean): Trigger on release events
- `resource_access_token_events` (boolean): Trigger on resource access token events
- `resource_deploy_token_events` (boolean): Trigger on resource deploy token events
- `signing_token` (string): Write-only signing token for webhook signature validation
- `tag_push_events` (boolean): Trigger on tag push events
- `token` (string): Secret token for validation
- `url` (string) (required): Webhook URL
- `vulnerability_events` (boolean): Trigger on vulnerability events
- `wiki_page_events` (boolean): Trigger on wiki page events

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_project_hook_delete

Delete a webhook from a GitLab project.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `hook_id` (integer) (required): Webhook ID to delete
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_project_hook_delete_custom_header

Delete a custom header from a project webhook.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `hook_id` (integer) (required): Webhook ID
- `key` (string) (required): Custom header key name to delete
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_project_hook_delete_url_variable

Delete a URL variable from a project webhook.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `hook_id` (integer) (required): Webhook ID
- `key` (string) (required): URL variable key name to delete
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_project_hook_edit

Edit an existing project webhook. Update the URL, events, SSL verification, secret token, or other settings.

**Parameters:**

- `branch_filter_strategy` (string): Branch filter strategy (wildcard, regex, all_branches)
- `confidential_issues_events` (boolean): Trigger on confidential issue events
- `confidential_note_events` (boolean): Trigger on confidential note events
- `custom_webhook_template` (string): Custom webhook payload template
- `deployment_events` (boolean): Trigger on deployment events
- `description` (string): Webhook description
- `emoji_events` (boolean): Trigger on emoji events
- `enable_ssl_verification` (boolean): Enable SSL verification for webhook
- `feature_flag_events` (boolean): Trigger on feature flag events
- `hook_id` (integer) (required): Webhook ID to edit
- `issues_events` (boolean): Trigger on issue events
- `job_events` (boolean): Trigger on CI job events
- `merge_requests_events` (boolean): Trigger on merge request events
- `milestone_events` (boolean): Trigger on milestone events
- `name` (string): Webhook name
- `note_events` (boolean): Trigger on note/comment events
- `pipeline_events` (boolean): Trigger on pipeline events
- `project_id` (string) (required): Project ID or URL-encoded path
- `push_events` (boolean): Trigger on push events
- `push_events_branch_filter` (string): Branch filter for push events
- `releases_events` (boolean): Trigger on release events
- `resource_access_token_events` (boolean): Trigger on resource access token events
- `resource_deploy_token_events` (boolean): Trigger on resource deploy token events
- `signing_token` (string): Write-only signing token for webhook signature validation
- `tag_push_events` (boolean): Trigger on tag push events
- `token` (string): Secret token for validation
- `url` (string): Updated webhook URL
- `vulnerability_events` (boolean): Trigger on vulnerability events
- `wiki_page_events` (boolean): Trigger on wiki page events

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_project_hook_get

Get details of a specific project webhook including all event trigger settings.

**Parameters:**

- `hook_id` (integer) (required): Webhook ID
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_project_hook_list

List webhooks configured for a GitLab project.

**Parameters:**

- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_project_hook_set_custom_header

Set a custom header on a project webhook. The header will be included in all webhook requests. If the header already exists, its value will be updated.

**Parameters:**

- `hook_id` (integer) (required): Webhook ID
- `key` (string) (required): Custom header key name
- `project_id` (string) (required): Project ID or URL-encoded path
- `value` (string) (required): Custom header value

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_project_hook_set_url_variable

Set a URL variable on a project webhook. URL variables can be used in the webhook URL as {variable_name}. If already exists, its value will be updated.

**Parameters:**

- `hook_id` (integer) (required): Webhook ID
- `key` (string) (required): URL variable key name
- `project_id` (string) (required): Project ID or URL-encoded path
- `value` (string) (required): URL variable value

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_project_hook_test

Trigger a test event for a project webhook. Sends a sample payload for the specified event type (push_events, issues_events, merge_requests_events, etc.).

**Parameters:**

- `event` (string) (required): Event type to trigger (push_events, issues_events, merge_requests_events, tag_push_events, note_events, job_events, pipeline_events, wiki_page_events, releases_events, emoji_events)
- `hook_id` (integer) (required): Webhook ID to test
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_project_invite

Invite a user to a project by email or user ID. Requires access_level (10=Guest, 20=Reporter, 30=Developer, 40=Maintainer, 50=Owner).

**Parameters:**

- `access_level` (integer) (required): Access level (10=Guest 20=Reporter 30=Developer 40=Maintainer 50=Owner)
- `email` (string): Email address to invite (either email or user_id required)
- `expires_at` (string): Expiration date for the invitation (YYYY-MM-DD)
- `project_id` (string) (required): Project ID or URL-encoded path
- `user_id` (integer): User ID to invite (either email or user_id required)

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_project_invite_list_pending

List all pending invitations for a project. Supports filtering by query and pagination.

**Parameters:**

- `page` (integer): Page number for pagination (default 1)
- `per_page` (integer): Number of items per page (default 20, max 100)
- `project_id` (string) (required): Project ID or URL-encoded path
- `query` (string): Filter invitations by email or name

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_project_languages

List programming languages used in a GitLab project with their percentages.

**Parameters:**

- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_project_list

List GitLab projects accessible to the authenticated user. Supports filtering by ownership, search term, visibility, archived status, topic, minimum access level, starred, membership, last_activity_after/before dates, and feature flags (with_issues_enabled, with_merge_requests_enabled). Set include_pending_delete=true to include projects that are marked/scheduled for deletion (hidden by default). Supports ordering, sorting, simple mode, search_namespaces, and statistics.

**Parameters:**

- `archived` (boolean): Filter by archived status (true=only archived, false=only active)
- `id_after` (integer): Return projects with ID greater than this value (keyset pagination)
- `id_before` (integer): Return projects with ID less than this value (keyset pagination)
- `include_hidden` (boolean): Include hidden projects in results
- `include_pending_delete` (boolean): Include projects that are marked/scheduled for deletion. Default false.
- `last_activity_after` (string): Return projects with last activity after date (ISO 8601 format)
- `last_activity_before` (string): Return projects with last activity before date (ISO 8601 format)
- `membership` (boolean): Limit to projects where current user is a member
- `min_access_level` (integer): Filter by minimum access level (10=Guest 20=Reporter 30=Developer 40=Maintainer 50=Owner)
- `order_by` (string): Order by field (id, name, path, created_at, updated_at, last_activity_at)
- `owned` (boolean): Limit to projects explicitly owned by the current user
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `search` (string): Search query for project name
- `search_namespaces` (boolean): Include namespace in search
- `simple` (boolean): Return only limited fields (faster for large result sets)
- `sort` (string): Sort direction (asc, desc)
- `starred` (boolean): Limit to projects starred by the current user
- `statistics` (boolean): Include project statistics in response
- `topic` (string): Filter by topic name
- `visibility` (string): Filter by visibility (private, internal, public)
- `with_issues_enabled` (boolean): Filter by projects with issues feature enabled
- `with_merge_requests_enabled` (boolean): Filter by projects with merge requests enabled
- `with_programming_language` (string): Filter by programming language name

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_project_list_forks

List forks of a GitLab project. Supports filtering by ownership, search, visibility, ordering, and pagination.

**Parameters:**

- `order_by` (string): Order by field (id, name, path, created_at, updated_at, last_activity_at)
- `owned` (boolean): Limit to forks owned by the current user
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `project_id` (string) (required): Project ID or URL-encoded path
- `search` (string): Search query for fork name
- `sort` (string): Sort direction (asc, desc)
- `visibility` (string): Filter by visibility (private, internal, public)

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_project_list_groups

List ancestor groups of a project. Supports filtering by search, shared groups, minimum access level, skip_groups, and pagination.

**Parameters:**

- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `project_id` (string) (required): Project ID or URL-encoded path
- `search` (string): Search by group name
- `shared_min_access_level` (integer): Filter by minimum access level (10=Guest 20=Reporter 30=Developer 40=Maintainer 50=Owner)
- `shared_visible_only` (boolean): Only show shared groups visible to the current user
- `skip_groups` (array of integers): Array of group IDs to exclude
- `with_shared` (boolean): Include shared groups (default true)

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_project_list_invited_groups

List groups that have been invited/shared to a project. Supports filtering by search, minimum access level, and pagination.

**Parameters:**

- `min_access_level` (integer): Filter by minimum access level (10=Guest 20=Reporter 30=Developer 40=Maintainer 50=Owner)
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `project_id` (string) (required): Project ID or URL-encoded path
- `search` (string): Search by group name

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_project_list_starrers

List users who have starred a project. Supports filtering by search (name or username) and pagination.

**Parameters:**

- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `project_id` (string) (required): Project ID or URL-encoded path
- `search` (string): Search by name or username

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_project_list_user_contributed

List projects that a specific user has contributed to. Supports filtering by search, visibility, archived status, and pagination.

**Parameters:**

- `archived` (boolean): Filter by archived status
- `order_by` (string): Order by field (id, name, path, created_at, updated_at, last_activity_at)
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `search` (string): Search query for project name
- `simple` (boolean): Return only limited fields (faster)
- `sort` (string): Sort direction (asc, desc)
- `user_id` (string) (required): User ID or username
- `visibility` (string): Filter by visibility (private, internal, public)

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_project_list_user_projects

List projects owned by a specific user. Accepts user ID or username. Supports filtering by search, visibility, archived status, and pagination.

**Parameters:**

- `archived` (boolean): Filter by archived status
- `order_by` (string): Order by field (id, name, path, created_at, updated_at, last_activity_at)
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `search` (string): Search query for project name
- `simple` (boolean): Return only limited fields (faster)
- `sort` (string): Sort direction (asc, desc)
- `user_id` (string) (required): User ID or username
- `visibility` (string): Filter by visibility (private, internal, public)

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_project_list_user_starred

List projects that a specific user has starred. Supports filtering by search, visibility, archived status, and pagination.

**Parameters:**

- `archived` (boolean): Filter by archived status
- `order_by` (string): Order by field (id, name, path, created_at, updated_at, last_activity_at)
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `search` (string): Search query for project name
- `simple` (boolean): Return only limited fields (faster)
- `sort` (string): Sort direction (asc, desc)
- `user_id` (string) (required): User ID or username
- `visibility` (string): Filter by visibility (private, internal, public)

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_project_list_users

List users who are members of a project. Supports filtering by search (name or username) and pagination.

**Parameters:**

- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `project_id` (string) (required): Project ID or URL-encoded path
- `search` (string): Search by name or username

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_project_member_add

Add a user as a project member. Requires user_id (from gitlab_search_users or gitlab_project_members_list) and access_level (10=Guest, 20=Reporter, 30=Developer, 40=Maintainer, 50=Owner). Optionally set expires_at and member_role_id. Returns: username, access level, state, and web URL. See also: gitlab_project_members_list, gitlab_get_user.

**Parameters:**

- `access_level` (integer) (required): Access level (10=Guest, 20=Reporter, 30=Developer, 40=Maintainer, 50=Owner)
- `expires_at` (string): Membership expiration date (YYYY-MM-DD)
- `member_role_id` (integer): Custom member role ID
- `project_id` (string) (required): Project ID or URL-encoded path
- `user_id` (integer): User ID to add (provide user_id or username)
- `username` (string): Username to add (provide user_id or username)

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_project_member_delete

Remove a member from a project.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `project_id` (string) (required): Project ID or URL-encoded path
- `user_id` (integer) (required): User ID of the member to remove

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_project_member_edit

Edit a project member's access level or expiration. Requires access_level (10=Guest, 20=Reporter, 30=Developer, 40=Maintainer, 50=Owner). Returns: updated username, access level, state, and web URL. See also: gitlab_project_member_get.

**Parameters:**

- `access_level` (integer) (required): New access level (10=Guest, 20=Reporter, 30=Developer, 40=Maintainer, 50=Owner)
- `expires_at` (string): Membership expiration date (YYYY-MM-DD)
- `member_role_id` (integer): Custom member role ID
- `project_id` (string) (required): Project ID or URL-encoded path
- `user_id` (integer) (required): User ID of the member to edit

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_project_member_get

Get details of a specific project member by user ID. Returns access level, state, username, and membership info.

**Parameters:**

- `project_id` (string) (required): Project ID or URL-encoded path
- `user_id` (integer) (required): User ID of the member

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_project_member_get_inherited

Get a project member including inherited membership from parent groups. Returns access level, state, and membership origin.

**Parameters:**

- `project_id` (string) (required): Project ID or URL-encoded path
- `user_id` (integer) (required): User ID of the member

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_project_members_list

List all members of a GitLab project including inherited members from parent groups. Returns user ID, username, name, state, access level (10=Guest, 20=Reporter, 30=Developer, 40=Maintainer, 50=Owner), and web URL. Supports filtering by name/username query.

**Parameters:**

- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `project_id` (string) (required): Project ID or URL-encoded path
- `query` (string): Filter members by name or username

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_project_pull_mirror_configure

Configure or update pull mirroring for a project. Set the mirror URL, authentication, branch filtering, and trigger options.

**Parameters:**

- `auth_password` (string): 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): Authentication username for the mirror URL. Treat as secret-adjacent and avoid logging with auth_password
- `enabled` (boolean): Enable or disable pull mirroring
- `mirror_branch_regex` (string): Regex to filter branches to mirror
- `mirror_overwrites_diverged_branches` (boolean): Overwrite diverged branches on mirror update
- `mirror_trigger_builds` (boolean): Trigger CI builds when mirror updates
- `only_mirror_protected_branches` (boolean): Only mirror protected branches
- `project_id` (string) (required): Project ID or URL-encoded path
- `url` (string): 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

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_project_pull_mirror_get

Get pull mirror configuration for a project including URL, status, last update times, and mirror settings.

**Parameters:**

- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_project_repository_storage_get

Get repository storage information for a project including disk path and storage name.

**Parameters:**

- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_project_restore

Restore a GitLab project that has been marked/scheduled for deletion. Use gitlab_project_list with include_pending_delete=true to discover projects pending deletion.

**Parameters:**

- `project_id` (string) (required): Project ID or URL-encoded path of the project marked for deletion

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_project_share_with_group

Share a project with a group, granting the specified access level. Optionally set an expiration date (YYYY-MM-DD). Access levels: 10=Guest, 20=Reporter, 30=Developer, 40=Maintainer.

**Parameters:**

- `expires_at` (string): Expiration date for the share (YYYY-MM-DD)
- `group_access` (integer) (required): Access level for the group (10=Guest 20=Reporter 30=Developer 40=Maintainer)
- `group_id` (integer) (required): Group ID to share with
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_project_snippet_content

Get the raw content of a project snippet.

**Parameters:**

- `project_id` (string) (required): Project ID or path
- `snippet_id` (integer) (required): Snippet ID

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_project_snippet_create

Create a new snippet in a GitLab project. Use 'files' for multi-file snippets or 'file_name'+'content' for single-file.

**Parameters:**

- `content` (string): Content (single-file, deprecated in favor of files)
- `description` (string): Snippet description
- `file_name` (string): File name (single-file, deprecated in favor of files)
- `files` (array of objects): Files to include in the snippet
- `project_id` (string) (required): Project ID or path
- `title` (string) (required): Snippet title
- `visibility` (string): Visibility: private, internal, or public; defaults to private when omitted

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_project_snippet_delete

Delete a project snippet. This action cannot be undone.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `project_id` (string) (required): Project ID or path
- `snippet_id` (integer) (required): Snippet ID

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_project_snippet_get

Get a single project snippet by ID.

**Parameters:**

- `project_id` (string) (required): Project ID or path
- `snippet_id` (integer) (required): Snippet ID

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_project_snippet_list

List snippets for a GitLab project.

**Parameters:**

- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `project_id` (string) (required): Project ID or path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_project_snippet_update

Update an existing project snippet.

**Parameters:**

- `content` (string): New content (single-file, deprecated in favor of files)
- `description` (string): New description
- `file_name` (string): New file name (single-file, deprecated in favor of files)
- `files` (array of objects): File operations to apply
- `project_id` (string) (required): Project ID or path
- `snippet_id` (integer) (required): Snippet ID
- `title` (string): New title
- `visibility` (string): New visibility: private, internal, or public

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_project_star

Star a GitLab project for the authenticated user.

**Parameters:**

- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_project_start_housekeeping

Trigger housekeeping for a project (git gc, repack, and other repository optimization tasks).

**Parameters:**

- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_project_start_mirroring

Trigger an immediate pull mirror update for a project. The project must have pull mirroring configured.

**Parameters:**

- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_project_transfer

Transfer a GitLab project to a different namespace. Requires the namespace (ID or path) to transfer to.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `namespace` (string) (required): Target namespace ID or path
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_project_unarchive

Unarchive a GitLab project, restoring it from read-only state.

**Parameters:**

- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_project_unstar

Remove star from a GitLab project for the authenticated user.

**Parameters:**

- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_project_update

Update GitLab project settings such as name, description, visibility, default branch, merge method, squash option, topics, and feature flags (issues_enabled, merge_requests_enabled, wiki_enabled, jobs_enabled, lfs_enabled). Also supports CI/CD config path, merge commit/squash commit templates, merge_pipelines_enabled, merge_trains_enabled, allow_merge_on_skipped_pipeline, remove_source_branch_after_merge, autoclose_referenced_issues, resolve_outdated_diff_discussions, and approvals_before_merge. Only specified fields are modified; unset fields remain unchanged.

**Parameters:**

- `allow_merge_on_skipped_pipeline` (boolean): Allow merge when pipeline is skipped
- `approvals_before_merge` (integer): Number of approvals required before merge
- `autoclose_referenced_issues` (boolean): Auto-close referenced issues on merge
- `ci_config_path` (string): Custom CI/CD configuration file path
- `container_registry_access_level` (string): Container registry access level (disabled, private, enabled)
- `default_branch` (string): New default branch
- `description` (string): New description
- `issues_enabled` (boolean): Enable/disable issues feature (use 'issues_enabled' not 'issues_access_level')
- `jobs_enabled` (boolean): Enable CI/CD jobs
- `lfs_enabled` (boolean): Enable Git LFS
- `merge_commit_template` (string): Template for merge commit messages
- `merge_method` (string): Merge method (merge, rebase_merge, ff)
- `merge_pipelines_enabled` (boolean): Enable merged results pipelines
- `merge_request_title_regex` (string): Regex that MR titles must match
- `merge_request_title_regex_description` (string): Human-readable description for the MR title regex
- `merge_requests_enabled` (boolean): Enable merge requests feature
- `merge_trains_enabled` (boolean): Enable merge trains
- `name` (string): New project name
- `only_allow_merge_if_all_discussions_are_resolved` (boolean): Only allow merge when all discussions are resolved
- `only_allow_merge_if_pipeline_succeeds` (boolean): Only allow merge when pipeline succeeds
- `package_registry_access_level` (string): Package registry access level (disabled, private, enabled)
- `packages_enabled` (boolean): Enable packages feature (deprecated: use package_registry_access_level)
- `pages_access_level` (string): Pages access level (disabled, private, enabled, public)
- `project_id` (string) (required): Project ID or URL-encoded path
- `protect_merge_request_pipelines` (boolean): Prevent merge request pipeline settings from being modified by users with lower permissions
- `public_builds` (boolean): Enable public access to pipelines
- `remove_source_branch_after_merge` (boolean): Remove source branch after merge by default
- `request_access_enabled` (boolean): Allow users to request access
- `resolve_outdated_diff_discussions` (boolean): Auto-resolve outdated diff discussions
- `shared_runners_enabled` (boolean): Enable shared runners
- `snippets_access_level` (string): Snippets access level (disabled, private, enabled)
- `squash_commit_template` (string): Template for squash commit messages
- `squash_option` (string): Squash option (never, always, default_on, default_off)
- `topics` (array of strings): Topic tags for the project
- `visibility` (string): Visibility level (private, internal, public)
- `wiki_enabled` (boolean): Enable wiki feature

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_project_upload

Upload a file to a GitLab project's markdown uploads area. Provide either file_path (absolute path to a local file) or content_base64 (base64-encoded content), not both. Returns a Markdown embed string (e.g. '![alt](/uploads/hash/filename)') that can be inserted into MR descriptions, note bodies, or discussion bodies.

**Parameters:**

- `content_base64` (string): Base64-encoded file content. Only one of file_path or content_base64 should be provided.
- `file_path` (string): 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.
- `filename` (string) (required): Name of the file to upload (e.g. screenshot.png)
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_project_upload_avatar

Upload or replace the avatar image for a project. Provide either file_path (absolute path to a local image file) or content_base64 (base64-encoded image content), not both.

**Parameters:**

- `content_base64` (string): Base64-encoded image content. Only one of file_path or content_base64 should be provided.
- `file_path` (string): 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.
- `filename` (string) (required): Avatar filename (e.g. avatar.png)
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_project_upload_delete

Delete a file upload (markdown attachment) from a GitLab project by upload ID. This action cannot be undone.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `project_id` (string) (required): Project ID or URL-encoded path
- `upload_id` (integer) (required): ID of the upload to delete

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_project_upload_list

List all file uploads (markdown attachments) for a GitLab project. Returns upload ID, filename, size, and creation date for each upload.

**Parameters:**

- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

### protected (8 tools)

#### gitlab_protected_branch_get

Get details of a single protected branch by name. Returns: branch name, push/merge access levels, allow_force_push, and code_owner_approval_required. See also: gitlab_protected_branches_list, gitlab_branch_protect.

**Parameters:**

- `branch_name` (string) (required): Name of the protected branch
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_protected_branch_update

Update settings on an existing protected branch (allow_force_push, code_owner_approval_required). Use gitlab_branch_protect to initially protect a branch. Returns: updated name, push/merge access levels, allow_force_push, and code_owner_approval_required.

**Parameters:**

- `allow_force_push` (boolean): Allow force push to this branch
- `branch_name` (string) (required): Name of the protected branch
- `code_owner_approval_required` (boolean): Require CODEOWNERS approval
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_protected_branches_list

List all protected branches in a GitLab project with their configured push and merge access level restrictions. Returns paginated results.

**Parameters:**

- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_protected_environment_get

Get a single protected environment by name, including deploy access levels and approval rules.

**Parameters:**

- `environment` (string) (required): Environment name
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_protected_environment_list

List protected environments in a GitLab project with their deploy access levels and approval rules.

**Parameters:**

- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_protected_environment_protect

Protect an environment in a GitLab project. Configure deploy access levels, required approvals, and approval rules.

**Parameters:**

- `approval_rules` (array of objects): Approval rules
- `deploy_access_levels` (array of objects): Deploy access levels
- `name` (string) (required): Environment name to protect
- `project_id` (string) (required): Project ID or URL-encoded path
- `required_approval_count` (integer): Required number of approvals

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_protected_environment_unprotect

Remove protection from an environment. This action cannot be undone.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `environment` (string) (required): Environment name to unprotect
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_protected_environment_update

Update a protected environment's deploy access levels, approval rules, or required approval count.

**Parameters:**

- `approval_rules` (array of objects): Updated approval rules
- `deploy_access_levels` (array of objects): Updated deploy access levels
- `environment` (string) (required): Environment name
- `name` (string): New environment name
- `project_id` (string) (required): Project ID or URL-encoded path
- `required_approval_count` (integer): Required number of approvals

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

### purge (1 tools)

#### gitlab_purge_dependency_proxy

Purge the dependency proxy cache for a GitLab group.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `group_id` (string) (required): Group ID or URL-encoded path

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

### read (1 tools)

#### gitlab_read_repository_submodule_file

Read a file from inside a Git submodule transparently. Resolves the submodule's target project and pinned commit SHA, then fetches the file content. No need to manually find the submodule's project or commit.

**Parameters:**

- `file_path` (string) (required): Path of the file inside the submodule (e.g. src/main.c)
- `project_id` (string) (required): Project ID or URL-encoded path of the parent repository
- `ref` (string): Branch/tag/SHA in the parent repository (defaults to default branch)
- `submodule_path` (string) (required): Path to the submodule as defined in .gitmodules (e.g. libs/core-module)

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

### register (1 tools)

#### gitlab_register_cluster_agent

Register a new cluster agent for a GitLab project

**Parameters:**

- `name` (string) (required): Agent name
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

### registry (12 tools)

#### gitlab_registry_delete_repository

Delete a container registry repository. This action cannot be undone.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `project_id` (string) (required): Project ID or path
- `repository_id` (integer) (required): Registry repository ID

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_registry_delete_tag

Delete a single container registry repository tag. This action cannot be undone.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `project_id` (string) (required): Project ID or path
- `repository_id` (integer) (required): Registry repository ID
- `tag_name` (string) (required): Tag name to delete

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_registry_delete_tags_bulk

Delete container registry repository tags in bulk using regex patterns. Use name_regex_delete to match tags to delete and name_regex_keep to exclude tags from deletion.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `keep_n` (integer): Number of latest tags to keep
- `name_regex_delete` (string): Regex pattern of tag names to delete
- `name_regex_keep` (string): Regex pattern of tag names to keep
- `older_than` (string): Delete tags older than this (e.g. 1h, 2d, 1month)
- `project_id` (string) (required): Project ID or path
- `repository_id` (integer) (required): Registry repository ID

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_registry_get_repository

Get details of a single container registry repository by its ID.

**Parameters:**

- `repository_id` (integer) (required): Registry repository ID
- `tags` (boolean): Include tags in response
- `tags_count` (boolean): Include tags count in response

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_registry_get_tag

Get details of a specific container registry repository tag.

**Parameters:**

- `project_id` (string) (required): Project ID or path
- `repository_id` (integer) (required): Registry repository ID
- `tag_name` (string) (required): Tag name

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_registry_list_group

List container registry repositories for a GitLab group.

**Parameters:**

- `group_id` (string) (required): Group ID or path
- `page` (integer): Page number for pagination
- `per_page` (integer): Number of items per page

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_registry_list_project

List container registry repositories for a GitLab project.

**Parameters:**

- `page` (integer): Page number for pagination
- `per_page` (integer): Number of items per page
- `project_id` (string) (required): Project ID or path
- `tags` (boolean): Include tags in response
- `tags_count` (boolean): Include tags count in response

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_registry_list_tags

List tags for a container registry repository.

**Parameters:**

- `page` (integer): Page number for pagination
- `per_page` (integer): Number of items per page
- `project_id` (string) (required): Project ID or path
- `repository_id` (integer) (required): Registry repository ID

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_registry_protection_create

Create a container registry protection rule to restrict push/delete access by minimum access level.

**Parameters:**

- `minimum_access_level_for_delete` (string): Minimum access level for delete (maintainer, owner, admin)
- `minimum_access_level_for_push` (string): Minimum access level for push (maintainer, owner, admin)
- `project_id` (string) (required): Project ID or path
- `repository_path_pattern` (string) (required): Repository path pattern (e.g. my-project/my-image*)

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_registry_protection_delete

Delete a container registry protection rule. This action cannot be undone.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `project_id` (string) (required): Project ID or path
- `rule_id` (integer) (required): Protection rule ID

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_registry_protection_list

List container registry protection rules for a GitLab project.

**Parameters:**

- `project_id` (string) (required): Project ID or path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_registry_protection_update

Update a container registry protection rule.

**Parameters:**

- `minimum_access_level_for_delete` (string): Minimum access level for delete (maintainer, owner, admin)
- `minimum_access_level_for_push` (string): Minimum access level for push (maintainer, owner, admin)
- `project_id` (string) (required): Project ID or path
- `repository_path_pattern` (string): Repository path pattern
- `rule_id` (integer) (required): Protection rule ID

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

### reject (1 tools)

#### gitlab_reject_user

Reject a pending GitLab user registration (admin only). The user account will be deleted.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `user_id` (integer) (required): The ID of the user

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

### release (12 tools)

#### gitlab_release_create

Create a GitLab release. If the tag_name does not exist yet, provide 'ref' (branch name or commit SHA) and GitLab will auto-create a lightweight tag — no need to call gitlab_tag_create first. Use 'tag_message' for an annotated tag. The response includes 'assets_sources' with auto-generated tar.gz and zip archive URLs — use those real URLs instead of constructing download links manually.

**Parameters:**

- `description` (string): Release notes (Markdown supported)
- `milestones` (array of strings): Milestone titles to associate with the release
- `name` (string): Release title
- `project_id` (string) (required): Project ID or URL-encoded path
- `ref` (string): Branch or commit SHA to create tag from when tag_name does not exist; include this when the prompt says ref/from ref
- `released_at` (string): Date of the release in ISO 8601 format
- `tag_message` (string): Message to use for the annotated tag (creates annotated tag instead of lightweight)
- `tag_name` (string) (required): Tag name associated with the release

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_release_delete

Delete a GitLab release. The underlying Git tag is preserved and not deleted.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `project_id` (string) (required): Project ID or URL-encoded path
- `tag_name` (string) (required): Tag name of the release to delete

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_release_get

Retrieve detailed information about a specific GitLab release by its tag name, including title, description, author, creation date, and associated assets. The response includes 'assets_sources' (auto-generated tar.gz/zip archive URLs) and 'assets_links' (manually added links such as package download URLs).

**Parameters:**

- `project_id` (string) (required): Project ID or URL-encoded path
- `tag_name` (string) (required): Tag name of the release

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_release_latest

Get the latest release for a GitLab project. Returns the most recently created release without needing to know the tag name.

**Parameters:**

- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_release_link_create

Add an asset link to a GitLab release. IMPORTANT: (1) When linking to uploaded packages, use the real 'url' value returned by gitlab_package_publish — do NOT construct package URLs manually. (2) The 'name' MUST be the exact filename (e.g. 'checksums.txt.asc'), NEVER add descriptive suffixes. Consider using gitlab_package_publish_and_link instead to upload and link in one step. Supports link types: runbook, package, image, or other. Links appear in the release's assets section.

**Parameters:**

- `link_type` (string): Type of the release link: other, runbook, image, or package.
- `name` (string) (required): Name of the link
- `project_id` (string) (required): Project ID or URL-encoded path
- `tag_name` (string) (required): Tag name of the release
- `url` (string) (required): Absolute http, https, or ftp URL of the link target. Do not use local file paths or relative paths.

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_release_link_create_batch

Add multiple asset links to a GitLab release in a single call. Use this instead of calling gitlab_release_link_create multiple times. Each link requires a name and url; link_type is optional (runbook, package, image, other). IMPORTANT: (1) For package links, use the real 'url' values returned by gitlab_package_publish. (2) Link names MUST be exact filenames — never add descriptive suffixes.

**Parameters:**

- `links` (array of objects) (required): Array of release asset links. Each item supports only name, url, and link_type.
- `project_id` (string) (required): Project ID or URL-encoded path
- `tag_name` (string) (required): Tag name of the release

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_release_link_delete

Remove an asset link from a GitLab release by its link ID.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `link_id` (integer) (required): ID of the release link to delete
- `project_id` (string) (required): Project ID or URL-encoded path
- `tag_name` (string) (required): Tag name of the release

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_release_link_get

Get details of a specific release asset link by its ID, including name, URL, type, and whether it is external.

**Parameters:**

- `link_id` (integer) (required): ID of the release link
- `project_id` (string) (required): Project ID or URL-encoded path
- `tag_name` (string) (required): Tag name of the release

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_release_link_list

List all asset links attached to a specific GitLab release identified by tag name. Returns link names, URLs, types, and IDs.

**Parameters:**

- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `project_id` (string) (required): Project ID or URL-encoded path
- `tag_name` (string) (required): Tag name of the release

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_release_link_update

Update an existing release asset link. Can change name, URL, filepath, direct asset path, or link type. Only specified fields are changed.

**Parameters:**

- `direct_asset_path` (string): New direct asset path for the link
- `filepath` (string): New filepath for a direct asset link
- `link_id` (integer) (required): ID of the release link to update
- `link_type` (string): Type of the release link: other, runbook, image, or package.
- `name` (string): New name of the link
- `project_id` (string) (required): Project ID or URL-encoded path
- `tag_name` (string) (required): Tag name of the release
- `url` (string): Absolute http, https, or ftp URL of the link target. Do not use local file paths or relative paths.

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_release_list

List all releases for a GitLab project ordered by release date. Returns paginated results including each release's metadata, tag, and asset links.

**Parameters:**

- `order_by` (string): Order by field (released_at, created_at)
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `project_id` (string) (required): Project ID or URL-encoded path
- `sort` (string): Sort direction (asc, desc)

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_release_update

Update an existing GitLab release's title, description, milestones, or released date. Identified by project and tag name. Only specified fields are changed. Returns: tag_name, name, description, author, dates, commit SHA, milestones, and asset links. See also: gitlab_release_get, gitlab_release_delete.

**Parameters:**

- `description` (string): Updated release notes
- `milestones` (array of strings): Milestone titles to associate with the release
- `name` (string): New release title
- `project_id` (string) (required): Project ID or URL-encoded path
- `released_at` (string): New release date in ISO 8601 format
- `tag_name` (string) (required): Tag name of the release

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

### remove (3 tools)

#### gitlab_remove_group_job_token_allowlist

Remove a group from the CI/CD job token allowlist.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `project_id` (string) (required): Project ID or URL-encoded path
- `target_group_id` (integer) (required): ID of the group to remove from the allowlist

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_remove_project_job_token_allowlist

Remove a project from the CI/CD job token inbound allowlist.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `project_id` (string) (required): Project ID or URL-encoded path
- `target_project_id` (integer) (required): ID of the project to remove from the allowlist

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_remove_secure_file

Remove a CI/CD secure file.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `file_id` (integer) (required): Secure file ID
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

### render (1 tools)

#### gitlab_render_markdown

Render arbitrary markdown text to HTML using the GitLab API. Supports GitLab Flavored Markdown (GFM) and project-scoped references.

**Parameters:**

- `gfm` (boolean): Use GitLab Flavored Markdown (default false)
- `project` (string): Project path for resolving references (e.g. group/project)
- `text` (string) (required): Markdown text to render

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

### repair (1 tools)

#### gitlab_repair_geo_site

Repair the OAuth authentication of a Geo site.

**Parameters:**

- `id` (integer) (required): Numeric ID of the Geo site

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

### repository (9 tools)

#### gitlab_repository_archive

Get the download URL for a repository archive. Supports tar.gz, tar.bz2, zip formats and optional SHA/branch/tag/path filters. Returns the URL (does not download binary content).

**Parameters:**

- `format` (string): Archive format: tar.gz, tar.bz2, tbz, tbz2, tb2, bz2, tar, zip (default: tar.gz)
- `path` (string): Subdirectory path to archive (omit for entire repo)
- `project_id` (string) (required): Project ID or URL-encoded path
- `sha` (string): Commit SHA, branch, or tag to archive (default: default branch)

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_repository_blob

Get a git blob by SHA from a repository. For text content returns decoded text; for images returns viewable image data; for binary files returns metadata only. Requires a blob SHA obtained from gitlab_repository_tree. For reading files by path, use gitlab_file_get.

**Parameters:**

- `project_id` (string) (required): Project ID or URL-encoded path
- `sha` (string) (required): Blob SHA (from tree listing or commit diff)

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_repository_changelog_add

Add changelog data to a changelog file by creating a commit. Requires version string. Optionally specify branch, from/to range, config file, and commit message.

**Parameters:**

- `branch` (string): Branch to commit the changelog to (default: default branch)
- `config_file` (string): Path to the changelog config file in the project
- `file` (string): Path to the changelog file (default: CHANGELOG.md)
- `from` (string): Start of the range (commit SHA or tag)
- `message` (string): Commit message for the changelog update
- `project_id` (string) (required): Project ID or URL-encoded path
- `to` (string): End of the range (commit SHA or tag, default: HEAD)
- `trailer` (string): Git trailer to use for changelog generation (default: Changelog)
- `version` (string) (required): Version string for the changelog

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_repository_changelog_generate

Generate changelog data (notes) without committing. Returns the changelog notes as Markdown text. Requires version string.

**Parameters:**

- `config_file` (string): Path to the changelog config file
- `from` (string): Start of the range (commit SHA or tag)
- `project_id` (string) (required): Project ID or URL-encoded path
- `to` (string): End of the range (commit SHA or tag, default: HEAD)
- `trailer` (string): Git trailer to use (default: Changelog)
- `version` (string) (required): Version string

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_repository_compare

Compare two branches, tags, or commits in a GitLab repository. Returns the list of commits between them and the diffs (changed files) with old/new paths and diff text.

**Parameters:**

- `from` (string) (required): Branch name, tag, or commit SHA to compare from
- `project_id` (string) (required): Project ID or URL-encoded path
- `straight` (boolean): Use straight comparison (from..to) instead of merge-base (from...to)
- `to` (string) (required): Branch name, tag, or commit SHA to compare to
- `unidiff` (boolean): Return diffs in unified diff format

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_repository_contributors

List repository contributors with commit, addition, and deletion counts. Supports ordering by name, email, or commits and pagination.

**Parameters:**

- `order_by` (string): Order by: name, email, or commits (default: commits)
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `project_id` (string) (required): Project ID or URL-encoded path
- `sort` (string): Sort direction: asc or desc (default: asc)

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_repository_merge_base

Find the common ancestor (merge base) commit of two or more branches, tags, or commits.

**Parameters:**

- `project_id` (string) (required): Project ID or URL-encoded path
- `refs` (array of strings) (required): Two or more branch names, tags, or commit SHAs to find the merge base of

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_repository_raw_blob

Get the content of a git blob by SHA. For text content returns decoded text; for images returns viewable image data; for binary files returns metadata only. Requires a blob SHA from gitlab_repository_tree. For reading files by path, use gitlab_file_get instead.

**Parameters:**

- `project_id` (string) (required): Project ID or URL-encoded path
- `sha` (string) (required): Blob SHA (from tree listing or commit diff)

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_repository_tree

List the files and directories (tree) of a GitLab repository at a given path and ref. 'ref' accepts a branch name, tag name, or commit SHA (defaults to the project's default branch if omitted). Returns file name, type (blob/tree), mode, and path with pagination. Use recursive=true to list all files in subdirectories. For reading file content, use gitlab_file_get instead.

**Parameters:**

- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `path` (string): Path inside the repository to list (default: root)
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `project_id` (string) (required): Project ID or URL-encoded path
- `recursive` (boolean): List files recursively through subdirectories
- `ref` (string): Branch name, tag, or commit SHA (default: default branch)

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

### resolve (1 tools)

#### gitlab_resolve_vulnerability

Resolve a vulnerability (requires Ultimate/Premium). Changes state to RESOLVED. Returns: updated vulnerability state. See also: gitlab_get_vulnerability, gitlab_confirm_vulnerability, gitlab_revert_vulnerability.

**Parameters:**

- `id` (string) (required): Vulnerability GID (e.g. gid://gitlab/Vulnerability/42)

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

### retrieve (6 tools)

#### gitlab_retrieve_all_group_storage_moves

Retrieve all group repository storage moves (admin only).

**Parameters:**

- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_retrieve_all_project_storage_moves

Retrieve all project repository storage moves (admin only).

**Parameters:**

- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_retrieve_all_snippet_storage_moves

Retrieve all snippet repository storage moves (admin only).

**Parameters:**

- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_retrieve_group_storage_moves

Retrieve all repository storage moves for a specific group (admin only).

**Parameters:**

- `group_id` (integer) (required): Numeric ID of the group
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_retrieve_project_storage_moves

Retrieve all repository storage moves for a specific project (admin only).

**Parameters:**

- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `project_id` (integer) (required): Numeric ID of the project

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_retrieve_snippet_storage_moves

Retrieve all repository storage moves for a specific snippet (admin only).

**Parameters:**

- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `snippet_id` (integer) (required): Numeric ID of the snippet

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

### retry (1 tools)

#### gitlab_retry_failed_external_status_check_for_project_mr

Retry a failed external status check for a project merge request. Requires project_id, merge_request_iid, and check_id.

**Parameters:**

- `check_id` (integer) (required): External status check ID to retry
- `merge_request_iid` (integer) (required): Merge request internal ID
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

### revert (1 tools)

#### gitlab_revert_vulnerability

Revert a vulnerability to detected state (requires Ultimate/Premium). Changes state back to DETECTED. Returns: updated vulnerability state. See also: gitlab_get_vulnerability, gitlab_dismiss_vulnerability, gitlab_resolve_vulnerability.

**Parameters:**

- `id` (string) (required): Vulnerability GID (e.g. gid://gitlab/Vulnerability/42)

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

### review (1 tools)

#### gitlab_review_mr_security

Perform a security-focused review of a GitLab merge request using LLM-assisted analysis via MCP sampling. Fetches MR details and code diffs, then requests LLM to identify injection vulnerabilities, auth issues, exposed secrets, and OWASP Top 10 findings. Requires the MCP client to support the sampling capability (human-in-the-loop approval).

**Parameters:**

- `merge_request_iid` (integer) (required): Merge request internal ID
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

### revoke (3 tools)

#### gitlab_revoke_cluster_agent_token

Revoke a cluster agent token

**Parameters:**

- `agent_id` (integer) (required): Agent ID
- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `project_id` (string) (required): Project ID or URL-encoded path
- `token_id` (integer) (required): Token ID

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_revoke_group_personal_access_token

Revoke a personal access token managed by a GitLab group.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `group_id` (string) (required): Group ID or URL-encoded path
- `token_id` (integer) (required): Personal access token ID

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_revoke_impersonation_token

Revoke an impersonation token for a GitLab user (admin only).

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `token_id` (integer) (required): Impersonation token ID to revoke
- `user_id` (integer) (required): GitLab user ID

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

### runner (34 tools)

#### gitlab_runner_controller_create

Register a new runner controller. Admin only. Experimental: may change or be removed.

**Parameters:**

- `description` (string): Description of the runner controller
- `state` (string): State: enabled, disabled, or dry_run

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_runner_controller_delete

Delete a runner controller. Admin only. This action cannot be undone. Experimental: may change or be removed.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `controller_id` (integer) (required): Runner controller ID

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_runner_controller_get

Get detailed information about a runner controller. Admin only. Experimental: may change or be removed.

**Parameters:**

- `controller_id` (integer) (required): Runner controller ID

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_runner_controller_list

List all runner controllers. Admin only. Experimental: may change or be removed.

**Parameters:**

- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_runner_controller_scope_add_instance

Add an instance-level scope to a runner controller. Admin only. Experimental: may change or be removed.

**Parameters:**

- `controller_id` (integer) (required): Runner controller ID

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_runner_controller_scope_add_runner

Add a runner scope to a runner controller. The runner must be instance-level. Admin only. Experimental: may change or be removed.

**Parameters:**

- `controller_id` (integer) (required): Runner controller ID
- `runner_id` (integer) (required): Instance-level runner ID to scope

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_runner_controller_scope_list

List all scopes for a runner controller. Admin only. Experimental: may change or be removed.

**Parameters:**

- `controller_id` (integer) (required): Runner controller ID

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_runner_controller_scope_remove_instance

Remove the instance-level scope from a runner controller. Admin only. Experimental: may change or be removed.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `controller_id` (integer) (required): Runner controller ID

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_runner_controller_scope_remove_runner

Remove a runner scope from a runner controller. Admin only. Experimental: may change or be removed.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `controller_id` (integer) (required): Runner controller ID
- `runner_id` (integer) (required): Runner ID to remove from scope

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_runner_controller_token_create

Create a new runner controller token. Admin only. Experimental: may change or be removed.

**Parameters:**

- `controller_id` (integer) (required): Runner controller ID
- `description` (string): Description of the token

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_runner_controller_token_get

Get a specific runner controller token. Admin only. Experimental: may change or be removed.

**Parameters:**

- `controller_id` (integer) (required): Runner controller ID
- `token_id` (integer) (required): Token ID

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_runner_controller_token_list

List all tokens for a runner controller. Admin only. Experimental: may change or be removed.

**Parameters:**

- `controller_id` (integer) (required): Runner controller ID
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_runner_controller_token_revoke

Revoke a runner controller token. This action cannot be undone. Admin only. Experimental: may change or be removed.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `controller_id` (integer) (required): Runner controller ID
- `token_id` (integer) (required): Token ID

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_runner_controller_token_rotate

Rotate a runner controller token. Returns a new token replacing the old one. Admin only. Experimental: may change or be removed.

**Parameters:**

- `controller_id` (integer) (required): Runner controller ID
- `token_id` (integer) (required): Token ID

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_runner_controller_update

Update a runner controller's description or state. Admin only. Experimental: may change or be removed.

**Parameters:**

- `controller_id` (integer) (required): Runner controller ID
- `description` (string): New description
- `state` (string): New state: enabled, disabled, or dry_run

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_runner_delete_by_token

Delete a registered CI/CD runner using its authentication token. This action cannot be undone.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `token` (string) (required): Runner authentication token

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_runner_delete_registered

Delete a registered CI/CD runner by its ID. This action cannot be undone.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `runner_id` (integer) (required): Runner ID to delete

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_runner_disable_project

Remove a CI/CD runner from a project. The runner itself is not deleted.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `project_id` (string) (required): Project ID or URL-encoded path
- `runner_id` (integer) (required): Runner ID to remove from project

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_runner_enable_project

Assign an existing CI/CD runner to a project. Requires project_id and runner_id.

**Parameters:**

- `project_id` (string) (required): Project ID or URL-encoded path
- `runner_id` (integer) (required): Runner ID to assign

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_runner_get

Get detailed information about a specific CI/CD runner by its ID. Returns description, status, tags, access level, projects, and groups.

**Parameters:**

- `runner_id` (integer) (required): Runner ID

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_runner_jobs

List jobs processed by a specific CI/CD runner. Filter by status (running, success, failed, canceled). Supports sorting and pagination.

**Parameters:**

- `order_by` (string): Order by field: id (default)
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `runner_id` (integer) (required): Runner ID
- `sort` (string): Sort direction: asc, desc
- `status` (string): Job status filter: running, success, failed, canceled

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_runner_list

List owned CI/CD runners. Filter by type (instance_type, group_type, project_type), status (online, offline, stale, never_contacted), paused state, and tags.

**Parameters:**

- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `paused` (boolean): Filter by paused state
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `status` (string): Runner status filter: online, offline, stale, never_contacted
- `tag_list` (string): Comma-separated list of tags to filter by
- `type` (string): Runner type filter: instance_type, group_type, project_type

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_runner_list_all

List all CI/CD runners in the GitLab instance (admin). Filter by type, status, paused state, and tags.

**Parameters:**

- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `paused` (boolean): Filter by paused state
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `status` (string): Runner status filter: online, offline, stale, never_contacted
- `tag_list` (string): Comma-separated list of tags to filter by
- `type` (string): Runner type filter: instance_type, group_type, project_type

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_runner_list_group

List CI/CD runners available in a specific group. Filter by type, status, and tags.

**Parameters:**

- `group_id` (string) (required): Group ID or URL-encoded path
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `status` (string): Runner status filter: online, offline, stale, never_contacted
- `tag_list` (string): Comma-separated list of tags to filter by
- `type` (string): Runner type filter: instance_type, group_type, project_type

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_runner_list_managers

List all managers (executors) for a specific CI/CD runner. Returns system ID, version, platform, architecture, IP address, and status.

**Parameters:**

- `runner_id` (integer) (required): Runner ID

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_runner_list_project

List CI/CD runners available in a specific project. Filter by type, status, and tags.

**Parameters:**

- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `project_id` (string) (required): Project ID or URL-encoded path
- `status` (string): Runner status filter: online, offline, stale, never_contacted
- `tag_list` (string): Comma-separated list of tags to filter by
- `type` (string): Runner type filter: instance_type, group_type, project_type

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_runner_register

Register a new CI/CD runner with a registration token. Optionally set description, tags, access level, and timeout.

**Parameters:**

- `access_level` (string): Access level: not_protected, ref_protected
- `description` (string): Runner description
- `locked` (boolean): Lock runner to current project
- `maintenance_note` (string): Maintenance note
- `maximum_timeout` (integer): Maximum job timeout in seconds
- `paused` (boolean): Register in paused state
- `run_untagged` (boolean): Whether to run untagged jobs
- `tag_list` (array of strings): List of runner tags
- `token` (string) (required): Registration token

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_runner_remove

Remove a CI/CD runner by its ID. This action cannot be undone.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `runner_id` (integer) (required): Runner ID to remove

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_runner_reset_group_reg_token

Reset a group's runner registration token. Deprecated: scheduled for removal in GitLab 20.0.

**Parameters:**

- `group_id` (string) (required): Group ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_runner_reset_instance_reg_token

Reset the instance-level runner registration token. Deprecated: scheduled for removal in GitLab 20.0.

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_runner_reset_project_reg_token

Reset a project's runner registration token. Deprecated: scheduled for removal in GitLab 20.0.

**Parameters:**

- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_runner_reset_token

Reset the authentication token for a CI/CD runner. Returns the new token and expiry.

**Parameters:**

- `runner_id` (integer) (required): Runner ID

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_runner_update

Update a CI/CD runner's configuration. Modify description, paused state, tags, access level, maximum timeout, and maintenance note.

**Parameters:**

- `access_level` (string): Access level: not_protected, ref_protected
- `description` (string): Runner description
- `locked` (boolean): Whether runner is locked to current project
- `maintenance_note` (string): Maintenance note for the runner
- `maximum_timeout` (integer): Maximum job timeout in seconds
- `paused` (boolean): Pause/unpause the runner
- `run_untagged` (boolean): Whether to run untagged jobs
- `runner_id` (integer) (required): Runner ID
- `tag_list` (array of strings): List of runner tags

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_runner_verify

Verify a CI/CD runner authentication token. Returns success if the token is valid.

**Parameters:**

- `token` (string) (required): Runner authentication token to verify

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

### schedule (9 tools)

#### gitlab_schedule_all_group_storage_moves

Schedule repository storage moves for all groups on a storage shard (admin only).

**Parameters:**

- `destination_storage_name` (string): Name of the destination storage shard
- `source_storage_name` (string): Name of the source storage shard

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_schedule_all_project_storage_moves

Schedule repository storage moves for all projects on a storage shard (admin only).

**Parameters:**

- `destination_storage_name` (string): Name of the destination storage shard
- `source_storage_name` (string): Name of the source storage shard

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_schedule_all_snippet_storage_moves

Schedule repository storage moves for all snippets on a storage shard (admin only).

**Parameters:**

- `destination_storage_name` (string): Name of the destination storage shard
- `source_storage_name` (string): Name of the source storage shard

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_schedule_group_export

Schedule an asynchronous export of a group.

**Parameters:**

- `group_id` (string) (required): Group ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_schedule_group_relations_export

Schedule a new group relations export.

**Parameters:**

- `batched` (boolean): Whether to batch the export
- `group_id` (string) (required): The ID or URL-encoded path of the group

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_schedule_group_storage_move

Schedule a repository storage move for a group (admin only).

**Parameters:**

- `destination_storage_name` (string): Name of the destination storage shard
- `group_id` (integer) (required): Numeric ID of the group

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_schedule_project_export

Schedule an asynchronous export of a project. After scheduling, use gitlab_get_project_export_status to check progress.

**Parameters:**

- `description` (string): Override the project description in the export
- `project_id` (string) (required): Project ID or URL-encoded path
- `upload_http_method` (string): HTTP method to use for the upload (PUT or POST)
- `upload_url` (string): URL to upload the exported project to after export completes

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_schedule_project_storage_move

Schedule a repository storage move for a project (admin only).

**Parameters:**

- `destination_storage_name` (string): Name of the destination storage shard
- `project_id` (integer) (required): Numeric ID of the project

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_schedule_snippet_storage_move

Schedule a repository storage move for a snippet (admin only).

**Parameters:**

- `destination_storage_name` (string): Name of the destination storage shard
- `snippet_id` (integer) (required): Numeric ID of the snippet

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

### search (10 tools)

#### gitlab_search_code

Search for code (blobs) in GitLab. Scope is determined by which ID you provide: set project_id for project scope, group_id for group scope, or neither for global scope. Only one scope at a time. Returns matching file name, path, ref, and a content snippet with pagination.

**Parameters:**

- `group_id` (string): Group ID or URL-encoded path (optional)
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `project_id` (string): Project ID or URL-encoded path (optional)
- `query` (string) (required): Search query text (param 'query' not 'search')
- `ref` (string): Branch or tag name to search in (default: default branch)
- `search_type` (string): Search backend to request. Use 'basic' for GitLab's default search, 'advanced' for Elasticsearch/OpenSearch-backed search, or 'zoekt' for Zoekt-based search. The requested backend must be enabled on the GitLab instance.

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_search_commits

Search for commits by keyword. Searches within a project (project_id), a group (group_id), or globally. Returns matching commits with ID, title, author, date, and web URL with pagination.

**Parameters:**

- `group_id` (string): Group ID or URL-encoded path (optional)
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `project_id` (string): Project ID or URL-encoded path (optional)
- `query` (string) (required): Search query string
- `search_type` (string): Search backend to request. Use 'basic' for GitLab's default search, 'advanced' for Elasticsearch/OpenSearch-backed search, or 'zoekt' for Zoekt-based search. The requested backend must be enabled on the GitLab instance.

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_search_issues

Search for issues by keyword. Searches within a project (project_id), a group (group_id), or globally. Returns matching issues with title, state, labels, assignees, and web URL with pagination.

**Parameters:**

- `group_id` (string): Group ID or URL-encoded path (optional)
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `project_id` (string): Project ID or URL-encoded path (optional)
- `query` (string) (required): Search query text (param 'query' not 'search')
- `search_type` (string): Search backend to request. Use 'basic' for GitLab's default search, 'advanced' for Elasticsearch/OpenSearch-backed search, or 'zoekt' for Zoekt-based search. The requested backend must be enabled on the GitLab instance.

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_search_merge_requests

Search for merge requests by keyword. Searches within a project (project_id), a group (group_id), or globally. Returns matching merge requests with title, state, author, labels, and web URL with pagination.

**Parameters:**

- `group_id` (string): Group ID or URL-encoded path (optional)
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `project_id` (string): Project ID or URL-encoded path (optional)
- `query` (string) (required): Search query text (param 'query' not 'search')
- `search_type` (string): Search backend to request. Use 'basic' for GitLab's default search, 'advanced' for Elasticsearch/OpenSearch-backed search, or 'zoekt' for Zoekt-based search. The requested backend must be enabled on the GitLab instance.

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_search_milestones

Search for milestones by keyword. Searches within a project (project_id), a group (group_id), or globally. Returns matching milestones with title, state, dates, and web URL with pagination.

**Parameters:**

- `group_id` (string): Group ID or URL-encoded path (optional)
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `project_id` (string): Project ID or URL-encoded path (optional)
- `query` (string) (required): Search query string
- `search_type` (string): Search backend to request. Use 'basic' for GitLab's default search, 'advanced' for Elasticsearch/OpenSearch-backed search, or 'zoekt' for Zoekt-based search. The requested backend must be enabled on the GitLab instance.

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_search_notes

Search for notes (comments) within a GitLab project by keyword. Returns matching notes with body, author, notable type/ID, and timestamps with pagination.

**Parameters:**

- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `project_id` (string) (required): Project ID or URL-encoded path
- `query` (string) (required): Search query string
- `search_type` (string): Search backend to request. Use 'basic' for GitLab's default search, 'advanced' for Elasticsearch/OpenSearch-backed search, or 'zoekt' for Zoekt-based search. The requested backend must be enabled on the GitLab instance.

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_search_projects

Search for projects by keyword. Searches within a group (group_id) or globally. Returns matching projects with name, path, visibility, and web URL with pagination.

**Parameters:**

- `group_id` (string): Group ID or URL-encoded path (optional — omit for global search)
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `query` (string) (required): Search query string
- `search_type` (string): Search backend to request. Use 'basic' for GitLab's default search, 'advanced' for Elasticsearch/OpenSearch-backed search, or 'zoekt' for Zoekt-based search. The requested backend must be enabled on the GitLab instance.

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_search_snippets

Search for snippet titles globally in GitLab. Returns matching snippets with title, file name, description, author, and web URL with pagination.

**Parameters:**

- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `query` (string) (required): Search query string
- `search_type` (string): Search backend to request. Use 'basic' for GitLab's default search, 'advanced' for Elasticsearch/OpenSearch-backed search, or 'zoekt' for Zoekt-based search. The requested backend must be enabled on the GitLab instance.

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_search_users

Search for users by keyword. Searches within a project (project_id), a group (group_id), or globally. Returns matching users with username, name, state, and web URL with pagination.

**Parameters:**

- `group_id` (string): Group ID or URL-encoded path (optional)
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `project_id` (string): Project ID or URL-encoded path (optional)
- `query` (string) (required): Search query string
- `search_type` (string): Search backend to request. Use 'basic' for GitLab's default search, 'advanced' for Elasticsearch/OpenSearch-backed search, or 'zoekt' for Zoekt-based search. The requested backend must be enabled on the GitLab instance.

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_search_wiki

Search for wiki blobs by keyword. Searches within a project (project_id), a group (group_id), or globally. Returns matching wiki pages with title, slug, content, and format with pagination.

**Parameters:**

- `group_id` (string): Group ID or URL-encoded path (optional)
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `project_id` (string): Project ID or URL-encoded path (optional)
- `query` (string) (required): Search query string
- `search_type` (string): Search backend to request. Use 'basic' for GitLab's default search, 'advanced' for Elasticsearch/OpenSearch-backed search, or 'zoekt' for Zoekt-based search. The requested backend must be enabled on the GitLab instance.

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

### server (1 tools)

#### gitlab_server_status

Check MCP server health and GitLab connectivity. Returns server version, author, department, repository, GitLab version, authentication status, current user, and response time. Use this to diagnose connection issues.

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

### set (6 tools)

#### gitlab_set_custom_attribute

Set (create/update) a custom attribute for a user, group, or project (admin). Params: resource_type (required), resource_id (required), key (required), value (required).

**Parameters:**

- `key` (string) (required): Attribute key
- `resource_id` (integer) (required): ID of the resource
- `resource_type` (string) (required): Resource type: user, group, or project
- `value` (string) (required): Attribute value

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_set_feature_flag

Set or create a feature flag (admin). Requires name and value. Supports scoping to user, group, project, namespace, or repository.

**Parameters:**

- `feature_group` (string): Feature group name
- `force` (boolean): Force the change even if the flag is read-only
- `group` (string): GitLab group path
- `key` (string): Gate key (percentage_of_actors or percentage_of_time)
- `name` (string) (required): Feature flag name
- `namespace` (string): GitLab namespace path
- `project` (string): GitLab project path (namespace/project)
- `repository` (string): GitLab repository path
- `user` (string): GitLab username
- `value` (any) (required): Value to set (true, false, integer percentage, or string)

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_set_jira_integration

Configure the Jira integration for a project. Sets up the connection to a Jira instance with URL, credentials, and event triggers.

**Parameters:**

- `active` (boolean): Enable or disable the integration
- `api_url` (string): Jira API URL (overrides base URL)
- `comment_on_event_enabled` (boolean): Add comments on Jira issues for events
- `commit_events` (boolean): Trigger on commit events
- `issues_enabled` (boolean): Enable Jira issues integration
- `jira_auth_type` (integer): Jira auth type (0=basic, 1=token)
- `jira_issue_prefix` (string): Jira issue key prefix
- `jira_issue_regex` (string): Custom regex for Jira issue keys
- `jira_issue_transition_automatic` (boolean): Auto-transition Jira issues
- `jira_issue_transition_id` (string): Jira transition ID
- `merge_requests_events` (boolean): Trigger on merge request events
- `password` (string): Jira password or API token
- `project_id` (string) (required): Project ID or URL-encoded path
- `project_keys` (array of strings): Jira project keys to restrict
- `url` (string) (required): Jira instance base URL
- `use_inherited_settings` (boolean): Use inherited settings from group
- `username` (string): Jira username

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_set_project_mr_external_status_check_status

Set the status of an external status check for a project merge request. Requires project_id, merge_request_iid, sha, external_status_check_id, and status.

**Parameters:**

- `external_status_check_id` (integer) (required): External status check ID to update
- `merge_request_iid` (integer) (required): Merge request internal ID
- `project_id` (string) (required): Project ID or URL-encoded path
- `sha` (string) (required): Head SHA of the merge request source branch
- `status` (string) (required): Status value (e.g. passed, failed)

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_set_system_hook_url_variable

Create or update one URL variable for an instance system hook. Returns: a success status and message naming the variable key. See also: gitlab_edit_system_hook, gitlab_get_system_hook.

**Parameters:**

- `id` (integer) (required): System hook ID
- `key` (string) (required): URL variable key name
- `value` (string) (required): URL variable value

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_set_user_status

Set the status of the currently authenticated GitLab user. Supports setting emoji, message, availability (not_set/busy), and auto-clear duration.

**Parameters:**

- `availability` (string): The availability: not_set or busy
- `clear_status_after` (string): Duration after which to clear status: 30_minutes | 3_hours | 8_hours | 1_day | 3_days | 7_days | 30_days
- `emoji` (string): The emoji to set for the status (e.g. coffee or speech_balloon)
- `message` (string): The status message text

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

### show (1 tools)

#### gitlab_show_secure_file

Show details of a CI/CD secure file.

**Parameters:**

- `file_id` (integer) (required): Secure file ID
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

### snippet (22 tools)

#### gitlab_snippet_content

Get the raw content of a personal snippet.

**Parameters:**

- `snippet_id` (integer) (required): Snippet ID

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_snippet_create

Create a new personal snippet. Use 'files' for multi-file snippets or 'file_name'+'content' for single-file.

**Parameters:**

- `content` (string): Snippet content (single-file, deprecated in favor of files)
- `description` (string): Snippet description
- `file_name` (string): File name (single-file snippet, deprecated in favor of files)
- `files` (array of objects): Files to include in the snippet
- `title` (string) (required): Snippet title
- `visibility` (string): Visibility: private, internal, or public; defaults to private when omitted

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_snippet_delete

Delete a personal snippet. This action cannot be undone.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `snippet_id` (integer) (required): Snippet ID

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_snippet_emoji_create

Add an award emoji reaction to a project snippet.

**Parameters:**

- `name` (string) (required): Emoji name without colons (e.g. thumbsup)
- `project_id` (string) (required): Project ID or URL-encoded path
- `snippet_id` (integer) (required): Snippet ID

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_snippet_emoji_delete

Delete an award emoji from a project snippet.

**Parameters:**

- `award_id` (integer) (required): Award emoji ID
- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `project_id` (string) (required): Project ID or URL-encoded path
- `snippet_id` (integer) (required): Snippet ID

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_snippet_emoji_get

Get a single award emoji on a project snippet.

**Parameters:**

- `award_id` (integer) (required): Award emoji ID
- `project_id` (string) (required): Project ID or URL-encoded path
- `snippet_id` (integer) (required): Snippet ID

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_snippet_emoji_list

List all award emoji on a project snippet.

**Parameters:**

- `page` (integer): Page number for pagination (default 1)
- `per_page` (integer): Number of items per page (default 20, max 100)
- `project_id` (string) (required): Project ID or URL-encoded path
- `snippet_id` (integer) (required): Snippet ID

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_snippet_explore

List all public snippets on the GitLab instance.

**Parameters:**

- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_snippet_file_content

Get the raw content of a specific file in a snippet by ref and filename.

**Parameters:**

- `file_name` (string) (required): File name to retrieve
- `ref` (string) (required): Git ref (branch, tag, or commit SHA)
- `snippet_id` (integer) (required): Snippet ID

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_snippet_get

Get a single personal snippet by ID.

**Parameters:**

- `snippet_id` (integer) (required): Snippet ID

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_snippet_list

List all snippets for the current authenticated user.

**Parameters:**

- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_snippet_list_all

List all snippets across the GitLab instance (admin endpoint).

**Parameters:**

- `created_after` (string): Filter snippets created after (ISO 8601)
- `created_before` (string): Filter snippets created before (ISO 8601)
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_snippet_note_create

Add a comment (note) to a GitLab project snippet. Supports Markdown formatting.

**Parameters:**

- `body` (string) (required): Note body (Markdown supported)
- `project_id` (string) (required): Project ID or URL-encoded path
- `snippet_id` (integer) (required): Snippet ID

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_snippet_note_delete

Permanently delete a comment from a GitLab project snippet. Only the note author or a project maintainer can delete a note.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `note_id` (integer) (required): ID of the note to delete
- `project_id` (string) (required): Project ID or URL-encoded path
- `snippet_id` (integer) (required): Snippet ID

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_snippet_note_emoji_create

Add an award emoji reaction to a project snippet note.

**Parameters:**

- `name` (string) (required): Emoji name without colons (e.g. thumbsup)
- `note_id` (integer) (required): Note ID
- `project_id` (string) (required): Project ID or URL-encoded path
- `snippet_id` (integer) (required): Snippet ID

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_snippet_note_emoji_delete

Delete an award emoji from a project snippet note.

**Parameters:**

- `award_id` (integer) (required): Award emoji ID
- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `note_id` (integer) (required): Note ID
- `project_id` (string) (required): Project ID or URL-encoded path
- `snippet_id` (integer) (required): Snippet ID

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_snippet_note_emoji_get

Get a single award emoji on a project snippet note.

**Parameters:**

- `award_id` (integer) (required): Award emoji ID
- `note_id` (integer) (required): Note ID
- `project_id` (string) (required): Project ID or URL-encoded path
- `snippet_id` (integer) (required): Snippet ID

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_snippet_note_emoji_list

List all award emoji on a project snippet note.

**Parameters:**

- `note_id` (integer) (required): Note ID
- `page` (integer): Page number for pagination (default 1)
- `per_page` (integer): Number of items per page (default 20, max 100)
- `project_id` (string) (required): Project ID or URL-encoded path
- `snippet_id` (integer) (required): Snippet ID

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_snippet_note_get

Get a single comment (note) from a GitLab project snippet by its note ID, including author, timestamps, body, and system flag.

**Parameters:**

- `note_id` (integer) (required): ID of the note to retrieve
- `project_id` (string) (required): Project ID or URL-encoded path
- `snippet_id` (integer) (required): Snippet ID

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_snippet_note_list

List all comments (notes) on a GitLab project snippet. Supports ordering by created_at or updated_at, sort direction, and pagination.

**Parameters:**

- `order_by` (string): Order by field (created_at, updated_at)
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `project_id` (string) (required): Project ID or URL-encoded path
- `snippet_id` (integer) (required): Snippet ID
- `sort` (string): Sort direction (asc, desc)

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_snippet_note_update

Edit the body text of an existing comment on a GitLab project snippet. Only the note author or a project maintainer can update a note.

**Parameters:**

- `body` (string) (required): Updated note body (Markdown supported)
- `note_id` (integer) (required): ID of the note to update
- `project_id` (string) (required): Project ID or URL-encoded path
- `snippet_id` (integer) (required): Snippet ID

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_snippet_update

Update an existing personal snippet.

**Parameters:**

- `content` (string): New content (single-file, deprecated in favor of files)
- `description` (string): New description
- `file_name` (string): New file name (single-file, deprecated in favor of files)
- `files` (array of objects): File operations to apply
- `snippet_id` (integer) (required): Snippet ID
- `title` (string): New title
- `visibility` (string): New visibility: private, internal, or public

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

### start (1 tools)

#### gitlab_start_bulk_import

Start a new group or project bulk import migration (admin). Requires source GitLab URL, access token, and entities to migrate.

**Parameters:**

- `access_token` (string) (required): Personal access token for source instance
- `entities` (array of objects) (required): List of entities to migrate
- `url` (string) (required): Source GitLab instance URL

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

### subgroups (1 tools)

#### gitlab_subgroups_list

List descendant subgroups of a GitLab group. Returns each subgroup's name, path, full path, description, visibility, and parent ID. Supports search filter and pagination.

**Parameters:**

- `all_available` (boolean): Show all subgroups accessible by the authenticated user
- `group_id` (string) (required): Group ID or URL-encoded path
- `min_access_level` (integer): Minimum access level (10=Guest,20=Reporter,30=Developer,40=Maintainer,50=Owner)
- `order_by` (string): Order subgroups by field (name, path, id, similarity)
- `owned` (boolean): Limit to subgroups explicitly owned by the authenticated user
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `search` (string): Filter subgroups by name or path
- `sort` (string): Sort direction (asc, desc)
- `statistics` (boolean): Include group statistics (storage, counts)

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

### summarize (2 tools)

#### gitlab_summarize_issue

Summarize a GitLab issue discussion using LLM-assisted analysis via MCP sampling. Fetches issue details and all notes, then requests LLM summary of key decisions and action items. Requires the MCP client to support the sampling capability (human-in-the-loop approval).

**Parameters:**

- `issue_iid` (integer) (required): Issue internal ID
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_summarize_mr_review

Summarize a GitLab merge request review using LLM-assisted analysis via MCP sampling. Fetches MR details, discussions, and approval state, then requests LLM summary of reviewer feedback, unresolved threads, and action items. Requires the MCP client to support the sampling capability (human-in-the-loop approval).

**Parameters:**

- `merge_request_iid` (integer) (required): Merge request internal ID
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

### tag (9 tools)

#### gitlab_tag_create

Create a Git tag in a GitLab project pointing to a ref (branch, tag, or SHA). Optionally include an annotation message for an annotated tag. Returns: tag name, target, message, protected status, and commit SHA. See also: gitlab_release_create, gitlab_tag_list.

**Parameters:**

- `message` (string): Creates an annotated tag with this message
- `project_id` (string) (required): Project ID or URL-encoded path
- `ref` (string) (required): Commit SHA, branch name, or another tag to create the tag from
- `tag_name` (string) (required): Name of the tag

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_tag_delete

Delete a Git tag from a GitLab project. If a release is associated with the tag, the release is also removed.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `project_id` (string) (required): Project ID or URL-encoded path
- `tag_name` (string) (required): Name of the tag to delete

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_tag_get

Retrieve detailed information about a single Git tag. Returns tag name, target commit SHA, annotation message, and protection status.

**Parameters:**

- `project_id` (string) (required): Project ID or URL-encoded path
- `tag_name` (string) (required): Tag name to retrieve

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_tag_get_protected

Get a single protected tag by name. Returns: tag name and create access levels (access_level, user_id, group_id per entry). See also: gitlab_tag_list_protected, gitlab_tag_protect.

**Parameters:**

- `project_id` (string) (required): Project ID or URL-encoded path
- `tag_name` (string) (required): Name of the protected tag

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_tag_get_signature

Get the X.509 signature of a tag. Returns signature type, verification status, and certificate details.

**Parameters:**

- `project_id` (string) (required): Project ID or URL-encoded path
- `tag_name` (string) (required): Tag name to retrieve signature for

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_tag_list

List Git tags in a GitLab project. Supports search by name pattern, ordering by name/updated/version, and sort direction (asc/desc). Returns paginated results.

**Parameters:**

- `order_by` (string): Order tags by field (name, updated)
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `project_id` (string) (required): Project ID or URL-encoded path
- `search` (string): Search query to filter tags by name
- `sort` (string): Sort direction (asc, desc)

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_tag_list_protected

List protected tags in a GitLab project with their create access levels. Returns paginated results.

**Parameters:**

- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_tag_protect

Protect a repository tag or wildcard pattern. Optionally set create access level or granular permissions (user, group, deploy key). Returns: protected tag name and create access levels. See also: gitlab_tag_unprotect, gitlab_tag_list_protected.

**Parameters:**

- `allowed_to_create` (array of objects): Granular create permissions (user_id, group_id, deploy_key_id, access_level)
- `create_access_level` (integer): Access level allowed to create (0=No access, 30=Developer, 40=Maintainer)
- `project_id` (string) (required): Project ID or URL-encoded path
- `tag_name` (string) (required): Tag name or wildcard pattern (e.g. 'v*')

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_tag_unprotect

Remove protection from a repository tag. The tag itself is not deleted.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `project_id` (string) (required): Project ID or URL-encoded path
- `tag_name` (string) (required): Name of the protected tag to unprotect

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

### test (1 tools)

#### gitlab_test_system_hook

Test a system hook by ID (admin). Triggers a test event and returns the result.

**Parameters:**

- `id` (integer) (required): System hook ID to test

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

### todo (3 tools)

#### gitlab_todo_list

List pending to-do items for the authenticated user. Returns paginated results with action, target, type, and state. Use page and per_page for pagination.

**Parameters:**

- `action` (string): Filter by action: assigned, mentioned, build_failed, marked, approval_required, directly_addressed
- `author_id` (integer): Filter by author user ID
- `group_id` (integer): Filter by group ID
- `page` (integer): Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
- `per_page` (integer): Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
- `project_id` (integer): Filter by project ID
- `state` (string): Filter by state: pending or done (default: pending)
- `type` (string): Filter by target type: Issue, MergeRequest, DesignManagement::Design, AlertManagement::Alert

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_todo_mark_all_done

Mark ALL pending to-do items as done for the authenticated user. This affects all pending to-dos, not just those on a specific project.

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_todo_mark_done

Mark a single pending to-do item as done by its ID. Use gitlab_todo_list to find to-do item IDs first.

**Parameters:**

- `id` (integer) (required): ID of the to-do item to mark as done

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

### track (2 tools)

#### gitlab_track_event

Track a single usage event. Params: event (required), send_to_snowplow, namespace_id, project_id.

**Parameters:**

- `event` (string) (required): Event name to track
- `namespace_id` (integer): Namespace ID
- `project_id` (integer): Project ID
- `send_to_snowplow` (boolean): Whether to send event to Snowplow

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_track_events

Track multiple usage events in batch. Params: events (required, array of event objects).

**Parameters:**

- `events` (array of objects) (required): Array of events to track

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

### unban (1 tools)

#### gitlab_unban_user

Unban a previously banned GitLab user (admin only).

**Parameters:**

- `user_id` (integer) (required): The ID of the user

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

### unblock (1 tools)

#### gitlab_unblock_user

Unblock a previously blocked GitLab user, restoring login and API access (admin only).

**Parameters:**

- `user_id` (integer) (required): The ID of the user

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

### unlock (1 tools)

#### gitlab_unlock_terraform_state

Unlock a Terraform state

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `name` (string) (required): Terraform state name
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

### update (23 tools)

#### gitlab_update_alert_metric_image

Update a metric image for a GitLab alert.

**Parameters:**

- `alert_iid` (integer) (required): Alert IID
- `image_id` (integer) (required): Metric image ID
- `project_id` (string) (required): Project ID or URL-encoded path
- `url` (string) (required): URL to link the metric image to
- `url_text` (string) (required): Text for the URL link

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_update_appearance

Update application appearance (title, description, messages, PWA settings). Requires admin access.

**Parameters:**

- `description` (string): Instance description on sign-in page
- `email_header_and_footer_enabled` (boolean): Enable header and footer in emails
- `footer_message` (string): Message in footer bar
- `header_message` (string): Message in header bar
- `member_guidelines` (string): Markdown guidelines for adding members
- `message_background_color` (string): Background color for header/footer messages (hex)
- `message_font_color` (string): Font color for header/footer messages (hex)
- `new_project_guidelines` (string): Markdown guidelines for new projects
- `profile_image_guidelines` (string): Markdown guidelines for profile images
- `pwa_description` (string): PWA description
- `pwa_name` (string): Progressive Web App name
- `pwa_short_name` (string): PWA short name
- `title` (string): Application title displayed in the header

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_update_broadcast_message

Update a broadcast message. Requires admin access.

**Parameters:**

- `broadcast_type` (string): Type: banner or notification
- `dismissable` (boolean): Whether message can be dismissed
- `ends_at` (string): End time in ISO 8601 format
- `font` (string): Font for the message
- `id` (integer) (required): Broadcast message ID
- `message` (string): Message text. Supports Markdown.
- `starts_at` (string): Start time in ISO 8601 format
- `target_access_levels` (array of integers): Access levels to target
- `target_path` (string): Target path to show message on
- `theme` (string): Theme color

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_update_commit_discussion_note

Update an existing note in a commit discussion thread.

**Parameters:**

- `body` (string) (required): Updated note body
- `commit_sha` (string) (required): Commit SHA
- `discussion_id` (string) (required): Discussion ID
- `note_id` (integer) (required): Note ID to update
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_update_compliance_policy_settings

Update the admin-level compliance policy settings for the GitLab instance.

**Parameters:**

- `csp_namespace_id` (integer): Namespace ID for the compliance security policy project

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_update_epic_discussion_note

Update an existing note in an epic discussion thread via the Work Items GraphQL API.

**Parameters:**

- `body` (string) (required): Updated note body
- `epic_iid` (integer) (required): Epic IID within the group
- `full_path` (string) (required): Full path of the group (e.g. my-group)
- `note_id` (integer) (required): Note ID to update

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_update_freeze_period

Update a deploy freeze period's cron schedule or timezone.

**Parameters:**

- `cron_timezone` (string): Timezone for cron expressions
- `freeze_end` (string): Cron expression for freeze end
- `freeze_period_id` (integer) (required): Freeze period ID
- `freeze_start` (string): Cron expression for freeze start
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_update_group_mr_approval_settings

Update group-level merge request approval settings: control author/committer approval, approver list overrides, approval retention on push, and reauthentication. Only include settings you want to change.

**Parameters:**

- `allow_author_approval` (boolean): Allow merge request authors to approve their own MRs
- `allow_committer_approval` (boolean): Allow committers to approve MRs they contributed to
- `allow_overrides_approver_list_per_mr` (boolean): Allow overriding approver list per merge request
- `group_id` (string) (required): Group ID or URL-encoded path
- `require_reauthentication_to_approve` (boolean): Require password re-entry to approve
- `retain_approvals_on_push` (boolean): Retain approvals when new commits are pushed

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_update_group_scim_identity

Update a SCIM identity for a GitLab group. Changes the external UID.

**Parameters:**

- `extern_uid` (string) (required): New external UID value
- `group_id` (string) (required): Group ID or URL-encoded path
- `uid` (string) (required): SCIM external UID of the user

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_update_group_secret_push_protection

Enable or disable secret push protection for a GitLab group. Optionally exclude specific projects.

**Parameters:**

- `group_id` (string) (required): Group ID or URL-encoded path
- `projects_to_exclude` (array of integers): Project IDs to exclude from group-level protection
- `secret_push_protection_enabled` (boolean) (required): Enable or disable secret push protection

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_update_issue_discussion_note

Update an existing note in an issue discussion thread.

**Parameters:**

- `body` (string) (required): Updated note body
- `discussion_id` (string) (required): Discussion ID
- `issue_iid` (integer) (required): Issue internal ID
- `note_id` (integer) (required): Note ID to update
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_update_package_protection_rule

Update an existing package protection rule for a GitLab project.

**Parameters:**

- `minimum_access_level_for_delete` (string): Minimum access level for delete (maintainer, owner, admin)
- `minimum_access_level_for_push` (string): Minimum access level for push (maintainer, owner, admin)
- `package_name_pattern` (string): Package name pattern with optional wildcards
- `package_type` (string): Package type (npm, pypi, maven, generic, etc.)
- `project_id` (string) (required): Project ID or URL-encoded path
- `rule_id` (integer) (required): Package protection rule ID

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_update_project_external_status_check

Update an external status check for a project. Requires project_id and check_id. Optionally update name, external_url, shared_secret, and protected_branch_ids.

**Parameters:**

- `check_id` (integer) (required): External status check ID to update
- `external_url` (string): Updated external URL
- `name` (string): Updated name
- `project_id` (string) (required): Project ID or URL-encoded path
- `protected_branch_ids` (array of integers): Updated protected branch IDs
- `shared_secret` (string): Updated shared secret for HMAC verification

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_update_project_mr_approval_settings

Update project-level merge request approval settings: control author/committer approval, approver list overrides, approval retention on push, selective code owner removals, and reauthentication. Only include settings you want to change.

**Parameters:**

- `allow_author_approval` (boolean): Allow merge request authors to approve their own MRs
- `allow_committer_approval` (boolean): Allow committers to approve MRs they contributed to
- `allow_overrides_approver_list_per_mr` (boolean): Allow overriding approver list per merge request
- `project_id` (string) (required): Project ID or URL-encoded path
- `require_reauthentication_to_approve` (boolean): Require password re-entry to approve
- `retain_approvals_on_push` (boolean): Retain approvals when new commits are pushed
- `selective_code_owner_removals` (boolean): Only remove Code Owner approvals for changed files (project-only)

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_update_project_secret_push_protection

Enable or disable secret push protection for a GitLab project.

**Parameters:**

- `project_id` (string) (required): Project ID or URL-encoded path
- `secret_push_protection_enabled` (boolean) (required): Enable or disable secret push protection

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_update_project_security_attributes

Add or remove GitLab security attributes on a project via GraphQL. Requires Premium or Ultimate. Returns: project security attribute assignments. See also: gitlab_security_attribute, gitlab_project. API docs: https://docs.gitlab.com/api/graphql/reference/#mutationsecurityattributeprojectupdate

**Parameters:**

- `add_attribute_ids` (array of integers): Security attribute IDs to add
- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `project_id` (integer) (required): Numeric project ID
- `remove_attribute_ids` (array of integers): Security attribute IDs to remove

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_update_repository_submodule

Update an existing submodule reference in a GitLab repository to point to a new commit SHA.

**Parameters:**

- `branch` (string) (required): Branch name to commit the update to
- `commit_message` (string): Custom commit message (optional)
- `commit_sha` (string) (required): Full commit SHA to update the submodule to
- `project_id` (string) (required): Project ID or URL-encoded path
- `submodule` (string) (required): URL-encoded full path to the submodule

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_update_security_attribute

Update a GitLab security attribute name, description, or color via GraphQL. Requires Premium or Ultimate. Returns: updated security attribute metadata. See also: gitlab_security_category, gitlab_project, gitlab_group. API docs: https://docs.gitlab.com/api/graphql/reference/#mutationsecurityattributeupdate

**Parameters:**

- `attribute_id` (integer) (required): Numeric security attribute ID
- `color` (string): New security attribute color as a hex code (e.g. #FF0000)
- `description` (string): New security attribute description
- `name` (string): New security attribute name

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_update_security_category

Update a GitLab security category name or description via GraphQL. Requires Premium or Ultimate. Returns: updated security category. See also: gitlab_security_attribute, gitlab_group, gitlab_project. API docs: https://docs.gitlab.com/api/graphql/reference/#mutationsecuritycategoryupdate

**Parameters:**

- `category_id` (integer) (required): Numeric security category ID
- `description` (string): New security category description
- `name` (string): New security category name
- `namespace_id` (integer) (required): Numeric namespace ID

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_update_settings

Update application settings. Requires admin access. Pass settings as key-value map with snake_case keys matching GitLab API (e.g. signup_enabled, default_project_visibility).

**Parameters:**

- `settings` (object) (required): Map of setting_name to new value. Use snake_case keys matching GitLab API fields (e.g. signup_enabled, default_project_visibility, max_artifacts_size).

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_update_snippet_discussion_note

Update an existing note in a snippet discussion thread.

**Parameters:**

- `body` (string) (required): Updated note body
- `discussion_id` (string) (required): Discussion ID
- `note_id` (integer) (required): Note ID to update
- `project_id` (string) (required): Project ID or URL-encoded path
- `snippet_id` (integer) (required): Snippet ID

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_update_topic

Update a project topic. Requires admin access.

**Parameters:**

- `description` (string): New topic description
- `name` (string): New topic name
- `title` (string): New topic title
- `topic_id` (integer) (required): Topic ID

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_update_work_item

Update an existing work item by IID. Supports changing title, state (CLOSE/REOPEN), description, assignees, milestone, labels (add/remove), dates, weight, health status, iteration, color, and status (TODO/IN_PROGRESS/DONE/WONT_DO/DUPLICATE). Experimental: the Work Items API may introduce breaking changes between minor versions.

**Parameters:**

- `add_label_ids` (array of integers): Global IDs of labels to add
- `assignee_ids` (array of integers): Global IDs of assignees (empty array to remove all)
- `color` (string): Color hex code (e.g. #fefefe)
- `crm_contact_ids` (array of integers): CRM contact IDs (empty array to remove all)
- `description` (string): New description
- `due_date` (string): Due date (YYYY-MM-DD)
- `full_path` (string) (required): Full path of the project or group (e.g. my-group/my-project)
- `health_status` (string): Health status (onTrack/needsAttention/atRisk)
- `iteration_id` (integer): Global ID of the iteration
- `milestone_id` (integer): Global ID of the milestone
- `parent_id` (integer): Global ID of the parent work item
- `remove_label_ids` (array of integers): Global IDs of labels to remove
- `start_date` (string): Start date (YYYY-MM-DD)
- `state_event` (string): State event: CLOSE or REOPEN
- `status` (string): Work item status: TODO, IN_PROGRESS, DONE, WONT_DO, or DUPLICATE
- `title` (string): New title
- `weight` (integer): Weight of the work item
- `work_item_iid` (integer) (required): Work item IID

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

### upload (1 tools)

#### gitlab_upload_alert_metric_image

Upload a metric image for a GitLab alert. Provide either file_path (absolute path to a local image file) or content_base64 (base64-encoded content), not both.

**Parameters:**

- `alert_iid` (integer) (required): Alert IID
- `content_base64` (string): Base64-encoded image content. Only one of file_path or content_base64 should be provided.
- `file_path` (string): Absolute path to a local image file on the MCP server filesystem. Alternative to content_base64. Only one of file_path or content_base64 should be provided.
- `filename` (string) (required): Image filename
- `project_id` (string) (required): Project ID or URL-encoded path
- `url` (string) (required): URL to link the metric image to
- `url_text` (string) (required): Text for the URL link

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

### user (2 tools)

#### gitlab_user_contribution_event_list

List contribution events for the authenticated user. Supports filtering by action type, target type, date range, sort order, scope, and pagination.

**Parameters:**

- `action` (string): Filter by action type (created, updated, closed, reopened, pushed, commented, merged, joined, left, destroyed, expired)
- `after` (string): Return events after this date (YYYY-MM-DD)
- `before` (string): Return events before this date (YYYY-MM-DD)
- `page` (integer): Page number for pagination (default 1)
- `per_page` (integer): Number of items per page (default 20, max 100)
- `scope` (string): Include events from all projects (all) or only user's projects
- `sort` (string): Sort order (asc or desc)
- `target_type` (string): Filter by target type (issue, milestone, merge_request, note, project, snippet, user)

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_user_current

Retrieve information about the currently authenticated GitLab user. Returns user ID, username, name, email, state, avatar URL, web URL, and admin status. Useful for confirming identity and permissions.

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

### vulnerability (1 tools)

#### gitlab_vulnerability_severity_count

Get vulnerability severity counts for a project (requires Ultimate/Premium). Returns: counts per severity level (critical, high, medium, low, info, unknown) and total. See also: gitlab_list_vulnerabilities, gitlab_pipeline_security_summary.

**Parameters:**

- `project_path` (string) (required): Full path of the project (e.g. my-group/my-project)

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

### wiki (6 tools)

#### gitlab_wiki_create

Create a new wiki page in a GitLab project. Supports Markdown (default), RDoc, AsciiDoc, and Org formats.

**Parameters:**

- `content` (string) (required): Content of the wiki page (Markdown, RDoc, AsciiDoc, or Org)
- `format` (string): Content format: markdown (default), rdoc, asciidoc, or org
- `project_id` (string) (required): Project ID or URL-encoded path
- `title` (string) (required): Title of the wiki page

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

#### gitlab_wiki_delete

Delete a wiki page by slug. This action cannot be undone. Use gitlab_wiki_list to find available page slugs.

**Parameters:**

- `confirm` (boolean): Set true to explicitly confirm this destructive action instead of relying on MCP elicitation.
- `project_id` (string) (required): Project ID or URL-encoded path
- `slug` (string) (required): URL-encoded slug of the wiki page to delete

Annotations: readOnly=false, destructive=true, idempotent=true, openWorld=true

#### gitlab_wiki_get

Get a single wiki page by slug. Set render_html=true to get HTML-rendered content. Set version to a commit SHA to retrieve a specific historical version of the page. Use gitlab_wiki_list to discover available page slugs.

**Parameters:**

- `project_id` (string) (required): Project ID or URL-encoded path
- `render_html` (boolean): Return HTML-rendered content instead of raw format
- `slug` (string) (required): URL-encoded slug of the wiki page (e.g. 'my-page')
- `version` (string): Wiki page version SHA to retrieve a specific revision

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_wiki_list

List all wiki pages in a GitLab project. Optionally include page content by setting with_content=true.

**Parameters:**

- `project_id` (string) (required): Project ID or URL-encoded path
- `with_content` (boolean): Include page content in the response

Annotations: readOnly=true, destructive=false, idempotent=true, openWorld=true

#### gitlab_wiki_update

Update an existing wiki page by slug. Can change the title, content, and format. At least one of title, content, or format must be provided.

**Parameters:**

- `content` (string): New content for the wiki page
- `format` (string): Content format: markdown, rdoc, asciidoc, or org
- `project_id` (string) (required): Project ID or URL-encoded path
- `slug` (string) (required): URL-encoded slug of the wiki page to update
- `title` (string): New title for the wiki page

Annotations: readOnly=false, destructive=false, idempotent=true, openWorld=true

#### gitlab_wiki_upload_attachment

Upload a file attachment to a project wiki. Provide file content as base64 or a local file path.

**Parameters:**

- `branch` (string): Branch to upload the attachment to
- `content_base64` (string): Base64-encoded file content. Provide either content_base64 or file_path
- `file_path` (string): Absolute path to a local file. Provide either file_path or content_base64
- `filename` (string) (required): Name of the file to upload (e.g. diagram.png)
- `project_id` (string) (required): Project ID or URL-encoded path

Annotations: readOnly=false, destructive=false, idempotent=false, openWorld=true

## Resources

46 resources providing read-only access to GitLab data.

### groups

- **URI**: `gitlab://groups`
- **MIME**: application/json
- **Description**: List all GitLab groups accessible to the authenticated user. Returns each group's ID, name, full path, description, visibility level, and web URL.

### code_review

- **URI**: `gitlab://guides/code-review`
- **MIME**: text/markdown
- **Description**: Code review checklist and best practices for GitLab merge request reviews.

### conventional_commits

- **URI**: `gitlab://guides/conventional-commits`
- **MIME**: text/markdown
- **Description**: Conventional commit message format and examples for consistent Git history.

### git_workflow

- **URI**: `gitlab://guides/git-workflow`
- **MIME**: text/markdown
- **Description**: Best practices for Git branching strategies with GitLab (feature branches, trunk-based, GitLab Flow).

### merge_request_hygiene

- **URI**: `gitlab://guides/merge-request-hygiene`
- **MIME**: text/markdown
- **Description**: Guidelines for creating and reviewing high-quality merge requests.

### pipeline_troubleshooting

- **URI**: `gitlab://guides/pipeline-troubleshooting`
- **MIME**: text/markdown
- **Description**: Common GitLab CI/CD pipeline issues and how to diagnose and fix them.

### tool_manifest

- **URI**: `gitlab://tools`
- **MIME**: application/json
- **Description**: Surface-aware manifest of the tools and executable actions available in this server instance. Use gitlab://tools/{id} to fetch one entry's accepted call shape and input schema.

### current_user

- **URI**: `gitlab://user/current`
- **MIME**: application/json
- **Description**: Get the currently authenticated GitLab user profile. Returns username, display name, email, state (active/blocked), admin status, and web URL.

### group

- **URI Template**: `gitlab://group/{group_id}`
- **MIME**: application/json
- **Description**: Get details for a specific GitLab group by numeric ID or URL-encoded path. Returns name, full path, description, visibility, and web URL.

### group_label

- **URI Template**: `gitlab://group/{group_id}/label/{label_id}`
- **MIME**: application/json
- **Description**: Get details for a single group label by numeric ID or name. Returns id, name, color, description, and open issue/MR counts.

### group_members

- **URI Template**: `gitlab://group/{group_id}/members`
- **MIME**: application/json
- **Description**: List all members of a GitLab group with their access levels (10=guest, 20=reporter, 30=developer, 40=maintainer, 50=owner). Includes inherited members.

### group_milestone

- **URI Template**: `gitlab://group/{group_id}/milestone/{milestone_iid}`
- **MIME**: application/json
- **Description**: Get details for a single group milestone by IID. Returns id, iid, title, description, state, due date, and web URL.

### group_projects

- **URI Template**: `gitlab://group/{group_id}/projects`
- **MIME**: application/json
- **Description**: List all projects within a GitLab group. Returns each project's ID, name, namespace path, visibility, web URL, description, and default branch.

### project

- **URI Template**: `gitlab://project/{project_id}`
- **MIME**: application/json
- **Description**: Get basic metadata for a GitLab project by numeric ID or URL-encoded path. Returns name, namespace path, visibility, web URL, description, and default branch.

### board

- **URI Template**: `gitlab://project/{project_id}/board/{board_id}`
- **MIME**: application/json
- **Description**: Get details for a single project issue board by numeric ID. Returns id and name.

### branch

- **URI Template**: `gitlab://project/{project_id}/branch/{branch}`
- **MIME**: application/json
- **Description**: Get details for a single repository branch. Returns name, protection status, merge status, default flag, and web URL.

### project_branches

- **URI Template**: `gitlab://project/{project_id}/branches`
- **MIME**: application/json
- **Description**: List all branches in a GitLab project. Returns each branch's name, protection status, merge status, default flag, and web URL.

### commit

- **URI Template**: `gitlab://project/{project_id}/commit/{sha}`
- **MIME**: application/json
- **Description**: Get details for a single commit by SHA. Returns short_id, title, message, author, committer, authored/committed dates, parent commits, web URL, and stats (additions/deletions).

### deploy_key

- **URI Template**: `gitlab://project/{project_id}/deploy_key/{deploy_key_id}`
- **MIME**: application/json
- **Description**: Get details for a single project deploy key by numeric ID. Returns id, title, key, and fingerprint.

### deployment

- **URI Template**: `gitlab://project/{project_id}/deployment/{deployment_id}`
- **MIME**: application/json
- **Description**: Get details for a single project deployment by numeric ID. Returns id, iid, ref, sha, status, and environment name.

### environment

- **URI Template**: `gitlab://project/{project_id}/environment/{environment_id}`
- **MIME**: application/json
- **Description**: Get details for a single project environment by numeric ID. Returns id, name, slug, state, and tier.

### feature_flag

- **URI Template**: `gitlab://project/{project_id}/feature_flag/{name}`
- **MIME**: application/json
- **Description**: Get details for a single project feature flag by name. Returns name, description, active, and version.

### file_blob

- **URI Template**: `gitlab://project/{project_id}/file/{ref}/{+path}`
- **MIME**: application/json
- **Description**: Get the contents of a repository file at a specific ref (branch, tag, or SHA). Path may include slashes. Files over 1 MiB return metadata only with truncated=true. Binary files return metadata with empty content.

### issue

- **URI Template**: `gitlab://project/{project_id}/issue/{issue_iid}`
- **MIME**: application/json
- **Description**: Get details of a specific issue by its IID (project-scoped ID). Returns title, state, labels, assignees, author, web URL, and creation date.

### project_issues

- **URI Template**: `gitlab://project/{project_id}/issues`
- **MIME**: application/json
- **Description**: List open issues for a GitLab project. Returns each issue's IID, title, state, labels, assignees, author, web URL, and creation date.

### job

- **URI Template**: `gitlab://project/{project_id}/job/{job_id}`
- **MIME**: application/json
- **Description**: Get details for a single CI job by numeric ID. Returns id, name, stage, status, ref, duration, and web URL.

### label

- **URI Template**: `gitlab://project/{project_id}/label/{label_id}`
- **MIME**: application/json
- **Description**: Get details for a single project label by numeric ID or label name. Returns id, name, color, description, and open issue/MR counts.

### project_labels

- **URI Template**: `gitlab://project/{project_id}/labels`
- **MIME**: application/json
- **Description**: List all labels defined in a GitLab project. Returns each label's name, color, description, and counts of open issues and merge requests using the label.

### project_members

- **URI Template**: `gitlab://project/{project_id}/members`
- **MIME**: application/json
- **Description**: List all members of a GitLab project with their access levels (10=guest, 20=reporter, 30=developer, 40=maintainer, 50=owner). Includes inherited members from parent groups.

### milestone

- **URI Template**: `gitlab://project/{project_id}/milestone/{milestone_iid}`
- **MIME**: application/json
- **Description**: Get details for a single project milestone by IID. Returns id, iid, title, description, state, due date, and web URL.

### project_milestones

- **URI Template**: `gitlab://project/{project_id}/milestones`
- **MIME**: application/json
- **Description**: List all milestones in a GitLab project. Returns each milestone's title, description, state (active/closed), due date, and web URL.

### merge_request

- **URI Template**: `gitlab://project/{project_id}/mr/{merge_request_iid}`
- **MIME**: application/json
- **Description**: Get details of a specific merge request by its IID (project-scoped ID). Returns title, state, source/target branches, author, merge status, and web URL.

### merge_request_discussions

- **URI Template**: `gitlab://project/{project_id}/mr/{merge_request_iid}/discussions`
- **MIME**: application/json
- **Description**: List discussion threads on a merge request. Each discussion has an id, individual_note flag, and an array of notes (id, author, body, system, resolved/resolvable, created_at).

### merge_request_notes

- **URI Template**: `gitlab://project/{project_id}/mr/{merge_request_iid}/notes`
- **MIME**: application/json
- **Description**: List notes (comments) on a merge request. Returns each note's id, author username, body, system flag, resolvable/resolved flags, and timestamps.

### pipeline

- **URI Template**: `gitlab://project/{project_id}/pipeline/{pipeline_id}`
- **MIME**: application/json
- **Description**: Get details of a specific CI/CD pipeline by its numeric ID. Returns pipeline status, ref, SHA, source, and web URL.

### pipeline_jobs

- **URI Template**: `gitlab://project/{project_id}/pipeline/{pipeline_id}/jobs`
- **MIME**: application/json
- **Description**: List all jobs for a specific CI/CD pipeline including each job's name, stage, status, duration, failure reason (if failed), and web URL.

### latest_pipeline

- **URI Template**: `gitlab://project/{project_id}/pipelines/latest`
- **MIME**: application/json
- **Description**: Get the most recent CI/CD pipeline for a GitLab project. Returns pipeline ID, status (running/pending/success/failed/canceled), ref, SHA, source, and web URL.

### release

- **URI Template**: `gitlab://project/{project_id}/release/{tag_name}`
- **MIME**: application/json
- **Description**: Get details for a single GitLab release by tag name. Returns tag_name, name, description, author, creation/release dates.

### project_releases

- **URI Template**: `gitlab://project/{project_id}/releases`
- **MIME**: application/json
- **Description**: List all releases for a GitLab project. Returns each release's tag name, name, description, author, and creation/release dates.

### project_snippet

- **URI Template**: `gitlab://project/{project_id}/snippet/{snippet_id}`
- **MIME**: application/json
- **Description**: Get details for a single project snippet by numeric ID. Returns id, title, file_name, description, visibility, and web URL.

### tag

- **URI Template**: `gitlab://project/{project_id}/tag/{tag_name}`
- **MIME**: application/json
- **Description**: Get details for a single Git tag. Returns name, target commit SHA, annotation message, and protection status.

### project_tags

- **URI Template**: `gitlab://project/{project_id}/tags`
- **MIME**: application/json
- **Description**: List all repository tags for a GitLab project. Returns each tag's name, message, target commit SHA, protection status, and creation date.

### wiki_page

- **URI Template**: `gitlab://project/{project_id}/wiki/{slug}`
- **MIME**: application/json
- **Description**: Get a wiki page by slug. Returns title, slug, format (markdown/rdoc/asciidoc/org), and raw content. Slugs are case-sensitive and use hyphens for spaces.

### snippet

- **URI Template**: `gitlab://snippet/{snippet_id}`
- **MIME**: application/json
- **Description**: Get details for a single personal/global snippet by numeric ID. Returns id, title, file_name, description, visibility, and web URL.

### tool_detail

- **URI Template**: `gitlab://tools/{id}`
- **MIME**: application/json
- **Description**: Accepted call shape and input schema for one entry from gitlab://tools. Replace {id} with an entry ID from the active surface, such as project.get in dynamic mode, gitlab_project.get in meta mode, or gitlab_get_project in individual mode.

### Workspace Roots

- **URI**: `gitlab://workspace/roots`
- **Description**: Lists workspace root directories reported by the MCP client

## Prompts

37 prompt templates for AI-assisted GitLab workflows.

### audit_commit_hygiene

Audit commit message quality between two refs. Scores Conventional Commit usage, merge commits, breaking-change markers, body/detail quality, and linked work references for release and contribution readiness.

**Arguments:**

- `project_id` (required): Project ID (numeric) or URL-encoded path (e.g. 'group/project')
- `from` (required): Starting ref: tag name, branch name, or commit SHA
- `to`: Ending ref: tag name, branch name, or commit SHA (defaults to HEAD if omitted)

### audit_project_full

Run a comprehensive audit of a GitLab project covering settings, branch protection, access management, labels, milestones, and templates in a single report. Use this for a complete project health assessment with actionable recommendations.

**Arguments:**

- `project_id` (required): Project ID (numeric) or URL-encoded path (e.g. 'group/project')

### audit_project_workflow

Audit workflow configuration for a GitLab project: labels (names, colors, descriptions), milestones (open/closed, due dates), and issue/MR templates. Identifies gaps like labels without descriptions, milestones without due dates, or missing templates.

**Arguments:**

- `project_id` (required): Project ID (numeric) or URL-encoded path (e.g. 'group/project')

### branch_mr_summary

List all MRs targeting a specific branch in a project. Shows readiness summary with conflict/draft/approval counts. Ideal for release branch reviews.

**Arguments:**

- `project_id` (required): Project ID (numeric) or URL-encoded path (e.g. 'group/project')
- `target_branch` (required): Target branch name to filter MRs (e.g. 'develop_5.4.0')
- `state`: State filter: opened, closed, merged, all (default: opened)

### compare_branches

Compare commit and file differences between two Git refs. Use for release branch preparation, feature branch divergence analysis, or deciding whether a merge/backport needs deeper review.

**Arguments:**

- `project_id` (required): Project ID (numeric) or URL-encoded path (e.g. 'group/project')
- `from` (required): Source branch name, tag, or commit SHA to compare from
- `to` (required): Target branch name, tag, or commit SHA to compare to

### daily_standup

Generate a daily standup summary based on the user's GitLab activity in the last 24 hours: contribution events, authored MRs, assigned MRs, MRs under review, assigned issues, and created issues. Produces a comprehensive report with done/planned/blockers sections.

**Arguments:**

- `project_id` (required): Project ID (numeric) or URL-encoded path (e.g. 'group/project')
- `username`: GitLab username to generate the standup for (defaults to the authenticated user if omitted)

### generate_release_notes

Generate comprehensive release notes from commits, merge requests, and file changes between two Git refs (tags, branches, or SHAs). Produces a structured document with commits, merged MRs with labels, contributors, and statistics for organizing into user-friendly release notes.

**Arguments:**

- `project_id` (required): Project ID (numeric) or URL-encoded path (e.g. 'group/project')
- `from` (required): Starting ref: tag name (e.g. 'v1.0.0'), branch name, or commit SHA
- `to`: Ending ref: tag name, branch name, or commit SHA (defaults to HEAD if omitted)

### group_milestone_progress

Track milestone progress across all projects in a group. Shows issue/MR completion per milestone with progress bars.

**Arguments:**

- `group_id` (required): GitLab group ID (numeric) or URL-encoded path (e.g. 'my-group' or 'parent/child')

### group_mr_dashboard

List merge requests across a GitLab group with optional state and target branch filters. Shows MRs grouped by project with blocker and readiness summary statistics.

**Arguments:**

- `group_id` (required): GitLab group ID (numeric) or URL-encoded path (e.g. 'my-group' or 'parent/child')
- `state`: State filter: opened, closed, merged, all (default: opened)
- `target_branch`: Target branch name to filter MRs (e.g. 'develop_5.4.0')

### label_distribution

Analyze label usage distribution in a project. Shows open/closed issue counts and open MR counts per label. Zero additional API calls beyond label list.

**Arguments:**

- `project_id` (required): Project ID (numeric) or URL-encoded path (e.g. 'group/project')

### merge_velocity

Analyze MR throughput metrics for a project. Shows merge rate, average time-to-merge, and daily merged count chart. Ideal for tracking team delivery pace.

**Arguments:**

- `project_id` (required): Project ID (numeric) or URL-encoded path (e.g. 'group/project')
- `days`: Number of days to look back (default: 30)

### milestone_progress

Track milestone progress for a project. Shows issue/MR completion, progress bar, and due date risk. Omit milestone argument to see all active milestones.

**Arguments:**

- `project_id` (required): Project ID (numeric) or URL-encoded path (e.g. 'group/project')
- `milestone`: Specific milestone title (omit for all active)

### mr_description_quality

Score a merge request description for reviewer readiness. Checks context, linked work, test evidence, rollout/risk notes, checklists, and whether changed files suggest missing screenshots or migration notes.

**Arguments:**

- `project_id` (required): Project ID (numeric) or URL-encoded path (e.g. 'group/project')
- `merge_request_iid` (required): Merge request IID (project-scoped numeric ID, visible as !N in GitLab)

### mr_discussion_health

Analyze unresolved discussion threads across open MRs in a project. Use this for review follow-up and merge-readiness cleanup, not approval-rule status.

**Arguments:**

- `project_id` (required): Project ID (numeric) or URL-encoded path (e.g. 'group/project')

### mr_risk_assessment

Assess the risk level (LOW/MEDIUM/HIGH/CRITICAL) of a merge request based on size (lines added/removed), number of changed files, new/deleted files, sensitive file patterns (env, auth, migration, CI, security), and conflict status.

**Arguments:**

- `project_id` (required): Project ID (numeric) or URL-encoded path (e.g. 'group/project')
- `merge_request_iid` (required): Merge request IID (project-scoped numeric ID, visible as !N in GitLab)

### my_activity_summary

Generate a personal activity summary for a configurable time period. Includes contribution events breakdown, MRs created/merged/reviewed, issues created/closed, and a daily activity chart. Aggregates across all projects.

**Arguments:**

- `username`: GitLab username to query
- `days`: Number of days to look back (default: 7)

### my_issues

Show all issues assigned to you across all projects. Includes overdue detection and project grouping. Use this to see your full issue backlog without specifying a project.

**Arguments:**

- `username`: GitLab username to query
- `state`: State filter: opened, closed, merged, all (default: opened)

### my_open_mrs

Show all open merge requests across all projects where you are author or assignee. Results are grouped by project for easy scanning. Use this to get a personal MR dashboard without specifying a project.

**Arguments:**

- `username`: GitLab username to query

### my_pending_reviews

Show all open merge requests where you are assigned as reviewer across all projects. Helps track which MRs are waiting for your review. Results grouped by project.

**Arguments:**

- `username`: GitLab username to query

### project_activity_report

Generate a project activity report including recent events, merged MRs, and open issues. Shows daily activity chart and contributor breakdown.

**Arguments:**

- `project_id` (required): Project ID (numeric) or URL-encoded path (e.g. 'group/project')
- `days`: Number of days to look back (default: 7)

### project_contributors

Rank project contributors by commits, additions, and deletions. Uses the repository contributors API for accurate stats.

**Arguments:**

- `project_id` (required): Project ID (numeric) or URL-encoded path (e.g. 'group/project')

### project_health_check

Comprehensive project health assessment combining latest pipeline status, open merge requests, and branch hygiene (merged/stale branch counts). Provides actionable recommendations for project maintenance.

**Arguments:**

- `project_id` (required): Project ID (numeric) or URL-encoded path (e.g. 'group/project')

### release_cadence

Analyze release frequency for a project. Shows time between releases, average cadence, and release history chart.

**Arguments:**

- `project_id` (required): Project ID (numeric) or URL-encoded path (e.g. 'group/project')
- `days`: Number of days to look back (default: 90)

### release_readiness

Check readiness of a release branch by analyzing open MRs targeting it, draft/conflict counts, and unresolved discussion threads.

**Arguments:**

- `project_id` (required): Project ID (numeric) or URL-encoded path (e.g. 'group/project')
- `branch`: Target release branch (default: main)

### review_mr

Generate a structured code review for a merge request. Files are categorized by risk (high-risk, business logic, tests, documentation) with per-file metrics, branch context, and a review plan. Full diffs are included without truncation.

**Arguments:**

- `project_id` (required): Project ID (numeric) or URL-encoded path (e.g. 'group/project')
- `merge_request_iid` (required): Merge request IID (project-scoped numeric ID, visible as !N in GitLab)

### reviewer_workload

Analyze review distribution across group members. Shows how many open MRs each member is reviewing and identifies imbalances. Useful for managers to ensure fair review distribution.

**Arguments:**

- `group_id` (required): GitLab group ID (numeric) or URL-encoded path (e.g. 'my-group' or 'parent/child')

### stale_items_report

Find MRs and issues in a project that haven't been updated for a configurable number of days. Helps identify forgotten or blocked items.

**Arguments:**

- `project_id` (required): Project ID (numeric) or URL-encoded path (e.g. 'group/project')
- `stale_days`: Days without update to consider stale (default: 14)

### suggest_mr_reviewers

Suggest suitable merge request reviewers based on the files changed and the list of active project members. Excludes the MR author and asks the model to consider ownership, approval-rule fit, and workload balance.

**Arguments:**

- `project_id` (required): Project ID (numeric) or URL-encoded path (e.g. 'group/project')
- `merge_request_iid` (required): Merge request IID (project-scoped numeric ID, visible as !N in GitLab)

### summarize_mr_changes

Summarize the changed files and key modifications in a merge request. Lists each file with its change type (new/modified/deleted/renamed). Use this to quickly understand the scope of a merge request.

**Arguments:**

- `project_id` (required): Project ID (numeric) or URL-encoded path (e.g. 'group/project')
- `merge_request_iid` (required): Merge request IID (project-scoped numeric ID, visible as !N in GitLab)

### summarize_open_mrs

Summarize all open merge requests in a project including title, author, branches, age in days, and merge status. Highlights stale MRs (>7 days) and blockers. For one target branch, use branch_mr_summary.

**Arguments:**

- `project_id` (required): Project ID (numeric) or URL-encoded path (e.g. 'group/project')

### summarize_pipeline_status

Summarize the latest CI/CD pipeline status for a project. Groups jobs by outcome (failed/passed/other) and includes failure reasons for debugging.

**Arguments:**

- `project_id` (required): Project ID (numeric) or URL-encoded path (e.g. 'group/project')

### team_member_workload

Generate a comprehensive workload summary for a specific team member over a configurable time period. Includes contribution events, authored and assigned merge requests, MRs under review, authored and assigned issues. Use this for team management and capacity planning.

**Arguments:**

- `project_id` (required): Project ID (numeric) or URL-encoded path (e.g. 'group/project')
- `username` (required): GitLab username of the team member to analyze
- `days`: Number of days to look back for activity (default: 7)

### team_overview

Generate a team dashboard showing all group members with their open MR counts and recently merged MRs. Includes a workload distribution pie chart. Requires a GitLab group ID.

**Arguments:**

- `group_id` (required): GitLab group ID (numeric) or URL-encoded path (e.g. 'my-group' or 'parent/child')
- `days`: Number of days to look back (default: 7)

### unassigned_items

Find open MRs and issues in a project that have no assignee. Helps identify ownership gaps and items needing attention.

**Arguments:**

- `project_id` (required): Project ID (numeric) or URL-encoded path (e.g. 'group/project')

### user_activity_report

Generate a detailed activity report for a specific user: contribution events, merged MRs, reviewed MRs, daily activity chart. Designed for managers to review team member productivity.

**Arguments:**

- `username` (required): GitLab username to report on
- `days`: Number of days to look back (default: 7)

### user_stats

Generate comprehensive user statistics from GitLab: contribution events breakdown, merge request stats (authored/assigned/reviewed by state), issue stats (authored/assigned by state), daily activity trends, and a Mermaid activity chart. Use this for performance reviews, productivity tracking, or personal dashboards.

**Arguments:**

- `project_id` (required): Project ID (numeric) or URL-encoded path (e.g. 'group/project')
- `username`: GitLab username to generate stats for (defaults to the authenticated user if omitted)
- `days`: Number of days to look back for activity (default: 30)

### weekly_team_recap

Generate a comprehensive weekly recap for a team. Combines merged MRs, open MRs, issues activity, and events into a single summary with Mermaid charts.

**Arguments:**

- `group_id` (required): GitLab group ID (numeric) or URL-encoded path (e.g. 'my-group' or 'parent/child')
- `days`: Number of days to look back (default: 7)

