reservations-mcp
An auditable Model Context Protocol server forrestaurant discovery and reservations, across multiple providers.
Built as a transparent alternative to the "just npx this mystery package" reservationMCPs floating around: every line is here in src/, it talks only to each provider'sown API, it uses no browser automation or bot-detection evasion, and credentials comeonly from your own environment or local config — never logged, never sent anywhere else.
What it does
| Provider | Discovery | Availability | Booking |
|---|---|---|---|
| Resy | ✅ venue search | ✅ | ✅ (two-step, opt-in) |
| Google Places | ✅ (rich: goodForChildren, outdoorSeating, servesCocktails) |
— | — |
| Yelp | ✅ (outdoor_seating, price, term) |
— | — |
| Tock | ⚠️ stub in v1 (returns a direct link; see src/providers/tock.ts) |
— | — |
OpenTable is intentionally excluded. It has no public reservation API, so booking itrequires browser automation that violates its ToS and risks an account ban. Out of scope.
Tools
discover_restaurants— natural-language search ("Hudson waterfront, skyline view, outdoor, kid-friendly, great cocktails"). Read-only.resy_search— find Resy venue ids by name/keyword.resy_availability— open slots for a venue / date / party size.resy_booking_preview— step 1: resolve a slot, surface time + seating + any cancellation/no-show fee. Does not book.resy_book— step 2, irreversible: books abook_token. Requiresconfirm: true.resy_payment_methods— list saved card ids (some bookings require a card).resy_login— exchange email+password for a token once (password never stored). PreferRESY_AUTH_TOKEN.resy_my_reservations— your upcoming reservations.tock_search— best-effort stub (see note above).status— which providers are configured.
Setup
npm install
npm run build
cp .env.example .env # then fill in keys/tokens you want
Credentials (all optional — set only what you need)
RESY_AUTH_TOKEN— required for Resy availability/booking. Log in at resy.com, openDevTools → Network, click any restaurant, and copy theX-Resy-Auth-Tokenheader. (Or calltheresy_logintool once.)RESY_PAYMENT_METHOD_ID— default card for bookings (resy_payment_methodslists ids).YELP_API_KEY— free from the Yelp Fusion console.GOOGLE_PLACES_API_KEY— Google Places API (New).
RESY_API_KEY defaults to the public key embedded in Resy's own web client; override if it rotates.
Connect to Claude
Add to your Claude Code / Claude Desktop MCP config:
{
"mcpServers": {
"reservations": {
"command": "node",
"args": ["/absolute/path/to/reservations-mcp/dist/index.js"],
"env": {
"RESY_AUTH_TOKEN": "…",
"GOOGLE_PLACES_API_KEY": "…",
"YELP_API_KEY": "…"
}
}
}
}
Booking is deliberately two-step
resy_book will refuse without confirm: true. The intended flow:
resy_availability→ pick a slot (bookToken)resy_booking_preview→ review time, seating type, and fees, get a realbook_tokenresy_bookwithconfirm: true→ reserved
This makes the one irreversible, money-adjacent action explicit and reviewable.
Safety / honesty notes
- Resy's API is unofficial; endpoints may change. Calls fail loudly rather than guess.
- Nothing here evades bot detection or scrapes rendered HTML.
- Secrets live in
.env/~/.config/reservations-mcp/(gitignored,0600), never in the repo. - Tock is a labelled stub — it does not return fabricated availability.
License
MIT