Skip to main content
Glama

Server Details

Restaurant menus, carts, reservations and owner drafts for AI agents (Thmenu MCP).

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-03-26
URL

TDQS

A3.7/5.0

Scored across 27 tools

Disambiguation4/5

Most tools target distinct resources or actions, and the long descriptions explicitly separate ordering flows, reservations, loyalty, and owner tools. However, boundaries blur slightly around create_cart vs start_order_session (two ways to begin ordering), get_restaurant vs search_restaurants vs list_public_menus (directory lookups), and apply_promo vs place_order (preview vs actual application).

Naming Consistency4/5

Tool names are consistently snake_case, which is readable and predictable. The convention is not purely verb_noun throughout: menu_audit, reservation_summary, sales_summary, and waiter_call use noun-first resource-style names, while the rest mostly follow verb_noun.

Tool Count2/5

27 tools is heavy for one MCP server, especially because the surface mixes public guest discovery/ordering with owner analytics, audits, and content drafting. Although most tools have a distinct role, the combined guest-facing and admin-facing scope pushes well beyond the 3-15 ideal and increases selection burden.

Completeness4/5

Core lifecycle coverage is strong for ordering, reservations, discovery, loyalty lookup, and owner reporting. Minor gaps remain: loyalty points redemption/earning is not exposed, order retrieval is limited to status polling, and reservations only support request/cancel without update. Owner publishing is handled in an external admin panel, so the drafts are intentionally terminal here.

Available Tools

27 tools
apply_promoPreview a promo codeA
Read-onlyIdempotent
Inspect

Validate a promo code (eligibility preview only — does NOT reserve a slot). Returns valid=true with discount info when the code is currently redeemable; pass the same code as place_order.promo_code to actually apply + redeem it (the slot is consumed only when the order lands).

ParametersJSON Schema
NameRequiredDescriptionDefault
codeYes
agent_session_idYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true and destructiveHint=false, so the safety profile is covered. The description adds real value beyond them: it discloses that no slot is reserved, that the slot is consumed only when the order lands, and the return shape ('valid=true with discount info'). It stops short of auth or rate-limit context, so a 4 rather than a 5.

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?

A single dense sentence, front-loaded with the core action and scope caveat, followed by the downstream usage pointer — only one sentence and no filler. Slightly long/parenthetical-heavy but every clause carries information.

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 supplies the return semantics (valid=true plus discount info) and the side-effect contract (no slot consumed). Given only 2 params and one being a session identifier conventional across the sibling set, this is nearly complete, with only agent_session_id unaddressed.

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 must carry the parameter burden. It does clarify 'code' semantics by tying it to place_order.promo_code, but says nothing about agent_session_id, leaving one of two required parameters undocumented anywhere. Partial compensation merits 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?

States a specific verb+resource ('Validate a promo code') and explicitly delimits the scope ('eligibility preview only — does NOT reserve a slot'), which resolves the tension between the imperative name apply_promo and the preview title. An agent can distinguish this from place_order 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?

Names the alternative path explicitly ('pass the same code as place_order.promo_code to actually apply + redeem it') and gives the condition that selects each path (preview vs. actual consumption on order landing). This is exactly the when/when-not/alternative guidance the dimension asks for.

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

cancel_orderCancel an orderA
DestructiveIdempotent
Inspect

Cancel an order placed via the same agent_session_id. Atomic — only succeeds while the order is still in "pending" or "confirmed" (the early KDS-accept state). Once the kitchen starts preparing, you must escalate to waiter_call. Idempotent: replays return the original outcome. Idempotency-Key header REQUIRED.

ParametersJSON Schema
NameRequiredDescriptionDefault
order_idYes
agent_session_idYes

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already cover destructive/idempotent/readOnly, but the description adds substantial new context: atomicity, the exact precondition states that gate success, escalation behavior on failure, replay semantics returning the original outcome, and a mandatory Idempotency-Key header not captured anywhere in structured fields.

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?

Front-loaded with the action, then layered with preconditions, escalation path, and idempotency in tight sentences. No filler; each clause adds actionable constraint information.

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?

For a destructive, precondition-gated tool with no output schema, the description covers success window, failure escalation, idempotent replay behavior, and the required header. Nothing an agent needs to call it correctly is missing.

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 full burden. It clarifies agent_session_id semantics (the order must have been placed via the same session) but says nothing about order_id's format or origin. Partial compensation for the coverage gap warrants a mid-range 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?

States a specific verb+resource ("Cancel an order") and scopes it to orders placed via the same agent_session_id, distinguishing it from unrelated siblings like cancel_reservation. An agent can identify the target operation without opening the 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?

Explicitly states the success window ("only succeeds while the order is still in 'pending' or 'confirmed'"), the failure condition ("once the kitchen starts preparing"), and names the alternative ("escalate to waiter_call"). This is textbook when/when-not/alternative guidance.

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

cancel_reservationCancel a reservation requestA
DestructiveIdempotent
Inspect

Cancel a reservation using the 6-character confirmation code the GUEST received by email/SMS (the code is the authorisation; ask the guest for it — this tool never issues or reveals codes). Thin wrapper over the venue's own cancellation endpoint, which answers uniformly: status is "cancelled" or "noop" (unknown code · already cancelled · seated/completed · less than 30 minutes away — it does not say which). Only report a cancellation to the guest when cancelled is true. PUBLIC tool, no auth.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmation_codeYes

TDQS

A4.7/5.0
Behavior5/5

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

Goes well beyond the annotations. It discloses that the endpoint answers uniformly with `status` = cancelled or noop, that noop conflates four distinct causes (unknown code, already cancelled, seated/completed, <30 min away) without saying which, and that cancellation should only be reported on `cancelled`. It also states this is a PUBLIC tool with no auth.

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?

Information-dense and front-loaded: the core action and required input lead, then the response-semantics and reporting caveats follow. No sentence is filler despite the parenthetical density.

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 fully covers what the agent needs: the required input, the exact response shape and its ambiguity, the auth profile, and the reporting rule. Nothing material is missing for correct invocation or interpretation.

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 0%, so the description must carry the parameter meaning, and it does: it explains the code is 6 characters and comes to the guest by email/SMS, and that the tool cannot reveal or issue codes. The '6-character' claim sits slightly awkwardly against the schema's maxLength of 12, a minor imprecision.

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 (cancel) and resource (reservation) and pins down the exact input needed: the confirmation code the guest received. It is clearly distinguishable from sibling reservation tools such as request_reservation or get_reservation_slots.

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 clear operational context — the code is the authorisation, the agent must ask the guest for it, and the tool never issues codes. It also states the report-to-guest rule. It stops short of naming explicit alternatives for cases where no code exists, so a 4 rather than a 5.

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

check_loyaltyLoyalty balanceA
Read-onlyIdempotent
Inspect

Look up a loyalty member by member_id. Returns balance, tier, lifetime_points, and the most recent 10 transactions so the agent can ground its recommendation ("you have 320 points, enough for a free coffee").

ParametersJSON Schema
NameRequiredDescriptionDefault
member_idYes
agent_session_idYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already cover readOnly/idempotent/non-destructive, so the safety profile is settled. The description adds value beyond that by disclosing the return payload (balance, tier, lifetime_points, last 10 transactions), which matters because there is no output schema.

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?

Back-loaded with the key return-field list and one illustrative example; the quoted sample message adds a little flavor but the core content is front-loaded and tight.

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 usefully enumerates what comes back, which is the main completeness concern. The only real hole is the undocumented agent_session_id and the absence of any not-found/error behavior.

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% and the description only glosses member_id, leaving agent_session_id completely unexplained in both schema and prose. For a 2-param tool with no structured documentation, the description does not compensate for the gap.

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?

Specific verb+resource ('Look up a loyalty member by member_id') and it enumerates the returned fields, which cleanly separates it from write-side siblings like join_loyalty and apply_promo.

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?

It gives a rationale ('so the agent can ground its recommendation'), which implies the context of use, but never states when to prefer this over join_loyalty or apply_promo, nor any prerequisites such as an existing membership.

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

create_cartCreate a cartAInspect

Build an anonymous takeaway or delivery cart for a listed restaurant and get a one-time confirmation link for the guest. PUBLIC tool, no auth. Table orders are not supported here (they stay on the QR menu). Send the guest to confirm_url. Prices are re-read there from the live menu; name, phone, delivery address and payment are entered by the guest on that page — never through this tool. Nothing is ordered until the guest confirms. The link expires 30 minutes after creation and can be used once.

ParametersJSON Schema
NameRequiredDescriptionDefault
noteNoOrder-level note for the kitchen. Do not put the guest's name, phone or address here.
itemsYes
order_typeYes
restaurantYesRestaurant slug (from search_restaurants / list_public_menus) or id.
scheduled_forNoISO date-time for a scheduled pickup/delivery (optional; the venue may refuse on the confirmation page).

TDQS

A4.7/5.0
Behavior5/5

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

Goes well beyond the annotations (readOnlyHint=false, idempotentHint=false, destructiveHint=false) by disclosing that nothing is ordered until guest confirmation, prices are re-read live on the confirmation page, the link expires in 30 minutes and is single-use, and PII/payment are never passed through this tool. These are exactly the operational traits an agent needs to avoid misuse.

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?

Front-loaded with the action and the returned artifact, then proceeds through constraints in priority order (public/no-auth, exclusions, handoff, pricing, expiry). Dense but every sentence carries distinct information with no redundancy.

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 names the key return (confirm_url) and explains its lifecycle (30-minute expiry, single use), and it covers auth, ordering semantics, and PII boundaries. An agent has everything needed to call this correctly.

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?

At 60% schema coverage, the description compensates with meaningful negative guidance: name, phone, delivery address and payment are entered by the guest, never through this tool, and prices are re-read rather than supplied. This clarifies that items carry ids/quantities but not prices, though it does not describe order_type/items semantics that the schema already covers reasonably.

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 (build a cart) and resource (anonymous takeaway/delivery cart) with the exact output (one-time confirmation link). It also draws the boundary against table orders and against immediate ordering, so an agent can distinguish it from siblings like place_order or get_cart without opening 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?

Gives clear when-to-use context (anonymous takeaway/delivery for a listed restaurant) and explicit exclusions (table orders stay on the QR menu), plus the handoff action 'Send the guest to confirm_url.' It stops short of naming the sibling tool (place_order) that finalizes the order, leaving that routing implicit.

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

draft_product_descriptionDraft a product descriptionAInspect

Propose a new description for one of your products. Nothing goes live: the text is saved as a DRAFT change set the owner reviews, previews and publishes (or discards) in the admin panel.

ParametersJSON Schema
NameRequiredDescriptionDefault
product_idYesProduct id from menu_audit or get_restaurant_menu.
descriptionYesProposed description in the menu language. Plain text, no links, no claims you cannot verify.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations declare readOnlyHint=false, destructiveHint=false, and idempotentHint=false; the description adds real context beyond that by explaining the draft change-set workflow: nothing goes live, the owner reviews, previews, publishes, or discards it. This clarifies what the non-destructive write actually produces, though it doesn't cover auth needs or what the call returns.

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 sentences, zero waste, and the draft-only safety semantics are front-loaded right after the core action. Nothing repeats the schema or the name.

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 two-parameter write tool with no output schema, the description covers the essential outcome (a draft change set awaiting owner review) and pairs well with the annotations. It stops short of describing what the caller gets back or any limits on repeat calls, but the idempotency hint is already supplied structurally.

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 100%, so both parameters are already documented in the schema (including the product_id source tools and the plain-text/no-links constraint). The description adds no parameter detail beyond that, so the baseline 3 applies.

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 and resource: "Propose a new description for one of your products." The product scope distinguishes it from other drafting siblings like draft_site_text or draft_translation, though it never names those alternatives explicitly.

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 implies when to use it (you want a new product description) but gives no explicit when-to-use guidance, prerequisites, or routing versus the drafting siblings such as draft_site_text and draft_translation. Usage is inferable rather than stated.

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

draft_site_textDraft the website text packAInspect

Propose the public website text of your restaurant — tagline, about paragraph, SEO title and SEO description — as a DRAFT change set. Only declared facts are allowed: no numbers, awards, links or markup; validation rejects anything else. The owner publishes from the admin panel.

ParametersJSON Schema
NameRequiredDescriptionDefault
aboutYes
taglineYes
seo_titleYes
seo_descriptionYes

TDQS

A4.4/5.0
Behavior4/5

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

Annotations declare a non-read-only, non-destructive, non-idempotent write. The description adds meaning beyond that: the output is an unpublished draft change set with a separate owner-publish step, and it enumerates hard validation rules (no numbers, awards, links or markup).

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?

Three tight sentences, front-loaded with what is produced, followed by the constraint and the workflow. 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 still conveys what is returned (a draft change set) and how it is consumed. It could more explicitly describe the return payload, but it is adequate for a four-field drafting tool.

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 0%, so the description must carry the semantics. It names and semantically explains all four required fields (tagline, about paragraph, SEO title, SEO description), though it does not restate the length limits that the schema already enforces.

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 (propose/draft) and resource (public website text pack) and enumerates the four fields. It is clearly distinguishable from siblings like draft_product_description and draft_translation.

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?

The description makes the draft-vs-publish boundary explicit: this only proposes a change set and 'the owner publishes from the admin panel.' It does not explicitly contrast itself with the other draft_* siblings, but the context is clear enough.

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

draft_translationDraft a menu translationAInspect

Propose a translation (name and/or description) of one product or category into one menu language. Nothing goes live: it is saved as a DRAFT change set the owner reviews and publishes in the admin panel; manual translations override machine translation once published.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoTranslated name (optional). Keep brand names as they are.
entityYes
localeYesTarget menu language (two letters), different from the menu source language.
entity_idYesProduct or category id from get_restaurant_menu / menu_audit.
descriptionNoTranslated description (optional). Plain text, no links, same meaning as the source — never add ingredients or claims.

TDQS

A3.7/5.0
Behavior4/5

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

With annotations marking this as a non-read-only write, the description adds genuinely useful context beyond them: nothing goes live, output is a draft change set requiring owner review/publication, and manual translations override machine output. It does not address idempotency (repeated calls with idempotentHint=false may create duplicate drafts) or auth requirements, keeping it short of a 5.

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?

A single dense sentence, front-loaded with the core action before the draft/review behavior. Every clause earns its place, though it packs a lot into one sentence rather than segmenting purpose from consequences.

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 5-parameter write tool with no output schema, the description covers the key lifecycle behavior (draft, review, publish) and the manual-override rule, and the schema handles the rest. Only the idempotency/duplicate-draft question is left unaddressed.

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 80%, so parameters are already well documented in the schema itself (including the 'keep brand names' and 'never add ingredients or claims' guidance). The description only loosely maps to the entity/locale/name/description fields without adding syntax or format meaning, so baseline 3 is appropriate.

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 ('Propose a translation') and resource ('name and/or description of one product or category') with clear scope ('into one menu language'). It is distinguishably a translation-drafting tool, but it never names or contrasts with the closely related siblings draft_product_description and draft_site_text, so differentiation is left to inference.

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 implies usage via 'saved as a DRAFT change set the owner reviews and publishes' and the manual-overrides-machine note, but it gives no explicit when-to-use versus alternatives (e.g., draft_product_description, draft_site_text). Usage is inferable but not spelled out.

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

get_cartCart contentsA
Read-onlyIdempotent
Inspect

Read an anonymous cart by cart_id: state (open · consumed · expired), the one-time confirmation link while open, lines re-priced from the live menu, and the order id once the guest has confirmed. PUBLIC tool, no auth.

ParametersJSON Schema
NameRequiredDescriptionDefault
cart_idYes

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already declare readOnly, idempotent, non-destructive, and closed-world; the description adds real context beyond that — no auth required, the one-time confirmation link only exists while the cart is open, lines are re-priced from the live menu, and the order id appears only after guest confirmation.

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?

One dense sentence with the key and the returned state set front-loaded; every clause carries information. Slightly long and run-on, which keeps it from a 5.

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 the return-value burden and does so well: it enumerates the state values and the conditional fields (confirmation link, order id). Nothing an agent needs to call or interpret this read correctly is missing.

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?

Only one parameter and the schema carries no description (0% coverage), though it does encode the format via a 32-hex pattern. The description confirms cart_id is the key but adds no format or lookup semantics beyond the schema, so the baseline 3 is appropriate.

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 ('Read an anonymous cart by cart_id') and enumerates the fields returned, so an agent can distinguish it from create_cart or get_order_status without opening a schema. The 'anonymous cart' scoping is 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?

Clearly signals the operating context ('PUBLIC tool, no auth') and the keyed lookup (by cart_id), which implies when it applies. It stops short of naming an alternative or an explicit when-not condition, 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_faqFrequently asked questionsA
Read-onlyIdempotent
Inspect

Return the FAQ entries from the public /faq page in the requested locale (31 locales; unknown locale falls back to en and the response says which locale was served). Useful for grounding answers to common product questions.

ParametersJSON Schema
NameRequiredDescriptionDefault
localeNoen

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, non-destructive, closed-world. The description adds genuine behavior not in the annotations: 31 locales, fallback to 'en' on unknown locale, and that the response reports which locale was served. It does not mention caching or pagination, but nothing suggests those apply.

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 sentences, zero filler, with the resource and locale scoping front-loaded and the fallback caveat immediately after. Every clause earns its place.

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?

For a no-required-param read tool with no output schema, the description covers what the tool returns, the locale contract, the fallback behavior, and a usage rationale. Nothing an agent needs to invoke it correctly 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 description coverage is 0%, so the description must carry the locale semantics — and it does, specifying 31 supported locales, the default/fallback to 'en', and that the served locale is echoed back. This meaningfully exceeds what the bare 'locale: string, default en' schema conveys.

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 (Return) and resource (FAQ entries from the public /faq page), plus the scoping dimension (requested locale). No sibling tool overlaps with FAQ retrieval, so the agent can identify it immediately.

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?

Provides a clear use context: 'grounding answers to common product questions.' It stops short of explicit when-not-to-use guidance or naming alternatives, but for a single-purpose lookup tool the intended usage is unambiguous.

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

get_order_statusOrder statusA
Read-onlyIdempotent
Inspect

Poll the current status of an order. Returns status, prepared_items_count, total_items_count, eta_minutes (if available), and an optional customer-facing message. Safe to call every 30 seconds; do NOT poll faster.

ParametersJSON Schema
NameRequiredDescriptionDefault
order_idYes
agent_session_idYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent and non-destructive, so the safety profile is covered. The description adds value beyond them with a rate-limit/cadence constraint and the notion of an optional customer-facing message, which annotations cannot express. It does not explain behavior for unknown or expired order_id values.

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 tight sentences with zero filler; the core action leads and the polling cadence follows as an actionable constraint. Every clause 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 usefully enumerates the return fields and discloses the polling constraint, which is the main risk for this tool. Minor gaps remain around error/expired-session behavior, but nothing essential for a correct call is missing.

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% for both required parameters, so the description carries the full burden — yet it never mentions order_id or agent_session_id. order_id is self-evident, but agent_session_id's origin and expected format are left entirely undocumented.

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 and resource ('Poll the current status of an order') and enumerates the returned fields, so the agent knows exactly what this yields. No sibling tool covers order status polling, but the description never explicitly contrasts itself with siblings such as reservation_summary or get_cart.

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 operational guidance — 'Safe to call every 30 seconds; do NOT poll faster' — which is exactly the when/when-not information an agent needs for a polling tool. It stops short of naming alternatives or prerequisite steps (e.g., that it follows place_order or requires an active session).

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

get_pricingPricing modelA
Read-onlyIdempotent
Inspect

Return Thmenu's commercial model as structured facts: free forever, every feature included, no subscription and no trial; the only charge is a platform fee in basis points on payment volume processed through Thmenu (the payment processor's own fee is separate); cash or external payments carry no Thmenu fee. Generated from the code that charges it — safe to cache.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare read-only, idempotent, and non-destructive. The description adds that the facts are generated from the charging code and safe to cache, which is useful beyond the annotations, but it does not detail auth or rate limits.

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 purpose and packs the return content into two efficient sentences. The dense semicolon list is justified by the lack of an output schema.

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?

No output schema exists, so the description must cover return values; it enumerates the pricing facts (free, no subscription, platform fee, cash/no fee). This is sufficient for the tool's scope, though it could clarify the structured format.

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?

Input schema has zero parameters, so parameter semantics baseline is 4. There is no parameter information to add.

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 ('Return') and resource ('Thmenu's commercial model') and distinguishes itself from every sibling, none of which returns pricing. The description is immediately actionable for tool selection.

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

Usage Guidelines2/5

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

No explicit when-to-use guidance or named alternatives. The closest is 'safe to cache', which is behavioral, not a routing rule. An agent must infer that this should be called for pricing/fee questions.

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

get_reservation_slotsReservation slotsA
Read-onlyIdempotent
Inspect

List bookable 30-minute reservation slots for the next 1–7 days (venue timezone) for a listed restaurant with a reservation module. busy_count is the number of existing requests at that slot and is informational. A reservation is a REQUEST that the restaurant confirms; no per-slot capacity cap is configured, so busy_count is informational only. Never tell the guest a table is guaranteed or "available" — say the request will be sent and the restaurant will confirm. PUBLIC tool, no auth.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNo
restaurantYes

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already establish it is a safe, idempotent read; the description adds substantial context beyond them: busy_count is informational because no per-slot cap exists, a reservation is a request the restaurant confirms, and the tool is public with no auth.

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 core capability before the caveats, and the guest-messaging rule is well placed. Slight redundancy: 'busy_count ... is informational' is stated twice, and the mid-sentence 'A reservation is a REQUEST' interrupts the slot/return-value flow.

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 carries the burden and explains the one non-obvious returned field (busy_count) and the request-not-confirmation model. It omits any mention of other slot fields or result size, which is a minor gap for a 2-param read tool.

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 0%, so the description must compensate and it largely does: 'days' is bounded to 1-7 and 'restaurant' is constrained to a listed venue with a reservation module, plus slot duration and timezone semantics. It stops short of describing accepted restaurant identifier formats.

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 precise verb+resource (list bookable reservation slots), with granularity (30-minute), horizon (next 1-7 days) and timezone. The scoping phrase 'for a listed restaurant with a reservation module' distinguishes it from siblings like request_reservation and reservation_summary.

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 clear context for use (a listed restaurant that has a reservation module) and adds an important behavioral rule about how to communicate results to guests, distinguishing slot lookup from an actual booking. It does not explicitly name request_reservation as the follow-up action, so routing is implied rather than stated.

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

get_restaurantRestaurant profileA
Read-onlyIdempotent
Inspect

Fetch a public restaurant profile by slug: name, description, address/city/country, currency, timezone, phone, menu URL, opening hours (7 days, minutes from midnight; a close_minute above 1440 ends after midnight on the next day, e.g. 1560 = 02:00) with isOpenNow evaluated in the venue's own timezone (null when hours are unknown), owner-declared attributes (cuisine, dietary, …; null = not declared, never "no"), derived channels (order · reservation · pickup · delivery), policies derived from the venue's settings (ordering accepted / holiday mode / staff approval / payment timing / scheduled orders, takeaway & delivery ETA and fees, reservation party cap, table calls, tip cap), per-field owner verification timestamps, categories and product count, and graph — the canonical Restaurant Graph node's agent fields: verification state (UNCLAIMED · CLAIMED · SUSPENDED · HIDDEN; VERIFIED only when a human verified it), channel_states (each channel true/false/null with a reason — null means unknown, never "no"; TABLE_AVAILABLE only from tables staff confirmed ready), menu languages with coverage, and payment availability. Only restaurants opted into the public directory are visible.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesRestaurant slug, e.g. lily-rose-bistro

TDQS

A3.9/5.0
Behavior5/5

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

Annotations already cover the safety profile (readOnly, idempotent, non-destructive), and the description adds real behavioral context on top: null means 'not declared/unknown, never no', isOpenNow is computed in the venue's own timezone and is null when hours are unknown, close_minute > 1440 wraps past midnight, VERIFIED only when human-verified, TABLE_AVAILABLE only from staff-confirmed tables, and an access restriction (public-directory opt-in only).

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 action is correctly front-loaded in the first clause, but the remainder is one enormous run-on sentence with no grouping or line breaks, making the field list hard to scan. The length is partly justified by the absent output schema, yet the structure is poor.

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 does the full job of documenting the return surface — hours encoding, null semantics, derived channels/policies, verification and channel states, and visibility scope. Only not-found/error behavior is left unstated, which is minor for a read tool whose annotations cover the safety profile.

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?

There is a single parameter with 100% schema description coverage (including a concrete slug example), so the schema carries this dimension. The description repeats that the lookup is by slug but adds no format, casing, or resolution rules beyond the schema.

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 and resource ('Fetch a public restaurant profile by slug') and enumerates exactly what is returned. It distinguishes itself implicitly from search_restaurants/get_restaurant_menu via the slug-based single-venue fetch and the 'public directory' scope, but never names the siblings it is not.

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?

Usage is only implied: you must already hold a slug, and the note that 'Only restaurants opted into the public directory are visible' is a visibility constraint rather than when-to-use guidance. No explicit routing to search_restaurants for slug discovery or to get_restaurant_menu for menu-only reads.

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

get_restaurant_menuRestaurant menuA
Read-onlyIdempotent
Inspect

Fetch the full public menu for a restaurant — categories, products, prices, allergens, nutrition. Use this to build the cart you pass to place_order. PUBLIC tool, no auth required. allergen_codes are EU 1169/2011 Annex II keys (gluten, crustaceans, eggs, fish, peanuts, soy, milk, nuts, celery, mustard, sesame, sulphites, lupin, molluscs) given ONLY when the venue's allergen name matches the regulation list exactly; a venue-specific allergen appears in allergens without a code. Allergen lists come from the venue (or were AI-suggested and then saved by the venue where allergen_disclosure.source says so). allergen_disclosure.as_of is when the venue last edited the item record, not a verification date. Follow the top-level disclosure.agent_instructions; show disclosure.text to the guest in their language whenever an allergen or dietary question comes up; dietary_flags only ever warn (true) — null is unknown, never "free of".

ParametersJSON Schema
NameRequiredDescriptionDefault
localeNoen
restaurant_idYes

TDQS

A4.4/5.0
Behavior5/5

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

Annotations only declare it a safe, idempotent read; the description adds substantial behavioral context beyond them: allergen_codes provenance, the fact that venue-specific allergens appear without a code, that allergen_disclosure.as_of is an edit date not a verification date, that disclosure.agent_instructions must be followed, and the critical null-vs-false semantics of dietary_flags.

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?

Purpose and the place_order linkage are front-loaded, and each subsequent sentence carries needed allergen/legal semantics — none is filler. It is dense enough that a reader must parse carefully, but given the legal subject matter the length is justified.

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 must describe the return payload, and it does so thoroughly: allergen code source, disclosure structure, provenance flags, and handling rules. For a legally sensitive menu/nutrition tool it leaves nothing an agent needs missing.

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 full burden, yet it never explains the two inputs (restaurant_id, locale) — the heavy detail is all about response fields. The names are largely self-explanatory and locale's role is only implicitly hinted at via 'in their language', so this is adequate but not compensating for the coverage gap.

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?

Specific verb+resource ('Fetch the full public menu for a restaurant') instantly enumerates the payload (categories, products, prices, allergens, nutrition), so an agent can tell it apart from siblings like list_public_menus, get_restaurant, or search_products 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 Guidelines4/5

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

Gives a concrete downstream purpose ('use this to build the cart you pass to place_order') and states it is a public no-auth tool. It does not, however, explicitly exclude or compare against close siblings such as list_public_menus or search_products, so the when-not guidance is missing.

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

join_loyaltyJoin the loyalty programmeAInspect

Loyalty sign-up for a guest. The guest must confirm their own e-mail, so joining happens on the restaurant's menu (My thmenu → Loyalty); this tool answers with that instruction and never reveals whether an e-mail or phone is already enrolled. Requires an active agent_session_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
emailNoNot used for a lookup; the guest confirms their e-mail on the menu.
phoneNoNot used for a lookup.
display_nameNoNot used.
agent_session_idYesActive session id from start_order_session.

TDQS

A3.9/5.0
Behavior4/5

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

Beyond the annotations, the description discloses genuinely useful behavior: the tool performs no lookup, returns an instruction instead of an action, and is deliberately non-disclosing about existing enrolments. That privacy/scope constraint is exactly the kind of context annotations (readOnlyHint=false, idempotentHint=false) cannot convey, and nothing in the text contradicts them.

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?

Two dense sentences, and the most decision-relevant caveat (joining happens on the menu, this tool only answers with that instruction) is front-loaded. Slightly compressed but nothing is wasted.

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 correctly carries the return-value burden by stating the tool 'answers with that instruction'. Combined with the session prerequisite and no-lookup guarantee, an agent has enough to call it correctly; only the explicit alternative (check_loyalty) is unstated.

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 100% and the schema already states that email, phone and display_name are not used and that agent_session_id is an active session id. The description only repeats the session requirement, adding no syntax, format, or fallback detail beyond the schema. Baseline 3 applies.

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 description states a specific verb+resource (loyalty sign-up for a guest) and immediately explains the counterintuitive truth that no sign-up actually occurs here. It implicitly separates itself from check_loyalty by noting it 'never reveals whether an e-mail or phone is already enrolled', though it never names that sibling outright.

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 a clear context: the guest must confirm their own e-mail, so enrolment happens on the restaurant's menu, and this tool exists to return that instruction. The prerequisite ('Requires an active agent_session_id') is stated. It stops short of explicitly routing enrollment-status questions to check_loyalty.

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

list_public_menusPublic restaurant directoryA
Read-onlyIdempotent
Inspect

List restaurants that have opted into the public directory (directory_opt_in = 1 — the same flag the owner sets under "AI visibility"). Returns slug, name, city, country, and the menu URL. Paginated.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
limitNo

TDQS

A3.6/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 the safety profile is covered. The description adds real value by naming the returned fields (slug, name, city, country, menu URL) and by explaining the directory_opt_in semantic and its link to the 'AI visibility' owner setting.

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 tight sentences, front-loaded with the defining scope constraint. The parenthetical about directory_opt_in and 'AI visibility' earns its place by clarifying the filter, and nothing is 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?

With no output schema, the description helpfully enumerates the returned fields, and it notes pagination, which is the main behavioral fact an agent needs. The only gap is that parameter behavior for page/limit is left entirely to the schema.

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 must compensate for the two parameters, yet it only says 'Paginated' without explaining page/limit behavior, defaults, or the 50-item cap. The defaults and min/max exist in the schema, but the description adds no meaningful parameter semantics.

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 and resource ('List restaurants') and narrows scope precisely to those that opted into the public directory, quoting the underlying flag. It doesn't explicitly differentiate from the sibling search_restaurants, but the opt-in scope makes its distinct purpose inferable.

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?

Usage is implied by the 'opted into the public directory' qualifier, so an agent can infer this is the unfiltered public-listing call. However, there is no explicit when-to-use/when-not guidance and no reference to search_restaurants or get_restaurant as alternatives.

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

place_orderPlace an orderA
Idempotent
Inspect

Place an order against the agent_session_id from start_order_session. Atomically inserts the order + items, applies server-side canonical pricing + tax (do NOT trust the unit_price you compute — we re-read it from D1), decrements inventory and optionally redeems a promo code. The guest pays at the venue (payment_status 'unpaid'). At a venue that takes payment before preparing (pay_first: true) the order is held as 'awaiting' and payment_url is returned: give it to the guest — they pay on the restaurant's own checkout, exactly like a guest ordering from the table; the kitchen gets the order once it is paid, and an unpaid order expires. This tool never charges anything itself. Returns order_id, total_cents (tax-inclusive), currency, promo_discount and, when pay_first, payment_url. Idempotency-Key header REQUIRED.

ParametersJSON Schema
NameRequiredDescriptionDefault
noteNoOptional order-level note (max 500 chars).
itemsYes
table_idNoOptional table id when ordering at a table.
guest_nameNoOptional guest name shown to staff with the order.
order_typeNoChannel: 'dine_in' (default — at a table) or 'takeaway' (pickup; requires customer_name + customer_phone, ignores table_id, only when the restaurant has takeaway enabled — else channel_not_available). Delivery is not offered to agents.
promo_codeNoOptional promo code to redeem at order time (validate first with apply_promo). The redemption slot is consumed only when this order lands.
customer_nameNoRequired for takeaway — who picks the order up.
customer_phoneNoRequired for takeaway — reachable phone (digits, +, spaces/dashes tolerated).
agent_session_idYes

TDQS

A4.6/5.0
Behavior5/5

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

Beyond the annotations (idempotent, non-readOnly, non-destructive), it discloses the atomic insert, server-side canonical pricing/tax override ('do NOT trust the unit_price you compute'), inventory decrement, the 'awaiting' hold state, unpaid-order expiry, and that it never charges. It also flags the REQUIRED Idempotency-Key header, which the annotations only imply.

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: purpose, atomicity/pricing rule, then the pay_first payment branch and return values. Every sentence contributes, though the middle payment paragraph is lengthy and could be tightened slightly without losing information.

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 enumerates the return fields (order_id, total_cents, currency, promo_discount, payment_url) and explains the payment lifecycle. For a mutation tool with 9 parameters and a conditional payment branch, nothing essential 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 78%, so the schema carries most parameter detail. The description still adds behavioral meaning: pricing is re-read from D1 regardless of the caller's unit_price, the promo redemption slot is consumed only when the order lands, and takeaway requires customer_name/customer_phone. It does not restate the per-field constraints, which is acceptable.

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+resource ('Place an order') and immediately scopes it to the agent_session_id from start_order_session, distinguishing it from cart-building siblings like create_cart and get_cart. An agent can tell exactly what this tool does and what it produces without opening the schema.

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 establishes the prerequisite flow (agent_session_id from start_order_session, promo validated first with apply_promo) and explains the pay_first branch decision clearly. It stops short of explicitly stating when not to use it versus siblings such as create_cart, but the session-flow context is strong.

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

request_billRequest the billAInspect

Ask the venue to bring the bill for a table. INSERTs a bill_requests row + fires the admin push notification. The split_type defaults to "full"; pass "personal" for German-style per-device splits.

ParametersJSON Schema
NameRequiredDescriptionDefault
noteNo
table_idYes
split_typeNofull
agent_session_idYes

TDQS

A3.6/5.0
Behavior4/5

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

Annotations already declare the tool is not read-only, not idempotent, and not destructive. The description adds valuable context beyond that by stating it INSERTs a bill_requests row and fires an admin push notification, which clarifies the side effects and internal state change. It does not cover permissions, rate limits, or error behavior, but the added side-effect disclosure is substantial.

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?

The description is two sentences, front-loaded with the core purpose and followed by side-effect and split_type details. Every sentence adds useful information with no redundancy or filler.

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

Completeness3/5

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

Given the absence of an output schema and annotation coverage for safety, the description adequately explains the tool's action and one parameter. However, with 0% schema description coverage, it should do more to describe the remaining three parameters and provide usage context relative to siblings. The result is acceptable but incomplete for an agent that needs to call it correctly.

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 must explain all four parameters. It only clarifies split_type (defaults to 'full', pass 'personal' for German-style per-device splits), while note, table_id, and agent_session_id receive no explanation. This leaves three of four parameters undocumented and forces the agent to guess their meaning and format.

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 states a specific verb ('Ask the venue to bring the bill') and resource ('the bill for a table'), making it immediately distinguishable from siblings like waiter_call or place_order. It is not a tautology of the name and tells the agent exactly what action is performed.

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

Usage Guidelines2/5

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

The description does not say when to use this tool versus alternatives such as waiter_call or get_order_status, nor does it mention any prerequisites or when-not-to-use conditions. The only usage hint is implied by the action itself, which is insufficient for an agent choosing among 26 sibling tools.

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

request_reservationRequest a reservationAInspect

Create an anonymous reservation REQUEST (date-time, party size, note) for a listed restaurant and get a one-time confirmation link. PUBLIC tool, no auth. Send the guest to confirm_url: they enter their name and email or phone there and submit the request themselves — never through this tool. The restaurant then confirms or declines; the guest receives the confirmation code by email/SMS. A reservation is a REQUEST that the restaurant confirms; no per-slot capacity cap is configured, so busy_count is informational only. Never tell the guest a table is guaranteed or "available" — say the request will be sent and the restaurant will confirm.

ParametersJSON Schema
NameRequiredDescriptionDefault
noteNoOccasion, seating preference, accessibility needs. Do not put the guest's name, phone or email here.
party_sizeYes
restaurantYes
reserved_atYesISO date-time; at least 30 minutes ahead, at most 90 days.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations declare the write/non-idempotent/non-destructive profile, and the description adds substantial context: no-auth public access, one-time confirmation link, restaurant confirms or declines, guest notified by email/SMS, and that busy_count is informational with no capacity cap. The only gap is any notion of error/expiry behavior for the link itself.

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 what is created and what is returned, then layers the crucial guest-flow safety rules. It is dense and slightly repetitive in restating twice that a reservation is a request the restaurant confirms, but nearly every sentence carries operational value.

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?

For a 4-param mutation tool with no output schema, the description covers the return artifact (confirm_url), the downstream lifecycle (restaurant decision, SMS/email code) and the guest-handoff contract. An agent has everything needed to call it and to instruct the guest 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 coverage is 50%: note and reserved_at carry descriptions, while restaurant and party_size rely on constraints only. The description restates the three inputs in parentheses but adds no format or semantic detail beyond the schema, so it neither compensates for nor worsens the coverage gap.

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+resource (create an anonymous reservation REQUEST) plus scope (for a listed restaurant) and the return (one-time confirmation link). It is clearly separable from siblings like get_reservation_slots, reservation_summary and cancel_reservation.

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?

Explicitly says the tool is public/no-auth, that the guest must be sent to confirm_url to submit their own name and contact details, and that those details must never be passed through this tool. It also names the exclusion to avoid ('never tell the guest a table is guaranteed'), leaving nothing to inference.

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

reservation_summaryUpcoming reservationsA
Read-onlyIdempotent
Inspect

Reservation requests of your restaurant for the next 14 days grouped by day and status, with pending requests that still need an answer. Read-only; no guest contact details.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare read-only, idempotent, non-destructive, closed-world behavior, so the safety profile is covered. The description adds genuinely new context: the 14-day window, day/status grouping, and that guest contact details are excluded from the payload.

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?

A single sentence that front-loads the resource, scope, and grouping, then appends the two facts an agent most needs (pending-request handling, read-only/contact-data exclusion). No waste.

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 carries the return-shape burden and does so reasonably: grouping dimensions, time window, and excluded data are stated. It could say more about ordering or volume, but nothing essential is missing for a parameterless read tool.

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?

Zero parameters, so per the rubric the baseline is 4. There is nothing for the description to disambiguate beyond what the (empty) schema already communicates.

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?

Specific verb+resource: it returns reservation requests for the restaurant grouped by day and status over a fixed 14-day window. This clearly separates it from siblings like get_reservation_slots (availability lookup) and request_reservation (creation), though it never names an alternative explicitly.

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?

Usage is implied rather than stated: the mention of 'pending requests that still need an answer' signals this is the view for triaging incoming bookings, but there is no explicit when-to-use/when-not guidance or named alternative among the 20+ siblings.

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

sales_summaryOrders summary (7 and 30 days)B
Read-onlyIdempotent
Inspect

Order counts by status, order total sums, top products by quantity and busiest hours for the last 7 and 30 days of your restaurant. Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered by structured data. The description's 'Read-only' merely restates an annotation and it adds no auth, rate-limit, caching, or freshness context. It does describe the shape of the aggregated content returned, which is modest added value.

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?

A single front-loaded sentence that leads with the metric list and closes with the time scope and a one-word safety note. It is dense rather than wasteful, though the appended 'Read-only' is redundant with the annotations and slightly lengthens an otherwise tight statement.

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 parameters and no output schema, the description should describe the returned data, and it does enumerate the aggregates (status counts, totals, top products, peak hours) over fixed windows. An agent has enough to know what calling it yields, though the exact response format and any empty-state behavior are left 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?

The tool takes no parameters and schema coverage is 100%, so there is nothing for the description to compensate for. The description correctly avoids inventing parameters and just characterizes the fixed 7- and 30-day windows.

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 description names a specific analytical resource and enumerates the exact metrics produced: order counts by status, total sums, top products by quantity, and busiest hours, scoped to 7- and 30-day windows. This clearly distinguishes it as the sales-analytics tool among siblings, though it never names an alternative it is not (e.g., get_order_status for a single order).

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

Usage Guidelines2/5

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

There is no explicit when-to-use or when-not-to-use guidance and no routing to a sibling such as reservation_summary or get_order_status. The 7/30-day window is the only usage context offered, so an agent must infer that this is a reporting/overview tool.

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

search_productsSearch productsA
Read-onlyIdempotent
Inspect

Search products inside a single restaurant by keyword. Returns up to 20 matching products with name, description, price, allergen tags, and the deep-link URL. Restaurant must be in the public directory.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesRestaurant slug.
limitNo
queryYesFree-text search across name + description.
localeNoen

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare read-only, idempotent, non-destructive, closed-world behavior, so the safety profile is covered. The description adds value beyond that by disclosing the result cap ('up to 20'), return field set (name, description, price, allergen tags, deep-link URL), and the public-directory requirement.

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?

Three short sentences, front-loaded with the core action, then return shape, then prerequisite. No filler and nothing to trim.

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 usefully enumerates return fields and the result cap, and it states the access prerequisite. It leaves locale and the limit default unexplained, which is a minor but real gap for a 4-parameter 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 50%: only slug and query are documented in the schema, while limit and locale are not. The description's 'up to 20 matching products' loosely maps to limit's maximum of 20 but does not explain the default of 10 or the locale parameter, so it only partially compensates.

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 (Search) plus resource (products) and scope (inside a single restaurant by keyword). This clearly separates it from search_restaurants (cross-restaurant) and get_restaurant_menu (full menu retrieval).

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?

Provides a concrete prerequisite: the restaurant must be in the public directory, which is a real gating condition an agent needs. It doesn't explicitly name sibling alternatives such as get_restaurant_menu, so it stops short of the top score.

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

search_restaurantsSearch restaurantsA
Read-onlyIdempotent
Inspect

Search the public directory (opt-in venues only) by location, opening status, cuisine, dietary options, declared attributes, ordering channel, declared price level and menu language — and, right now, a free table or an open waitlist (the restaurant graph's channel states). Neutral ranking (AI-K6): distance in 0.5 km bands when near is given → availability (open now first; unknown hours before closed; a venue in holiday mode counts as closed) → profile freshness (owner-verified within 90 days first) → name. Payment to Thmenu never affects order. Cuisine, dietary, price level and other attributes are owner declarations, not verified facts; venues without a declaration are excluded only when an attribute or price filter is used, and venues without coordinates only when near is used. Returns slug, name, city, country, distance_km, is_open_now (serve-time, in the venue's own timezone; null when hours are unknown; false while the venue is in holiday mode), channels (order · reservation · pickup · delivery), declared attributes, freshness and the menu URL. Paginated.

ParametersJSON Schema
NameRequiredDescriptionDefault
qNoFree text over name and description (min 2 chars).
cityNo
nearNoSearch centre. Venues without coordinates are excluded when set.
pageNo
limitNo
channelNoorder = digital ordering at the table; reservation; pickup = takeaway; delivery = venue's own delivery.
countryNoISO 3166-1 alpha-2
cuisineNoAll listed cuisines must be declared by the venue.
dietaryNoOwner declaration, not a certification.
open_nowNoOnly venues open right now in their own timezone; venues with unknown hours are excluded when true.
waitlistNoOnly venues whose waitlist is open now (WAITLIST_AVAILABLE): the reservations switch, which also opens the waitlist, and the venue open now — not in holiday mode.
price_maxNoOwner-declared price level 1–4 (schema.org priceRange "$" … "$$$$"): venues at or below it. Venues that declared no level are excluded when set.
radius_kmNo
attributesNoAny declared attribute token (meals, family, outdoor, accessibility, cuisine, dietary).
menu_languageNoThe menu can be read in this language: it is the menu's source language, or at least 90 % of the guest menu's dish names are translated into it (the restaurant graph's rule).
table_availableNoOnly venues open now with a table that staff marked ready on the live table board (TABLE_AVAILABLE). Venues not using the board are excluded: unknown is not "available".

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already cover read-only/idempotent/no-destroy, and the description adds substantial behavior beyond them: the deterministic neutral ranking (distance bands → availability → freshness → name), holiday-mode-counts-as-closed, unknown-hours ordering, serve-time is_open_now in the venue's timezone (null when unknown), and pagination. It also discloses that ranking and payment never influence results.

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 searchable dimensions, then ranking, then caveats, then the returned fields — a logical order. It is dense and em-dash heavy with small redundancy (eligibility rules restated for waitlist and table_available), but nearly every clause carries operative information.

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 16 parameters, a nested object, and no output schema, the description compensates fully: it enumerates return fields (slug, name, city, country, distance_km, is_open_now, channels, attributes, freshness, menu URL), states pagination, and defines the ranking and exclusion rules an agent needs to interpret results correctly.

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 75%, so per-parameter types and most descriptions are already in the schema. The description still adds meaning beyond it by grouping the filters and, crucially, stating the exclusion semantics (missing declaration excluded only under attribute/price filters; missing coordinates excluded only with `near`) and the declaration-vs-fact caveat for cuisine/dietary/price.

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 (search) and resource (the public restaurant directory), and adds scope ('opt-in venues only') plus the full set of filter dimensions. It is clearly distinguishable from siblings like get_restaurant (single lookup) and list_public_menus 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 Guidelines4/5

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

Explicitly lays out when filters bite: 'venues without a declaration are excluded only when an attribute or price filter is used, and venues without coordinates only when `near` is used', plus what open_now/waitlist/table_available mean. It does not name a sibling alternative for a single-venue lookup, so routing is clear but not fully comparative.

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

start_order_sessionStart an order sessionAInspect

Open a 30-minute transactional window for an AI agent against a specific restaurant. Returns an agent_session_id you MUST pass to every downstream order tool (place_order, cancel_order, request_bill, waiter_call, apply_promo). Also returns the customer-facing confirmation URL — share it with the human so they can review the cart before checkout.

ParametersJSON Schema
NameRequiredDescriptionDefault
restaurant_idYesCanonical restaurant id from get_restaurant or search_products.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations declare this is a state-changing, non-idempotent operation. The description adds valuable behavioral detail beyond annotations: the 30-minute lifetime, the required agent_session_id propagation, and the customer-facing URL. It does not cover failure modes or expiry handling, keeping it from a 5.

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 tightly written sentences with no filler. The session lifetime and required session-id propagation are front-loaded before the secondary confirmation URL detail.

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 correctly explains the two key return values (agent_session_id and confirmation URL). Annotations cover the safety profile. It stops short of describing expiry behavior or authentication prerequisites, but is otherwise complete for a session-starter 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 description coverage is 100% for the single restaurant_id parameter, so the schema already provides full parameter meaning. The description adds only the phrase 'against a specific restaurant,' which does not deepen understanding beyond the schema's canonical-id guidance.

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: opening a 30-minute transactional session against a restaurant. It distinguishes itself from siblings by naming the downstream order tools that depend on the returned agent_session_id.

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?

Clearly implies this must be called before place_order, cancel_order, request_bill, waiter_call, and apply_promo, and explains sharing the confirmation URL with the human. It lacks explicit when-not guidance or alternative session-starting tools, but the workflow context is strong.

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

waiter_callCall a waiterAInspect

Flag a waiter to the table. INSERTs a waiter_calls row + fires the admin push notification. Pass an optional human-readable message (max 500 chars) the staff sees in the dashboard.

ParametersJSON Schema
NameRequiredDescriptionDefault
messageNo
table_idYes
agent_session_idYes

TDQS

A3.5/5.0
Behavior4/5

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

Annotations establish this as a non-read-only, non-destructive, non-idempotent, closed-world operation, and the description adds real value beyond them by disclosing concrete side effects: an INSERT into waiter_calls plus an admin push notification. It does not describe auth requirements or whether duplicate calls are collapsed, which the idempotentHint=false makes relevant.

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?

Three short sentences, front-loaded with the purpose, then side effects, then the one parameter detail that matters. No filler or redundancy.

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

Completeness3/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 parameter descriptions in the schema, the description is complete on the 'what happens' axis but incomplete on the 'what do I pass' axis for the two required identifiers. Adequate for the side-effect disclosure, insufficient for correct invocation.

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, yet it only explains the optional 'message' parameter (max 500 chars, visible to staff). The two required parameters, table_id and agent_session_id, get no explanation at all, leaving their format and source undocumented.

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 description gives a specific verb and resource ('Flag a waiter to the table') that is clearly distinct from siblings such as request_bill or cancel_order. It stops short of explicitly naming or contrasting with those adjacent tools, so differentiation is left to inference.

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?

Usage is implied by the name and by the note that staff see the message in the dashboard, but there is no explicit 'use this when...' or 'use request_bill instead for...' guidance. For a tool sitting next to request_bill and cancel_reservation, that routing help matters.

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. 2 tool updates
    • Changedplace_order3 fields changed
      • changedInput schema / properties / guest_name / description
        Previous value: -"Required when room_id is set."New value: +"Optional guest name shown to staff with the order."
      • changedInput schema / properties / order_type / description
        Previous value: -"Channel: 'dine_in' (default — table or room) or 'takeaway' (pickup; requires customer_name + customer_phone, ignores table_id/room_id, only when the restaurant has takeaway enabled — else channel_not_available). Delivery is not offered to agents."New value: +"Channel: 'dine_in' (default — at a table) or 'takeaway' (pickup; requires customer_name + customer_phone, ignores table_id, only when the restaurant has takeaway enabled — else channel_not_available). Delivery is not offered to agents."
      • removedInput schema / properties / room_id
        Removed value: -{
        -  "description": "Hotel room id (room service): an active room of this venue. Not with table_id; guest_name is required.",
        -  "type": "string"
        -}
    • Changedsearch_restaurants1 field changed
      • changedInput schema / properties / cuisine / items / enum
        Previous value: -[
        -  "turkish",
        -  "kebab",
        -  "ottoman",
        -  "anatolian",
        -  "aegean",
        -  "black_sea",
        -  "mediterranean",
        -  "middle_eastern",
        -  "lebanese",
        -  "persian",
        -  "georgian",
        -  "greek",
        -  "balkan",
        -  "romanian",
        -  "polish",
        -  "eastern_european",
        -  "russian",
        -  "italian",
        -  "pizza",
        -  "pasta",
        -  "french",
        -  "spanish",
        -  "tapas",
        -  "portuguese",
        -  "german",
        -  "austrian",
        -  "british",
        -  "irish",
        -  "scandinavian",
        -  "dutch",
        -  "american",
        -  "burger",
        -  "steakhouse",
        -  "bbq",
        -  "tex_mex",
        -  "mexican",
        -  "latin_american",
        -  "brazilian",
        -  "peruvian",
        -  "caribbean",
        -  "japanese",
        -  "sushi",
        -  "ramen",
        -  "chinese",
        -  "korean",
        -  "thai",
        -  "vietnamese",
        -  "indian",
        -  "pakistani",
        -  "indonesian",
        -  "malaysian",
        -  "filipino",
        -  "african",
        -  "ethiopian",
        -  "moroccan",
        -  "seafood",
        -  "grill",
        -  "vegetarian",
        -  "vegan",
        -  "healthy",
        -  "cafe",
        -  "coffee",
        -  "tea_house",
        -  "bakery",
        -  "patisserie",
        -  "dessert",
        -  "ice_cream",
        -  "breakfast_brunch",
        -  "fast_food",
        -  "street_food",
        -  "fusion",
        -  "international",
        -  "fine_dining",
        -  "bistro",
        -  "pub",
        -  "bar",
        -  "wine_bar",
        -  "cocktail_bar",
        -  "juice_bar",
        -  "hotel_restaurant",
        -  "food_court"
        -]New value: +[
        +  "turkish",
        +  "kebab",
        +  "ottoman",
        +  "anatolian",
        +  "aegean",
        +  "black_sea",
        +  "mediterranean",
        +  "middle_eastern",
        +  "lebanese",
        +  "persian",
        +  "georgian",
        +  "greek",
        +  "balkan",
        +  "romanian",
        +  "polish",
        +  "eastern_european",
        +  "russian",
        +  "italian",
        +  "pizza",
        +  "pasta",
        +  "french",
        +  "spanish",
        +  "tapas",
        +  "portuguese",
        +  "german",
        +  "austrian",
        +  "british",
        +  "irish",
        +  "scandinavian",
        +  "dutch",
        +  "american",
        +  "burger",
        +  "steakhouse",
        +  "bbq",
        +  "tex_mex",
        +  "mexican",
        +  "latin_american",
        +  "brazilian",
        +  "peruvian",
        +  "caribbean",
        +  "japanese",
        +  "sushi",
        +  "ramen",
        +  "chinese",
        +  "korean",
        +  "thai",
        +  "vietnamese",
        +  "indian",
        +  "pakistani",
        +  "indonesian",
        +  "malaysian",
        +  "filipino",
        +  "african",
        +  "ethiopian",
        +  "moroccan",
        +  "seafood",
        +  "grill",
        +  "vegetarian",
        +  "vegan",
        +  "healthy",
        +  "cafe",
        +  "coffee",
        +  "tea_house",
        +  "bakery",
        +  "patisserie",
        +  "dessert",
        +  "ice_cream",
        +  "breakfast_brunch",
        +  "fast_food",
        +  "street_food",
        +  "fusion",
        +  "international",
        +  "fine_dining",
        +  "bistro",
        +  "pub",
        +  "bar",
        +  "wine_bar",
        +  "cocktail_bar",
        +  "juice_bar",
        +  "food_court"
        +]
  2. 1 tool update
    • Changedsearch_restaurants2 fields changed
      • addedInput schema / properties / table_available
        Added value: +{
        +  "default": false,
        +  "description": "Only venues open now with a table that staff marked ready on the live table board (TABLE_AVAILABLE). Venues not using the board are excluded: unknown is not \"available\".",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / waitlist
        Added value: +{
        +  "default": false,
        +  "description": "Only venues whose waitlist is open now (WAITLIST_AVAILABLE): the reservations switch, which also opens the waitlist, and the venue open now — not in holiday mode.",
        +  "type": "boolean"
        +}
  3. 2 tool updates
    • Changedplace_order1 field changed
      • changedInput schema / properties / room_id / description
        Previous value: -"Diamond tier only — hotel room id."New value: +"Hotel room id (room service): an active room of this venue. Not with table_id; guest_name is required."
    • Changedsearch_restaurants2 fields changed
      • addedInput schema / properties / menu_language
        Added value: +{
        +  "description": "The menu can be read in this language: it is the menu's source language, or at least 90 % of the guest menu's dish names are translated into it (the restaurant graph's rule).",
        +  "enum": [
        +    "tr",
        +    "en",
        +    "de",
        +    "fr",
        +    "es",
        +    "it",
        +    "nl",
        +    "pt",
        +    "ru",
        +    "ar",
        +    "zh",
        +    "ja",
        +    "ko",
        +    "pl",
        +    "sv",
        +    "da",
        +    "fi",
        +    "no",
        +    "cs",
        +    "hu",
        +    "ro",
        +    "bg",
        +    "el",
        +    "hr",
        +    "sk",
        +    "sl",
        +    "lt",
        +    "lv",
        +    "he",
        +    "fa",
        +    "sw"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / price_max
        Added value: +{
        +  "description": "Owner-declared price level 1–4 (schema.org priceRange \"$\" … \"$$$$\"): venues at or below it. Venues that declared no level are excluded when set.",
        +  "maximum": 4,
        +  "minimum": 1,
        +  "type": "integer"
        +}
  4. 1 tool update
    • Changedjoin_loyalty3 fields changed
      • changedInput schema / properties / display_name / description
        Previous value: -"Optional display name shown in the loyalty dashboard."New value: +"Not used."
      • changedInput schema / properties / email / description
        Previous value: -"Customer email (either email or phone required)."New value: +"Not used for a lookup; the guest confirms their e-mail on the menu."
      • changedInput schema / properties / phone / description
        Previous value: -"Customer phone in E.164 format (either email or phone required)."New value: +"Not used for a lookup."
  5. 27 tool updates
    • First observedapply_promo
    • First observedcancel_order
    • First observedcancel_reservation
    • First observedcheck_loyalty
    • First observedcreate_cart
    • First observeddraft_product_description
    • First observeddraft_site_text
    • First observeddraft_translation
    • First observedget_cart
    • First observedget_faq
    • First observedget_order_status
    • First observedget_pricing
    • First observedget_reservation_slots
    • First observedget_restaurant
    • First observedget_restaurant_menu
    • First observedjoin_loyalty
    • First observedlist_public_menus
    • First observedmenu_audit
    • First observedplace_order
    • First observedrequest_bill
    • First observedrequest_reservation
    • First observedreservation_summary
    • First observedsales_summary
    • First observedsearch_products
    • First observedsearch_restaurants
    • First observedstart_order_session
    • First observedwaiter_call

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables AI agents to manage restaurant reservations through typed MCP tools, including checking table availability, creating and canceling reservations, and listing the day's confirmed bookings.
    -
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI agents to search restaurants, publish and maintain store data, submit verified freshness feedback, and query demand or updates through MCP tools. It provides both read-only and full administrative endpoints backed by open restaurant data.
    1
    AGPL 3.0
  • A
    license
    Not graded
    quality
    D
    maintenance
    MCP server for AI-native restaurant discovery with three-tier search (verified, menu_indexed, discovered), Menu Protocol menus, and structured menu validation.
    0
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources