Issues and work items
The whole life of an issue: create, read, list (in a project, a group or everywhere the user can see), update (closing and reopening included), reorder, move to another project and delete; subscriptions and to-do items; its notes and threaded discussions; links to other issues; time estimates and spent time; its participants and the merge requests related to it or closing it; award emoji on the issue and its notes; and the label, milestone and state events of its history. Issue statistics count issues by state.
Work items, the GraphQL model behind issues, epics and tasks, are actions here too, with their types and saved views. Iteration and weight events, and listing a project’s or a group’s iterations, are served from Premium.
On GitLab 19.4, issue.work_item_saved_view_create and issue.work_item_saved_view_subscribe made with a token nearly always answer 500: subscribing a user to a view locks the user’s row while GitLab’s sign-in tracking has left unsaved changes on it, which GitLab refuses. The create meets it after the view is saved, so the view exists and its creator is not subscribed; the error says so and names issue.work_item_saved_view_list, since creating the view again adds a duplicate. The subscribe fails before recording anything. The other saved view actions are not affected.
Sample questions
Section titled “Sample questions”- “List the open issues of project 42”
- “Create an issue about the login bug and assign it to me”
- “Close issue 10 with a comment”
- “How much time has been spent on issue 7?”
How to call it
Section titled “How to call it”- Dynamic, the default surface: call
gitlab_execute_actionwithactionset to the action’s ID, such asissue.create, and its parameters inparams.gitlab_find_actionfinds an ID from a description of the task. - Meta (
GITLAB_MCP_TOOL_SURFACE=meta): callgitlab_issuewithactionset to the action’s name, such ascreate, and its parameters inparams. - Individual (
GITLAB_MCP_TOOL_SURFACE=individual): call the action’s own tool, such asgitlab_issue_create, with its parameters as the arguments.
Availability
Section titled “Availability”How many of these actions an instance serves at each tier, out of a total of 71:
- Free: 66
- Premium: 71
- Ultimate: 71
Read-only actions: 38 of 71, the ones a deployment in read-only mode keeps.
Actions
Section titled “Actions”The description of each action, and of each of its parameters, is the text the server serves for it on the default surface, quoted as served. A destructive action runs only once confirmed, unless GITLAB_MCP_YOLO_MODE (or AUTOPILOT) skips that step: the dynamic surface needs confirm: true on gitlab_execute_action, and the other two take a confirm parameter or the client’s prompt (Destructive actions). A parameter followed by a tier in parentheses is served only from that tier on.
| Action | Tier | Individual |
|---|---|---|
issue.create | Free | gitlab_issue_create |
issue.create_todo | Free | gitlab_issue_create_todo |
issue.delete | Free | gitlab_issue_delete |
issue.discussion_add_note | Free | gitlab_add_issue_discussion_note |
issue.discussion_create | Free | gitlab_create_issue_discussion |
issue.discussion_delete_note | Free | gitlab_delete_issue_discussion_note |
issue.discussion_get | Free | gitlab_get_issue_discussion |
issue.discussion_list | Free | gitlab_list_issue_discussions |
issue.discussion_update_note | Free | gitlab_update_issue_discussion_note |
issue.emoji_issue_create | Free | gitlab_issue_emoji_create |
issue.emoji_issue_delete | Free | gitlab_issue_emoji_delete |
issue.emoji_issue_get | Free | gitlab_issue_emoji_get |
issue.emoji_issue_list | Free | gitlab_issue_emoji_list |
issue.emoji_issue_note_create | Free | gitlab_issue_note_emoji_create |
issue.emoji_issue_note_delete | Free | gitlab_issue_note_emoji_delete |
issue.emoji_issue_note_get | Free | gitlab_issue_note_emoji_get |
issue.emoji_issue_note_list | Free | gitlab_issue_note_emoji_list |
issue.event_issue_iteration_get | Premium | gitlab_issue_iteration_event_get |
issue.event_issue_iteration_list | Premium | gitlab_issue_iteration_event_list |
issue.event_issue_label_get | Free | gitlab_issue_label_event_get |
issue.event_issue_label_list | Free | gitlab_issue_label_event_list |
issue.event_issue_milestone_get | Free | gitlab_issue_milestone_event_get |
issue.event_issue_milestone_list | Free | gitlab_issue_milestone_event_list |
issue.event_issue_state_get | Free | gitlab_issue_state_event_get |
issue.event_issue_state_list | Free | gitlab_issue_state_event_list |
issue.event_issue_weight_list | Premium | gitlab_issue_weight_event_list |
issue.get | Free | gitlab_issue_get |
issue.get_by_id | Free | gitlab_issue_get_by_id |
issue.iteration_list_group | Premium | gitlab_list_group_iterations |
issue.iteration_list_project | Premium | gitlab_list_project_iterations |
issue.link_create | Free | gitlab_issue_link_create |
issue.link_delete | Free | gitlab_issue_link_delete |
issue.link_get | Free | gitlab_issue_link_get |
issue.link_list | Free | gitlab_issue_link_list |
issue.list | Free | gitlab_issue_list |
issue.list_all | Free | gitlab_issue_list_all |
issue.list_group | Free | gitlab_issue_list_group |
issue.move | Free | gitlab_issue_move |
issue.mrs_closing | Free | gitlab_issue_mrs_closing |
issue.mrs_related | Free | gitlab_issue_mrs_related |
issue.note_create | Free | gitlab_issue_note_create |
issue.note_delete | Free | gitlab_issue_note_delete |
issue.note_get | Free | gitlab_issue_note_get |
issue.note_list | Free | gitlab_issue_note_list |
issue.note_update | Free | gitlab_issue_note_update |
issue.participants | Free | gitlab_issue_participants |
issue.reorder | Free | gitlab_issue_reorder |
issue.spent_time_add | Free | gitlab_issue_spent_time_add |
issue.spent_time_reset | Free | gitlab_issue_spent_time_reset |
issue.statistics_get | Free | gitlab_get_issue_statistics |
issue.statistics_get_group | Free | gitlab_get_group_issue_statistics |
issue.statistics_get_project | Free | gitlab_get_project_issue_statistics |
issue.subscribe | Free | gitlab_issue_subscribe |
issue.time_estimate_reset | Free | gitlab_issue_time_estimate_reset |
issue.time_estimate_set | Free | gitlab_issue_time_estimate_set |
issue.time_stats_get | Free | gitlab_issue_time_stats_get |
issue.unsubscribe | Free | gitlab_issue_unsubscribe |
issue.update | Free | gitlab_issue_update |
issue.work_item_create | Free | gitlab_create_work_item |
issue.work_item_delete | Free | gitlab_delete_work_item |
issue.work_item_get | Free | gitlab_get_work_item |
issue.work_item_list | Free | gitlab_list_work_items |
issue.work_item_saved_view_create | Free | gitlab_work_item_saved_view_create |
issue.work_item_saved_view_delete | Free | gitlab_work_item_saved_view_delete |
issue.work_item_saved_view_get | Free | gitlab_work_item_saved_view_get |
issue.work_item_saved_view_list | Free | gitlab_work_item_saved_view_list |
issue.work_item_saved_view_subscribe | Free | gitlab_work_item_saved_view_subscribe |
issue.work_item_saved_view_unsubscribe | Free | gitlab_work_item_saved_view_unsubscribe |
issue.work_item_saved_view_update | Free | gitlab_work_item_saved_view_update |
issue.work_item_type_list | Free | gitlab_list_work_item_types |
issue.work_item_update | Free | gitlab_update_work_item |
issue.create
Section titled “issue.create”Create a new issue in a project. Returns: the created issue with IID, state, labels, assignees, milestone, due date, and web URL. See also:
issue.get,issue.list,issue.update.
- Meta-tool:
gitlab_issue, actioncreate - Individual tool:
gitlab_issue_create - Tier: Free
- Behavior: writes, not idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
project_id | string/integer | yes | Project ID or URL-encoded path |
title | string | yes | Issue title |
assignee_id | integer | no | Single user ID to assign (use assignee_ids for multiple) |
assignee_ids | integer[] | no | User IDs to assign |
confidential | boolean | no | Mark issue as confidential |
created_at | string | no | Creation date override (ISO 8601, requires admin permissions) |
description | string | no | Issue description (Markdown supported) |
discussion_to_resolve | string | no | Discussion ID to mark as resolved by this issue |
due_date | string | no | Due date in YYYY-MM-DD format |
epic_id (Premium) | integer | no | Epic ID to associate the issue with |
iid | integer | no | Explicit issue IID to assign (requires admin permissions. Normally GitLab assigns the next IID automatically) |
issue_type | string (issue, incident, test_case, task) | no | Issue type (issue, incident, test_case, task) |
labels | string[] | no | Label names to apply |
merge_request_to_resolve_discussions_of | integer | no | MR IID whose unresolved discussions become issues |
milestone_id | integer | no | Milestone ID to associate |
weight (Premium) | integer | no | Issue weight, 0 or higher |
issue.create_todo
Section titled “issue.create_todo”Create a to-do for an issue. Returns: the created to-do item with action, target title and URL, author, body, state and created and updated times. See also:
issue.get.
- Meta-tool:
gitlab_issue, actioncreate_todo - Individual tool:
gitlab_issue_create_todo - Tier: Free
- Behavior: writes, not idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
issue_iid | integer | yes | Issue internal ID |
project_id | string/integer | yes | Project ID or URL-encoded path |
issue.delete
Section titled “issue.delete”Delete an issue permanently. Returns: a success confirmation naming the issue and project. See also:
issue.get,issue.update.
- Meta-tool:
gitlab_issue, actiondelete - Individual tool:
gitlab_issue_delete - Tier: Free
- Behavior: writes, destructive (needs confirmation), idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
issue_iid | integer | yes | Issue IID (project-scoped internal ID, not ‘issue_id’) |
project_id | string/integer | yes | Project ID or URL-encoded path |
issue.discussion_add_note
Section titled “issue.discussion_add_note”Add a reply note to an existing issue discussion thread. Returns: the created note (author, body, timestamps). See also:
issue.discussion_create,issue.discussion_get,issue.discussion_update_note.
- Meta-tool:
gitlab_issue, actiondiscussion_add_note - Individual tool:
gitlab_add_issue_discussion_note - Tier: Free
- Behavior: writes, not idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
body | string | yes | Note body (Markdown supported) |
discussion_id | string | yes | Discussion ID to reply to |
issue_iid | integer | yes | Issue internal ID |
project_id | string/integer | yes | Project ID or URL-encoded path |
created_at | string | no | Backdate the note creation time (ISO 8601, e.g. 2025-01-01T00:00:00Z). Requires admin or owner rights |
issue.discussion_create
Section titled “issue.discussion_create”Create a new discussion thread on an issue with an initial note. Returns: the created thread with its first note. See also:
issue.discussion_add_note,issue.discussion_list,issue.note_create.
- Meta-tool:
gitlab_issue, actiondiscussion_create - Individual tool:
gitlab_create_issue_discussion - Tier: Free
- Behavior: writes, not idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
body | string | yes | Discussion body (Markdown supported) |
issue_iid | integer | yes | Issue internal ID |
project_id | string/integer | yes | Project ID or URL-encoded path |
created_at | string | no | Backdate the discussion creation time (ISO 8601, e.g. 2025-01-01T00:00:00Z). Requires admin or owner rights |
issue.discussion_delete_note
Section titled “issue.discussion_delete_note”Delete a note from an issue discussion thread (destructive). Returns: a deletion confirmation message. See also:
issue.discussion_update_note,issue.discussion_get,issue.discussion_list.
- Meta-tool:
gitlab_issue, actiondiscussion_delete_note - Individual tool:
gitlab_delete_issue_discussion_note - Tier: Free
- Behavior: writes, destructive (needs confirmation), idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
discussion_id | string | yes | Discussion ID |
issue_iid | integer | yes | Issue internal ID |
note_id | integer | yes | Note ID to delete |
project_id | string/integer | yes | Project ID or URL-encoded path |
issue.discussion_get
Section titled “issue.discussion_get”Get a single issue discussion thread by its discussion id. Returns: the thread with every note (author, body, system flag, resolvable/resolved state). See also:
issue.discussion_list,issue.discussion_add_note,issue.get.
- Meta-tool:
gitlab_issue, actiondiscussion_get - Individual tool:
gitlab_get_issue_discussion - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
discussion_id | string | yes | Discussion ID |
issue_iid | integer | yes | Issue internal ID |
project_id | string/integer | yes | Project ID or URL-encoded path |
issue.discussion_list
Section titled “issue.discussion_list”List discussion threads on an issue with ordering and keyset pagination. Returns: discussion threads with their notes (author, body, system flag, resolvable state) and pagination metadata. See also:
issue.discussion_get,issue.discussion_create,issue.get,issue.note_list.
- Meta-tool:
gitlab_issue, actiondiscussion_list - Individual tool:
gitlab_list_issue_discussions - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
issue_iid | integer | yes | Issue internal ID |
project_id | string/integer | yes | Project ID or URL-encoded path |
order_by | string | no | Column to order keyset-paginated results by (e.g. created_at, updated_at) |
page | integer | no | Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward. |
page_token | string | no | Keyset pagination cursor: record id at which to fetch the next page, taken from the previous keyset response. Only used when pagination=‘keyset’. |
pagination | string | no | Pagination method: ‘keyset’ for keyset-based pagination on large ordered result sets, or ‘offset’ (the default). Keyset avoids deep-offset cost. |
per_page | integer | no | Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large. |
sort | string (asc, desc) | no | Sort direction (asc or desc) |
issue.discussion_update_note
Section titled “issue.discussion_update_note”Update the body of a note in an issue discussion thread. Returns: the updated note. See also:
issue.discussion_add_note,issue.discussion_delete_note,issue.discussion_get.
- Meta-tool:
gitlab_issue, actiondiscussion_update_note - Individual tool:
gitlab_update_issue_discussion_note - Tier: Free
- Behavior: writes, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
body | string | yes | Updated note body |
discussion_id | string | yes | Discussion ID |
issue_iid | integer | yes | Issue internal ID |
note_id | integer | yes | Note ID to update |
project_id | string/integer | yes | Project ID or URL-encoded path |
created_at | string | no | Override the note creation time (ISO 8601, e.g. 2025-01-01T00:00:00Z). Requires admin or owner rights |
issue.emoji_issue_create
Section titled “issue.emoji_issue_create”Add an emoji reaction to an issue. Returns: the created award with its emoji name, awarding user object, timestamps, and awardable id/type. See also:
issue.emoji_issue_list,issue.emoji_issue_delete.
- Meta-tool:
gitlab_issue, actionemoji_issue_create - Individual tool:
gitlab_issue_emoji_create - Tier: Free
- Behavior: writes, not idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
issue_iid | integer | yes | Issue IID (project-scoped internal ID) |
name | string | yes | Emoji name without colons (e.g. thumbsup) |
project_id | string/integer | yes | Project ID or URL-encoded path |
issue.emoji_issue_delete
Section titled “issue.emoji_issue_delete”Remove an emoji reaction from an issue by award id. Returns: a success confirmation naming the award emoji. See also:
issue.emoji_issue_list,issue.emoji_issue_get.
- Meta-tool:
gitlab_issue, actionemoji_issue_delete - Individual tool:
gitlab_issue_emoji_delete - Tier: Free
- Behavior: writes, destructive (needs confirmation), idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
award_id | integer | yes | Award emoji ID |
issue_iid | integer | yes | Issue IID (project-scoped internal ID) |
project_id | string/integer | yes | Project ID or URL-encoded path |
issue.emoji_issue_get
Section titled “issue.emoji_issue_get”Get a single emoji reaction on an issue by award id. Returns: the award with its emoji name, awarding user object, timestamps, and awardable id/type. See also:
issue.emoji_issue_list,issue.emoji_issue_delete.
- Meta-tool:
gitlab_issue, actionemoji_issue_get - Individual tool:
gitlab_issue_emoji_get - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
award_id | integer | yes | Award emoji ID |
issue_iid | integer | yes | Issue IID (project-scoped internal ID) |
project_id | string/integer | yes | Project ID or URL-encoded path |
issue.emoji_issue_list
Section titled “issue.emoji_issue_list”List all emoji reactions on an issue. Returns: each award with its emoji name, the awarding user object, awardable id/type, and pagination metadata. See also:
issue.emoji_issue_get,issue.emoji_issue_create,issue.get.
- Meta-tool:
gitlab_issue, actionemoji_issue_list - Individual tool:
gitlab_issue_emoji_list - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
issue_iid | integer | yes | Issue IID (project-scoped internal ID) |
project_id | string/integer | yes | Project ID or URL-encoded path |
order_by | string | no | Column to order results by (e.g. created_at, updated_at, id). Used with keyset pagination. |
page | integer | no | Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward. |
page_token | string | no | Keyset pagination cursor: record id at which to fetch the next page, taken from the previous keyset response. Only used when pagination=‘keyset’. |
pagination | string | no | Pagination method: ‘keyset’ for keyset-based pagination on large ordered result sets, or ‘offset’ (the default). Keyset avoids deep-offset cost. |
per_page | integer | no | Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large. |
sort | string (asc, desc) | no | Sort order: ‘asc’ or ‘desc’. |
issue.emoji_issue_note_create
Section titled “issue.emoji_issue_note_create”Add an emoji reaction to an issue note. Returns: the created award with its emoji name, awarding user object, timestamps, and awardable id/type. See also:
issue.emoji_issue_note_list,issue.emoji_issue_note_delete.
- Meta-tool:
gitlab_issue, actionemoji_issue_note_create - Individual tool:
gitlab_issue_note_emoji_create - Tier: Free
- Behavior: writes, not idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
issue_iid | integer | yes | Issue IID (project-scoped internal ID) |
name | string | yes | Emoji name without colons (e.g. thumbsup) |
note_id | integer | yes | Note ID |
project_id | string/integer | yes | Project ID or URL-encoded path |
issue.emoji_issue_note_delete
Section titled “issue.emoji_issue_note_delete”Remove an emoji reaction from an issue note by award id. Returns: a success confirmation naming the award emoji. See also:
issue.emoji_issue_note_list,issue.emoji_issue_note_get.
- Meta-tool:
gitlab_issue, actionemoji_issue_note_delete - Individual tool:
gitlab_issue_note_emoji_delete - Tier: Free
- Behavior: writes, destructive (needs confirmation), idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
award_id | integer | yes | Award emoji ID |
issue_iid | integer | yes | Issue IID (project-scoped internal ID) |
note_id | integer | yes | Note ID |
project_id | string/integer | yes | Project ID or URL-encoded path |
issue.emoji_issue_note_get
Section titled “issue.emoji_issue_note_get”Get a single emoji reaction on an issue note by award id. Returns: the award with its emoji name, awarding user object, timestamps, and awardable id/type. See also:
issue.emoji_issue_note_list,issue.emoji_issue_note_delete.
- Meta-tool:
gitlab_issue, actionemoji_issue_note_get - Individual tool:
gitlab_issue_note_emoji_get - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
award_id | integer | yes | Award emoji ID |
issue_iid | integer | yes | Issue IID (project-scoped internal ID) |
note_id | integer | yes | Note ID |
project_id | string/integer | yes | Project ID or URL-encoded path |
issue.emoji_issue_note_list
Section titled “issue.emoji_issue_note_list”List all emoji reactions on an issue note (comment). Returns: each award with its emoji name, the awarding user object, awardable id/type, and pagination metadata. See also:
issue.emoji_issue_note_get,issue.emoji_issue_note_create,issue.note_get.
- Meta-tool:
gitlab_issue, actionemoji_issue_note_list - Individual tool:
gitlab_issue_note_emoji_list - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
issue_iid | integer | yes | Issue IID (project-scoped internal ID) |
note_id | integer | yes | Note ID |
project_id | string/integer | yes | Project ID or URL-encoded path |
order_by | string | no | Column to order results by (e.g. created_at, updated_at, id). Used with keyset pagination. |
page | integer | no | Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward. |
page_token | string | no | Keyset pagination cursor: record id at which to fetch the next page, taken from the previous keyset response. Only used when pagination=‘keyset’. |
pagination | string | no | Pagination method: ‘keyset’ for keyset-based pagination on large ordered result sets, or ‘offset’ (the default). Keyset avoids deep-offset cost. |
per_page | integer | no | Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large. |
sort | string (asc, desc) | no | Sort order: ‘asc’ or ‘desc’. |
issue.event_issue_iteration_get
Section titled “issue.event_issue_iteration_get”Get a single iteration event for an issue (Premium/Ultimate). Returns: the event with action, the iteration object, and the acting user. See also:
issue.event_issue_iteration_list.
- Meta-tool:
gitlab_issue, actionevent_issue_iteration_get - Individual tool:
gitlab_issue_iteration_event_get - Tier: Premium
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
issue_iid | integer | yes | Issue internal ID |
iteration_event_id | integer | yes | Iteration event ID |
project_id | string/integer | yes | Project ID or URL-encoded path |
issue.event_issue_iteration_list
Section titled “issue.event_issue_iteration_list”List iteration events for an issue (Premium/Ultimate). Returns: iteration events with action, the iteration object, the acting user, and pagination metadata. See also:
issue.event_issue_iteration_get,issue.get.
- Meta-tool:
gitlab_issue, actionevent_issue_iteration_list - Individual tool:
gitlab_issue_iteration_event_list - Tier: Premium
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
issue_iid | integer | yes | Issue internal ID |
project_id | string/integer | yes | Project ID or URL-encoded path |
order_by | string | no | Column to order keyset-paginated results by (e.g. id) |
page | integer | no | Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward. |
page_token | string | no | Keyset pagination cursor: record id at which to fetch the next page, taken from the previous keyset response. Only used when pagination=‘keyset’. |
pagination | string | no | Pagination method: ‘keyset’ for keyset-based pagination on large ordered result sets, or ‘offset’ (the default). Keyset avoids deep-offset cost. |
per_page | integer | no | Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large. |
sort | string (asc, desc) | no | Sort direction for keyset pagination: asc or desc |
issue.event_issue_label_get
Section titled “issue.event_issue_label_get”Get a single label event for an issue. Returns: the event with action, the label object, and the acting user. See also:
issue.event_issue_label_list.
- Meta-tool:
gitlab_issue, actionevent_issue_label_get - Individual tool:
gitlab_issue_label_event_get - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
issue_iid | integer | yes | Issue internal ID |
label_event_id | integer | yes | Label event ID |
project_id | string/integer | yes | Project ID or URL-encoded path |
issue.event_issue_label_list
Section titled “issue.event_issue_label_list”List label events for an issue. Returns: label events with action, the label object, the acting user, and pagination metadata. See also:
issue.event_issue_label_get,issue.get.
- Meta-tool:
gitlab_issue, actionevent_issue_label_list - Individual tool:
gitlab_issue_label_event_list - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
issue_iid | integer | yes | Issue internal ID |
project_id | string/integer | yes | Project ID or URL-encoded path |
order_by | string | no | Column to order keyset-paginated results by (e.g. id) |
page | integer | no | Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward. |
page_token | string | no | Keyset pagination cursor: record id at which to fetch the next page, taken from the previous keyset response. Only used when pagination=‘keyset’. |
pagination | string | no | Pagination method: ‘keyset’ for keyset-based pagination on large ordered result sets, or ‘offset’ (the default). Keyset avoids deep-offset cost. |
per_page | integer | no | Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large. |
sort | string (asc, desc) | no | Sort direction for keyset pagination: asc or desc |
issue.event_issue_milestone_get
Section titled “issue.event_issue_milestone_get”Get a single milestone event for an issue. Returns: the event with action, the milestone object, and the acting user. See also:
issue.event_issue_milestone_list.
- Meta-tool:
gitlab_issue, actionevent_issue_milestone_get - Individual tool:
gitlab_issue_milestone_event_get - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
issue_iid | integer | yes | Issue internal ID |
milestone_event_id | integer | yes | Milestone event ID |
project_id | string/integer | yes | Project ID or URL-encoded path |
issue.event_issue_milestone_list
Section titled “issue.event_issue_milestone_list”List milestone events for an issue. Returns: milestone events with action, the milestone object, the acting user, and pagination metadata. See also:
issue.event_issue_milestone_get,issue.get.
- Meta-tool:
gitlab_issue, actionevent_issue_milestone_list - Individual tool:
gitlab_issue_milestone_event_list - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
issue_iid | integer | yes | Issue internal ID |
project_id | string/integer | yes | Project ID or URL-encoded path |
order_by | string | no | Column to order keyset-paginated results by (e.g. id) |
page | integer | no | Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward. |
page_token | string | no | Keyset pagination cursor: record id at which to fetch the next page, taken from the previous keyset response. Only used when pagination=‘keyset’. |
pagination | string | no | Pagination method: ‘keyset’ for keyset-based pagination on large ordered result sets, or ‘offset’ (the default). Keyset avoids deep-offset cost. |
per_page | integer | no | Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large. |
sort | string (asc, desc) | no | Sort direction for keyset pagination: asc or desc |
issue.event_issue_state_get
Section titled “issue.event_issue_state_get”Get a single state event for an issue. Returns: the event with the state value and the acting user. See also:
issue.event_issue_state_list.
- Meta-tool:
gitlab_issue, actionevent_issue_state_get - Individual tool:
gitlab_issue_state_event_get - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
issue_iid | integer | yes | Issue internal ID |
project_id | string/integer | yes | Project ID or URL-encoded path |
state_event_id | integer | yes | State event ID |
issue.event_issue_state_list
Section titled “issue.event_issue_state_list”List state events for an issue. Returns: state events with the state value, the acting user, and pagination metadata. See also:
issue.event_issue_state_get,issue.get.
- Meta-tool:
gitlab_issue, actionevent_issue_state_list - Individual tool:
gitlab_issue_state_event_list - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
issue_iid | integer | yes | Issue internal ID |
project_id | string/integer | yes | Project ID or URL-encoded path |
order_by | string | no | Column to order keyset-paginated results by (e.g. id) |
page | integer | no | Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward. |
page_token | string | no | Keyset pagination cursor: record id at which to fetch the next page, taken from the previous keyset response. Only used when pagination=‘keyset’. |
pagination | string | no | Pagination method: ‘keyset’ for keyset-based pagination on large ordered result sets, or ‘offset’ (the default). Keyset avoids deep-offset cost. |
per_page | integer | no | Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large. |
sort | string (asc, desc) | no | Sort direction for keyset pagination: asc or desc |
issue.event_issue_weight_list
Section titled “issue.event_issue_weight_list”List weight events for an issue (Premium/Ultimate). Returns: weight events with the weight value, the acting user, and pagination metadata. See also:
issue.get.
- Meta-tool:
gitlab_issue, actionevent_issue_weight_list - Individual tool:
gitlab_issue_weight_event_list - Tier: Premium
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
issue_iid | integer | yes | Issue internal ID |
project_id | string/integer | yes | Project ID or URL-encoded path |
order_by | string | no | Column to order keyset-paginated results by (e.g. id) |
page | integer | no | Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward. |
page_token | string | no | Keyset pagination cursor: record id at which to fetch the next page, taken from the previous keyset response. Only used when pagination=‘keyset’. |
pagination | string | no | Pagination method: ‘keyset’ for keyset-based pagination on large ordered result sets, or ‘offset’ (the default). Keyset avoids deep-offset cost. |
per_page | integer | no | Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large. |
sort | string (asc, desc) | no | Sort direction for keyset pagination: asc or desc |
issue.get
Section titled “issue.get”Get a single issue from a project by issue IID. Returns: issue metadata, state, labels, assignees, author, due date, task completion, and web URL. See also:
issue.list,issue.update,issue.delete,issue.note_list.
- Meta-tool:
gitlab_issue, actionget - Individual tool:
gitlab_issue_get - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
issue_iid | integer | yes | Issue IID (project-scoped internal ID, not ‘issue_id’) |
project_id | string/integer | yes | Project ID or URL-encoded path |
issue.get_by_id
Section titled “issue.get_by_id”Get a single issue by its global ID. Returns: the issue with state, labels, assignees, author, and web URL. See also:
issue.get,issue.list.
- Meta-tool:
gitlab_issue, actionget_by_id - Individual tool:
gitlab_issue_get_by_id - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
issue_id | integer | yes | The global issue ID (not the project-scoped IID) |
issue.iteration_list_group
Section titled “issue.iteration_list_group”List a group’s iterations (sprints), optionally filtered by state, search term, or ancestor groups. Returns: iterations with sequence, title, description, state, start and due dates, web URL, and pagination metadata. See also:
group.get,issue.list_group,issue.iteration_list_project.
- Meta-tool:
gitlab_issue, actioniteration_list_group - Individual tool:
gitlab_list_group_iterations - Tier: Premium
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
group_id | string/integer | yes | Group ID or URL-encoded path |
include_ancestors | boolean | no | Include ancestor iterations |
order_by | string | no | For keyset pagination, the column to order results by |
page | integer | no | Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward. |
page_token | string | no | Keyset pagination cursor: record id at which to fetch the next page, taken from the previous keyset response. Only used when pagination=‘keyset’. |
pagination | string | no | Pagination method: ‘keyset’ for keyset-based pagination on large ordered result sets, or ‘offset’ (the default). Keyset avoids deep-offset cost. |
per_page | integer | no | Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large. |
search | string | no | Search by title |
sort | string (asc, desc) | no | Sort order for keyset pagination: ‘asc’ or ‘desc’ |
state | string (opened, upcoming, current, closed, all) | no | Filter by state: opened, upcoming, current, closed, all |
issue.iteration_list_project
Section titled “issue.iteration_list_project”List iterations (sprints) for a project, optionally including ancestor-group iterations. Returns: iterations with id, iid, sequence, group_id, title, description, state, start/due dates, timestamps, web URL, and pagination metadata. See also:
issue.iteration_list_group,issue.list,project.milestone_list.
- Meta-tool:
gitlab_issue, actioniteration_list_project - Individual tool:
gitlab_list_project_iterations - Tier: Premium
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
project_id | string/integer | yes | Project ID or URL-encoded path |
include_ancestors | boolean | no | Include ancestor iterations |
page | integer | no | Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward. |
per_page | integer | no | Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large. |
search | string | no | Search by title |
state | string (opened, upcoming, current, closed, all) | no | Filter by state: opened, upcoming, current, closed, all |
issue.link_create
Section titled “issue.link_create”Create a link between two issues (optionally across projects). Returns: the created link with its id, link_type, and source_issue/target_issue objects. See also:
issue.link_list,issue.link_delete,issue.get.
- Meta-tool:
gitlab_issue, actionlink_create - Individual tool:
gitlab_issue_link_create - Tier: Free
- Behavior: writes, not idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
issue_iid | integer | yes | Source issue IID |
project_id | string/integer | yes | Source project ID or URL-encoded path |
target_issue_iid | string | yes | Target issue IID |
target_project_id | string | yes | Target project ID or path |
link_type | string | no | Link type: relates_to (default), blocks, or is_blocked_by |
issue.link_delete
Section titled “issue.link_delete”Remove an existing issue link by its issue_link_id. Returns: a deletion confirmation. See also:
issue.link_list,issue.link_create,issue.get.
- Meta-tool:
gitlab_issue, actionlink_delete - Individual tool:
gitlab_issue_link_delete - Tier: Free
- Behavior: writes, destructive (needs confirmation), idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
issue_iid | integer | yes | Issue IID |
issue_link_id | integer | yes | Issue link ID to remove |
project_id | string/integer | yes | Project ID or URL-encoded path |
issue.link_get
Section titled “issue.link_get”Get one issue link by its issue_link_id. Returns: the link’s id, link_type, and full source_issue/target_issue objects. See also:
issue.link_list,issue.link_create,issue.get.
- Meta-tool:
gitlab_issue, actionlink_get - Individual tool:
gitlab_issue_link_get - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
issue_iid | integer | yes | Issue IID |
issue_link_id | integer | yes | Issue link ID |
project_id | string/integer | yes | Project ID or URL-encoded path |
issue.link_list
Section titled “issue.link_list”List all issues linked to a source issue. Returns: each linked issue with its link_type, issue_link_id, full author/assignee/milestone objects, labels, and dates. See also:
issue.link_get,issue.link_create,issue.get.
- Meta-tool:
gitlab_issue, actionlink_list - Individual tool:
gitlab_issue_link_list - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
issue_iid | integer | yes | Issue IID |
project_id | string/integer | yes | Project ID or URL-encoded path |
issue.list
Section titled “issue.list”List issues in one project with filtering and pagination. Returns: matching issues with state, labels, assignees, author, and pagination metadata. See also:
issue.get,issue.create,search.issues.
- Meta-tool:
gitlab_issue, actionlist - Individual tool:
gitlab_issue_list - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
project_id | string/integer | yes | Project ID or URL-encoded path |
assignee_id | integer | no | Filter by assignee user ID |
assignee_username | string | no | Filter by assignee username |
author_id | integer | no | Filter by author user ID |
author_username | string | no | Filter by author username |
confidential | boolean | no | Filter by confidential status |
created_after | string | no | Return issues created after date (ISO 8601 format, e.g. 2025-01-01T00:00:00Z) |
created_before | string | no | Return issues created before date (ISO 8601 format, e.g. 2025-12-31T23:59:59Z) |
due_date | string | no | Filter by due date (0=no due date, overdue, week, month, next_month_and_previous_two_weeks) |
iids | integer[] | no | Filter by issue internal IDs |
in | string (title, description, title,description) | no | Fields the search query applies to (title, description, or title,description) |
issue_type | string (issue, incident, test_case, task) | no | Filter by issue type (issue, incident, test_case, task) |
iteration_id (Premium) | integer | no | Filter by iteration ID |
labels | string[] | no | Label names to filter by |
milestone | string | no | Milestone title to filter by |
my_reaction_emoji | string | no | Filter by issues you reacted to with this emoji (e.g. thumbsup, or None/Any) |
not_assignee_id | integer | no | Exclude issues assigned to this user ID |
not_assignee_username | string | no | Exclude issues assigned to this username |
not_author_id | integer | no | Exclude issues authored by this user ID |
not_author_username | string | no | Exclude issues authored by this username |
not_in | string (title, description, title,description) | no | Fields the negated search query applies to (title, description) |
not_labels | string[] | no | Label names to exclude |
not_milestone | string | no | Milestone title to exclude |
not_my_reaction_emoji | string | no | Exclude issues you reacted to with this emoji |
order_by | string (created_at, due_date, id, label_priority, milestone_due, popularity, priority, relative_position, title, updated_at, weight) | no | Order by field (created_at, updated_at, priority, due_date, relative_position, label_priority, milestone_due, popularity, weight) |
page | integer | no | Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward. |
page_token | string | no | Keyset pagination cursor: record id at which to fetch the next page, taken from the previous keyset response. Only used when pagination=‘keyset’. |
pagination | string | no | Pagination method: ‘keyset’ for keyset-based pagination on large ordered result sets, or ‘offset’ (the default). Keyset avoids deep-offset cost. |
per_page | integer | no | Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large. |
scope | string (created_by_me, assigned_to_me, all) | no | Filter by scope (created_by_me, assigned_to_me, all) |
search | string | no | Search in title and description |
sort | string (asc, desc) | no | Sort direction (asc, desc) |
state | string (opened, closed, all) | no | Filter by state (opened, closed, all) |
updated_after | string | no | Return issues updated after date (ISO 8601 format, e.g. 2025-01-01T00:00:00Z) |
updated_before | string | no | Return issues updated before date (ISO 8601 format, e.g. 2025-12-31T23:59:59Z) |
with_labels_details | boolean | no | Return label objects with full details (id, name, color, description) instead of just names |
issue.list_all
Section titled “issue.list_all”List issues across projects: only the ones the caller created when scope is omitted, since GitLab defaults to scope=created_by_me, and every issue the caller can see with scope=all. Returns: the matching issues with project context and pagination metadata. See also:
issue.list,issue.list_group,search.issues.
- Meta-tool:
gitlab_issue, actionlist_all - Individual tool:
gitlab_issue_list_all - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
assignee_id | integer | no | Filter by assignee user ID |
assignee_username | string | no | Filter by assignee username |
author_id | integer | no | Filter by author user ID |
author_username | string | no | Filter by author username |
confidential | boolean | no | Filter by confidential status |
created_after | string | no | Return issues created after date (ISO 8601) |
created_before | string | no | Return issues created before date (ISO 8601) |
due_date | string | no | Filter by due date (0, overdue, week, month, next_month_and_previous_two_weeks) |
iids | integer[] | no | Filter by issue internal IDs |
in | string (title, description, title,description) | no | Fields the search query applies to (title, description, or title,description) |
issue_type | string (issue, incident, test_case, task) | no | Filter by issue type (issue, incident, test_case, task) |
iteration_id (Premium) | integer | no | Filter by iteration ID |
labels | string[] | no | Label names to filter by |
milestone | string | no | Milestone title to filter by |
my_reaction_emoji | string | no | Filter by issues you reacted to with this emoji (or None/Any) |
not_assignee_id | integer[] | no | Exclude issues assigned to these user IDs |
not_assignee_username | string | no | Exclude issues assigned to this username |
not_author_id | integer[] | no | Exclude issues authored by these user IDs |
not_author_username | string | no | Exclude issues authored by this username |
not_in | string (title, description, title,description) | no | Fields the negated search query applies to (title, description) |
not_labels | string[] | no | Label names to exclude |
not_milestone | string | no | Milestone title to exclude |
not_my_reaction_emoji | string[] | no | Exclude issues you reacted to with these emoji |
not_search | string | no | Exclude issues matching this search text |
order_by | string (created_at, due_date, id, label_priority, milestone_due, popularity, priority, relative_position, title, updated_at, weight) | no | Order by field (created_at, updated_at, priority, due_date, relative_position, label_priority, milestone_due, popularity, weight) |
page | integer | no | Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward. |
page_token | string | no | Keyset pagination cursor: record id at which to fetch the next page, taken from the previous keyset response. Only used when pagination=‘keyset’. |
pagination | string | no | Pagination method: ‘keyset’ for keyset-based pagination on large ordered result sets, or ‘offset’ (the default). Keyset avoids deep-offset cost. |
per_page | integer | no | Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large. |
scope | string (created_by_me, assigned_to_me, all) | no | Which issues to return: created_by_me (the caller’s own, and GitLab’s default when scope is omitted), assigned_to_me, or all (every issue the caller can see) |
search | string | no | Search in title and description |
sort | string (asc, desc) | no | Sort direction (asc, desc) |
state | string (opened, closed, all) | no | Filter by state (opened, closed, all) |
updated_after | string | no | Return issues updated after date (ISO 8601) |
updated_before | string | no | Return issues updated before date (ISO 8601) |
with_labels_details | boolean | no | Return label objects with full details instead of just names |
issue.list_group
Section titled “issue.list_group”List issues across a group and its subgroups and projects. Use when work is scoped to a group rather than a single project.
- Meta-tool:
gitlab_issue, actionlist_group - Individual tool:
gitlab_issue_list_group - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
group_id | string/integer | yes | Group ID or URL-encoded path |
assignee_id | integer | no | Filter by assignee user ID |
assignee_username | string | no | Filter by assignee username |
author_id | integer | no | Filter by author user ID |
author_username | string | no | Filter by author username |
confidential | boolean | no | Filter by confidential status |
created_after | string | no | Return issues created after date (ISO 8601) |
created_before | string | no | Return issues created before date (ISO 8601) |
due_date | string | no | Filter by due date (0, overdue, week, month, next_month_and_previous_two_weeks) |
iids | integer[] | no | Filter by issue internal IDs |
in | string (title, description, title,description) | no | Fields the search query applies to (title, description, or title,description) |
issue_type | string (issue, incident, test_case, task) | no | Filter by issue type (issue, incident, test_case, task) |
iteration_id (Premium) | integer | no | Filter by iteration ID |
labels | string[] | no | Label names to filter by |
milestone | string | no | Milestone title to filter by |
my_reaction_emoji | string | no | Filter by issues you reacted to with this emoji (or None/Any) |
not_assignee_id | integer | no | Exclude issues assigned to this user ID |
not_assignee_username | string | no | Exclude issues assigned to this username |
not_author_id | integer | no | Exclude issues authored by this user ID |
not_author_username | string | no | Exclude issues authored by this username |
not_in | string (title, description, title,description) | no | Fields the negated search query applies to (title, description) |
not_labels | string[] | no | Label names to exclude |
not_milestone | string | no | Milestone title to exclude |
not_my_reaction_emoji | string | no | Exclude issues you reacted to with this emoji |
not_search | string | no | Exclude issues matching this search text |
order_by | string (created_at, due_date, id, label_priority, milestone_due, popularity, priority, relative_position, title, updated_at, weight) | no | Order by field (created_at, updated_at, priority, due_date, relative_position, label_priority, milestone_due, popularity, weight) |
page | integer | no | Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward. |
page_token | string | no | Keyset pagination cursor: record id at which to fetch the next page, taken from the previous keyset response. Only used when pagination=‘keyset’. |
pagination | string | no | Pagination method: ‘keyset’ for keyset-based pagination on large ordered result sets, or ‘offset’ (the default). Keyset avoids deep-offset cost. |
per_page | integer | no | Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large. |
scope | string (created_by_me, assigned_to_me, all) | no | Scope (created_by_me, assigned_to_me, all) |
search | string | no | Search in title and description |
sort | string (asc, desc) | no | Sort direction (asc, desc) |
state | string (opened, closed, all) | no | Filter by state (opened, closed, all) |
updated_after | string | no | Return issues updated after date (ISO 8601) |
updated_before | string | no | Return issues updated before date (ISO 8601) |
with_labels_details | boolean | no | Return label objects with full details instead of just names |
issue.move
Section titled “issue.move”Move an issue to another project. Returns: the issue in its new project. See also:
issue.get,issue.update.
- Meta-tool:
gitlab_issue, actionmove - Individual tool:
gitlab_issue_move - Tier: Free
- Behavior: writes, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
issue_iid | integer | yes | Issue internal ID |
project_id | string/integer | yes | Source project ID or URL-encoded path |
to_project_id | integer | yes | Target project ID to move issue to |
issue.mrs_closing
Section titled “issue.mrs_closing”List MRs that close this issue on merge. Returns: related merge requests with state, author, and branches. See also:
issue.get,issue.mrs_related.
- Meta-tool:
gitlab_issue, actionmrs_closing - Individual tool:
gitlab_issue_mrs_closing - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
issue_iid | integer | yes | Issue internal ID |
project_id | string/integer | yes | Project ID or URL-encoded path |
order_by | string | no | Column to order results by (e.g. created_at, updated_at) |
page | integer | no | Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward. |
page_token | string | no | Keyset pagination cursor: record id at which to fetch the next page, taken from the previous keyset response. Only used when pagination=‘keyset’. |
pagination | string | no | Pagination method: ‘keyset’ for keyset-based pagination on large ordered result sets, or ‘offset’ (the default). Keyset avoids deep-offset cost. |
per_page | integer | no | Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large. |
sort | string (asc, desc) | no | Sort direction (asc, desc) |
issue.mrs_related
Section titled “issue.mrs_related”List MRs related to this issue. Returns: related merge requests with state, author, and branches. See also:
issue.get,issue.mrs_closing.
- Meta-tool:
gitlab_issue, actionmrs_related - Individual tool:
gitlab_issue_mrs_related - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
issue_iid | integer | yes | Issue internal ID |
project_id | string/integer | yes | Project ID or URL-encoded path |
order_by | string | no | Column to order results by (e.g. created_at, updated_at) |
page | integer | no | Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward. |
page_token | string | no | Keyset pagination cursor: record id at which to fetch the next page, taken from the previous keyset response. Only used when pagination=‘keyset’. |
pagination | string | no | Pagination method: ‘keyset’ for keyset-based pagination on large ordered result sets, or ‘offset’ (the default). Keyset avoids deep-offset cost. |
per_page | integer | no | Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large. |
sort | string (asc, desc) | no | Sort direction (asc, desc) |
issue.note_create
Section titled “issue.note_create”Add a comment (note) to an issue. Returns: the created note with id, author, body, timestamps, and resolvable/internal flags. See also:
issue.note_list,issue.get,issue.discussion_create.
- Meta-tool:
gitlab_issue, actionnote_create - Individual tool:
gitlab_issue_note_create - Tier: Free
- Behavior: writes, not idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
body | string | yes | Note body (Markdown supported) |
issue_iid | integer | yes | Issue internal ID |
project_id | string/integer | yes | Project ID or URL-encoded path |
created_at | string | no | Backdate the note to this RFC 3339 timestamp (e.g. 2026-01-15T10:00:00Z). Requires administrator or project/group owner permissions. Ignored otherwise. |
internal | boolean | no | Mark note as internal (visible only to project members) |
issue.note_delete
Section titled “issue.note_delete”Delete an issue note permanently. Returns: a success confirmation naming the note, issue, and project. See also:
issue.note_get,issue.note_list.
- Meta-tool:
gitlab_issue, actionnote_delete - Individual tool:
gitlab_issue_note_delete - Tier: Free
- Behavior: writes, destructive (needs confirmation), idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
issue_iid | integer | yes | Issue internal ID |
note_id | integer | yes | ID of the note to delete |
project_id | string/integer | yes | Project ID or URL-encoded path |
issue.note_get
Section titled “issue.note_get”Get a single issue note by its ID. Returns: the note with author, body, timestamps, position, and resolvable/internal flags. See also:
issue.note_list,issue.note_update,issue.note_delete.
- Meta-tool:
gitlab_issue, actionnote_get - Individual tool:
gitlab_issue_note_get - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
issue_iid | integer | yes | Issue internal ID |
note_id | integer | yes | ID of the note to retrieve |
project_id | string/integer | yes | Project ID or URL-encoded path |
issue.note_list
Section titled “issue.note_list”List all notes (comments) on an issue. Returns: notes with author, body, system/internal flags, and pagination metadata. See also:
issue.note_get,issue.note_create,issue.discussion_get.
- Meta-tool:
gitlab_issue, actionnote_list - Individual tool:
gitlab_issue_note_list - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
issue_iid | integer | yes | Issue internal ID |
project_id | string/integer | yes | Project ID or URL-encoded path |
order_by | string (created_at, updated_at) | no | Order by field (created_at, updated_at) |
page | integer | no | Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward. |
page_token | string | no | Keyset pagination cursor: record id at which to fetch the next page, taken from the previous keyset response. Only used when pagination=‘keyset’. |
pagination | string | no | Pagination method: ‘keyset’ for keyset-based pagination on large ordered result sets, or ‘offset’ (the default). Keyset avoids deep-offset cost. |
per_page | integer | no | Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large. |
sort | string (asc, desc) | no | Sort direction (asc, desc) |
issue.note_update
Section titled “issue.note_update”Update an issue note’s body. Returns: the updated note with new body and updated_at timestamp. See also:
issue.note_get,issue.note_list,issue.note_delete.
- Meta-tool:
gitlab_issue, actionnote_update - Individual tool:
gitlab_issue_note_update - Tier: Free
- Behavior: writes, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
body | string | yes | Updated note body (Markdown supported) |
issue_iid | integer | yes | Issue internal ID |
note_id | integer | yes | ID of the note to update |
project_id | string/integer | yes | Project ID or URL-encoded path |
issue.participants
Section titled “issue.participants”List an issue’s participants. Returns: participating users with ID, username, name, state, locked flag, public email, avatar and profile URL, with pagination metadata. See also:
issue.get,issue.note_list.
- Meta-tool:
gitlab_issue, actionparticipants - Individual tool:
gitlab_issue_participants - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
issue_iid | integer | yes | Issue IID (project-scoped internal ID, not ‘issue_id’) |
project_id | string/integer | yes | Project ID or URL-encoded path |
page | integer | no | Page number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward. |
per_page | integer | no | Items per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large. |
issue.reorder
Section titled “issue.reorder”Reorder an issue within its list. Returns: the updated issue. See also:
issue.get,issue.list.
- Meta-tool:
gitlab_issue, actionreorder - Individual tool:
gitlab_issue_reorder - Tier: Free
- Behavior: writes, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
issue_iid | integer | yes | Issue internal ID |
project_id | string/integer | yes | Project ID or URL-encoded path |
move_after_id | integer | no | ID of issue to position after |
move_before_id | integer | no | ID of issue to position before |
issue.spent_time_add
Section titled “issue.spent_time_add”Add spent time to an issue. Returns: the updated time tracking stats. See also:
issue.spent_time_reset,issue.time_stats_get.
- Meta-tool:
gitlab_issue, actionspent_time_add - Individual tool:
gitlab_issue_spent_time_add - Tier: Free
- Behavior: writes, not idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
duration | string | yes | Human-readable duration (e.g. 1h, 30m, 1w2d) |
issue_iid | integer | yes | Issue internal ID |
project_id | string/integer | yes | Project ID or URL-encoded path |
summary | string | no | Optional summary of work done |
issue.spent_time_reset
Section titled “issue.spent_time_reset”Reset an issue’s spent time. Returns: the updated time tracking stats. See also:
issue.spent_time_add,issue.time_stats_get.
- Meta-tool:
gitlab_issue, actionspent_time_reset - Individual tool:
gitlab_issue_spent_time_reset - Tier: Free
- Behavior: writes, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
issue_iid | integer | yes | Issue IID (project-scoped internal ID, not ‘issue_id’) |
project_id | string/integer | yes | Project ID or URL-encoded path |
issue.statistics_get
Section titled “issue.statistics_get”Get global issue count statistics: of the issues the caller created when scope is omitted, since GitLab defaults to scope=created_by_me, and of every issue the caller can see with scope=all. Returns: a statistics object with nested counts (all, opened, closed). See also:
issue.statistics_get_group,issue.statistics_get_project,issue.list.
- Meta-tool:
gitlab_issue, actionstatistics_get - Individual tool:
gitlab_get_issue_statistics - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
assignee_id | integer | no | Filter by assignee user ID |
assignee_username | string[] | no | Filter by assignee usernames |
author_id | integer | no | Filter by author user ID |
author_username | string | no | Filter by author username |
confidential | boolean | no | Filter by confidential status |
created_after | string | no | Return issues created after date (ISO 8601, e.g. 2025-01-01T00:00:00Z) |
created_before | string | no | Return issues created before date (ISO 8601, e.g. 2025-12-31T23:59:59Z) |
iids | integer[] | no | Filter by issue internal IDs |
in | string (title, description, title,description) | no | Fields the search query applies to (title, description, or title,description) |
labels | string[] | no | Label names to filter by |
milestone | string | no | Milestone title to filter by |
my_reaction_emoji | string | no | Filter by issues you reacted to with this emoji (or None/Any) |
scope | string (created_by_me, assigned_to_me, all) | no | Which issues to count: created_by_me (the caller’s own, and GitLab’s default when scope is omitted), assigned_to_me, or all (every issue the caller can see) |
search | string | no | Search string for title and description |
updated_after | string | no | Return issues updated after date (ISO 8601, e.g. 2025-01-01T00:00:00Z) |
updated_before | string | no | Return issues updated before date (ISO 8601, e.g. 2025-12-31T23:59:59Z) |
issue.statistics_get_group
Section titled “issue.statistics_get_group”Get issue count statistics for a group and its descendant projects. Returns: a statistics object with nested counts (all, opened, closed). See also:
issue.statistics_get,issue.statistics_get_project,group.get.
- Meta-tool:
gitlab_issue, actionstatistics_get_group - Individual tool:
gitlab_get_group_issue_statistics - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
group_id | string | yes | Group ID or URL-encoded path |
assignee_id | integer | no | Filter by assignee user ID |
assignee_username | string[] | no | Filter by assignee usernames |
author_id | integer | no | Filter by author user ID |
author_username | string | no | Filter by author username |
confidential | boolean | no | Filter by confidential status |
created_after | string | no | Return issues created after date (ISO 8601) |
created_before | string | no | Return issues created before date (ISO 8601) |
iids | integer[] | no | Filter by issue internal IDs |
labels | string[] | no | Label names to filter by |
milestone | string | no | Milestone title to filter by |
my_reaction_emoji | string | no | Filter by issues you reacted to with this emoji (or None/Any) |
scope | string (created_by_me, assigned_to_me, all) | no | Scope: created_by_me, assigned_to_me, all |
search | string | no | Search string for title and description |
updated_after | string | no | Return issues updated after date (ISO 8601) |
updated_before | string | no | Return issues updated before date (ISO 8601) |
issue.statistics_get_project
Section titled “issue.statistics_get_project”Get issue count statistics for a single project. Returns: a statistics object with nested counts (all, opened, closed). See also:
issue.statistics_get,issue.statistics_get_group,project.get.
- Meta-tool:
gitlab_issue, actionstatistics_get_project - Individual tool:
gitlab_get_project_issue_statistics - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
project_id | string | yes | Project ID or URL-encoded path |
assignee_id | integer | no | Filter by assignee user ID |
assignee_username | string[] | no | Filter by assignee usernames |
author_id | integer | no | Filter by author user ID |
author_username | string | no | Filter by author username |
confidential | boolean | no | Filter by confidential status |
created_after | string | no | Return issues created after date (ISO 8601) |
created_before | string | no | Return issues created before date (ISO 8601) |
iids | integer[] | no | Filter by issue internal IDs |
labels | string[] | no | Label names to filter by |
milestone | string | no | Milestone title to filter by |
my_reaction_emoji | string | no | Filter by issues you reacted to with this emoji (or None/Any) |
scope | string (created_by_me, assigned_to_me, all) | no | Scope: created_by_me, assigned_to_me, all |
search | string | no | Search string for title and description |
updated_after | string | no | Return issues updated after date (ISO 8601) |
updated_before | string | no | Return issues updated before date (ISO 8601) |
issue.subscribe
Section titled “issue.subscribe”Subscribe to an issue’s notifications. Returns: the issue with the updated subscription state. See also:
issue.get,issue.unsubscribe.
- Meta-tool:
gitlab_issue, actionsubscribe - Individual tool:
gitlab_issue_subscribe - Tier: Free
- Behavior: writes, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
issue_iid | integer | yes | Issue internal ID |
project_id | string/integer | yes | Project ID or URL-encoded path |
issue.time_estimate_reset
Section titled “issue.time_estimate_reset”Clear an issue’s time estimate. Returns: the updated time tracking stats. See also:
issue.time_estimate_set,issue.time_stats_get.
- Meta-tool:
gitlab_issue, actiontime_estimate_reset - Individual tool:
gitlab_issue_time_estimate_reset - Tier: Free
- Behavior: writes, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
issue_iid | integer | yes | Issue IID (project-scoped internal ID, not ‘issue_id’) |
project_id | string/integer | yes | Project ID or URL-encoded path |
issue.time_estimate_set
Section titled “issue.time_estimate_set”Set an issue’s time estimate. Returns: the updated time tracking stats. See also:
issue.time_estimate_reset,issue.time_stats_get.
- Meta-tool:
gitlab_issue, actiontime_estimate_set - Individual tool:
gitlab_issue_time_estimate_set - Tier: Free
- Behavior: writes, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
duration | string | yes | Human-readable duration (e.g. 3h30m, 1w2d) |
issue_iid | integer | yes | Issue internal ID |
project_id | string/integer | yes | Project ID or URL-encoded path |
issue.time_stats_get
Section titled “issue.time_stats_get”Read an issue’s time tracking totals. Returns: estimate and spent time in seconds and human-readable form. See also:
issue.time_estimate_set,issue.spent_time_add.
- Meta-tool:
gitlab_issue, actiontime_stats_get - Individual tool:
gitlab_issue_time_stats_get - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
issue_iid | integer | yes | Issue IID (project-scoped internal ID, not ‘issue_id’) |
project_id | string/integer | yes | Project ID or URL-encoded path |
issue.unsubscribe
Section titled “issue.unsubscribe”Unsubscribe from an issue’s notifications. Returns: the issue with the updated subscription state. See also:
issue.get,issue.subscribe.
- Meta-tool:
gitlab_issue, actionunsubscribe - Individual tool:
gitlab_issue_unsubscribe - Tier: Free
- Behavior: writes, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
issue_iid | integer | yes | Issue internal ID |
project_id | string/integer | yes | Project ID or URL-encoded path |
issue.update
Section titled “issue.update”Update issue fields. To close or reopen an issue with issue.update, set params.state_event to close or reopen. Dynamic execute also accepts issue.close and issue.reopen aliases that fill state_event automatically.
- Meta-tool:
gitlab_issue, actionupdate - Individual tool:
gitlab_issue_update - Tier: Free
- Behavior: writes, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
issue_iid | integer | yes | Issue IID (project-scoped internal ID, not ‘issue_id’) |
project_id | string/integer | yes | Project ID or URL-encoded path |
add_labels | string[] | no | Label names to add without removing existing |
assignee_id | integer | no | Single user ID to assign (use assignee_ids for multiple) |
assignee_ids | integer[] | no | New assignee user IDs |
confidential | boolean | no | Update confidential flag |
description | string | no | New description (Markdown supported) |
discussion_locked | boolean | no | Lock discussions on this issue |
due_date | string | no | New due date in YYYY-MM-DD format |
epic_id (Premium) | integer | no | Epic ID to associate |
issue_type | string (issue, incident, test_case, task) | no | Issue type (issue, incident, test_case, task) |
labels | string[] | no | Label names to replace all existing |
milestone_id | integer | no | New milestone ID (0 to unset. Omit to leave unchanged) |
remove_labels | string[] | no | Label names to remove |
state_event | string (close, reopen) | no | State transition. Set to close or reopen when changing issue state. |
title | string | no | New title |
updated_at | string | no | Update timestamp override (ISO 8601/RFC 3339, requires admin permissions) |
weight (Premium) | integer | no | Issue weight, 0 or higher |
issue.work_item_create
Section titled “issue.work_item_create”Create a new work item under a namespace. Returns: the created work item with id, iid, type, state, title, description, assignees, labels, linked items, parent and child work items, milestone, iteration, weight, health status, color, start and due dates, and web URL. Experimental. See also:
issue.work_item_get,issue.work_item_list,issue.work_item_type_list.
- Meta-tool:
gitlab_issue, actionwork_item_create - Individual tool:
gitlab_create_work_item - Tier: Free
- Behavior: writes, not idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
full_path | string | yes | Full path of the project or group |
title | string | yes | Title of the work item |
work_item_type_id | string | yes | Global ID of work item type (e.g. gid://gitlab/WorkItems::Type/1 for Issue) |
assignee_ids | integer[] | no | Global IDs of assignees |
color (Premium) | string | no | Color hex code (e.g. #fefefe) |
confidential | boolean | no | Whether the work item is confidential |
create_source | string | no | Name of whatever triggered the creation. Recorded for tracking and changes nothing about the work item |
created_at | string | no | Creation timestamp to record instead of now. ISO 8601 date-time such as 2025-01-01T00:00:00Z. GitLab accepts it from instance administrators and project owners only |
crm_contact_ids | integer[] | no | CRM contact IDs to attach to the new work item |
description | string | no | Description of the work item |
due_date | string | no | Due date (YYYY-MM-DD) |
health_status (Ultimate) | string (onTrack, needsAttention, atRisk) | no | Health status (onTrack/needsAttention/atRisk) |
iteration_id (Premium) | integer | no | Global ID of the iteration |
label_ids | integer[] | no | Global IDs of labels |
linked_items | object | no | Linked work items to add on creation |
milestone_id | integer | no | Global ID of the milestone |
parent_id | integer | no | Global ID of the parent work item. Creates the item already under its parent, which otherwise takes a create followed by an update |
start_date | string | no | Start date (YYYY-MM-DD) |
status (Premium) | string (TODO, IN_PROGRESS, DONE, WONT_DO, DUPLICATE) | no | Work item status: TODO, IN_PROGRESS, DONE, WONT_DO, or DUPLICATE |
weight (Premium) | integer | no | Weight of the work item |
issue.work_item_delete
Section titled “issue.work_item_delete”Delete a work item permanently by namespace path and IID. Returns: a success confirmation naming the work item and namespace. Experimental. See also:
issue.work_item_get,issue.work_item_update.
- Meta-tool:
gitlab_issue, actionwork_item_delete - Individual tool:
gitlab_delete_work_item - Tier: Free
- Behavior: writes, destructive (needs confirmation), idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
full_path | string | yes | Full path of the project or group (e.g. my-group/my-project) |
work_item_iid | integer | yes | Work item IID |
issue.work_item_get
Section titled “issue.work_item_get”Get a single work item by namespace path and IID. Returns: id, iid, type, state, status, title, description, author, assignees, labels, linked items, parent and child work items, milestone, iteration, weight, health status, color, start and due dates, confidentiality, timestamps, and web URL. Experimental. See also:
issue.work_item_list,issue.work_item_update,issue.work_item_delete.
- Meta-tool:
gitlab_issue, actionwork_item_get - Individual tool:
gitlab_get_work_item - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
full_path | string | yes | Full path of the project or group (e.g. my-group/my-project) |
work_item_iid | integer | yes | Work item IID |
issue.work_item_list
Section titled “issue.work_item_list”List work items in a project or group namespace with filtering and cursor pagination. Returns: matching work items with type, state, title, author, assignees, labels, linked items, parent and child work items, milestone, start and due dates, timestamps, and the cursors for the next and previous pages. On Premium and Ultimate instances the status, weight, health status, iteration and color of each item come back too. returned_fields narrows that set to the fields named, which shrinks a large page without changing which work items match. Pages in both directions: first with after walks forward, last with before walks back. Experimental. See also:
issue.work_item_get,issue.work_item_create,issue.work_item_type_list.
- Meta-tool:
gitlab_issue, actionwork_item_list - Individual tool:
gitlab_list_work_items - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
full_path | string | yes | Full path of the project or group |
after | string | no | Cursor for forward pagination (from previous response end_cursor) |
assignee_usernames | string[] | no | Filter by assignee usernames |
assignee_wildcard_id | string (ANY, ME, NONE) | no | Assignee wildcard filter: ANY, ME or NONE |
author_username | string | no | Filter by author username |
before | string | no | Cursor for backward pagination (from previous response start_cursor). The page size comes from last, or from first when last is omitted |
closed_after | string | no | Match work items closed after this timestamp. ISO 8601 date-time such as 2025-01-01T00:00:00Z. A bare date is read as midnight UTC |
closed_before | string | no | Match work items closed before this timestamp. ISO 8601 date-time such as 2025-01-01T00:00:00Z. A bare date is read as midnight UTC |
confidential | boolean | no | Filter by confidentiality |
created_after | string | no | Match work items created after this timestamp. ISO 8601 date-time such as 2025-01-01T00:00:00Z. A bare date is read as midnight UTC |
created_before | string | no | Match work items created before this timestamp. ISO 8601 date-time such as 2025-01-01T00:00:00Z. A bare date is read as midnight UTC |
crm_contact_id | string | no | Filter by CRM contact numeric ID as a string, e.g. 1. Not a global ID |
crm_organization_id | string | no | Filter by CRM organization numeric ID as a string, e.g. 1. Not a global ID |
due_after | string | no | Match work items due after this timestamp. ISO 8601 date-time such as 2025-01-01T00:00:00Z. A bare date is read as midnight UTC |
due_before | string | no | Match work items due before this timestamp. ISO 8601 date-time such as 2025-01-01T00:00:00Z. A bare date is read as midnight UTC |
first | integer | no | Number of items to return (default 20, max 100) |
health_status_filter (Ultimate) | string (ANY, NONE, atRisk, needsAttention, onTrack) | no | Filter by health status: onTrack, needsAttention, atRisk, ANY or NONE. Case sensitive |
ids | string[] | no | Filter by work item global IDs, each the full gid://gitlab/WorkItem/<id> form |
iids | string[] | no | Filter by work item internal IDs (IIDs) as strings, e.g. 12 |
in | string[] (DESCRIPTION, TITLE) | no | Fields the search term is matched against: TITLE or DESCRIPTION. Only meaningful together with search |
include_ancestors | boolean | no | Include ancestor work items |
include_descendants | boolean | no | Include descendant work items |
iteration_cadence_id (Premium) | string[] | no | Filter by iteration cadence global IDs, each the full gid://gitlab/Iterations::Cadence/<id> form |
iteration_id (Premium) | string[] | no | Filter by iteration global IDs, each the full gid://gitlab/Iteration/<id> form. Unlike the iteration_id create and update take, this one is a list of global IDs rather than a single numeric ID |
iteration_wildcard_id (Premium) | string (ANY, CURRENT, NONE) | no | Iteration wildcard filter: ANY, CURRENT or NONE |
label_name | string[] | no | Filter by label names |
last | integer | no | Number of items to return from the end of the range (backward pagination). Cannot be combined with first |
milestone_title | string[] | no | Filter by milestone titles. Titles, not the milestone_id that create and update take |
milestone_wildcard_id | string (ANY, NONE, STARTED, UPCOMING) | no | Milestone wildcard filter: ANY, NONE, STARTED or UPCOMING |
my_reaction_emoji | string | no | Filter by the emoji the authenticated user reacted with |
parent_ids | string[] | no | Filter by parent work item global IDs, each the full gid://gitlab/WorkItem/<id> form. Pairs with include_descendants |
release_tag | string[] | no | Filter by release tags |
release_tag_wildcard_id | string (ANY, NONE) | no | Release tag wildcard filter: ANY or NONE |
returned_fields | string[] (assignees, author, closedAt, color, confidential, createdAt, description, healthStatus, hierarchy, id, iid, iteration, labels, linkedItems, milestone, startAndDueDate, state, status, title, type, updatedAt, webUrl, weight) | no | Fields of each work item the query asks for. Selects what comes back, not which work items match: an unselected field is absent from every item rather than empty. Omit for the default set, which is every Community Edition field plus the five Enterprise ones on a Premium or Ultimate instance. Naming color, healthStatus, iteration, status or weight against a Community Edition instance fails the whole query, since its schema does not define those widgets |
search | string | no | Search in title and description |
sort | string (BLOCKING_ISSUES_ASC, BLOCKING_ISSUES_DESC, CLOSED_AT_ASC, CLOSED_AT_DESC, CREATED_ASC, CREATED_DESC, DUE_DATE_ASC, DUE_DATE_DESC, ESCALATION_STATUS_ASC, ESCALATION_STATUS_DESC, HEALTH_STATUS_ASC, HEALTH_STATUS_DESC, LABEL_PRIORITY_ASC, LABEL_PRIORITY_DESC, MILESTONE_DUE_ASC, MILESTONE_DUE_DESC, POPULARITY_ASC, POPULARITY_DESC, PRIORITY_ASC, PRIORITY_DESC, RELATIVE_POSITION_ASC, SEVERITY_ASC, SEVERITY_DESC, START_DATE_ASC, START_DATE_DESC, STATUS_ASC, STATUS_DESC, TITLE_ASC, TITLE_DESC, UPDATED_ASC, UPDATED_DESC, WEIGHT_ASC, WEIGHT_DESC) | no | Sort order, a WorkItemSort enum value such as CREATED_DESC or TITLE_ASC |
state | string (opened, closed, all) | no | Filter by state (opened/closed/all) |
subscribed | string (EXPLICITLY_SUBSCRIBED, EXPLICITLY_UNSUBSCRIBED) | no | Filter by the authenticated user’s subscription: EXPLICITLY_SUBSCRIBED or EXPLICITLY_UNSUBSCRIBED |
types | string[] (EPIC, INCIDENT, ISSUE, KEY_RESULT, OBJECTIVE, REQUIREMENT, TASK, TEST_CASE, TICKET) | no | Filter by work item types, IssueType enum values such as ISSUE or TASK |
updated_after | string | no | Match work items updated after this timestamp. ISO 8601 date-time such as 2025-01-01T00:00:00Z. A bare date is read as midnight UTC |
updated_before | string | no | Match work items updated before this timestamp. ISO 8601 date-time such as 2025-01-01T00:00:00Z. A bare date is read as midnight UTC |
weight (Premium) | string | no | Filter by weight. GitLab types this filter as a string, so send 3 quoted rather than as a number |
weight_wildcard_id (Premium) | string (ANY, NONE) | no | Weight wildcard filter: ANY or NONE |
issue.work_item_saved_view_create
Section titled “issue.work_item_saved_view_create”Create a work item saved view under a namespace. Returns: the created view with id, global id, name, private flag, subscription state, sort order, filters, and display settings. Experimental: the Work Item Saved Views API is a work in progress and may introduce breaking changes even between minor versions. See also:
issue.work_item_saved_view_list,issue.work_item_saved_view_update,issue.work_item_saved_view_get.
- Meta-tool:
gitlab_issue, actionwork_item_saved_view_create - Individual tool:
gitlab_work_item_saved_view_create - Tier: Free
- Behavior: writes, not idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
name | string | yes | Name of the saved view |
namespace_path | string | yes | Full path of the group or project to create the saved view under |
sort | string (BLOCKING_ISSUES_ASC, BLOCKING_ISSUES_DESC, CLOSED_AT_ASC, CLOSED_AT_DESC, CREATED_ASC, CREATED_DESC, DUE_DATE_ASC, DUE_DATE_DESC, ESCALATION_STATUS_ASC, ESCALATION_STATUS_DESC, HEALTH_STATUS_ASC, HEALTH_STATUS_DESC, LABEL_PRIORITY_ASC, LABEL_PRIORITY_DESC, MILESTONE_DUE_ASC, MILESTONE_DUE_DESC, POPULARITY_ASC, POPULARITY_DESC, PRIORITY_ASC, PRIORITY_DESC, RELATIVE_POSITION_ASC, SEVERITY_ASC, SEVERITY_DESC, START_DATE_ASC, START_DATE_DESC, STATUS_ASC, STATUS_DESC, TITLE_ASC, TITLE_DESC, UPDATED_ASC, UPDATED_DESC, WEIGHT_ASC, WEIGHT_DESC) | yes | Sort order the view applies, a WorkItemSort enum value such as CREATED_DESC or TITLE_ASC |
description | string | no | Description of the saved view |
display_settings | object | no | Display settings for the consuming UI. GitLab validates this object and rejects unknown keys. The accepted ones are camelCase: viewMode (list, board, or table), hiddenMetadataKeys, collapsedGroups, visibleGroups, groupOrder. Omit to store an empty object |
filters | object | no | Filters the view applies. Omit for a view with no filters |
is_private | boolean | no | Keep the view private to the creating user. Defaults to true when omitted |
issue.work_item_saved_view_delete
Section titled “issue.work_item_saved_view_delete”Delete a work item saved view permanently by numeric ID. Returns: a success confirmation naming the view. Experimental: the Work Item Saved Views API is a work in progress and may introduce breaking changes even between minor versions. See also:
issue.work_item_saved_view_get,issue.work_item_saved_view_list.
- Meta-tool:
gitlab_issue, actionwork_item_saved_view_delete - Individual tool:
gitlab_work_item_saved_view_delete - Tier: Free
- Behavior: writes, destructive (needs confirmation), idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
saved_view_id | integer | yes | Numeric ID of the saved view to delete |
issue.work_item_saved_view_get
Section titled “issue.work_item_saved_view_get”Get a single work item saved view by namespace path and numeric ID. Returns: id, global id, name, description, private flag, subscription state, sort order, filters, and display settings. Experimental: the Work Item Saved Views API is a work in progress and may introduce breaking changes even between minor versions. See also:
issue.work_item_saved_view_list,issue.work_item_saved_view_update,issue.work_item_saved_view_delete.
- Meta-tool:
gitlab_issue, actionwork_item_saved_view_get - Individual tool:
gitlab_work_item_saved_view_get - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
namespace_path | string | yes | Full path of the group or project the saved view belongs to (e.g. my-group or my-group/my-project) |
saved_view_id | integer | yes | Numeric ID of the saved view |
issue.work_item_saved_view_list
Section titled “issue.work_item_saved_view_list”List work item saved views for a group or project namespace with cursor pagination. Returns: id, name, description, private flag, subscription state, and sort order per view, plus pagination cursors. Filters are omitted here, so read one view with issue.work_item_saved_view_get. Experimental: the Work Item Saved Views API is a work in progress and may introduce breaking changes even between minor versions. See also:
issue.work_item_saved_view_get,issue.work_item_saved_view_create,issue.work_item_list.
- Meta-tool:
gitlab_issue, actionwork_item_saved_view_list - Individual tool:
gitlab_work_item_saved_view_list - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
namespace_path | string | yes | Full path of the group or project whose saved views to list |
after | string | no | Cursor for forward pagination (from previous response end_cursor) |
before | string | no | Cursor for backward pagination (from previous response start_cursor). The page size comes from last, or from first when last is omitted |
first | integer | no | Number of items to return (default 20, max 100) |
last | integer | no | Number of items to return from the end of the range (backward pagination). Cannot be combined with first |
issue.work_item_saved_view_subscribe
Section titled “issue.work_item_saved_view_subscribe”Subscribe the authenticated user to a work item saved view. Returns: the view with the updated subscription state. Experimental: the Work Item Saved Views API is a work in progress and may introduce breaking changes even between minor versions. See also:
issue.work_item_saved_view_unsubscribe,issue.work_item_saved_view_get,issue.work_item_saved_view_list.
- Meta-tool:
gitlab_issue, actionwork_item_saved_view_subscribe - Individual tool:
gitlab_work_item_saved_view_subscribe - Tier: Free
- Behavior: writes, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
saved_view_id | integer | yes | Numeric ID of the saved view to subscribe to |
issue.work_item_saved_view_unsubscribe
Section titled “issue.work_item_saved_view_unsubscribe”Unsubscribe the authenticated user from a work item saved view. Returns: the view with the updated subscription state. Experimental: the Work Item Saved Views API is a work in progress and may introduce breaking changes even between minor versions. See also:
issue.work_item_saved_view_subscribe,issue.work_item_saved_view_get,issue.work_item_saved_view_list.
- Meta-tool:
gitlab_issue, actionwork_item_saved_view_unsubscribe - Individual tool:
gitlab_work_item_saved_view_unsubscribe - Tier: Free
- Behavior: writes, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
saved_view_id | integer | yes | Numeric ID of the saved view to unsubscribe from |
issue.work_item_saved_view_update
Section titled “issue.work_item_saved_view_update”Update a work item saved view by numeric ID. Returns: the updated view with id, global id, name, private flag, subscription state, sort order, filters, and display settings. Experimental: the Work Item Saved Views API is a work in progress and may introduce breaking changes even between minor versions. See also:
issue.work_item_saved_view_get,issue.work_item_saved_view_list,issue.work_item_saved_view_delete.
- Meta-tool:
gitlab_issue, actionwork_item_saved_view_update - Individual tool:
gitlab_work_item_saved_view_update - Tier: Free
- Behavior: writes, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
saved_view_id | integer | yes | Numeric ID of the saved view to update |
description | string | no | New description for the saved view |
display_settings | object | no | Replacement display settings, with the camelCase keys GitLab accepts: viewMode (list, board, or table), hiddenMetadataKeys, collapsedGroups, visibleGroups, groupOrder. Omit to leave the existing settings unchanged |
filters | object | no | Replacement filters. Omit to leave the existing filters unchanged |
is_private | boolean | no | Whether the view is private to the user who created it |
name | string | no | New name for the saved view |
sort | string (BLOCKING_ISSUES_ASC, BLOCKING_ISSUES_DESC, CLOSED_AT_ASC, CLOSED_AT_DESC, CREATED_ASC, CREATED_DESC, DUE_DATE_ASC, DUE_DATE_DESC, ESCALATION_STATUS_ASC, ESCALATION_STATUS_DESC, HEALTH_STATUS_ASC, HEALTH_STATUS_DESC, LABEL_PRIORITY_ASC, LABEL_PRIORITY_DESC, MILESTONE_DUE_ASC, MILESTONE_DUE_DESC, POPULARITY_ASC, POPULARITY_DESC, PRIORITY_ASC, PRIORITY_DESC, RELATIVE_POSITION_ASC, SEVERITY_ASC, SEVERITY_DESC, START_DATE_ASC, START_DATE_DESC, STATUS_ASC, STATUS_DESC, TITLE_ASC, TITLE_DESC, UPDATED_ASC, UPDATED_DESC, WEIGHT_ASC, WEIGHT_DESC) | no | New sort order, a WorkItemSort enum value such as CREATED_DESC or TITLE_ASC |
issue.work_item_type_list
Section titled “issue.work_item_type_list”List work item types for a namespace. Returns: id, name, and enabled flag for each type. Supports name filter, only_available flag, and cursor pagination. Experimental. See also:
issue.work_item_list,issue.work_item_create.
- Meta-tool:
gitlab_issue, actionwork_item_type_list - Individual tool:
gitlab_list_work_item_types - Tier: Free
- Behavior: read-only, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
full_path | string | yes | Project or group full path (namespace path) |
after | string | no | Cursor for forward pagination (from previous response end_cursor) |
before | string | no | Cursor for backward pagination (from previous response start_cursor). The page size comes from last, or from first when last is omitted |
first | integer | no | Number of items to return (default 20, max 100) |
last | integer | no | Number of items to return from the end of the range (backward pagination). Cannot be combined with first |
name | string (EPIC, INCIDENT, ISSUE, KEY_RESULT, OBJECTIVE, REQUIREMENT, TASK, TEST_CASE, TICKET) | no | Filter by work item type name, an IssueType enum value such as ISSUE or TASK |
only_available | boolean | no | Return only available work item types |
issue.work_item_update
Section titled “issue.work_item_update”Update an existing work item by namespace path and IID. Returns: the updated work item with id, iid, type, state, status, title, description, assignees, labels, linked items, parent and child work items, milestone, iteration, weight, health status, color, start and due dates, and web URL. Experimental. See also:
issue.work_item_get,issue.work_item_delete,issue.work_item_list.
- Meta-tool:
gitlab_issue, actionwork_item_update - Individual tool:
gitlab_update_work_item - Tier: Free
- Behavior: writes, idempotent
| Parameter | Type | Mandatory | Description |
|---|---|---|---|
full_path | string | yes | Full path of the project or group (e.g. my-group/my-project) |
work_item_iid | integer | yes | Work item IID |
add_label_ids | integer[] | no | Global IDs of labels to add |
assignee_ids | integer[] | no | Global IDs of assignees. Replaces the current assignees. Pass an empty array [] to remove every assignee. Omit the field to leave assignees untouched |
color (Premium) | string | no | Color hex code (e.g. #fefefe) |
confirm | boolean | no | Confirms removing existing assignees or CRM contacts when assignee_ids or crm_contact_ids is an empty array. Only required when entries would actually be deleted |
crm_contact_ids | integer[] | no | CRM contact IDs. Replaces the current contacts. Pass an empty array [] to remove every contact. Omit the field to leave contacts untouched |
description | string | no | New description |
due_date | string | no | Due date (YYYY-MM-DD) |
health_status (Ultimate) | string (onTrack, needsAttention, atRisk) | no | Health status (onTrack/needsAttention/atRisk) |
iteration_id (Premium) | integer | no | Global ID of the iteration |
milestone_id | integer | no | Global ID of the milestone |
parent_id | integer | no | Global ID of the parent work item |
remove_label_ids | integer[] | no | Global IDs of labels to remove |
start_date | string | no | Start date (YYYY-MM-DD) |
state_event | string (CLOSE, REOPEN) | no | State event: CLOSE or REOPEN |
status (Premium) | string (TODO, IN_PROGRESS, DONE, WONT_DO, DUPLICATE) | no | Work item status: TODO, IN_PROGRESS, DONE, WONT_DO, or DUPLICATE |
title | string | no | New title |
weight (Premium) | integer | no | Weight of the work item |