server.json
1 field changed
- version
-
1.3.51.4.1
io.github.chrischall/opentable-mcp
10 changes recorded. MCP Harbor re-reads this listing from the official registry every six hours and asks the live server what it exposes, and keeps what changed between one look and the next.
https://raw.githubusercontent.com/chrischall/opentable-mcp/HEAD/AGENTS.md
− # AGENTS.md — opentable-mcp− Guidance for coding agents working in this repo.− ## TL;DR− OpenTable MCP server with 15 tools (read + write), fronted by a− pluggable browser bridge. Default transport: localhost WebSocket via− [`@fetchproxy/server`](https://github.com/chrischall/fetchproxy) — the− companion browser extension, ContextMint Bridge, is installed separately− from https://github.com/nullnet-app/contextmint-bridge/releases (Chrome:− unpacked zip; Safari not available yet — use Chrome for now) rather than− embedded in this repo. Opt-in alternative:− `OT_BRIDGE=mcp-chrome` routes through hangwin/mcp-chrome's HTTP MCP− endpoint instead. Either way, every request rides the user's own browser− session — their cookies, their TLS, their JS context — never ours.− ## Bridge selection− `OT_BRIDGE` env var picks the transport:− - `OT_BRIDGE=websocket` (default) — wraps `@fetchproxy/server`'s− `FetchproxyServer` (WebSocket on 127.0.0.1:37149; override with− `OT_WS_PORT`). The user installs the ContextMint Bridge extension once− (Chrome / Safari) instead of loading a per-MCP embedded extension.− See https://github.com/nullnet-app/contextmint-bridge/releases.− - `OT_BRIDGE=mcp-chrome` — talks to hangwin/mcp-chrome at− `http://127.0.0.1:12306/mcp` (override with `OT_MCP_CHROME_URL`).− Requires mcp-chrome ≥ the release containing− [PR #348](https://github.com/hangwin/mcp-chrome/pull/348) — the− `tabUrl` parameter on `chrome_network_request`. Pre-PR mcp-chrome− versions are active-tab-only and break credentialed cross-origin− fetches. Live-verification of this path is pending the upstream merge.− **Read-only:** writes (book, modify, cancel, favorites) are refused up− front — they need a CSRF-bearing relay tab this transport can't supply —− and `opentable_find_slots` is unavailable (no `graphql` capability).− ## Commands− - `npm test` — vitest, all mocked, no network. Must stay green.− - `npm run build` — `tsc --noEmit` typecheck + esbuild bundle → `dist/bundle.js`.− - `npx tsc --noEmit` — typecheck only (also runs as part of `npm run build`).− - `node dist/bundle.js` — launch the MCP server over stdio (also starts the WS listener).− - `npx tsx scripts/probe-find-slots.ts` — live GET round-trip via the extension.− - `npx tsx scripts/probe-favorites-toggle.ts` — live add + remove favorite.− - `npx tsx scripts/probe-book-cancel.ts` — **books and immediately cancels a real reservation.** Pick a restaurant that won't mind a 3-second booking.− - `npx tsx scripts/probe-book-cc-cancel.ts` — same as above but for a CC-required slot (exercises the preview → book flow).− - `npx tsx scripts/probe-book-cancel-uk.ts` — UK-region variant (databaseRegion, country handling).+ CLAUDE.md
Showing the first 40 of each.
https://raw.githubusercontent.com/chrischall/opentable-mcp/HEAD/AGENTS.md
− OpenTable MCP server with 13 tools (read + write), fronted by a− - **`src/booking-token.ts`** — encodes/decodes the opaque, stateless base64-JSON `booking_token` that bridges `opentable_book_preview` → `opentable_book` with a tamper check.− Note: `manifest.json` now lists all 13 tools (was historically out of sync — `opentable_book_preview` was missing). The release workflow rewrites versions but not the tool list — if you change the tool surface, update `manifest.json` by hand.− Commits land on `main` via PR. release-please (`.github/workflows/release-please.yml`) opens or updates a `chore(main): release X.Y.Z` PR whenever Conventional-Commit messages (`feat:`, `fix:`, etc.) accumulate. Merging the release PR (arm `ready-to-merge`) creates the tag and a GitHub Release; the `publish` job then packs the `.mcpb` bundle and `.skill` archive, publishes to npm with provenance, and pushes to the MCP Registry.− - **CC-required slots route through preview.** The slot-lock response doesn't carry the CC-required flag or cancellation policy — those live in the `/booking/details` SSR page's `__INITIAL_STATE__` (`timeSlot.creditCardRequired`, `messages.cancellationPolicyMessage`, `wallet.savedCards`). `opentable_book_preview` fetches that page + slot-locks, and mints a `booking_token` that `opentable_book` consumes. `booking_token` is opaque, stateless base64-JSON — no server-side cache — with a tamper check+ OpenTable MCP server with 15 tools (read + write), fronted by a+ **Read-only:** writes (book, modify, cancel, favorites) are refused up+ front — they need a CSRF-bearing relay tab this transport can't supply —+ and `opentable_find_slots` is unavailable (no `graphql` capability).+ - **`src/booking-token.ts`** — encodes/decodes the opaque, stateless, HMAC-signed `booking_token` (base64url JSON + signature, 10-minute lifetime) that bridges `opentable_book_preview` → `opentable_book` with a tamper check.+ | `opentable_get_menu` | `tools/restaurants.ts` | Same restaurant profile GET; `restaurantProfile.menus` SSR | read |+ Note: `manifest.json` lists all 15 tools (was historically out of sync — `opentable_book_preview` was missing). The release workflow rewrites versions but not the tool list — if you change the tool surface, update `manifest.json` by hand.+ Commits land on `main` via PR. release-please (`.github/workflows/release-please.yml`) opens or updates a `chore(main): release X.Y.Z` PR whenever Conventional-Commit messages (`feat:`, `fix:`, etc.) accumulate. Merging the release PR creates the tag and a GitHub Release; the `publish` job then packs the `.mcpb` bundle and `.skill` archive, publishes to npm with provenance, and pushes to the MCP Registry.+ - **CC-required slots route through preview.** The slot-lock response doesn't carry the CC-required flag or cancellation policy — those live in the `/booking/details` SSR page's `__INITIAL_STATE__` (`timeSlot.creditCardRequired`, `messages.cancellationPolicyMessage`, `wallet.savedCards`). `opentable_book_preview` fetches that page + slot-locks, and mints a `booking_token` that `opentable_book` consumes. `booking_token` is opaque and stateless — no server-side cache — but HMAC-signed with a key t
We can't find the internet
Attempting to reconnect
Something went wrong!
Attempting to reconnect