OpenTable MCP服务器
一 主控程序 服务器,使人工智能助手能够搜索餐馆,检查实时预订情况,提取菜单,并直接从OpenTable读取评论-无需API键。
内置于 剧作家 用于从OpenTable的React前端进行可靠的数据提取。
特性
- 搜索 按名称、菜肴、地点、日期、时间和聚会规模列出的餐厅
- 检查可用性 对于特定的餐厅、日期、时间和聚会规模,返回实际可预订的时段
- 获取餐厅详细信息 包括营业时间、地址、价格范围、着装要求、停车位等
- 拉式菜单 包含部分、项目名称、描述和价格
- 阅读评论 包括总分、维度评分(食物、服务、氛围、价值)、噪音水平和个人评论文本
工具
| 工具 | 说明 | 参数 |
|---|---|---|
search_restaurants | 在OpenTable中搜索餐厅 | query, location, date?, time?, partySize? |
check_availability | 检查可用的预订时段 | restaurantUrl, date, time, partySize |
get_restaurant_details | 获取完整的餐厅信息(营业时间、地址等) | restaurantUrl |
get_restaurant_menu | 拉取当前菜单 | restaurantUrl |
get_restaurant_reviews | 获取评分和评论文本 | restaurantUrl, maxReviews?, sortBy? |
快速开始
先决条件
- 包子 (推荐)或 18+
- Playwright捆绑的Chromium(在下面的设置步骤中自动安装),或基于Chromium的浏览器(Edge、Chrome)
1.克隆和构建
git clone https://github.com/duaragha/opentable-mcp.git
cd opentable-mcp
bun install
bunx playwright install chromium
bun run buildUsing npm instead of bun
git clone https://github.com/duaragha/opentable-mcp.git
cd opentable-mcp
npm install
npx playwright install chromium
npm run build2.连接到您的AI客户端
选择以下选项之一:
克劳德代码(CLI)
添加 ~/.claude/settings.json:
{
"mcpServers": {
"opentable": {
"command": "bun",
"args": ["/absolute/path/to/opentable-mcp/build/index.js"]
}
}
}克劳德桌面
添加到您的 claude_desktop_config.json:
| 操作系统 | 配置路径 |
|---|---|
| macOS | ~/Library/Application Support/Claude/claude_desktop_config.json |
| 窗户 | %APPDATA%\Claude\claude_desktop_config.json |
| Linux | ~/.config/Claude/claude_desktop_config.json |
{
"mcpServers": {
"opentable": {
"command": "bun",
"args": ["/absolute/path/to/opentable-mcp/build/index.js"]
}
}
}Cursor/Windsurf/其他MCP客户端
遵循客户的MCP服务器配置文档。服务器通过以下方式进行通信 标准 使用标准MCP协议。
{
"command": "bun",
"args": ["/absolute/path/to/opentable-mcp/build/index.js"]
}3.配置浏览器(推荐)
重要提示: OpenTable的反机器人保护可能会阻止Playwright捆绑的Chromium。建议使用本地安装的浏览器(Edge或Chrome)以获得可靠的结果。通过环境变量进行配置:
| 变量 | 默认值 | 描述 |
|---|---|---|
OPENTABLE_BROWSER_CHANNEL | *(捆绑铬)* | 要使用的浏览器: msedge, chrome,或省略铬 |
OPENTABLE_LOCALE | en-US | 浏览器区域设置(例如。 en-CA, en-GB, fr-FR) |
OPENTABLE_TIMEZONE | *(系统时区)* | IANA时区(例如。 America/Toronto, Europe/London) |
Edge示例(推荐):
{
"mcpServers": {
"opentable": {
"command": "bun",
"args": ["/absolute/path/to/opentable-mcp/build/index.js"],
"env": {
"OPENTABLE_BROWSER_CHANNEL": "msedge",
"OPENTABLE_LOCALE": "en-CA",
"OPENTABLE_TIMEZONE": "America/Toronto"
}
}
}
}4.重新启动AI客户端
添加配置后,重新启动客户端。OpenTable工具现在应该可用了。
使用示例
连接后,只需自然地与您的AI助手交谈:
搜索餐馆
“在多伦多约克维尔寻找高档意大利餐厅”
“下周五晚上7点在曼哈顿为4人搜索寿司店”
检查预订可用性
“4月4日下午3点,Trattoria Nervosa有5个人的桌子吗?”
“查看本周六晚上BLU Ristorante的2人餐厅的空房情况”
获取餐厅详细信息
“索托索托的营业时间和着装要求是什么?”
“告诉我独木舟餐厅的情况——地址、停车场、价格范围”
拉菜单
“给我看看乔治餐厅的晚餐菜单”
“Amal的菜单上有什么素食选择?”
阅读评论
“人们对La Vecchia有什么看法?查看最新评论”
“获取Miku Toronto的最高评价”
工具参考
search_restaurants
搜索OpenTable的餐厅目录。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
query | string | Yes | 餐厅名称、菜肴或关键字(例如。 "Italian", "Trattoria Nervosa") |
location | string | Yes | 城市或社区(例如。 "Toronto", "Yorkville Toronto") |
date | string | 否 | 日期 YYYY-MM-DD 格式 |
time | string | 否 | 时间 HH:MM 24小时制(例如。 "19:00") |
partySize | number | 否 | 客人数量 |
退货: 一系列餐厅,包括名称、网址、菜肴、价格范围、评级、评论数、邻居。
______________________________________________________________________
check_availability
查看特定餐厅的实时预订情况。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
restaurantUrl | string | 是 | 完整OpenTable URL(例如。 https://www.opentable.ca/r/trattoria-nervosa-toronto) |
date | string | 是 | 日期 YYYY-MM-DD 格式 |
time | string | 是 | 所需时间 HH:MM 24小时制 |
partySize | number | 是 | 客人数量 |
退货: 餐厅名称、请求的参数、可用时段和任何状态消息(例如“无空房”、“通知我”)。
______________________________________________________________________
get_restaurant_details
获取餐厅的详细信息。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
restaurantUrl | string | 是 | 完整OpenTable URL |
退货: 姓名、地址、邻居、美食、价格范围、评级、评论数、描述、营业时间、用餐风格、着装要求、停车位、付款方式、网站、电话、标签。
______________________________________________________________________
get_restaurant_menu
从OpenTable中提取餐厅的菜单。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
restaurantUrl | string | 是 | 完整OpenTable URL |
退货: 菜单部分数组,每个部分都有部分名称和项目(名称、描述、价格)。
注意:并非所有餐厅都会将完整菜单上传到OpenTable。如果菜单是空的,请尝试查看餐厅自己的网站。
______________________________________________________________________
get_restaurant_reviews
获取餐厅的评级和评论。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
restaurantUrl | string | 是 | 完整OpenTable URL |
maxReviews | number | 否 | 最多可返回评论数(默认值:10) |
sortBy | string | 否 | "newest", "highest",或 "lowest" (默认值: "newest") |
退货: 总体评分、食品/服务/氛围/价值评分、噪音水平、总评论数以及带有文字、日期和评级的个人评论。
运作原理
OpenTable的网站是一个React/Next.js单页应用程序。传统的HTTP抓取不起作用,因为内容是在客户端呈现的,并受到反机器人措施的保护。
此服务器使用 混合提取方法:
- Playwright浏览器自动化 --启动一个无头Chromium浏览器,像真实用户一样加载页面
- 网络侦听 -捕获OpenTable前端从其后端获取的JSON API响应(比HTML更干净、更结构化)
- DOM解析 -当API拦截没有捕获所有内容时,从呈现的页面中提取数据作为后备
这使得它比纯粹的CSS选择器抓取更可靠,每次OpenTable更改类名时,这种抓取都会中断。
建筑
src/
index.ts # MCP server entry point, tool registration
browser.ts # Shared Playwright browser lifecycle
types.ts # TypeScript interfaces
tools/
search.ts # search_restaurants implementation
availability.ts # check_availability implementation
details.ts # get_restaurant_details implementation
menu.ts # get_restaurant_menu implementation
reviews.ts # get_restaurant_reviews implementation发展
# Watch mode — recompiles on file changes
bun run dev
# One-time build
bun run build
# Run the server directly
bun run startMCP检验员测试
这 MCP检查员 允许您在没有AI客户端的情况下交互式测试工具:
bunx @modelcontextprotocol/inspector bun build/index.js这将打开一个web UI,您可以在其中列出工具、填写参数并查看原始响应。
调试
服务器登录到 stderr (不是 stdout,这是为MCP协议消息保留的)。要查看日志,请执行以下操作:
bun build/index.js 2>debug.log故障排除
“找不到浏览器”或剧作家错误
bunx playwright install chromium服务器未启动/未显示任何工具
确保你先构建:
bun run build验证服务器初始化:
echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test","version":"1.0.0"}}}' | bun build/index.jsOpenTable页面上的超时
OpenTable的加载速度可能较慢。默认超时为每页加载30秒。如果你的连接速度很慢,你可能需要增加源代码的超时时间。
搜索或菜单中的空结果
OpenTable的页面结构会定期更改。如果工具返回空数据,CSS选择器可能需要更新。打开一个问题或PR。
贡献
PR欢迎。如果OpenTable更改了它们的页面结构并且工具中断,修复通常是更新相关CSS选择器 src/tools/*.ts 文件。
许可证
麻省理工学院
