Approve a merge request. Use this to record an approval on an existing merge request; it does not merge the request or change its source branch. The operation changes review state, may require re-authentication or approval permission, and returns the updated approval result or a permission/state error.

Current user's password. Required if 'Require user re-authentication to approve' is enabled in the project settings

The IID of the merge request to approve

Project ID or complete URL-encoded path to project

The HEAD of the merge request. Optional, but used to ensure the merge request hasn't changed since you last reviewed it

Publish all draft notes for a merge request. Optionally sets reviewer_state and posts a summary note (GitLab 19.2+). Can set reviewer_state even with no drafts. Use this for the specific operation described; choose a sibling tool when you need a different resource or lifecycle action. It changes remote GitLab state and requires the necessary project or group permission; GitLab returns validation, conflict, permission, or rate-limit errors instead of silently applying an invalid request. When `project_id` or `group_id` is accepted, provide the numeric ID or complete URL-encoded path described by the schema; use required identifiers and pagination fields exactly as documented.

If true, the summary note is internal (GitLab 19.2+, default false)

The IID of a merge request

Summary note body to post on the merge request (GitLab 19.2+)

Set reviewer review state after publishing (GitLab 19.2+). Does not record a formal approval. Works even with no draft notes.

Create a new branch. Use this to create a branch from a branch, tag, or commit; use `get_branch` or `list_branches` to inspect branches and `protect_branch` to configure protection afterward. The operation changes remote repository state, requires branch-creation permission, and returns the new branch or a validation, missing-ref, protected-project, or already-exists error. `project_id` accepts a numeric ID or URL-encoded path, `branch` is the new name, and `ref` selects its starting revision.

Name for the new branch

Source branch/commit for new branch

Create or update the status of a commit. Use this for a new resource or action; choose the corresponding update or edit tool when the resource already exists. It changes remote GitLab state and requires the necessary project or group permission; GitLab returns validation, conflict, permission, or rate-limit errors instead of silently applying an invalid request. When `project_id` or `group_id` is accepted, provide the numeric ID or complete URL-encoded path described by the schema; use required identifiers and pagination fields exactly as documented.

Alias for name. Provide either name or context, not both.

Total code coverage for this status

Short status description

Status name. GitLab defaults to 'default' when omitted.

Pipeline ID to attach the status to

The branch or tag ref

The commit hash to set the status on

Commit status state

pending running success failed canceled skipped

Target URL associated with this status

Create a draft note for a merge request. Use this for a new resource or action; choose the corresponding update or edit tool when the resource already exists. It changes remote GitLab state and requires the necessary project or group permission; GitLab returns validation, conflict, permission, or rate-limit errors instead of silently applying an invalid request. When `project_id` or `group_id` is accepted, provide the numeric ID or complete URL-encoded path described by the schema; use required identifiers and pagination fields exactly as documented.

The content of the draft note

The ID of a discussion the draft note replies to

The IID of a merge request

Position when creating a diff note

REQUIRED: Base commit SHA in the source branch. Get this from merge request diff_refs.base_sha.

REQUIRED: SHA referencing HEAD of the source branch. Get this from merge request diff_refs.head_sha.

IMAGE DIFFS ONLY: Height of the image (for position_type='image').

Line range for multiline comments on GitLab merge request diffs. VALIDATION RULES: 1) line_code is critical for GitLab API success, 2) start/end must have consistent types, 3) line numbers must form valid range, 4) get line_code from GitLab diff API, never generate manually.

End line position for multiline comment range. MUST specify either old_line OR new_line (or both for context), never neither. Range must be valid (end >= start).

CRITICAL: Line identifier in format '{file_path_sha1_hash}_{old_line_number}_{new_line_number}'. USUALLY REQUIRED for GitLab diff comments despite being optional in schema. Example: 'a1b2c3d4e5f6_12_17'. Must be from same file as start.line_code.

Line number in modified file (after changes). REQUIRED when type='new', NULL when type='old' (for purely deleted lines), can be present for context lines. MUST be >= start.new_line if both specified.

Line number in original file (before changes). REQUIRED when type='old', NULL when type='new' (for purely added lines), can be present for context lines. MUST be >= start.old_line if both specified.

Line type: 'old' = deleted/original line, 'new' = added/modified line, null = unchanged context. SHOULD MATCH start.type for consistent ranges (don't mix old/new types).

Start line position for multiline comment range. MUST specify either old_line OR new_line (or both for context), never neither.

CRITICAL: Line identifier in format '{file_path_sha1_hash}_{old_line_number}_{new_line_number}'. USUALLY REQUIRED for GitLab diff comments despite being optional in schema. Example: 'a1b2c3d4e5f6_10_15'. Get this from GitLab diff API response, never fabricate.

Line number in modified file (after changes). REQUIRED when type='new', NULL when type='old' (for purely deleted lines), can be present for context lines.

Line number in original file (before changes). REQUIRED when type='old', NULL when type='new' (for purely added lines), can be present for context lines.

Line type: 'old' = deleted/original line, 'new' = added/modified line, null = unchanged context. MUST match the line_code format and old_line/new_line values.

MULTILINE COMMENTS: Specify start/end line positions for commenting on multiple lines. Alternative to single old_line/new_line.

Line number in modified file (after changes). Use for added lines or context lines. NULL for deleted lines. For single-line comments on new lines.

File path after changes. REQUIRED for most diff comments. Use same as old_path if file wasn't renamed.

Line number in original file (before changes). Use for deleted lines or context lines. NULL for added lines. For single-line comments on old lines.

File path before changes. REQUIRED for most diff comments. Use same as new_path if file wasn't renamed.

REQUIRED: Position type. Use 'text' for code diffs, 'image' for image diffs, 'file' for file-level comments.

REQUIRED: SHA referencing the start commit of the source branch. Get this from merge request diff_refs.start_sha.

IMAGE DIFFS ONLY: Width of the image (for position_type='image').

IMAGE DIFFS ONLY: X coordinate on the image (for position_type='image').

IMAGE DIFFS ONLY: Y coordinate on the image (for position_type='image').

Project ID or complete URL-encoded path to project

Whether to resolve the discussion when publishing

Create new group or subgroup. Use this for a new resource or action; choose the corresponding update or edit tool when the resource already exists. It changes remote GitLab state and requires the necessary project or group permission; GitLab returns validation, conflict, permission, or rate-limit errors instead of silently applying an invalid request. When `project_id` or `group_id` is accepted, provide the numeric ID or complete URL-encoded path described by the schema; use required identifiers and pagination fields exactly as documented.

The group's description

The name of the group

The parent group ID for creating a subgroup

The path of the group

The group's visibility level

Create a new issue. Use this to open a new issue; use `update_issue` for an existing issue and `create_issue_note` to add discussion without changing issue fields. The operation creates remote project data, requires issue creation permission, and returns the new issue or a validation, permission, or duplicate-related error.

Array of user IDs to assign

Issue description

The type of issue. One of issue, incident, test_case or task.

Array of label names

Milestone ID to assign

Issue title

Weight of the issue (numeric, typically hours of work)

Add an emoji reaction to an issue (e.g. thumbsup, rocket, eyes). Use this for a new resource or action; choose the corresponding update or edit tool when the resource already exists. It changes remote GitLab state and requires the necessary project or group permission; GitLab returns validation, conflict, permission, or rate-limit errors instead of silently applying an invalid request. When `project_id` or `group_id` is accepted, provide the numeric ID or complete URL-encoded path described by the schema; use required identifiers and pagination fields exactly as documented.

The IID of an issue

Name of the emoji without colons (e.g. 'thumbsup', 'rocket', 'eyes')

Create an issue link between two issues. Use this for a new resource or action; choose the corresponding update or edit tool when the resource already exists. It changes remote GitLab state and requires the necessary project or group permission; GitLab returns validation, conflict, permission, or rate-limit errors instead of silently applying an invalid request. When `project_id` or `group_id` is accepted, provide the numeric ID or complete URL-encoded path described by the schema; use required identifiers and pagination fields exactly as documented.

The internal ID of a project's issue

The type of the relation, defaults to relates_to

Project ID or URL-encoded path

The internal ID of a target project's issue

The ID or URL-encoded path of a target project

Add a note to an issue, optionally replying to a discussion thread. Use this to add a note to an existing issue, optionally as a reply to a discussion; use `update_issue` for issue fields and `create_note` only when the generic endpoint is required. The operation creates remote discussion content, requires note permission, and returns the note or a missing-issue/thread/permission error.

The content of the note or reply

Date the note was created at (ISO 8601 format)

The ID of a thread. If provided, replies to that thread; otherwise creates a top-level note

The IID of an issue

Add an emoji reaction to an issue note. Pass discussion_id for discussion thread replies. Use this for a new resource or action; choose the corresponding update or edit tool when the resource already exists. It changes remote GitLab state and requires the necessary project or group permission; GitLab returns validation, conflict, permission, or rate-limit errors instead of silently applying an invalid request. When `project_id` or `group_id` is accepted, provide the numeric ID or complete URL-encoded path described by the schema; use required identifiers and pagination fields exactly as documented.

The ID of a discussion thread. Required for notes that are discussion replies; omit for top-level notes.

The IID of an issue

The ID of a note (comment or thread reply)

Project ID or complete URL-encoded path to project

Create a new label in a project. Use this for a new resource or action; choose the corresponding update or edit tool when the resource already exists. It changes remote GitLab state and requires the necessary project or group permission; GitLab returns validation, conflict, permission, or rate-limit errors instead of silently applying an invalid request. When `project_id` or `group_id` is accepted, provide the numeric ID or complete URL-encoded path described by the schema; use required identifiers and pagination fields exactly as documented.

The color of the label given in 6-digit hex notation with leading '#' sign

The description of the label

The name of the label

The priority of the label

Project ID or URL-encoded path

Create a new merge request. Use this to open a new merge request from an existing source branch to a target branch; use `update_merge_request` after it exists. The operation creates remote review state, requires project access, and returns the new merge request or a validation, permission, branch, or duplicate-related error.

Allow commits from upstream members

The ID of the users to assign the MR to

Merge request description

Create as draft merge request

Labels for the MR

Flag indicating if a merge request should remove the source branch when merging.

The ID of the users to assign as reviewers of the MR

Branch containing changes

If true, squash all commits into a single commit on merge.

Branch to merge into

Numeric ID of the target project.

Merge request title

Add a new discussion note to an existing merge request thread. Use this to reply inside an existing merge request discussion; use `create_merge_request_thread` to start a new thread and `create_merge_request_note` for a top-level note. The operation creates remote review content, requires note permission, and returns the new note or a missing-discussion/position/permission error.

The content of the note or reply

The ID of a thread

The IID of a merge request

Add an emoji reaction to a merge request (e.g. thumbsup, rocket, eyes). Use this for a new resource or action; choose the corresponding update or edit tool when the resource already exists. It changes remote GitLab state and requires the necessary project or group permission; GitLab returns validation, conflict, permission, or rate-limit errors instead of silently applying an invalid request. When `project_id` or `group_id` is accepted, provide the numeric ID or complete URL-encoded path described by the schema; use required identifiers and pagination fields exactly as documented.

The IID of a merge request

Name of the emoji without colons (e.g. 'thumbsup', 'rocket', 'eyes')

Add a new note to a merge request. Use this for a new resource or action; choose the corresponding update or edit tool when the resource already exists. It changes remote GitLab state and requires the necessary project or group permission; GitLab returns validation, conflict, permission, or rate-limit errors instead of silently applying an invalid request. When `project_id` or `group_id` is accepted, provide the numeric ID or complete URL-encoded path described by the schema; use required identifiers and pagination fields exactly as documented.

The content of the note or reply

The IID of a merge request

Add an emoji reaction to a merge request note. Pass discussion_id for discussion thread replies. Use this for a new resource or action; choose the corresponding update or edit tool when the resource already exists. It changes remote GitLab state and requires the necessary project or group permission; GitLab returns validation, conflict, permission, or rate-limit errors instead of silently applying an invalid request. When `project_id` or `group_id` is accepted, provide the numeric ID or complete URL-encoded path described by the schema; use required identifiers and pagination fields exactly as documented.

The IID of a merge request

Create a new thread on a merge request. Use this to start a review thread on a merge request; use `create_merge_request_note` for an unthreaded note and `create_merge_request_discussion_note` to reply to an existing thread. The operation creates remote review content, requires note permission, and returns the discussion or a position/permission/validation error.

The content of the thread

Date the thread was created at (ISO 8601 format)

The IID of a merge request

Position when creating a diff note

REQUIRED: Base commit SHA in the source branch. Get this from merge request diff_refs.base_sha.

REQUIRED: SHA referencing HEAD of the source branch. Get this from merge request diff_refs.head_sha.

IMAGE DIFFS ONLY: Height of the image (for position_type='image').

Line range for multiline comments on GitLab merge request diffs. VALIDATION RULES: 1) line_code is critical for GitLab API success, 2) start/end must have consistent types, 3) line numbers must form valid range, 4) get line_code from GitLab diff API, never generate manually.

End line position for multiline comment range. MUST specify either old_line OR new_line (or both for context), never neither. Range must be valid (end >= start).

CRITICAL: Line identifier in format '{file_path_sha1_hash}_{old_line_number}_{new_line_number}'. USUALLY REQUIRED for GitLab diff comments despite being optional in schema. Example: 'a1b2c3d4e5f6_12_17'. Must be from same file as start.line_code.

Line number in modified file (after changes). REQUIRED when type='new', NULL when type='old' (for purely deleted lines), can be present for context lines. MUST be >= start.new_line if both specified.

Line number in original file (before changes). REQUIRED when type='old', NULL when type='new' (for purely added lines), can be present for context lines. MUST be >= start.old_line if both specified.

Line type: 'old' = deleted/original line, 'new' = added/modified line, null = unchanged context. SHOULD MATCH start.type for consistent ranges (don't mix old/new types).

Start line position for multiline comment range. MUST specify either old_line OR new_line (or both for context), never neither.

CRITICAL: Line identifier in format '{file_path_sha1_hash}_{old_line_number}_{new_line_number}'. USUALLY REQUIRED for GitLab diff comments despite being optional in schema. Example: 'a1b2c3d4e5f6_10_15'. Get this from GitLab diff API response, never fabricate.

Line number in modified file (after changes). REQUIRED when type='new', NULL when type='old' (for purely deleted lines), can be present for context lines.

Line number in original file (before changes). REQUIRED when type='old', NULL when type='new' (for purely added lines), can be present for context lines.

Line type: 'old' = deleted/original line, 'new' = added/modified line, null = unchanged context. MUST match the line_code format and old_line/new_line values.

MULTILINE COMMENTS: Specify start/end line positions for commenting on multiple lines. Alternative to single old_line/new_line.

Line number in modified file (after changes). Use for added lines or context lines. NULL for deleted lines. For single-line comments on new lines.

File path after changes. REQUIRED for most diff comments. Use same as old_path if file wasn't renamed.

Line number in original file (before changes). Use for deleted lines or context lines. NULL for added lines. For single-line comments on old lines.

File path before changes. REQUIRED for most diff comments. Use same as new_path if file wasn't renamed.

REQUIRED: Position type. Use 'text' for code diffs, 'image' for image diffs, 'file' for file-level comments.

REQUIRED: SHA referencing the start commit of the source branch. Get this from merge request diff_refs.start_sha.

IMAGE DIFFS ONLY: Width of the image (for position_type='image').

IMAGE DIFFS ONLY: X coordinate on the image (for position_type='image').

IMAGE DIFFS ONLY: Y coordinate on the image (for position_type='image').

Project ID or complete URL-encoded path to project

Create a new note (comment) to an issue or merge request. Use this for a top-level comment on an issue or merge request when no typed discussion operation is needed; use `create_merge_request_thread` or `create_issue_note` for threaded replies. The operation creates remote discussion content, requires note permission, and returns the created note or a target/permission/validation error.

Note content

IID of the issue or merge request

Type of noteable (issue or merge_request)

Project ID or namespace/project_path

Create or update a file in a GitLab project. Use this for a single repository file when you know whether the target path is new or already exists; use `push_files` for a multi-file commit. Optional `encoding` (`text` or `base64`) defaults to `GITLAB_REPO_FILE_ENCODING` so existing callers stay unchanged. The operation creates or updates remote content in a commit, requires repository write permission, and returns the commit result or a conflict/validation error.

Branch to create/update the file in

Current file commit ID (for update operations)

Commit message

Content of the file

Content encoding. Use 'base64' for binary files (content must already be base64-encoded). When omitted, GITLAB_REPO_FILE_ENCODING applies.

Path where to create/update the file

Last known file commit ID

Path of the file to move/rename

Create a new GitLab project. Use this for a new resource or action; choose the corresponding update or edit tool when the resource already exists. It changes remote GitLab state and requires the necessary project or group permission; GitLab returns validation, conflict, permission, or rate-limit errors instead of silently applying an invalid request. When `project_id` or `group_id` is accepted, provide the numeric ID or complete URL-encoded path described by the schema; use required identifiers and pagination fields exactly as documented.

Repository description

Initialize with README.md

Repository name

Group namespace ID to create the project in. Omit to use the current user's namespace.

Repository visibility level

Delete branch from project. Use this only after confirming the branch name and intended data loss; use `get_branch` or `list_branches` before deletion and never use it to remove branch protection. The operation permanently removes a remote branch, requires branch-delete permission, and returns the deletion result or a protected-branch, missing-resource, or permission error.

Name of the branch to delete

Delete a draft note. Use this only after verifying the target; choose a get or list tool first when you need to inspect state without changing it. It changes or removes remote GitLab data and may be irreversible; it requires the necessary project or group permission and returns validation, conflict, permission, or rate-limit errors. When `project_id` or `group_id` is accepted, provide the numeric ID or complete URL-encoded path described by the schema; use required identifiers and pagination fields exactly as documented.

The ID of the draft note

The IID of a merge request

Delete an issue. Use this only after confirming the issue and intended permanent removal; use `update_issue` to close or edit an issue without deleting it. The operation permanently removes issue data, requires delete permission, and returns the deletion result or a missing-resource, permission, or policy error.

The internal ID of the project issue

Project ID or URL-encoded path

Remove an emoji reaction from an issue. Use this only after verifying the target; choose a get or list tool first when you need to inspect state without changing it. It changes or removes remote GitLab data and may be irreversible; it requires the necessary project or group permission and returns validation, conflict, permission, or rate-limit errors. When `project_id` or `group_id` is accepted, provide the numeric ID or complete URL-encoded path described by the schema; use required identifiers and pagination fields exactly as documented.

The ID of the emoji reaction to delete

The IID of an issue

Delete an issue link. Use this to remove an existing relationship between two issues; use `list_issue_links` or `get_issue_link` to verify the link first. The operation changes issue relationships, requires issue-edit permission, and returns the result or an error when the link is missing or access is denied.

The internal ID of a project's issue

The ID of an issue relationship

Project ID or URL-encoded path

Remove an emoji reaction from an issue note. Pass discussion_id for discussion thread replies. Use this only after verifying the target; choose a get or list tool first when you need to inspect state without changing it. It changes or removes remote GitLab data and may be irreversible; it requires the necessary project or group permission and returns validation, conflict, permission, or rate-limit errors. When `project_id` or `group_id` is accepted, provide the numeric ID or complete URL-encoded path described by the schema; use required identifiers and pagination fields exactly as documented.

The ID of the emoji reaction to delete

The ID of a discussion thread. Required for notes that are discussion replies; omit for top-level notes.

The IID of an issue

The ID of a note (comment or thread reply)

Delete a label from a project. Use this only after verifying the target; choose a get or list tool first when you need to inspect state without changing it. It changes or removes remote GitLab data and may be irreversible; it requires the necessary project or group permission and returns validation, conflict, permission, or rate-limit errors. When `project_id` or `group_id` is accepted, provide the numeric ID or complete URL-encoded path described by the schema; use required identifiers and pagination fields exactly as documented.

The ID or title of a project's label

Project ID or URL-encoded path

Delete a discussion note on a merge request. Use this only after verifying the target; choose a get or list tool first when you need to inspect state without changing it. It changes or removes remote GitLab data and may be irreversible; it requires the necessary project or group permission and returns validation, conflict, permission, or rate-limit errors. When `project_id` or `group_id` is accepted, provide the numeric ID or complete URL-encoded path described by the schema; use required identifiers and pagination fields exactly as documented.

The ID of a thread

The IID of a merge request

The ID of a thread note

Project ID or complete URL-encoded path to project

Remove an emoji reaction from a merge request. Use this only after verifying the target; choose a get or list tool first when you need to inspect state without changing it. It changes or removes remote GitLab data and may be irreversible; it requires the necessary project or group permission and returns validation, conflict, permission, or rate-limit errors. When `project_id` or `group_id` is accepted, provide the numeric ID or complete URL-encoded path described by the schema; use required identifiers and pagination fields exactly as documented.

The ID of the emoji reaction to delete

The IID of a merge request

Delete an existing merge request note. Use this only after verifying the target; choose a get or list tool first when you need to inspect state without changing it. It changes or removes remote GitLab data and may be irreversible; it requires the necessary project or group permission and returns validation, conflict, permission, or rate-limit errors. When `project_id` or `group_id` is accepted, provide the numeric ID or complete URL-encoded path described by the schema; use required identifiers and pagination fields exactly as documented.

The IID of a merge request

The ID of a thread note

Remove an emoji reaction from a merge request note. Pass discussion_id for discussion thread replies. Use this only after verifying the target; choose a get or list tool first when you need to inspect state without changing it. It changes or removes remote GitLab data and may be irreversible; it requires the necessary project or group permission and returns validation, conflict, permission, or rate-limit errors. When `project_id` or `group_id` is accepted, provide the numeric ID or complete URL-encoded path described by the schema; use required identifiers and pagination fields exactly as documented.

The ID of the emoji reaction to delete

The IID of a merge request

Discover and activate additional tool categories for this session. Available categories: merge_requests, issues, repositories, branches, projects, labels, ci, groups, pipelines, milestones, wiki, releases, tags, users, workitems, webhooks, search, variables, dependency_proxy, vulnerabilities. Already-active categories are listed in the response. Use this when a needed opt-in category is not currently exposed; omit `category` to inspect available categories, then call it with a category to activate that group for the current session. It changes only the session's tool registry, returns the active-tool summary, and does not change GitLab data.

Toolset category to activate (e.g. 'pipelines', 'wiki'). Omit to list available categories.

Download an uploaded file from a project (images returned as base64; use local_path to save to disk). Use this to retrieve a previously uploaded project attachment; remote mode returns inline base64 for images or a download URL, while local mode can save to a path. It is read-only with respect to GitLab, requires project access, and returns the file content or an attachment/permission error.

The filename of the upload

Local path to save the file (optional, defaults to current directory)

Project ID or URL-encoded path of the project

The 32-character secret of the upload

Fork a project to your account or specified namespace. Use this to create a copy of an existing project in the current user's namespace or a permitted namespace; use `search_repositories` or `get_project` to inspect projects without copying them. The operation creates a new project, requires fork permission, and returns the forked project or a namespace/permission error.

Namespace to fork to (full path)

Get branch details (commit, protection status). Use this for a known resource or result; choose the corresponding list or search tool when you need to discover multiple resources. It is read-only and does not mutate GitLab data; missing resources, invalid identifiers, insufficient permission, and rate limits are returned as errors. When `project_id` or `group_id` is accepted, provide the numeric ID or complete URL-encoded path described by the schema; use required identifiers and pagination fields exactly as documented.

Name of the branch

Get diffs between two branches or commits. Use this for a known resource or result; choose the corresponding list or search tool when you need to discover multiple resources. It is read-only and does not mutate GitLab data; missing resources, invalid identifiers, insufficient permission, and rate limits are returned as errors. When `project_id` or `group_id` is accepted, provide the numeric ID or complete URL-encoded path described by the schema; use required identifiers and pagination fields exactly as documented.

Array of regex patterns to exclude files from the diff results. Each pattern is a JavaScript-compatible regular expression that matches file paths to ignore. Examples: ["^vendor/", "^test/mocks/", "\.spec\.ts$", "package-lock\.json"]

The base branch or commit SHA to compare from

Comparison method: false for '...' (default), true for '--'

The target branch or commit SHA to compare to

Get details for a GitLab CI/CD Catalog resource, including versions and components. Use this for a known resource or result; choose the corresponding list or search tool when you need to discover multiple resources. It is read-only and does not mutate GitLab data; missing resources, invalid identifiers, insufficient permission, and rate limits are returned as errors. When `project_id` or `group_id` is accepted, provide the numeric ID or complete URL-encoded path described by the schema; use required identifiers and pagination fields exactly as documented.

Number of components per version to include (default: 20, max: 50)

Filter returned components by component name

CI/CD Catalog resource full project path. Required when id is omitted.

CI/CD Catalog resource global ID. Required when full_path is omitted.

Include version README content

Number of versions to include (default: 5, max: 20)

Get details of a specific commit. Use this for a known resource or result; choose the corresponding list or search tool when you need to discover multiple resources. It is read-only and does not mutate GitLab data; missing resources, invalid identifiers, insufficient permission, and rate limits are returned as errors. When `project_id` or `group_id` is accepted, provide the numeric ID or complete URL-encoded path described by the schema; use required identifiers and pagination fields exactly as documented.

Project ID or complete URL-encoded path to project

The commit hash or name of a repository branch or tag

Include commit stats

Get changes/diffs of a specific commit. Use this for a known resource or result; choose the corresponding list or search tool when you need to discover multiple resources. It is read-only and does not mutate GitLab data; missing resources, invalid identifiers, insufficient permission, and rate limits are returned as errors. When `project_id` or `group_id` is accepted, provide the numeric ID or complete URL-encoded path described by the schema; use required identifiers and pagination fields exactly as documented.

Whether to return the full diff or only first page (default: false)

Get a single draft note from a merge request. Use this for a known resource or result; choose the corresponding list or search tool when you need to discover multiple resources. It is read-only and does not mutate GitLab data; missing resources, invalid identifiers, insufficient permission, and rate limits are returned as errors. When `project_id` or `group_id` is accepted, provide the numeric ID or complete URL-encoded path described by the schema; use required identifiers and pagination fields exactly as documented.

The ID of the draft note

The IID of a merge request

Get git blame for a file at a given ref. Each entry maps a contiguous range of source lines to the commit that last changed them (id, author, authored_date, message). Use range_start/range_end to limit blame to specific lines.

The full path of the file to blame, relative to repo root

Last line of the blame range (inclusive, 1-based). Both range[start] and range[end] must be set together.

First line of the blame range (inclusive, 1-based). Both range[start] and range[end] must be set together.

The name of branch, tag or commit (required by GitLab blame API)

Get contents of a file or directory from a GitLab project. Use this for a known resource or result; choose the corresponding list or search tool when you need to discover multiple resources. It is read-only and does not mutate GitLab data; missing resources, invalid identifiers, insufficient permission, and rate limits are returned as errors. When `project_id` or `group_id` is accepted, provide the numeric ID or complete URL-encoded path described by the schema; use required identifiers and pagination fields exactly as documented.

Path to the file or directory. Takes precedence over 'path' when both are provided

Alias of file_path

Project ID or URL-encoded path (optional; falls back to env)

Branch/tag/commit to get contents from

Get details of a specific issue. Returns a slim milestone by default; set full_response=true for the complete milestone object. Use this for a known resource or result; choose the corresponding list or search tool when you need to discover multiple resources. It is read-only and does not mutate GitLab data; missing resources, invalid identifiers, insufficient permission, and rate limits are returned as errors. When `project_id` or `group_id` is accepted, provide the numeric ID or complete URL-encoded path described by the schema; use required identifiers and pagination fields exactly as documented.

If true, return the complete issue object including the full milestone description. Default returns a slim milestone (id, iid, title, state, web_url) to reduce token usage.

The internal ID of the project issue

Project ID or URL-encoded path

Get a specific issue link. Use this for a known resource or result; choose the corresponding list or search tool when you need to discover multiple resources. It is read-only and does not mutate GitLab data; missing resources, invalid identifiers, insufficient permission, and rate limits are returned as errors. When `project_id` or `group_id` is accepted, provide the numeric ID or complete URL-encoded path described by the schema; use required identifiers and pagination fields exactly as documented.

The internal ID of a project's issue

ID of an issue relationship

Project ID or URL-encoded path

Get a single label from a project. Use this for a known resource or result; choose the corresponding list or search tool when you need to discover multiple resources. It is read-only and does not mutate GitLab data; missing resources, invalid identifiers, insufficient permission, and rate limits are returned as errors. When `project_id` or `group_id` is accepted, provide the numeric ID or complete URL-encoded path described by the schema; use required identifiers and pagination fields exactly as documented.

Include ancestor groups

The ID or title of a project's label

Project ID or URL-encoded path

Get details of a merge request (mergeRequestIid or branchName required). Set include_summaries=true for deployment/commit/approval summaries. Use this for a known resource or result; choose the corresponding list or search tool when you need to discover multiple resources. It is read-only and does not mutate GitLab data; missing resources, invalid identifiers, insufficient permission, and rate limits are returned as errors. When `project_id` or `group_id` is accepted, provide the numeric ID or complete URL-encoded path described by the schema; use required identifiers and pagination fields exactly as documented.

If true, include deployment_summary, commit_addition_summary and approval_summary (extra API calls, larger response). Default false to reduce token usage.

The IID of a merge request

Project ID or complete URL-encoded path to project

Source branch name

Get merge request approval details including approvers. Use this to inspect approval rules and approvers before deciding whether a merge request can be merged; use `approve_merge_request` to change approval state. It is read-only and returns the approval-state response, while missing requests, unsupported GitLab versions, and permission failures are reported as errors.

The IID of the merge request

Get the conflicts of a merge request. Use this to inspect merge conflicts before attempting `merge_merge_request`; it reports conflicts and does not resolve them. It is read-only, requires access to the project and merge request, and returns GitLab's conflict data or an error when the request cannot be evaluated.

The IID of the merge request

Get the changes/diffs of a merge request (mergeRequestIid or branchName required). Use this for a known resource or result; choose the corresponding list or search tool when you need to discover multiple resources. It is read-only and does not mutate GitLab data; missing resources, invalid identifiers, insufficient permission, and rate limits are returned as errors. When `project_id` or `group_id` is accepted, provide the numeric ID or complete URL-encoded path described by the schema; use required identifiers and pagination fields exactly as documented.

Array of regex patterns to exclude files from the diff results. Each pattern is a JavaScript-compatible regular expression that matches file paths to ignore. Examples: ["^vendor/", "^test/mocks/", "\.spec\.ts$", "package-lock\.json"]

The IID of a merge request

Source branch name

Diff view type

Get diffs for specific files from a merge request (mergeRequestIid or branchName required). Use this for a known resource or result; choose the corresponding list or search tool when you need to discover multiple resources. It is read-only and does not mutate GitLab data; missing resources, invalid identifiers, insufficient permission, and rate limits are returned as errors. When `project_id` or `group_id` is accepted, provide the numeric ID or complete URL-encoded path described by the schema; use required identifiers and pagination fields exactly as documented.

List of file paths to retrieve diffs for (e.g. ['src/api/users.ts', 'src/repo/user.go']). Call list_merge_request_changed_files first to get the full list of changed paths.

The IID of a merge request

Source branch name

Present diff in the unified diff format. Default is false.

Get a specific note for a merge request. Use this to fetch one known merge request note by note identifier; use `get_merge_request_notes` for a collection and `mr_discussions` for threaded context. It is read-only and returns the note object or an error for an invalid identifier, missing note, or insufficient permission.

The IID of a merge request

The ID of a thread note

List notes for a merge request. Use this to list flat notes on a merge request; use `mr_discussions` when thread structure and resolution state are required. It is read-only and returns note records, while invalid identifiers, missing resources, and pagination or permission errors are reported by GitLab.

The IID of a merge request

The field to sort the notes by

Page number for pagination

Number of items per page

The sort order of the notes

Get a specific version of a merge request. Use this for a known resource or result; choose the corresponding list or search tool when you need to discover multiple resources. It is read-only and does not mutate GitLab data; missing resources, invalid identifiers, insufficient permission, and rate limits are returned as errors. When `project_id` or `group_id` is accepted, provide the numeric ID or complete URL-encoded path described by the schema; use required identifiers and pagination fields exactly as documented.

The internal ID of the merge request

Present diffs in the unified diff format. Default is false. Introduced in GitLab 16.5.

The ID of the merge request diff version

Get details of a namespace (user or group) by ID or path. Groups are namespaces with kind='group'. Use this for a known resource or result; choose the corresponding list or search tool when you need to discover multiple resources. It is read-only and does not mutate GitLab data; missing resources, invalid identifiers, insufficient permission, and rate limits are returned as errors. When `project_id` or `group_id` is accepted, provide the numeric ID or complete URL-encoded path described by the schema; use required identifiers and pagination fields exactly as documented.

Namespace ID or full path

Get details of a specific project. Use this for a known resource or result; choose the corresponding list or search tool when you need to discover multiple resources. It is read-only and does not mutate GitLab data; missing resources, invalid identifiers, insufficient permission, and rate limits are returned as errors. When `project_id` or `group_id` is accepted, provide the numeric ID or complete URL-encoded path described by the schema; use required identifiers and pagination fields exactly as documented.

Project ID or URL-encoded path

List events for a project (before/after: YYYY-MM-DD). Use this for a known resource or result; choose the corresponding list or search tool when you need to discover multiple resources. It is read-only and does not mutate GitLab data; missing resources, invalid identifiers, insufficient permission, and rate limits are returned as errors. When `project_id` or `group_id` is accepted, provide the numeric ID or complete URL-encoded path described by the schema; use required identifiers and pagination fields exactly as documented.

If defined, returns events with the specified action type

If defined, Returns events created after the specified date (YYYY-MM-DD format). To include events on 2025-08-29, use after=2025-08-28

If defined, Returns events created before the specified date (YYYY-MM-DD format). To include events on 2025-08-29, use before=2025-08-30

Returns the specified results page. Default: 1

Number of results per page. Default: 20

Project ID or URL-encoded path

Direction to sort the results by creation date. Default: desc

If defined, returns events with the specified target type

epic issue merge_request milestone note project snippet user

Get details of a single protected branch (access levels, force push settings). Use this for a known resource or result; choose the corresponding list or search tool when you need to discover multiple resources. It is read-only and does not mutate GitLab data; missing resources, invalid identifiers, insufficient permission, and rate limits are returned as errors. When `project_id` or `group_id` is accepted, provide the numeric ID or complete URL-encoded path described by the schema; use required identifiers and pagination fields exactly as documented.

Name of the protected branch

Project ID or complete URL-encoded path to project

List files and directories in a repository. Use this for a known resource or result; choose the corresponding list or search tool when you need to discover multiple resources. It is read-only and does not mutate GitLab data; missing resources, invalid identifiers, insufficient permission, and rate limits are returned as errors. When `project_id` or `group_id` is accepted, provide the numeric ID or complete URL-encoded path described by the schema; use required identifiers and pagination fields exactly as documented.

Token for keyset pagination. Use the next_page_token value returned in the previous response to retrieve the next page.

Pagination method. Use 'keyset' for keyset-based pagination (required for repositories with many files). Non-keyset calls keep the legacy array response for backward compatibility; that legacy response shape is deprecated and may be removed in a future major release. Keyset calls return a structured response with items and next_page_token when more pages are available.

The path inside the repository

Number of results to show per page

The ID or URL-encoded path of the project

Boolean value to get a recursive tree

The name of a repository branch or tag. Defaults to the default branch.

Get user details by ID. Use this for a known resource or result; choose the corresponding list or search tool when you need to discover multiple resources. It is read-only and does not mutate GitLab data; missing resources, invalid identifiers, insufficient permission, and rate limits are returned as errors. When `project_id` or `group_id` is accepted, provide the numeric ID or complete URL-encoded path described by the schema; use required identifiers and pagination fields exactly as documented.

The ID of the user

Get GitLab user details by usernames. Use this for a known resource or result; choose the corresponding list or search tool when you need to discover multiple resources. It is read-only and does not mutate GitLab data; missing resources, invalid identifiers, insufficient permission, and rate limits are returned as errors. When `project_id` or `group_id` is accepted, provide the numeric ID or complete URL-encoded path described by the schema; use required identifiers and pagination fields exactly as documented.

Array of usernames to search for

Verify server status and authentication. When authenticated, also reports the GitLab instance version from GET /api/v4/version (version, revision, enterprise). Version lookup failures do not fail the health check — those fields are omitted. Use this to verify server connectivity and authentication before making GitLab requests; use `whoami` when the authenticated user's identity is the goal. It does not mutate GitLab state and returns server/authentication status plus GitLab version details when available.

List branches in project with search filter. Use this for a collection of resources; choose the corresponding get tool when you already know the single resource to inspect. It is read-only and does not mutate GitLab data; missing resources, invalid identifiers, insufficient permission, and rate limits are returned as errors. When `project_id` or `group_id` is accepted, provide the numeric ID or complete URL-encoded path described by the schema; use required identifiers and pagination fields exactly as documented.

Page number for pagination (default: 1)

Number of items per page (max: 100, default: 20)

Search term to filter branches by name

List GitLab CI/CD Catalog resources/components visible to the user. Use this for a collection of resources; choose the corresponding get tool when you already know the single resource to inspect. It is read-only and does not mutate GitLab data; missing resources, invalid identifiers, insufficient permission, and rate limits are returned as errors. When `project_id` or `group_id` is accepted, provide the numeric ID or complete URL-encoded path described by the schema; use required identifiers and pagination fields exactly as documented.

GraphQL cursor for the next page

Number of resources to return (default: 20, max: 100)

Filter to catalog resources in these group IDs

Catalog resource scope

Search catalog resources by name or description

Sort order

Filter by project topic names

Filter by verification level

List statuses for a commit. Use this for a collection of resources; choose the corresponding get tool when you already know the single resource to inspect. It is read-only and does not mutate GitLab data; missing resources, invalid identifiers, insufficient permission, and rate limits are returned as errors. When `project_id` or `group_id` is accepted, provide the numeric ID or complete URL-encoded path described by the schema; use required identifiers and pagination fields exactly as documented.

Return all statuses, not only latest ones

Filter statuses by status name or context

Field to order statuses by

Page number for pagination (default: 1)

Filter statuses by pipeline ID

Project ID or complete URL-encoded path to project

Filter statuses by Git ref

The commit hash or name of a repository branch or tag

Sort direction

Filter statuses by build stage

List repository commits with filtering options. Use this for a collection of resources; choose the corresponding get tool when you already know the single resource to inspect. It is read-only and does not mutate GitLab data; missing resources, invalid identifiers, insufficient permission, and rate limits are returned as errors. When `project_id` or `group_id` is accepted, provide the numeric ID or complete URL-encoded path described by the schema; use required identifiers and pagination fields exactly as documented.

Retrieve every commit from the repository

Search commits by commit author

Follow only the first parent commit upon seeing a merge commit

List commits in order

Page number for pagination (default: 1)

The file path

The name of a repository branch, tag or revision range, or if not given the default branch

Only commits after or on this date are returned in ISO 8601 format YYYY-MM-DDTHH:MM:SSZ

Parse and include Git trailers for every commit

Only commits before or on this date are returned in ISO 8601 format YYYY-MM-DDTHH:MM:SSZ

Stats about each commit are added to the response

List draft notes for a merge request. Use this for a collection of resources; choose the corresponding get tool when you already know the single resource to inspect. It is read-only and does not mutate GitLab data; missing resources, invalid identifiers, insufficient permission, and rate limits are returned as errors. When `project_id` or `group_id` is accepted, provide the numeric ID or complete URL-encoded path described by the schema; use required identifiers and pagination fields exactly as documented.

The IID of a merge request

List events for the authenticated user (before/after: YYYY-MM-DD). Use this for a collection of resources; choose the corresponding get tool when you already know the single resource to inspect. It is read-only and does not mutate GitLab data; missing resources, invalid identifiers, insufficient permission, and rate limits are returned as errors. When `project_id` or `group_id` is accepted, provide the numeric ID or complete URL-encoded path described by the schema; use required identifiers and pagination fields exactly as documented.

If defined, returns events with the specified action type

If defined, Returns events created after the specified date (YYYY-MM-DD format). To include events on 2025-08-29, use after=2025-08-28

If defined, Returns events created before the specified date (YYYY-MM-DD format). To include events on 2025-08-29, use before=2025-08-30

Returns the specified results page. Default: 1

Number of results per page. Default: 20

Include all events across a user's projects

Direction to sort the results by creation date. Default: desc

If defined, returns events with the specified target type

List group iterations with filtering options. Use this for a collection of resources; choose the corresponding get tool when you already know the single resource to inspect. It is read-only and does not mutate GitLab data; missing resources, invalid identifiers, insufficient permission, and rate limits are returned as errors. When `project_id` or `group_id` is accepted, provide the numeric ID or complete URL-encoded path described by the schema; use required identifiers and pagination fields exactly as documented.

Group ID or URL-encoded path

Include iterations for group and its ancestors. Defaults to true.

Include iterations for group and its descendants. Defaults to false.

Page number for pagination (default: 1)

Number of items per page (max: 100, default: 20)

Return only iterations with a title matching the provided string.

Fields in which fuzzy search should be performed with the query given in the argument search. The available options are title and cadence_title. Default is [title].

Return opened, upcoming, current, closed, or all iterations.

Return only iterations updated after the given datetime. Expected in ISO 8601 format (2019-03-15T08:00:00Z).

Return only iterations updated before the given datetime. Expected in ISO 8601 format (2019-03-15T08:00:00Z).

List members of a GitLab group with optional name or username search. Use this for a collection of resources; choose the corresponding get tool when you already know the single resource to inspect. It is read-only and does not mutate GitLab data; missing resources, invalid identifiers, insufficient permission, and rate limits are returned as errors. When `project_id` or `group_id` is accepted, provide the numeric ID or complete URL-encoded path described by the schema; use required identifiers and pagination fields exactly as documented.

Group ID or URL-encoded path

Include inherited members. Defaults to false.

Page number for pagination (default: 1)

Number of items per page (default: 20, max: 100)

Search for members by name or username

User IDs to exclude

Filter by user IDs

List merge requests across all projects of a group and its subgroups. Use this for a collection of resources; choose the corresponding get tool when you already know the single resource to inspect. It is read-only and does not mutate GitLab data; missing resources, invalid identifiers, insufficient permission, and rate limits are returned as errors. When `project_id` or `group_id` is accepted, provide the numeric ID or complete URL-encoded path described by the schema; use required identifiers and pagination fields exactly as documented.

Returns merge requests approved by the given usernames (array).

Return MRs assigned to the given user ID (integer), 'none', or 'any'. Mutually exclusive with assignee_username.

Returns merge requests assigned to the given username. Mutually exclusive with assignee_id.

Returns merge requests created by the given user ID (integer). Mutually exclusive with author_username.

Returns merge requests created by the given username. Mutually exclusive with author_id.

Return merge requests created after the given time

Return merge requests created before the given time

Group ID or URL-encoded path

Array of label names

Milestone title

Return merge requests from non-archived projects only. Defaults to true.

Return merge requests ordered by the given field

Page number for pagination (default: 1)

Number of items per page (max: 100, default: 20)

Returns merge requests which have the user as a reviewer. Must be an integer, 'none', or 'any'. Mutually exclusive with reviewer_username.

Returns merge requests which have the user as a reviewer by username. Mutually exclusive with reviewer_id.

Return merge requests from a specific scope

Search for specific terms

Return merge requests sorted in ascending or descending order

Return merge requests from a specific source branch

Return merge requests with the given source project ID

Return merge requests with a specific state

Return merge requests targeting a specific branch

Return merge requests updated after the given time

Return merge requests updated before the given time

Filter merge requests against their wip status

Return more details for each label

List projects in a group. Use this for a collection of resources; choose the corresponding get tool when you already know the single resource to inspect. It is read-only and does not mutate GitLab data; missing resources, invalid identifiers, insufficient permission, and rate limits are returned as errors. When `project_id` or `group_id` is accepted, provide the numeric ID or complete URL-encoded path described by the schema; use required identifiers and pagination fields exactly as documented.

Filter for archived projects

Group ID or path

Include projects from subgroups

Filter by minimum access level

Field to sort by

Page number for pagination (default: 1)

Search term to filter projects

Sort direction

Filter by starred projects

Include project statistics

Filter by topic (projects tagged with this topic)

Filter by project visibility

Include custom attributes

Filter projects with issues feature enabled

Filter projects with merge requests feature enabled

Filter by programming language

Include security reports

List discussions for an issue. Use this to inspect threaded discussions for an issue; use `list_issues` for issue records and `get_issue` for one issue's fields. It is read-only and returns discussion items, while invalid identifiers, missing issues, and permission failures are reported as errors.

The internal ID of the project issue

Page number for pagination (default: 1)

Number of items per page (max: 100, default: 20)

Project ID or URL-encoded path

List all emoji reactions on an issue. Use this for a collection of resources; choose the corresponding get tool when you already know the single resource to inspect. It is read-only and does not mutate GitLab data; missing resources, invalid identifiers, insufficient permission, and rate limits are returned as errors. When `project_id` or `group_id` is accepted, provide the numeric ID or complete URL-encoded path described by the schema; use required identifiers and pagination fields exactly as documented.

The IID of an issue

Project ID or complete URL-encoded path to project

List all issue links for a specific issue. Use this for a collection of resources; choose the corresponding get tool when you already know the single resource to inspect. It is read-only and does not mutate GitLab data; missing resources, invalid identifiers, insufficient permission, and rate limits are returned as errors. When `project_id` or `group_id` is accepted, provide the numeric ID or complete URL-encoded path described by the schema; use required identifiers and pagination fields exactly as documented.

The internal ID of a project's issue

Project ID or URL-encoded path

List all emoji reactions on an issue note. Pass discussion_id for discussion thread replies. Use this for a collection of resources; choose the corresponding get tool when you already know the single resource to inspect. It is read-only and does not mutate GitLab data; missing resources, invalid identifiers, insufficient permission, and rate limits are returned as errors. When `project_id` or `group_id` is accepted, provide the numeric ID or complete URL-encoded path described by the schema; use required identifiers and pagination fields exactly as documented.

The ID of a discussion thread. Required for notes that are discussion replies; omit for top-level notes.

The IID of an issue

The ID of a note (comment or thread reply)

List issues (default: created by current user; use scope='all' for all). Use this for a collection of resources; choose the corresponding get tool when you already know the single resource to inspect. It is read-only and does not mutate GitLab data; missing resources, invalid identifiers, insufficient permission, and rate limits are returned as errors. When `project_id` or `group_id` is accepted, provide the numeric ID or complete URL-encoded path described by the schema; use required identifiers and pagination fields exactly as documented.

Return issues assigned to the given user ID (user id, none, or any). Mutually exclusive with assignee_username.

Return issues assigned to the given username. Mutually exclusive with assignee_id.

Return issues created by the given user ID. Mutually exclusive with author_username.

Return issues created by the given username. Mutually exclusive with author_id.

Filter confidential or public issues

Return issues created after the given time

Return issues created before the given time

Return issues that have the due date

Filter to a given type of issue. One of issue, incident, test_case or task

Return issues assigned to the given iteration ID. None returns issues that do not belong to an iteration. Any returns issues that belong to an iteration.

Array of label names

Milestone title

Page number for pagination (default: 1)

Project ID or URL-encoded path (optional - if not provided, lists issues across all accessible projects)

Return issues from a specific scope

Search for specific terms

Return issues with a specific state

Return issues updated after the given time

Return issues updated before the given time

Return more details for each label

List labels for a project. Use this for a collection of resources; choose the corresponding get tool when you already know the single resource to inspect. It is read-only and does not mutate GitLab data; missing resources, invalid identifiers, insufficient permission, and rate limits are returned as errors. When `project_id` or `group_id` is accepted, provide the numeric ID or complete URL-encoded path described by the schema; use required identifiers and pagination fields exactly as documented.

Include ancestor groups

Page number for pagination (default: 1)

Number of items per page (max: 100, default: 20)

Project ID or URL-encoded path

Keyword to filter labels by

Whether to include issue and merge request counts

List changed file paths in a merge request without diff content (mergeRequestIid or branchName required). Use this for a collection of resources; choose the corresponding get tool when you already know the single resource to inspect. It is read-only and does not mutate GitLab data; missing resources, invalid identifiers, insufficient permission, and rate limits are returned as errors. When `project_id` or `group_id` is accepted, provide the numeric ID or complete URL-encoded path described by the schema; use required identifiers and pagination fields exactly as documented.

Array of regex patterns to exclude files. Examples: ["^vendor/", "\.pb\.go$"]

The IID of a merge request

Project ID or complete URL-encoded path to project

Source branch name

List merge request diffs with pagination (mergeRequestIid or branchName required). Use this for a collection of resources; choose the corresponding get tool when you already know the single resource to inspect. It is read-only and does not mutate GitLab data; missing resources, invalid identifiers, insufficient permission, and rate limits are returned as errors. When `project_id` or `group_id` is accepted, provide the numeric ID or complete URL-encoded path described by the schema; use required identifiers and pagination fields exactly as documented.

The IID of a merge request

Page number for pagination (default: 1)

Source branch name

Present diffs in the unified diff format. Default is false. Introduced in GitLab 16.5.

List all emoji reactions on a merge request. Use this for a collection of resources; choose the corresponding get tool when you already know the single resource to inspect. It is read-only and does not mutate GitLab data; missing resources, invalid identifiers, insufficient permission, and rate limits are returned as errors. When `project_id` or `group_id` is accepted, provide the numeric ID or complete URL-encoded path described by the schema; use required identifiers and pagination fields exactly as documented.

The IID of a merge request

List all emoji reactions on a merge request note. Pass discussion_id for discussion thread replies. Use this for a collection of resources; choose the corresponding get tool when you already know the single resource to inspect. It is read-only and does not mutate GitLab data; missing resources, invalid identifiers, insufficient permission, and rate limits are returned as errors. When `project_id` or `group_id` is accepted, provide the numeric ID or complete URL-encoded path described by the schema; use required identifiers and pagination fields exactly as documented.

The ID of a discussion thread. Required for notes that are discussion replies; omit for top-level notes.

The IID of a merge request

The ID of a note (comment or thread reply)

List pipelines for a merge request with pagination. Use this to inspect pipelines associated with one merge request; use `list_pipelines` for project-wide pipeline filtering. It is read-only and paginated, requires project access, and returns pipeline records or GitLab errors for invalid identifiers, missing resources, or rate limits.

The internal ID of the merge request

Page number for pagination (default: 1)

List all versions of a merge request. Use this for a collection of resources; choose the corresponding get tool when you already know the single resource to inspect. It is read-only and does not mutate GitLab data; missing resources, invalid identifiers, insufficient permission, and rate limits are returned as errors. When `project_id` or `group_id` is accepted, provide the numeric ID or complete URL-encoded path described by the schema; use required identifiers and pagination fields exactly as documented.

The internal ID of the merge request

List merge requests (without project_id: user's MRs; with project_id: project MRs). Use this for a collection of resources; choose the corresponding get tool when you already know the single resource to inspect. It is read-only and does not mutate GitLab data; missing resources, invalid identifiers, insufficient permission, and rate limits are returned as errors. When `project_id` or `group_id` is accepted, provide the numeric ID or complete URL-encoded path described by the schema; use required identifiers and pagination fields exactly as documented.

Returns merge requests approved by the given usernames (array).

Return MRs assigned to the given user ID (integer), 'none', or 'any'. Mutually exclusive with assignee_username.

Returns merge requests assigned to the given username. Mutually exclusive with assignee_id.

Returns merge requests created by the given user ID (integer). Mutually exclusive with author_username.

Returns merge requests created by the given username. Mutually exclusive with author_id.

Return merge requests created after the given time

Return merge requests created before the given time

Array of label names

Milestone title

Return merge requests ordered by the given field

Page number for pagination (default: 1)

Number of items per page (max: 100, default: 20)

Project ID or URL-encoded path (optional - if not provided, lists all merge requests the user has access to)

Returns merge requests which have the user as a reviewer. Must be an integer, 'none', or 'any'. Mutually exclusive with reviewer_username.

Returns merge requests which have the user as a reviewer by username. Mutually exclusive with reviewer_id.

Return merge requests from a specific scope

Search for specific terms

Return merge requests sorted in ascending or descending order

Return merge requests from a specific source branch

Return merge requests with a specific state

Return merge requests targeting a specific branch

Return merge requests updated after the given time

Return merge requests updated before the given time

Filter merge requests against their wip status

Return more details for each label

List all namespaces (users and groups) available to the current user. Filter by kind='group' for groups only. Use this for a collection of resources; choose the corresponding get tool when you already know the single resource to inspect. It is read-only and does not mutate GitLab data; missing resources, invalid identifiers, insufficient permission, and rate limits are returned as errors. When `project_id` or `group_id` is accepted, provide the numeric ID or complete URL-encoded path described by the schema; use required identifiers and pagination fields exactly as documented.

Filter for namespaces owned by current user

Page number for pagination (default: 1)

Search term for namespaces

List members of a GitLab project. Use this for a collection of resources; choose the corresponding get tool when you already know the single resource to inspect. It is read-only and does not mutate GitLab data; missing resources, invalid identifiers, insufficient permission, and rate limits are returned as errors. When `project_id` or `group_id` is accepted, provide the numeric ID or complete URL-encoded path described by the schema; use required identifiers and pagination fields exactly as documented.

Include inherited members. Defaults to false.

Page number for pagination (default: 1)

Number of items per page (default: 20, max: 100)

Project ID or URL-encoded path

Search for members by name or username

User IDs to exclude

Filter by user IDs

List projects accessible by the current user. Use this for a collection of resources; choose the corresponding get tool when you already know the single resource to inspect. It is read-only and does not mutate GitLab data; missing resources, invalid identifiers, insufficient permission, and rate limits are returned as errors. When `project_id` or `group_id` is accepted, provide the numeric ID or complete URL-encoded path described by the schema; use required identifiers and pagination fields exactly as documented.

Filter for archived projects

Filter for projects where current user is a member

Filter by minimum access level

Return projects ordered by field

Filter for projects owned by current user

Page number for pagination (default: 1)

Number of items per page (max: 100, default: 20)

Search term for projects

Needs to be true if search is full path

Return only limited fields

Return projects sorted in ascending or descending order

Filter by topic (projects tagged with this topic)

Filter by project visibility

Filter projects with issues feature enabled

Filter projects with merge requests feature enabled

List protected branches in a project, supports search filter. Use this for a collection of resources; choose the corresponding get tool when you already know the single resource to inspect. It is read-only and does not mutate GitLab data; missing resources, invalid identifiers, insufficient permission, and rate limits are returned as errors. When `project_id` or `group_id` is accepted, provide the numeric ID or complete URL-encoded path described by the schema; use required identifiers and pagination fields exactly as documented.

Page number for pagination (default: 1)

Project ID or complete URL-encoded path to project

Search term to filter protected branches by name

List GitLab to-do items for the current user. Use this for a collection of resources; choose the corresponding get tool when you already know the single resource to inspect. It is read-only and does not mutate GitLab data; missing resources, invalid identifiers, insufficient permission, and rate limits are returned as errors. When `project_id` or `group_id` is accepted, provide the numeric ID or complete URL-encoded path described by the schema; use required identifiers and pagination fields exactly as documented.

Filter by to-do action

Filter by author ID

Filter by group ID

Page number for pagination (default: 1)

Filter by project ID

Filter by to-do state

Filter by to-do target type

Issue MergeRequest Commit Epic DesignManagement::Design AlertManagement::Alert Project Namespace Vulnerability WikiPage::Meta

Mark all pending GitLab to-do items as done for the current user. Use this for the specific operation described; choose a sibling tool when you need a different resource or lifecycle action. It changes remote GitLab state and requires the necessary project or group permission; GitLab returns validation, conflict, permission, or rate-limit errors instead of silently applying an invalid request. When `project_id` or `group_id` is accepted, provide the numeric ID or complete URL-encoded path described by the schema; use required identifiers and pagination fields exactly as documented.

Mark a GitLab to-do item as done. Use this for the specific operation described; choose a sibling tool when you need a different resource or lifecycle action. It changes remote GitLab state and requires the necessary project or group permission; GitLab returns validation, conflict, permission, or rate-limit errors instead of silently applying an invalid request. When `project_id` or `group_id` is accepted, provide the numeric ID or complete URL-encoded path described by the schema; use required identifiers and pagination fields exactly as documented.

The ID of the to-do item

Merge a merge request. Use this only after checking the merge request approval, conflict, and pipeline state; use `approve_merge_request` to approve rather than merge. The operation changes repository state and may squash commits, schedule auto-merge, or delete the source branch, so it requires merge permission and returns GitLab's merge result or a mergeability error. Pass `sha` from `get_merge_request` (`sha` or `diff_refs.head_sha`); GitLab 19.2+ groups may reject merges without it.

If true, the merge request merges when the pipeline succeeds.

Custom merge commit message

The IID of a merge request

If true, the merge request merges when the pipeline succeeds. Deprecated in GitLab 17.11. Use `auto_merge` instead.

SHA of the source-branch HEAD from get_merge_request (`sha` or `diff_refs.head_sha`). If provided, GitLab merges only when HEAD still matches. GitLab 19.2+ groups may require this (Require a commit SHA on the merge requests API).

Remove source branch after merge

Squash commits into a single commit when merging

Custom squash commit message

List discussion items for a merge request. Use this to list complete discussion threads for a merge request; use `get_merge_request_notes` when only flat notes are needed. It is read-only and returns threaded discussion items, while invalid merge request identifiers, missing resources, and permission failures are reported as errors.

The IID of a merge request

Page number for pagination (default: 1)

Number of items per page (max: 100, default: 20)

List issues assigned to the authenticated user. Use this for the specific operation described; choose a sibling tool when you need a different resource or lifecycle action. It is read-only and does not mutate GitLab data; missing resources, invalid identifiers, insufficient permission, and rate limits are returned as errors. When `project_id` or `group_id` is accepted, provide the numeric ID or complete URL-encoded path described by the schema; use required identifiers and pagination fields exactly as documented.

Return issues created after the given time (ISO 8601)

Return issues created before the given time (ISO 8601)

Array of label names to filter by

Milestone title to filter by

Page number for pagination (default: 1)

Number of items per page (default: 20, max: 100)

Project ID or URL-encoded path (optional to search across all accessible projects)

Search for specific terms in title and description

Return issues with a specific state (default: opened)

Return issues updated after the given time (ISO 8601)

Return issues updated before the given time (ISO 8601)

Protect a repository branch (set push/merge/unprotect access levels). Use this to create or update protection rules for a branch or wildcard; use `get_protected_branch` to inspect existing rules first. The operation changes who may push, merge, or unprotect, may enable force-push or code-owner settings, requires maintainer-level permission, and returns the protection rule or a validation/permission error.

Allow force push to the protected branch. Default: false

Branch name or wildcard pattern to protect

Require code owner approval before merging (PREMIUM). Default: false

Access level for merging (0=No access, 30=Developer, 40=Maintainer, 60=Admin). GitLab default applies when omitted.

Deprecated alias for branch_name; prefer branch_name for consistency

Project ID or complete URL-encoded path to project

Access level for pushing (0=No access, 30=Developer, 40=Maintainer, 60=Admin). GitLab default applies when omitted.

Access level for unprotecting (0=No access, 30=Developer, 40=Maintainer, 60=Admin). GitLab default applies when omitted.

Publish a single draft note. Use this for the specific operation described; choose a sibling tool when you need a different resource or lifecycle action. It changes remote GitLab state and requires the necessary project or group permission; GitLab returns validation, conflict, permission, or rate-limit errors instead of silently applying an invalid request. When `project_id` or `group_id` is accepted, provide the numeric ID or complete URL-encoded path described by the schema; use required identifiers and pagination fields exactly as documented.

The ID of the draft note

The IID of a merge request

Push multiple files in a single commit. Use this to commit several file changes atomically; use `create_or_update_file` when only one path is involved. Each file defaults to action `create`; optional per-file `action` (create/update/delete/move) and `encoding` (text/base64) are additive. `GITLAB_PERMISSION_MODE=modify` rejects `delete` and `move`. The operation writes repository history on the selected branch, requires repository write permission, and returns the commit result or a validation, conflict, or protected-branch error.

Branch to push to

Commit message

Array of files to push. Each entry defaults to action 'create'. Per-file fields: action (create/update/delete/move), encoding (text/base64; omitted uses GITLAB_REPO_FILE_ENCODING), previous_path (required for move). Content is required for create and update; omit content for delete, or for a move that should keep the original file. GITLAB_PERMISSION_MODE=modify rejects delete and move.

Commit action for this file. Defaults to 'create'.

File content. Required for create and update. Omit for delete, or for a move that should keep the original content. Base64-encoded when encoding is 'base64'.

Use 'base64' for binary files (content must already be base64-encoded). When omitted, GITLAB_REPO_FILE_ENCODING applies.

Path of the file in the repo

Previous path of the file. Required when action is 'move'.

Resolve a thread on a merge request. Use this to mark an existing merge request review thread resolved; use `update_merge_request_discussion_note` when the note text itself must change. The operation changes review state, requires permission to resolve discussions, and returns the updated discussion or a missing-thread/permission error.

The ID of a thread

The IID of a merge request

Whether to resolve the thread

Search for GitLab projects. Use this to discover matching content; choose a typed get or list tool when the target identifier is already known. It is read-only and does not mutate GitLab data; missing resources, invalid identifiers, insufficient permission, and rate limits are returned as errors. When `project_id` or `group_id` is accepted, provide the numeric ID or complete URL-encoded path described by the schema; use required identifiers and pagination fields exactly as documented.

Page number for pagination (default: 1)

Number of items per page (max: 100, default: 20)

Search query (alias for 'search')

Search query

Unapprove a merge request. Use this to remove the current user's approval from an existing merge request; use `merge_merge_request` only when you intend to merge. The operation changes review state and requires approval permission, and GitLab returns the updated result or an error when the request or approval is unavailable.

The IID of the merge request to unapprove

Remove protection from a previously protected branch. Use this to remove protection from an existing branch; use `protect_branch` to change access levels without removing the rule. The operation changes repository security controls, requires permission to manage protected branches, and returns the result or an error when the branch is missing or policy forbids the change.

Name of the protected branch to unprotect

Project ID or complete URL-encoded path to project

Change the default branch of a project. Use this to change which branch GitLab treats as the project's default; use `create_branch` to create a branch rather than changing project defaults. The operation changes project settings and may affect clone, merge request, and CI defaults, requires project-maintainer permission, and returns the updated project or a validation/permission error.

The new default branch name for the project

Update an existing draft note. Use this for an existing resource; choose the corresponding create tool for a new resource and a note tool for discussion-only text. It changes remote GitLab state and requires the necessary project or group permission; GitLab returns validation, conflict, permission, or rate-limit errors instead of silently applying an invalid request. When `project_id` or `group_id` is accepted, provide the numeric ID or complete URL-encoded path described by the schema; use required identifiers and pagination fields exactly as documented.

The content of the draft note

The ID of the draft note

The IID of a merge request

Position when creating a diff note

REQUIRED: Base commit SHA in the source branch. Get this from merge request diff_refs.base_sha.

REQUIRED: SHA referencing HEAD of the source branch. Get this from merge request diff_refs.head_sha.

IMAGE DIFFS ONLY: Height of the image (for position_type='image').

Line range for multiline comments on GitLab merge request diffs. VALIDATION RULES: 1) line_code is critical for GitLab API success, 2) start/end must have consistent types, 3) line numbers must form valid range, 4) get line_code from GitLab diff API, never generate manually.

End line position for multiline comment range. MUST specify either old_line OR new_line (or both for context), never neither. Range must be valid (end >= start).

CRITICAL: Line identifier in format '{file_path_sha1_hash}_{old_line_number}_{new_line_number}'. USUALLY REQUIRED for GitLab diff comments despite being optional in schema. Example: 'a1b2c3d4e5f6_12_17'. Must be from same file as start.line_code.

Line number in modified file (after changes). REQUIRED when type='new', NULL when type='old' (for purely deleted lines), can be present for context lines. MUST be >= start.new_line if both specified.

Line number in original file (before changes). REQUIRED when type='old', NULL when type='new' (for purely added lines), can be present for context lines. MUST be >= start.old_line if both specified.

Line type: 'old' = deleted/original line, 'new' = added/modified line, null = unchanged context. SHOULD MATCH start.type for consistent ranges (don't mix old/new types).

Start line position for multiline comment range. MUST specify either old_line OR new_line (or both for context), never neither.

CRITICAL: Line identifier in format '{file_path_sha1_hash}_{old_line_number}_{new_line_number}'. USUALLY REQUIRED for GitLab diff comments despite being optional in schema. Example: 'a1b2c3d4e5f6_10_15'. Get this from GitLab diff API response, never fabricate.

Line number in modified file (after changes). REQUIRED when type='new', NULL when type='old' (for purely deleted lines), can be present for context lines.

Line number in original file (before changes). REQUIRED when type='old', NULL when type='new' (for purely added lines), can be present for context lines.

Line type: 'old' = deleted/original line, 'new' = added/modified line, null = unchanged context. MUST match the line_code format and old_line/new_line values.

MULTILINE COMMENTS: Specify start/end line positions for commenting on multiple lines. Alternative to single old_line/new_line.

Line number in modified file (after changes). Use for added lines or context lines. NULL for deleted lines. For single-line comments on new lines.

File path after changes. REQUIRED for most diff comments. Use same as old_path if file wasn't renamed.

Line number in original file (before changes). Use for deleted lines or context lines. NULL for added lines. For single-line comments on old lines.

File path before changes. REQUIRED for most diff comments. Use same as new_path if file wasn't renamed.

REQUIRED: Position type. Use 'text' for code diffs, 'image' for image diffs, 'file' for file-level comments.

REQUIRED: SHA referencing the start commit of the source branch. Get this from merge request diff_refs.start_sha.

IMAGE DIFFS ONLY: Width of the image (for position_type='image').

IMAGE DIFFS ONLY: X coordinate on the image (for position_type='image').

IMAGE DIFFS ONLY: Y coordinate on the image (for position_type='image').

Project ID or complete URL-encoded path to project

Whether to resolve the discussion when publishing

Update an issue. Returns a slim confirmation by default; set full_response=true for the complete updated issue object. Use this to change fields on an existing issue; use `update_issue_description_patch` for a targeted description edit that avoids sending the full body, and use `create_issue_note` for discussion. The operation mutates issue state, requires issue-edit permission, and returns the updated issue or a validation/permission/conflict error.

Array of user IDs to assign issue to

Set the issue to be confidential

The description of the issue

Flag to lock discussions

Date the issue is due (YYYY-MM-DD)

If true, return the complete updated issue object. Default returns a slim confirmation (iid, title, state, web_url, updated_at) to reduce token usage.

The internal ID of the project issue

The type of issue. One of issue, incident, test_case or task.

Array of label names

Milestone ID to assign

Project ID or URL-encoded path

Update issue state (close/reopen)

The title of the issue

Weight of the issue (numeric, typically hours of work)

Apply a patch (search/replace or unified diff) to an issue description. Reduces token usage by allowing small changes without sending the full description. Supports dry_run to preview changes and create_note to summarize updates. Use this for a targeted search/replace or unified-diff change to an issue description; use `dry_run` before applying an uncertain patch and `create_note` when an audit summary is wanted. It changes the issue description when not dry-running, requires issue-edit permission, and returns the patch result or a mismatch/validation/permission error.

For search_replace: allow multiple matches to all be replaced (default: false — fail on duplicate)

If true, add a note summarizing the change after update

If true, preview changes without updating the issue

The internal ID of the project issue

The patch content to apply to the issue description

Type of patch format to apply

Project ID or URL-encoded path

Modify an existing issue thread note. Use this for an existing resource; choose the corresponding create tool for a new resource and a note tool for discussion-only text. It changes remote GitLab state and requires the necessary project or group permission; GitLab returns validation, conflict, permission, or rate-limit errors instead of silently applying an invalid request. When `project_id` or `group_id` is accepted, provide the numeric ID or complete URL-encoded path described by the schema; use required identifiers and pagination fields exactly as documented.

The content of the note or reply

The ID of a thread

The IID of an issue

The ID of a thread note

Resolve or unresolve the note

Update an existing label in a project. Use this for an existing resource; choose the corresponding create tool for a new resource and a note tool for discussion-only text. It changes remote GitLab state and requires the necessary project or group permission; GitLab returns validation, conflict, permission, or rate-limit errors instead of silently applying an invalid request. When `project_id` or `group_id` is accepted, provide the numeric ID or complete URL-encoded path described by the schema; use required identifiers and pagination fields exactly as documented.

The color of the label given in 6-digit hex notation with leading '#' sign

The new description of the label

The ID or title of a project's label

The new name of the label

The new priority of the label

Project ID or URL-encoded path

Update a merge request (mergeRequestIid or branchName required). Use this for an existing resource; choose the corresponding create tool for a new resource and a note tool for discussion-only text. It changes remote GitLab state and requires the necessary project or group permission; GitLab returns validation, conflict, permission, or rate-limit errors instead of silently applying an invalid request. When `project_id` or `group_id` is accepted, provide the numeric ID or complete URL-encoded path described by the schema; use required identifiers and pagination fields exactly as documented.

The ID of the users to assign the MR to

The description of the merge request

Work in progress merge request

Labels for the MR

The IID of a merge request

Milestone ID to assign. Set to 0 to unassign. Null is treated as omitted.

Flag indicating if the source branch should be removed

The ID of the users to assign as reviewers of the MR

Source branch name

Squash commits into a single commit when merging

New state (close/reopen) for the MR

The target branch

The title of the merge request

Update a discussion note on a merge request. Use this for an existing resource; choose the corresponding create tool for a new resource and a note tool for discussion-only text. It changes remote GitLab state and requires the necessary project or group permission; GitLab returns validation, conflict, permission, or rate-limit errors instead of silently applying an invalid request. When `project_id` or `group_id` is accepted, provide the numeric ID or complete URL-encoded path described by the schema; use required identifiers and pagination fields exactly as documented.

The content of the note or reply

The ID of a thread

The IID of a merge request

The ID of a thread note

Project ID or complete URL-encoded path to project

Resolve or unresolve the note

Modify an existing merge request note. Use this for an existing resource; choose the corresponding create tool for a new resource and a note tool for discussion-only text. It changes remote GitLab state and requires the necessary project or group permission; GitLab returns validation, conflict, permission, or rate-limit errors instead of silently applying an invalid request. When `project_id` or `group_id` is accepted, provide the numeric ID or complete URL-encoded path described by the schema; use required identifiers and pagination fields exactly as documented.

The content of the note or reply

The IID of a merge request

The ID of a thread note

Update project settings such as description, visibility, default branch, and feature access levels. Use this for an existing resource; choose the corresponding create tool for a new resource and a note tool for discussion-only text. It changes remote GitLab state and requires the necessary project or group permission; GitLab returns validation, conflict, permission, or rate-limit errors instead of silently applying an invalid request. When `project_id` or `group_id` is accepted, provide the numeric ID or complete URL-encoded path described by the schema; use required identifiers and pagination fields exactly as documented.

CI/CD pipelines feature visibility

Container registry feature visibility

Default branch name

Project description

Environments feature visibility

Forking feature visibility

Issues feature visibility

Merge method

Merge requests feature visibility

Project display name

Require all discussions to be resolved before merge

Require successful pipeline before merge

Package registry feature visibility

Pages feature visibility

Project path/slug

Remove source branches after merge by default

Allow users to request access

Snippets feature visibility

Squash commits setting

Project topics

Project visibility

Wiki feature visibility

Upload a file for use in markdown content. Use this for the specific operation described; choose a sibling tool when you need a different resource or lifecycle action. It changes remote GitLab state and requires the necessary project or group permission; GitLab returns validation, conflict, permission, or rate-limit errors instead of silently applying an invalid request. When `project_id` or `group_id` is accepted, provide the numeric ID or complete URL-encoded path described by the schema; use required identifiers and pagination fields exactly as documented.

Path to the file to upload

Project ID or URL-encoded path of the project

Validate provided GitLab CI/CD YAML content for a project. Use this to check configuration without applying it; choose a create or update tool only after validation succeeds. It is read-only and does not mutate GitLab data; missing resources, invalid identifiers, insufficient permission, and rate limits are returned as errors. When `project_id` or `group_id` is accepted, provide the numeric ID or complete URL-encoded path described by the schema; use required identifiers and pagination fields exactly as documented.

GitLab CI/CD YAML content to validate

Run pipeline creation simulation

Include jobs in the lint response

Project ID or URL-encoded path

Branch or tag context for dry_run validation

Validate an existing .gitlab-ci.yml configuration for a project. Use this to check configuration without applying it; choose a create or update tool only after validation succeeds. It is read-only and does not mutate GitLab data; missing resources, invalid identifiers, insufficient permission, and rate limits are returned as errors. When `project_id` or `group_id` is accepted, provide the numeric ID or complete URL-encoded path described by the schema; use required identifiers and pagination fields exactly as documented.

Commit SHA, branch, or tag to read the existing CI config from

Run pipeline creation simulation

Include jobs in the lint response

Project ID or URL-encoded path

Verify if a namespace path exists. Use parent_id to scope the check to a specific parent namespace — required for nested namespaces where the same path may exist under different parents.

Parent namespace ID; required to correctly resolve paths in nested namespaces where the same path may exist under different parents

Namespace path to verify

whoami

Get current authenticated user details. Use this to identify the authenticated GitLab user; use `get_user` or `get_users` when looking up another user. It is read-only and returns the current user profile, while missing credentials or GitLab permission failures are reported as errors.