io.github.chrischall/easytable-mcp

Official registry E-commerce

easyTable restaurant reservations for Claude — availability, and create/modify/cancel bookings

Install

Add this to your client's MCP configuration (Claude Desktop: claude_desktop_config.json; Cursor: .cursor/mcp.json; VS Code and others use the same "mcpServers" shape).

NPM package easytable-mcp
Claude Code
claude mcp add easytable-mcp -e 'EASYTABLE_WS_PORT=<EASYTABLE_WS_PORT>' -e 'EASYTABLE_DEBUG=<EASYTABLE_DEBUG>' -e 'FETCHPROXY_WS_HOST=<FETCHPROXY_WS_HOST>' -e 'FETCHPROXY_IDENTITY_DIR=<FETCHPROXY_IDENTITY_DIR>' -- npx -y easytable-mcp@1.2.8
JSON configuration (Claude Desktop, Cursor, VS Code)
{
    "mcpServers": {
        "easytable-mcp": {
            "command": "npx",
            "args": [
                "-y",
                "easytable-mcp@1.2.8"
            ],
            "env": {
                "EASYTABLE_WS_PORT": "<EASYTABLE_WS_PORT>",
                "EASYTABLE_DEBUG": "<EASYTABLE_DEBUG>",
                "FETCHPROXY_WS_HOST": "<FETCHPROXY_WS_HOST>",
                "FETCHPROXY_IDENTITY_DIR": "<FETCHPROXY_IDENTITY_DIR>"
            }
        }
    }
}

Environment variables

  • EASYTABLE_WS_PORT Override the fetchproxy WebSocket port (default 37149).
  • EASYTABLE_DEBUG Set to 1 to log the bridge role and per-request debug lines to stderr.
  • FETCHPROXY_WS_HOST Bridge bind interface, a literal IP only (default 127.0.0.1). Keep on loopback; exists for a hosted child in its own network namespace.
  • FETCHPROXY_IDENTITY_DIR Absolute path for the long-term bridge identity keypair (default ~/.fetchproxy/identity/). Exists for a host that runs a separate child per caller.

Documentation

From the project's README on GitHub, refreshed weekly. Links open on GitHub.

Contents
  1. easytable-mcp
  2. Tools
  3. Confirmations
  4. Setup
  5. Development
  6. License

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

ToolKind
easytable_list_typesread — bookable areas/types for a restaurant
easytable_list_datesread — bookable dates for an area + party size
easytable_list_timesread — available time slots
easytable_find_bookingsread — look up bookings by phone number
easytable_create_bookingwrite (confirmed) — make a reservation
easytable_modify_bookingwrite (confirmed) — change a reservation
easytable_cancel_bookingwrite (confirmed) — cancel a reservation
easytable_healthcheckread — bridge connection status

Confirmations

Every write asks you to confirm it first. A client that can show a confirmation prompt (Claude Code) shows one. Elsewhere the first call sends nothing and returns a preview plus a confirmToken; only a repeat call with the same arguments and that token books, changes or cancels. A cancel looks the booking up first, so its preview shows which reservation it is, and an id that isn't one of that mobile's bookings is refused. The token is single-use, and a changed argument invalidates it.

variabledefault
MCP_CONFIRM_MODEask-userWhat a write does on a client that cannot show a confirmation prompt (claude.ai, Claude Desktop). ask-user: two steps — the first call does nothing and returns a preview plus a token, and the model must get your approval in chat before calling again with it. auto: the same two steps, but the model may use the token after reviewing the preview itself. refuse: writes are refused on such clients. A client that can show prompts (Claude Code) always gets the real prompt, unless MCP_CONFIRM_ELICITATION=off. An unrecognised value is treated as refuse.
MCP_CONFIRM_ELICITATIONonoff never sends a confirmation prompt, so every client gets the MCP_CONFIRM_MODE path. Set it for a client that declares it can show prompts but never does (the gated call hangs — opencode 2.0.x). Any other value stays on, with a stderr warning.
MCP_CONFIRM_TTL_SECONDS600How long a token stays valid.
MCP_CONFIRM_SECRETrandom per processSigning key; set it only if tokens must survive a server restart.

Setup

  1. Install the ContextMint Bridge browser extension from its releases: in Chrome, unzip the contextmint-bridge-chrome-*.zip asset and load it unpacked (chrome://extensions → Developer mode → Load unpacked); in Safari, it ships inside the ContextMint app, which has no public download link yet, so use Chrome for now. ContextMint Bridge is the fetchproxy browser extension under its new name, from the same maintainer — fetchproxy's own README points to it. Its source is public at nullnet-app/contextmint-bridge: build it yourself, or check a release zip against the .sha256 file published beside it (shasum -a 256 -c contextmint-bridge-chrome-<version>.zip.sha256).
  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 ContextMint Bridge.

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.

Environment

No environment variables are required. These optional knobs mirror the .mcpb manifest's settings (the MCP_CONFIRM_* family is under Confirmations):

variabledefault
EASYTABLE_WS_PORT37149Concentrator port for the fetchproxy browser bridge. Every fetchproxy MCP on one machine shares it, so move it for all of them or none (local testing, or a hosted registration's bridge port).
FETCHPROXY_WS_HOST127.0.0.1Bridge bind interface, a literal IP only (anything else is ignored). Keep on loopback; it exists for a hosted child in its own network namespace.
FETCHPROXY_IDENTITY_DIR~/.fetchproxy/identity/Where the bridge's long-term identity keypair is stored, an absolute path only (anything else is ignored). For a host that runs a separate child per caller.
EASYTABLE_DEBUGunsetSet to a truthy value to log the bridge role and per-request debug lines to stderr.

Development

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

Frequently asked questions

What is io.github.chrischall/easytable-mcp?

easyTable restaurant reservations for Claude — availability, and create/modify/cancel bookings

How do I install io.github.chrischall/easytable-mcp?

It runs on your machine. In Claude Code: claude mcp add easytable-mcp -e 'EASYTABLE_WS_PORT=<EASYTABLE_WS_PORT>' -e 'EASYTABLE_DEBUG=<EASYTABLE_DEBUG>' -e 'FETCHPROXY_WS_HOST=<FETCHPROXY_WS_HOST>' -e 'FETCHPROXY_IDENTITY_DIR=<FETCHPROXY_IDENTITY_DIR>' -- npx -y easytable-mcp@1.2.8. For other clients, paste the JSON configuration from this page into their MCP settings.

Does io.github.chrischall/easytable-mcp need an API key?

Its registry entry lists no required key or secret. Some features may still need an account with the service it connects to.

Is io.github.chrischall/easytable-mcp open source?

Yes. Its code is on GitHub under the MIT license.

Who maintains io.github.chrischall/easytable-mcp?

It is published by chrischall. AI.tn lists it but does not maintain or endorse it.

From the official MCP Registry. Listing is not an endorsement: review a server's code and permissions before giving it access to your data.