Skip to main content
Glama

Get a paid-plan checkout link

get_upgrade_link

Creates a Stripe Checkout URL that upgrades this token's owner to Hobby ($3/mo) or Pro ($15/mo). Call it when the user asks to upgrade, or right after a tool error that has upgrade_url / user_message (a plan limit). Show the returned upgrade_url (a 30-day link that opens Stripe Checkout; checkout_url is the raw Stripe page and lasts 24 hours) or user_message, and the price, to the user. Calling it again while a checkout is open returns the same session (session_reused: true); normally the human opens it and pays. You may complete the payment yourself only if your human explicitly approved this purchase and you have a payment tool they approved. Never pay without that approval. When payment completes the same token gets the higher limits automatically, and the token's plan (plan.id) then reads hobby or pro. Inputs: plan (hobby or pro; omitted means the next plan up), token, optional how_heard (at most 200 characters, stored on the owner), and optional upgrade_trigger (the limit field from the error, custom_domain_limit, or manual). The result also lists plan_options: Hobby and Pro, monthly and yearly where available, each with its price, limits, and own 30-day link, for a human who wants to choose. A token already on a paid plan gets portal_url instead (a Hobby token asking for Pro also gets Pro's price and limits). plan=clean with slug instead returns a $9 one-time checkout (no subscription) that removes the "Published with deed.page" badge from that one site for good and raises its size limit to 100 MB; it suits a user who wants one clean site rather than a plan. The call itself does not charge. Which plan: Free is $0 and fine for drafts and quick shares. When the page is for other people (a client, a launch, a portfolio, a shop), tell your human once that the "Published with deed.page" badge comes off with a one-time $9 clean publish for that site, or with Hobby ($3/mo or $30/year) on every site. Recommend Hobby to remove the badge everywhere, set a site password, or go past Free limits (up to 250 sites, 100 MB per site, 3 custom domains, 100 GB transfer a month). Recommend Pro ($15/mo or $150/year) only when your human needs agent seats (up to 5), analytics beyond 90 days (up to 365) or CSV export, more than 100 MB per site (up to 500 MB), more than 3 custom domains (up to 20), or up to 500 GB transfer a month (fair use; every plan has a monthly transfer cap). Pro also includes priority email support at ops@avatar33.com, answered by the next business day. Platforms publishing for many end users: https://deed.page/platforms. Your human can manage billing at https://deed.page/account with the owner token.

Input Schema

NameRequiredDescriptionDefault
planNoPlan to buy. Omit for the next plan above the current one (Free -> hobby, Hobby -> pro). "clean" is the $9 one-time clean publish for one site and needs slug.
slugNoWith plan=clean: the site (slug) to publish without the badge. It must belong to this token.
tokenNoBearer token returned by your first publish (deed_tok_...). Optional if the MCP client sends Authorization: Bearer.
intervalNoBilling period for hobby or pro. Default month. year is Hobby $30/year or Pro $150/year (two months free).
how_heardNoOptional note, at most 200 characters. Stored on the owner.
upgrade_triggerNoThe limit field of the plan-limit error that sent you here (for example publish_rate or quota_sites), custom_domain_limit, or manual.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / upgrade_trigger / enum
      Previous value: -[
      -  "manual",
      -  "custom_domain_limit",
      -  "quota_sites",
      -  "quota_bytes",
      -  "publish_rate",
      -  "quota_domains",
      -  "webhook_limit",
      -  "plan_required",
      -  "share_credit",
      -  "size_warning",
      -  "badge_removal",
      -  "badge_month_expiring",
      -  "badge_month_expired",
      -  "agent_seats",
      -  "analytics_range",
      -  "analytics_csv",
      -  "visit_range",
      -  "custom_domain",
      -  "real_visitors",
      -  "checkout_expired"
      -]New value: +[
      +  "manual",
      +  "custom_domain_limit",
      +  "quota_sites",
      +  "quota_bytes",
      +  "publish_rate",
      +  "quota_domains",
      +  "webhook_limit",
      +  "plan_required",
      +  "share_credit",
      +  "size_warning",
      +  "badge_removal",
      +  "badge_month_expiring",
      +  "badge_month_expired",
      +  "agent_seats",
      +  "analytics_range",
      +  "analytics_csv",
      +  "visit_range",
      +  "custom_domain",
      +  "real_visitors",
      +  "checkout_expired",
      +  "domain_attach",
      +  "www_denied",
      +  "hobby_domain_cap",
      +  "size_limit",
      +  "visitors_100"
      +]
  2. Changed1 schema field changed
    • changedInput schema / properties / upgrade_trigger / enum
      Previous value: -[
      -  "manual",
      -  "custom_domain_limit",
      -  "quota_sites",
      -  "quota_bytes",
      -  "publish_rate",
      -  "quota_domains",
      -  "webhook_limit",
      -  "plan_required",
      -  "share_credit",
      -  "size_warning",
      -  "badge_removal",
      -  "badge_month_expiring",
      -  "badge_month_expired",
      -  "agent_seats",
      -  "analytics_range",
      -  "analytics_csv",
      -  "visit_range"
      -]New value: +[
      +  "manual",
      +  "custom_domain_limit",
      +  "quota_sites",
      +  "quota_bytes",
      +  "publish_rate",
      +  "quota_domains",
      +  "webhook_limit",
      +  "plan_required",
      +  "share_credit",
      +  "size_warning",
      +  "badge_removal",
      +  "badge_month_expiring",
      +  "badge_month_expired",
      +  "agent_seats",
      +  "analytics_range",
      +  "analytics_csv",
      +  "visit_range",
      +  "custom_domain",
      +  "real_visitors",
      +  "checkout_expired"
      +]
  3. Changed1 schema field changed
    • addedInput schema / properties / interval
      Added value: +{
      +  "description": "Billing period for hobby or pro. Default month. year is Hobby $30/year or Pro $150/year (two months free).",
      +  "enum": [
      +    "month",
      +    "year"
      +  ],
      +  "type": "string"
      +}
  4. Changed1 schema field changed
    • changedInput schema / properties / upgrade_trigger / enum
      Previous value: -[
      -  "manual",
      -  "custom_domain_limit",
      -  "quota_sites",
      -  "quota_bytes",
      -  "publish_rate",
      -  "quota_domains",
      -  "webhook_limit",
      -  "plan_required",
      -  "share_credit",
      -  "size_warning",
      -  "badge_removal",
      -  "badge_month_expiring",
      -  "badge_month_expired",
      -  "agent_seats",
      -  "analytics_range",
      -  "analytics_csv"
      -]New value: +[
      +  "manual",
      +  "custom_domain_limit",
      +  "quota_sites",
      +  "quota_bytes",
      +  "publish_rate",
      +  "quota_domains",
      +  "webhook_limit",
      +  "plan_required",
      +  "share_credit",
      +  "size_warning",
      +  "badge_removal",
      +  "badge_month_expiring",
      +  "badge_month_expired",
      +  "agent_seats",
      +  "analytics_range",
      +  "analytics_csv",
      +  "visit_range"
      +]
  5. Changed3 schema fields changed
    • changedInput schema / properties / plan / description
      Previous value: -"Plan to buy. Omit for the next plan above the current one (Free -> hobby, Hobby -> pro)."New value: +"Plan to buy. Omit for the next plan above the current one (Free -> hobby, Hobby -> pro). \"clean\" is the $9 one-time clean publish for one site and needs slug."
    • changedInput schema / properties / plan / enum
      Previous value: -[
      -  "hobby",
      -  "pro"
      -]New value: +[
      +  "hobby",
      +  "pro",
      +  "clean"
      +]
    • addedInput schema / properties / slug
      Added value: +{
      +  "description": "With plan=clean: the site (slug) to publish without the badge. It must belong to this token.",
      +  "type": "string"
      +}
  6. Changed1 schema field changed
    • changedInput schema / properties / upgrade_trigger / enum
      Previous value: -[
      -  "manual",
      -  "custom_domain_limit",
      -  "quota_sites",
      -  "quota_bytes",
      -  "publish_rate",
      -  "quota_domains",
      -  "webhook_limit",
      -  "plan_required",
      -  "share_credit",
      -  "size_warning"
      -]New value: +[
      +  "manual",
      +  "custom_domain_limit",
      +  "quota_sites",
      +  "quota_bytes",
      +  "publish_rate",
      +  "quota_domains",
      +  "webhook_limit",
      +  "plan_required",
      +  "share_credit",
      +  "size_warning",
      +  "badge_removal",
      +  "badge_month_expiring",
      +  "badge_month_expired",
      +  "agent_seats",
      +  "analytics_range",
      +  "analytics_csv"
      +]
  7. Changed1 schema field changed
    • changedInput schema / properties / upgrade_trigger / enum
      Previous value: -[
      -  "manual",
      -  "custom_domain_limit",
      -  "quota_sites",
      -  "quota_bytes",
      -  "publish_rate",
      -  "quota_domains",
      -  "webhook_limit",
      -  "plan_required"
      -]New value: +[
      +  "manual",
      +  "custom_domain_limit",
      +  "quota_sites",
      +  "quota_bytes",
      +  "publish_rate",
      +  "quota_domains",
      +  "webhook_limit",
      +  "plan_required",
      +  "share_credit",
      +  "size_warning"
      +]
  8. Changed4 schema fields changed
    • changedInput schema / properties / plan / description
      Previous value: -"Plan to buy."New value: +"Plan to buy. Omit for the next plan above the current one (Free -> hobby, Hobby -> pro)."
    • changedInput schema / properties / upgrade_trigger / description
      Previous value: -"custom_domain_limit when the domain limit sent you here. Otherwise manual."New value: +"The limit field of the plan-limit error that sent you here (for example publish_rate or quota_sites), custom_domain_limit, or manual."
    • changedInput schema / properties / upgrade_trigger / enum
      Previous value: -[
      -  "custom_domain_limit",
      -  "manual"
      -]New value: +[
      +  "manual",
      +  "custom_domain_limit",
      +  "quota_sites",
      +  "quota_bytes",
      +  "publish_rate",
      +  "quota_domains",
      +  "webhook_limit",
      +  "plan_required"
      +]
    • changedInput schema / required
      Previous value: -[
      -  "plan"
      -]New value: +[]
  9. Changed2 schema fields changed
    • addedInput schema / properties / how_heard
      Added value: +{
      +  "description": "Optional note, at most 200 characters. Stored on the owner.",
      +  "type": "string"
      +}
    • addedInput schema / properties / upgrade_trigger
      Added value: +{
      +  "description": "custom_domain_limit when the domain limit sent you here. Otherwise manual.",
      +  "enum": [
      +    "custom_domain_limit",
      +    "manual"
      +  ],
      +  "type": "string"
      +}
  10. First observed

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations say readOnlyHint=false and openWorldHint=true, so this is a mutating external call. The description adds substantial context beyond the annotations: the call itself does not charge, an open checkout returns the same session (session_reused:true), upgrade_url lasts 30 days while checkout_url lasts 24 hours, paid-plan tokens return portal_url, and the token's plan.id updates after payment. The 100% schema coverage means the description's extra behavioral detail matters more than restating input params.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The key trigger and safety rule (never pay without approval) come first, which is good, but the description runs long and mixes core mechanics with marketing copy (platform link, support email, detailed plan-limit lists). The plan-comparison section is useful, yet the density makes it hard to scan and some of the badge and Pro benefits text feels padded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

There is no output schema, so the description must describe returns: upgrade_url, checkout_url, session_reused, portal_url, plan_options, and the token's plan.id afterward. It does this, leaving little ambiguity for an agent, though the sheer volume means some edge behavior (e.g., what happens if token and slug mismatch) is only implied.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3, but the description still adds meaning: omitted plan means the next plan up, plan=clean requires slug because it is a $9 one-time per-site purchase, how_heard maxes at 200 characters and is stored on the owner, and upgrade_trigger should carry the limit field from the error. These details make the enum/optional behavior more actionable than the schema alone.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: "Creates a Stripe Checkout URL that upgrades this token's owner to Hobby ($3/mo) or Pro ($15/mo)." It also covers the clean-publish variant and clearly separates this tool from siblings like set_badge or publish_site.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It states exactly when to call (user asks to upgrade, or after a plan-limit error with upgrade_url/user_message), when not to pay without explicit human approval, and the alternatives: portal_url for already-paid tokens, and plan=clean for a one-site badge removal versus hobby/pro subscriptions. It also gives plan-recommendation logic (Hobby vs Pro) so the agent can choose.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.