Version
DESTRUCTIVE

delete_project

Permanently delete a project and everything beneath it. No soft-delete, no undo — confirm the target with a human first.

Remove a project for good. Projects do not soft-delete: the row goes, and its plans, subscribers, subscriptions, resources, coupons, payment methods and support threads go with it through database cascades. The tool is for the genuinely finished project — a pilot that ran its course, a duplicate created by mistake — never for pausing sales.

Irreversible, and it takes everything with it

There is no restore for a deleted project; restore_project only reverses an archive. Confirm the exact project_id with a human before calling. The tool is annotated destructive so a client can prompt for confirmation.

Stopping sales is a different tool

To keep the history while turning new signups off, call archive_project. Existing subscribers keep their access and the project comes back with restore_project.

project.deleted emits before the row disappears, so a webhook listener receives the final snapshot — id, name, handle, active flag and team — while those ids still resolve. It is the last event the project will ever produce.

Idempotent in the only sense a hard delete can be: a second call on the same id finds nothing and answers RESOURCE_NOT_FOUND, exactly as an unknown or out-of-scope id does.

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

DestructiveIdempotentOpen world

A client that honours annotations asks a person before running it. Sending the same arguments twice changes nothing the second time. It reaches beyond Subscriby: a connector, a provider or a member.

Arguments

project_id*string

UUID of the project to delete permanently.

What it returns

{  "data": {    "id": "7f3d1c92-8b45-4e6a-9d21-5c8e0a4b6f13",    "deleted": true  }}

id echoes the argument as sent; by the time the response is built there is no row left to read it back from.

How it fails

RESOURCE_NOT_FOUND

unknown project_id, a project belonging to another team, one outside the

VALIDATION_FAILED

the caller is a team member whose role lacks the team's project-delete

AUTHENTICATION_REQUIRED

no authenticated user on the request.

TOKEN_MISSING_ABILITY

token lacks project:delete.

How is this guide?

Last updated on