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
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*stringUUID 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_FOUNDunknown project_id, a project belonging to another team, one outside the
VALIDATION_FAILEDthe caller is a team member whose role lacks the team's project-delete
AUTHENTICATION_REQUIREDno authenticated user on the request.
TOKEN_MISSING_ABILITYtoken lacks project:delete.
How is this guide?
Last updated on