Skip to content

External status checks

An external status check sends a project’s merge requests to an outside service, which answers with a passed or failed status that can gate the merge. These actions manage a project’s checks (list, create, update, delete), list the status of each check on one merge request, set that status, and retry a check that failed.

  • “Which external status checks does project 42 have?”
  • “Show the status checks of merge request !15”
  • “Retry the failed compliance check on merge request !15”
  • Dynamic, the default surface: call gitlab_execute_action with action set to the action’s ID, such as external_status_check.create_project, and its parameters in params. gitlab_find_action finds an ID from a description of the task.
  • Meta (GITLAB_MCP_TOOL_SURFACE=meta): call gitlab_external_status_check with action set to the action’s name, such as create_project, and its parameters in params.
  • Individual (GITLAB_MCP_TOOL_SURFACE=individual): call the action’s own tool, such as gitlab_create_project_external_status_check, with its parameters as the arguments.

How many of these actions an instance serves at each tier, out of a total of 8:

  • Free: 0
  • Premium: 0
  • Ultimate: 8

Read-only actions: 3 of 8, the ones a deployment in read-only mode keeps. A token with read_api and not api is served 3 of the 8.

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. The token lines say what GitLab 19.4.1 requires of a token for the requests each action sends; on an instance with Admin Mode turned on, an action only an administrator may run also needs admin_mode. 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).

ActionIndividual
external_status_check.create_projectgitlab_create_project_external_status_check
external_status_check.delete_projectgitlab_delete_project_external_status_check
external_status_check.list_projectgitlab_list_project_external_status_checks
external_status_check.list_project_checksgitlab_list_project_status_checks
external_status_check.list_project_mr_checksgitlab_list_project_mr_external_status_checks
external_status_check.retry_projectgitlab_retry_failed_external_status_check_for_project_mr
external_status_check.set_project_mr_statusgitlab_set_project_mr_external_status_check_status
external_status_check.update_projectgitlab_update_project_external_status_check

Create an external status check service for a project. Returns: the created check with id, name, external_url, hmac, and protected branches. See also: external_status_check.list_project, external_status_check.update_project, external_status_check.delete_project.

  • Meta-tool: gitlab_external_status_check, action create_project
  • Individual tool: gitlab_create_project_external_status_check
  • Tier: Ultimate
  • Classic or OAuth token: api
  • Fine-grained token: External Status Check Service: Create at project (permissions page)
  • Behavior: writes, not idempotent
ParameterTypeMandatoryDescription
external_urlstringyesExternal URL for the status check
namestringyesName of the external status check
project_idstring/integeryesProject ID or URL-encoded path
protected_branch_idsinteger[]noIDs of protected branches to scope the check to
shared_secretstringnoShared secret for HMAC verification

Delete a project external status check service permanently. Returns: a success confirmation. See also: external_status_check.list_project, external_status_check.create_project, external_status_check.update_project.

  • Meta-tool: gitlab_external_status_check, action delete_project
  • Individual tool: gitlab_delete_project_external_status_check
  • Tier: Ultimate
  • Classic or OAuth token: api
  • Fine-grained token: External Status Check Service: Delete at project (permissions page)
  • Behavior: writes, destructive (needs confirmation), idempotent
ParameterTypeMandatoryDescription
check_idintegeryesExternal status check ID to delete
project_idstring/integeryesProject ID or URL-encoded path

List a project’s external status check services. Returns: each check with id, name, external_url, hmac, protected branches, and pagination metadata. See also: external_status_check.create_project, external_status_check.update_project, external_status_check.delete_project, external_status_check.list_project_mr_checks.

  • Meta-tool: gitlab_external_status_check, action list_project
  • Individual tool: gitlab_list_project_external_status_checks
  • Tier: Ultimate
  • Classic or OAuth token: read_api (or api)
  • Fine-grained token: External Status Check Service: Read at project (permissions page)
  • Behavior: read-only, idempotent
ParameterTypeMandatoryDescription
project_idstring/integeryesProject ID or URL-encoded path
order_bystringnoColumn to order by for keyset pagination (e.g. id)
pageintegernoPage number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
page_tokenstringnoNext page of a keyset listing: the next_page_token of the previous response of this action, passed back unchanged. It carries the position and every filter of the listing as GitLab read them, and those are what the next page is asked with, whatever filters are sent beside it. Leave it empty for the first page.
paginationstringnoPagination method: ‘keyset’ for keyset-based pagination on large ordered result sets, or ‘offset’ (the default). Keyset avoids deep-offset cost, and a keyset page names the next one in next_page_token rather than next_page.
per_pageintegernoItems per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
sortstring (asc, desc)noSort direction: asc or desc

List a project’s external status check services (deprecated endpoint). Returns: each check with id, name, external_url, hmac, protected branches, and pagination metadata. See also: external_status_check.list_project, external_status_check.create_project, external_status_check.list_project_mr_checks.

  • Meta-tool: gitlab_external_status_check, action list_project_checks
  • Individual tool: gitlab_list_project_status_checks
  • Tier: Ultimate
  • Classic or OAuth token: read_api (or api)
  • Fine-grained token: External Status Check Service: Read at project (permissions page)
  • Behavior: read-only, idempotent
ParameterTypeMandatoryDescription
project_idstring/integeryesProject ID or URL-encoded path
order_bystringnoColumn to order by for keyset pagination (e.g. id)
pageintegernoPage number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
page_tokenstringnoNext page of a keyset listing: the next_page_token of the previous response of this action, passed back unchanged. It carries the position and every filter of the listing as GitLab read them, and those are what the next page is asked with, whatever filters are sent beside it. Leave it empty for the first page.
paginationstringnoPagination method: ‘keyset’ for keyset-based pagination on large ordered result sets, or ‘offset’ (the default). Keyset avoids deep-offset cost, and a keyset page names the next one in next_page_token rather than next_page.
per_pageintegernoItems per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
sortstring (asc, desc)noSort direction: asc or desc

external_status_check.list_project_mr_checks

Section titled “external_status_check.list_project_mr_checks”

List the external status checks for a merge request and their status. Returns: each check with id, name, external_url, status, and pagination metadata. See also: external_status_check.list_project, external_status_check.set_project_mr_status, external_status_check.retry_project.

  • Meta-tool: gitlab_external_status_check, action list_project_mr_checks
  • Individual tool: gitlab_list_project_mr_external_status_checks
  • Tier: Ultimate
  • Classic or OAuth token: read_api (or api)
  • Fine-grained token: External Status Check: Read at project (permissions page)
  • Behavior: read-only, idempotent
ParameterTypeMandatoryDescription
merge_request_iidintegeryesMerge request internal ID
project_idstring/integeryesProject ID or URL-encoded path
order_bystringnoColumn to order by for keyset pagination (e.g. id)
pageintegernoPage number to fetch, 1-based. Defaults to 1. Use the next_page field from the previous response to paginate forward.
page_tokenstringnoNext page of a keyset listing: the next_page_token of the previous response of this action, passed back unchanged. It carries the position and every filter of the listing as GitLab read them, and those are what the next page is asked with, whatever filters are sent beside it. Leave it empty for the first page.
paginationstringnoPagination method: ‘keyset’ for keyset-based pagination on large ordered result sets, or ‘offset’ (the default). Keyset avoids deep-offset cost, and a keyset page names the next one in next_page_token rather than next_page.
per_pageintegernoItems per page. Defaults to 20, minimum 1, maximum 100. Use 100 to minimize round trips when the result set is large.
sortstring (asc, desc)noSort direction: asc or desc

Retry a failed external status check for a merge request. Returns: a success confirmation. See also: external_status_check.list_project_mr_checks, external_status_check.set_project_mr_status.

  • Meta-tool: gitlab_external_status_check, action retry_project
  • Individual tool: gitlab_retry_failed_external_status_check_for_project_mr
  • Tier: Ultimate
  • Classic or OAuth token: api
  • Fine-grained token: External Status Check: Retry at project (permissions page)
  • Behavior: writes, idempotent
ParameterTypeMandatoryDescription
check_idintegeryesExternal status check ID to retry
merge_request_iidintegeryesMerge request internal ID
project_idstring/integeryesProject ID or URL-encoded path

external_status_check.set_project_mr_status

Section titled “external_status_check.set_project_mr_status”

Set the status of an external status check for a merge request. Returns: a success confirmation. See also: external_status_check.list_project_mr_checks, external_status_check.retry_project.

  • Meta-tool: gitlab_external_status_check, action set_project_mr_status
  • Individual tool: gitlab_set_project_mr_external_status_check_status
  • Tier: Ultimate
  • Classic or OAuth token: api
  • Fine-grained token: External Status Check: Update at project (permissions page)
  • Behavior: writes, idempotent
ParameterTypeMandatoryDescription
external_status_check_idintegeryesExternal status check ID to update
merge_request_iidintegeryesMerge request internal ID
project_idstring/integeryesProject ID or URL-encoded path
shastringyesHead SHA of the merge request source branch
statusstringyesStatus value (e.g. passed, failed)

Update a project external status check service. Returns: the updated check with id, name, external_url, hmac, and protected branches. See also: external_status_check.list_project, external_status_check.create_project, external_status_check.delete_project.

  • Meta-tool: gitlab_external_status_check, action update_project
  • Individual tool: gitlab_update_project_external_status_check
  • Tier: Ultimate
  • Classic or OAuth token: api
  • Fine-grained token: External Status Check Service: Update at project (permissions page)
  • Behavior: writes, idempotent
ParameterTypeMandatoryDescription
check_idintegeryesExternal status check ID to update
project_idstring/integeryesProject ID or URL-encoded path
external_urlstringnoUpdated external URL
namestringnoUpdated name
protected_branch_idsinteger[]noUpdated protected branch IDs
shared_secretstringnoUpdated shared secret for HMAC verification