opentable-fpx
Query and manage OpenTable (opentable.com) restaurant reservations from a shell with the fpx CLI (@fetchproxy/cli) instead of running the opentable-mcp server — search restaurants, check slot availability, list reservations/favorites, and book/modify/cancel a table via one-shot GraphQL + REST calls through a signed-in browser tab. Use when you want OpenTable data or actions without the MCP, in a script, or on a machine where the MCP isn't installed. Skill: opentable-fpx Owner: chrischall Summary: Query and manage OpenTable (opentable.com) restaurant reservations from a shell with the fpx CLI (@fetchproxy/cli) instead of running the opentable-mcp server — search restaurants, check slot availability, list reservations/favorites, and book/modify/cancel a table via one-shot GraphQL + REST calls through a signed-in browser tab. Use when you want OpenTable data or act
Rank
62
Safety
84
Downloads
1.8k
Updated
Oct 10, 2026
Version
1.3.3
Source
CLAWHUB
About
What it does, and when to use it.
Capability contract not published. No trust telemetry is available yet. 1.8K downloads reported by the source. Last updated 10/10/2026.
Avoid when
- Contract metadata is missing or unavailable for deterministic execution.
Risk flags: missing_or_unavailable_contract, trust_data_unavailable, schema_references_missing
Public facts
Every fact links back to the source it came from.
- Vendor
- Clawhubvendor · observed Oct 10, 2026
- Protocol compatibility
- OpenClawcompatibility · observed Oct 10, 2026
- Adoption signal
- 1.8K downloadsadoption · observed Oct 10, 2026
- Latest release
- 1.3.3release · observed Oct 9, 2026
- Handshake status
- UNKNOWNsecurity
Install and run
Setup complexity: low.
clawhub skill install s17cjx1a349nz5apaqp02vgz4h85728z:opentable-fpx- Setup complexity is classified as HIGH. You must provision dedicated cloud infrastructure or an isolated VM. Do not run this directly on your local workstation.
- Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data.
Contract: missing
curl -s "https://www.xpersona.co/api/v1/agents/clawhub-chrischall-opentable-fpx/snapshot"
Documentation
CLAWHUB
149,118 characters of source documentation, loaded on request.
Extracted files
4 files captured from the source.
SKILL.md
---
name: opentable-fpx
description: >-
Query and manage OpenTable (opentable.com) restaurant reservations from a
shell with the fpx CLI (@fetchproxy/cli) instead of running the
opentable-mcp server — search restaurants, check slot availability, list
reservations/favorites, and book/modify/cancel a table via one-shot
GraphQL + REST calls through a signed-in browser tab. Use when you want
OpenTable data or actions without the MCP, in a script, or on a machine
where the MCP isn't installed.
---
# OpenTable via fpx (no MCP)
OpenTable fronts `www.opentable.com` with Akamai bot protection, and every
booking/cancel action rides the user's own signed-in session (their
loyalty account, saved cards) — there's no API key and no server-side
login. `fpx` routes requests through the user's own signed-in browser tab
(the ContextMint Bridge extension), which already carries a cleared session, so
the same requests the opentable.com web app makes succeed.
This is the same data/actions the `opentable_*` MCP tools expose, reached
with one-shot CLI calls instead of a running server. Every body/header/hash
below is transcribed verbatim from opentable-mcp's `src/client.ts` and
`src/tools/*.ts` — not guessed.
## One-time setup
```sh
npm install -g @fetchproxy/cli # provides `fpx`
fpx profile add opentable --domain opentable.com
fpx pair -p opentable # prints a pair code → approve in ContextMint Bridge
```
Requirements: the **ContextMint Bridge** browser extension installed
(https://github.com/nullnet-app/contextmint-bridge/releases; Chrome: load the zip unpacked; Safari isn't available yet, so use Chrome for now), an open
`www.opentable.com` tab **signed in**, and its Chrome **Site access**
allowing `opentable.com`. Pairing persists — after the first approval every
later `fpx` call reuses it.
ContextMint Bridge is the fetchproxy extension renamed, same maintainer (https://github.com/chrischall/fetchproxy#extension); source at https://github.com/nullnet-app/contextmint-bridge — build it or verify a release zip with `shasum -a 256 -c contextmint-bridge-chrome-<version>.zip.sha256`.
## Core call pattern
Two response families:
- **SSR HTML** (`/s`, `/r/{slug}`, `/user/dining-dashboard`,
`/user/favorites`, `/booking/details`) embeds the page's data as a
`window.__INITIAL_STATE__ = {...}` (or `"__INITIAL_STATE__":{...}`) JSON
blob inside the HTML — extract it with `references/extract-initial-state.mjs`
before `jq`.
- **`/dapi/...` JSON/GraphQL** returns plain JSON on stdout — pipe straight
to `jq`.
```sh
fpx get 'https://www.opentable.com/r/state-of-confusion-charlotte' -p opentable \
| node references/extract-initial-state.mjs \
| jq '.restaurantProfile.restaurant | {id: .restaurantId, name, bookable: (.type != "Listing")}'
```
Most GraphQL calls here are **Apollo persisted queries** — you send an
operation name + a pre-registered `sha256Hash`, never GraphQL text. Write
the body to a file first (a heredoc_meta.json
{
"ownerId": "kn700jq4sjtf2anb0rk3ft4p7n856872",
"slug": "opentable-fpx",
"version": "1.3.3",
"publishedAt": 1791588592933
}references/opentable-fpx-requests.md
# OpenTable requests for fpx
All paths are relative to `https://www.opentable.com`. Bodies, headers, and
persisted-query hashes below are transcribed verbatim from opentable-mcp's
`src/client.ts`, `src/tools/*.ts`, and `src/tools/booking-flow.ts` — not
guessed. If a shape here stops working, re-check those files (or re-capture
per the note at the end) before assuming this doc is stale.
Two response families:
- **SSR HTML** pages embed the page's data as `window.__INITIAL_STATE__ =
{...};` or `"__INITIAL_STATE__":{...}` inside the HTML. Pipe through
`extract-initial-state.mjs` (same directory) before `jq`.
- **`/dapi/...` JSON/GraphQL** endpoints return plain JSON on stdout — `jq`
directly.
Every write here (favorites add/remove, slot-lock, make-reservation,
cancel) is a REAL action against the signed-in account — there is no
confirm-gate or preview-then-`confirmToken` step like the MCP's write tools
have. Preview before you commit.
---
## 1. Search restaurants
`GET /s` — SSR. Data lives at `state.multiSearch.restaurants[]`
(`state.multiSearch.totalRestaurantCount`, `.metro.name`, `.metroId` for
the search's resolved metro). No slot/availability data here — that's §3.
```sh
fpx get 'https://www.opentable.com/s?term=Italian%20Charlotte&covers=2&dateTime=2026-08-01T19:00' \
-p opentable | node extract-initial-state.mjs \
| jq '.multiSearch.restaurants[] | {id: .restaurantId, name, cuisine: .primaryCuisine.name, url: .urls.profileLink.link, rating: .statistics.reviews.ratings.overall.rating}'
```
Query params (all optional, build the ones you have): `term` (free text —
join `"<term> <location>"` yourself, OpenTable does), `covers` (party
size), `dateTime` (`YYYY-MM-DDTHH:MM`, defaults the ranking not the
results), `latitude`, `longitude`, `metroId` (e.g. `8` = SF Bay Area, `31`
= Charlotte).
## 2. Restaurant detail
`GET /r/{slug}` — SSR. Data lives at `state.restaurantProfile.restaurant`.
A subset of (older) listings 404 here and are served at the **root**
path `/{slug}` instead (e.g. `/the-cellar-at-duckworths`) — try `/r/{slug}`
first, fall back to `/{slug}` on a 404. **Numeric ids route to
`/restaurant/profile/{id}`** instead of either — you
need the slug (from §1's `urls.profileLink.link`, or the venue's known
URL).
```sh
fpx get 'https://www.opentable.com/r/state-of-confusion-charlotte' -p opentable \
| node extract-initial-state.mjs \
| jq '.restaurantProfile.restaurant | {id: .restaurantId, name, type, bookable: (.type != "Listing"), phone: .contactInformation.formattedPhoneNumber}'
```
`type: "Listing"` (vs `"GuestCenter"`) means info-only — no slot picker,
no booking flow; surface the phone number instead of trying §6–8.
## 3. Find available slots
`POST /dapi/fe/gql?optype=query&opname=RestaurantsAvailability` — Apollo
persisted query (hash only, no GraphQL text sent). Response:
`data.availability[].availabilityDays[].slots[]`, each slot carrying
`timeOffsetMinutes` (relative to the `time` you sent, NOT absolute),skill-card.md
## Description: Helps agents search OpenTable, check availability, and manage reservations and favorites through a signed-in browser session using shell commands. This skill is ready for commercial/non-commercial use. ## Publisher: [chrischall](https://clawhub.ai/user/chrischall) ### License/Terms of Use: MIT-0 ## Use Case: People and developers using OpenTable can search restaurants, inspect availability and existing reservations, and request bookings, modifications, cancellations, or favorite changes through their signed-in browser session. ### Deployment Geography for Use: Global ## Known Risks and Mitigations: Risk: A signed-in session can make real bookings, modifications, cancellations, and favorite changes without an enforced final confirmation. Mitigation: Prefer read-only use; require the user to review and explicitly approve each account-changing command before execution. Risk: Bookings or cancellations may involve fees, saved cards, experiences, or 3-D Secure steps. Mitigation: Review booking details and cancellation terms before acting; involve the user for payment or 3-D Secure steps. ## Reference(s): - [OpenTable FPX request reference](references/opentable-fpx-requests.md) - [Initial-state extraction helper](references/extract-initial-state.mjs) - [ContextMint Bridge](https://github.com/nullnet-app/contextmint-bridge) - [FetchProxy CLI and extension](https://github.com/chrischall/fetchproxy#extension) ## Skill Output: **Output Type(s):** [Shell commands, Guidance] **Output Format:** [Markdown with shell commands and JSON examples] **Output Parameters:** [1D] **Other Properties Related to Output:** [May return restaurant, availability, reservation, profile, and favorite information from the signed-in account.] ## Skill Version(s): 1.3.3 (source: server-resolved release metadata) ## Ethical Considerations: Users should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.
AionUi
Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!
activepieces
AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents
cherry-studio
AI productivity studio with smart chat, autonomous agents, and 300+ assistants.
CopilotKit
The Frontend for Agents & Generative UI. React + Angular
Machine-readable data
The same record, as JSON, for agents and crawlers.
{
"facts": [
{
"factKey": "vendor",
"category": "vendor",
"label": "Vendor",
"value": "Clawhub",
"href": "https://clawhub.ai/chrischall/skills/opentable-fpx",
"sourceUrl": "https://clawhub.ai/chrischall/skills/opentable-fpx",
"sourceType": "profile",
"confidence": "medium",
"observedAt": "2026-10-10T01:16:04.960Z",
"isPublic": true
},
{
"factKey": "protocols",
"category": "compatibility",
"label": "Protocol compatibility",
"value": "OpenClaw",
"href": "https://www.xpersona.co/api/v1/agents/clawhub-chrischall-opentable-fpx/contract",
"sourceUrl": "https://www.xpersona.co/api/v1/agents/clawhub-chrischall-opentable-fpx/contract",
"sourceType": "contract",
"confidence": "medium",
"observedAt": "2026-10-10T01:16:04.960Z",
"isPublic": true
},
{
"factKey": "traction",
"category": "adoption",
"label": "Adoption signal",
"value": "1.8K downloads",
"href": "https://clawhub.ai/chrischall/opentable-fpx",
"sourceUrl": "https://clawhub.ai/chrischall/opentable-fpx",
"sourceType": "profile",
"confidence": "medium",
"observedAt": "2026-10-10T01:16:04.960Z",
"isPublic": true
},
{
"factKey": "latest_release",
"category": "release",
"label": "Latest release",
"value": "1.3.3",
"href": "https://clawhub.ai/chrischall/opentable-fpx",
"sourceUrl": "https://clawhub.ai/chrischall/opentable-fpx",
"sourceType": "release",
"confidence": "medium",
"observedAt": "2026-10-09T23:29:52.933Z",
"isPublic": true
},
{
"factKey": "handshake_status",
"category": "security",
"label": "Handshake status",
"value": "UNKNOWN",
"href": "https://www.xpersona.co/api/v1/agents/clawhub-chrischall-opentable-fpx/trust",
"sourceUrl": "https://www.xpersona.co/api/v1/agents/clawhub-chrischall-opentable-fpx/trust",
"sourceType": "trust",
"confidence": "medium",
"observedAt": null,
"isPublic": true
}
],
"events": [
{
"eventType": "release",
"title": "Release 1.3.3",
"description": "- Removed the file skill-card.md. - No other changes to code or documentation content.",
"href": "https://clawhub.ai/chrischall/opentable-fpx",
"sourceUrl": "https://clawhub.ai/chrischall/opentable-fpx",
"sourceType": "release",
"confidence": "medium",
"observedAt": "2026-10-09T23:29:52.933Z",
"isPublic": true
}
]
}Record generated Oct 10, 2026.
