关于 resy-mcp
resy-mcp 是面向 Claude 的 Resy 预订管理 MCP 服务,支持搜索餐厅、预约和管理收藏及 Priority Notify。它使用 Resy 网页应用的私有接口,预订与取消需确认,且受 Resy 使用条款和账户限制约束。
主要功能
- 01按日期和人数搜索餐厅及可订时段
- 02查询餐厅详情和可预订时段
- 03预订及取消预约
- 04查看历史预约与收藏餐厅
- 05管理 Priority Notify 订阅
适用场景
- 01查找指定日期和人数的餐位
- 02预览并确认具体时段后预订
- 03查看、取消或整理现有预约
- 04管理餐厅收藏和 Priority Notify
MCP 相关
它通过 MCP 向客户端提供 Resy 个人资料、餐厅、预约、收藏和 Priority Notify 工具。认证可使用令牌、邮箱密码或 ContextMint Bridge 浏览器会话;预订和取消在执行前需确认。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
npx -y resy-mcpRESY_EMAILYour Resy account email. Optional — leave unset to use the ContextMint Bridge browser extension instead.RESY_PASSWORD密钥Your Resy account password. Optional — leave unset to use the ContextMint Bridge browser extension instead.RESY_AUTH_TOKEN密钥Pre-obtained x-resy-auth-token. Overrides email/password and the ContextMint Bridge path. Power users / CI only.RESY_DISABLE_FETCHPROXYSet to '1' to disable the fetchproxy fallback (forces RESY_EMAIL+PASSWORD or RESY_AUTH_TOKEN).RESY_API_KEY密钥Pin the api key, beating both the key captured from the live site and the compiled-in default. Rotation does not require it: the key is captured and cached automatically.RESY_TOKEN_CACHE密钥Set to false to disable the on-disk token cache and re-authenticate on every process start. Defaults to enabled.RESY_TOKEN_FILE密钥Absolute path for the token cache file. Defaults to $MCP_DATA_DIR/.resy-mcp/token.json.RESY_API_KEY_FILE密钥Absolute path for the api-key cache file. Defaults to $MCP_DATA_DIR/.resy-mcp/api-key.json. Holds the bare key captured from the live site, which takes precedence over the compiled-in default.RESY_CAPTURE_TIMEOUTSeconds to wait for the signed-in page to make an API call the bridge can read the auth token from. Defaults to 30. Capture resolves on the next matching request, so an idle tab needs a longer window than a busy one.RESY_WS_PORTPort for the fetchproxy bridge. The whole fleet shares 37149 (the ContextMint Bridge extension dials it), so override only for local development, test isolation, or a hosted bridged registration — this is the variable to name in the registration's bridgePortEnv.本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
15收录的工具列表 · 更新于 2 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| view | enum | 否 | 响应格式:"compact"(默认)会省略响应中其他位置已包含的字段;"full" 返回此服务所理解的所有字段。compact 会从响应中剔除图片/头像 URL;"full" 原样返回 Resy 的载荷。不进行字段投影:此服务没有经过验证的 Resy 字段重要性记录,臆造投影规则可能会丢弃调用方需要的字段。compact | full |
详细介绍
resy-mcp
Resy 预订管理 MCP 服务,适用于 Claude——通过自然语言搜索餐厅、预订餐桌、管理预订、收藏和 Priority Notify。
⚠️ Resy 未发布官方 API。此服务使用 Resy 网页应用调用的相同私有端点、公开的网页应用
api_key,以及三种用户级身份验证方式之一(覆盖令牌、电子邮件 + 密码,或 fetchproxy 浏览器桥接)。使用风险由你自行承担。
工具
| 工具 | 用途 |
|---|---|
resy_get_profile | 当前用户资料(姓名、电子邮件、预订次数) |
resy_search_venues | 搜索指定日期和就餐人数下有空位的场所 |
resy_find_slots | 列出场所中可预订的时段 |
resy_get_venue | 场所完整详情 |
resy_book | 预订(组合操作:查找 → 查看详情 → 预订) |
resy_list_reservations | 即将到来和过去的预订 |
resy_cancel | 按 resy_token 取消 |
resy_list_favorites | 已收藏的场所 |
resy_add_favorite / resy_remove_favorite | 管理收藏 |
resy_list_notify | Priority Notify 订阅 |
resy_add_notify / resy_remove_notify | 管理 Priority Notify |
条款确认
使用此 MCP 服务即表示你确认并同意以下内容:
1. 此服务访问的是你自己的 Resy 账户。 身份验证通过你自己的凭据(电子邮件 / 密码),或通过 ContextMint Bridge 扩展使用你自己已登录的浏览器会话。此服务不会,也无法访问他人的预订。
2. Resy 服务条款适用于你对此服务的使用,就像这些条款适用于你直接使用 resy.com 一样。Resy 的服务条款禁止使用机器人和自动预订,实施速率限制、部署 CAPTCHA,并声明自动预订机器人可能导致账户被封禁。预订不可转让,也不得转售。
每次调用此服务中的工具,即表示你同意这些条款——维护者于 2026-05-23 阅读了这些条款。
3. 仅限个人非商业用途。 本项目与 Resy 或 American Express 无关联,未获其认可或赞助,也非其合作项目。这是一款个人自动化工具,仅用于帮助一位用户通过命令行管理个人预订。具体而言:不得用它大量预订、在时段开放时抢占预订令牌、转售餐桌或与 Resy 竞争。预订工具的存在,是为了让你更快地预订原本就会预订的餐桌。
4. 不保证稳定性。 此服务使用与 Resy 移动应用和网页应用相同的 api.resy.com 端点,以及相同的公开网页应用 api_key。Resy 可能随时更改端点结构、轮换密钥或新增机器人检测机制。此服务可能因此无法使用。
5. 你须对使用此服务及 Resy 账户所产生的一切后果承担全部责任——包括速率限制、时段锁定被拒、账户警告、暂停或封禁。如果 Resy 反对你使用此服务,请停止使用。
本节是维护者出于善意对条款所作的概述,不构成法律建议,也不会修改或取代 Resy 的实际服务条款。
安装
npm install
npm run build
配置
选择以下三种身份验证方式之一。客户端会按以下优先级尝试:
-
RESY_AUTH_TOKEN— 预先获取的x-resy-auth-token。优先级最高;适用于 CI 或已持有令牌的高级用户。 -
RESY_EMAIL+RESY_PASSWORD— 传统方式。向/3/auth/password发送 POST 请求,并缓存返回的令牌。 -
fetchproxy 后备方式 — 未设置环境变量时,服务会使用 fetchproxy 浏览器桥接,通过你已登录的 resy.com 标签页调用
/3/auth/refresh。只需从其发布页面安装一次 ContextMint Bridge 扩展(解压 Chrome 版本,并在chrome://extensions中以解压缩方式加载;目前尚未提供 Safari 版本——它将内置于 ContextMint 应用中,但该应用没有公开下载渠道——因此暂时请使用 Chrome),登录 resy.com 即可——无需在环境变量中填写凭据。ContextMint Bridge 是更名后的 fetchproxy 浏览器扩展,由同一维护者开发——fetchproxy 自己的 README 中也指向了它。其源代码公开于 nullnet-app/contextmint-bridge:你可以自行构建,也可以使用旁边发布的
.sha256文件校验发布压缩包(shasum -a 256 -c contextmint-bridge-chrome-<version>.zip.sha256)。
将 .env.example 复制为 .env,并填写你想使用的方式对应的信息:
# Path 2: password login (classic)
[email protected]
RESY_PASSWORD=changeme
# Path 1: direct token (overrides everything)
RESY_AUTH_TOKEN=...
# Opt-out of the fetchproxy fallback (forces 1 or 2)
RESY_DISABLE_FETCHPROXY=1
安装 MCPB / Claude Desktop 时,打包的清单会提示输入三个可选项——留空即可改用 ContextMint Bridge。
环境变量
所有变量均为可选项。
| 变量 | 默认值 | |
|---|---|---|
RESY_AUTH_TOKEN | 未设置 | 身份验证方式 1:预先获取的 x-resy-auth-token,按原样使用。优先级最高。 |
RESY_EMAIL / RESY_PASSWORD | 未设置 | 身份验证方式 2:密码登录。仅在没有浏览器的主机上需要。 |
RESY_DISABLE_FETCHPROXY | 未设置 | 设为 1 可关闭 ContextMint Bridge 方式(方式 3)。 |
RESY_TOKEN_CACHE | 开启 | 设为 false 可禁用磁盘令牌缓存。通过桥接获取的令牌最多缓存 24 小时。 |
RESY_TOKEN_FILE | $MCP_DATA_DIR/.resy-mcp/token.json | 令牌缓存路径。 |
RESY_API_KEY | 已捕获 | 固定使用 Web 应用 API 密钥,优先于从标签页捕获的密钥和内置默认值。无需手动处理密钥轮换。 |
RESY_API_KEY_FILE | $MCP_DATA_DIR/.resy-mcp/api-key.json | API 密钥缓存路径(仅存储密钥本身)。 |
RESY_CAPTURE_TIMEOUT | 30 | 等待标签页发起 API 调用的秒数,桥接会从中读取令牌。 |
RESY_WS_PORT | 37149 | 桥接汇聚器端口。同一台机器上的所有 fetchproxy MCP 共享此端口,因此要么为所有实例更改端口,要么都不更改(用于本地开发、测试或托管注册的桥接端口)。 |
确认
resy_book 和 resy_cancel 在执行任何更改前都会要求你确认。能够显示确认提示词的客户端(Claude Code)会显示提示词,除非设置了 MCP_CONFIRM_ELICITATION=off。对于无法显示确认提示词的客户端,首次调用会返回预览和 confirmToken,只有再次使用该令牌调用才会继续执行:
| 变量 | 默认值 | |
|---|---|---|
MCP_CONFIRM_MODE | ask-user | 在无法显示确认提示词的客户端(claude.ai、Claude Desktop)上,写入操作的处理方式。ask-user:分两步执行——首次调用不做任何操作,而是返回预览和令牌;模型必须先在聊天中获得你的批准,才能再次携带令牌调用。auto:同样分两步执行,但模型自行查看预览后即可使用令牌。refuse:在此类客户端上拒绝写入操作。能够显示提示词的客户端(Claude Code)始终会显示实际提示词,除非设置了 MCP_CONFIRM_ELICITATION=off。无法识别的值会按 refuse 处理。 |
MCP_CONFIRM_ELICITATION | on | off 表示不显示确认提示词,因此所有客户端都会使用 MCP_CONFIRM_MODE 流程。对于声称支持提示词但从不显示提示词的客户端(opencode 2.0.x),请设置此项(写入操作会一直挂起)。其他任何值都会保持为 on,并在 stderr 上发出警告。 |
MCP_CONFIRM_TTL_SECONDS | 600 | 令牌的有效时长。 |
MCP_CONFIRM_SECRET | 每个进程随机生成 | 签名密钥;只有在令牌必须跨服务重启继续有效时才设置。在 mcp-host 上,主机会为每个子进程提供稳定密钥(MCP_HOST_CONFIRM_SECRET),已使用的令牌会记录在 MCP_DATA_DIR 下,因此批准在空闲重启后仍然有效。 |
resy_book 还只会预订预览中显示的确切时段。对于不支持提示词的客户端,预览本身会携带 confirmToken,并绑定该时段的时间、座位类型和条款;你批准后,模型会使用预览中的时间作为 desired_time,并携带令牌再次调用。对于支持提示词的客户端,调用必须先指定时段(desired_time + slot_type + terms_token),然后才会向你发出确认请求。如果时段或条款在此期间发生变化,则不会进行预订,并会返回新的预览。
运行(本地 stdio)
node dist/bundle.js
测试
npm test # tsc typecheck + unit tests (mocked fetch)
npm run smoke # live endpoint probe — requires real .env
说明
- api key 是嵌入在 resy.com 的 JS bundle 中的公开密钥。它会从你已登录的标签页中提取并缓存,因此密钥轮换时会自动获取新密钥;而
RESY_API_KEY用于固定指定密钥,仅在你想覆盖默认值时才需要设置。 - Favorites 和 Priority Notify 的端点路径是通过逆向工程得出的;如果线上端点有所不同,请运行
npm run smoke并进行调整。
本项目由 AI(Claude Opus 4.7)开发并维护。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。