io.github.chrischall/easytable-mcp
easyTable restaurant reservations for Claude — availability, and create/modify/cancel bookings
التثبيت
أضف هذا إلى إعدادات MCP في عميلك (Claude Desktop: claude_desktop_config.json، وCursor: .cursor/mcp.json، ويستخدم VS Code وغيره الصيغة نفسها «mcpServers»).
easytable-mcpclaude 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
{
"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>"
}
}
}
}
متغيرات البيئة
EASYTABLE_WS_PORTOverride the fetchproxy WebSocket port (default 37149).EASYTABLE_DEBUGSet to 1 to log the bridge role and per-request debug lines to stderr.FETCHPROXY_WS_HOSTBridge 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_DIRAbsolute path for the long-term bridge identity keypair (default ~/.fetchproxy/identity/). Exists for a host that runs a separate child per caller.
التوثيق
مأخوذ من ملف README للمشروع على GitHub ويُحدَّث أسبوعيًا. تفتح الروابط على GitHub.
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
| 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 (confirmed) — make a reservation |
easytable_modify_booking | write (confirmed) — change a reservation |
easytable_cancel_booking | write (confirmed) — cancel a reservation |
easytable_healthcheck | read — 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.
| variable | default | |
|---|---|---|
MCP_CONFIRM_MODE | ask-user | What 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_ELICITATION | on | off 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_SECONDS | 600 | How long a token stays valid. |
MCP_CONFIRM_SECRET | random per process | Signing key; set it only if tokens must survive a server restart. |
Setup
- Install the ContextMint Bridge browser extension from its
releases:
in Chrome, unzip the
contextmint-bridge-chrome-*.zipasset 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.sha256file published beside it (shasum -a 256 -c contextmint-bridge-chrome-<version>.zip.sha256). - Open a booking widget in Chrome:
https://book.easytable.com/book/?id=<id>and let it finish loading. - 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):
| variable | default | |
|---|---|---|
EASYTABLE_WS_PORT | 37149 | Concentrator 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_HOST | 127.0.0.1 | Bridge 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_DEBUG | unset | Set 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
الأسئلة الشائعة
ما هو io.github.chrischall/easytable-mcp؟
easyTable restaurant reservations for Claude — availability, and create/modify/cancel bookings
كيف أثبّت io.github.chrischall/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 من هذه الصفحة في إعدادات MCP الخاصة بهم.
هل يحتاج io.github.chrischall/easytable-mcp إلى مفتاح API؟
لا يذكر إدراجه في السجل أي مفتاح أو سر إلزامي. قد تتطلب بعض الميزات حسابًا لدى الخدمة التي يتصل بها.
هل io.github.chrischall/easytable-mcp مفتوح المصدر؟
نعم. شيفرته متاحة على GitHub بترخيص MIT.
من يصون io.github.chrischall/easytable-mcp؟
ينشره chrischall. يدرجه AI.tn لكنه لا يصونه ولا يوصي به.
من سجل MCP الرسمي. الإدراج ليس توصية: راجع شيفرة الخادم وصلاحياته قبل منحه الوصول إلى بياناتك.