
Restaurant Booking
STDIOAI-powered restaurant discovery and booking system with Google Maps integration.
AI-powered restaurant discovery and booking system with Google Maps integration.
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.
Clone or download this project
git clone <repository-url> cd mcp-restaurant-booking
Install dependencies
npm install
Set up environment variables
cp .env.example .env
Edit .env
and add your Google Maps API key:
GOOGLE_MAPS_API_KEY=your_actual_api_key_here
Build the project
npm run build
Development mode:
npm run dev
Production mode:
npm start
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
The MCP server provides the following tools:
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 }
get_restaurant_details
Get detailed information about a specific restaurant.
Parameters:
placeId
(string): Google Places ID of the restaurantget_booking_instructions
Get instructions on how to make a reservation.
Parameters:
placeId
(string): Google Places ID of the restaurantcheck_availability
Check availability for a reservation (mock implementation).
Parameters:
placeId
(string): Google Places IDdateTime
(string): Preferred date/time in ISO formatpartySize
(number): Number of peoplemake_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 requestsThe recommendation system scores restaurants based on:
Different events have different criteria:
Analyzes restaurant names, reviews, and characteristics for mood keywords:
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
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 issuesEdit the cuisineMap
in src/services/googleMapsService.ts
:
const cuisineMap: { [key: string]: string } = { new_cuisine_type: "Display Name", // ... existing mappings };
Update scoring algorithms in src/services/restaurantRecommendationService.ts
:
calculateRestaurantScore()
: Overall scoring logiccalculateEventSuitability()
: Event-specific criteriacalculateMoodMatch()
: Mood matching logicevent
enum in src/types/index.ts
calculateEventSuitability()
methodMIT License - see LICENSE file for details
For issues and questions:
Using Browser MCP