mcpField
R
resy-mcp

resy-mcp

本地服务
github.com/chrischall地图与出行23 天前更新

关于 resy-mcp

resy-mcp 是面向 Claude 的 Resy 预订管理 MCP 服务,支持搜索餐厅、预约和管理收藏及 Priority Notify。它使用 Resy 网页应用的私有接口,预订与取消需确认,且受 Resy 使用条款和账户限制约束。

主要功能

  1. 01按日期和人数搜索餐厅及可订时段
  2. 02查询餐厅详情和可预订时段
  3. 03预订及取消预约
  4. 04查看历史预约与收藏餐厅
  5. 05管理 Priority Notify 订阅

适用场景

  1. 01查找指定日期和人数的餐位
  2. 02预览并确认具体时段后预订
  3. 03查看、取消或整理现有预约
  4. 04管理餐厅收藏和 Priority Notify

MCP 相关

它通过 MCP 向客户端提供 Resy 个人资料、餐厅、预约、收藏和 Priority Notify 工具。认证可使用令牌、邮箱密码或 ContextMint Bridge 浏览器会话;预订和取消在执行前需确认。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"chrischall-resy": {
"command": "npx",
"args": [
"-y",
"resy-mcp"
],
"env": {
"RESY_EMAIL": "<RESY_EMAIL>",
"RESY_PASSWORD": "<RESY_PASSWORD>",
"RESY_AUTH_TOKEN": "<RESY_AUTH_TOKEN>",
"RESY_DISABLE_FETCHPROXY": "<RESY_DISABLE_FETCHPROXY>",
"RESY_API_KEY": "<RESY_API_KEY>",
"RESY_TOKEN_CACHE": "<RESY_TOKEN_CACHE>",
"RESY_TOKEN_FILE": "<RESY_TOKEN_FILE>",
"RESY_API_KEY_FILE": "<RESY_API_KEY_FILE>",
"RESY_CAPTURE_TIMEOUT": "<RESY_CAPTURE_TIMEOUT>",
"RESY_WS_PORT": "<RESY_WS_PORT>"
}
}
}
}
启动命令npx -y resy-mcp
需要配置的环境变量
RESY_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+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npmresy-mcp1.3.5

工具

15

收录的工具列表 · 更新于 2 周前

参数类型必填说明
viewenum否响应格式:"compact"(默认)会省略响应中其他位置已包含的字段;"full" 返回此服务所理解的所有字段。compact 会从响应中剔除图片/头像 URL;"full" 原样返回 Resy 的载荷。不进行字段投影:此服务没有经过验证的 Resy 字段重要性记录,臆造投影规则可能会丢弃调用方需要的字段。compact | full

详细介绍

resy-mcp

CI npm license

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_notifyPriority 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

配置

选择以下三种身份验证方式之一。客户端会按以下优先级尝试:

  1. RESY_AUTH_TOKEN — 预先获取的 x-resy-auth-token。优先级最高;适用于 CI 或已持有令牌的高级用户。

  2. RESY_EMAIL + RESY_PASSWORD — 传统方式。向 /3/auth/password 发送 POST 请求,并缓存返回的令牌。

  3. 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.jsonAPI 密钥缓存路径(仅存储密钥本身)。
RESY_CAPTURE_TIMEOUT30等待标签页发起 API 调用的秒数,桥接会从中读取令牌。
RESY_WS_PORT37149桥接汇聚器端口。同一台机器上的所有 fetchproxy MCP 共享此端口,因此要么为所有实例更改端口,要么都不更改(用于本地开发、测试或托管注册的桥接端口)。

确认

resy_book 和 resy_cancel 在执行任何更改前都会要求你确认。能够显示确认提示词的客户端(Claude Code)会显示提示词,除非设置了 MCP_CONFIRM_ELICITATION=off。对于无法显示确认提示词的客户端,首次调用会返回预览和 confirmToken,只有再次使用该令牌调用才会继续执行:

变量默认值
MCP_CONFIRM_MODEask-user在无法显示确认提示词的客户端(claude.ai、Claude Desktop)上,写入操作的处理方式。ask-user:分两步执行——首次调用不做任何操作,而是返回预览和令牌;模型必须先在聊天中获得你的批准,才能再次携带令牌调用。auto:同样分两步执行,但模型自行查看预览后即可使用令牌。refuse:在此类客户端上拒绝写入操作。能够显示提示词的客户端(Claude Code)始终会显示实际提示词,除非设置了 MCP_CONFIRM_ELICITATION=off。无法识别的值会按 refuse 处理。
MCP_CONFIRM_ELICITATIONonoff 表示不显示确认提示词,因此所有客户端都会使用 MCP_CONFIRM_MODE 流程。对于声称支持提示词但从不显示提示词的客户端(opencode 2.0.x),请设置此项(写入操作会一直挂起)。其他任何值都会保持为 on,并在 stderr 上发出警告。
MCP_CONFIRM_TTL_SECONDS600令牌的有效时长。
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)开发并维护。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。