README
🚀 餐厅预订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镜像
docker build -t mcp/booking .
# 在与Redis相同的网络中运行容器
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
获取特定餐厅的详细信息。 参数:
placeId(字符串):餐厅的谷歌地点ID
3. get_booking_instructions
获取预订说明。 参数:
placeId(字符串):餐厅的谷歌地点ID
4. check_availability
检查预订的可用性(模拟实现)。 参数:
placeId(字符串):谷歌地点IDdateTime(字符串):首选的日期/时间(ISO格式)partySize(数字):用餐人数
5. make_reservation
尝试进行预订(模拟实现)。 参数:
placeId(字符串):谷歌地点IDpartySize(数字):用餐人数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点和妻子进行一次高档的约会,费用不是问题,需要浪漫的氛围。
微信扫一扫