Upgrade plan
upgrade_planReturns a one-click checkout link for a plan. Ask the user which plan; never choose for them.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| plan | Yes | Plan slug from list_plans | |
| organizationId | No | Approved workspace id only. |
upgrade_planReturns a one-click checkout link for a plan. Ask the user which plan; never choose for them.
| Name | Required | Description | Default |
|---|---|---|---|
| plan | Yes | Plan slug from list_plans | |
| organizationId | No | Approved workspace id only. |
Changes observed during successful MCP inspections.
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations mark this as non-read-only, non-idempotent and non-destructive, and the description usefully clarifies why: the call generates a checkout link rather than executing a purchase, so the write is deferred to the user. That resolves what the readOnlyHint=false would otherwise leave ambiguous. It omits whether the link expires, is single-use, or what it costs to invoke repeatedly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences and zero filler. The return-value statement comes first and the usage constraint immediately follows, so both the what and the how are front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description does the right thing by saying the return value is a checkout link. Annotations cover the safety profile and the schema is fully documented, so the remaining gap is minor: nothing about failure modes such as a workspace already being subscribed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both the plan slug source (list_plans) and the organizationId constraint are already documented in the schema. The description reinforces the plan parameter by requiring the user to pick it, but adds nothing about organizationId or valid slug format. Baseline 3 applies when the schema carries the semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: it returns a one-click checkout link for a plan. That is concrete enough to separate it from list_plans, which only enumerates plans. It stops short of naming the sibling it differs from (list_plans for the slug, manage_subscription for the billing action), so an agent must infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"Ask the user which plan; never choose for them" is an explicit precondition and a prohibition on agent autonomy, which is the most important usage rule for a purchase-adjacent tool. It gives no guidance on when not to use it (e.g. an already-subscribed workspace) or which sibling to call for billing changes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Add one secure layer between your agents and this server.