Skip to main content
Glama

Server Details

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

Ownership verified
Status
Healthy
Uptime
100.0% over the last 24 hours
Last Tested
Transport
Streamable HTTP · MCP 2025-03-26
URL
ChatGPT
–
Claude
–

TDQS

A3.8/5.0

Scored across 27 tools

Disambiguation4/5

Most tools target a clearly distinct resource and action: ordering (start_order_session, place_order, cancel_order, get_order_status), reservations (slots, request, cancel, summary), loyalty, and menu-content drafting are all separable. The few soft overlaps — create_cart vs place_order vs start_order_session, and three directory readers (list_public_menus / search_restaurants / get_restaurant) — are disambiguated by descriptions, though an agent must read carefully to pick cart-vs-order paths.

Naming Consistency4/5

The dominant convention is consistent snake_case verb_noun: get_restaurant_menu, list_public_menus, search_products, request_reservation, draft_translation, cancel_order. The exceptions are the read-only report tools (menu_audit, reservation_summary, sales_summary) and waiter_call, which invert the pattern or drop the verb, but remain readable and predictable enough to infer.

Tool Count3/5

At 27 tools the surface is heavy and serves four different audiences at once (public directory, guest ordering, loyalty, owner back office), so it is borderline rather than unjustified. Each tool does have a purpose, but the count risks context bloat and selection errors for an agent that only needs one persona's subset.

Completeness4/5

Core workflows are well covered end to end: session → order → status → cancel/bill/waiter, slots → request → cancel → summary, plus loyalty lookup, cart lifecycle, and draft/publish content changes. Gaps remain in owner-side operations (no order management for staff, no product/category CRUD beyond description drafts, no reservation confirm/decline, no order history listing), which an agent can partly work around.

Publisher details

Operator
Synaltix LLC (operator of Thmenu) · Publisher source
Operator website
https://thmenu.com
Vendor relationship
First-party
Trust center
Not available
Restrictions
No paid plan. Public tools (restaurants, menus, carts, orders, reservations) work without sign-in and only show restaurants that opted into the public directory. Owner tools (drafts, reports) need OAuth sign-in with a Thmenu restaurant account.

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).

Inputs: code (required), agent_session_id (required).

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.

Inputs: order_id (required), agent_session_id (required).

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.

Inputs: confirmation_code (required).

check_loyaltyLoyalty balanceB
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").

Inputs: member_id (required), agent_session_id (required).

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). Options (size, doneness, extras …): get_restaurant_menu lists each dish's option_groups; send the chosen option ids per line as items[].modifier_option_ids — the quote adds each option's price_delta and the confirmation page orders the same choice. A group with required: true needs at least max(1, min_select) of its options and no group takes more than max_select; a line that breaks this refuses the cart and nothing is created: modifier_required (a required group left empty), modifier_too_many, modifier_unknown_option (an id the dish does not offer), or invalid_input with detail.reason modifier_malformed (not a list of option ids); the error detail names the product_id and group_id. The same dish with different options goes on separate lines. 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.

Inputs: items (required), order_type (required), restaurant (required), note, +1 more.

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.

Inputs: product_id (required), description (required).

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.

Inputs: about (required), tagline (required), seo_title (required), seo_description (required).

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.

Inputs: entity (required), locale (required), entity_id (required), name, +1 more.

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.

Inputs: cart_id (required).

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.

Inputs: locale.

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.

Inputs: order_id (required), agent_session_id (required).

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.

Inputs: no named parameters.

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.

Inputs: restaurant (required), days.

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.

Inputs: slug (required).

get_restaurant_menuRestaurant menuA
Read-onlyIdempotent
Inspect

Fetch the full public menu for a restaurant — categories, products, prices, option groups, allergens, nutrition. Use this to build the cart you pass to place_order. PUBLIC tool, no auth required. Each product carries option_groups (id, name, required, min_select, max_select, options[{id, name, price_delta}]); pass the chosen option ids as items[].modifier_option_ids to place_order or to create_cart (the anonymous cart the guest confirms) — a required group must be filled or the order or cart is refused. 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".

Inputs: restaurant_id (required), locale.

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.

Inputs: agent_session_id (required), email, phone, display_name.

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.

Inputs: page, limit.

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. Options (size, doneness, extras …): get_restaurant_menu lists each dish's option_groups; send the chosen option ids per line as modifier_option_ids — each option's price_delta is added to the dish price on the server. A group with required: true needs at least max(1, min_select) of its options and no group takes more than max_select. A line that breaks this is refused and nothing is ordered: modifier_required (a required group left empty), modifier_too_many, modifier_unknown_option (an id the dish does not offer), modifier_malformed (not a list of option ids); the error data names the product_id and group_id. Ask the guest, or leave that dish out. Returns order_id, total_cents (tax-inclusive), currency, promo_discount and, when pay_first, payment_url. Idempotency-Key header REQUIRED.

Inputs: items (required), agent_session_id (required), note, table_id, +5 more.

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.

Inputs: table_id (required), agent_session_id (required), note, split_type.

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.

Inputs: party_size (required), restaurant (required), reserved_at (required), note.

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.

Inputs: no named parameters.

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.

Inputs: no named parameters.

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.

Inputs: slug (required), query (required), limit, locale.

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 — whether a guest can pay online through Thmenu 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.

Inputs: q, city, near, page, +13 more.

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.

Inputs: restaurant_id (required).

waiter_callCall a waiterBInspect

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.

Inputs: table_id (required), agent_session_id (required), message.

Tool Schema Changelog

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

Loading tool schema changelog…

    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
      C
      maintenance
      MCP server for AI-native restaurant discovery with three-tier search (verified, menu_indexed, discovered), Menu Protocol menus, and structured menu validation.
      5 npm
      MIT
    Try in Browser

    Glama MCP Gateway

    Add one secure layer between your agents and this server.

    Resources