BondSeat

io.github.saintmarksventures由 GitHub 账号 saintmarksventures 发布v0.1.2更新于 Oct 24, 2026

Snag hard-to-get Resy tables with automatic cancellation monitoring and scheduled release attempts.

已验证STDIO仅桌面位置与生活效率与工作流

概览

AI 生成的概览

本地 MCP 连接器,让助手搜索 Resy 餐厅,并设置自动预订或取消监控,抢到难订的餐位。

可以做什么
  • 按名称、城市或链接搜索 Resy 餐厅并取得餐厅 ID
  • 按人数、日期和时间段创建预订请求,出现合适餐位时自动下单
  • 读取请求状态与结果(读取有缓存),并列出已有的监控与定时请求
  • 停止后续尝试、恢复暂停的任务、重新恢复过期的连接器访问权限
  • 返回设置、重连与付款链接,交由用餐者完成授权
适用场景
适合希望由助手盯住难订 Resy 餐位的用餐者:监控取消或放位时抢订,并按设定偏好自动完成预订。也适合在对话中查询已有 BondSeat 请求的状态。
运行要求
需要 Node.js 22 或更高版本,以及能启动本地 stdio 进程的 MCP 客户端(npx 包,不提供托管 HTTP 端点)。无需复制 API 密钥:用餐者打开设置链接连接 Resy 并通过 Stripe 授权费用,且需在 Resy 中保存银行卡。可选 BONDSEAT_API_URL 与 BONDSEAT_STATE_FILE 变量;需要网络访问和持久存储,沙箱环境同样如此。
安装前请注意
涉及真实订位与费用:仅在预订成功时收取 10 美元成功费,经 Stripe 授权;餐费由用餐者保存在 Resy 的银行卡支付。连接器会写入、停止和恢复预订任务,授权后可在不再询问的情况下自动下单。凭据以文件形式存于状态文件,依赖文件系统权限保护而非系统钥匙串加密,应放在私有目录并按用餐者隔离。不要将测试指向生产环境。

安装

在 SourceWeft 中

  1. 打开 控制台中的 BondSeat,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

README

BondSeat connector

Snag hard-to-get tables on Resy. BondSeat watches for cancellations or tries to book right when reservations open, then automatically books a table that matches your preferences.

BondSeat carefully manages your credentials and paces availability checks, keeping routine monitoring separate from your personal Resy account.

The agent uses booking tools. The connector keeps the access token, setup codes, retry identifiers and polling state private. The diner only opens a setup link. No token needs to be copied into chat or remembered by the agent.

This is an MCP server using the official TypeScript SDK and local stdio transport. It works with clients that can launch a local MCP process. It is not a hosted HTTP MCP endpoint. The underlying REST API also remains available to custom runtimes.

Install

Requires Node.js 22 or newer. Configure an MCP client that supports local stdio:

json
{  "mcpServers": {    "bondseat": {      "command": "npx",      "args": ["--yes", "@bondseat/[email protected]"]    }  }}

The default connects to the production BondSeat API. There is no API key to copy: when setup is needed, the diner opens a link to connect Resy and authorize the $10 USD success fee. Unsuccessful requests incur no fee. The account-free flow supports Resy; the diner needs a saved card in Resy for restaurant charges and separately authorizes BondSeat's fee through Stripe.

The executable starts MCP when called without arguments. A CLI is also available:

sh
npx --yes @bondseat/[email protected] --helpnpx --yes @bondseat/[email protected] schema requestnpx --yes @bondseat/[email protected] restaurants <<'BONDSEAT_INPUT'{"q":"La Vara","city":"Brooklyn"}BONDSEAT_INPUT

Commands: restaurants, request, status, requests, stop, resume, connect. Pass JSON through stdin. schema <command> prints the MCP tool's input schema without contacting the API. CLI exits: 0 for a result (including pending setup), 1 for an action-required result or runtime error, 2 for invalid input. Read JSON results even on exit 1. Diagnostics never include raw inputs or stored credentials.

The BondSeat skill provides the workflow for OpenClaw and other skill-capable agents. It can use either connected MCP tools or the CLI. Installing the skill does not by itself configure an MCP connection.

Runtime configuration

VariableDefaultPurpose
BONDSEAT_API_URLProduction API at https://6qq9f4msd4.execute-api.us-east-1.amazonaws.com/agent/v1Trusted HTTPS BondSeat API base.
BONDSEAT_STATE_FILE~/.bondseat/connection.jsonPrivate, persistent state for one diner and environment.

A multi-user host must isolate each diner's state. The same file must remain available to subsequent CLI calls and scheduled follow-ups. If a client executes in a sandbox, configure Node, network access and persistent storage there.

For QA development, explicitly configure both variables:

json
{  "BONDSEAT_API_URL": "https://31clusup32.execute-api.us-east-1.amazonaws.com/agent/v1",  "BONDSEAT_STATE_FILE": "/absolute/private/path/bondseat/qa.json"}

Local source development can launch node server.mjs or node cli.mjs from this package after installing dependencies. Remote-only clients need a hosted adapter; this package does not expose an HTTP MCP endpoint.

Agent workflow

  1. Start directly with a name and location: bondseat_request({restaurant: "La Vara", city: "Cobble Hill", partySize: 2, date, startTime: "18:00", endTime: "19:00", confirmed: true}). BondSeat looks up the venue and adds it if missing. Multiple matches return choices without starting a request. No diner-managed restaurant IDs, directory additions or provider credentials are needed for lookup.
  2. For a separate search, use bondseat_restaurants({q: "La Vara", city: "Brooklyn"}) or {url: "https://resy.com/cities/new-york-ny/venues/la-vara"}. Pass the matching restaurantId to bondseat_request, or pass restaurantUrl directly: use the diner's actual authorized date and details. The original instruction may authorize automatic booking; do not ask again when a table appears.
  3. Show the returned setupUrl if setup is required. The diner connects Resy and authorizes the displayed fee on BondSeat/Stripe. The connector retains codes.
  4. Call bondseat_status({}) after pollAfterSeconds to finish setup. It returns the started request; closing/restarting the connector preserves setup state.
  5. bondseat_status({kind, id}) reads saved status. Reads are cached for 60 seconds. Schedule these calls with the agent runtime's background/scheduled task facility; the connector does not schedule itself or push updates. Continue after the chat turn ends until terminal or user action is needed, then notify the diner and end that follow-up. Monitor outcome: FIRED (even with status: PAUSED) or scheduled status: SUCCEEDED means booked. Report the actual bookedSlot and dining details; follow agentInstruction. If the runtime cannot schedule follow-ups, disclose that and share the BondSeat manage page. Never promise a proactive update without scheduling one. Cancellation with nextAction: verify_provider leaves the booking outcome unconfirmed. Ask the diner to check their reservations with the provider; an in-flight attempt may still finish. Do not claim no booking exists or keep polling indefinitely. Later status reads can still report a completed booking.
  6. If credentials need repair, show the returned reconnect link, then use bondseat_resume({kind, id}) when authorized. bondseat_connect({}) restores expired connector access without creating/resuming work or collecting a card.
  7. bondseat_stop({kind, id}) stops future attempts. It cannot cancel an existing restaurant reservation. Payment issues are resolved through paymentUrl, never by submitting another booking.

bondseat_requests({kind: "monitor"}) lists existing requests; pass nextCursor as cursor. Repeat for kind: "scheduled". No API token or idempotency key is a tool argument. Identical dining details intentionally reuse the same request; use resume to repair paused work, not another request.

Storage and deployment

One state file represents one diner and environment. Use a private directory outside the repository, synced folders and prompt attachments. The reference store writes mode-0600 files atomically, locks across processes, and rejects symlinks. It stores credentials on disk with filesystem access protection, not OS-keychain encryption. Custom runtimes can inject their own transactional secret store via withState(callback); the callback receives (state, save) and may persist recovery identifiers before network calls.

The connector persists identifiers before submitting and retries a lost response once with identical identifiers. It honors Retry-After, never polls providers, and never returns bearer tokens or device codes in tool results. Server-side recovery material is KMS-encrypted. Token-exchange replay is allowed for 24 hours and always checks revocation. After that, reconnect restores access to existing requests. Connecting another diner clears the previous diner's cached requests.

Do not point a QA test at production. Production deployment and a real booking test require explicit approval and actual dining details. A success fee is only collected for a successful booking; setup is uncharged.

Validation

sh
npm installnpm test

Tests use an MCP client and simulated REST responses to cover first submission, lost setup/exchange responses, process restarts, concurrent stores, returning diners, payment setup, credential expiry, status caching and secret-free tool results. They never make a restaurant booking or payment.

Protocol references: MCP stdio transport, official SDK.

The release test packs the npm artifact, installs it in a clean temporary directory, and verifies CLI execution and MCP discovery without making live bookings or payments. The connector is MIT licensed; the skill is separately MIT-0 for ClawHub distribution.

来源:README.md,提交 8d4b2cb

工具

0
SourceWeft 尚未在沙箱中启动过该软件包,因此其工具未知。

版本历史

1
  1. v0.1.2最新Sep 20, 2026

评分

已满足适用检查项的 40%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分

    请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。

  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具15 分

    请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。

  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分

    请在仓库或注册中心条目中声明许可证。