Version
DESTRUCTIVE

publish_plan

Publish or unpublish a subscription plan by flipping its active flag. Emits plan.activated or plan.deactivated.

Toggle a plan's active flag. Active plans are purchasable and listed on the portal; inactive plans stay on the books but hide from new buyers. Noop when the plan is already in the requested state.

Free plans can only be published on a paid plan

A plan priced at 0 can only be sold on the Starter and Growth plans. On the Free plan the call is refused with TEAM_TIER_REQUIRED and the plan stays off sale — give it a price first, or upgrade the creator.

Unpublishing is always allowed whatever the price, so a plan can always be wound down.

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

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

plan_id*string

UUID of the plan to flip.

activebooleanoptional

Target state — true publishes, false unpublishes. Defaults to true.

What it returns

{  "data": {    "id": "c4e82f16-93a7-4d5b-b81c-6e0f27a94d3b",    "active": true  }}

How it fails

RESOURCE_NOT_FOUND

unknown plan_id, or the plan belongs to a team outside the token's scope.

TOKEN_MISSING_ABILITY

token lacks project-subscription-plan:update.

TEAM_TIER_REQUIRED

active=true on a plan priced at 0 while the creator is on the Free plan. error.context.reason carries the remedy: price the plan, or upgrade the creator to Starter or Growth.

How is this guide?

Last updated on