Restaurant Booking MCP Server
An AI-powered server that helps users discover and book restaurants based on location, cuisine preferences, mood, and event type, with integration to Google Maps Places API for accurate recommendations.
README
Restaurant Booking MCP Server
An AI-powered Model Context Protocol (MCP) server for restaurant discovery and booking. This server integrates with Google Maps Places API to find restaurants based on location, cuisine preferences, mood, and event type, then provides intelligent recommendations and booking assistance.
🎯 Key Features
- Smart Restaurant Search: Find restaurants within 20km radius with advanced filtering
- Default Taiwan Location: Automatically searches around Taiwan (24.1501164, 120.6692299) when no coordinates specified
- AI-Powered Recommendations: Get top 3 restaurant suggestions with detailed reasoning
- Google Maps Integration: Real restaurant data including ratings, reviews, and photos
- Event-Specific Matching: Optimized for dating, family gatherings, business meetings, and celebrations
- Mood-Based Filtering: Find restaurants matching romantic, casual, upscale, fun, or quiet atmospheres
- Booking Assistance: Get reservation instructions and mock booking capabilities
Features
- 🔍 Smart Restaurant Search: Find restaurants within 20km radius based on location, cuisine types, mood, and event type
- 📍 Google Maps Integration: Real restaurant data with ratings, reviews, photos, and contact information
- 📅 Booking Assistance: Check availability and get reservation instructions
- 🎯 Event-Specific Matching: Optimized recommendations for dating, family gatherings, business meetings, etc.
- 🎭 Mood-Based Filtering: Find restaurants that match your desired atmosphere (romantic, casual, upscale, etc.)
Prerequisites
- Node.js 18+
- Google Maps API Key with Places API enabled
- TypeScript knowledge for customization
Installation
-
Clone or download this project
git clone <repository-url> cd mcp-restaurant-booking -
Install dependencies
npm install -
Set up environment variables
cp .env.example .envEdit
.envand add your Google Maps API key:GOOGLE_MAPS_API_KEY=your_actual_api_key_here -
Build the project
npm run build
Getting Google Maps API Key
- Go to Google Cloud Console
- Create a new project or select existing one
- Enable the following APIs:
- Places API
- Maps JavaScript API
- Geolocation API
- Places API (New)
- Geocoding API
- Create credentials (API Key)
- Restrict the API key to the enabled APIs for security
Usage
Running the Server
Development mode:
npm run dev
Production mode:
npm start
Running in Docker
To run the MCP Restaurant Booking server in Docker:
# Build the Docker image
docker build -t mcp/booking .
# Run the container on the same network as Redis
docker run --rm -i mcp/booking
Available Tools
The MCP server provides the following tools:
1. search_restaurants
Find restaurants based on location, cuisine, mood, and event type.
Parameters:
latitude(number, optional): Search latitude (default: 24.1501164 - Taiwan)longitude(number, optional): Search longitude (default: 120.6692299 - Taiwan)placeName(string, optional): Place name to search near (e.g., "New York", "Tokyo", "London"). Alternative to providing latitude/longitude coordinates.cuisineTypes(string[]): Array of cuisine preferencesmood(string): Desired atmosphereevent(string): Type of occasionradius(number, optional): Search radius in meters (default: 20000)priceLevel(number, optional): Price preference (1-4)
Example with default Taiwan location:
{
"cuisineTypes": ["Chinese", "Taiwanese"],
"mood": "casual",
"event": "family gathering",
"priceLevel": 2
}
Example with explicit coordinates (Taipei):
{
"latitude": 25.033,
"longitude": 121.5654,
"cuisineTypes": ["Italian", "Mediterranean"],
"mood": "romantic",
"event": "dating",
"radius": 15000,
"priceLevel": 3
}
Example with place name (New York):
{
"placeName": "New York, NY",
"cuisineTypes": ["Italian", "American"],
"mood": "upscale",
"event": "business meeting",
"radius": 10000,
"priceLevel": 3
}
Example with keyword search for specific food types:
{
"keyword": "hotpot",
"mood": "casual",
"event": "family gathering",
"radius": 10000
}
2. get_restaurant_details
Get detailed information about a specific restaurant.
Parameters:
placeId(string): Google Places ID of the restaurant
3. get_booking_instructions
Get instructions on how to make a reservation.
Parameters:
placeId(string): Google Places ID of the restaurant
4. check_availability
Check availability for a reservation (mock implementation).
Parameters:
placeId(string): Google Places IDdateTime(string): Preferred date/time in ISO formatpartySize(number): Number of people
5. make_reservation
Attempt to make a reservation (mock implementation).
Parameters:
placeId(string): Google Places IDpartySize(number): Number of peoplepreferredDateTime(string): ISO format date/timecontactName(string): Name for reservationcontactPhone(string): Phone numbercontactEmail(string, optional): Email addressspecialRequests(string, optional): Special requests
How It Works
1. Restaurant Discovery
- Uses Google Places Nearby Search API to find restaurants within specified radius
- Filters by cuisine types using keyword matching
- Retrieves detailed information for each restaurant
2. AI Recommendation Engine
The recommendation system scores restaurants based on:
- Rating & Reviews (40% weight): Higher ratings and more reviews = better score
- Review Count (20% weight): More reviews indicate reliability
- Cuisine Match (20% weight): How well restaurant cuisine matches preferences
- Event Suitability (10% weight): Appropriateness for the specified event type
- Mood Match (10% weight): Atmosphere alignment with desired mood
3. Event-Specific Scoring
Different events have different criteria:
- Dating: Prefers mid-to-high-end, romantic cuisines, avoids fast food
- Family Gathering: Prefers family-friendly, budget-to-mid-range options
- Business Meeting: Prefers quiet, professional, upscale environments
- Casual Dining: Flexible criteria, budget-friendly options
- Celebration: Prefers high-end, special occasion venues
4. Mood Matching
Analyzes restaurant names, reviews, and characteristics for mood keywords:
- Romantic: intimate, cozy, candlelit, wine
- Casual: relaxed, friendly, laid-back
- Upscale: elegant, sophisticated, fine dining
- Fun: lively, energetic, vibrant
- Quiet: peaceful, serene, calm
Development
Project Structure
src/
├── types/ # TypeScript type definitions
├── services/ # Core business logic
│ ├── googleMapsService.ts # Google Maps API integration
│ ├── restaurantRecommendationService.ts # AI recommendation engine
│ └── bookingService.ts # Booking logic (mock)
└── index.ts # MCP server implementation
Scripts
npm run build: Compile TypeScriptnpm run dev: Run in development mode with hot reloadnpm start: Run compiled versionnpm run lint: Run ESLintnpm run lint:fix: Fix ESLint issues
Customization
Adding New Cuisine Types
Edit the cuisineMap in src/services/googleMapsService.ts:
const cuisineMap: { [key: string]: string } = {
"new_cuisine_type": "Display Name"
// ... existing mappings
};
Modifying Recommendation Logic
Update scoring algorithms in src/services/restaurantRecommendationService.ts:
calculateRestaurantScore(): Overall scoring logiccalculateEventSuitability(): Event-specific criteriacalculateMoodMatch(): Mood matching logic
Adding New Event Types
- Update the
eventenum insrc/types/index.ts - Add event criteria in
calculateEventSuitability()method
Limitations
- Booking: Currently uses mock implementation. Real booking requires integration with restaurant-specific systems or third-party services like OpenTable
- API Quotas: Google Places API has usage limits and costs
- Real-time Data: Restaurant hours and availability may not be real-time
- Geographic Coverage: Limited to areas covered by Google Places API
Contributing
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests if applicable
- Submit a pull request
License
MIT License - see LICENSE file for details
Support
For issues and questions:
- Check the Google Maps API documentation
- Verify your API key has proper permissions
- Check API quotas and billing
- Review server logs for error details
Future Enhancements
- [ ] Real booking system integration (OpenTable, Resy, etc.)
- [ ] User preference learning
- [x] Multi-language support
- [ ] Advanced filtering (dietary restrictions, accessibility)
- [ ] Integration with calendar systems
- [x] Price comparison features
- [ ] Social features (reviews, sharing)
Additional Browser Control
Using Browser MCP
- https://chromewebstore.google.com/detail/browser-mcp-automate-your/bjfgambnhccakkhmkepdoekmckoijdlc
- https://docs.browsermcp.io/setup-server#cursor
Sample
- Prompt: - While searching restaurants, please perform as professional personal assistant to evaluate the condition I provided, do not ask too many questions for me to choose, pick the best suitable selection for me, checking the reservation options and guide how to do the reservation. also list down the Signature Dishes from that restaurant and Approximately pricing per person. When booking info has booking url using external url, use the mcp browse tool to work and find reservation steps.
- can you help me book a restaurant nearby hongkong 太平洋廣場, I want to have a date with my wife within a fine-dining at evening 6pm. cost is not a concern and needs to be romatic
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。