360 Secure SkillHub
360 安全技能中心

easytable

面向 easyTable 餐厅订座系统:经用户已登录且通过 Cloudflare 校验的浏览器标签页和 ContextMint Bridge 扩展,列出订座区域、可订日期与时段,按手机号查找现有预订,并在用户确认后创建、修改或取消餐桌预订。

chrischall
chrischall
热度 63.47
最近更新 2026-10-10 07:26:14
分类:生活依赖:MCP 服务 / 联网浏览搜索 / 第三方 API应用场景:日程安排 / 工作流

安装技能

复制下面的话术发给你的 Agent,它会通过 secure-skills 检索并安装该技能。

执行命令安装此 skill: npx secure-skills-cli add easytable
Metadata
name
easytable
description
Use when the user wants to check restaurant availability or make, change, or cancel a table reservation at a restaurant that books through easyTable (a book.easytable.com/book/?id=<id> widget). Covers listing booking areas, dates and times, looking up existing bookings by phone, and creating/modifying/cancelling reservations.

easyTable reservations

easyTable is a restaurant table-booking system. Each restaurant has a public booking widget at https://book.easytable.com/book/?id=<restaurantId> — the id is the only identifier (there's no login). This MCP drives that widget through the user's own signed-in, Cloudflare-cleared browser tab via the ContextMint Bridge extension (fetchproxy's browser extension); the site blocks any server-side request.

Setup (one time)

  1. Install the ContextMint Bridge browser extension from https://github.com/nullnet-app/contextmint-bridge/releases (Chrome: load the contextmint-bridge-chrome-*.zip unpacked; Safari: ships inside the ContextMint app, no public download yet — use Chrome for now). It is the renamed fetchproxy extension, same maintainer; source is public — build it or verify the zip with its published .sha256.
  2. Open a booking widget in Chrome: https://book.easytable.com/book/?id=<restaurantId>. Let the page finish loading — its Cloudflare Turnstile check solves itself.
  3. The first tool call prints a one-time pair code; approve it in ContextMint Bridge.

Typical flow

  1. easytable_list_types — the restaurant's booking areas (e.g. indoor, bar); note the type id.
  2. easytable_list_dates — bookable dates for that type + party size.
  3. easytable_list_times — time slots (HH:MM) for a chosen date.
  4. easytable_create_booking — make the reservation (needs name + mobile).

To change or cancel, first easytable_find_bookings with the mobile the booking was made under, then easytable_modify_booking / easytable_cancel_booking with the returned booking id.

Writes are confirmed first

create, modify, and cancel ask the user to confirm before anything is sent: a confirmation prompt where the client supports one (unless the server sets MCP_CONFIRM_ELICITATION=off). Otherwise the first call sends nothing and returns status: "confirmation-required" with a preview and a confirmToken — show the user the preview, and only after they approve it in chat call again with the same arguments plus that confirmToken. The token is single-use; a changed argument is refused as DRAFT_CHANGED with a fresh preview (see MCP_CONFIRM_MODE).

cancel looks the booking up first (a read) and refuses a bookingId that isn't one of that mobile's bookings; its preview's booking shows the matching row (date, time, party) so the user can see which reservation they're cancelling.

create and modify submit a Cloudflare Turnstile token the MCP reads from the widget tab's hidden input, so a book.easytable.com/book/?id=<id> tab must be open and loaded when you confirm. The token is single-use and expires after a few minutes; if a create fails on the token, reload the tab and retry. If a create/modify comes back with an unknown outcome (a timeout, or a reply easyTable didn't clearly accept or reject), the booking may already exist — run easytable_find_bookings with the guest mobile before retrying. cancel needs no token.

modify replaces the whole booking, and easyTable offers no way to read an existing booking's email or comment back. Ask the user for the booking's current email, comment (special requests, allergy notes) and company and pass them through unchanged, or pass '' to clear one on purpose; the preview lists what will be cleared.

Notes

  • Times are HH:MM; the widget internally uses minute-of-day.
  • All reads and the whole booking flow are the user's own actions on their own browser session — no easyTable account or API key is involved.