Alerts tools
MCP tools for Alerts: alerts_acknowledge, alerts_get, alerts_list, alerts_resolve.
alerts_acknowledge: Acknowledge an alertalerts_get: Get an alertalerts_list: List alertsalerts_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
| Argument | Type | Required | Description |
|---|---|---|---|
id | ID (alr_…) | yes | – |
idempotency_key | string | no | A 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_run | boolean | no | true: check permissions and rules and compute the result, then roll everything back. Nothing is saved. (default false) |
- Idempotency: the result returns the
idempotency_keyused, 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: truechecks permissions and rules and computes the result, then rolls everything back.
Errors
resource_not_found: No alert with this ID that you may see, in this organization and mode.alert_resolved: The alert is already resolved.permission_denied: Your role may see the alert but not act on what it is about.version_conflict: The alert changed at the same moment; retry.
Example
Take on an automatic block
Arguments:
{
"id": "alr_01m4ttwd3veh9apbewxheq5xab",
"idempotency_key": "8d0c5f8e-4b7a-4e43-9b0f-2f6a0c1d9e21"
}
Result output:
{
"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
| Argument | Type | Required | Description |
|---|---|---|---|
id | ID (alr_…) | yes | – |
- Read-only: changes nothing;
idempotency_keyis ignored.
Errors
resource_not_found: No alert with this ID that you may see, in this organization and mode.permission_denied: You can't read this organization's inbox.
Example
An automatic block
Arguments:
{
"id": "alr_01m4ttwd3veh9apbewxheq5xab"
}
Result output:
{
"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
| Argument | Type | Required | Description |
|---|---|---|---|
limit | integer | no | (1–100) |
starting_after | ID (alr_…) | no | – |
status | one of open, acked, resolved or array of one of open, acked, resolved | no | – |
severity | one of info, high, critical or array of one of info, high, critical | no | – |
code | string | no | – |
entityId | ID (ent_…) | no | – |
- Read-only: changes nothing;
idempotency_keyis ignored.
Errors
validation_failed: A filter or pagination value is invalid.permission_denied: You can't read this organization's inbox.
Examples
The unresolved alerts
Arguments:
{}
Result output:
{
"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:
{
"severity": "critical",
"status": ["open", "acked", "resolved"],
"entityId": "ent_01m4ttwd3veh9apbewxheq5xh4",
"limit": 1
}
Result output:
{
"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
| Argument | Type | Required | Description |
|---|---|---|---|
id | ID (alr_…) | yes | – |
idempotency_key | string | no | A 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_run | boolean | no | true: check permissions and rules and compute the result, then roll everything back. Nothing is saved. (default false) |
- Idempotency: the result returns the
idempotency_keyused, 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: truechecks permissions and rules and computes the result, then rolls everything back.
Errors
resource_not_found: No alert with this ID that you may see, in this organization and mode.permission_denied: Your role may see the alert but not act on what it is about.version_conflict: The alert changed at the same moment; retry.
Example
Close an alert that was dealt with
Arguments:
{
"id": "alr_01m4ttwd3veh9apbewxheq5xab",
"idempotency_key": "8d0c5f8e-4b7a-4e43-9b0f-2f6a0c1d9e21"
}
Result output:
{
"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
}