餐厅预订MCP服务器
用于餐厅发现和预订的人工智能驱动的模型上下文协议(MCP)服务器。该服务器与Google Maps Places API集成,根据位置、美食偏好、心情和活动类型查找餐厅,然后提供智能推荐和预订帮助。
🎯 主要特点
- 智能餐厅搜索:使用高级过滤功能查找半径20公里内的餐馆
- 台湾默认位置:当未指定坐标时,自动在台湾周围搜索(24.1501164120.6692299)
- 基于人工智能的推荐:通过详细的推理获得前3名餐厅建议
- 谷歌地图集成:真实的餐厅数据,包括评级、评论和照片
- 事件特定匹配:针对约会、家庭聚会、商务会议和庆祝活动进行了优化
- 基于情绪的过滤:寻找与浪漫、休闲、高档、有趣或安静氛围相匹配的餐厅
- 预订协助:获取预订说明和模拟预订功能
特性
- 🔍 智能餐厅搜索:根据位置、菜肴类型、心情和活动类型,在20公里半径内寻找餐厅
- 📍 谷歌地图集成:包含评级、评论、照片和联系信息的真实餐厅数据
- 📅 预订协助:查看空房情况并获取预订说明
- 🎯 事件特定匹配:为约会、家庭聚会、商务会议等提供优化的建议。
- 🎭 基于情绪的过滤:寻找符合您所需氛围的餐厅(浪漫、休闲、高档等)
先决条件
- Node.js 18+
- 启用地点API的谷歌地图API密钥
- 用于定制的TypeScript知识
安装
- 克隆或下载此项目
git clone
cd mcp-restaurant-booking- 安装依赖项
npm install- 设置环境变量
cp .env.example .env编辑 .env 并添加您的Google Maps API密钥:
GOOGLE_MAPS_API_KEY=your_actual_api_key_here- 构建项目
npm run build获取谷歌地图API密钥
- 首选 谷歌云控制台
- 创建新项目或选择现有项目
- 启用以下API:
- 地点API - 映射JavaScript API - 地理定位 - 地点API(新增) - 地理编码API
- 创建凭据(API密钥)
- 为了安全起见,将API密钥限制为已启用的API
用法
运行服务器
开发模式:
npm run dev生产方式:
npm start在Docker中运行
在Docker中运行MCP餐厅预订服务器:
# Build the Docker image
docker build -t mcp/booking .
# Run the container on the same network as Redis
docker run --rm -i mcp/booking可用工具
MCP服务器提供以下工具:
1. search_restaurants
根据地点、菜肴、心情和活动类型查找餐厅。
参数:
latitude(数字,可选):搜索纬度(默认:24.1501164-台湾)longitude(数字,可选):搜索经度(默认:120.6692299-台湾)placeName(字符串,可选):要搜索附近的地名(例如,“纽约”、“东京”、“伦敦”)。提供纬度/经度坐标的替代方法。cuisineTypes(string\[\]):烹饪偏好数组mood(string):期望的氛围event(string):场合类型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
获取特定餐厅的详细信息。
参数:
placeId(string):餐厅的Google Places ID
3. get_booking_instructions
获取如何预订的说明。
参数:
placeId(string):餐厅的Google Places ID
4. check_availability
检查预订的可用性(模拟实施)。
参数:
placeId(字符串):谷歌地点IDdateTime(string):ISO格式的首选日期/时间partySize(人数):人数
5. make_reservation
尝试预订(模拟实现)。
参数:
placeId(字符串):谷歌地点IDpartySize(人数):人数preferredDateTime(字符串):ISO格式日期/时间contactName(string):预订名称contactPhone(string):电话号码contactEmail(字符串,可选):电子邮件地址specialRequests(字符串,可选):特殊请求
运作原理
1.餐厅探索
- 使用Google Places Near Search API查找指定半径内的餐馆
- 使用关键字匹配按菜肴类型筛选
- 检索每家餐厅的详细信息
2.人工智能推荐引擎
推荐系统根据以下因素对餐厅进行评分:
- 评分和评论(40%权重):更高的评分和更多的评论=更好的分数
- 审核计数(20%权重):更多评论表明可靠性
- 烹饪搭配(20%重量):餐厅的菜肴与喜好的匹配程度如何
- 事件适用性(10%重量):适用于指定的事件类型
- 情绪匹配(10%权重):氛围与所需情绪保持一致
3.特定事件评分
不同的事件有不同的标准:
- 约会:喜欢中高端浪漫美食,避免快餐
- 家庭聚会:更喜欢家庭友好型、预算适中的选择
- 商务会议:喜欢安静、专业、高档的环境
- 休闲餐饮:灵活的标准,预算友好的选择
- 庆祝:更喜欢高端、特殊场合的场所
4.情绪匹配
分析餐厅名称、评论和情绪关键词的特征:
- 浪漫的:亲密、舒适、烛光、葡萄酒
- 随意:放松、友好、悠闲
- 高档:优雅、精致、精致的餐饮
- 乐趣:活泼、精力充沛、充满活力
- 安静:宁静、安详、平和
发展
项目结构
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:编译TypeScriptnpm run dev:以热重载的开发模式运行npm start:运行编译版本npm run lint:运行ESLintnpm run lint:fix:修复ESLint问题
定制
添加新的菜肴类型
编辑 cuisineMap 在……里面 src/services/googleMapsService.ts:
const cuisineMap: { [key: string]: string } = {
new_cuisine_type: "Display Name",
// ... existing mappings
};修改推荐逻辑
更新评分算法 src/services/restaurantRecommendationService.ts:
calculateRestaurantScore():总体评分逻辑calculateEventSuitability():事件特定标准calculateMoodMatch():情绪匹配逻辑
添加新事件类型
- 更新
event枚举在src/types/index.ts - 在中添加事件标准
calculateEventSuitability()方法
局限性
- 预订:目前使用模拟实现。真正的预订需要与餐厅特定的系统或OpenTable等第三方服务集成
- API配额:Google Places API有使用限制和成本
- 实时数据:餐厅营业时间和可用性可能不是实时的
- 地区范围:仅限于Google Places API覆盖的区域
贡献
- 分叉存储库
- 创建要素分支
- 进行更改
- 如果适用,添加测试
- 提交拉取请求
许可证
MIT许可证-有关详细信息,请参阅许可证文件
支持
对于问题和疑问:
- 查看Google Maps 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
样品
- 提示:-在搜索餐厅时,请担任专业个人助理,评估我提供的条件,不要问太多问题让我选择,为我选择最合适的选择,检查预订选项并指导如何预订。还列出了该餐厅的招牌菜和每人的大致价格。当预订信息具有使用外部url的预订url时,请使用mcp浏览工具来查找预订步骤。
- 你能帮我订一家香港附近的餐馆吗太平洋廣場,我想晚上6点在一家高档餐厅和我妻子约会。成本不是问题,需要浪漫
