easytable-mcp
# easytable-mcp
An MCP server for **easyTable** restaurant reservations. easyTable is a
restaurant table-booking system with a public per-restaurant widget at
`https://book.easytable.com/book/?id=<restaurantId>`.
Every request rides the user's own signed-in, Cloudflare-cleared
`book.easytable.com` browser tab via the
[`@fetchproxy/server`](https://github.com/chrischall/fetchproxy) bridge — the
site blocks server-side requests, and there is no login (the restaurant is
identified by its `id`).
> This project was developed and is maintained by AI (Claude Code). Use at your
> own discretion.
## Tools
| Tool | Kind |
| --- | --- |
| `easytable_list_types` | read — bookable areas/types for a restaurant |
| `easytable_list_dates` | read — bookable dates for an area + party size |
| `easytable_list_times` | read — available time slots |
| `easytable_find_bookings` | read — look up bookings by phone number |
| `easytable_create_booking` | write (confirm-gated) — make a reservation |
| `easytable_modify_booking` | write (confirm-gated) — change a reservation |
| `easytable_cancel_booking` | write (confirm-gated) — cancel a reservation |
| `easytable_healthcheck` | read — bridge connection status |
Writes are `confirm`-gated: without `confirm: true` they return a dry-run
preview and make no network call.
## Setup
1. Install the [fetchproxy](https://github.com/chrischall/fetchproxy) browser
extension.
2. Open a booking widget in Chrome: `https://book.easytable.com/book/?id=<id>`
and let it finish loading.
3. The first tool call prints a one-time pair code to approve in the extension.
`create` and `modify` additionally read the widget's Cloudflare Turnstile token
from the loaded confirm step, so a booking-widget tab must be open when you
confirm one.
## Development
```sh
npm install
npm run build
npm test
```
See `docs/EASYTABLE-API.md` for the reverse-engineered request/response shapes
and `CLAUDE.md` for architecture notes.
## License
MIT
TDQS
Scored across 8 tools
Each tool has a clearly distinct purpose: availability lookup (list_dates/list_times/list_types), booking lifecycle (create/find/modify/cancel), and diagnostics (healthcheck). No two tools overlap in function.
Most tools follow a consistent verb_noun pattern (list_dates, create_booking, cancel_booking, find_bookings, modify_booking). The single-word healthcheck deviates slightly but is still understandable and not confusing.
Eight tools is well-scoped for a restaurant booking MCP server. The count covers the core booking lifecycle, availability checks, and a useful diagnostic without bloat.
The tool surface covers the full booking workflow: discover types/dates/times, create bookings, look up existing bookings by mobile, modify, and cancel. The healthcheck tool also fills the obvious debugging gap for bridge-related failures.