User
gitlab_userManage GitLab user accounts: CRUD, block/unblock, approve; manage SSH/GPG keys, emails, personal access & impersonation tokens, user status, todos, events, notification settings, namespaces, avatars. Supports admin and current user.
Instructions
Example: {"action":"activate","params":{...}} For the params schema of any action, read the MCP resource gitlab://schema/meta/gitlab_user/.
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 / me: returns authenticated user info.
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*
See also: gitlab_access (deploy/access tokens), gitlab_admin (instance administration)
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | Action to perform. Pick exactly one of the values in `enum`. Each action expects its own `params` object — see the tool description for the per-action parameter list. | |
| params | No | Action-specific parameters as a JSON object. Required and optional fields differ per action; consult this tool's description for the chosen action. Send only the fields documented for that action — unknown keys are rejected with a validation error (only reserved meta keys like `confirm` are stripped before validation). For the JSON Schema of a specific action's `params`, read the MCP resource `gitlab://schema/meta/{tool}/{action}` (replace placeholders with the tool name and the chosen action). |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| next_steps | No | Optional. Suggested follow-up actions or tool calls for the LLM, contextual to the result. | |
| pagination | No | Present on list actions. Use `has_more` and `next_page` to paginate through results. |