Skip to main content
Glama
chrischall

easytable-mcp

by chrischall
README.md
# 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

A4.2/5.0

Scored across 8 tools

Disambiguation5/5

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.

Naming Consistency4/5

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.

Tool Count5/5

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.

Completeness5/5

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.

Maintenance

ActivityActive
ResponsivenessResponsive