Skip to main content
Glama

Cancel a booking

cancel_booking
Destructive

Cancels a booking or declines a request (two steps; then the customer is emailed). A waitlist entry_id (wl_…) takes that person off; a class_id (cl_…) cancels the class, one email each. A paid booking is refunded in full unless refund says otherwise (approve_url).

Input Schema

NameRequiredDescriptionDefault
siteYes
refundNoPaid booking; default full
seriesNo"this" (default) or "rest" (this date and every later one)
item_idYes
messageNoA note for the customer
plugin_idNoDefault: booking page
confirm_tokenNo
notify_customerNoEmail the customer (default true)

Output Schema

NameRequiredDescriptionDefault
agent_messageNo
confirm_tokenNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / refund / description
      Previous value: -"A paid booking (default full; returns a refund approve link)"New value: +"Paid booking; default full"
  2. Changed1 schema field changed
    • removedInput schema / properties / item_id / description
      Removed value: -"From get_lists"
  3. Changed3 schema fields changed
    • removedInput schema / properties / confirm_token / description
      Removed value: -"After the user's yes"
    • changedInput schema / properties / plugin_id / description
      Previous value: -"Default: the booking page"New value: +"Default: booking page"
    • addedInput schema / properties / refund
      Added value: +{
      +  "description": "A paid booking (default full; returns a refund approve link)",
      +  "enum": [
      +    "full",
      +    "deposit_kept",
      +    "none"
      +  ],
      +  "type": "string"
      +}
  4. Changed2 schema fields changed
    • removedInput schema / properties / site / description
      Removed value: -"Site name"
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "properties": {
      +    "agent_message": {
      +      "type": "string"
      +    },
      +    "confirm_token": {
      +      "type": "string"
      +    }
      +  },
      +  "type": "object"
      +}
  5. Changed7 schema fields changed
    • removedInput schema / additionalProperties
      Removed value: -{}
    • changedInput schema / properties / confirm_token / description
      Previous value: -"From the first call, after the user's yes"New value: +"After the user's yes"
    • removedInput schema / properties / message / maxLength
      Removed value: -500
    • changedInput schema / properties / notify_customer / description
      Previous value: -"Email the customer (default true when there is an email)"New value: +"Email the customer (default true)"
    • changedInput schema / properties / plugin_id / description
      Previous value: -"Default: the site's booking page"New value: +"Default: the booking page"
    • changedInput schema / properties / site / description
      Previous value: -"Site name, e.g. brave-otter-4821"New value: +"Site name"
    • changedOutput schema / (root)
      Previous value: -{
      -  "additionalProperties": {},
      -  "properties": {
      -    "agent_message": {
      -      "type": "string"
      -    },
      -    "confirm_token": {
      -      "type": "string"
      -    },
      -    "error": {
      -      "description": "On failure (isError): {code, message}"
      -    }
      -  },
      -  "type": "object"
      -}New value: +null
  6. Changed6 schema fields changed
    • addedInput schema / additionalProperties
      Added value: +{}
    • removedInput schema / properties / close_waitlist
      Removed value: -{
      -  "description": "A class booking: nobody waiting is offered the place; they are told no place will open",
      -  "type": "boolean"
      -}
    • changedInput schema / properties / item_id / description
      Previous value: -"From list_plugin_data"New value: +"From get_lists"
    • changedInput schema / properties / plugin_id / description
      Previous value: -"From list_plugins"New value: +"Default: the site's booking page"
    • removedInput schema / properties / whole_class
      Removed value: -{
      -  "description": "A class booking: cancel this class time for everyone booked in, in one step",
      -  "type": "boolean"
      -}
    • changedInput schema / required
      Previous value: -[
      -  "site",
      -  "plugin_id",
      -  "item_id"
      -]New value: +[
      +  "site",
      +  "item_id"
      +]
  7. Changed1 schema field changed
    • addedInput schema / properties / whole_class
      Added value: +{
      +  "description": "A class booking: cancel this class time for everyone booked in, in one step",
      +  "type": "boolean"
      +}
  8. Changed1 schema field changed
    • addedInput schema / properties / close_waitlist
      Added value: +{
      +  "description": "A class booking: nobody waiting is offered the place; they are told no place will open",
      +  "type": "boolean"
      +}
  9. Added

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare the destructive, non-idempotent, open-world profile, so the bar is lower; the description still adds real context — that cancellation is a two-step flow that emails the customer, one email per action, and that a paid booking is refunded in full by default. It stops short of spelling out irreversibility or permission requirements, but the side effects are well disclosed.

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

Conciseness4/5

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

Dense and front-loaded — the core action and its two branches lead, with consequences trailing. The trailing '(approve_url)' is cryptic and slightly muddies the close, keeping it from a 5.

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?

For a destructive, non-idempotent mutation with 8 params, the description covers the consequences an agent most needs (email side effect, refund policy, two-step flow), and an output schema exists so return values needn't be explained. Minor gaps remain around series scope and the confirm_token purpose.

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 63%, and the description compensates for the biggest gap by explaining that item_id accepts either a waitlist wl_ id or a class cl_ id and what each does. It also confirms the refund default, though it leaves series, message, plugin_id, and confirm_token unaddressed beyond the schema.

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?

States a specific verb and resource ('Cancels a booking or declines a request') and immediately qualifies the resource variants: a wl_ entry_id removes a waitlist person, a cl_ class_id cancels the class. That level of specificity lets an agent distinguish this from edit_booking or approve_booking without opening a schema.

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

Usage Guidelines3/5

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

The description gives conditional behavior tied to item_id prefixes, which implicitly tells the agent which mode applies, but it never names an alternative tool or states when to prefer approve_booking, refuse_order, or edit_booking instead. Usage is inferable rather than explicit.

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.

Resources