musemen/resy-mcp-server
If you are the rightful owner of resy-mcp-server and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to dayong@mcphub.com.
The Resy MCP Server is a powerful tool designed to automate restaurant reservations using the Model Context Protocol.
🍽️ Resy MCP Server
A powerful Model Context Protocol server for automating Resy restaurant reservations
Features • Installation • Quick Start • Usage • API • Advanced
✨ Features
🔐 Authentication & Security
🔍 Smart Restaurant Search
|
🎯 Reservation Sniping
📅 Advanced Management
|
🚀 Installation
Prerequisites
- Python 3.10 or higher
- pip or poetry
- A Resy account with valid authentication tokens
Quick Install
# Clone the repository
git clone https://github.com/musemen/resy-mcp-server.git
cd resy-mcp-server
# Run the automated setup
chmod +x setup.sh
./setup.sh
Manual Installation
Click to expand manual installation steps
# Create virtual environment
python3 -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
# Install dependencies
pip install -r requirements.txt
# Install additional required package
pip install greenlet
🏃 Quick Start
1. Get Your Resy Authentication Token
📱 Method 1: Browser Developer Tools (Recommended)
- Log in to resy.com
- Open Developer Tools (
F12) - Go to Application → Cookies →
https://resy.com - Find
authTokencookie - Copy the value (starts with
eyJ...)
🌐 Method 2: Network Tab
- Open Developer Tools → Network tab
- Refresh any Resy page
- Filter by
api.resy.com - Click any request → Headers
- Find
x-resy-auth-token
2. Configure MCP Client
Add to your Claude Desktop or other MCP client configuration:
{
"mcpServers": {
"resy": {
"command": "python",
"args": ["-m", "src"],
"cwd": "/path/to/resy-mcp-server",
"env": {
"PYTHONPATH": "/path/to/resy-mcp-server"
}
}
}
}
3. Add Your Account
User: Add my Resy account named "Personal" with token "eyJ0eX..."
Assistant: ✅ Account added successfully!
📖 Usage
🔍 Restaurant Search
Basic Search
Find Italian restaurants in Manhattan for tomorrow at 7pm for 2 people
Advanced Search
Search for romantic restaurants in West Village for Saturday at 8pm,
party of 4, price range $$-$$$, with outdoor seating
📅 Reservation Management
Book a Reservation
Book the second restaurant from the search results
View Reservations
Show my upcoming reservations
Cancel Reservation
Cancel reservation [ID] because "Plans changed"
🎯 Automated Booking (Sniping)
Perfect for securing tables at popular restaurants that release reservations at specific times:
Schedule a booking for Carbone on August 15th at 7:00 PM for 4 people.
Book it 14 days in advance at 9:00 AM sharp.
Try these times in order: 7:00 PM, 7:30 PM, 8:00 PM
🎯 Pro Tips for Reservation Sniping
- Popular restaurants often release tables exactly 14 or 30 days in advance
- Release time is typically 9:00 AM or 10:00 AM ET
- Multiple time slots increase success rate
- Pre-fetch starts 60 seconds before execution
- Millisecond precision gives you the edge
📋 Waitlist Management
# Join waitlist
Join the waitlist at Osteria Cotta for 4 people
# Check status
Check my waitlist status in Manhattan
# Leave waitlist
Leave waitlist [ID]
🗓️ Calendar Export
# Export all reservations
Export my reservations to calendar
# Get calendar links
Get calendar links for reservation [ID]
📚 API Reference
🔐 Authentication Tools
| Tool | Description | Required Parameters |
|---|---|---|
add_resy_account | Add a new Resy account | account_name, auth_token |
list_resy_accounts | List all stored accounts | - |
set_active_account | Switch active account | account_id |
check_token_status | Check token expiration | account_id (optional) |
🔍 Search Tools
| Tool | Description | Required Parameters |
|---|---|---|
search_restaurants | Search with filters | date, time, party_size |
get_venue_details | Get restaurant details | venue_id |
📅 Booking Tools
| Tool | Description | Required Parameters |
|---|---|---|
book_reservation | Book a reservation | config_id |
view_reservations | View all reservations | - |
cancel_reservation | Cancel a reservation | reservation_id |
find_booking_slot | Find available times | venue_id, date, time, party_size |
⏰ Scheduling Tools
| Tool | Description | Required Parameters |
|---|---|---|
schedule_booking | Schedule automated booking | venue_id, venue_name, date, preferred_times, party_size, days_in_advance |
list_scheduled_bookings | View scheduled bookings | - |
cancel_scheduled_booking | Cancel scheduled booking | booking_id |
📋 Waitlist Tools
| Tool | Description | Required Parameters |
|---|---|---|
join_waitlist | Join restaurant waitlist | venue_id, venue_name, party_size |
check_waitlist_status | Check waitlist position | latitude, longitude |
leave_waitlist | Leave waitlist | waitlist_id |
🗓️ Calendar Tools
| Tool | Description | Required Parameters |
|---|---|---|
export_calendar | Export to ICS format | - |
get_calendar_links | Get calendar service links | reservation_id |
🔧 Advanced Configuration
Environment Variables
Create a .env file in the project root:
# Logging level (DEBUG, INFO, WARNING, ERROR)
RESY_MCP_LOG_LEVEL=INFO
# Dry run mode - logs API calls without making them
RESY_MCP_DRY_RUN=false
# Custom config directory
RESY_MCP_CONFIG_PATH=~/.resy-mcp
NYC Neighborhood Support
Pre-configured coordinates for popular NYC areas:
- Manhattan, Brooklyn, Queens, Bronx, Staten Island
- East Village, West Village, Chelsea, SoHo, TriBeCa
- Upper East Side, Upper West Side, Midtown
- Williamsburg, DUMBO
Database Structure
All data is stored securely in ~/.resy-mcp/:
~/.resy-mcp/
├── tokens.enc # Encrypted auth tokens
├── resy.db # SQLite database
└── .key # Encryption key
🛡️ Security
- Encryption: All tokens encrypted with Fernet symmetric encryption
- Permissions: Files created with 600 permissions (owner only)
- No Logging: Tokens never appear in logs or error messages
- Isolation: Each account's data is fully isolated
🐛 Troubleshooting
Common Issues and Solutions
"No active authentication found"
- Solution: Add an account first with
add_resy_account
"Authentication failed. Token may be expired"
- Cause: Tokens expire after 30-60 days
- Solution: Extract a new token from Resy
"Booking conflict detected"
- Cause: Existing reservation at that time
- Solution: Choose a different time or cancel existing reservation
Server won't start
- Check Python version:
python3 --version(needs 3.10+) - Reinstall dependencies:
pip install -r requirements.txt - Install greenlet:
pip install greenlet - Enable debug logging:
RESY_MCP_LOG_LEVEL=DEBUG
🏗️ Architecture
resy-mcp-server/
├── src/
│ ├── server.py # MCP server entry point
│ ├── services/ # Business logic layer
│ │ ├── auth.py # Authentication management
│ │ ├── search.py # Restaurant search
│ │ ├── booking.py # Reservation operations
│ │ ├── scheduler.py # Automated scheduling
│ │ ├── waitlist.py # Waitlist management
│ │ └── calendar.py # Calendar integration
│ ├── utils/ # Utility modules
│ │ ├── crypto.py # Encryption utilities
│ │ ├── database.py # Database models
│ │ └── resy_api.py # API client
│ └── models/ # Data models
│ └── types.py # Type definitions
├── tests/ # Test suite
├── setup.sh # Quick setup script
├── requirements.txt # Python dependencies
└── README.md # You are here!
🤝 Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
📄 License
This project is licensed under the MIT License - see the file for details.
🙏 Acknowledgments
- Built for the Model Context Protocol
- Inspired by the Resy community's booking automation needs
- Uses the Resy API (unofficial)
⚠️ Disclaimer
This tool is for personal use only. Please respect Resy's terms of service and use responsibly. The authors are not responsible for any misuse or violations of Resy's policies.
Made with ❤️ for the dining enthusiasts who never want to miss a reservation