🚀 餐廳預訂MCP服務器
這是一個由人工智能驅動的模型上下文協議(MCP)服務器,用於餐廳發現和預訂。該服務器與谷歌地圖地點API集成,可根據位置、美食偏好、心情和活動類型查找餐廳,然後提供智能推薦和預訂協助。
🚀 快速開始
本服務器藉助谷歌地圖地點API,依據用戶提供的位置、美食偏好、心情和活動類型等信息,精準搜索周邊餐廳,並提供智能推薦和預訂協助。
✨ 主要特性
- 智能餐廳搜索:可通過高級篩選功能,查找半徑20公里內的餐廳。
- 默認臺灣位置:若未指定座標,將自動搜索臺灣(24.1501164, 120.6692299)周邊的餐廳。
- 人工智能推薦:獲取排名前三的餐廳建議,並提供詳細的推薦理由。
- 谷歌地圖集成:提供真實的餐廳數據,包括評分、評論和照片。
- 活動匹配:針對約會、家庭聚會、商務會議和慶祝活動等場景進行優化。
- 心情篩選:查找符合浪漫、休閒、高檔、有趣或安靜氛圍的餐廳。
- 預訂協助:提供預訂說明和模擬預訂功能。
📦 安裝指南
前提條件
- Node.js 18+
- 啟用了地點API的谷歌地圖API密鑰
- 具備TypeScript知識,以便進行自定義設置
安裝步驟
- 克隆或下載項目
git clone <repository-url>
cd mcp-restaurant-booking
- 安裝依賴項
npm install
- 設置環境變量
cp .env.example .env
編輯 .env
文件,並添加你的谷歌地圖API密鑰:GOOGLE_MAPS_API_KEY=your_actual_api_key_here
- 構建項目
npm run build
獲取谷歌地圖API密鑰
- 訪問 谷歌雲控制檯
- 創建一個新項目或選擇現有項目
- 啟用以下API:
- 地點API
- 地圖JavaScript API
- 地理定位API
- 地點API(新版)
- 地理編碼API
- 創建憑證(API密鑰)
- 為了安全起見,將API密鑰的使用範圍限制在已啟用的API上
💻 使用示例
運行服務器
開發模式:
npm run dev
生產模式:
npm start
在Docker中運行
要在Docker中運行MCP餐廳預訂服務器,請執行以下操作:
docker build -t mcp/booking .
docker run --rm -i mcp/booking
可用工具
1. search_restaurants
根據位置、美食類型、心情和活動類型查找餐廳。
參數:
latitude
(數字,可選):搜索的緯度(默認值:24.1501164 - 臺灣)
longitude
(數字,可選):搜索的經度(默認值:120.6692299 - 臺灣)
placeName
(字符串,可選):要搜索的地點名稱(例如,"紐約"、"東京"、"倫敦"),可替代提供經緯度座標。
cuisineTypes
(字符串數組):美食偏好數組
mood
(字符串):期望的氛圍
event
(字符串):活動類型
radius
(數字,可選):搜索半徑(單位:米,默認值:20000)
priceLevel
(數字,可選):價格偏好(1 - 4)
使用默認臺灣位置的示例:
{
"cuisineTypes": ["Chinese", "Taiwanese"],
"mood": "casual",
"event": "family gathering",
"priceLevel": 2
}
使用明確座標(臺北)的示例:
{
"latitude": 25.033,
"longitude": 121.5654,
"cuisineTypes": ["Italian", "Mediterranean"],
"mood": "romantic",
"event": "dating",
"radius": 15000,
"priceLevel": 3
}
使用地點名稱(紐約)的示例:
{
"placeName": "New York, NY",
"cuisineTypes": ["Italian", "American"],
"mood": "upscale",
"event": "business meeting",
"radius": 10000,
"priceLevel": 3
}
使用關鍵詞搜索特定美食類型的示例:
{
"keyword": "hotpot",
"mood": "casual",
"event": "family gathering",
"radius": 10000
}
2. get_restaurant_details
獲取特定餐廳的詳細信息。
參數:
3. get_booking_instructions
獲取預訂說明。
參數:
4. check_availability
檢查預訂的可用性(模擬實現)。
參數:
placeId
(字符串):谷歌地點ID
dateTime
(字符串):首選的日期/時間(ISO格式)
partySize
(數字):用餐人數
5. make_reservation
嘗試進行預訂(模擬實現)。
參數:
placeId
(字符串):谷歌地點ID
partySize
(數字):用餐人數
preferredDateTime
(字符串):ISO格式的日期/時間
contactName
(字符串):預訂聯繫人姓名
contactPhone
(字符串):聯繫電話
contactEmail
(字符串,可選):電子郵件地址
specialRequests
(字符串,可選):特殊要求
🔧 技術細節
餐廳發現
- 使用谷歌地點附近搜索API查找指定半徑內的餐廳。
- 通過關鍵詞匹配按美食類型進行篩選。
- 檢索每家餐廳的詳細信息。
人工智能推薦引擎
推薦系統根據以下因素對餐廳進行評分:
- 評分和評論(權重40%):評分越高、評論越多,得分越高。
- 評論數量(權重20%):評論越多,表明餐廳越可靠。
- 美食匹配度(權重20%):餐廳的美食與用戶偏好的匹配程度。
- 活動適用性(權重10%):餐廳是否適合指定的活動類型。
- 心情匹配度(權重10%):餐廳的氛圍與期望心情的契合度。
活動特定評分
不同的活動有不同的評分標準:
- 約會:偏好中高端、浪漫的美食,避免快餐。
- 家庭聚會:偏好家庭友好、價格適中的餐廳。
- 商務會議:偏好安靜、專業、高檔的環境。
- 休閒用餐:標準較為靈活,偏好經濟實惠的選擇。
- 慶祝活動:偏好高端、適合特殊場合的場所。
心情匹配
通過分析餐廳名稱、評論和特點,查找與心情相關的關鍵詞:
- 浪漫:私密、溫馨、燭光、葡萄酒
- 休閒:輕鬆、友好、悠閒
- 高檔:優雅、精緻、高級餐飲
- 有趣:熱鬧、活力、充滿生機
- 安靜:寧靜、祥和、平靜
📚 詳細文檔
項目結構
src/
├── types/ # TypeScript類型定義
├── services/ # 核心業務邏輯
│ ├── googleMapsService.ts # 谷歌地圖API集成
│ ├── restaurantRecommendationService.ts # 人工智能推薦引擎
│ └── bookingService.ts # 預訂邏輯(模擬)
└── index.ts # MCP服務器實現
腳本
npm run build
:編譯TypeScript代碼
npm run dev
:以開發模式運行,並支持熱重載
npm start
:運行編譯後的版本
npm run lint
:運行ESLint檢查
npm run lint:fix
:修復ESLint問題
自定義設置
添加新的美食類型
編輯 src/services/googleMapsService.ts
中的 cuisineMap
:
const cuisineMap: { [key: string]: string } = {
"new_cuisine_type": "Display Name"
};
修改推薦邏輯
更新 src/services/restaurantRecommendationService.ts
中的評分算法:
calculateRestaurantScore()
:整體評分邏輯
calculateEventSuitability()
:活動特定標準
calculateMoodMatch()
:心情匹配邏輯
添加新的活動類型
- 更新
src/types/index.ts
中的 event
枚舉
- 在
calculateEventSuitability()
方法中添加活動標準
📄 許可證
本項目採用MIT許可證,詳情請參閱LICENSE文件。
支持
若遇到問題或有疑問,請按以下步驟操作:
- 查閱谷歌地圖API文檔
- 驗證你的API密鑰是否具有正確的權限
- 檢查API使用配額和計費情況
- 查看服務器日誌以獲取錯誤詳細信息
未來改進計劃
- [ ] 集成真實的預訂系統(如OpenTable、Resy等)
- [ ] 學習用戶偏好
- [x] 支持多語言
- [ ] 高級篩選功能(如飲食限制、無障礙設施)
- [ ] 與日曆系統集成
- [x] 價格比較功能
- [ ] 社交功能(如評論、分享)
額外的瀏覽器控制
使用瀏覽器MCP:
- https://chromewebstore.google.com/detail/browser-mcp-automate-your/bjfgambnhccakkhmkepdoekmckoijdlc
- https://docs.browsermcp.io/setup-server#cursor
示例
- 提示:在搜索餐廳時,請像專業的私人助理一樣評估我提供的條件,不要問我太多問題來讓我選擇,為我挑選最合適的選項,檢查預訂選項並指導如何進行預訂。同時列出該餐廳的招牌菜和人均大致價格。當預訂信息中有外部預訂鏈接時,使用MCP瀏覽工具查找預訂步驟。
- 能否幫我在香港太平洋廣場附近預訂一家餐廳,我想在晚上6點和妻子進行一次高檔的約會,費用不是問題,需要浪漫的氛圍。