Users
The current user and every user an administrator manages: read and list users, create, modify and delete accounts, and block, unblock, ban, unban, activate, deactivate, approve or reject one; SSH and GPG keys and emails, for the current user or for another; personal access tokens and impersonation tokens; the user’s status and avatar; activities, memberships, contribution and project events; to-do items; notification settings; namespaces; instance service accounts; and runners created for the user.
Project and group access tokens, deploy tokens and deploy keys are on Access tokens and credentials.
Sample questions
Section titled “Sample questions”- “Who am I logged in as?”
- “List my SSH keys”
- “What are my pending to-do items?”
- “Block user spammer42”
How to call it
Section titled “How to call it”- Dynamic, the default surface: call
gitlab_execute_actionwithactionset to the action’s ID, such asuser.activate, and its parameters inparams.gitlab_find_actionfinds an ID from a description of the task. - Meta (
GITLAB_MCP_TOOL_SURFACE=meta): callgitlab_userwithactionset to the action’s name, such asactivate, and its parameters inparams. - Individual (
GITLAB_MCP_TOOL_SURFACE=individual): call the action’s own tool, such asgitlab_activate_user, with its parameters as the arguments.
Availability
Section titled “Availability”Every tier serves the whole group, on self-managed instances and on GitLab.com alike.
Read-only actions: 37 of 76, the ones a deployment in read-only mode keeps.
Actions
Section titled “Actions”The description of each action, and of each of its parameters, is the text the server serves for it on the default surface, quoted as served. A destructive action runs only once confirmed, unless GITLAB_MCP_YOLO_MODE (or AUTOPILOT) skips that step: the dynamic surface needs confirm: true on gitlab_execute_action, and the other two take a confirm parameter or the client’s prompt (Destructive actions). A parameter followed by a tier in parentheses is served only from that tier on.
| Action | Individual |
|---|---|
user.activate | gitlab_activate_user |
user.activities | gitlab_get_user_activities |
user.add_email | gitlab_add_email |
user.add_email_for_user | gitlab_add_email_for_user |
user.add_gpg_key | gitlab_add_gpg_key |
user.add_gpg_key_for_user | gitlab_add_gpg_key_for_user |
user.add_ssh_key | gitlab_add_ssh_key |
user.add_ssh_key_for_user | gitlab_add_ssh_key_for_user |
user.approve | gitlab_approve_user |
user.associations_count | gitlab_get_user_associations_count |
user.avatar_get | gitlab_get_avatar |
user.ban | gitlab_ban_user |
user.block | gitlab_block_user |
user.contribution_events | gitlab_list_user_contribution_events |
user.create | gitlab_create_user |
user.create_current_user_pat | gitlab_create_current_user_pat |
user.create_impersonation_token | gitlab_create_impersonation_token |
user.create_personal_access_token | gitlab_create_personal_access_token |
user.create_runner | gitlab_create_user_runner |
user.create_service_account | gitlab_create_service_account |
user.current | gitlab_user_current |
user.current_user_status | gitlab_current_user_status |
user.deactivate | gitlab_deactivate_user |
user.delete | gitlab_delete_user |
user.delete_email | gitlab_delete_email |
user.delete_email_for_user | gitlab_delete_email_for_user |
user.delete_gpg_key | gitlab_delete_gpg_key |
user.delete_gpg_key_for_user | gitlab_delete_gpg_key_for_user |
user.delete_identity | gitlab_delete_user_identity |
user.delete_ssh_key | gitlab_delete_ssh_key |
user.delete_ssh_key_for_user | gitlab_delete_ssh_key_for_user |
user.disable_two_factor | gitlab_disable_two_factor |
user.emails | gitlab_list_emails |
user.emails_for_user | gitlab_list_emails_for_user |
user.event_list_contributions | gitlab_user_contribution_event_list |
user.event_list_project | gitlab_project_event_list |
user.get | gitlab_get_user |
user.get_email | gitlab_get_email |
user.get_gpg_key | gitlab_get_gpg_key |
user.get_gpg_key_for_user | gitlab_get_gpg_key_for_user |
user.get_impersonation_token | gitlab_get_impersonation_token |
user.get_ssh_key | gitlab_get_ssh_key |
user.get_ssh_key_for_user | gitlab_get_ssh_key_for_user |
user.get_status | gitlab_get_user_status |
user.gpg_keys | gitlab_list_gpg_keys |
user.gpg_keys_for_user | gitlab_list_gpg_keys_for_user |
user.key_get_by_fingerprint | gitlab_get_key_by_fingerprint |
user.key_get_with_user | gitlab_get_key_with_user |
user.list | gitlab_list_users |
user.list_impersonation_tokens | gitlab_list_impersonation_tokens |
user.list_service_accounts | gitlab_list_service_accounts |
user.me | gitlab_user_current |
user.memberships | gitlab_get_user_memberships |
user.modify | gitlab_modify_user |
user.namespace_exists | gitlab_namespace_exists |
user.namespace_get | gitlab_namespace_get |
user.namespace_list | gitlab_namespace_list |
user.namespace_search | gitlab_namespace_search |
user.notification_global_get | gitlab_notification_global_get |
user.notification_global_update | gitlab_notification_global_update |
user.notification_group_get | gitlab_notification_group_get |
user.notification_group_update | gitlab_notification_group_update |
user.notification_project_get | gitlab_notification_project_get |
user.notification_project_update | gitlab_notification_project_update |
user.reject | gitlab_reject_user |
user.revoke_impersonation_token | gitlab_revoke_impersonation_token |
user.set_status | gitlab_set_user_status |
user.ssh_keys | gitlab_list_ssh_keys |
user.ssh_keys_for_user | gitlab_list_ssh_keys_for_user |
user.todo_list | gitlab_todo_list |
user.todo_mark_all_done | gitlab_todo_mark_all_done |
user.todo_mark_done | gitlab_todo_mark_done |
user.unban | gitlab_unban_user |
user.unblock | gitlab_unblock_user |
user.update_service_account | gitlab_update_instance_service_account |
user.upload_avatar | gitlab_upload_user_avatar |
user.activate
Section titled “user.activate”Activate a deactivated user. Returns: confirmation with the user ID and action. See also:
user.deactivate,user.unblock,user.get.
- Meta-tool:
gitlab_user, actionactivate - Individual tool:
gitlab_activate_user - Tier: Free
- Behavior: writes, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
user_id | integer | yes | The ID of the user |
user.activities
Section titled “user.activities”List user activities (admin). Returns: username and last-activity date per user. See also:
user.list,user.contribution_events,user.memberships.
- Meta-tool:
gitlab_user, actionactivities - Individual tool:
gitlab_get_user_activities - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
from | string | no | Only activities after this date (YYYY-MM-DD) |
order_by | string | no | Column to order keyset-paginated results by (e.g. id) |
page | integer | no | Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward. |
page_token | string | no | Keyset pagination cursor: record id at which to fetch the next page, taken from the previous keyset response. Only used when pagination=‘keyset’. |
pagination | string | no | Pagination method: ‘keyset’ for keyset-based pagination on large ordered result sets, or ‘offset’ (the default). Keyset avoids deep-offset cost. |
per_page | integer | no | Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large. |
sort | string (asc, desc) | no | Sort order for keyset pagination: asc or desc |
user.add_email
Section titled “user.add_email”Add an email address to the authenticated user’s account. Returns: the created email’s ID, address, and confirmation timestamp. See also:
user.get_email,user.delete_email,user.add_email_for_user.
- Meta-tool:
gitlab_user, actionadd_email - Individual tool:
gitlab_add_email - Tier: Free
- Behavior: writes, not idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
email | string | yes | Email address to add |
skip_confirmation | boolean | no | Skip confirmation email (admin only) |
user.add_email_for_user
Section titled “user.add_email_for_user”Add an email address to a specific user’s account (admin only). Returns: the created email’s ID, address, and confirmation timestamp. See also:
user.emails_for_user,user.delete_email_for_user,user.add_email.
- Meta-tool:
gitlab_user, actionadd_email_for_user - Individual tool:
gitlab_add_email_for_user - Tier: Free
- Behavior: writes, not idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
email | string | yes | Email address to add |
user_id | integer | yes | GitLab user ID |
skip_confirmation | boolean | no | Skip confirmation email (admin only) |
user.add_gpg_key
Section titled “user.add_gpg_key”Add a GPG key to the authenticated user’s account. Returns: the created key’s ID, armored public key, and creation timestamp. See also:
user.gpg_keys,user.get_gpg_key,user.delete_gpg_key,user.add_gpg_key_for_user.
- Meta-tool:
gitlab_user, actionadd_gpg_key - Individual tool:
gitlab_add_gpg_key - Tier: Free
- Behavior: writes, not idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
key | string | yes | The armored GPG public key content |
user.add_gpg_key_for_user
Section titled “user.add_gpg_key_for_user”Add a GPG key to a specific user’s account (admin only). Returns: the created key’s ID, armored public key, and creation timestamp. See also:
user.gpg_keys_for_user,user.get_gpg_key_for_user,user.delete_gpg_key_for_user,user.add_gpg_key.
- Meta-tool:
gitlab_user, actionadd_gpg_key_for_user - Individual tool:
gitlab_add_gpg_key_for_user - Tier: Free
- Behavior: writes, not idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
key | string | yes | The armored GPG public key content |
user_id | integer | yes | The ID of the user |
user.add_ssh_key
Section titled “user.add_ssh_key”Add an SSH key to the current user. Returns: created key ID, title, usage type, and expiry. See also:
user.ssh_keys,user.get_ssh_key,user.delete_ssh_key.
- Meta-tool:
gitlab_user, actionadd_ssh_key - Individual tool:
gitlab_add_ssh_key - Tier: Free
- Behavior: writes, not idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
key | string | yes | The SSH public key content |
title | string | yes | A descriptive title for the SSH key |
expires_at | string | no | Expiration date in ISO 8601 format (YYYY-MM-DD) |
usage_type | string (auth, signing, auth_and_signing) | no | SSH key usage scope: auth (authentication), signing (commit signing), or auth_and_signing (both). Default: auth_and_signing. |
user.add_ssh_key_for_user
Section titled “user.add_ssh_key_for_user”Add an SSH key to a specific user. Returns: created key ID, title, usage type, and expiry. Requires admin token. See also:
user.ssh_keys_for_user,user.get_ssh_key_for_user,user.delete_ssh_key_for_user.
- Meta-tool:
gitlab_user, actionadd_ssh_key_for_user - Individual tool:
gitlab_add_ssh_key_for_user - Tier: Free
- Behavior: writes, not idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
key | string | yes | The SSH public key content |
title | string | yes | A descriptive title for the SSH key |
user_id | integer | yes | The ID of the user |
expires_at | string | no | Expiration date in ISO 8601 format (YYYY-MM-DD) |
usage_type | string (auth, signing, auth_and_signing) | no | SSH key usage scope: auth (authentication), signing (commit signing), or auth_and_signing (both). Default: auth_and_signing. |
user.approve
Section titled “user.approve”Approve a pending user sign-up. Returns: confirmation with the user ID and action. See also:
user.reject,user.get,user.list.
- Meta-tool:
gitlab_user, actionapprove - Individual tool:
gitlab_approve_user - Tier: Free
- Behavior: writes, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
user_id | integer | yes | The ID of the user |
user.associations_count
Section titled “user.associations_count”Get a user’s association counts. Returns: groups, projects, issues, and merge-requests counts. See also:
user.get,user.memberships,user.delete.
- Meta-tool:
gitlab_user, actionassociations_count - Individual tool:
gitlab_get_user_associations_count - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
user_id | integer | yes | The ID of the user |
user.avatar_get
Section titled “user.avatar_get”Get the avatar URL for an email address. Returns: the resolved avatar URL for that email address. See also:
user.me,user.get_status.
- Meta-tool:
gitlab_user, actionavatar_get - Individual tool:
gitlab_get_avatar - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
email | string | yes | Email address to look up avatar for |
size | integer | no | Desired avatar size in pixels |
user.ban
Section titled “user.ban”Ban a user. Returns: confirmation with the user ID and action. Reversible via user.unban. See also:
user.unban,user.block,user.get.
- Meta-tool:
gitlab_user, actionban - Individual tool:
gitlab_ban_user - Tier: Free
- Behavior: writes, destructive (needs confirmation), idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
user_id | integer | yes | The ID of the user |
user.block
Section titled “user.block”Block a user from signing in. Returns: confirmation with the user ID and action. Reversible via user.unblock. See also:
user.unblock,user.ban,user.get.
- Meta-tool:
gitlab_user, actionblock - Individual tool:
gitlab_block_user - Tier: Free
- Behavior: writes, destructive (needs confirmation), idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
user_id | integer | yes | The ID of the user |
user.contribution_events
Section titled “user.contribution_events”List a user’s contribution events. Returns: event entries with action, target type/title and link, project, author, timestamp, the push, note or wiki page the event concerns, and its import origin. See also:
user.get,user.activities,user.associations_count.
- Meta-tool:
gitlab_user, actioncontribution_events - Individual tool:
gitlab_list_user_contribution_events - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
user_id | integer | yes | The ID of the user whose events to retrieve |
action | string (created, updated, closed, reopened, pushed, commented, merged, joined, left, destroyed, expired, approved, transferred) | no | Filter by event action, one of created, updated, closed, reopened, pushed, commented, merged, joined, left, destroyed, expired, approved, transferred. Any other value is refused before the request, since GitLab would ignore it and answer every event. |
after | string | no | Only events after this date (YYYY-MM-DD) |
before | string | no | Only events before this date (YYYY-MM-DD) |
order_by | string | no | Column to order keyset-paginated results by (e.g. id) |
page | integer | no | Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward. |
page_token | string | no | Keyset pagination cursor: record id at which to fetch the next page, taken from the previous keyset response. Only used when pagination=‘keyset’. |
pagination | string | no | Pagination method: ‘keyset’ for keyset-based pagination on large ordered result sets, or ‘offset’ (the default). Keyset avoids deep-offset cost. |
per_page | integer | no | Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large. |
scope | string | no | Include all events across a user’s projects (e.g. ‘all’) |
sort | string (asc, desc) | no | Sort order: asc or desc |
target_type | string (issue, milestone, merge_request, note, project, snippet, user, wiki, design) | no | Filter by event target type, one of issue, milestone, merge_request, note, project, snippet, user, wiki, design. GitLab refuses any other value, epic included. Responses spell the type in model form (Issue, MergeRequest, WikiPage::Meta, DesignManagement::Design), which a filter does not accept. |
user.create
Section titled “user.create”Create a user account. Returns: created user identity and profile summary fields. See also:
user.get,user.modify,user.block.
- Meta-tool:
gitlab_user, actioncreate - Individual tool:
gitlab_create_user - Tier: Free
- Behavior: writes, not idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
email | string | yes | The user email address |
name | string | yes | The user display name |
username | string | yes | The username |
admin | boolean | no | Grant admin privileges |
auditor (Premium) | boolean | no | Grant auditor privileges (Premium/Ultimate) |
bio | string | no | User bio text |
can_create_group | boolean | no | Allow the user to create groups |
color_scheme_id | integer | no | Syntax-highlighting color scheme ID |
commit_email | string | no | Email used for commits |
discord | string | no | Discord account |
extern_uid | string | no | External UID for the provider |
external | boolean | no | Mark user as external |
extra_shared_runners_minutes_limit (Premium) | integer | no | Extra shared runners minutes (admin, Premium/Ultimate) |
force_random_password | boolean | no | Set a random password instead of requiring one |
github | string | no | GitHub account |
group_id_for_saml | integer | no | Group ID for SAML provisioning |
job_title | string | no | User job title |
linkedin | string | no | LinkedIn account |
location | string | no | User location |
note | string | no | Admin note about the user |
organization | string | no | User organization |
password | string | no | The user password (required unless reset_password or force_random_password is set) |
private_profile | boolean | no | Make the user’s profile private |
projects_limit | integer | no | Maximum number of projects the user can create |
pronouns | string | no | User pronouns |
provider | string | no | External provider name (use with extern_uid) |
public_email | string | no | Publicly visible email address |
reset_password | boolean | no | Send a password reset email instead of setting password |
shared_runners_minutes_limit (Premium) | integer | no | Shared runners minutes limit (admin, Premium/Ultimate) |
skip_confirmation | boolean | no | Skip confirmation email and activate user immediately |
theme_id | integer | no | GitLab theme ID for the user’s UI |
twitter | string | no | Twitter/X account |
view_diffs_file_by_file | boolean | no | Show whitespace changes in diffs file by file |
website_url | string | no | User website URL |
user.create_current_user_pat
Section titled “user.create_current_user_pat”Create a personal access token for the current user. Returns: token ID, the secret token, scopes, and expiry. See also:
user.me,user.create_runner.
- Meta-tool:
gitlab_user, actioncreate_current_user_pat - Individual tool:
gitlab_create_current_user_pat - Tier: Free
- Behavior: writes, not idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
name | string | yes | Name of the personal access token |
scopes | string[] | yes | Array of scopes |
description | string | no | Description for the token |
expires_at | string | no | Token expiration date (YYYY-MM-DD) |
user.create_impersonation_token
Section titled “user.create_impersonation_token”Create an impersonation token for a user with the given scopes and optional expiry. Returns: the new token’s id, name, active flag, scopes, revoked flag, created_at, expires_at, and the secret token value (shown once). See also:
user.list_impersonation_tokens,user.revoke_impersonation_token,user.create_personal_access_token.
- Meta-tool:
gitlab_user, actioncreate_impersonation_token - Individual tool:
gitlab_create_impersonation_token - Tier: Free
- Behavior: writes, not idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
name | string | yes | Name of the impersonation token |
scopes | string[] | yes | 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 | yes | GitLab user ID |
expires_at | string | no | Token expiration date (YYYY-MM-DD) |
user.create_personal_access_token
Section titled “user.create_personal_access_token”Create a personal access token for a user with the given scopes, optional description, and optional expiry. Returns: the new token’s id, name, active flag, scopes, revoked flag, description, user_id, created_at, expires_at, and the secret token value (shown once). See also:
access.token_personal_list,access.token_personal_revoke,user.create_impersonation_token.
- Meta-tool:
gitlab_user, actioncreate_personal_access_token - Individual tool:
gitlab_create_personal_access_token - Tier: Free
- Behavior: writes, not idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
name | string | yes | Name of the personal access token |
scopes | string[] | yes | Array of scopes |
user_id | integer | yes | GitLab user ID |
description | string | no | Description for the token |
expires_at | string | no | Token expiration date (YYYY-MM-DD) |
user.create_runner
Section titled “user.create_runner”Create a runner linked to the current user. Returns: runner ID, authentication token, and token expiry. See also:
user.me,user.create_current_user_pat.
- Meta-tool:
gitlab_user, actioncreate_runner - Individual tool:
gitlab_create_user_runner - Tier: Free
- Behavior: writes, not idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
runner_type | string (instance_type, group_type, project_type) | yes | Runner scope: instance_type (shared), group_type (requires group_id), or project_type (requires project_id). |
access_level | string | no | Access level: not_protected or ref_protected |
description | string | no | Runner description |
group_id | integer | no | Group ID (required for group_type runners) |
locked | boolean | no | Whether the runner should be locked |
maintenance_note | string | no | Maintenance note for the runner |
maximum_timeout | integer | no | Maximum timeout for jobs in seconds |
paused | boolean | no | Whether the runner should be paused |
project_id | integer | no | Project ID (required for project_type runners) |
run_untagged | boolean | no | Whether the runner can run untagged jobs |
tag_list | string[] | no | List of runner tags |
user.create_service_account
Section titled “user.create_service_account”Create an instance-level service account. Returns: the created service account with ID, username, name, and email. Requires admin token. See also:
user.list_service_accounts,user.update_service_account.
- Meta-tool:
gitlab_user, actioncreate_service_account - Individual tool:
gitlab_create_service_account - Tier: Free
- Behavior: writes, not idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
email | string | no | Email for the service account |
name | string | no | Name for the service account |
username | string | no | Username for the service account |
user.current
Section titled “user.current”Get the current authenticated user. Returns: account ID, username, name, state, avatar URL, and profile metadata. See also:
user.list,user.current_user_status,user.emails.
- Meta-tool:
gitlab_user, actioncurrent - Individual tool:
gitlab_user_current - Tier: Free
- Behavior: read-only, idempotent
No parameters.
user.current_user_status
Section titled “user.current_user_status”Get the current user’s status. Returns: emoji, message, availability, and clear-status time. See also:
user.set_status,user.get_status,user.me.
- Meta-tool:
gitlab_user, actioncurrent_user_status - Individual tool:
gitlab_current_user_status - Tier: Free
- Behavior: read-only, idempotent
No parameters.
user.deactivate
Section titled “user.deactivate”Deactivate an active user. Returns: confirmation with the user ID and action. Reversible via user.activate. See also:
user.activate,user.block,user.get.
- Meta-tool:
gitlab_user, actiondeactivate - Individual tool:
gitlab_deactivate_user - Tier: Free
- Behavior: writes, destructive (needs confirmation), idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
user_id | integer | yes | The ID of the user |
user.delete
Section titled “user.delete”Delete a user account. Returns: confirmation with the deleted user ID. Requires admin token. See also:
user.get,user.block,user.associations_count.
- Meta-tool:
gitlab_user, actiondelete - Individual tool:
gitlab_delete_user - Tier: Free
- Behavior: writes, destructive (needs confirmation), idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
user_id | integer | yes | The ID of the user to delete |
user.delete_email
Section titled “user.delete_email”Delete an email address from the authenticated user’s account. Returns: a confirmation naming the deleted email ID. See also:
user.get_email,user.add_email,user.delete_email_for_user.
- Meta-tool:
gitlab_user, actiondelete_email - Individual tool:
gitlab_delete_email - Tier: Free
- Behavior: writes, destructive (needs confirmation), idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
email_id | integer | yes | Email ID to delete |
user.delete_email_for_user
Section titled “user.delete_email_for_user”Delete an email address from a specific user’s account (admin only). Returns: a confirmation naming the deleted email ID. See also:
user.emails_for_user,user.add_email_for_user,user.delete_email.
- Meta-tool:
gitlab_user, actiondelete_email_for_user - Individual tool:
gitlab_delete_email_for_user - Tier: Free
- Behavior: writes, destructive (needs confirmation), idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
email_id | integer | yes | Email ID to delete |
user_id | integer | yes | GitLab user ID |
user.delete_gpg_key
Section titled “user.delete_gpg_key”Delete a GPG key from the authenticated user’s account. Returns: a confirmation naming the deleted key ID. See also:
user.gpg_keys,user.get_gpg_key,user.add_gpg_key,user.delete_gpg_key_for_user.
- Meta-tool:
gitlab_user, actiondelete_gpg_key - Individual tool:
gitlab_delete_gpg_key - Tier: Free
- Behavior: writes, destructive (needs confirmation), idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
key_id | integer | yes | The ID of the GPG key to delete |
user.delete_gpg_key_for_user
Section titled “user.delete_gpg_key_for_user”Delete a GPG key from a specific user’s account (admin only). Returns: a confirmation naming the deleted key ID. See also:
user.gpg_keys_for_user,user.get_gpg_key_for_user,user.add_gpg_key_for_user,user.delete_gpg_key.
- Meta-tool:
gitlab_user, actiondelete_gpg_key_for_user - Individual tool:
gitlab_delete_gpg_key_for_user - Tier: Free
- Behavior: writes, destructive (needs confirmation), idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
key_id | integer | yes | The ID of the GPG key to delete |
user_id | integer | yes | The ID of the user |
user.delete_identity
Section titled “user.delete_identity”Delete a user’s external identity. Returns: confirmation with user ID and provider. Requires admin token. See also:
user.get,user.modify.
- Meta-tool:
gitlab_user, actiondelete_identity - Individual tool:
gitlab_delete_user_identity - Tier: Free
- Behavior: writes, destructive (needs confirmation), idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
provider | string | yes | The external provider name (e.g. ldap or saml) |
user_id | integer | yes | The ID of the user |
user.delete_ssh_key
Section titled “user.delete_ssh_key”Delete one of the current user’s SSH keys. Returns: confirmation with the deleted key ID. See also:
user.ssh_keys,user.get_ssh_key,user.add_ssh_key.
- Meta-tool:
gitlab_user, actiondelete_ssh_key - Individual tool:
gitlab_delete_ssh_key - Tier: Free
- Behavior: writes, destructive (needs confirmation), idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
key_id | integer | yes | The ID of the SSH key to delete |
user.delete_ssh_key_for_user
Section titled “user.delete_ssh_key_for_user”Delete a specific user’s SSH key. Returns: confirmation with the deleted key ID. Requires admin token. See also:
user.ssh_keys_for_user,user.get_ssh_key_for_user,user.add_ssh_key_for_user.
- Meta-tool:
gitlab_user, actiondelete_ssh_key_for_user - Individual tool:
gitlab_delete_ssh_key_for_user - Tier: Free
- Behavior: writes, destructive (needs confirmation), idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
key_id | integer | yes | The ID of the SSH key to delete |
user_id | integer | yes | The ID of the user |
user.disable_two_factor
Section titled “user.disable_two_factor”Disable 2FA for a user. Returns: confirmation with the user ID and action. See also:
user.get,user.modify.
- Meta-tool:
gitlab_user, actiondisable_two_factor - Individual tool:
gitlab_disable_two_factor - Tier: Free
- Behavior: writes, destructive (needs confirmation), idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
user_id | integer | yes | The ID of the user |
user.emails
Section titled “user.emails”List the current user’s email addresses. Returns: email entries with ID, address, and confirmation time, with pagination metadata. See also:
user.me,user.modify.
- Meta-tool:
gitlab_user, actionemails - Individual tool:
gitlab_list_emails - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
page | integer | no | Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward. |
per_page | integer | no | Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large. |
user.emails_for_user
Section titled “user.emails_for_user”List the email addresses registered to a specific user account. Returns: each email’s ID, address, and confirmation timestamp, with pagination metadata. See also:
user.get_email,user.add_email_for_user,user.delete_email_for_user,user.get.
- Meta-tool:
gitlab_user, actionemails_for_user - Individual tool:
gitlab_list_emails_for_user - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
order_by | string | no | Column to order keyset-paginated results by (e.g. id) |
page | integer | no | Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward. |
page_token | string | no | Keyset pagination cursor: record id at which to fetch the next page, taken from the previous keyset response. Only used when pagination=‘keyset’. |
pagination | string | no | Pagination method: ‘keyset’ for keyset-based pagination on large ordered result sets, or ‘offset’ (the default). Keyset avoids deep-offset cost. |
per_page | integer | no | Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large. |
sort | string (asc, desc) | no | Sort direction for ordered results: asc or desc |
user_id | integer | no | GitLab user ID |
user.event_list_contributions
Section titled “user.event_list_contributions”List the current user’s contribution events. Returns: each event with action_name, target type and IID, push_data, embedded note, author object, created timestamp, and pagination metadata. See also:
user.event_list_project,user.get.
- Meta-tool:
gitlab_user, actionevent_list_contributions - Individual tool:
gitlab_user_contribution_event_list - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
action | string (created, updated, closed, reopened, pushed, commented, merged, joined, left, destroyed, expired, approved, transferred) | no | Filter by event action, one of created, updated, closed, reopened, pushed, commented, merged, joined, left, destroyed, expired, approved, transferred. Any other value is refused before the request, since GitLab would ignore it and answer every event. |
after | string | no | Return events after this date (YYYY-MM-DD) |
before | string | no | Return events before this date (YYYY-MM-DD) |
order_by | string | no | Column by which to order keyset-paginated results (id) |
page | integer | no | Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward. |
page_token | string | no | Keyset pagination cursor: record id at which to fetch the next page, taken from the previous keyset response. Only used when pagination=‘keyset’. |
pagination | string | no | Pagination method: ‘keyset’ for keyset-based pagination on large ordered result sets, or ‘offset’ (the default). Keyset avoids deep-offset cost. |
per_page | integer | no | Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large. |
scope | string | no | Include events from all projects (all) or only user’s projects |
sort | string (asc, desc) | no | Sort order (asc or desc) |
target_type | string (issue, milestone, merge_request, note, project, snippet, user, wiki, design) | no | Filter by event target type, one of issue, milestone, merge_request, note, project, snippet, user, wiki, design. GitLab refuses any other value, epic included. Responses spell the type in model form (Issue, MergeRequest, WikiPage::Meta, DesignManagement::Design), which a filter does not accept. |
user.event_list_project
Section titled “user.event_list_project”List a project’s visible activity events. Returns: each event with action_name, target type and IID, push_data, embedded note with author, data (ref, commits, repository), author object, created timestamp, and pagination metadata. See also:
user.event_list_contributions,project.get.
- Meta-tool:
gitlab_user, actionevent_list_project - Individual tool:
gitlab_project_event_list - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
project_id | string/integer | yes | Project ID or URL-encoded path |
action | string (created, updated, closed, reopened, pushed, commented, merged, joined, left, destroyed, expired, approved, transferred) | no | Filter by event action, one of created, updated, closed, reopened, pushed, commented, merged, joined, left, destroyed, expired, approved, transferred. Any other value is refused before the request, since GitLab would ignore it and answer every event. |
after | string | no | Return events after this date (YYYY-MM-DD) |
before | string | no | Return events before this date (YYYY-MM-DD) |
order_by | string | no | Column by which to order keyset-paginated results (id) |
page | integer | no | Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward. |
page_token | string | no | Keyset pagination cursor: record id at which to fetch the next page, taken from the previous keyset response. Only used when pagination=‘keyset’. |
pagination | string | no | Pagination method: ‘keyset’ for keyset-based pagination on large ordered result sets, or ‘offset’ (the default). Keyset avoids deep-offset cost. |
per_page | integer | no | Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large. |
sort | string (asc, desc) | no | Sort order (asc or desc, default desc) |
target_type | string (issue, milestone, merge_request, note, project, snippet, user, wiki, design) | no | Filter by event target type, one of issue, milestone, merge_request, note, project, snippet, user, wiki, design. GitLab refuses any other value, epic included. Responses spell the type in model form (Issue, MergeRequest, WikiPage::Meta, DesignManagement::Design), which a filter does not accept. |
user.get
Section titled “user.get”Get one user by ID. Returns: detailed account profile metadata and status fields. See also:
user.list,user.modify,user.delete.
- Meta-tool:
gitlab_user, actionget - Individual tool:
gitlab_get_user - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
user_id | integer | yes | The ID of the user to retrieve |
with_custom_attributes | boolean | no | Include custom attributes in the response (admin only) |
user.get_email
Section titled “user.get_email”Get one email address from the authenticated user’s account by ID. Returns: the email’s ID, address, and confirmation timestamp. See also:
user.add_email,user.delete_email,user.emails_for_user.
- Meta-tool:
gitlab_user, actionget_email - Individual tool:
gitlab_get_email - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
email_id | integer | no | Email ID to retrieve |
user.get_gpg_key
Section titled “user.get_gpg_key”Get one GPG key from the authenticated user’s account by ID. Returns: the key’s ID, armored public key, and creation timestamp. See also:
user.gpg_keys,user.add_gpg_key,user.delete_gpg_key.
- Meta-tool:
gitlab_user, actionget_gpg_key - Individual tool:
gitlab_get_gpg_key - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
key_id | integer | yes | The ID of the GPG key |
user.get_gpg_key_for_user
Section titled “user.get_gpg_key_for_user”Get one GPG key from a specific user’s account by ID. Returns: the key’s ID, armored public key, and creation timestamp. See also:
user.gpg_keys_for_user,user.add_gpg_key_for_user,user.delete_gpg_key_for_user,user.get.
- Meta-tool:
gitlab_user, actionget_gpg_key_for_user - Individual tool:
gitlab_get_gpg_key_for_user - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
key_id | integer | yes | The ID of the GPG key |
user_id | integer | yes | The ID of the user |
user.get_impersonation_token
Section titled “user.get_impersonation_token”Get a single impersonation token for a user by token id. Returns: the token’s id, name, active flag, scopes, revoked flag, created_at, expires_at, and last_used_at. See also:
user.list_impersonation_tokens,user.revoke_impersonation_token.
- Meta-tool:
gitlab_user, actionget_impersonation_token - Individual tool:
gitlab_get_impersonation_token - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
token_id | integer | yes | Impersonation token ID |
user_id | integer | yes | GitLab user ID |
user.get_ssh_key
Section titled “user.get_ssh_key”Get one of the current user’s SSH keys by ID. Returns: key ID, title, public key, usage type, and expiry. See also:
user.ssh_keys,user.add_ssh_key,user.delete_ssh_key.
- Meta-tool:
gitlab_user, actionget_ssh_key - Individual tool:
gitlab_get_ssh_key - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
key_id | integer | yes | The ID of the SSH key |
user.get_ssh_key_for_user
Section titled “user.get_ssh_key_for_user”Get a specific user’s SSH key by ID. Returns: key ID, title, public key, usage type, and expiry. See also:
user.ssh_keys_for_user,user.add_ssh_key_for_user,user.delete_ssh_key_for_user.
- Meta-tool:
gitlab_user, actionget_ssh_key_for_user - Individual tool:
gitlab_get_ssh_key_for_user - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
key_id | integer | yes | The ID of the SSH key |
user_id | integer | yes | The ID of the user |
user.get_status
Section titled “user.get_status”Get a user’s status by ID. Returns: emoji, message, availability, and clear-status time. See also:
user.current_user_status,user.set_status,user.get.
- Meta-tool:
gitlab_user, actionget_status - Individual tool:
gitlab_get_user_status - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
user_id | integer | yes | The ID of the user whose status to retrieve |
user.gpg_keys
Section titled “user.gpg_keys”List the authenticated user’s GPG keys. Returns: each key’s ID, armored public key, and creation timestamp, with pagination metadata. See also:
user.get_gpg_key,user.add_gpg_key,user.delete_gpg_key,user.gpg_keys_for_user.
- Meta-tool:
gitlab_user, actiongpg_keys - Individual tool:
gitlab_list_gpg_keys - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
page | integer | no | Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward. |
per_page | integer | no | Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large. |
user.gpg_keys_for_user
Section titled “user.gpg_keys_for_user”List a specific user’s GPG keys. Returns: each key’s ID, armored public key, and creation timestamp, with pagination metadata. See also:
user.get_gpg_key_for_user,user.add_gpg_key_for_user,user.delete_gpg_key_for_user,user.get.
- Meta-tool:
gitlab_user, actiongpg_keys_for_user - Individual tool:
gitlab_list_gpg_keys_for_user - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
user_id | integer | yes | The ID of the user |
page | integer | no | Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward. |
per_page | integer | no | Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large. |
user.key_get_by_fingerprint
Section titled “user.key_get_by_fingerprint”Look up an SSH key or deploy key by fingerprint and return the owning user. Returns: the key ID, title, public key, creation time, and the owning user (ID, username, name). See also:
user.get_ssh_key,user.ssh_keys,user.ssh_keys_for_user.
- Meta-tool:
gitlab_user, actionkey_get_by_fingerprint - Individual tool:
gitlab_get_key_by_fingerprint - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
fingerprint | string | yes | SSH key fingerprint, either the SHA256 form (for example SHA256:abc123) or the legacy MD5 hex-pair form (for example MD5:aa:bb:cc) |
user.key_get_with_user
Section titled “user.key_get_with_user”Look up an SSH key by its global ID and return the owning user. Returns: the key ID, title, public key, creation time, and the owning user (ID, username, name). See also:
user.get_ssh_key,user.ssh_keys,user.ssh_keys_for_user.
- Meta-tool:
gitlab_user, actionkey_get_with_user - Individual tool:
gitlab_get_key_with_user - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
key_id | integer | yes | SSH key ID |
user.list
Section titled “user.list”List users with filtering and pagination support. Returns: user summaries including ID, username, name, state, and profile URLs. See also:
user.get,user.me,user.create.
- Meta-tool:
gitlab_user, actionlist - Individual tool:
gitlab_list_users - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
active | boolean | no | Filter for active users only |
admins | boolean | no | Filter for administrators only |
blocked | boolean | no | Filter for blocked users only |
created_after | string | no | Filter users created after this date (RFC3339) |
created_before | string | no | Filter users created before this date (RFC3339) |
custom_attributes | object | no | Filter users by custom attribute key/value pairs (admin only). Different from with_custom_attributes, which only controls whether attributes are returned |
exclude_active | boolean | no | Exclude active users from the result |
exclude_external | boolean | no | Exclude external users from the result |
exclude_humans | boolean | no | Exclude human users from the result |
exclude_internal | boolean | no | Exclude internal (bot/system) users from the result |
extern_uid | string | no | Filter by external UID (use with provider) |
external | boolean | no | Filter for external users only |
humans | boolean | no | Filter for human (non-bot, non-internal) users only |
order_by | string (id, name, username, created_at, updated_at) | no | Order users by: id, name, username, created_at, or updated_at. |
page | integer | no | Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward. |
page_token | string | no | Keyset pagination cursor: record id at which to fetch the next page, taken from the previous keyset response. Only used when pagination=‘keyset’. |
pagination | string | no | Pagination method: ‘keyset’ for keyset-based pagination on large ordered result sets, or ‘offset’ (the default). Keyset avoids deep-offset cost. |
per_page | integer | no | Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large. |
provider | string | no | Filter by external provider name (use with extern_uid) |
public_email | string | no | Filter by exact public email address |
search | string | no | Search users by name or username or email |
sort | string (asc, desc) | no | Sort order: asc or desc |
two_factor | string (enabled, disabled) | no | Filter by two-factor authentication status: enabled or disabled. |
username | string | no | Filter by exact username |
with_custom_attributes | boolean | no | Include custom attributes in the response (admin only) |
without_project_bots | boolean | no | Exclude project bot users from the result |
without_projects | boolean | no | Filter for users without any projects |
user.list_impersonation_tokens
Section titled “user.list_impersonation_tokens”List the impersonation tokens of a user. Returns: each token’s id, name, active flag, scopes, revoked flag, created_at, expires_at, and last_used_at, with pagination metadata. See also:
user.get_impersonation_token,user.create_impersonation_token,user.revoke_impersonation_token.
- Meta-tool:
gitlab_user, actionlist_impersonation_tokens - Individual tool:
gitlab_list_impersonation_tokens - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
user_id | integer | yes | GitLab user ID |
order_by | string | no | Column to order keyset-paginated results by |
page | integer | no | Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward. |
page_token | string | no | Keyset pagination cursor: record id at which to fetch the next page, taken from the previous keyset response. Only used when pagination=‘keyset’. |
pagination | string | no | Pagination method: ‘keyset’ for keyset-based pagination on large ordered result sets, or ‘offset’ (the default). Keyset avoids deep-offset cost. |
per_page | integer | no | Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large. |
sort | string (asc, desc) | no | Sort order for keyset pagination: ‘asc’ or ‘desc’ |
state | string (all, active, inactive) | no | Filter by state: all, active, or inactive |
user.list_service_accounts
Section titled “user.list_service_accounts”List instance-level service accounts. Returns: service account summaries with ID, username, name, and email, with pagination metadata. Requires admin token. See also:
user.create_service_account,user.update_service_account.
- Meta-tool:
gitlab_user, actionlist_service_accounts - Individual tool:
gitlab_list_service_accounts - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
order_by | string (id, username) | no | Field to order by: id (default) or username |
page | integer | no | Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward. |
page_token | string | no | Keyset pagination cursor: record id at which to fetch the next page, taken from the previous keyset response. Only used when pagination=‘keyset’. |
pagination | string | no | Pagination method: ‘keyset’ for keyset-based pagination on large ordered result sets, or ‘offset’ (the default). Keyset avoids deep-offset cost. |
per_page | integer | no | Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large. |
sort | string (asc, desc) | no | Sort direction (asc/desc) |
user.me
Section titled “user.me”Get the current authenticated user. Returns: account ID, username, name, state, avatar URL, and profile metadata. See also:
user.list,user.current_user_status,user.emails.
- Meta-tool:
gitlab_user, actionme - Individual tool:
gitlab_user_current - Tier: Free
- Behavior: read-only, idempotent
No parameters.
user.memberships
Section titled “user.memberships”List a user’s memberships. Returns: source ID, name, type, and access level per membership. See also:
user.get,user.associations_count,user.activities.
- Meta-tool:
gitlab_user, actionmemberships - Individual tool:
gitlab_get_user_memberships - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
user_id | integer | yes | The ID of the user |
order_by | string | no | Column to order keyset-paginated results by (e.g. id) |
page | integer | no | Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward. |
page_token | string | no | Keyset pagination cursor: record id at which to fetch the next page, taken from the previous keyset response. Only used when pagination=‘keyset’. |
pagination | string | no | Pagination method: ‘keyset’ for keyset-based pagination on large ordered result sets, or ‘offset’ (the default). Keyset avoids deep-offset cost. |
per_page | integer | no | Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large. |
sort | string (asc, desc) | no | Sort order for keyset pagination: asc or desc |
type | string (Project, Namespace) | no | Membership type filter: Project (project memberships) or Namespace (group memberships). |
user.modify
Section titled “user.modify”Modify an existing user. Returns: the updated user profile metadata. See also:
user.get,user.create,user.delete.
- Meta-tool:
gitlab_user, actionmodify - Individual tool:
gitlab_modify_user - Tier: Free
- Behavior: writes, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
user_id | integer | yes | The ID of the user to modify |
admin | boolean | no | Grant or revoke admin privileges |
auditor (Premium) | boolean | no | Grant or revoke auditor privileges (Premium/Ultimate) |
bio | string | no | New bio text |
can_create_group | boolean | no | Allow user to create groups |
commit_email | string | no | Email used for commits |
email | string | no | New email address |
extern_uid | string | no | External UID for the provider |
external | boolean | no | Mark or unmark as external |
job_title | string | no | New job title |
linkedin | string | no | LinkedIn account |
location | string | no | New location |
name | string | no | New display name |
note | string | no | New admin note |
organization | string | no | New organization |
password | string | no | New password |
private_profile | boolean | no | Set profile as private |
projects_limit | integer | no | New maximum projects limit |
provider | string | no | External provider name (use with extern_uid) |
public_email | string | no | Publicly visible email address |
skip_reconfirmation | boolean | no | Skip reconfirmation on email change |
theme_id | integer | no | GitLab theme ID for the user’s UI |
twitter | string | no | Twitter/X account |
username | string | no | New username |
view_diffs_file_by_file | boolean | no | Show whitespace changes in diffs file by file |
website_url | string | no | User website URL |
user.namespace_exists
Section titled “user.namespace_exists”Check whether a namespace path is taken. Returns: an exists flag and suggested alternative paths when the path is unavailable. See also:
user.namespace_get,user.namespace_search.
- Meta-tool:
gitlab_user, actionnamespace_exists - Individual tool:
gitlab_namespace_exists - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
id | string | yes | Namespace path to check for existence |
parent_id | integer | no | Parent namespace ID to scope the check |
user.namespace_get
Section titled “user.namespace_get”Get a single namespace by ID or path. Returns: the namespace with id, name, path, kind, full path, parent id, plan, trial state, and seat usage. See also:
user.namespace_list,user.namespace_search.
- Meta-tool:
gitlab_user, actionnamespace_get - Individual tool:
gitlab_namespace_get - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
id | string | yes | Namespace ID or path |
user.namespace_list
Section titled “user.namespace_list”List namespaces visible to the authenticated user. Returns: matching namespaces with id, name, path, kind, plan, seat usage, and pagination metadata. See also:
user.namespace_get,user.namespace_search,group.list.
- Meta-tool:
gitlab_user, actionnamespace_list - Individual tool:
gitlab_namespace_list - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
order_by | string | no | Column to order keyset-paginated results by (e.g. id) |
owned_only | boolean | no | If true return only namespaces owned by the authenticated user |
page | integer | no | Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward. |
page_token | string | no | Keyset pagination cursor: record id at which to fetch the next page, taken from the previous keyset response. Only used when pagination=‘keyset’. |
pagination | string | no | Pagination method: ‘keyset’ for keyset-based pagination on large ordered result sets, or ‘offset’ (the default). Keyset avoids deep-offset cost. |
per_page | integer | no | Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large. |
search | string | no | Filter namespaces by search term |
sort | string (asc, desc) | no | Sort direction for keyset-paginated results (asc, desc) |
top_level_only | boolean | no | If true return only top-level namespaces |
user.namespace_search
Section titled “user.namespace_search”Search namespaces by name or path. Returns: matching namespaces with id, name, path, kind, and pagination metadata. See also:
user.namespace_list,user.namespace_get.
- Meta-tool:
gitlab_user, actionnamespace_search - Individual tool:
gitlab_namespace_search - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
query | string | yes | Search query string for namespaces |
user.notification_global_get
Section titled “user.notification_global_get”Get the authenticated user’s global notification settings. Returns: the global notification level, notification email, and the per-event flags (issue, merge request, pipeline, note, and epic events) when the level is custom. See also:
user.notification_global_update,user.notification_project_get,user.notification_group_get.
- Meta-tool:
gitlab_user, actionnotification_global_get - Individual tool:
gitlab_notification_global_get - Tier: Free
- Behavior: read-only, idempotent
No parameters.
user.notification_global_update
Section titled “user.notification_global_update”Update the authenticated user’s global notification settings. Returns: the updated global notification level, notification email, and per-event flags. See also:
user.notification_global_get,user.notification_project_update,user.notification_group_update.
- Meta-tool:
gitlab_user, actionnotification_global_update - Individual tool:
gitlab_notification_global_update - Tier: Free
- Behavior: writes, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
close_issue | boolean | no | Notify on issue close |
close_merge_request | boolean | no | Notify on MR close |
failed_pipeline | boolean | no | Notify on pipeline failure |
fixed_pipeline | boolean | no | Notify on pipeline fix |
issue_due | boolean | no | Notify on issue due date |
level | string (disabled, participating, watch, mention, custom) | no | Notification level: disabled, participating, watch, mention, custom |
merge_merge_request | boolean | no | Notify on MR merge |
merge_when_pipeline_succeeds | boolean | no | Notify on merge when pipeline succeeds |
moved_project | boolean | no | Notify on project move |
new_epic | boolean | no | Notify on new epic |
new_issue | boolean | no | Notify on new issue |
new_merge_request | boolean | no | Notify on new MR |
new_note | boolean | no | Notify on new note |
notification_email | string | no | Email address for notifications |
push_to_merge_request | boolean | no | Notify on push to MR |
reassign_issue | boolean | no | Notify on issue reassign |
reassign_merge_request | boolean | no | Notify on MR reassign |
reopen_issue | boolean | no | Notify on issue reopen |
reopen_merge_request | boolean | no | Notify on MR reopen |
success_pipeline | boolean | no | Notify on pipeline success |
user.notification_group_get
Section titled “user.notification_group_get”Get the authenticated user’s notification settings for a group. Returns: the group notification level, notification email, and per-event flags when the level is custom. See also:
user.notification_group_update,user.notification_global_get,user.notification_project_get.
- Meta-tool:
gitlab_user, actionnotification_group_get - Individual tool:
gitlab_notification_group_get - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
group_id | string/integer | yes | Group ID or URL-encoded path |
user.notification_group_update
Section titled “user.notification_group_update”Update the authenticated user’s notification settings for a group. Returns: the updated group notification level, notification email, and per-event flags. See also:
user.notification_group_get,user.notification_global_update,user.notification_project_update.
- Meta-tool:
gitlab_user, actionnotification_group_update - Individual tool:
gitlab_notification_group_update - Tier: Free
- Behavior: writes, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
group_id | string/integer | yes | Group ID or URL-encoded path |
close_issue | boolean | no | Notify on issue close |
close_merge_request | boolean | no | Notify on MR close |
failed_pipeline | boolean | no | Notify on pipeline failure |
fixed_pipeline | boolean | no | Notify on pipeline fix |
issue_due | boolean | no | Notify on issue due date |
level | string (disabled, participating, watch, global, mention, custom) | no | Notification level: disabled, participating, watch, global, mention, custom |
merge_merge_request | boolean | no | Notify on MR merge |
merge_when_pipeline_succeeds | boolean | no | Notify on merge when pipeline succeeds |
moved_project | boolean | no | Notify on project move |
new_epic | boolean | no | Notify on new epic |
new_issue | boolean | no | Notify on new issue |
new_merge_request | boolean | no | Notify on new MR |
new_note | boolean | no | Notify on new note |
notification_email | string | no | Email address for notifications |
push_to_merge_request | boolean | no | Notify on push to MR |
reassign_issue | boolean | no | Notify on issue reassign |
reassign_merge_request | boolean | no | Notify on MR reassign |
reopen_issue | boolean | no | Notify on issue reopen |
reopen_merge_request | boolean | no | Notify on MR reopen |
success_pipeline | boolean | no | Notify on pipeline success |
user.notification_project_get
Section titled “user.notification_project_get”Get the authenticated user’s notification settings for a project. Returns: the project notification level, notification email, and per-event flags when the level is custom. See also:
user.notification_project_update,user.notification_global_get,user.notification_group_get.
- Meta-tool:
gitlab_user, actionnotification_project_get - Individual tool:
gitlab_notification_project_get - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
project_id | string/integer | yes | Project ID or URL-encoded path |
user.notification_project_update
Section titled “user.notification_project_update”Update the authenticated user’s notification settings for a project. Returns: the updated project notification level, notification email, and per-event flags. See also:
user.notification_project_get,user.notification_global_update,user.notification_group_update.
- Meta-tool:
gitlab_user, actionnotification_project_update - Individual tool:
gitlab_notification_project_update - Tier: Free
- Behavior: writes, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
project_id | string/integer | yes | Project ID or URL-encoded path |
close_issue | boolean | no | Notify on issue close |
close_merge_request | boolean | no | Notify on MR close |
failed_pipeline | boolean | no | Notify on pipeline failure |
fixed_pipeline | boolean | no | Notify on pipeline fix |
issue_due | boolean | no | Notify on issue due date |
level | string (disabled, participating, watch, global, mention, custom) | no | Notification level: disabled, participating, watch, global, mention, custom |
merge_merge_request | boolean | no | Notify on MR merge |
merge_when_pipeline_succeeds | boolean | no | Notify on merge when pipeline succeeds |
moved_project | boolean | no | Notify on project move |
new_epic | boolean | no | Notify on new epic |
new_issue | boolean | no | Notify on new issue |
new_merge_request | boolean | no | Notify on new MR |
new_note | boolean | no | Notify on new note |
notification_email | string | no | Email address for notifications |
push_to_merge_request | boolean | no | Notify on push to MR |
reassign_issue | boolean | no | Notify on issue reassign |
reassign_merge_request | boolean | no | Notify on MR reassign |
reopen_issue | boolean | no | Notify on issue reopen |
reopen_merge_request | boolean | no | Notify on MR reopen |
success_pipeline | boolean | no | Notify on pipeline success |
user.reject
Section titled “user.reject”Reject a pending user sign-up. Returns: confirmation with the user ID and action. Permanently deletes the pending user. See also:
user.approve,user.get,user.list.
- Meta-tool:
gitlab_user, actionreject - Individual tool:
gitlab_reject_user - Tier: Free
- Behavior: writes, destructive (needs confirmation), idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
user_id | integer | yes | The ID of the user |
user.revoke_impersonation_token
Section titled “user.revoke_impersonation_token”Revoke an impersonation token for a user by token id. Returns: a confirmation naming the user_id and token_id with the revoked flag set. See also:
user.list_impersonation_tokens,user.get_impersonation_token.
- Meta-tool:
gitlab_user, actionrevoke_impersonation_token - Individual tool:
gitlab_revoke_impersonation_token - Tier: Free
- Behavior: writes, destructive (needs confirmation), idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
token_id | integer | yes | Impersonation token ID to revoke |
user_id | integer | yes | GitLab user ID |
user.set_status
Section titled “user.set_status”Set the current user’s status. Returns: the updated emoji, message, availability, and clear-status time. See also:
user.current_user_status,user.get_status.
- Meta-tool:
gitlab_user, actionset_status - Individual tool:
gitlab_set_user_status - Tier: Free
- Behavior: writes, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
availability | string (not_set, busy) | no | User availability: not_set (clear busy state) or busy. |
clear_status_after | string (30_minutes, 3_hours, 8_hours, 1_day, 3_days, 7_days, 30_days) | no | Duration after which the status auto-clears: 30_minutes, 3_hours, 8_hours, 1_day, 3_days, 7_days, or 30_days. |
emoji | string | no | The emoji to set for the status (e.g. coffee or speech_balloon) |
message | string | no | The status message text |
user.ssh_keys
Section titled “user.ssh_keys”List the current user’s SSH keys. Returns: key summaries with ID, title, fingerprint, usage type, and expiry. See also:
user.get_ssh_key,user.add_ssh_key,user.delete_ssh_key.
- Meta-tool:
gitlab_user, actionssh_keys - Individual tool:
gitlab_list_ssh_keys - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
order_by | string | no | Column to order keyset-paginated results by (e.g. id) |
page | integer | no | Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward. |
page_token | string | no | Keyset pagination cursor: record id at which to fetch the next page, taken from the previous keyset response. Only used when pagination=‘keyset’. |
pagination | string | no | Pagination method: ‘keyset’ for keyset-based pagination on large ordered result sets, or ‘offset’ (the default). Keyset avoids deep-offset cost. |
per_page | integer | no | Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large. |
sort | string (asc, desc) | no | Sort order for keyset pagination: asc or desc |
user.ssh_keys_for_user
Section titled “user.ssh_keys_for_user”List a specific user’s SSH keys. Returns: key summaries with ID, title, fingerprint, usage type, and expiry. See also:
user.get_ssh_key_for_user,user.add_ssh_key_for_user,user.delete_ssh_key_for_user.
- Meta-tool:
gitlab_user, actionssh_keys_for_user - Individual tool:
gitlab_list_ssh_keys_for_user - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
user_id | integer | yes | The ID of the user |
order_by | string | no | Column to order keyset-paginated results by (e.g. id) |
page | integer | no | Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward. |
page_token | string | no | Keyset pagination cursor: record id at which to fetch the next page, taken from the previous keyset response. Only used when pagination=‘keyset’. |
pagination | string | no | Pagination method: ‘keyset’ for keyset-based pagination on large ordered result sets, or ‘offset’ (the default). Keyset avoids deep-offset cost. |
per_page | integer | no | Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large. |
sort | string (asc, desc) | no | Sort order for keyset pagination: asc or desc |
user.todo_list
Section titled “user.todo_list”List the authenticated user’s to-do items with optional filtering and pagination. Returns: to-do items with action, target object, project, author, state, and pagination metadata. See also:
user.todo_mark_done,user.todo_mark_all_done.
- Meta-tool:
gitlab_user, actiontodo_list - Individual tool:
gitlab_todo_list - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
action | string (assigned, review_requested, mentioned, build_failed, marked, approval_required, unmergeable, directly_addressed, member_access_requested, review_submitted, ssh_key_expired, ssh_key_expiring_soon, transfer_failed, merge_train_removed, okr_checkin_requested, added_approver, duo_pro_access_granted, duo_enterprise_access_granted, duo_core_access_granted, duo_workflow_input_required) | no | Filter by action, for example assigned, mentioned, review_requested, build_failed or transfer_failed (a project or group transfer GitLab failed in the background) |
author_id | integer | no | Filter by author user ID |
group_id | integer | no | Filter by group ID |
order_by | string | no | Order results by field (e.g. id, created_at). Combine with sort. |
page | integer | no | Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward. |
page_token | string | no | Keyset pagination cursor: record id at which to fetch the next page, taken from the previous keyset response. Only used when pagination=‘keyset’. |
pagination | string | no | Pagination method: ‘keyset’ for keyset-based pagination on large ordered result sets, or ‘offset’ (the default). Keyset avoids deep-offset cost. |
per_page | integer | no | Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large. |
project_id | integer | no | Filter by project ID |
sort | string (asc, desc) | no | Sort direction: asc or desc. |
state | string (pending, done) | no | Filter by state: pending or done (default: pending) |
type | string (Commit, Issue, WorkItem, MergeRequest, DesignManagement::Design, AlertManagement::Alert, Namespace, Project, Key, WikiPage::Meta, Epic, Vulnerability, User, ComplianceManagement::Projects::ComplianceViolation, Ai::DuoWorkflows::Workflow) | no | Filter by target type, for example Issue, MergeRequest, Commit, Epic, Project or Namespace (a group) |
user.todo_mark_all_done
Section titled “user.todo_mark_all_done”Mark all pending to-do items as done. Returns: a confirmation that all items were cleared. See also:
user.todo_list,user.todo_mark_done.
- Meta-tool:
gitlab_user, actiontodo_mark_all_done - Individual tool:
gitlab_todo_mark_all_done - Tier: Free
- Behavior: writes, idempotent
No parameters.
user.todo_mark_done
Section titled “user.todo_mark_done”Mark a single to-do item as done. Returns: a confirmation naming the to-do item ID. See also:
user.todo_list,user.todo_mark_all_done.
- Meta-tool:
gitlab_user, actiontodo_mark_done - Individual tool:
gitlab_todo_mark_done - Tier: Free
- Behavior: writes, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
id | integer | yes | ID of the to-do item to mark as done |
user.unban
Section titled “user.unban”Unban a previously banned user. Returns: confirmation with the user ID and action. See also:
user.ban,user.unblock,user.get.
- Meta-tool:
gitlab_user, actionunban - Individual tool:
gitlab_unban_user - Tier: Free
- Behavior: writes, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
user_id | integer | yes | The ID of the user |
user.unblock
Section titled “user.unblock”Unblock a previously blocked user. Returns: confirmation with the user ID and action. See also:
user.block,user.activate,user.get.
- Meta-tool:
gitlab_user, actionunblock - Individual tool:
gitlab_unblock_user - Tier: Free
- Behavior: writes, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
user_id | integer | yes | The ID of the user |
user.update_service_account
Section titled “user.update_service_account”Update an instance-level service account. Returns: updated service account object including email and unconfirmed_email. Requires admin token. See also:
user.create_service_account,user.list_service_accounts.
- Meta-tool:
gitlab_user, actionupdate_service_account - Individual tool:
gitlab_update_instance_service_account - Tier: Free
- Behavior: writes, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
service_account_id | integer | yes | Service account ID to update |
email | string | no | New email for the service account |
name | string | no | New name for the service account |
username | string | no | New username for the service account |
user.upload_avatar
Section titled “user.upload_avatar”Upload the current user’s avatar. Returns: the updated user profile including the new avatar URL. GitLab 19 responds with only avatar_url, so other profile fields (including id) may be empty. Use user.current for the full profile. Provide filename and exactly one of file_path or content_base64. See also:
user.me,user.modify.
- Meta-tool:
gitlab_user, actionupload_avatar - Individual tool:
gitlab_upload_user_avatar - Tier: Free
- Behavior: writes, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
filename | string | yes | Avatar filename (e.g. avatar.png) |
content_base64 | string | no | Base64-encoded image content. Only one of file_path or content_base64 should be provided. |
file_path | string | no | Absolute path to a local image file on the MCP server filesystem. Alternative to content_base64 for files too large to base64-encode. Only one of file_path or content_base64 should be provided. |