Skip to content

Alerts tools

MCP tools for Alerts: alerts_acknowledge, alerts_get, alerts_list, alerts_resolve.

  • alerts_acknowledge: Acknowledge an alert
  • alerts_get: Get an alert
  • alerts_list: List alerts
  • alerts_resolve: Resolve an alert

alerts_acknowledge

Acknowledge an alert. Operation alerts.acknowledge · Organization level · permission org:read · risk tier write · since M7

Marks an alert acked: someone is working on it. It stays unresolved, so if the same problem is raised again its occurrences go up instead of a new alert appearing. Acknowledging an acknowledged alert changes nothing; a resolved one answers alert_resolved.

Needs write access to what the alert is about at its legal entity or brand, e.g. registrations:write for a registration alert (tax managers, owners, admins) or ledger:write for a ledger alert (finance).

Annotations: readOnlyHint: false · destructiveHint: false · idempotentHint: true · openWorldHint: false

Arguments

ArgumentTypeRequiredDescription
idID (alr_…)yes–
idempotency_keystringnoA unique string for this change. Retrying with the same key and arguments never acts twice. When left out, the server generates one and returns it in the result's idempotency_key. (1–255 characters)
dry_runbooleannotrue: check permissions and rules and compute the result, then roll everything back. Nothing is saved. (default false)
  • Idempotency: the result returns the idempotency_key used, yours or one the server generated. Retry with it: a call with the same key and arguments never acts twice (keys are kept for 24 hours).
  • Dry run: supported. dry_run: true checks permissions and rules and computes the result, then rolls everything back.

Errors

Example

Take on an automatic block

Arguments:

JSON
{
  "id": "alr_01m4ttwd3veh9apbewxheq5xab",
  "idempotency_key": "8d0c5f8e-4b7a-4e43-9b0f-2f6a0c1d9e21"
}

Result output:

JSON
{
  "id": "alr_01m4ttwd3veh9apbewxheq5xab",
  "object": "alert",
  "code": "REG_AUTO_BLOCKED",
  "severity": "critical",
  "family": "registrations",
  "message": "EU_OSS_NON_UNION was blocked for new consumer sales on 2026-11-07: the grace deadline 2026-11-10 is near and no application was submitted.",
  "link": "/console/acme/e/acme-hr/jurisdictions/EU_OSS_NON_UNION",
  "entityId": "ent_01m4ttwd3veh9apbewxheq5xh4",
  "brandId": null,
  "livemode": true,
  "status": "acked",
  "occurrences": 1,
  "lastRaisedAt": "2026-10-13T12:00:00.000Z",
  "acknowledgedAt": "2026-10-13T12:30:00.000Z",
  "acknowledgedBy": "usr_01m4ttwd3veh9apbewxheq5xh6",
  "resolvedAt": null,
  "resolvedBy": null,
  "delivery": {
    "status": "delivered",
    "attempts": 1,
    "lastError": null,
    "email": {
      "sent": 2,
      "failed": 0
    },
    "slack": [
      {
        "channelId": "sec_01m4ttwd3veh9apbewxheq5xad",
        "status": "sent",
        "at": "2026-10-13T12:00:00.000Z",
        "error": null
      }
    ]
  },
  "createdAt": "2026-10-13T12:00:00.000Z",
  "updatedAt": "2026-10-13T12:30:00.000Z",
  "version": 2
}

alerts_get

Get an alert. Operation alerts.get · Organization level · permission org:read · risk tier read · since M7

Returns one alert of the organization in the mode of the request: what happened (code, severity, message), where to act on it (link, a console page), how often it was raised while unresolved (occurrences), who acknowledged or resolved it, and how it was delivered (emails sent, Slack channels). An alert your role may not see answers resource_not_found, as if it didn't exist.

Annotations: readOnlyHint: true · destructiveHint: false · idempotentHint: true · openWorldHint: false

Arguments

ArgumentTypeRequiredDescription
idID (alr_…)yes–
  • Read-only: changes nothing; idempotency_key is ignored.

Errors

Example

An automatic block

Arguments:

JSON
{
  "id": "alr_01m4ttwd3veh9apbewxheq5xab"
}

Result output:

JSON
{
  "id": "alr_01m4ttwd3veh9apbewxheq5xab",
  "object": "alert",
  "code": "REG_AUTO_BLOCKED",
  "severity": "critical",
  "family": "registrations",
  "message": "EU_OSS_NON_UNION was blocked for new consumer sales on 2026-11-07: the grace deadline 2026-11-10 is near and no application was submitted.",
  "link": "/console/acme/e/acme-hr/jurisdictions/EU_OSS_NON_UNION",
  "entityId": "ent_01m4ttwd3veh9apbewxheq5xh4",
  "brandId": null,
  "livemode": true,
  "status": "open",
  "occurrences": 1,
  "lastRaisedAt": "2026-10-13T12:00:00.000Z",
  "acknowledgedAt": null,
  "acknowledgedBy": null,
  "resolvedAt": null,
  "resolvedBy": null,
  "delivery": {
    "status": "delivered",
    "attempts": 1,
    "lastError": null,
    "email": {
      "sent": 2,
      "failed": 0
    },
    "slack": [
      {
        "channelId": "sec_01m4ttwd3veh9apbewxheq5xad",
        "status": "sent",
        "at": "2026-10-13T12:00:00.000Z",
        "error": null
      }
    ]
  },
  "createdAt": "2026-10-13T12:00:00.000Z",
  "updatedAt": "2026-10-13T12:00:00.000Z",
  "version": 1
}

alerts_list

List alerts. Operation alerts.list · Organization level · permission org:read · risk tier read · since M7

Lists the organization's alerts in the mode of the request, newest first: the console inbox (spec §24), by default the unresolved ones (open or acknowledged). Only the alerts your role may see are listed: each alert is about one area (registrations, ledger, webhooks, …, its family) and is shown to members who may read that area at its legal entity or brand. Owners and admins see every alert.

By default only unresolved alerts (open and acked); filter with status (one or several), severity, code or entityId. Paginate with limit (1–100, default 10) and starting_after (the next_cursor of the previous page); a page can be shorter than limit while has_more is true.

Annotations: readOnlyHint: true · destructiveHint: false · idempotentHint: true · openWorldHint: false

Arguments

ArgumentTypeRequiredDescription
limitintegerno(1–100)
starting_afterID (alr_…)no–
statusone of open, acked, resolved or array of one of open, acked, resolvedno–
severityone of info, high, critical or array of one of info, high, criticalno–
codestringno–
entityIdID (ent_…)no–
  • Read-only: changes nothing; idempotency_key is ignored.

Errors

Examples

The unresolved alerts

Arguments:

JSON
{}

Result output:

JSON
{
  "object": "list",
  "data": [
    {
      "id": "alr_01m4ttwd3veh9apbewxheq5xab",
      "object": "alert",
      "code": "REG_AUTO_BLOCKED",
      "severity": "critical",
      "family": "registrations",
      "message": "EU_OSS_NON_UNION was blocked for new consumer sales on 2026-11-07: the grace deadline 2026-11-10 is near and no application was submitted.",
      "link": "/console/acme/e/acme-hr/jurisdictions/EU_OSS_NON_UNION",
      "entityId": "ent_01m4ttwd3veh9apbewxheq5xh4",
      "brandId": null,
      "livemode": true,
      "status": "open",
      "occurrences": 1,
      "lastRaisedAt": "2026-10-13T12:00:00.000Z",
      "acknowledgedAt": null,
      "acknowledgedBy": null,
      "resolvedAt": null,
      "resolvedBy": null,
      "delivery": {
        "status": "delivered",
        "attempts": 1,
        "lastError": null,
        "email": {
          "sent": 2,
          "failed": 0
        },
        "slack": [
          {
            "channelId": "sec_01m4ttwd3veh9apbewxheq5xad",
            "status": "sent",
            "at": "2026-10-13T12:00:00.000Z",
            "error": null
          }
        ]
      },
      "createdAt": "2026-10-13T12:00:00.000Z",
      "updatedAt": "2026-10-13T12:00:00.000Z",
      "version": 1
    }
  ],
  "has_more": false,
  "next_cursor": null
}

Critical alerts of one legal entity, including resolved ones

Arguments:

JSON
{
  "severity": "critical",
  "status": ["open", "acked", "resolved"],
  "entityId": "ent_01m4ttwd3veh9apbewxheq5xh4",
  "limit": 1
}

Result output:

JSON
{
  "object": "list",
  "data": [
    {
      "id": "alr_01m4ttwd3veh9apbewxheq5xab",
      "object": "alert",
      "code": "REG_AUTO_BLOCKED",
      "severity": "critical",
      "family": "registrations",
      "message": "EU_OSS_NON_UNION was blocked for new consumer sales on 2026-11-07: the grace deadline 2026-11-10 is near and no application was submitted.",
      "link": "/console/acme/e/acme-hr/jurisdictions/EU_OSS_NON_UNION",
      "entityId": "ent_01m4ttwd3veh9apbewxheq5xh4",
      "brandId": null,
      "livemode": true,
      "status": "open",
      "occurrences": 1,
      "lastRaisedAt": "2026-10-13T12:00:00.000Z",
      "acknowledgedAt": null,
      "acknowledgedBy": null,
      "resolvedAt": null,
      "resolvedBy": null,
      "delivery": {
        "status": "delivered",
        "attempts": 1,
        "lastError": null,
        "email": {
          "sent": 2,
          "failed": 0
        },
        "slack": [
          {
            "channelId": "sec_01m4ttwd3veh9apbewxheq5xad",
            "status": "sent",
            "at": "2026-10-13T12:00:00.000Z",
            "error": null
          }
        ]
      },
      "createdAt": "2026-10-13T12:00:00.000Z",
      "updatedAt": "2026-10-13T12:00:00.000Z",
      "version": 1
    }
  ],
  "has_more": true,
  "next_cursor": "alr_01m4ttwd3veh9apbewxheq5xab"
}

alerts_resolve

Resolve an alert. Operation alerts.resolve · Organization level · permission org:read · risk tier write · since M7

Closes an alert by hand: the problem is dealt with. If it happens again, a new alert is raised (and delivered again). Many alerts also resolve themselves when their condition clears (e.g. a retried job finished); then resolvedBy is null. Resolving a resolved alert changes nothing.

Needs write access to what the alert is about at its legal entity or brand, as for acknowledging.

Annotations: readOnlyHint: false · destructiveHint: false · idempotentHint: true · openWorldHint: false

Arguments

ArgumentTypeRequiredDescription
idID (alr_…)yes–
idempotency_keystringnoA unique string for this change. Retrying with the same key and arguments never acts twice. When left out, the server generates one and returns it in the result's idempotency_key. (1–255 characters)
dry_runbooleannotrue: check permissions and rules and compute the result, then roll everything back. Nothing is saved. (default false)
  • Idempotency: the result returns the idempotency_key used, yours or one the server generated. Retry with it: a call with the same key and arguments never acts twice (keys are kept for 24 hours).
  • Dry run: supported. dry_run: true checks permissions and rules and computes the result, then rolls everything back.

Errors

Example

Close an alert that was dealt with

Arguments:

JSON
{
  "id": "alr_01m4ttwd3veh9apbewxheq5xab",
  "idempotency_key": "8d0c5f8e-4b7a-4e43-9b0f-2f6a0c1d9e21"
}

Result output:

JSON
{
  "id": "alr_01m4ttwd3veh9apbewxheq5xab",
  "object": "alert",
  "code": "REG_AUTO_BLOCKED",
  "severity": "critical",
  "family": "registrations",
  "message": "EU_OSS_NON_UNION was blocked for new consumer sales on 2026-11-07: the grace deadline 2026-11-10 is near and no application was submitted.",
  "link": "/console/acme/e/acme-hr/jurisdictions/EU_OSS_NON_UNION",
  "entityId": "ent_01m4ttwd3veh9apbewxheq5xh4",
  "brandId": null,
  "livemode": true,
  "status": "resolved",
  "occurrences": 1,
  "lastRaisedAt": "2026-10-13T12:00:00.000Z",
  "acknowledgedAt": null,
  "acknowledgedBy": null,
  "resolvedAt": "2026-10-13T12:30:00.000Z",
  "resolvedBy": "usr_01m4ttwd3veh9apbewxheq5xh6",
  "delivery": {
    "status": "delivered",
    "attempts": 1,
    "lastError": null,
    "email": {
      "sent": 2,
      "failed": 0
    },
    "slack": [
      {
        "channelId": "sec_01m4ttwd3veh9apbewxheq5xad",
        "status": "sent",
        "at": "2026-10-13T12:00:00.000Z",
        "error": null
      }
    ]
  },
  "createdAt": "2026-10-13T12:00:00.000Z",
  "updatedAt": "2026-10-13T12:30:00.000Z",
  "version": 2
}