Restaurant Reservation MCP Server
A local MCP server for searching and booking restaurant reservations through Resy and OpenTable.
Features
- Unified Search: Search both Resy and OpenTable with a single query
- Real-time Availability: Check available time slots for any date
- Direct Booking: Book Resy reservations directly; get booking links for OpenTable
- Reservation Sniper: Auto-book the instant slots become available
- Secure Credentials: All credentials stored in Windows Credential Manager (encrypted with DPAPI)
Installation
cd C:\Users\jrkle\Desktop\restaurant-mcp
npm install
npm run build
Configure Claude Code
Add to ~/.claude/settings.json:
{
"mcpServers": {
"restaurant-reservations": {
"command": "node",
"args": ["C:\\Users\\jrkle\\Desktop\\restaurant-mcp\\dist\\index.js"]
}
}
}
Getting Started
1. Set Up Resy Credentials
First, you need your Resy API key and auth token. You can find these in your browser's developer tools while logged into resy.com:
# In Claude, use these tools:
set_credentials(platform: "resy", api_key: "YOUR_API_KEY", auth_token: "YOUR_TOKEN")
# Or for automatic token refresh, use:
set_login(platform: "resy", email: "your@email.com", password: "your-password")
2. Search for Restaurants
search_restaurants(query: "Carbone", location: "New York", party_size: 2)
You don't need to know which platform a restaurant uses! The search automatically checks both Resy and OpenTable in parallel. Each result includes a platform field (resy or opentable) and an ID like resy-12345 or opentable-67890 - just use these directly with check_availability and make_reservation.
3. Check Availability
check_availability(restaurant_id: "resy-12345", platform: "resy", date: "2025-02-15", party_size: 2)
4. Book a Reservation
make_reservation(
restaurant_id: "resy-12345",
platform: "resy",
slot_id: "123456",
party_size: 2,
date: "2025-02-15"
)
Reservation Sniper
For popular restaurants that release reservations at specific times:
snipe_reservation(
restaurant_id: "resy-12345",
platform: "resy",
date: "2025-02-15",
party_size: 2,
preferred_times: ["7:00 PM", "7:30 PM", "8:00 PM"],
release_time: "2025-02-01T09:00:00"
)
The sniper will:
- Start polling 30 seconds before release time
- Poll every 500ms once release time hits
- Instantly book the first matching slot
- Return confirmation or error
Available Tools
| Tool | Description |
|---|---|
search_restaurants | Search restaurants by name/location on Resy and/or OpenTable |
check_availability | Get available time slots for a restaurant |
make_reservation | Book a reservation |
list_reservations | View your upcoming reservations |
cancel_reservation | Cancel a booking |
set_credentials | Store API key/token securely |
set_login | Store email/password for auto-refresh |
check_auth_status | Verify credentials are valid |
refresh_token | Manually refresh auth token |
snipe_reservation | Schedule auto-booking when slots open |
list_snipes | View scheduled snipes |
cancel_snipe | Cancel a scheduled snipe |
Security
- No credit card data: This MCP never handles payment info. Bookings use payment methods saved in your Resy/OpenTable accounts.
- Windows Credential Manager: All credentials encrypted with DPAPI (same security as Chrome/Edge passwords)
- No files: Credentials never written to disk files
- HTTPS only: All API calls use TLS 1.3
- Rate limited: Max 10 requests/minute per platform
Platform Notes
Resy
- Full booking support via unofficial API
- Automatic token refresh when expired
- Can view and cancel reservations
OpenTable
- Search and availability work without auth
- Cannot complete booking via API - returns a URL to finish on OpenTable's website
- Reservation listing not available
Troubleshooting
"Resy API key not configured"
Run set_credentials with your API key first.
"Resy authentication failed"
Your token expired. Run set_login to enable auto-refresh, or manually get a new token.
OpenTable booking returns URL
This is expected. OpenTable doesn't allow third-party booking - click the URL to complete on their site.
Limitations
- Uses unofficial APIs that could change
- OpenTable requires manual booking completion
- For personal use only