Skip to main content
Glama

Read, cancel or reschedule one booking with its cancel token

ic_scheduling_manage_booking

The way OUT of a booking, and it is first-class on purpose: an agent that has to ask its human to click a link in an email simply ghosts, and no-shows are the failure mode that actually burns members' time. NO TOKEN REQUIRED — the booking's own cancel_token IS the credential, exactly as a form's claim token is for an account-less submitter. Putting the exit behind an IC account nobody was issued is how a person ends up emailing a human to be removed. Authorization has not been skipped, it has MOVED into the resource: the token is checked in constant time and a WRONG token gives the SAME answer as a missing booking (not_found), so this cannot be used to discover which booking ids exist. action:read returns the booking's current state. action:cancel is idempotent — cancelling an already-cancelled booking is a SUCCESS, not an error, so a retry after a dropped response does not look like a failure. action:reschedule NEEDS start. A refused move leaves the original booking untouched: the release and the new booking are one transaction, so an error means nothing changed and you may try another slot. Confirm cancel and reschedule with your human first; both are visible to the member immediately. booking.id in a reschedule response is NEW and is the one to keep; cancel_token is unchanged. Reading the OLD id with the same token returns the LIVE booking (booking.id is the new id) plus superseded{id,start,end,rescheduled_by} naming the booking you asked for, so a saved manage link keeps working after the owner moves the meeting. action:read is also how you wait for a Google Meet link: calendar.meet_link.status pending -> ready (location_url is the link) or failed/none (no link is coming); poll no faster than every 2 seconds, for at most 90 seconds. Args: { booking_id, cancel_token, action, start?, reason?, idempotency_key? }. Returns: { ok, booking{id,status,start,end,cancel_token,cancelled_by,rescheduled_by,rescheduled_to}, superseded?{id,start,end,rescheduled_by}, member, meeting_type, location_url, ics, calendar{status,meet_link{status,reason,retrying}} } or { ok:false, error_kind } from not_found | slot_taken | outside_window | too_soon | rate_limited | validation | transient. No auth required.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
startNoRequired for action:reschedule. An ISO-8601 slot start from a FRESH ic_scheduling_get_availability call — the old response is stale the moment anyone else books.
actionYesread is safe and repeatable. cancel and reschedule change a real person's calendar — confirm with your human first.
reasonNoOptional, for action:cancel. The member sees it; it is the difference between a cancellation and a ghosting.
booking_idYesThe booking's id, from the confirm response's booking.id.
cancel_tokenYesFrom booking.cancel_token on the confirm response, or the manage link inside the .ics your human saved. It is the only credential for this booking.
idempotency_keyNo8-128 chars of [A-Za-z0-9._:-]. Required by the service on a reschedule; minted here if you omit it. Bring your own and reuse it on retry.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Added

TDQS

A4.2/5.0
Behavior4/5

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

Without needing annotations it discloses credential semantics (token IS the credential; wrong token returns not_found so ids can't be probed), cancel idempotency, reschedule atomicity ('an error means nothing changed'), and it never skips authorization, only moves it into the resource. The one mismatch is that annotations declare idempotentHint=false while the description says action:cancel is idempotent — defensible at tool level since reschedule mutates, but it is a nuance the reader must reconcile.

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?

Almost every sentence carries operational payload, but it is delivered as a dense wall of prose with rhetorical asides ('ghosts', 'burns members' time', 'emails a human to be removed') and the purpose is not front-loaded. The size is larger than the task requires; a structured list of auth model / per-action behavior / errors would read far faster.

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

Completeness5/5

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

With no output schema, the description carries return-shape duty and does so: it documents booking/superseded/cancel_token fields, the NEW-id-after-reschedule rule, meet_link status transitions, and the full error_kind set (not_found, slot_taken, outside_window, too_soon, rate_limited, validation, transient). Nothing an agent needs to call or interpret this tool is missing.

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 already 100%, so the baseline is 3; the description earns a step above by explaining parameter interplay the schema cannot — that start must come from a fresh availability call because responses go stale, that idempotency_key is minted server-side if omitted but should be reused on retry, and that reason is member-visible. It still largely restates the arg list.

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

Purpose4/5

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

The title and body state a specific verb set (read/cancel/reschedule) on a specific resource (one booking) keyed by cancel_token, and the actions are enumerated explicitly. It is distinguishable from siblings and even names ic_scheduling_get_availability as the source of a reschedule slot. Marks off only because the body opens with rhetorical framing ('The way OUT of a booking...') instead of the operational statement the title already gives.

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?

Explicit 'when' rules throughout: confirm cancel and reschedule with your human first, reschedule needs a start from a FRESH availability call, poll meet_link no faster than every 2s for at most 90s, reuse idempotency_key on retry. It also states which action is safe/repeatable versus which mutates a real calendar.

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.