Version
DESTRUCTIVE

deactivate_resource

Switch a project resource off without touching the plans that sell it. Reversible with activate_resource. Emits project.resource.updated when the switch flips.

Pause one channel or group without editing a single plan. While a resource is off the bot stops offering and granting it, and the plans that link it keep selling everything else they include. The link itself is untouched, which is what makes this reversible: activate_resource brings it back exactly as it was.

The safe alternative to delete_resource

delete_resource removes the row for good and every plan loses the link. Switching off keeps the row, the link and the connector binding. Reach for it for maintenance, a channel being reorganised, or anything you might want back.

Runs the same Action the dashboard and the REST API use. project.resource.updated emits once, carrying changes.active from true to false, and only when the switch actually flips. Re-calling on a resource that is already off is a no-op: the current row comes back and nothing emits.

Requires ability

The token behind the MCP session must hold it, or the call is refused with TOKEN_MISSING_ABILITY.

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

DestructiveIdempotent

A client that honours annotations asks a person before running it. Sending the same arguments twice changes nothing the second time.

Arguments

resource_id*string

UUID of the resource to switch off.

What it returns

{  "data": {    "id": "b73c5f21-9d80-4a6e-8215-4f70ce13a9d6",    "project_id": "7f3d1c92-8b45-4e6a-9d21-5c8e0a4b6f13",    "kind": "telegram:channel",    "connector": "telegram",    "space": {      "id": "3c1f7a58-2b6e-4d90-8f41-6a2e9c5d7b10",      "external_id": "-1001234567890",      "title": "Research Channel"    },    "title": "Research Channel",    "description": null,    "active": false,    "created_at": "2026-05-18T10:05:00+00:00",    "updated_at": "2026-09-06T08:30:12+00:00"  }}

The full get_resource row, with active: false. space is kept — the binding survives the switch.

How it fails

VALIDATION_FAILED

the caller is a team member whose role lacks the team's resource-update

RESOURCE_NOT_FOUND

unknown resource_id, a resource on another team's project, or one outside

AUTHENTICATION_REQUIRED

no authenticated user on the request.

TOKEN_MISSING_ABILITY

token lacks project-resource:update.

How is this guide?

Last updated on