Skip to main content
Glama
chrischall

opentable-mcp

by chrischall

opentable_modify

Destructive

Change an existing OpenTable reservation to a new date, time, or party size using a preview token, preserving the confirmation number and confirming the new slot's policy.

Instructions

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. Asks the user to confirm first: a confirmation prompt where the client supports one; otherwise the first call returns a preview and a confirmToken, and only a repeat call with that token proceeds; the prompt names the restaurant, the current and new slot, and the card re-hold (see MCP_CONFIRM_MODE).

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
dateYesYYYY-MM-DD (the NEW date)
timeYesHH:MM (24h) — the NEW time
slot_hashYesslot_hash from opentable_find_slots for the NEW slot
party_sizeYes
confirmTokenNoONLY for the two-step confirmation fallback (a client without MCP elicitation). The confirmToken from this same tool's phase-1 "confirmation-required" response, passed back ONLY after the user has seen that preview and explicitly approved it in chat — never on the first call, never invented, never reused. Call again with the same arguments. Ignored when the client supports elicitation.
modify_tokenNoREQUIRED. From opentable_modify_preview. No no-token path — the new slot's policy + CC re-hold can differ from the original.
experience_idNoOptional tamper-check signal. When set, must match the experienceId baked into modify_token.
restaurant_idYes
dining_area_idNoOptional. The modify_token carries the dining area preview resolved; when restated here it must match the token.
security_tokenYes
reservation_tokenYesslot_availability_token from opentable_find_slots for the NEW slot
confirmation_numberYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changedv1.2.1
    • removedInput schema / properties / confirm
      Removed value: -{
      -  "description": "Must be true to proceed. Without this, the tool returns a preview.",
      -  "type": "boolean"
      -}
    • addedInput schema / properties / confirmToken
      Added value: +{
      +  "description": "ONLY for the two-step confirmation fallback (a client without MCP elicitation). The confirmToken from this same tool's phase-1 \"confirmation-required\" response, passed back ONLY after the user has seen that preview and explicitly approved it in chat — never on the first call, never invented, never reused. Call again with the same arguments. Ignored when the client supports elicitation.",
      +  "type": "string"
      +}
  2. Changed1 schema field changedv1.0.0
    • changedInput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
  3. Changed2 schema fields changedv0.18.2
    • addedInput schema / properties / dining_area_id / description
      Added value: +"Optional. The modify_token carries the dining area preview resolved; when restated here it must match the token."
    • changedInput schema / required
      Previous value: -[
      -  "restaurant_id",
      -  "confirmation_number",
      -  "security_token",
      -  "date",
      -  "time",
      -  "party_size",
      -  "reservation_token",
      -  "slot_hash",
      -  "dining_area_id"
      -]New value: +[
      +  "restaurant_id",
      +  "confirmation_number",
      +  "security_token",
      +  "date",
      +  "time",
      +  "party_size",
      +  "reservation_token",
      +  "slot_hash"
      +]
  4. First observedv0.14.3

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already flag mutation (destructiveHint=true, readOnlyHint=false), so the description's job is to add context beyond that, which it does: it discloses that confirmation_number is preserved while reservation_id/security_token may be regenerated, that dining_area_id mismatch is refused, and that without client elicitation a first call returns preview+confirmToken and only a repeat call commits. These are non-obvious behaviors the agent cannot infer from annotations, and nothing contradicts the annotated hints.

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

Conciseness4/5

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

The description is dense (~5 sentences) and front-loaded with purpose and prerequisites, with every sentence carrying operational facts not in the schema. There is mild redundancy — the identity trio appears twice and dining_area_id's optionality appears in both schema and description — but nothing is padding.

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?

Given 12 parameters, 8 required, and no output schema, the description covers the full call protocol: mandatory preview, user-confirmation flow with confirmToken fallback, the return shape (opentable_book shape plus was_modified), and the Listing-type exclusion. The only indirection is pointing to opentable_book's shape rather than spelling it out, which is acceptable given sibling context.

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?

With schema coverage at 67%, the description compensates by grouping restaurant_id + confirmation_number + security_token as the 'existing reservation's identity', explaining why modify_token is mandatory with no no-token path, and clarifying that dining_area_id is optional because the token already carries the resolved area, with mismatch refused. party_size, restaurant_id, and security_token still lack explicit schema descriptions, but the identity-grouping covers the latter two.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb+resource — 'Modify an existing OpenTable reservation in place' — and immediately anchors the flow by naming opentable_modify_preview as a mandatory prerequisite, separating this submission step from the preview sibling. The isModify:true/confirmation_number details further distinguish it from opentable_book and opentable_cancel in the sibling list.

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?

States when to use (modifying an existing reservation) and explicitly when not: 'For Listing-type restaurants there's no slot to lock — agents should check opentable_get_restaurant.bookable first.' It mandates the precondition (fresh modify_token from opentable_modify_preview) and the human-confirmation requirement before the call, leaving little ambiguity about the correct call sequence.

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