Skip to main content
Glama

Loyalist Reservations

Server Details

Book tables at restaurants on the Loyalist network. No login; read availability, then book.

If you are the author of this connector, you can claim ownership by verifying the domain or GitHub account it belongs to. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Uptime
100.0% over 22 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
ChatGPT
–
Claude
–

TDQS

A4.2/5.0

Scored across 5 tools

Disambiguation5/5

Each tool targets a distinct step in the reservation lifecycle: discovery (find_venues), availability lookup (get_availability), booking (book), read-back (get_reservation), and waitlist (join_waitlist). The descriptions explicitly draw the line between book and join_waitlist (a waitlist request 'is not a reservation'), so an agent is unlikely to misselect.

Naming Consistency4/5

Four of five names follow a clear verb_noun pattern (find_venues, get_availability, get_reservation, join_waitlist). The lone bare verb 'book' is a minor deviation but is unambiguous and readable in context.

Tool Count5/5

Five tools is well-scoped for a restaurant booking domain, with one tool per lifecycle stage and no redundant or filler operations. Each tool earns its place.

Completeness3/5

Discovery, availability, booking, read-back, and waitlist are covered, but there is no cancel or modify tool — the description admits a mistaken booking must be undone by the guest phoning the restaurant, which is a real dead end for an agent. The absence of any update/cancel path leaves a notable lifecycle gap.

Available Tools

5 tools
bookAInspect

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.
    
NameRequiredDescriptionDefault
noteNo
emailYes
phoneNo
sourceNo
slot_idYes
last_nameYes
first_nameYes

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.

find_venuesA
Read-onlyIdempotent
Inspect

Restaurants bookable through this network, and what each one's system supports.

    Returns every venue that has opted in, across restaurant groups. Two optional filters
    narrow it, never widen it: `signup_form_id` to one website's venues when you found an
    Orion signup embed on a restaurant's page, and `venue_id` to a single venue when
    you already have its loyalist-venue-id (off a page's markup or a ReserveAction entry
    point) and want just that one rather than listing them all and matching yourself.
    Neither can reach a venue that has not opted in.

    A venue with `bookable: false` has no reservation system connected and will return
    no availability.
    
NameRequiredDescriptionDefault
venue_idNo
signup_form_idNo

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds meaningful non-obvious behavior: opted-in-only coverage across groups, filters can never reach non-opted-in venues, and bookable=false means no reservation system and no availability.

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-loads the core purpose, then qualifies filters and the bookable caveat. The multi-line indented formatting is slightly heavier than needed, but every sentence contributes information about scope or semantics.

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?

With no output schema and no param descriptions in the schema, the description compensates well by describing what a result set contains, that it spans restaurant groups, and what bookable=false implies. It stops short of describing the full returned fields, but an agent has enough to call and interpret it.

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. It defines both parameters precisely, explains the narrowing scope of each, and even tells the agent where the venue_id value comes from (page markup or a ReserveAction entry point).

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 action and resource: returns every venue that has opted in across restaurant groups, with the bookable-network scope made explicit. It is immediately distinguishable from siblings like book, get_availability, and get_reservation, which are transactional rather than discovery tools.

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

Usage Guidelines4/5

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

Gives concrete when-to-use conditions for each filter: signup_form_id when you found an Orion signup embed, venue_id when you already have a loyalist-venue-id from markup or a ReserveAction entry point. It also states the filters only narrow, never widen. It does not explicitly name when to prefer a sibling tool over this one, so it falls short of a 5.

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

get_availabilityA
Read-onlyIdempotent
Inspect

Bookable times at one venue, on one date, for one party size.

    `date` is the venue's own local calendar date, `YYYY-MM-DD`. Each slot carries a
    `slot_id` to pass to book and a `starts_at` that is a full venue-local datetime, so
    a service running past midnight is unambiguous without you having to infer the day.

    An empty `slots` list means nothing is open on those terms, not that the venue is
    closed. Try a different time, party size or date before telling someone it is full.
    
NameRequiredDescriptionDefault
dateYes
venue_idYes
party_sizeYes

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already cover readOnly/idempotent/non-destructive, so the description wisely spends its budget on semantics: `date` is venue-local, `starts_at` is a full venue-local datetime to disambiguate post-midnight services, and an empty `slots` list means no availability rather than a closed venue. That last point materially changes how an agent reports results and is not derivable from any structured field.

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 the one-line purpose, then two tight paragraphs on date/slot semantics and empty-result handling. Every sentence adds value; slightly more prose than strictly needed, but no filler.

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 steps in to document the return shape (`slots`, `slot_id`, `starts_at`) and its empty-state meaning. Combined with annotation coverage of the safety profile, an agent has everything needed to call and interpret this tool.

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

Parameters3/5

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

Schema coverage is 0%, so the description carries the burden. It fully specifies `date` (venue-local, YYYY-MM-DD) but says nothing about `venue_id` format/source or any constraint on `party_size` (bounds, minimum). Partial compensation, so a mid score.

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 opening line states a specific verb (bookable times) and its exact scope: one venue, one date, one party size. It also names the sibling tool `book` as the consumer of the returned `slot_id`, so an agent can place it in the workflow without opening other schemas.

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

Usage Guidelines4/5

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

It gives clear context (call this before booking, pass `slot_id` to book) and an explicit interpretation rule for empty results, including a retry instruction. It stops short of naming alternative siblings (e.g. `join_waitlist`) for the empty case, leaving that inference to the agent.

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

get_reservationA
Read-onlyIdempotent
Inspect

Read one booking this credential made back from the venue.

    Use it to confirm a booking landed. A `status` of `pending` means the venue has not
    answered yet, not that it failed; treat anything you do not recognise as
    non-terminal rather than reporting a failure.
    
NameRequiredDescriptionDefault
reservation_idYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so safety is covered. The description adds genuinely useful semantics beyond that: 'pending' means unanswered, not failed, and unrecognized statuses should be treated as non-terminal. That prevents a real agent error.

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

Conciseness5/5

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

Two short, front-loaded sentences; the core purpose leads and the status caveat follows. No filler, every sentence earns its place.

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?

With no output schema, the description wisely pre-explains the ambiguous status field, which is the main thing an agent needs. The gap is the undocumented reservation_id argument, but otherwise the definition is complete for a simple read tool.

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

Parameters2/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 for the single required parameter, yet it never mentions reservation_id, where it comes from, or its expected format. The agent must infer provenance from the sibling 'book' tool.

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?

States a specific verb+resource ('Read one booking') and scopes it to bookings made by this credential. Clearly distinct from siblings like book and get_availability, though the phrase 'back from the venue' is slightly informal rather than precise.

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

Usage Guidelines4/5

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

Explicitly gives the use case ('Use it to confirm a booking landed') and adds interpretation guidance for status values. It does not name alternatives or state when not to use it, but the sibling set makes the intent unambiguous.

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

join_waitlistAInspect

Ask to be told if a table opens at a time the guest actually wants.

    This is not a reservation and never becomes one by itself. The venue contacts the
    guest if something frees up, so say that plainly rather than implying a table is
    held.

    Offer it whenever the guest cannot get a time that suits them, which is far more
    often than a venue being completely full: someone who wants 7:30 and is offered
    5:00 or 9:45 may well prefer to wait for 7:30. An empty get_availability is only
    the most obvious case. Try other times, party sizes and dates first, then ask
    whether they would rather wait than take a time that does not work. Record what
    they wanted in `time_range`, not the time you found.

    `date` is the venue's own local calendar date, `YYYY-MM-DD`. `time_range` is
    required and is the window in the guest's words, like "7:00 PM - 9:00 PM" or
    "7:00 PM"; ask the guest for it rather than guessing, because the venue works the
    list by when people wanted to come. The email address is where the confirmation
    goes, so it must be the guest's own.

    Not every venue accepts these. One that does not refuses with a message saying so,
    which is an answer, not an error to retry.

    There is no reference number to give the guest, so the response is the only record
    either of you gets. Confirm it back to them by the restaurant, date and time.

    Mention the confirmation email only when `confirmation_sent` is true. When it is
    false the request is still on the venue's list, the note simply did not go out, so
    say they are on the list and that no email is coming rather than promising one.
    
NameRequiredDescriptionDefault
dateYes
emailYes
notesNo
phoneNo
venue_idYes
last_nameYes
first_nameYes
party_sizeYes
time_rangeYes

TDQS

A4.5/5.0
Behavior5/5

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

Annotations only declare readOnlyHint=false, openWorldHint=true, idempotentHint=false and destructiveHint=false; the description adds substantive context beyond that: no reference number is issued, the response is the only record, venue refusal is a valid answer rather than a retryable error, and it explains the confirmation_sent=true/false outcomes and what to tell the guest in each case. This is exactly the behavioural disclosure annotations cannot carry.

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?

The purpose and the 'not a reservation' caveat are front-loaded, and most sentences carry operational guidance that earns its place. It is nonetheless long for the payload, with some repetition around the reservation framing ('not a reservation', 'rather than implying a table is held') that could be tightened.

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?

With no output schema, the description does the work of explaining the return semantics (confirmation_sent, absence of a reference number) and the failure mode (venue refuses). For a mutating, non-idempotent tool it omits any warning about duplicate join attempts and says nothing about notes/phone, but overall an agent has enough to call and report correctly.

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

Parameters3/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. It does cover date format ('venue's own local calendar date, YYYY-MM-DD'), time_range requiredness, sourcing and syntax examples, and that email must be the guest's own, but venue_id, party_size, first_name, last_name, notes and phone receive no explanation at all. Useful but clearly incomplete compensation for a 9-parameter 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?

The opening states a specific verb and resource (ask to be told if a table opens) and the second sentence explicitly negates the nearest sibling behaviour: 'This is not a reservation and never becomes one by itself.' An agent can distinguish this from book and get_availability without opening either 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?

It gives explicit when-to-use guidance ('Offer it whenever the guest cannot get a time that suits them'), names the obvious trigger (an empty get_availability) and immediately widens it, and prescribes an ordering of alternatives: try other times, party sizes and dates first. It also states what to record and what to ask the guest, which is more than any sibling description would supply.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 5 tool updates
    • First observedbook
    • First observedfind_venues
    • First observedget_availability
    • First observedget_reservation
    • First observedjoin_waitlist

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    B
    maintenance
    Enables customers and AI agents to check restaurant table availability and create bookings, returning confirmations or nearby alternative times when a slot is full, with atomic capacity control and idempotent handling.
    -
  • A
    license
    A
    quality
    D
    maintenance
    Enables restaurant discovery and reservations across multiple providers (Resy, Google Places, Yelp, Tock) with auditable and secure two-step booking.
    10
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables AI agents and clients to check table availability and book restaurant reservations for a given date, time, and party size, returning either a confirmed booking or the nearest alternative slots. It also supports idempotent retries so replayed requests return the original reservation rather than double-booking a table.
    -
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources