返回市场
MCP-预订服务

MCP-预订服务

作者:samwang07238 星标更新:2025-10-27

项目介绍

餐厅预订MCP服务器

一款基于人工智能的模型上下文协议(MCP)服务器,用于餐厅发现和预订。该服务器与Google Maps Places API集成,根据位置、菜系偏好、心情和活动类型查找餐厅,并提供智能推荐和预订协助。

<a href="https://glama.ai/mcp/servers/@samwang0723/mcp-booking"> <img width="380" height="200" src="https://gips1.baidu.com/it/u=3242268973,1862850420&fm=3081&app=3081&f=PNG?w=760&h=400" alt="餐厅预订MCP服务器" /> </a>

🎯 主要特性

  • 智能餐厅搜索:在20公里范围内根据高级过滤条件查找餐厅
  • 默认台湾位置:当未指定坐标时,默认搜索台湾地区(24.1501164, 120.6692299)
  • AI驱动的推荐:获取前三名餐厅建议并附带详细理由
  • Google Maps集成:真实餐厅数据包括评分、评论和照片
  • 活动特定匹配:优化约会、家庭聚会、商务会议和庆祝活动
  • 情绪导向筛选:找到符合浪漫、休闲、高档、有趣或安静氛围的餐厅
  • 预订协助:获取预订指南和模拟预订能力

功能

  • 🔍 智能餐厅搜索:根据位置、菜系类型、心情和活动类型,在20公里范围内查找餐厅
  • 📍 Google Maps集成:真实餐厅数据包括评分、评论、照片和联系方式
  • 📅 预订协助:检查可用性并获取预订指南
  • 🎯 活动特定匹配:优化约会、家庭聚会、商务会议等的推荐
  • 🎭 情绪导向筛选:找到符合您期望氛围的餐厅(如浪漫、休闲、高档等)

前提条件

  • Node.js 18+
  • 启用了Places API的Google Maps API密钥
  • 自定义所需的TypeScript知识

安装

  1. 克隆或下载此项目

    git clone <repository-url>
    cd mcp-restaurant-booking
    
  2. 安装依赖项

    npm install
    
  3. 设置环境变量

    cp .env.example .env
    

    编辑.env并添加您的Google Maps API密钥:

    GOOGLE_MAPS_API_KEY=your_actual_api_key_here
    
  4. 构建项目

    npm run build
    

获取Google Maps API密钥

  1. 访问Google Cloud Console
  2. 创建新项目或选择现有项目
  3. 启用以下API:
    • Places API
    • Maps JavaScript API
    • Geolocation API
    • Places API (New)
    • Geocoding API
  4. 创建凭据(API密钥)
  5. 限制API密钥仅适用于已启用的API以确保安全

使用方法

运行服务器

开发模式:

npm run dev

生产模式:

npm start

在Docker中运行

要在Docker中运行MCP餐厅预订服务器:

# 构建Docker镜像
docker build -t mcp/booking .

# 在同一网络上运行容器作为Redis
docker run --rm -i mcp/booking

可用工具

MCP服务器提供了以下工具:

1. search_restaurants

根据位置、菜系、心情和活动类型查找餐厅。

参数:

  • latitude (数字,可选):搜索纬度(默认:24.1501164 - 台湾)
  • longitude (数字,可选):搜索经度(默认:120.6692299 - 台湾)
  • placeName (字符串,可选):附近地点名称(例如,“纽约”,“东京”,“伦敦”)。替代提供纬度/经度坐标。
  • cuisineTypes (字符串数组):菜系偏好数组
  • mood (字符串):期望氛围
  • event (字符串):活动类型
  • radius (数字,可选):搜索半径(米),默认值:20000
  • priceLevel (数字,可选):价格偏好(1-4)

示例(默认台湾位置):

{
  "cuisineTypes": ["中式", "台式"],
  "mood": "休闲",
  "event": "家庭聚会",
  "priceLevel": 2
}

示例(明确坐标,台北):

{
  "latitude": 25.033,
  "longitude": 121.5654,
  "cuisineTypes": ["意大利", "地中海"],
  "mood": "浪漫",
  "event": "约会",
  "radius": 15000,
  "priceLevel": 3
}

示例(地点名称,纽约):

{
  "placeName": "纽约, NY",
  "cuisineTypes": ["意大利", "美式"],
  "mood": "高档",
  "event": "商务会议",
  "radius": 10000,
  "priceLevel": 3
}

示例(关键词搜索特定食物类型):

{
  "keyword": "火锅",
  "mood": "休闲",
  "event": "家庭聚会",
  "radius": 10000
}

2. get_restaurant_details

获取特定餐厅的详细信息。

参数:

  • placeId (字符串):Google Places ID的餐厅

3. get_booking_instructions

获取如何进行预订的指南。

参数:

  • placeId (字符串):Google Places ID的餐厅

4. check_availability

检查预订的可用性(模拟实现)。

参数:

  • placeId (字符串):Google Places ID
  • dateTime (字符串):首选日期/时间,ISO格式
  • partySize (数字):人数

5. make_reservation

尝试进行预订(模拟实现)。

参数:

  • placeId (字符串):Google Places ID
  • partySize (数字):人数
  • preferredDateTime (字符串):ISO格式日期/时间
  • contactName (字符串):预订联系人姓名
  • contactPhone (字符串):联系电话
  • contactEmail (字符串,可选):电子邮件地址
  • specialRequests (字符串,可选):特殊请求

工作原理

1. 餐厅发现

  • 使用Google Places附近的搜索API在指定半径内查找餐厅
  • 根据关键词匹配筛选菜系类型
  • 检索每个餐厅的详细信息

2. AI推荐引擎

推荐系统根据以下标准对餐厅进行评分:

  • 评分与评论(权重40%):更高的评分和更多的评论 = 更高的分数
  • 评论数量(权重20%):更多的评论表明可靠性
  • 菜系匹配(权重20%):餐厅菜系与偏好的匹配程度
  • 活动适用性(权重10%):适合指定活动类型的适当性
  • 情绪匹配(权重10%):氛围与期望情绪的一致性

3. 活动特定评分

不同的活动有不同的标准:

  • 约会:偏好中高档、浪漫的菜系,避免快餐
  • 家庭聚会:偏好家庭友好型、预算到中档的选择
  • 商务会议:偏好安静、专业、高档的环境
  • 休闲用餐:灵活的标准,预算友好的选项
  • 庆祝活动:偏好高档、特别场合的场所

4. 情绪匹配

分析餐厅名称、评论和特征中的情绪关键词:

  • 浪漫:亲密、舒适、烛光、葡萄酒
  • 休闲:放松、友好、随和
  • 高档:优雅、精致、高级餐饮
  • 有趣:充满活力、精力充沛、生动
  • 安静:宁静、平静、冷静

开发

项目结构

src/
├── types/           # TypeScript类型定义
├── services/        # 核心业务逻辑
│   ├── googleMapsService.ts      # Google Maps API集成
│   ├── restaurantRecommendationService.ts  # AI推荐引擎
│   └── 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: "显示名称",
  // ... 现有映射
};

修改推荐逻辑

更新src/services/restaurantRecommendationService.ts中的评分算法:

  • calculateRestaurantScore():整体评分逻辑
  • calculateEventSuitability():活动特定标准
  • calculateMoodMatch():情绪匹配逻辑

添加新的活动类型

  1. 更新src/types/index.ts中的event枚举
  2. calculateEventSuitability()方法中添加活动标准

限制

  • 预订:当前使用模拟实现。真实的预订需要与餐厅特定系统或第三方服务(如OpenTable)集成
  • API配额:Google Places API有使用限制和费用
  • 实时数据:餐厅营业时间和可用性可能不是实时的
  • 地理覆盖:限于Google Places API覆盖的区域

贡献

  1. 分叉仓库
  2. 创建功能分支
  3. 进行更改
  4. 如适用,添加测试
  5. 提交拉取请求

许可证

MIT许可证 - 查看LICENSE文件了解详情

支持

对于问题和疑问:

  1. 查看Google Maps API文档
  2. 验证您的API密钥具有适当的权限
  3. 查看API配额和计费
  4. 查阅服务器日志以获取错误详情

未来增强

  • 真实预订系统集成(OpenTable、Resy等)
  • 用户偏好学习
  • 多语言支持
  • 高级筛选(饮食限制、无障碍)
  • 与日历系统的集成
  • 价格比较功能
  • 社交功能(评论、分享)

额外浏览器控制

使用Browser MCP

示例

  • 提示:- 在搜索餐厅时,请作为专业的个人助理评估我提供的条件,不要过多询问让我选择,挑选最合适的选项,检查预订选项并指导如何进行预订。同时列出该餐厅的特色菜肴和每人约需的价格。如果预订信息中有外部预订网址,使用mcp浏览工具工作并找到预订步骤。
  • 你能帮我预订香港太平广场附近的餐厅吗?我想和妻子在晚上6点进行一次高档的约会。成本不是问题,需要是浪漫的。