Skip to main content
Glama

Loyalist Reservations

book

Book a table. This takes a real table at a real restaurant.

    Pass a `slot_id` from get_availability. Confirm the venue, date, time and party size
    with the person before calling this, and do not call it speculatively: there is no
    cancel tool, so a booking made by mistake has to be undone by the guest phoning the
    restaurant.

    Calling it twice with identical arguments is safe and returns the same reservation
    rather than taking a second table. Changing the slot or the guest makes it a
    different booking, so re-read availability rather than editing the arguments to
    "retry".

    `phone` is optional here but required by some venues; omitting it can come back as
    `guest_field_required`. `note` reaches the restaurant as the reservation's note.

    `source` is where you found this venue: if the restaurant's own website told you a
    value to pass (in its markup or llms.txt), send it here so the restaurant can see its
    own site drove the booking. Leave it out if you did not arrive through one.

    `reservation_id` is for your own use, to read the booking back with get_reservation.
    It is not a confirmation number the venue knows, so do not read it out to the guest:
    tell them the restaurant, date, time and party size instead.
    

Input Schema

NameRequiredDescriptionDefault
noteNo
emailYes
phoneNo
sourceNo
slot_idYes
last_nameYes
first_nameYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observed

TDQS

A4.3/5.0
Behavior2/5

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

The description adds substantial real behavioral context beyond the annotations: there is no cancel tool, a mistaken booking must be undone by the guest phoning the venue, `phone` can fail with `guest_field_required`, and `reservation_id` is not a venue-known confirmation number. However, it states that 'calling it twice with identical arguments is safe and returns the same reservation rather than taking a second table', which asserts idempotent behavior while the annotation declares idempotentHint=false. That is a direct conflict with one hint, though the remaining hints (readOnlyHint=false, openWorldHint=true, destructiveHint=false) are consistent with the text.

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?

Front-loaded with purpose, then paragraph-per-concern (preconditions, idempotency, optional fields, identifier usage) with no filler sentences. It is on the long side for a tool description, but the length is justified by 7 parameters at 0% schema coverage and by genuinely non-obvious constraints.

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?

No output schema exists, yet the description still tells the agent what it gets back conceptually (a reservation, readable via get_reservation) and what to tell the guest instead of the reservation_id. Preconditions, failure modes, irreversibility and retry behavior are all covered, so an agent has what it needs to call this correctly.

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

Parameters5/5

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

Schema description coverage is 0%, so the description carries the full burden, and it does: `phone` (optional here, required by some venues, error guest_field_required), `note` (reaches the restaurant as the reservation note), `source` (attribution back to the venue's own site/llms.txt, with an explicit omit condition), and `reservation_id` (for get_reservation read-back, explicitly not guest-facing). Only first/last/email are left implicit, and they are self-evident.

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?

Opens with a specific verb+resource ('Book a table') and immediately scopes it ('takes a real table at a real restaurant'), which cleanly separates it from find_venues, get_availability and get_reservation. It even names the upstream dependency (slot_id from get_availability), so an agent can place it in the flow 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 Guidelines5/5

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

Gives explicit preconditions ('Confirm the venue, date, time and party size with the person before calling'), an explicit prohibition ('do not call it speculatively'), and the correct recovery path when arguments need to change ('re-read availability rather than editing the arguments to "retry"'). The when-not guidance is tied to a concrete consequence (no cancel tool).

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