Disaster Recovery Tools
Disaster Recovery is Subscriby's answer to a connector outage or a lost channel: what the probes found, what was recovered and whether it can still be undone.
Disaster Recovery is Subscriby's answer to a connector outage or a lost channel: what the probes found, what was recovered and whether it can still be undone. These tools read incidents and recoveries, follow a roll call live and request the standby or replacement of a resource.
Tools
get_recovery_allowancesGet Recovery AllowancesREADget_recovery_readinessGet Recovery ReadinessREADget_recovery_roll_callGet Recovery Roll CallREADget_recovery_settingsGet Recovery SettingsREADget_resource_standbyGet Resource StandbyREADlist_recovery_incidentsList Recovery IncidentsREADlist_recovery_operationsList Recovery OperationsDESTRUCTIVEnotify_members_of_recoveryNotify Members Of RecoveryWRITEnudge_pending_readmissionsNudge Pending ReadmissionsDESTRUCTIVEremove_resource_standbyRemove Resource StandbyDESTRUCTIVEremove_standby_installationRemove Standby InstallationWRITErequest_resource_replacementRequest Resource ReplacementWRITErequest_resource_standbyRequest Resource StandbyDESTRUCTIVErevert_recovery_operationRevert Recovery OperationWRITEset_resource_standby_mirrorSet Resource Standby MirrorWRITEupdate_recovery_settingsUpdate Recovery SettingsDESTRUCTIVEuse_resource_standbyUse Resource StandbyWRITEwithdraw_resource_replacement_requestWithdraw Resource Replacement RequestWRITEwithdraw_resource_standby_requestWithdraw Resource Standby RequestRead how many self-service Disaster Recoveries of each kind the creator the token acts for may still run, what support has released on top, and when the allowance returns. Takes no input.
Answer "can I still run a recovery, or do I need support?". Self-service recovery is allowed once per kind (account, bot, resources) inside a rolling window; beyond that, support reviews the account and may release a grant. Each row carries what the window still allows (self_service_remaining), what support has released and not yet spent (grant_remaining), their sum (remaining), whether a recovery of that kind would be allowed right now (allowed), whether the next one would spend a grant (uses_grant), when the kind was last recovered and when the self-service allowance returns. meta carries the window itself. The rows are the ones GET /v1/recovery/allowances returns.
Requires ability
The token behind the MCP session must hold it, or the call is refused with TOKEN_MISSING_ABILITY.
Runs the same action as
The REST endpoint and this tool share one action, so validation, permissions and events are identical.
Annotations
It reads and never changes anything.
Arguments
This tool takes no arguments.
What it returns
{ "data": [ { "kind": "resources", "kind_label": "Channels and Groups", "self_service_remaining": 0, "grant_remaining": 1, "remaining": 1, "allowed": true, "uses_grant": true, "last_used_at": "2026-09-12T03:19:10Z", "next_self_service_at": "2026-12-11T03:19:10Z" } ], "meta": { "window_days": 90, "self_service_uses": 1 }}One row per kind, in the order account, bot, resources.
How it fails
AUTHENTICATION_REQUIREDno authenticated user on the request.
TOKEN_MISSING_ABILITYtoken lacks project-recovery:view-any.
Read the Disaster Recovery readiness checklist for the creator the token acts for — every line with its state, and the totals the dashboard card shows. Takes no input.
Answer "how ready is this account for the next ban?". The checklist is the one the Disaster Recovery → Readiness page shows. The account's own lines come first: a second factor and a backup sign-in account. Then each installed connector's lines, worded by that connector and named by connector (Telegram's: a standby bot for every project, a standby for every channel and group, automatic failover, a live mirror). Last the two reminders: a copy of the content kept elsewhere, and a second human administrator in every space. Each line says whether it is in place, whether the plan lacks the feature (locked), the state in words and where the fix lives; the totals say how many verifiable lines are done. The payload is exactly what GET /v1/recovery/readiness returns.
Requires ability
The token behind the MCP session must hold it, or the call is refused with TOKEN_MISSING_ABILITY.
Runs the same action as
The REST endpoint and this tool share one action, so validation, permissions and events are identical.
Annotations
It reads and never changes anything.
Arguments
This tool takes no arguments.
What it returns
{ "data": { "prevention": true, "completed": 4, "total": 6, "complete": false, "items": [ { "key": "second_factor", "connector": null, "connector_name": null, "label": "Two-Factor Authentication or a Passkey", "description": "Recovery moves your identity, so the account that runs it should be hard to take over.", "icon": "shield-check", "prevention": false, "reminder": false, "done": true, "locked": false, "detail": "Enabled", "url": "https://app.subscriby.net/settings/security" } ] }, "meta": {}}done is true, false, or null when the platform can only remind (reminder: true); reminders never count toward total.
How it fails
AUTHENTICATION_REQUIREDno authenticated user on the request.
TOKEN_MISSING_ABILITYtoken lacks project-recovery:view-any.
Read where the re-admission after one Disaster Recovery operation stands — how many members hold a fresh link, how many have joined, who is still outside, and whether a reminder may go out now.
After a channel or group is swapped, every active member is re-admitted through a fresh link, and this is the live tally: how many the swap set out to re-admit (total), how many hold a new link (regranted), how many could not be given one (failed), how many the installation could not message (unreachable) and were told by email instead (emailed), how many have joined (joined), who is still outside (pending), how many reminders went out (nudged), whether the queue has handled everyone (settled), and whether the creator may remind the stragglers right now (can_nudge, with nudge_available_at while the cooldown runs). The payload is exactly what GET /v1/recovery/operations/{operation}/roll-call returns.
A recovery of a kind that re-admits nobody (an account relink, a bot replacement) answers the same shape with every counter at zero.
Requires ability
The token behind the MCP session must hold it, or the call is refused with TOKEN_MISSING_ABILITY.
Runs the same action as
The REST endpoint and this tool share one action, so validation, permissions and events are identical.
Annotations
It reads and never changes anything.
Arguments
operation_id*stringUUID of the recovery operation, from `list_recovery_operations`.
What it returns
{ "data": { "total": 340, "regranted": 340, "failed": 0, "unreachable": 12, "emailed": 12, "joined": 338, "pending": 2, "nudged": 1, "settled": true, "cooling_down": false, "can_nudge": true, "last_nudged_at": "2026-09-12T09:00:00Z", "nudge_available_at": "2026-09-12T10:00:00Z" }, "meta": { "operation_id": "9a4d2e71-5b38-4c6f-8e12-3d7c9b0a5f21" }}How it fails
RESOURCE_NOT_FOUNDoperation_id is not an operation in this creator's ledger.
AUTHENTICATION_REQUIREDno authenticated user on the request.
TOKEN_MISSING_ABILITYtoken lacks project-recovery:view.
Read one project's Disaster Recovery settings — automatic failover and its fee consent, how members are told after a swap, and whether a standby installation is kept.
The switches the Prevention page holds per project. auto_failover_enabled says whether the platform may swap a banned channel for its standby on its own, and auto_failover_email_consented_at when the creator accepted the per-email fee that failover may charge; email_delivery says how members are told after a channel swap the creator ran (self: the creator tells them; platform: Subscriby emails them at the fee); standby_installation_registered whether a spare bot is kept. The payload is exactly what the REST endpoint returns. The REST twin is GET /v1/projects/{project}/recovery/settings.
Requires ability
The token behind the MCP session must hold it, or the call is refused with TOKEN_MISSING_ABILITY.
Runs the same action as
The REST endpoint and this tool share one action, so validation, permissions and events are identical.
Annotations
It reads and never changes anything.
Arguments
project_id*stringUUID of the project whose recovery settings to read.
What it returns
{ "data": { "project_id": "7f3d1c92-8b45-4e6a-9d21-5c8e0a4b6f13", "auto_failover_enabled": true, "auto_failover_email_consented_at": "2026-09-01T14:20:00Z", "email_delivery": "platform", "email_delivery_label": "Subscriby emails them", "standby_installation_registered": true }, "meta": {}}How it fails
RESOURCE_NOT_FOUNDproject_id is not a project the token can see.
AUTHENTICATION_REQUIREDno authenticated user on the request.
TOKEN_MISSING_ABILITYtoken lacks project-recovery:view.
Read the standby kept for one resource — its health, whether posts are mirrored into it, and when it was last probed and written to.
A standby is a spare channel or group the bot already administers, linked to one resource so a ban can be answered by a swap. This reads it: health_status (with the connector's health_reason code when degraded), mirror_enabled, health_checked_at, last_mirrored_at, linked_at. The standby's own identifier on the platform is deliberately absent. The REST twin is GET /v1/projects/{project}/resources/{resource}/standby.
Requires ability
The token behind the MCP session must hold it, or the call is refused with TOKEN_MISSING_ABILITY.
Runs the same action as
The REST endpoint and this tool share one action, so validation, permissions and events are identical.
Annotations
It reads and never changes anything.
Arguments
resource_id*stringUUID of the resource whose standby to read.
What it returns
{ "data": { "resource_id": "b73c5f21-9d80-4a6e-8215-4f70ce13a9d6", "mirror_enabled": true, "health_status": "healthy", "health_status_label": "Healthy", "health_reason": null, "health_checked_at": "2026-09-12T02:00:00Z", "last_mirrored_at": "2026-09-12T01:45:12Z", "linked_at": "2026-09-01T14:22:09Z" }, "meta": {}}How it fails
RESOURCE_NOT_FOUNDthe resource keeps no standby, or resource_id is not a resource the token can see.
AUTHENTICATION_REQUIREDno authenticated user on the request.
TOKEN_MISSING_ABILITYtoken lacks project-recovery:view.
List the Disaster Recovery incidents of the creator the token acts for — what the health probes found broken, open by default, with the reason in the connector's words.
Answer "is anything of mine banned or broken right now?". An incident is one problem a probe detected and has not yet seen fixed: the creator's sign-in account unreachable (account), a project's installation refused by the platform (bot), or a space the project sells gone or no longer administered (resources). Each row names the connector, the project and resource, the reason as the connector's code and in words, when it was detected and, once healed or fixed, when and by which operation it was resolved. The rows are the ones GET /v1/recovery/incidents returns.
Requires ability
The token behind the MCP session must hold it, or the call is refused with TOKEN_MISSING_ABILITY.
Runs the same action as
The REST endpoint and this tool share one action, so validation, permissions and events are identical.
Annotations
It reads and never changes anything.
Arguments
statusstringoptionalWhich incidents: `open` (default: still needing attention), `resolved`, or `all`.
openresolvedalllimitintegeroptionalIncidents per page (1..100, default 25).
1max100pageintegeroptional1-indexed page number.
1What it returns
{ "data": [ { "id": "6f1e9b27-4c3a-4d58-9e02-b7a1c5d38f64", "kind": "resources", "kind_label": "Channels and Groups", "status": "open", "status_label": "Open", "connector": "telegram", "project_id": "7f3d1c92-8b45-4e6a-9d21-5c8e0a4b6f13", "project_name": "Research Premium", "resource_id": "b73c5f21-9d80-4a6e-8215-4f70ce13a9d6", "resource_title": "Signals", "reason": "chat_not_found", "reason_label": "Channel not found", "reason_explanation": "**Most likely cause:** Telegram deleted or banned the channel. Replace it with a new one.", "detected_at": "2026-09-12T03:19:04Z", "resolved_at": null, "resolved_by_operation_id": null } ], "meta": { "page": 1, "limit": 25, "total": 1, "has_more": false }}How it fails
AUTHENTICATION_REQUIREDno authenticated user on the request.
TOKEN_MISSING_ABILITYtoken lacks project-recovery:view-any.
List every Disaster Recovery operation of the creator the token acts for — by the creator, the platform or on demand — with its state and whether it can still be undone.
Answer "what has recovery done for me, and can I still undo it?". An operation is one recovery ever run: by the creator, by the platform on their behalf (automatic, the failover you sleep through) or on demand (on_demand, a Swap & Grant of a healthy resource). Each row carries its kind, its state, the connector and project, when it started and finished, the failure reason when it failed, and its undo state: revertible for whether it can be undone right now and revert_window_ends_at for when that closes. The rows are the ones GET /v1/recovery/operations returns.
Requires ability
The token behind the MCP session must hold it, or the call is refused with TOKEN_MISSING_ABILITY.
Runs the same action as
The REST endpoint and this tool share one action, so validation, permissions and events are identical.
Annotations
It reads and never changes anything.
Arguments
kindstringoptionalOnly recoveries of this kind: `account`, `bot` or `resources`. Omit for every kind.
accountbotresourcesstatusstringoptionalOnly operations in this state: `started`, `completed`, `failed` or `reverted`. Omit for every state.
startedcompletedfailedrevertedlimitintegeroptionalOperations per page (1..100, default 25).
1max100pageintegeroptional1-indexed page number.
1What it returns
{ "data": [ { "id": "9a4d2e71-5b38-4c6f-8e12-3d7c9b0a5f21", "kind": "resources", "kind_label": "Channels and Groups", "status": "completed", "status_label": "Completed", "connector": "telegram", "project_id": "7f3d1c92-8b45-4e6a-9d21-5c8e0a4b6f13", "project_name": "Research Premium", "grant_id": null, "automatic": true, "on_demand": false, "failure_reason": null, "started_at": "2026-09-12T03:19:10Z", "completed_at": "2026-09-12T03:19:42Z", "reverted_at": null, "revertible": true, "revert_window_ends_at": "2026-09-13T03:19:42Z" } ], "meta": { "page": 1, "limit": 25, "total": 1, "has_more": false }}How it fails
VALIDATION_FAILEDkind or status is not one of the accepted values; the context names them.
AUTHENTICATION_REQUIREDno authenticated user on the request.
TOKEN_MISSING_ABILITYtoken lacks project-recovery:view-any.
notify_members_of_recovery
DESTRUCTIVEEmail every member the project can reach that its bot changed after a bot replacement, at the per-email fee. Sent once per recovery.
After a bot replacement, members who only ever talked to the old bot need the new one's link. This emails every member the project can reach by email with the new bot and the portal, at the per-email fee added to the creator's transaction fees, and remembers that it did: a second call answers with the count already sent and sends nothing. It spends money and reaches real people, so confirm with the creator first.
This tool is annotated destructive: a client that supports the annotation asks a human before running it. The REST twin is POST /v1/recovery/operations/{operation}/notify-members.
Requires ability
The token behind the MCP session must hold it, or the call is refused with TOKEN_MISSING_ABILITY.
Runs the same action as
The REST endpoint and this tool share one action, so validation, permissions and events are identical.
Annotations
A client that honours annotations asks a person before running it.
Arguments
operation_id*stringUUID of the bot recovery whose project members to email.
What it returns
{ "data": { "operation_id": "c2e8f1a9-6d47-4b3e-9f05-1a8d7c2e4b60", "notified": 340 }, "meta": {}}How it fails
VALIDATION_FAILEDthe recovery belongs to no project, or the token is not the project owner's.
RESOURCE_NOT_FOUNDoperation_id is not in this creator's ledger.
AUTHENTICATION_REQUIREDno authenticated user on the request.
TOKEN_MISSING_ABILITYtoken lacks project-recovery:update.
Send one reminder, with a fresh link, to every member a channel recovery re-admitted who has not joined the new chat yet.
After a swap, get_recovery_roll_call shows who is still outside (pending) and whether a reminder may go out (can_nudge). This sends it: one message per straggler with a fresh link, recorded on the operation so the cooldown can be enforced. Every reminder reaches a real person, so do not loop it. The REST twin is POST /v1/recovery/operations/{operation}/nudge.
Requires ability
The token behind the MCP session must hold it, or the call is refused with TOKEN_MISSING_ABILITY.
Runs the same action as
The REST endpoint and this tool share one action, so validation, permissions and events are identical.
Arguments
operation_id*stringUUID of the completed channel recovery whose stragglers to remind.
What it returns
{ "data": { "operation_id": "9a4d2e71-5b38-4c6f-8e12-3d7c9b0a5f21", "nudged": 2 }, "meta": {}}How it fails
VALIDATION_FAILEDnobody is waiting, the last reminder is too recent, the recovery is not a completed channel swap, or not the creator's own; the context carries the reason.
RESOURCE_NOT_FOUNDoperation_id is not in this creator's ledger.
AUTHENTICATION_REQUIREDno authenticated user on the request.
TOKEN_MISSING_ABILITYtoken lacks project-recovery:update.
remove_resource_standby
DESTRUCTIVEStop keeping a standby for one resource; the chat itself is untouched and the resource keeps its live chat.
The standby row is forgotten and mirroring into it stops. Automatic failover can no longer swap this resource until a new standby is linked. Only the project owner may do this; a resource with no standby succeeds with nothing to remove.
This tool is annotated destructive: a client that supports the annotation asks a human before running it. The REST twin is DELETE /v1/projects/{project}/resources/{resource}/standby.
Requires ability
The token behind the MCP session must hold it, or the call is refused with TOKEN_MISSING_ABILITY.
Runs the same action as
The REST endpoint and this tool share one action, so validation, permissions and events are identical.
Fires one event
Delivered to every endpoint subscribed to it once the change is made.
Annotations
A client that honours annotations asks a person before running it.
Arguments
resource_id*stringUUID of the resource whose standby to remove.
What it returns
{ "data": { "resource_id": "b73c5f21-9d80-4a6e-8215-4f70ce13a9d6", "standby": null }, "meta": {}}How it fails
VALIDATION_FAILEDthe token is not the project owner's.
RESOURCE_NOT_FOUNDresource_id is not a resource the token can see.
AUTHENTICATION_REQUIREDno authenticated user on the request.
TOKEN_MISSING_ABILITYtoken lacks project-recovery:delete.
remove_standby_installation
DESTRUCTIVEStop keeping the standby installation (the spare bot) registered for a project.
The standby is forgotten and withdrawn from the connector; the live installation, members and access stay as they are, and the next bot replacement will need a fresh credential pasted on the dashboard. Registering a standby is not offered to tokens because it takes a credential; removing one is. Only the project owner may do this.
This tool is annotated destructive: a client that supports the annotation asks a human before running it. The REST twin is DELETE /v1/projects/{project}/recovery/standby-installation.
Requires ability
The token behind the MCP session must hold it, or the call is refused with TOKEN_MISSING_ABILITY.
Runs the same action as
The REST endpoint and this tool share one action, so validation, permissions and events are identical.
Fires one event
Delivered to every endpoint subscribed to it once the change is made.
Annotations
A client that honours annotations asks a person before running it.
Arguments
project_id*stringUUID of the project whose standby installation to remove.
What it returns
{ "data": { "project_id": "7f3d1c92-8b45-4e6a-9d21-5c8e0a4b6f13", "standby_installation_registered": false }, "meta": {}}How it fails
VALIDATION_FAILEDthe token is not the project owner's.
RESOURCE_NOT_FOUNDproject_id is not a project the token can see.
AUTHENTICATION_REQUIREDno authenticated user on the request.
TOKEN_MISSING_ABILITYtoken lacks project-recovery:delete.
Ask the creator, through the connector, to pick the chat that replaces a resource's; the swap runs the moment they choose. Nothing is swapped by the call itself.
Replacing a chat is a conversation with the creator on the connector: the bot messages them with a picker, and when they choose the resource is re-pointed, old links revoked, every active member re-admitted and a recovery operation recorded. For a degraded resource the swap spends the channel recovery allowance (or joins the recovery already absorbing swaps); for a healthy one it is on demand and free. Take an unanswered request back with withdraw_resource_replacement_request. The REST twin is POST /v1/projects/{project}/resources/{resource}/replacement/request.
Requires ability
The token behind the MCP session must hold it, or the call is refused with TOKEN_MISSING_ABILITY.
Runs the same action as
The REST endpoint and this tool share one action, so validation, permissions and events are identical.
Arguments
resource_id*stringUUID of the resource whose chat should be replaced.
What it returns
{ "data": { "resource_id": "b73c5f21-9d80-4a6e-8215-4f70ce13a9d6", "status": "request_sent" }, "meta": {}}How it fails
VALIDATION_FAILEDthe resource is a perk rather than a place, the creator cannot be reached, or the allowance is spent with no recovery to join.
RESOURCE_NOT_FOUNDresource_id is not a resource the token can see.
AUTHENTICATION_REQUIREDno authenticated user on the request.
TOKEN_MISSING_ABILITYtoken lacks project-recovery:create.
Ask the creator, through the connector, to pick the chat that becomes the standby for one resource. Nothing is linked by the call itself.
Linking a standby is a conversation with the creator on the connector: the bot messages them with a picker, and the standby is linked the moment they choose. The API cannot name the chat directly (that would take a platform identifier), so it starts the conversation. Needs the Growth plan and the project owner. Take an unanswered request back with withdraw_resource_standby_request. The REST twin is POST /v1/projects/{project}/resources/{resource}/standby/request.
Requires ability
The token behind the MCP session must hold it, or the call is refused with TOKEN_MISSING_ABILITY.
Runs the same action as
The REST endpoint and this tool share one action, so validation, permissions and events are identical.
Arguments
resource_id*stringUUID of the resource that should get a standby.
What it returns
{ "data": { "resource_id": "b73c5f21-9d80-4a6e-8215-4f70ce13a9d6", "status": "request_sent" }, "meta": {}}How it fails
VALIDATION_FAILEDthe resource is a perk rather than a place, the creator cannot be reached on the connector, the plan lacks the prevention features, or the token is not the project owner's.
RESOURCE_NOT_FOUNDresource_id is not a resource the token can see.
AUTHENTICATION_REQUIREDno authenticated user on the request.
TOKEN_MISSING_ABILITYtoken lacks project-recovery:create.
revert_recovery_operation
DESTRUCTIVEUndo a completed Disaster Recovery inside its window — a swapped channel put back, or the previous sign-in account restored.
A channel recovery is undone one swap at a time: name the resource_id to put back on its old chat, and every active member is re-admitted there again. An account relink is undone whole, moving sign-in back to the previous account, signing the creator out everywhere and opening a disputed-relink incident for support; name no resource_id. A bot replacement cannot be undone. The window is 24 hours from completion by default; revertible on the operation says whether it is still open. Only the creator who ran the recovery may undo it.
This tool is annotated destructive: a client that supports the annotation asks a human before running it. The REST twin is POST /v1/recovery/operations/{operation}/revert.
Requires ability
The token behind the MCP session must hold it, or the call is refused with TOKEN_MISSING_ABILITY.
Runs the same action as
The REST endpoint and this tool share one action, so validation, permissions and events are identical.
Delivered to every endpoint subscribed to it once the change is made.
Annotations
A client that honours annotations asks a person before running it.
Arguments
operation_id*stringUUID of the completed recovery to undo, from `list_recovery_operations`.
resource_idstringoptionalFor a channel recovery: UUID of the resource to put back on its old chat. Omit for an account relink.
What it returns
{ "data": { "id": "9a4d2e71-5b38-4c6f-8e12-3d7c9b0a5f21", "kind": "resources", "kind_label": "Channels and Groups", "status": "reverted", "status_label": "Reverted", "connector": "telegram", "project_id": "7f3d1c92-8b45-4e6a-9d21-5c8e0a4b6f13", "project_name": "Research Premium", "grant_id": null, "automatic": false, "on_demand": true, "failure_reason": null, "started_at": "2026-09-12T10:00:00Z", "completed_at": "2026-09-12T10:00:31Z", "reverted_at": "2026-09-12T21:50:00Z", "revertible": false, "revert_window_ends_at": "2026-09-13T10:00:31Z" }, "meta": {}}How it fails
VALIDATION_FAILEDthe window has closed, the swap is already put back, a bot replacement, a channel recovery with no resource_id, or not the creator's own recovery; the context carries the reason.
RESOURCE_NOT_FOUNDoperation_id is not in this creator's ledger, or resource_id is not a resource they manage.
AUTHENTICATION_REQUIREDno authenticated user on the request.
TOKEN_MISSING_ABILITYtoken lacks project-recovery:update.
Switch the live mirror into a resource's standby on or off, so a failover lands members in a channel that already holds the content.
When on, every post made in the channel is copied into the standby as it is made. Only a channel can be mirrored (a group cannot), the resource must keep a standby, switching on needs the Growth plan, and only the project owner may do it. Returns the standby as it now stands. The REST twin is PATCH /v1/projects/{project}/resources/{resource}/standby.
Requires ability
The token behind the MCP session must hold it, or the call is refused with TOKEN_MISSING_ABILITY.
Runs the same action as
The REST endpoint and this tool share one action, so validation, permissions and events are identical.
Annotations
Sending the same arguments twice changes nothing the second time.
Arguments
resource_id*stringUUID of the resource whose standby to mirror into.
mirror*booleanTrue to copy every post into the standby as it is made, false to stop.
What it returns
{ "data": { "resource_id": "b73c5f21-9d80-4a6e-8215-4f70ce13a9d6", "mirror_enabled": true, "health_status": "healthy", "health_status_label": "Healthy", "health_reason": null, "health_checked_at": "2026-09-12T02:00:00Z", "last_mirrored_at": "2026-09-12T01:45:12Z", "linked_at": "2026-09-01T14:22:09Z" }, "meta": {}}How it fails
VALIDATION_FAILEDa group, no standby, the plan lacks the prevention features, or the token is not the project owner's.
RESOURCE_NOT_FOUNDresource_id is not a resource the token can see.
AUTHENTICATION_REQUIREDno authenticated user on the request.
TOKEN_MISSING_ABILITYtoken lacks project-recovery:update.
Change one project's Disaster Recovery settings: switch automatic failover on or off (with the fee consent), and choose how members are told after a swap. Fields left out keep their value.
Drives the two actions the Prevention page drives, so a refusal is the same sentence the dashboard shows. Switching auto_failover on needs accepts_email_fee: true in the same call, because a failover may email the members the bot cannot reach at a per-email fee the creator must agree to, and it needs the Growth plan. email_delivery is self or platform. Only the project owner may change these; a teammate is refused. Returns the settings as they now stand. The REST twin is PATCH /v1/projects/{project}/recovery/settings.
Requires ability
The token behind the MCP session must hold it, or the call is refused with TOKEN_MISSING_ABILITY.
Runs the same action as
The REST endpoint and this tool share one action, so validation, permissions and events are identical.
Annotations
Sending the same arguments twice changes nothing the second time.
Arguments
project_id*stringUUID of the project.
auto_failoverbooleanoptionalSwitch automatic failover on (true) or off (false). Omit to leave it.
accepts_email_feebooleanoptionalRequired true when switching failover on: the creator accepts the per-email fee a failover may charge.
email_deliverystringoptionalHow members are told after a swap the creator ran: `self` or `platform`. Omit to leave it.
platformselfWhat it returns
{ "data": { "project_id": "7f3d1c92-8b45-4e6a-9d21-5c8e0a4b6f13", "auto_failover_enabled": true, "auto_failover_email_consented_at": "2026-09-01T14:20:00Z", "email_delivery": "platform", "email_delivery_label": "Subscriby emails them", "standby_installation_registered": true }, "meta": {}}How it fails
VALIDATION_FAILEDfailover switched on without accepts_email_fee, the plan lacks the prevention features, an unknown email_delivery, or the token is not the project owner's; the context carries the reason.
RESOURCE_NOT_FOUNDproject_id is not a project the token can see.
AUTHENTICATION_REQUIREDno authenticated user on the request.
TOKEN_MISSING_ABILITYtoken lacks project-recovery:update.
use_resource_standby
DESTRUCTIVESwap a resource onto its standby right now: old links revoked, every active member re-admitted, the standby consumed. Returns the recovery operation it ran under.
The one-click swap from the Prevention page. The resource points at the standby chat, the old invite links are revoked and every active member is re-admitted into the standby; the standby is consumed. A recovery operation records it: for a healthy resource with no open incident the swap is on demand and spends no allowance, otherwise it spends (or joins) the channel recovery allowance. Undo is offered for 24 hours through revert_recovery_operation. Only the project owner may do this.
This tool is annotated destructive: a client that supports the annotation asks a human before running it. The REST twin is POST /v1/projects/{project}/resources/{resource}/standby/use.
Requires ability
The token behind the MCP session must hold it, or the call is refused with TOKEN_MISSING_ABILITY.
Runs the same action as
The REST endpoint and this tool share one action, so validation, permissions and events are identical.
Fires events
Delivered to every endpoint subscribed to it once the change is made.
Annotations
A client that honours annotations asks a person before running it.
Arguments
resource_id*stringUUID of the resource to swap onto its standby.
What it returns
{ "data": { "id": "9a4d2e71-5b38-4c6f-8e12-3d7c9b0a5f21", "kind": "resources", "kind_label": "Channels and Groups", "status": "completed", "status_label": "Completed", "connector": "telegram", "project_id": "7f3d1c92-8b45-4e6a-9d21-5c8e0a4b6f13", "project_name": "Research Premium", "grant_id": null, "automatic": false, "on_demand": true, "failure_reason": null, "started_at": "2026-09-12T10:00:00Z", "completed_at": "2026-09-12T10:00:31Z", "reverted_at": null, "revertible": true, "revert_window_ends_at": "2026-09-13T10:00:31Z" }, "meta": {}}How it fails
VALIDATION_FAILEDno healthy standby, the channel recovery allowance is spent with no recovery to join, or the token is not the project owner's.
RESOURCE_NOT_FOUNDresource_id is not a resource the token can see.
AUTHENTICATION_REQUIREDno authenticated user on the request.
TOKEN_MISSING_ABILITYtoken lacks project-recovery:create.
Take back the replacement request the creator has open on the connector. Takes no input.
A creator holds one replacement request at a time, whichever resource it was for, so there is nothing to name: the picker the bot sent stops waiting for an answer. When none is open the call changes nothing and still succeeds. Only the account holder may do this. The REST twin is DELETE /v1/projects/{project}/resources/{resource}/replacement/request.
Requires ability
The token behind the MCP session must hold it, or the call is refused with TOKEN_MISSING_ABILITY.
Runs the same action as
The REST endpoint and this tool share one action, so validation, permissions and events are identical.
Annotations
Sending the same arguments twice changes nothing the second time.
Arguments
This tool takes no arguments.
What it returns
{ "data": { "status": "withdrawn" }, "meta": {}}How it fails
VALIDATION_FAILEDthe token is not the account holder's.
AUTHENTICATION_REQUIREDno authenticated user on the request.
TOKEN_MISSING_ABILITYtoken lacks project-recovery:delete.
Take back the standby request the creator has open on the connector. Takes no input.
A creator holds one standby request at a time, whichever resource it was for, so there is nothing to name: the picker the bot sent stops waiting for an answer. When none is open the call changes nothing and still succeeds. Only the account holder may do this. The REST twin is DELETE /v1/projects/{project}/resources/{resource}/standby/request.
Requires ability
The token behind the MCP session must hold it, or the call is refused with TOKEN_MISSING_ABILITY.
Runs the same action as
The REST endpoint and this tool share one action, so validation, permissions and events are identical.
Annotations
Sending the same arguments twice changes nothing the second time.
Arguments
This tool takes no arguments.
What it returns
{ "data": { "status": "withdrawn" }, "meta": {}}How it fails
VALIDATION_FAILEDthe token is not the account holder's.
AUTHENTICATION_REQUIREDno authenticated user on the request.
TOKEN_MISSING_ABILITYtoken lacks project-recovery:delete.
How is this guide?