opentable-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| OT_BRIDGE | No | Set to 'mcp-chrome' to route through hangwin/mcp-chrome instead of fetchproxy extension. | |
| OT_WS_PORT | No | Overrides the fetchproxy WebSocket port. | 37149 |
| OT_MCP_CHROME_URL | No | Overrides the mcp-chrome endpoint URL. | http://127.0.0.1:12306/mcp |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| opentable_list_reservationsA | List the authenticated user's OpenTable reservations. Defaults to upcoming; pass scope="past" or scope="all" to broaden. Each entry includes the security_token needed to cancel or modify. |
| opentable_find_slotsA | List available reservation slots at a specific OpenTable restaurant for a date + party size. Returns each slot's reservation_token (use it with opentable_book — tokens expire quickly, book promptly). Slots may be attributes=['default'|'bar'|'highTop'|'outdoor'] and type=Standard|Experience|POP. You can pass a slot's reservation_token + slot_hash straight to opentable_book without a separate opentable_get_restaurant call — book auto-resolves the dining area. (OpenTable's availability response carries only the seating category, not the numeric dining-area id, so that id is resolved at book time from the booking-details page.) If this errors with "operation ... not yet observed on this tab", open any OpenTable restaurant page in your browser once (the graphql bridge needs to see the page's own availability query fire first), then retry. |
| opentable_book_previewA | Preview an OpenTable booking BEFORE committing. Fetches the /booking/details SSR page and the slot-lock to surface: the cancellation policy (including any credit-card no-show fee), the saved payment card that would be charged/held, and a short-lived |
| opentable_modify_previewA | Preview a MODIFICATION to an existing OpenTable reservation. Takes the existing reservation's identity (restaurant_id + confirmation_number + security_token from opentable_list_reservations or the original opentable_book result) plus the NEW slot args (from a fresh opentable_find_slots call) and returns the new cancellation_policy, CC re-hold details, and a |
| opentable_bookA | Book an OpenTable reservation. Requires a fresh slot_hash + reservation_token from opentable_find_slots (tokens expire within minutes — call find_slots just before book). dining_area_id is OPTIONAL: when omitted it's auto-resolved to the default dining area from OpenTable's booking-details page, so find_slots → book works without a separate opentable_get_restaurant call. For CC-required slots (prime-time at busy restaurants), opentable_book refuses without a |
| opentable_modifyA | Modify an existing OpenTable reservation in place. Requires the existing reservation's identity (restaurant_id + confirmation_number + security_token) plus a fresh modify_token from opentable_modify_preview — preview is mandatory because the new slot's cancellation policy / CC re-hold can differ from the original. Submits /dapi/booking/make-reservation with isModify: true + the existing confirmation_number + security_token; OpenTable preserves confirmation_number across modifies but may regenerate reservation_id and security_token. dining_area_id is OPTIONAL — the modify_token already carries the area opentable_modify_preview resolved; pass it only to restate it (mismatch is refused). Returns the same shape as opentable_book plus was_modified: true so the agent can phrase the user confirmation accurately. For Listing-type restaurants there's no slot to lock — agents should check opentable_get_restaurant.bookable first. Without confirm:true this returns a dry-run and makes NO change to the reservation; re-run with confirm:true to submit the modification. |
| opentable_cancelA | Cancel an OpenTable reservation. Requires restaurant_id, confirmation_number, and security_token — all three come from opentable_list_reservations or opentable_book. Without confirm:true this returns a dry-run and takes NO cancellation action; re-run with confirm:true to cancel the reservation. |
| opentable_get_profileA | Get the authenticated OpenTable user's profile: name, email, phones, loyalty points and tier, home metro, member-since date. Payment and credit-card details are never exposed. |
| opentable_list_favoritesB | List the user's saved restaurants from OpenTable (Saved Restaurants list). Returns each entry's id, name, cuisine, neighborhood, price band, rating, and OpenTable URL. |
| opentable_add_favoriteB | Add a restaurant to the user's Saved Restaurants list. |
| opentable_remove_favoriteB | Remove a restaurant from the user's Saved Restaurants list. |
| opentable_search_restaurantsA | Search OpenTable for restaurants. Returns matching restaurants with cuisine, neighborhood, price band, rating, description, and URL. Does NOT include bookable slot tokens — use opentable_find_slots for a specific venue to check availability. |
| opentable_get_restaurantA | Get full details for a single OpenTable restaurant: cuisine, price band, description, address, hours, phone, payment options, features, rating/review count, and availability_token (used internally when booking). Accepts the numeric restaurant_id, a slug, a path, or the full URL from opentable_search_restaurants — passing the search result's "url" verbatim always resolves, including legacy venues served at /{slug} instead of /r/{slug}. |
| opentable_healthcheckA | Round-trips a small public www.opentable.com URL (/robots.txt) through the fetchproxy bridge and returns diagnostics: the bridge's role (host/peer/null), port, version, the extension link (linked / pair pending / not attached / never answered), the elapsed round-trip time, and a plain-English hint distinguishing 'bridge never came up' from 'extension not connected' from 'real www.opentable.com-side problem'. Read-only, no auth required. Call this when a real tool fails and you want to know which hop broke. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 14 tools
Each tool targets a distinct resource and action: profile, favorites, restaurant search/details, slots, previews, booking actions, and health checks. The preview/book and modify_preview/modify pairs are clearly separated by descriptions and token flow, so an agent should not confuse them.
The tool names are almost uniformly `opentable_verb_noun` and easy to predict, with clear patterns like add/remove/list for favorites and book/modify/cancel for reservations. The minor exception is `opentable_healthcheck`, which is a noun rather than a verb-noun action, and `book`, `modify`, and `cancel` omit explicit objects.
Fourteen tools is well within a reasonable scope and each tool earns its place in the OpenTable domain. The count covers search, restaurant details, favorites, availability, booking, modification, cancellation, and diagnostics without feeling bloated.
The reservation lifecycle is fully covered: list, preview, book, modify, and cancel, with previews handling required tokens and edge cases. Favorites have list/add/remove, restaurants have search/detail, and profile retrieval plus healthcheck round out the surface with no obvious dead ends.