{"id":"eeb9fde5-c1c0-4e15-b169-672f772bad7d","entityType":"agent","slug":"clawhub-chrischall-tock-mcp","name":"tock-mcp","canonicalUrl":"https://www.xpersona.co/agent/clawhub-chrischall-tock-mcp","canonicalPath":"/agent/clawhub-chrischall-tock-mcp","generatedAt":"2026-10-10T07:42:01.923Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T00:08:36.305Z","emptyReason":null},"description":"Discover restaurants on Tock (exploretock.com) via MCP — list cities, search a metro, and get a venue's details plus its bookable experiences, prices, party sizes, and open dates/times. Triggers on phrases like \"search Tock for\", \"what's on Tock in Chicago\", \"find a Tock reservation at\", \"does Alinea have availability on Tock\", \"what experiences does <venue> offer on Tock\", or \"my Tock reservations\". Requires tock-mcp installed and the ContextMint Bridge browser extension running in a signed-in exploretock.com tab.","descriptionLabel":"Source description","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 1.9K downloads reported by the source. Last updated 10/10/2026.","installCommand":"clawhub skill install s17cjx1a349nz5apaqp02vgz4h85728z:tock-mcp","sourceUrl":"https://clawhub.ai/chrischall/tock-mcp","homepage":"https://clawhub.ai/chrischall/skills/tock-mcp","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/chrischall/tock-mcp","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/chrischall/skills/tock-mcp","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":65,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"tock-mcp technical dossier on Xpersona with agent coverage, OPENCLEW support, and live trust metadata."},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-10T00:08:36.305Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T00:08:36.305Z","emptyReason":null},"stars":null,"forks":null,"downloads":1850,"packageName":null,"latestVersion":"1.1.8","tractionLabel":"1.9K downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T00:08:36.273Z","emptyReason":null},"lastUpdatedAt":"2026-10-10T00:08:36.305Z","lastCrawledAt":"2026-10-10T00:08:36.273Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-11T00:08:36.273Z","lastVerifiedAt":null,"highlights":[{"version":"1.1.8","createdAt":"2026-10-09T23:30:08.432Z","changelog":"- Removed the file: skill-card.md - Updated SKILL.md: Added new `ambiguous` possible status to `tock_verify_reservation` tool documentation - No user-facing changes to functionality—documentation update only","fileCount":3,"zipByteSize":5955},{"version":"1.1.7","createdAt":"2026-10-07T13:40:18.822Z","changelog":"- Removed the \"skill-card.md\" file. - No feature or functionality changes in this version.","fileCount":3,"zipByteSize":5622},{"version":"1.1.6","createdAt":"2026-10-05T02:54:40.481Z","changelog":"- Removed the skill-card.md file from the project. - No changes to functionality or user-facing behavior.","fileCount":3,"zipByteSize":5661},{"version":"1.1.5","createdAt":"2026-10-03T01:47:09.175Z","changelog":"- Removed the skill-card.md file. - No changes made to functionality or documentation otherwise.","fileCount":3,"zipByteSize":5718},{"version":"1.1.4","createdAt":"2026-09-28T14:00:58.784Z","changelog":"- Renamed the required browser extension from \"fetchproxy\" to \"ContextMint Bridge\" throughout documentation. - Updated installation and usage instructions to reference ContextMint Bridge, including new install and source links. - Clarified pairing procedure to use ContextMint Bridge extension. - Removed the now-obsolete skill-card.md file.","fileCount":3,"zipByteSize":5775},{"version":"1.1.3","createdAt":"2026-09-25T15:52:56.512Z","changelog":"- Removed the file: skill-card.md. - No functional or user-facing changes; this is a minor cleanup release.","fileCount":3,"zipByteSize":5461},{"version":"1.1.2","createdAt":"2026-09-23T21:41:06.546Z","changelog":"- Removed sample file skill-card.md. - No changes to functionality or behavior.","fileCount":3,"zipByteSize":5579},{"version":"1.1.1","createdAt":"2026-09-23T15:39:35.523Z","changelog":"- Removed the file skill-card.md. - No changes to functionality; documentation only.","fileCount":3,"zipByteSize":5600}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s17cjx1a349nz5apaqp02vgz4h85728z:tock-mcp","setupComplexity":"low","setupSteps":["Install using `clawhub skill install s17cjx1a349nz5apaqp02vgz4h85728z:tock-mcp` in an isolated environment before connecting it to live workloads.","No published capability contract is available yet, so validate auth and request/response behavior manually.","Review the upstream CLAWHUB listing at https://clawhub.ai/chrischall/tock-mcp before using production credentials."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-chrischall-tock-mcp/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-chrischall-tock-mcp/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-chrischall-tock-mcp/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-chrischall-tock-mcp/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-chrischall-tock-mcp/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-chrischall-tock-mcp/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-10T07:42:01.919Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-chrischall-tock-mcp/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-chrischall-tock-mcp/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-chrischall-tock-mcp/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-chrischall-tock-mcp/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-10T00:08:36.305Z","emptyReason":null},"readme":"Skill: tock-mcp\n\nOwner: chrischall\n\nSummary: Discover restaurants on Tock (exploretock.com) via MCP — list cities, search a metro, and get a venue's details plus its bookable experiences, prices, party sizes, and open dates/times. Triggers on phrases like \"search Tock for\", \"what's on Tock in Chicago\", \"find a Tock reservation at\", \"does Alinea have availability on Tock\", \"what experiences does <venue> offer on Tock\", or \"my Tock reservations\". Requires tock-mcp installed and the ContextMint Bridge browser extension running in a signed-in exploretock.com tab.\n\nTags: latest:1.1.8\n\nVersion history:\n\nv1.1.8 | 2026-10-09T23:30:08.432Z | auto\n\n- Removed the file: skill-card.md\n- Updated SKILL.md: Added new `ambiguous` possible status to `tock_verify_reservation` tool documentation\n- No user-facing changes to functionality—documentation update only\n\nv1.1.7 | 2026-10-07T13:40:18.822Z | auto\n\n- Removed the \"skill-card.md\" file.\n- No feature or functionality changes in this version.\n\nv1.1.6 | 2026-10-05T02:54:40.481Z | auto\n\n- Removed the skill-card.md file from the project.\n- No changes to functionality or user-facing behavior.\n\nv1.1.5 | 2026-10-03T01:47:09.175Z | auto\n\n- Removed the skill-card.md file.  \n- No changes made to functionality or documentation otherwise.\n\nv1.1.4 | 2026-09-28T14:00:58.784Z | auto\n\n- Renamed the required browser extension from \"fetchproxy\" to \"ContextMint Bridge\" throughout documentation.\n- Updated installation and usage instructions to reference ContextMint Bridge, including new install and source links.\n- Clarified pairing procedure to use ContextMint Bridge extension.\n- Removed the now-obsolete skill-card.md file.\n\nv1.1.3 | 2026-09-25T15:52:56.512Z | auto\n\n- Removed the file: skill-card.md.\n- No functional or user-facing changes; this is a minor cleanup release.\n\nv1.1.2 | 2026-09-23T21:41:06.546Z | auto\n\n- Removed sample file skill-card.md.\n- No changes to functionality or behavior.\n\nv1.1.1 | 2026-09-23T15:39:35.523Z | auto\n\n- Removed the file skill-card.md.\n- No changes to functionality; documentation only.\n\nv1.1.0 | 2026-09-20T02:52:37.524Z | auto\n\n- Removed the sample file skill-card.md.\n- No changes to functionality or user-facing behavior.\n\nv1.0.0 | 2026-09-19T11:19:06.209Z | auto\n\n- Initial release of tock-mcp (version 1.0.0).\n- Removed the skill-card.md file.\n- No functional changes; documentation and core features remain the same.\n\nv0.5.4 | 2026-09-15T18:48:30.527Z | auto\n\n- Removed the sample file skill-card.md from the project.\n- No changes to behavior or functionality; this is a cleanup/maintenance release.\n\nv0.5.3 | 2026-09-14T14:11:18.140Z | auto\n\n- Removed the file: skill-card.md\n- No functional or user-facing changes noted in this version.\n\nv0.5.2 | 2026-09-10T17:51:43.824Z | auto\n\n- Removed the file skill-card.md.\n- No functional or behavioral changes to the skill.\n\nv0.5.1 | 2026-09-09T21:17:11.367Z | auto\n\n- Added documentation on the `view` (“compact”/“full”) parameter for `tock_get_restaurant` and `tock_get_profile` tools, clarifying its effect and which tools support it.\n- Explained the compact/full response shape, what image fields are filtered, and why the choice was made.\n- Provided rationale for which tools do or do not accept the `view` parameter, to avoid confusion.\n- Removed the redundant skill-card.md file.\n\nv0.5.0 | 2026-09-04T22:23:08.274Z | auto\n\n- Removed the skill-card.md file.\n- No functional changes to the skill or its documentation.\n- Housekeeping update to repository structure only.\n\nv0.4.0 | 2026-08-29T13:54:25.188Z | auto\n\n- Removed the skill-card.md file.\n- No changes to core functionality or user-facing documentation.\n\nv0.3.1 | 2026-08-28T21:07:54.949Z | auto\n\n- Removed the skill-card.md file.\n- No functional or interface changes; documentation remains the same.\n\nv0.3.0 | 2026-08-10T19:11:55.261Z | auto\n\nVersion 0.3.0\n\n- Added new tool: `tock_verify_reservation`, which re-queries account status to confirm, cancel, or report missing bookings after an attempt.\n- Updated booking verification protocol to use `tock_verify_reservation` instead of direct reservation list reading.\n- Improved documentation in SKILL.md to clarify verification steps and adjust tool descriptions.\n- Removed skill-card.md file.\n\nv0.2.6 | 2026-08-06T00:43:41.740Z | auto\n\n- Removed the file: skill-card.md.\n- No changes made to features, functionality, or documentation in SKILL.md.\n\nv0.2.5 | 2026-08-01T14:55:30.042Z | auto\n\n- Added a new \"Booking verification protocol\" section to the documentation, outlining steps and rules for confirming Tock reservations.\n- Emphasized that bookings must be verified by both a confirmation artifact and appearance in `tock_list_reservations` after re-query.\n- Explained pitfalls with Tock's post-booking modal and reservation backend lag.\n- Removed the file: skill-card.md.\n\nv0.2.4 | 2026-07-30T12:54:08.893Z | auto\n\n- Removed the sample skill-card.md file.\n- No functional or user-facing changes.\n\nv0.2.3 | 2026-07-27T21:16:06.580Z | auto\n\n- Removed the file: skill-card.md.\n- No changes to features or functionality.\n\nv0.2.2 | 2026-07-27T02:56:43.689Z | auto\n\n- Removed the file: skill-card.md.\n- No changes to functionality or documentation aside from the file removal.\n\nv0.2.1 | 2026-07-19T14:12:17.427Z | auto\n\n- Removed the file skill-card.md.\n- No functional or user-facing changes.\n\nv0.1.0 | 2026-07-05T22:38:06.352Z | auto\n\nInitial release of tock-mcp: discover and browse restaurants on Tock via MCP.\n\n- Provides read-only access to Tock restaurant listings, venue details, bookable experiences, prices, and availability.\n- Tools to list metros, search restaurants, fetch venue details, check availability, and (for signed-in users) view profile/purchases.\n- Works by relaying requests through the user's signed-in browser tab with the fetchproxy extension—no credentials needed.\n- Installation and pairing process requires both the MCP server and fetchproxy browser extension.\n- Tock reservations remain booked directly on exploretock.com; no booking or payment via this tool.\n\nArchive index:\n\nArchive v1.1.8: 3 files, 5955 bytes\n\nFiles: skill-card.md (2165b), SKILL.md (10202b), _meta.json (127b)\n\nFile v1.1.8:SKILL.md\n\n---\nname: tock-mcp\ndescription: Discover restaurants on Tock (exploretock.com) via MCP — list cities, search a metro, and get a venue's details plus its bookable experiences, prices, party sizes, and open dates/times. Triggers on phrases like \"search Tock for\", \"what's on Tock in Chicago\", \"find a Tock reservation at\", \"does Alinea have availability on Tock\", \"what experiences does <venue> offer on Tock\", or \"my Tock reservations\". Requires tock-mcp installed and the ContextMint Bridge browser extension running in a signed-in exploretock.com tab.\n---\n\n# tock-mcp\n\nMCP server for Tock (exploretock.com) — restaurant discovery and availability. Every request is relayed through the user's signed-in browser tab via the [ContextMint Bridge](https://github.com/nullnet-app/contextmint-bridge/releases) browser extension, so there's no cookie paste, no bot-wall dance, and no password handling.\n\n- **npm:** [npmjs.com/package/tock-mcp](https://www.npmjs.com/package/tock-mcp)\n- **Source:** [github.com/chrischall/tock-mcp](https://github.com/chrischall/tock-mcp)\n\n> Tock does not publish an official consumer API, and exploretock.com sits behind a Cloudflare challenge. This server fetches the same server-rendered pages the Tock web app uses (parsing their embedded `window.$REDUX_STATE` store) through your own signed-in browser tab. It is **read-only**: Tock reservations are prepaid tickets, so booking is left to exploretock.com. Use at your own discretion.\n\n## Setup\n\nThe MCP server is half of the picture — the other half is the [ContextMint Bridge](https://github.com/nullnet-app/contextmint-bridge/releases) browser extension that talks to Tock from your signed-in tab. Both are required.\n\n### 1. Install the MCP server\n\nAdd to `.mcp.json` in your project or `~/.claude/mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"tock\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"tock-mcp\"]\n    }\n  }\n}\n```\n\nOr from source:\n\n```bash\ngit clone https://github.com/chrischall/tock-mcp\ncd tock-mcp\nnpm install && npm run build\n# then point .mcp.json at dist/bundle.js\n```\n\n### 2. Install ContextMint Bridge\n\ntock-mcp shares a single browser extension, ContextMint Bridge, with every other fetchproxy-based MCP. Install it once from [its releases page](https://github.com/nullnet-app/contextmint-bridge/releases) — in Chrome, unzip the chrome zip and load it unpacked (`chrome://extensions` → Developer mode → Load unpacked); Safari isn't available yet, so use Chrome for now. ContextMint Bridge is the fetchproxy extension under its new name, same maintainer; its source is public at https://github.com/nullnet-app/contextmint-bridge — build it yourself or check a release zip against its published `.sha256` file. Then open **exploretock.com** and sign in (only needed for the account tools; discovery works signed-out).\n\n### 3. Approve the one-time pair code\n\nThe first tool call prints a pair code to approve in the ContextMint Bridge popup (trust-on-first-use, per identity). Run `tock_healthcheck` to trigger it, approve the code, and you're paired for good.\n\n## Tools\n\n| Tool | What it does |\n| --- | --- |\n| `tock_list_metros` | List Tock cities/metros (name, slug, business count). Filter by name/country. |\n| `tock_search_restaurants` | List / search venues in a metro slug (cuisine, price, neighborhood, slug). |\n| `tock_get_restaurant` | Venue details + its bookable experiences (prices, party sizes). |\n| `tock_get_availability` | A venue's bookable calendar: experiences, prices, open dates/times. |\n| `tock_list_reservations` | The signed-in user's purchases / reservations (needs a signed-in tab). |\n| `tock_get_profile` | The signed-in user's profile (needs a signed-in tab). |\n| `tock_verify_reservation` | After a booking attempt, re-query the account and return `confirmed` / `cancelled` / `not_found` / `ambiguous` (needs a signed-in tab). Use this instead of eyeballing a success screen. |\n| `tock_healthcheck` | Round-trip the bridge; reports status + the pair code on first run. |\n\n## Response shape (`view`)\n\nTwo tools take `view: \"compact\" | \"full\"` — `tock_get_restaurant` and\n`tock_get_profile` — and **`compact` is the default**, so you get the slim\nrung without asking for it. The other six of this server's eight tools have no\n`view`; each for its own reason, below.\n\n**Compact here is media stripping, not a field projection.** `src/view.ts`\nholds no hand-written field list, because this repo has no captured Tock\npayload to derive one from honestly. What it does instead is subtractive: drop\nkeys whose value is a picture, plus **two named explicitly** —\n`profileImageUrl` and `heroImageUrl`.\n\nNaming those two is the load-bearing part, and it is worth knowing why. The\nshared rule anchors its media noun at the START of the key, which is what\nkeeps a flag like `hasThumbnail` alive — and it is also why `profileImageUrl`\n(starts `profile`) and `heroImageUrl` (starts `hero`) both slip past it. That\nwould leave only the fallback rule, which fires when a URL's path happens to\nend in an image extension. A signed or extension-less Tock CDN URL would then\nsurvive compact silently, with nothing in the response to say why. Naming the\nkeys removes the dependency on what a URL happens to look like.\n\nThose two are the only image fields any parsed shape in this server carries —\nthey live on `RestaurantDetails` and nowhere else — and **nothing is kept**:\nno tool here has a picture as its product, so no payload mixes decoration with\ncontent.\n\nExpect one specific non-effect: on **`tock_get_profile` compact provably\nremoves nothing.** The identity record is four fields (`firstName`,\n`lastName`, `email`, `id`), none of them a picture, so both rungs serialise to\nthe same bytes. The rung is declared there for consistency, not for savings.\n\n`view: \"full\"` returns the parsed record untouched. There is deliberately **no\n`raw` rung**: `full` already IS the record this server parsed out of Tock's\npage, so a third value would silently alias one that exists.\n\nWhy the other six have none:\n\n- **`tock_search_restaurants`** returns `RestaurantSummary`, which carries no\n  image key at all — the two image fields exist only on the *details* shape.\n  That is exactly why one of the two restaurant tools has a rung and the other\n  does not; it is not an omission.\n- **`tock_list_metros`** returns hand-built metro records (name, slug, state,\n  country, business count, coordinates). No picture, and no fatter upstream\n  shape behind them to project away from.\n- **`tock_get_availability`** returns an ASSEMBLED calendar — experiences,\n  `openDates`, `openTimes` — built by the parser from Tock's calendar slice,\n  not a pass-through payload. There is no single upstream object to hand back\n  or to slim.\n- **`tock_list_reservations`** returns hand-built reservation records (venue,\n  date/time, party size, experience, cancelled flag) with no media field.\n- **`tock_verify_reservation`** returns a VERDICT — `verdict`, `match`,\n  `searched`, `recheckAdvised`, `reportAs`, `summary`. The verdict is the\n  product, and there is nothing decorative in it to remove.\n- **`tock_healthcheck`** returns a bridge diagnostic, for the same reason.\n\nPassing `view` to one of those is not an error and will not fail: the tool\ndoes not declare it, so zod drops the unknown key and the call runs exactly as\nit would have. You get no warning, so a successful call is not evidence the\nrung was honoured.\n\n## Typical flow\n\n1. `tock_list_metros { query: \"chicago\" }` → find the metro slug.\n2. `tock_search_restaurants { metro: \"chicago\", query: \"tasting menu\" }` → get venue slugs.\n3. `tock_get_availability { slug: \"alinea\", date: \"2026-07-10\", party_size: 2 }` → see experiences and open dates/times.\n4. To book, open `exploretock.com/<slug>` — reservations are prepaid tickets and are completed on Tock.\n\n## Booking verification protocol\n\nBooking happens outside these tools (on exploretock.com, by hand or by UI\nautomation), but **verification is this server's job**. A booking counts as\n**confirmed** only when BOTH hold:\n\n1. a confirmation ID, receipt URL, or confirmation email was captured, **and**\n2. `tock_verify_reservation { venue, date, partySize, bookedMinutesAgo }` returns\n   verdict `confirmed`.\n\nUse `tock_verify_reservation` rather than reading `tock_list_reservations`\nyourself: it checks the canceled and past lists too (a created-then-voided\nbooking appears only in `canceled`), and it applies the lag rule below for you,\nreturning `recheckAdvised: true` when an absence is still inconclusive. Pass\nthe venue's exact Tock slug when you have it: a partial name that matches more\nthan one restaurant on the date returns verdict `ambiguous` (with the\ncandidates), never `confirmed` — re-run with the slug. A venue query under 4\ncharacters matches only a full name or slug; if it merely appears in a venue\nbooked that date, the result is `not_found` with `venueQueryTooShort: true`,\n`nearMatches` and `recheckAdvised: true` — re-run with the full name, and never\nread that `not_found` as proof the booking failed. Handle all four verdicts\n(`confirmed`, `cancelled`, `not_found`, `ambiguous`); anything but `confirmed`\nis reported per the rules below.\n\nAnything less — including a screenshot of a success screen — must be reported\nas **\"attempted, unverified.\"** Two Tock-specific traps make the stricter rule\nnon-negotiable:\n\n- The post-booking modal is not proof: a confirm submitted with a stale cart\n  is a silent no-op that still renders the success modal.\n- The reservations backend (`PatronReservationHistory`) lags the Reservations\n  tab by **minutes**. A single immediate re-read proving absence proves\n  nothing; re-query after a couple of minutes (and once more before giving a\n  verdict).\n\n## Notes\n\n- **Read-only.** No booking, cancelling, or payment — Tock reservations are prepaid/Turnstile-gated checkouts left to the site.\n- **Discovery needs no login.** Only `tock_list_reservations`, `tock_get_profile` and `tock_verify_reservation` require a signed-in exploretock.com tab.\n- Errors are actionable: a Cloudflare challenge asks you to clear it in the signed-in tab; a signed-out account tool asks you to sign in.\n\nFile v1.1.8:_meta.json\n\n{\n  \"ownerId\": \"kn700jq4sjtf2anb0rk3ft4p7n856872\",\n  \"slug\": \"tock-mcp\",\n  \"version\": \"1.1.8\",\n  \"publishedAt\": 1791588608432\n}\n\nFile v1.1.8:skill-card.md\n\n## Description:\n\nHelps agents discover Tock restaurants, check experiences and availability, and inspect a signed-in user's reservations through a browser-connected MCP server.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[chrischall](https://clawhub.ai/user/chrischall)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nPeople and agents looking for Tock restaurants can compare venues, experiences, prices, party sizes, and available times. Signed-in users can inspect their reservations and verify a booking made on Tock.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The external MCP server and browser extension can access pages in a Tock tab.\n\nMitigation: Verify the npm package and ContextMint Bridge release or source before installing.\n\nRisk: Signed-in account tools can read Tock profile and reservation details.\n\nMitigation: Use signed-in mode only if you are comfortable sharing those details with the MCP flow; complete bookings and payments on Tock.\n\nRisk: A booking success screen or an immediate missing reservation can misstate booking status.\n\nMitigation: Require a receipt or confirmation ID and a confirmed reservation-check verdict; recheck when results are inconclusive.\n\n## Reference(s):\n\n- [ClawHub tock-mcp release](https://clawhub.ai/chrischall/skills/tock-mcp)\n- [tock-mcp npm package](https://www.npmjs.com/package/tock-mcp)\n- [ContextMint Bridge releases](https://github.com/nullnet-app/contextmint-bridge/releases)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Guidance]\n\n**Output Format:** [Text with structured venue, availability, and reservation details]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Booking confirmation requires a receipt or confirmation ID and a confirmed reservation-check verdict.]\n\n## Skill Version(s):\n\n1.1.8 (source: server-resolved release metadata)\n\n## Ethical Considerations:\n\nUsers 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.\n\nArchive v1.1.7: 3 files, 5622 bytes\n\nFiles: skill-card.md (1876b), SKILL.md (9531b), _meta.json (127b)\n\nFile v1.1.7:SKILL.md\n\n---\nname: tock-mcp\ndescription: Discover restaurants on Tock (exploretock.com) via MCP — list cities, search a metro, and get a venue's details plus its bookable experiences, prices, party sizes, and open dates/times. Triggers on phrases like \"search Tock for\", \"what's on Tock in Chicago\", \"find a Tock reservation at\", \"does Alinea have availability on Tock\", \"what experiences does <venue> offer on Tock\", or \"my Tock reservations\". Requires tock-mcp installed and the ContextMint Bridge browser extension running in a signed-in exploretock.com tab.\n---\n\n# tock-mcp\n\nMCP server for Tock (exploretock.com) — restaurant discovery and availability. Every request is relayed through the user's signed-in browser tab via the [ContextMint Bridge](https://github.com/nullnet-app/contextmint-bridge/releases) browser extension, so there's no cookie paste, no bot-wall dance, and no password handling.\n\n- **npm:** [npmjs.com/package/tock-mcp](https://www.npmjs.com/package/tock-mcp)\n- **Source:** [github.com/chrischall/tock-mcp](https://github.com/chrischall/tock-mcp)\n\n> Tock does not publish an official consumer API, and exploretock.com sits behind a Cloudflare challenge. This server fetches the same server-rendered pages the Tock web app uses (parsing their embedded `window.$REDUX_STATE` store) through your own signed-in browser tab. It is **read-only**: Tock reservations are prepaid tickets, so booking is left to exploretock.com. Use at your own discretion.\n\n## Setup\n\nThe MCP server is half of the picture — the other half is the [ContextMint Bridge](https://github.com/nullnet-app/contextmint-bridge/releases) browser extension that talks to Tock from your signed-in tab. Both are required.\n\n### 1. Install the MCP server\n\nAdd to `.mcp.json` in your project or `~/.claude/mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"tock\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"tock-mcp\"]\n    }\n  }\n}\n```\n\nOr from source:\n\n```bash\ngit clone https://github.com/chrischall/tock-mcp\ncd tock-mcp\nnpm install && npm run build\n# then point .mcp.json at dist/bundle.js\n```\n\n### 2. Install ContextMint Bridge\n\ntock-mcp shares a single browser extension, ContextMint Bridge, with every other fetchproxy-based MCP. Install it once from [its releases page](https://github.com/nullnet-app/contextmint-bridge/releases) — in Chrome, unzip the chrome zip and load it unpacked (`chrome://extensions` → Developer mode → Load unpacked); Safari isn't available yet, so use Chrome for now. ContextMint Bridge is the fetchproxy extension under its new name, same maintainer; its source is public at https://github.com/nullnet-app/contextmint-bridge — build it yourself or check a release zip against its published `.sha256` file. Then open **exploretock.com** and sign in (only needed for the account tools; discovery works signed-out).\n\n### 3. Approve the one-time pair code\n\nThe first tool call prints a pair code to approve in the ContextMint Bridge popup (trust-on-first-use, per identity). Run `tock_healthcheck` to trigger it, approve the code, and you're paired for good.\n\n## Tools\n\n| Tool | What it does |\n| --- | --- |\n| `tock_list_metros` | List Tock cities/metros (name, slug, business count). Filter by name/country. |\n| `tock_search_restaurants` | List / search venues in a metro slug (cuisine, price, neighborhood, slug). |\n| `tock_get_restaurant` | Venue details + its bookable experiences (prices, party sizes). |\n| `tock_get_availability` | A venue's bookable calendar: experiences, prices, open dates/times. |\n| `tock_list_reservations` | The signed-in user's purchases / reservations (needs a signed-in tab). |\n| `tock_get_profile` | The signed-in user's profile (needs a signed-in tab). |\n| `tock_verify_reservation` | After a booking attempt, re-query the account and return `confirmed` / `cancelled` / `not_found` (needs a signed-in tab). Use this instead of eyeballing a success screen. |\n| `tock_healthcheck` | Round-trip the bridge; reports status + the pair code on first run. |\n\n## Response shape (`view`)\n\nTwo tools take `view: \"compact\" | \"full\"` — `tock_get_restaurant` and\n`tock_get_profile` — and **`compact` is the default**, so you get the slim\nrung without asking for it. The other six of this server's eight tools have no\n`view`; each for its own reason, below.\n\n**Compact here is media stripping, not a field projection.** `src/view.ts`\nholds no hand-written field list, because this repo has no captured Tock\npayload to derive one from honestly. What it does instead is subtractive: drop\nkeys whose value is a picture, plus **two named explicitly** —\n`profileImageUrl` and `heroImageUrl`.\n\nNaming those two is the load-bearing part, and it is worth knowing why. The\nshared rule anchors its media noun at the START of the key, which is what\nkeeps a flag like `hasThumbnail` alive — and it is also why `profileImageUrl`\n(starts `profile`) and `heroImageUrl` (starts `hero`) both slip past it. That\nwould leave only the fallback rule, which fires when a URL's path happens to\nend in an image extension. A signed or extension-less Tock CDN URL would then\nsurvive compact silently, with nothing in the response to say why. Naming the\nkeys removes the dependency on what a URL happens to look like.\n\nThose two are the only image fields any parsed shape in this server carries —\nthey live on `RestaurantDetails` and nowhere else — and **nothing is kept**:\nno tool here has a picture as its product, so no payload mixes decoration with\ncontent.\n\nExpect one specific non-effect: on **`tock_get_profile` compact provably\nremoves nothing.** The identity record is four fields (`firstName`,\n`lastName`, `email`, `id`), none of them a picture, so both rungs serialise to\nthe same bytes. The rung is declared there for consistency, not for savings.\n\n`view: \"full\"` returns the parsed record untouched. There is deliberately **no\n`raw` rung**: `full` already IS the record this server parsed out of Tock's\npage, so a third value would silently alias one that exists.\n\nWhy the other six have none:\n\n- **`tock_search_restaurants`** returns `RestaurantSummary`, which carries no\n  image key at all — the two image fields exist only on the *details* shape.\n  That is exactly why one of the two restaurant tools has a rung and the other\n  does not; it is not an omission.\n- **`tock_list_metros`** returns hand-built metro records (name, slug, state,\n  country, business count, coordinates). No picture, and no fatter upstream\n  shape behind them to project away from.\n- **`tock_get_availability`** returns an ASSEMBLED calendar — experiences,\n  `openDates`, `openTimes` — built by the parser from Tock's calendar slice,\n  not a pass-through payload. There is no single upstream object to hand back\n  or to slim.\n- **`tock_list_reservations`** returns hand-built reservation records (venue,\n  date/time, party size, experience, cancelled flag) with no media field.\n- **`tock_verify_reservation`** returns a VERDICT — `verdict`, `match`,\n  `searched`, `recheckAdvised`, `reportAs`, `summary`. The verdict is the\n  product, and there is nothing decorative in it to remove.\n- **`tock_healthcheck`** returns a bridge diagnostic, for the same reason.\n\nPassing `view` to one of those is not an error and will not fail: the tool\ndoes not declare it, so zod drops the unknown key and the call runs exactly as\nit would have. You get no warning, so a successful call is not evidence the\nrung was honoured.\n\n## Typical flow\n\n1. `tock_list_metros { query: \"chicago\" }` → find the metro slug.\n2. `tock_search_restaurants { metro: \"chicago\", query: \"tasting menu\" }` → get venue slugs.\n3. `tock_get_availability { slug: \"alinea\", date: \"2026-07-10\", party_size: 2 }` → see experiences and open dates/times.\n4. To book, open `exploretock.com/<slug>` — reservations are prepaid tickets and are completed on Tock.\n\n## Booking verification protocol\n\nBooking happens outside these tools (on exploretock.com, by hand or by UI\nautomation), but **verification is this server's job**. A booking counts as\n**confirmed** only when BOTH hold:\n\n1. a confirmation ID, receipt URL, or confirmation email was captured, **and**\n2. `tock_verify_reservation { venue, date, partySize, bookedMinutesAgo }` returns\n   verdict `confirmed`.\n\nUse `tock_verify_reservation` rather than reading `tock_list_reservations`\nyourself: it checks the canceled and past lists too (a created-then-voided\nbooking appears only in `canceled`), and it applies the lag rule below for you,\nreturning `recheckAdvised: true` when an absence is still inconclusive.\n\nAnything less — including a screenshot of a success screen — must be reported\nas **\"attempted, unverified.\"** Two Tock-specific traps make the stricter rule\nnon-negotiable:\n\n- The post-booking modal is not proof: a confirm submitted with a stale cart\n  is a silent no-op that still renders the success modal.\n- The reservations backend (`PatronReservationHistory`) lags the Reservations\n  tab by **minutes**. A single immediate re-read proving absence proves\n  nothing; re-query after a couple of minutes (and once more before giving a\n  verdict).\n\n## Notes\n\n- **Read-only.** No booking, cancelling, or payment — Tock reservations are prepaid/Turnstile-gated checkouts left to the site.\n- **Discovery needs no login.** Only `tock_list_reservations`, `tock_get_profile` and `tock_verify_reservation` require a signed-in exploretock.com tab.\n- Errors are actionable: a Cloudflare challenge asks you to clear it in the signed-in tab; a signed-out account tool asks you to sign in.\n\nFile v1.1.7:_meta.json\n\n{\n  \"ownerId\": \"kn700jq4sjtf2anb0rk3ft4p7n856872\",\n  \"slug\": \"tock-mcp\",\n  \"version\": \"1.1.7\",\n  \"publishedAt\": 1791380418822\n}\n\nFile v1.1.7:skill-card.md\n\n## Description:\n\nHelps agents discover Tock restaurants, check bookable experiences and availability, and inspect a signed-in user's reservations and profile through a read-only MCP integration.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[chrischall](https://clawhub.ai/user/chrischall)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDiners and agents use this skill to find Tock venues and experiences, inspect available dates and times, and check their own reservation details. Booking and payment remain on Tock.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The MCP server and browser extension can expose signed-in Tock profile, email, and reservation history to the agent.\n\nMitigation: Install only if comfortable with the integration; use account tools only when intending to share that data, and remove the MCP configuration or bridge pairing when access is no longer wanted.\n\n## Reference(s):\n\n- [tock-mcp on ClawHub](https://clawhub.ai/chrischall/skills/tock-mcp)\n- [tock-mcp npm package](https://www.npmjs.com/package/tock-mcp)\n- [ContextMint Bridge releases](https://github.com/nullnet-app/contextmint-bridge/releases)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Markdown, Configuration instructions, Shell commands]\n\n**Output Format:** [Markdown with reservation and venue details, plus setup examples when needed]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Read-only Tock queries; account data requires a signed-in browser session.]\n\n## Skill Version(s):\n\n1.1.7 (source: ClawHub release metadata)\n\n## Ethical Considerations:\n\nUsers 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.\n\nArchive v1.1.6: 3 files, 5661 bytes\n\nFiles: skill-card.md (2043b), SKILL.md (9531b), _meta.json (127b)\n\nFile v1.1.6:SKILL.md\n\n---\nname: tock-mcp\ndescription: Discover restaurants on Tock (exploretock.com) via MCP — list cities, search a metro, and get a venue's details plus its bookable experiences, prices, party sizes, and open dates/times. Triggers on phrases like \"search Tock for\", \"what's on Tock in Chicago\", \"find a Tock reservation at\", \"does Alinea have availability on Tock\", \"what experiences does <venue> offer on Tock\", or \"my Tock reservations\". Requires tock-mcp installed and the ContextMint Bridge browser extension running in a signed-in exploretock.com tab.\n---\n\n# tock-mcp\n\nMCP server for Tock (exploretock.com) — restaurant discovery and availability. Every request is relayed through the user's signed-in browser tab via the [ContextMint Bridge](https://github.com/nullnet-app/contextmint-bridge/releases) browser extension, so there's no cookie paste, no bot-wall dance, and no password handling.\n\n- **npm:** [npmjs.com/package/tock-mcp](https://www.npmjs.com/package/tock-mcp)\n- **Source:** [github.com/chrischall/tock-mcp](https://github.com/chrischall/tock-mcp)\n\n> Tock does not publish an official consumer API, and exploretock.com sits behind a Cloudflare challenge. This server fetches the same server-rendered pages the Tock web app uses (parsing their embedded `window.$REDUX_STATE` store) through your own signed-in browser tab. It is **read-only**: Tock reservations are prepaid tickets, so booking is left to exploretock.com. Use at your own discretion.\n\n## Setup\n\nThe MCP server is half of the picture — the other half is the [ContextMint Bridge](https://github.com/nullnet-app/contextmint-bridge/releases) browser extension that talks to Tock from your signed-in tab. Both are required.\n\n### 1. Install the MCP server\n\nAdd to `.mcp.json` in your project or `~/.claude/mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"tock\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"tock-mcp\"]\n    }\n  }\n}\n```\n\nOr from source:\n\n```bash\ngit clone https://github.com/chrischall/tock-mcp\ncd tock-mcp\nnpm install && npm run build\n# then point .mcp.json at dist/bundle.js\n```\n\n### 2. Install ContextMint Bridge\n\ntock-mcp shares a single browser extension, ContextMint Bridge, with every other fetchproxy-based MCP. Install it once from [its releases page](https://github.com/nullnet-app/contextmint-bridge/releases) — in Chrome, unzip the chrome zip and load it unpacked (`chrome://extensions` → Developer mode → Load unpacked); Safari isn't available yet, so use Chrome for now. ContextMint Bridge is the fetchproxy extension under its new name, same maintainer; its source is public at https://github.com/nullnet-app/contextmint-bridge — build it yourself or check a release zip against its published `.sha256` file. Then open **exploretock.com** and sign in (only needed for the account tools; discovery works signed-out).\n\n### 3. Approve the one-time pair code\n\nThe first tool call prints a pair code to approve in the ContextMint Bridge popup (trust-on-first-use, per identity). Run `tock_healthcheck` to trigger it, approve the code, and you're paired for good.\n\n## Tools\n\n| Tool | What it does |\n| --- | --- |\n| `tock_list_metros` | List Tock cities/metros (name, slug, business count). Filter by name/country. |\n| `tock_search_restaurants` | List / search venues in a metro slug (cuisine, price, neighborhood, slug). |\n| `tock_get_restaurant` | Venue details + its bookable experiences (prices, party sizes). |\n| `tock_get_availability` | A venue's bookable calendar: experiences, prices, open dates/times. |\n| `tock_list_reservations` | The signed-in user's purchases / reservations (needs a signed-in tab). |\n| `tock_get_profile` | The signed-in user's profile (needs a signed-in tab). |\n| `tock_verify_reservation` | After a booking attempt, re-query the account and return `confirmed` / `cancelled` / `not_found` (needs a signed-in tab). Use this instead of eyeballing a success screen. |\n| `tock_healthcheck` | Round-trip the bridge; reports status + the pair code on first run. |\n\n## Response shape (`view`)\n\nTwo tools take `view: \"compact\" | \"full\"` — `tock_get_restaurant` and\n`tock_get_profile` — and **`compact` is the default**, so you get the slim\nrung without asking for it. The other six of this server's eight tools have no\n`view`; each for its own reason, below.\n\n**Compact here is media stripping, not a field projection.** `src/view.ts`\nholds no hand-written field list, because this repo has no captured Tock\npayload to derive one from honestly. What it does instead is subtractive: drop\nkeys whose value is a picture, plus **two named explicitly** —\n`profileImageUrl` and `heroImageUrl`.\n\nNaming those two is the load-bearing part, and it is worth knowing why. The\nshared rule anchors its media noun at the START of the key, which is what\nkeeps a flag like `hasThumbnail` alive — and it is also why `profileImageUrl`\n(starts `profile`) and `heroImageUrl` (starts `hero`) both slip past it. That\nwould leave only the fallback rule, which fires when a URL's path happens to\nend in an image extension. A signed or extension-less Tock CDN URL would then\nsurvive compact silently, with nothing in the response to say why. Naming the\nkeys removes the dependency on what a URL happens to look like.\n\nThose two are the only image fields any parsed shape in this server carries —\nthey live on `RestaurantDetails` and nowhere else — and **nothing is kept**:\nno tool here has a picture as its product, so no payload mixes decoration with\ncontent.\n\nExpect one specific non-effect: on **`tock_get_profile` compact provably\nremoves nothing.** The identity record is four fields (`firstName`,\n`lastName`, `email`, `id`), none of them a picture, so both rungs serialise to\nthe same bytes. The rung is declared there for consistency, not for savings.\n\n`view: \"full\"` returns the parsed record untouched. There is deliberately **no\n`raw` rung**: `full` already IS the record this server parsed out of Tock's\npage, so a third value would silently alias one that exists.\n\nWhy the other six have none:\n\n- **`tock_search_restaurants`** returns `RestaurantSummary`, which carries no\n  image key at all — the two image fields exist only on the *details* shape.\n  That is exactly why one of the two restaurant tools has a rung and the other\n  does not; it is not an omission.\n- **`tock_list_metros`** returns hand-built metro records (name, slug, state,\n  country, business count, coordinates). No picture, and no fatter upstream\n  shape behind them to project away from.\n- **`tock_get_availability`** returns an ASSEMBLED calendar — experiences,\n  `openDates`, `openTimes` — built by the parser from Tock's calendar slice,\n  not a pass-through payload. There is no single upstream object to hand back\n  or to slim.\n- **`tock_list_reservations`** returns hand-built reservation records (venue,\n  date/time, party size, experience, cancelled flag) with no media field.\n- **`tock_verify_reservation`** returns a VERDICT — `verdict`, `match`,\n  `searched`, `recheckAdvised`, `reportAs`, `summary`. The verdict is the\n  product, and there is nothing decorative in it to remove.\n- **`tock_healthcheck`** returns a bridge diagnostic, for the same reason.\n\nPassing `view` to one of those is not an error and will not fail: the tool\ndoes not declare it, so zod drops the unknown key and the call runs exactly as\nit would have. You get no warning, so a successful call is not evidence the\nrung was honoured.\n\n## Typical flow\n\n1. `tock_list_metros { query: \"chicago\" }` → find the metro slug.\n2. `tock_search_restaurants { metro: \"chicago\", query: \"tasting menu\" }` → get venue slugs.\n3. `tock_get_availability { slug: \"alinea\", date: \"2026-07-10\", party_size: 2 }` → see experiences and open dates/times.\n4. To book, open `exploretock.com/<slug>` — reservations are prepaid tickets and are completed on Tock.\n\n## Booking verification protocol\n\nBooking happens outside these tools (on exploretock.com, by hand or by UI\nautomation), but **verification is this server's job**. A booking counts as\n**confirmed** only when BOTH hold:\n\n1. a confirmation ID, receipt URL, or confirmation email was captured, **and**\n2. `tock_verify_reservation { venue, date, partySize, bookedMinutesAgo }` returns\n   verdict `confirmed`.\n\nUse `tock_verify_reservation` rather than reading `tock_list_reservations`\nyourself: it checks the canceled and past lists too (a created-then-voided\nbooking appears only in `canceled`), and it applies the lag rule below for you,\nreturning `recheckAdvised: true` when an absence is still inconclusive.\n\nAnything less — including a screenshot of a success screen — must be reported\nas **\"attempted, unverified.\"** Two Tock-specific traps make the stricter rule\nnon-negotiable:\n\n- The post-booking modal is not proof: a confirm submitted with a stale cart\n  is a silent no-op that still renders the success modal.\n- The reservations backend (`PatronReservationHistory`) lags the Reservations\n  tab by **minutes**. A single immediate re-read proving absence proves\n  nothing; re-query after a couple of minutes (and once more before giving a\n  verdict).\n\n## Notes\n\n- **Read-only.** No booking, cancelling, or payment — Tock reservations are prepaid/Turnstile-gated checkouts left to the site.\n- **Discovery needs no login.** Only `tock_list_reservations`, `tock_get_profile` and `tock_verify_reservation` require a signed-in exploretock.com tab.\n- Errors are actionable: a Cloudflare challenge asks you to clear it in the signed-in tab; a signed-out account tool asks you to sign in.\n\nFile v1.1.6:_meta.json\n\n{\n  \"ownerId\": \"kn700jq4sjtf2anb0rk3ft4p7n856872\",\n  \"slug\": \"tock-mcp\",\n  \"version\": \"1.1.6\",\n  \"publishedAt\": 1791168880481\n}\n\nFile v1.1.6:skill-card.md\n\n## Description:\n\nHelps agents find Tock restaurants, experiences, prices, and availability, and check a signed-in user's reservations through a read-only MCP integration.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[chrischall](https://clawhub.ai/user/chrischall)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nPeople and agents researching Tock restaurants use this skill to compare venues and available experiences; signed-in users can inspect their profile and reservations and verify a booking made on Tock.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The MCP package and browser extension access Tock through the user's browser; account tools can read profile and reservation details.\n\nMitigation: Install the package and extension only if you trust them, and use signed-in account tools only when you want the agent to see those details.\n\nRisk: A booking success screen or immediate absence from reservation history may misstate whether a reservation was confirmed.\n\nMitigation: Complete booking and payment on Tock, then require a receipt or confirmation ID plus a confirmed verification result; recheck after a delay if advised.\n\n## Reference(s):\n\n- [Tock MCP on ClawHub](https://clawhub.ai/chrischall/skills/tock-mcp)\n- [Tock MCP npm package](https://www.npmjs.com/package/tock-mcp)\n- [ContextMint Bridge releases](https://github.com/nullnet-app/contextmint-bridge/releases)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Guidance]\n\n**Output Format:** [Structured MCP results and natural-language summaries]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Read-only; account tools require a signed-in Tock tab.]\n\n## Skill Version(s):\n\n1.1.6 (source: ClawHub release metadata)\n\n## Ethical Considerations:\n\nUsers 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.\n\nArchive v1.1.5: 3 files, 5718 bytes\n\nFiles: skill-card.md (2131b), SKILL.md (9531b), _meta.json (127b)\n\nFile v1.1.5:SKILL.md\n\n---\nname: tock-mcp\ndescription: Discover restaurants on Tock (exploretock.com) via MCP — list cities, search a metro, and get a venue's details plus its bookable experiences, prices, party sizes, and open dates/times. Triggers on phrases like \"search Tock for\", \"what's on Tock in Chicago\", \"find a Tock reservation at\", \"does Alinea have availability on Tock\", \"what experiences does <venue> offer on Tock\", or \"my Tock reservations\". Requires tock-mcp installed and the ContextMint Bridge browser extension running in a signed-in exploretock.com tab.\n---\n\n# tock-mcp\n\nMCP server for Tock (exploretock.com) — restaurant discovery and availability. Every request is relayed through the user's signed-in browser tab via the [ContextMint Bridge](https://github.com/nullnet-app/contextmint-bridge/releases) browser extension, so there's no cookie paste, no bot-wall dance, and no password handling.\n\n- **npm:** [npmjs.com/package/tock-mcp](https://www.npmjs.com/package/tock-mcp)\n- **Source:** [github.com/chrischall/tock-mcp](https://github.com/chrischall/tock-mcp)\n\n> Tock does not publish an official consumer API, and exploretock.com sits behind a Cloudflare challenge. This server fetches the same server-rendered pages the Tock web app uses (parsing their embedded `window.$REDUX_STATE` store) through your own signed-in browser tab. It is **read-only**: Tock reservations are prepaid tickets, so booking is left to exploretock.com. Use at your own discretion.\n\n## Setup\n\nThe MCP server is half of the picture — the other half is the [ContextMint Bridge](https://github.com/nullnet-app/contextmint-bridge/releases) browser extension that talks to Tock from your signed-in tab. Both are required.\n\n### 1. Install the MCP server\n\nAdd to `.mcp.json` in your project or `~/.claude/mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"tock\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"tock-mcp\"]\n    }\n  }\n}\n```\n\nOr from source:\n\n```bash\ngit clone https://github.com/chrischall/tock-mcp\ncd tock-mcp\nnpm install && npm run build\n# then point .mcp.json at dist/bundle.js\n```\n\n### 2. Install ContextMint Bridge\n\ntock-mcp shares a single browser extension, ContextMint Bridge, with every other fetchproxy-based MCP. Install it once from [its releases page](https://github.com/nullnet-app/contextmint-bridge/releases) — in Chrome, unzip the chrome zip and load it unpacked (`chrome://extensions` → Developer mode → Load unpacked); Safari isn't available yet, so use Chrome for now. ContextMint Bridge is the fetchproxy extension under its new name, same maintainer; its source is public at https://github.com/nullnet-app/contextmint-bridge — build it yourself or check a release zip against its published `.sha256` file. Then open **exploretock.com** and sign in (only needed for the account tools; discovery works signed-out).\n\n### 3. Approve the one-time pair code\n\nThe first tool call prints a pair code to approve in the ContextMint Bridge popup (trust-on-first-use, per identity). Run `tock_healthcheck` to trigger it, approve the code, and you're paired for good.\n\n## Tools\n\n| Tool | What it does |\n| --- | --- |\n| `tock_list_metros` | List Tock cities/metros (name, slug, business count). Filter by name/country. |\n| `tock_search_restaurants` | List / search venues in a metro slug (cuisine, price, neighborhood, slug). |\n| `tock_get_restaurant` | Venue details + its bookable experiences (prices, party sizes). |\n| `tock_get_availability` | A venue's bookable calendar: experiences, prices, open dates/times. |\n| `tock_list_reservations` | The signed-in user's purchases / reservations (needs a signed-in tab). |\n| `tock_get_profile` | The signed-in user's profile (needs a signed-in tab). |\n| `tock_verify_reservation` | After a booking attempt, re-query the account and return `confirmed` / `cancelled` / `not_found` (needs a signed-in tab). Use this instead of eyeballing a success screen. |\n| `tock_healthcheck` | Round-trip the bridge; reports status + the pair code on first run. |\n\n## Response shape (`view`)\n\nTwo tools take `view: \"compact\" | \"full\"` — `tock_get_restaurant` and\n`tock_get_profile` — and **`compact` is the default**, so you get the slim\nrung without asking for it. The other six of this server's eight tools have no\n`view`; each for its own reason, below.\n\n**Compact here is media stripping, not a field projection.** `src/view.ts`\nholds no hand-written field list, because this repo has no captured Tock\npayload to derive one from honestly. What it does instead is subtractive: drop\nkeys whose value is a picture, plus **two named explicitly** —\n`profileImageUrl` and `heroImageUrl`.\n\nNaming those two is the load-bearing part, and it is worth knowing why. The\nshared rule anchors its media noun at the START of the key, which is what\nkeeps a flag like `hasThumbnail` alive — and it is also why `profileImageUrl`\n(starts `profile`) and `heroImageUrl` (starts `hero`) both slip past it. That\nwould leave only the fallback rule, which fires when a URL's path happens to\nend in an image extension. A signed or extension-less Tock CDN URL would then\nsurvive compact silently, with nothing in the response to say why. Naming the\nkeys removes the dependency on what a URL happens to look like.\n\nThose two are the only image fields any parsed shape in this server carries —\nthey live on `RestaurantDetails` and nowhere else — and **nothing is kept**:\nno tool here has a picture as its product, so no payload mixes decoration with\ncontent.\n\nExpect one specific non-effect: on **`tock_get_profile` compact provably\nremoves nothing.** The identity record is four fields (`firstName`,\n`lastName`, `email`, `id`), none of them a picture, so both rungs serialise to\nthe same bytes. The rung is declared there for consistency, not for savings.\n\n`view: \"full\"` returns the parsed record untouched. There is deliberately **no\n`raw` rung**: `full` already IS the record this server parsed out of Tock's\npage, so a third value would silently alias one that exists.\n\nWhy the other six have none:\n\n- **`tock_search_restaurants`** returns `RestaurantSummary`, which carries no\n  image key at all — the two image fields exist only on the *details* shape.\n  That is exactly why one of the two restaurant tools has a rung and the other\n  does not; it is not an omission.\n- **`tock_list_metros`** returns hand-built metro records (name, slug, state,\n  country, business count, coordinates). No picture, and no fatter upstream\n  shape behind them to project away from.\n- **`tock_get_availability`** returns an ASSEMBLED calendar — experiences,\n  `openDates`, `openTimes` — built by the parser from Tock's calendar slice,\n  not a pass-through payload. There is no single upstream object to hand back\n  or to slim.\n- **`tock_list_reservations`** returns hand-built reservation records (venue,\n  date/time, party size, experience, cancelled flag) with no media field.\n- **`tock_verify_reservation`** returns a VERDICT — `verdict`, `match`,\n  `searched`, `recheckAdvised`, `reportAs`, `summary`. The verdict is the\n  product, and there is nothing decorative in it to remove.\n- **`tock_healthcheck`** returns a bridge diagnostic, for the same reason.\n\nPassing `view` to one of those is not an error and will not fail: the tool\ndoes not declare it, so zod drops the unknown key and the call runs exactly as\nit would have. You get no warning, so a successful call is not evidence the\nrung was honoured.\n\n## Typical flow\n\n1. `tock_list_metros { query: \"chicago\" }` → find the metro slug.\n2. `tock_search_restaurants { metro: \"chicago\", query: \"tasting menu\" }` → get venue slugs.\n3. `tock_get_availability { slug: \"alinea\", date: \"2026-07-10\", party_size: 2 }` → see experiences and open dates/times.\n4. To book, open `exploretock.com/<slug>` — reservations are prepaid tickets and are completed on Tock.\n\n## Booking verification protocol\n\nBooking happens outside these tools (on exploretock.com, by hand or by UI\nautomation), but **verification is this server's job**. A booking counts as\n**confirmed** only when BOTH hold:\n\n1. a confirmation ID, receipt URL, or confirmation email was captured, **and**\n2. `tock_verify_reservation { venue, date, partySize, bookedMinutesAgo }` returns\n   verdict `confirmed`.\n\nUse `tock_verify_reservation` rather than reading `tock_list_reservations`\nyourself: it checks the canceled and past lists too (a created-then-voided\nbooking appears only in `canceled`), and it applies the lag rule below for you,\nreturning `recheckAdvised: true` when an absence is still inconclusive.\n\nAnything less — including a screenshot of a success screen — must be reported\nas **\"attempted, unverified.\"** Two Tock-specific traps make the stricter rule\nnon-negotiable:\n\n- The post-booking modal is not proof: a confirm submitted with a stale cart\n  is a silent no-op that still renders the success modal.\n- The reservations backend (`PatronReservationHistory`) lags the Reservations\n  tab by **minutes**. A single immediate re-read proving absence proves\n  nothing; re-query after a couple of minutes (and once more before giving a\n  verdict).\n\n## Notes\n\n- **Read-only.** No booking, cancelling, or payment — Tock reservations are prepaid/Turnstile-gated checkouts left to the site.\n- **Discovery needs no login.** Only `tock_list_reservations`, `tock_get_profile` and `tock_verify_reservation` require a signed-in exploretock.com tab.\n- Errors are actionable: a Cloudflare challenge asks you to clear it in the signed-in tab; a signed-out account tool asks you to sign in.\n\nFile v1.1.5:_meta.json\n\n{\n  \"ownerId\": \"kn700jq4sjtf2anb0rk3ft4p7n856872\",\n  \"slug\": \"tock-mcp\",\n  \"version\": \"1.1.5\",\n  \"publishedAt\": 1790992029175\n}\n\nFile v1.1.5:skill-card.md\n\n## Description:\n\nHelps agents find Tock restaurants, experiences, and availability, and read or verify reservations through the user's browser session.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[chrischall](https://clawhub.ai/user/chrischall)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nPeople and agents planning restaurant visits use this skill to discover Tock venues, compare experiences and open times, and check their own reservations. Booking and payment take place on Tock, not through this skill.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The external MCP package and browser extension access Tock through the user's browser session.\n\nMitigation: Verify that both components are trusted before installation and approve browser pairing deliberately.\n\nRisk: Account tools can read personal profile and reservation information.\n\nMitigation: Use account tools only when needed and avoid sharing their responses beyond the intended user.\n\nRisk: A booking success screen or an immediate missing reservation can misrepresent booking status.\n\nMitigation: Treat booking as unverified until a receipt or confirmation ID and a confirmed reservation check agree; recheck after a short delay if needed.\n\n## Reference(s):\n\n- [ClawHub skill listing](https://clawhub.ai/chrischall/skills/tock-mcp)\n- [tock-mcp package](https://www.npmjs.com/package/tock-mcp)\n- [ContextMint Bridge releases](https://github.com/nullnet-app/contextmint-bridge/releases)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Guidance]\n\n**Output Format:** [Structured MCP tool results and text]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Read-only discovery and account lookups; account tools require a signed-in Tock browser tab.]\n\n## Skill Version(s):\n\n1.1.5 (source: ClawHub release metadata)\n\n## Ethical Considerations:\n\nUsers 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.\n\nArchive v1.1.4: 3 files, 5775 bytes\n\nFiles: skill-card.md (2336b), SKILL.md (9531b), _meta.json (127b)\n\nFile v1.1.4:SKILL.md\n\n---\nname: tock-mcp\ndescription: Discover restaurants on Tock (exploretock.com) via MCP — list cities, search a metro, and get a venue's details plus its bookable experiences, prices, party sizes, and open dates/times. Triggers on phrases like \"search Tock for\", \"what's on Tock in Chicago\", \"find a Tock reservation at\", \"does Alinea have availability on Tock\", \"what experiences does <venue> offer on Tock\", or \"my Tock reservations\". Requires tock-mcp installed and the ContextMint Bridge browser extension running in a signed-in exploretock.com tab.\n---\n\n# tock-mcp\n\nMCP server for Tock (exploretock.com) — restaurant discovery and availability. Every request is relayed through the user's signed-in browser tab via the [ContextMint Bridge](https://github.com/nullnet-app/contextmint-bridge/releases) browser extension, so there's no cookie paste, no bot-wall dance, and no password handling.\n\n- **npm:** [npmjs.com/package/tock-mcp](https://www.npmjs.com/package/tock-mcp)\n- **Source:** [github.com/chrischall/tock-mcp](https://github.com/chrischall/tock-mcp)\n\n> Tock does not publish an official consumer API, and exploretock.com sits behind a Cloudflare challenge. This server fetches the same server-rendered pages the Tock web app uses (parsing their embedded `window.$REDUX_STATE` store) through your own signed-in browser tab. It is **read-only**: Tock reservations are prepaid tickets, so booking is left to exploretock.com. Use at your own discretion.\n\n## Setup\n\nThe MCP server is half of the picture — the other half is the [ContextMint Bridge](https://github.com/nullnet-app/contextmint-bridge/releases) browser extension that talks to Tock from your signed-in tab. Both are required.\n\n### 1. Install the MCP server\n\nAdd to `.mcp.json` in your project or `~/.claude/mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"tock\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"tock-mcp\"]\n    }\n  }\n}\n```\n\nOr from source:\n\n```bash\ngit clone https://github.com/chrischall/tock-mcp\ncd tock-mcp\nnpm install && npm run build\n# then point .mcp.json at dist/bundle.js\n```\n\n### 2. Install ContextMint Bridge\n\ntock-mcp shares a single browser extension, ContextMint Bridge, with every other fetchproxy-based MCP. Install it once from [its releases page](https://github.com/nullnet-app/contextmint-bridge/releases) — in Chrome, unzip the chrome zip and load it unpacked (`chrome://extensions` → Developer mode → Load unpacked); Safari isn't available yet, so use Chrome for now. ContextMint Bridge is the fetchproxy extension under its new name, same maintainer; its source is public at https://github.com/nullnet-app/contextmint-bridge — build it yourself or check a release zip against its published `.sha256` file. Then open **exploretock.com** and sign in (only needed for the account tools; discovery works signed-out).\n\n### 3. Approve the one-time pair code\n\nThe first tool call prints a pair code to approve in the ContextMint Bridge popup (trust-on-first-use, per identity). Run `tock_healthcheck` to trigger it, approve the code, and you're paired for good.\n\n## Tools\n\n| Tool | What it does |\n| --- | --- |\n| `tock_list_metros` | List Tock cities/metros (name, slug, business count). Filter by name/country. |\n| `tock_search_restaurants` | List / search venues in a metro slug (cuisine, price, neighborhood, slug). |\n| `tock_get_restaurant` | Venue details + its bookable experiences (prices, party sizes). |\n| `tock_get_availability` | A venue's bookable calendar: experiences, prices, open dates/times. |\n| `tock_list_reservations` | The signed-in user's purchases / reservations (needs a signed-in tab). |\n| `tock_get_profile` | The signed-in user's profile (needs a signed-in tab). |\n| `tock_verify_reservation` | After a booking attempt, re-query the account and return `confirmed` / `cancelled` / `not_found` (needs a signed-in tab). Use this instead of eyeballing a success screen. |\n| `tock_healthcheck` | Round-trip the bridge; reports status + the pair code on first run. |\n\n## Response shape (`view`)\n\nTwo tools take `view: \"compact\" | \"full\"` — `tock_get_restaurant` and\n`tock_get_profile` — and **`compact` is the default**, so you get the slim\nrung without asking for it. The other six of this server's eight tools have no\n`view`; each for its own reason, below.\n\n**Compact here is media stripping, not a field projection.** `src/view.ts`\nholds no hand-written field list, because this repo has no captured Tock\npayload to derive one from honestly. What it does instead is subtractive: drop\nkeys whose value is a picture, plus **two named explicitly** —\n`profileImageUrl` and `heroImageUrl`.\n\nNaming those two is the load-bearing part, and it is worth knowing why. The\nshared rule anchors its media noun at the START of the key, which is what\nkeeps a flag like `hasThumbnail` alive — and it is also why `profileImageUrl`\n(starts `profile`) and `heroImageUrl` (starts `hero`) both slip past it. That\nwould leave only the fallback rule, which fires when a URL's path happens to\nend in an image extension. A signed or extension-less Tock CDN URL would then\nsurvive compact silently, with nothing in the response to say why. Naming the\nkeys removes the dependency on what a URL happens to look like.\n\nThose two are the only image fields any parsed shape in this server carries —\nthey live on `RestaurantDetails` and nowhere else — and **nothing is kept**:\nno tool here has a picture as its product, so no payload mixes decoration with\ncontent.\n\nExpect one specific non-effect: on **`tock_get_profile` compact provably\nremoves nothing.** The identity record is four fields (`firstName`,\n`lastName`, `email`, `id`), none of them a picture, so both rungs serialise to\nthe same bytes. The rung is declared there for consistency, not for savings.\n\n`view: \"full\"` returns the parsed record untouched. There is deliberately **no\n`raw` rung**: `full` already IS the record this server parsed out of Tock's\npage, so a third value would silently alias one that exists.\n\nWhy the other six have none:\n\n- **`tock_search_restaurants`** returns `RestaurantSummary`, which carries no\n  image key at all — the two image fields exist only on the *details* shape.\n  That is exactly why one of the two restaurant tools has a rung and the other\n  does not; it is not an omission.\n- **`tock_list_metros`** returns hand-built metro records (name, slug, state,\n  country, business count, coordinates). No picture, and no fatter upstream\n  shape behind them to project away from.\n- **`tock_get_availability`** returns an ASSEMBLED calendar — experiences,\n  `openDates`, `openTimes` — built by the parser from Tock's calendar slice,\n  not a pass-through payload. There is no single upstream object to hand back\n  or to slim.\n- **`tock_list_reservations`** returns hand-built reservation records (venue,\n  date/time, party size, experience, cancelled flag) with no media field.\n- **`tock_verify_reservation`** returns a VERDICT — `verdict`, `match`,\n  `searched`, `recheckAdvised`, `reportAs`, `summary`. The verdict is the\n  product, and there is nothing decorative in it to remove.\n- **`tock_healthcheck`** returns a bridge diagnostic, for the same reason.\n\nPassing `view` to one of those is not an error and will not fail: the tool\ndoes not declare it, so zod drops the unknown key and the call runs exactly as\nit would have. You get no warning, so a successful call is not evidence the\nrung was honoured.\n\n## Typical flow\n\n1. `tock_list_metros { query: \"chicago\" }` → find the metro slug.\n2. `tock_search_restaurants { metro: \"chicago\", query: \"tasting menu\" }` → get venue slugs.\n3. `tock_get_availability { slug: \"alinea\", date: \"2026-07-10\", party_size: 2 }` → see experiences and open dates/times.\n4. To book, open `exploretock.com/<slug>` — reservations are prepaid tickets and are completed on Tock.\n\n## Booking verification protocol\n\nBooking happens outside these tools (on exploretock.com, by hand or by UI\nautomation), but **verification is this server's job**. A booking counts as\n**confirmed** only when BOTH hold:\n\n1. a confirmation ID, receipt URL, or confirmation email was captured, **and**\n2. `tock_verify_reservation { venue, date, partySize, bookedMinutesAgo }` returns\n   verdict `confirmed`.\n\nUse `tock_verify_reservation` rather than reading `tock_list_reservations`\nyourself: it checks the canceled and past lists too (a created-then-voided\nbooking appears only in `canceled`), and it applies the lag rule below for you,\nreturning `recheckAdvised: true` when an absence is still inconclusive.\n\nAnything less — including a screenshot of a success screen — must be reported\nas **\"attempted, unverified.\"** Two Tock-specific traps make the stricter rule\nnon-negotiable:\n\n- The post-booking modal is not proof: a confirm submitted with a stale cart\n  is a silent no-op that still renders the success modal.\n- The reservations backend (`PatronReservationHistory`) lags the Reservations\n  tab by **minutes**. A single immediate re-read proving absence proves\n  nothing; re-query after a couple of minutes (and once more before giving a\n  verdict).\n\n## Notes\n\n- **Read-only.** No booking, cancelling, or payment — Tock reservations are prepaid/Turnstile-gated checkouts left to the site.\n- **Discovery needs no login.** Only `tock_list_reservations`, `tock_get_profile` and `tock_verify_reservation` require a signed-in exploretock.com tab.\n- Errors are actionable: a Cloudflare challenge asks you to clear it in the signed-in tab; a signed-out account tool asks you to sign in.\n\nFile v1.1.4:_meta.json\n\n{\n  \"ownerId\": \"kn700jq4sjtf2anb0rk3ft4p7n856872\",\n  \"slug\": \"tock-mcp\",\n  \"version\": \"1.1.4\",\n  \"publishedAt\": 1790604058784\n}\n\nFile v1.1.4:skill-card.md\n\n## Description:\n\nGuides agents in discovering Tock restaurants, experiences, and availability, and in checking a signed-in user's reservations through a read-only MCP integration.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[chrischall](https://clawhub.ai/user/chrischall)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nPeople and agents looking for Tock restaurants can find venues, bookable experiences, prices, and open dates and times. Signed-in users can also inspect their profile and reservations and check whether an external booking attempt appears in their account; booking itself happens on Tock.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The integration uses a third-party MCP package and browser extension with access to the signed-in Tock session and account data.\n\nMitigation: Review the package and extension source or release checksums before installation, and pair only in a browser profile where this access is acceptable.\n\nRisk: A booking success screen or an immediate absence from reservations may not establish whether a booking succeeded.\n\nMitigation: Treat bookings as unverified until a confirmation record is captured and the reservation verification tool confirms them; recheck after a delay if advised.\n\n## Reference(s):\n\n- [Tock MCP on ClawHub](https://clawhub.ai/chrischall/skills/tock-mcp)\n- [Tock MCP npm package](https://www.npmjs.com/package/tock-mcp)\n- [ContextMint Bridge source](https://github.com/nullnet-app/contextmint-bridge)\n- [ContextMint Bridge releases](https://github.com/nullnet-app/contextmint-bridge/releases)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Guidance, Shell commands, Configuration instructions]\n\n**Output Format:** [Markdown with inline JSON and shell commands]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Guidance for read-only venue discovery, availability, and account lookups; signed-in account tools require a paired browser extension.]\n\n## Skill Version(s):\n\n1.1.4 (source: ClawHub release metadata)\n\n## Ethical Considerations:\n\nUsers 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.\n\nArchive v1.1.3: 3 files, 5461 bytes\n\nFiles: skill-card.md (2082b), SKILL.md (9038b), _meta.json (127b)\n\nFile v1.1.3:SKILL.md\n\n---\nname: tock-mcp\ndescription: Discover restaurants on Tock (exploretock.com) via MCP — list cities, search a metro, and get a venue's details plus its bookable experiences, prices, party sizes, and open dates/times. Triggers on phrases like \"search Tock for\", \"what's on Tock in Chicago\", \"find a Tock reservation at\", \"does Alinea have availability on Tock\", \"what experiences does <venue> offer on Tock\", or \"my Tock reservations\". Requires tock-mcp installed and the fetchproxy browser extension running in a signed-in exploretock.com tab.\n---\n\n# tock-mcp\n\nMCP server for Tock (exploretock.com) — restaurant discovery and availability. Every request is relayed through the user's signed-in browser tab via the [fetchproxy](https://github.com/chrischall/fetchproxy) extension, so there's no cookie paste, no bot-wall dance, and no password handling.\n\n- **npm:** [npmjs.com/package/tock-mcp](https://www.npmjs.com/package/tock-mcp)\n- **Source:** [github.com/chrischall/tock-mcp](https://github.com/chrischall/tock-mcp)\n\n> Tock does not publish an official consumer API, and exploretock.com sits behind a Cloudflare challenge. This server fetches the same server-rendered pages the Tock web app uses (parsing their embedded `window.$REDUX_STATE` store) through your own signed-in browser tab. It is **read-only**: Tock reservations are prepaid tickets, so booking is left to exploretock.com. Use at your own discretion.\n\n## Setup\n\nThe MCP server is half of the picture — the other half is the [fetchproxy](https://github.com/chrischall/fetchproxy) browser extension that talks to Tock from your signed-in tab. Both are required.\n\n### 1. Install the MCP server\n\nAdd to `.mcp.json` in your project or `~/.claude/mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"tock\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"tock-mcp\"]\n    }\n  }\n}\n```\n\nOr from source:\n\n```bash\ngit clone https://github.com/chrischall/tock-mcp\ncd tock-mcp\nnpm install && npm run build\n# then point .mcp.json at dist/bundle.js\n```\n\n### 2. Install the fetchproxy extension\n\ntock-mcp shares a single browser extension with every other fetchproxy-based MCP. Install it once from [github.com/chrischall/fetchproxy](https://github.com/chrischall/fetchproxy), then open **exploretock.com** and sign in (only needed for the account tools; discovery works signed-out).\n\n### 3. Approve the one-time pair code\n\nThe first tool call prints a pair code to approve in the Transporter extension popup (trust-on-first-use, per identity). Run `tock_healthcheck` to trigger it, approve the code, and you're paired for good.\n\n## Tools\n\n| Tool | What it does |\n| --- | --- |\n| `tock_list_metros` | List Tock cities/metros (name, slug, business count). Filter by name/country. |\n| `tock_search_restaurants` | List / search venues in a metro slug (cuisine, price, neighborhood, slug). |\n| `tock_get_restaurant` | Venue details + its bookable experiences (prices, party sizes). |\n| `tock_get_availability` | A venue's bookable calendar: experiences, prices, open dates/times. |\n| `tock_list_reservations` | The signed-in user's purchases / reservations (needs a signed-in tab). |\n| `tock_get_profile` | The signed-in user's profile (needs a signed-in tab). |\n| `tock_verify_reservation` | After a booking attempt, re-query the account and return `confirmed` / `cancelled` / `not_found` (needs a signed-in tab). Use this instead of eyeballing a success screen. |\n| `tock_healthcheck` | Round-trip the bridge; reports status + the pair code on first run. |\n\n## Response shape (`view`)\n\nTwo tools take `view: \"compact\" | \"full\"` — `tock_get_restaurant` and\n`tock_get_profile` — and **`compact` is the default**, so you get the slim\nrung without asking for it. The other six of this server's eight tools have no\n`view`; each for its own reason, below.\n\n**Compact here is media stripping, not a field projection.** `src/view.ts`\nholds no hand-written field list, because this repo has no captured Tock\npayload to derive one from honestly. What it does instead is subtractive: drop\nkeys whose value is a picture, plus **two named explicitly** —\n`profileImageUrl` and `heroImageUrl`.\n\nNaming those two is the load-bearing part, and it is worth knowing why. The\nshared rule anchors its media noun at the START of the key, which is what\nkeeps a flag like `hasThumbnail` alive — and it is also why `profileImageUrl`\n(starts `profile`) and `heroImageUrl` (starts `hero`) both slip past it. That\nwould leave only the fallback rule, which fires when a URL's path happens to\nend in an image extension. A signed or extension-less Tock CDN URL would then\nsurvive compact silently, with nothing in the response to say why. Naming the\nkeys removes the dependency on what a URL happens to look like.\n\nThose two are the only image fields any parsed shape in this server carries —\nthey live on `RestaurantDetails` and nowhere else — and **nothing is kept**:\nno tool here has a picture as its product, so no payload mixes decoration with\ncontent.\n\nExpect one specific non-effect: on **`tock_get_profile` compact provably\nremoves nothing.** The identity record is four fields (`firstName`,\n`lastName`, `email`, `id`), none of them a picture, so both rungs serialise to\nthe same bytes. The rung is declared there for consistency, not for savings.\n\n`view: \"full\"` returns the parsed record untouched. There is deliberately **no\n`raw` rung**: `full` already IS the record this server parsed out of Tock's\npage, so a third value would silently alias one that exists.\n\nWhy the other six have none:\n\n- **`tock_search_restaurants`** returns `RestaurantSummary`, which carries no\n  image key at all — the two image fields exist only on the *details* shape.\n  That is exactly why one of the two restaurant tools has a rung and the other\n  does not; it is not an omission.\n- **`tock_list_metros`** returns hand-built metro records (name, slug, state,\n  country, business count, coordinates). No picture, and no fatter upstream\n  shape behind them to project away from.\n- **`tock_get_availability`** returns an ASSEMBLED calendar — experiences,\n  `openDates`, `openTimes` — built by the parser from Tock's calendar slice,\n  not a pass-through payload. There is no single upstream object to hand back\n  or to slim.\n- **`tock_list_reservations`** returns hand-built reservation records (venue,\n  date/time, party size, experience, cancelled flag) with no media field.\n- **`tock_verify_reservation`** returns a VERDICT — `verdict`, `match`,\n  `searched`, `recheckAdvised`, `reportAs`, `summary`. The verdict is the\n  product, and there is nothing decorative in it to remove.\n- **`tock_healthcheck`** returns a bridge diagnostic, for the same reason.\n\nPassing `view` to one of those is not an error and will not fail: the tool\ndoes not declare it, so zod drops the unknown key and the call runs exactly as\nit would have. You get no warning, so a successful call is not evidence the\nrung was honoured.\n\n## Typical flow\n\n1. `tock_list_metros { query: \"chicago\" }` → find the metro slug.\n2. `tock_search_restaurants { metro: \"chicago\", query: \"tasting menu\" }` → get venue slugs.\n3. `tock_get_availability { slug: \"alinea\", date: \"2026-07-10\", party_size: 2 }` → see experiences and open dates/times.\n4. To book, open `exploretock.com/<slug>` — reservations are prepaid tickets and are completed on Tock.\n\n## Booking verification protocol\n\nBooking happens outside these tools (on exploretock.com, by hand or by UI\nautomation), but **verification is this server's job**. A booking counts as\n**confirmed** only when BOTH hold:\n\n1. a confirmation ID, receipt URL, or confirmation email was captured, **and**\n2. `tock_verify_reservation { venue, date, partySize, bookedMinutesAgo }` returns\n   verdict `confirmed`.\n\nUse `tock_verify_reservation` rather than reading `tock_list_reservations`\nyourself: it checks the canceled and past lists too (a created-then-voided\nbooking appears only in `canceled`), and it applies the lag rule below for you,\nreturning `recheckAdvised: true` when an absence is still inconclusive.\n\nAnything less — including a screenshot of a success screen — must be reported\nas **\"attempted, unverified.\"** Two Tock-specific traps make the stricter rule\nnon-negotiable:\n\n- The post-booking modal is not proof: a confirm submitted with a stale cart\n  is a silent no-op that still renders the success modal.\n- The reservations backend (`PatronReservationHistory`) lags the Reservations\n  tab by **minutes**. A single immediate re-read proving absence proves\n  nothing; re-query after a couple of minutes (and once more before giving a\n  verdict).\n\n## Notes\n\n- **Read-only.** No booking, cancelling, or payment — Tock reservations are prepaid/Turnstile-gated checkouts left to the site.\n- **Discovery needs no login.** Only `tock_list_reservations`, `tock_get_profile` and `tock_verify_reservation` require a signed-in exploretock.com tab.\n- Errors are actionable: a Cloudflare challenge asks you to clear it in the signed-in tab; a signed-out account tool asks you to sign in.\n\nFile v1.1.3:_meta.json\n\n{\n  \"ownerId\": \"kn700jq4sjtf2anb0rk3ft4p7n856872\",\n  \"slug\": \"tock-mcp\",\n  \"version\": \"1.1.3\",\n  \"publishedAt\": 1790351576512\n}\n\nFile v1.1.3:skill-card.md\n\n## Description:\n\nHelps agents find Tock restaurants, view experiences and availability, and check a signed-in user's reservations through a read-only MCP server.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[chrischall](https://clawhub.ai/user/chrischall)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nUsers and agents can discover restaurants, compare bookable experiences and dates, and inspect or verify reservations associated with a signed-in Tock account. Booking, payment, and cancellation remain on Tock.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The external npm package and browser extension access a signed-in Tock session for account data.\n\nMitigation: Review both components before installation and use account tools only with a browser session you intend to share with them.\n\nRisk: A booking success screen or immediate reservation lookup may not prove a reservation was confirmed.\n\nMitigation: Retain a confirmation ID, receipt, or email and confirm with the reservation-verification tool; recheck if it advises waiting.\n\n## Reference(s):\n\n- [ClawHub skill listing](https://clawhub.ai/chrischall/skills/tock-mcp)\n- [tock-mcp npm package](https://www.npmjs.com/package/tock-mcp)\n- [tock-mcp project link in skill documentation](https://github.com/chrischall/tock-mcp)\n- [fetchproxy browser extension](https://github.com/chrischall/fetchproxy)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Guidance]\n\n**Output Format:** [Structured MCP tool results and natural-language responses]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Read-only restaurant, availability, profile, and reservation results; account tools require a signed-in Tock tab.]\n\n## Skill Version(s):\n\n1.1.3 (source: ClawHub release metadata)\n\n## Ethical Considerations:\n\nUsers 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.\n\nArchive v1.1.2: 3 files, 5579 bytes\n\nFiles: skill-card.md (2340b), SKILL.md (9038b), _meta.json (127b)\n\nFile v1.1.2:SKILL.md\n\n---\nname: tock-mcp\ndescription: Discover restaurants on Tock (exploretock.com) via MCP — list cities, search a metro, and get a venue's details plus its bookable experiences, prices, party sizes, and open dates/times. Triggers on phrases like \"search Tock for\", \"what's on Tock in Chicago\", \"find a Tock reservation at\", \"does Alinea have availability on Tock\", \"what experiences does <venue> offer on Tock\", or \"my Tock reservations\". Requires tock-mcp installed and the fetchproxy browser extension running in a signed-in exploretock.com tab.\n---\n\n# tock-mcp\n\nMCP server for Tock (exploretock.com) — restaurant discovery and availability. Every request is relayed through the user's signed-in browser tab via the [fetchproxy](https://github.com/chrischall/fetchproxy) extension, so there's no cookie paste, no bot-wall dance, and no password handling.\n\n- **npm:** [npmjs.com/package/tock-mcp](https://www.npmjs.com/package/tock-mcp)\n- **Source:** [github.com/chrischall/tock-mcp](https://github.com/chrischall/tock-mcp)\n\n> Tock does not publish an official consumer API, and exploretock.com sits behind a Cloudflare challenge. This server fetches the same server-rendered pages the Tock web app uses (parsing their embedded `window.$REDUX_STATE` store) through your own signed-in browser tab. It is **read-only**: Tock reservations are prepaid tickets, so booking is left to exploretock.com. Use at your own discretion.\n\n## Setup\n\nThe MCP server is half of the picture — the other half is the [fetchproxy](https://github.com/chrischall/fetchproxy) browser extension that talks to Tock from your signed-in tab. Both are required.\n\n### 1. Install the MCP server\n\nAdd to `.mcp.json` in your project or `~/.claude/mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"tock\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"tock-mcp\"]\n    }\n  }\n}\n```\n\nOr from source:\n\n```bash\ngit clone https://github.com/chrischall/tock-mcp\ncd tock-mcp\nnpm install && npm run build\n# then point .mcp.json at dist/bundle.js\n```\n\n### 2. Install the fetchproxy extension\n\ntock-mcp shares a single browser extension with every other fetchproxy-based MCP. Install it once from [github.com/chrischall/fetchproxy](https://github.com/chrischall/fetchproxy), then open **exploretock.com** and sign in (only needed for the account tools; discovery works signed-out).\n\n### 3. Approve the one-time pair code\n\nThe first tool call prints a pair code to approve in the Transporter extension popup (trust-on-first-use, per identity). Run `tock_healthcheck` to trigger it, approve the code, and you're paired for good.\n\n## Tools\n\n| Tool | What it does |\n| --- | --- |\n| `tock_list_metros` | List Tock cities/metros (name, slug, business count). Filter by name/country. |\n| `tock_search_restaurants` | List / search venues in a metro slug (cuisine, price, neighborhood, slug). |\n| `tock_get_restaurant` | Venue details + its bookable experiences (prices, party sizes). |\n| `tock_get_availability` | A venue's bookable calendar: experiences, prices, open dates/times. |\n| `tock_list_reservations` | The signed-in user's purchases / reservations (needs a signed-in tab). |\n| `tock_get_profile` | The signed-in user's profile (needs a signed-in tab). |\n| `tock_verify_reservation` | After a booking attempt, re-query the account and return `confirmed` / `cancelled` / `not_found` (needs a signed-in tab). Use this instead of eyeballing a success screen. |\n| `tock_healthcheck` | Round-trip the bridge; reports status + the pair code on first run. |\n\n## Response shape (`view`)\n\nTwo tools take `view: \"compact\" | \"full\"` — `tock_get_restaurant` and\n`tock_get_profile` — and **`compact` is the default**, so you get the slim\nrung without asking for it. The other six of this server's eight tools have no\n`view`; each for its own reason, below.\n\n**Compact here is media stripping, not a field projection.** `src/view.ts`\nholds no hand-written field list, because this repo has no captured Tock\npayload to derive one from honestly. What it does instead is subtractive: drop\nkeys whose value is a picture, plus **two named explicitly** —\n`profileImageUrl` and `heroImageUrl`.\n\nNaming those two is the load-bearing part, and it is worth knowing why. The\nshared rule anchors its media noun at the START of the key, which is what\nkeeps a flag like `hasThumbnail` alive — and it is also why `profileImageUrl`\n(starts `profile`) and `heroImageUrl` (starts `hero`) both slip past it. That\nwould leave only the fallback rule, which fires when a URL's path happens to\nend in an image extension. A signed or extension-less Tock CDN URL would then\nsurvive compact silently, with nothing in the response to say why. Naming the\nkeys removes the dependency on what a URL happens to look like.\n\nThose two are the only image fields any parsed shape in this server carries —\nthey live on `RestaurantDetails` and nowhere else — and **nothing is kept**:\nno tool here has a picture as its product, so no payload mixes decoration with\ncontent.\n\nExpect one specific non-effect: on **`tock_get_profile` compact provably\nremoves nothing.** The identity record is four fields (`firstName`,\n`lastName`, `email`, `id`), none of them a picture, so both rungs serialise to\nthe same bytes. The rung is declared there for consistency, not for savings.\n\n`view: \"full\"` returns the parsed record untouched. There is deliberately **no\n`raw` rung**: `full` already IS the record this server parsed out of Tock's\npage, so a third value would silently alias one that exists.\n\nWhy the other six have none:\n\n- **`tock_search_restaurants`** returns `RestaurantSummary`, which carries no\n  image key at all — the two image fields exist only on the *details* shape.\n  That is exactly why one of the two restaurant tools has a rung and the other\n  does not; it is not an omission.\n- **`tock_list_metros`** returns hand-built metro records (name, slug, state,\n  country, business count, coordinates). No picture, and no fatter upstream\n  shape behind them to project away from.\n- **`tock_get_availability`** returns an ASSEMBLED calendar — experiences,\n  `openDates`, `openTimes` — built by the parser from Tock's calendar slice,\n  not a pass-through payload. There is no single upstream object to hand back\n  or to slim.\n- **`tock_list_reservations`** returns hand-built reservation records (venue,\n  date/time, party size, experience, cancelled flag) with no media field.\n- **`tock_verify_reservation`** returns a VERDICT — `verdict`, `match`,\n  `searched`, `recheckAdvised`, `reportAs`, `summary`. The verdict is the\n  product, and there is nothing decorative in it to remove.\n- **`tock_healthcheck`** returns a bridge diagnostic, for the same reason.\n\nPassing `view` to one of those is not an error and will not fail: the tool\ndoes not declare it, so zod drops the unknown key and the call runs exactly as\nit would have. You get no warning, so a successful call is not evidence the\nrung was honoured.\n\n## Typical flow\n\n1. `tock_list_metros { query: \"chicago\" }` → find the metro slug.\n2. `tock_search_restaurants { metro: \"chicago\", query: \"tasting menu\" }` → get venue slugs.\n3. `tock_get_availability { slug: \"alinea\", date: \"2026-07-10\", party_size: 2 }` → see experiences and open dates/times.\n4. To book, open `exploretock.com/<slug>` — reservations are prepaid tickets and are completed on Tock.\n\n## Booking verification protocol\n\nBooking happens outside these tools (on exploretock.com, by hand or by UI\nautomation), but **verification is this server's job**. A booking counts as\n**confirmed** only when BOTH hold:\n\n1. a confirmation ID, receipt URL, or confirmation email was captured, **and**\n2. `tock_verify_reservation { venue, date, partySize, bookedMinutesAgo }` returns\n   verdict `confirmed`.\n\nUse `tock_verify_reservation` rather than reading `tock_list_reservations`\nyourself: it checks the canceled and past lists too (a created-then-voided\nbooking appears only in `canceled`), and it applies the lag rule below for you,\nreturning `recheckAdvised: true` when an absence is still inconclusive.\n\nAnything less — including a screenshot of a success screen — must be reported\nas **\"attempted, unverified.\"** Two Tock-specific traps make the stricter rule\nnon-negotiable:\n\n- The post-booking modal is not proof: a confirm submitted with a stale cart\n  is a silent no-op that still renders the success modal.\n- The reservations backend (`PatronReservationHistory`) lags the Reservations\n  tab by **minutes**. A single immediate re-read proving absence proves\n  nothing; re-query after a couple of minutes (and once more before giving a\n  verdict).\n\n## Notes\n\n- **Read-only.** No booking, cancelling, or payment — Tock reservations are prepaid/Turnstile-gated checkouts left to the site.\n- **Discovery needs no login.** Only `tock_list_reservations`, `tock_get_profile` and `tock_verify_reservation` require a signed-in exploretock.com tab.\n- Errors are actionable: a Cloudflare challenge asks you to clear it in the signed-in tab; a signed-out account tool asks you to sign in.\n\nFile v1.1.2:_meta.json\n\n{\n  \"ownerId\": \"kn700jq4sjtf2anb0rk3ft4p7n856872\",\n  \"slug\": \"tock-mcp\",\n  \"version\": \"1.1.2\",\n  \"publishedAt\": 1790199666546\n}\n\nFile v1.1.2:skill-card.md\n\n## Description:\n\nDiscover restaurants and availability on Tock via MCP, including cities, venue details, bookable experiences, prices, party sizes, open dates and times, and signed-in account reservation or profile queries when configured.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[chrischall](https://clawhub.ai/user/chrischall)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and agent users use this skill to connect an MCP-capable assistant to Tock restaurant discovery, availability lookup, account profile, reservation listing, and reservation verification workflows. Bookings remain outside the skill and are completed directly on Tock.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The skill depends on the external tock-mcp package and fetchproxy browser extension, which relay requests through a signed-in Tock browser tab.\n\nMitigation: Review those external components before installation and use them only if granting read access to Tock profile and reservation data is acceptable.\n\nRisk: Reservation booking is outside the skill and success screens may not prove that a booking was confirmed.\n\nMitigation: Complete bookings directly on Tock and use the reservation verification workflow before reporting a booking as confirmed.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/chrischall/skills/tock-mcp)\n- [tock-mcp npm package](https://www.npmjs.com/package/tock-mcp)\n- [tock-mcp source](https://github.com/chrischall/tock-mcp)\n- [fetchproxy extension](https://github.com/chrischall/fetchproxy)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown with inline JSON and shell command examples, plus structured MCP tool outputs from the configured server]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Read-only Tock discovery and account-query workflows; compact view is the default for supported tools.]\n\n## Skill Version(s):\n\n1.1.2 (source: server release evidence)\n\n## Ethical Considerations:\n\nUsers 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.\n\nArchive v1.1.1: 3 files, 5600 bytes\n\nFiles: skill-card.md (2467b), SKILL.md (9038b), _meta.json (127b)\n\nFile v1.1.1:SKILL.md\n\n---\nname: tock-mcp\ndescription: Discover restaurants on Tock (exploretock.com) via MCP — list cities, search a metro, and get a venue's details plus its bookable experiences, prices, party sizes, and open dates/times. Triggers on phrases like \"search Tock for\", \"what's on Tock in Chicago\", \"find a Tock reservation at\", \"does Alinea have availability on Tock\", \"what experiences does <venue> offer on Tock\", or \"my Tock reservations\". Requires tock-mcp installed and the fetchproxy browser extension running in a signed-in exploretock.com tab.\n---\n\n# tock-mcp\n\nMCP server for Tock (exploretock.com) — restaurant discovery and availability. Every request is relayed through the user's signed-in browser tab via the [fetchproxy](https://github.com/chrischall/fetchproxy) extension, so there's no cookie paste, no bot-wall dance, and no password handling.\n\n- **npm:** [npmjs.com/package/tock-mcp](https://www.npmjs.com/package/tock-mcp)\n- **Source:** [github.com/chrischall/tock-mcp](https://github.com/chrischall/tock-mcp)\n\n> Tock does not publish an official consumer API, and exploretock.com sits behind a Cloudflare challenge. This server fetches the same server-rendered pages the Tock web app uses (parsing their embedded `window.$REDUX_STATE` store) through your own signed-in browser tab. It is **read-only**: Tock reservations are prepaid tickets, so booking is left to exploretock.com. Use at your own discretion.\n\n## Setup\n\nThe MCP server is half of the picture — the other half is the [fetchproxy](https://github.com/chrischall/fetchproxy) browser extension that talks to Tock from your signed-in tab. Both are required.\n\n### 1. Install the MCP server\n\nAdd to `.mcp.json` in your project or `~/.claude/mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"tock\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"tock-mcp\"]\n    }\n  }\n}\n```\n\nOr from source:\n\n```bash\ngit clone https://github.com/chrischall/tock-mcp\ncd tock-mcp\nnpm install && npm run build\n# then point .mcp.json at dist/bundle.js\n```\n\n### 2. Install the fetchproxy extension\n\ntock-mcp shares a single browser extension with every other fetchproxy-based MCP. Install it once from [github.com/chrischall/fetchproxy](https://github.com/chrischall/fetchproxy), then open **exploretock.com** and sign in (only needed for the account tools; discovery works signed-out).\n\n### 3. Approve the one-time pair code\n\nThe first tool call prints a pair code to approve in the Transporter extension popup (trust-on-first-use, per identity). Run `tock_healthcheck` to trigger it, approve the code, and you're paired for good.\n\n## Tools\n\n| Tool | What it does |\n| --- | --- |\n| `tock_list_metros` | List Tock cities/metros (name, slug, business count). Filter by name/country. |\n| `tock_search_restaurants` | List / search venues in a metro slug (cuisine, price, neighborhood, slug). |\n| `tock_get_restaurant` | Venue details + its bookable experiences (prices, party sizes). |\n| `tock_get_availability` | A venue's bookable calendar: experiences, prices, open dates/times. |\n| `tock_list_reservations` | The signed-in user's purchases / reservations (needs a signed-in tab). |\n| `tock_get_profile` | The signed-in user's profile (needs a signed-in tab). |\n| `tock_verify_reservation` | After a booking attempt, re-query the account and return `confirmed` / `cancelled` / `not_found` (needs a signed-in tab). Use this instead of eyeballing a success screen. |\n| `tock_healthcheck` | Round-trip the bridge; reports status + the pair code on first run. |\n\n## Response shape (`view`)\n\nTwo tools take `view: \"compact\" | \"full\"` — `tock_get_restaurant` and\n`tock_get_profile` — and **`compact` is the default**, so you get the slim\nrung without asking for it. The other six of this server's eight tools have no\n`view`; each for its own reason, below.\n\n**Compact here is media stripping, not a field projection.** `src/view.ts`\nholds no hand-written field list, because this repo has no captured Tock\npayload to derive one from honestly. What it does instead is subtractive: drop\nkeys whose value is a picture, plus **two named explicitly** —\n`profileImageUrl` and `heroImageUrl`.\n\nNaming those two is the load-bearing part, and it is worth knowing why. The\nshared rule anchors its media noun at the START of the key, which is what\nkeeps a flag like `hasThumbnail` alive — and it is also why `profileImageUrl`\n(starts `profile`) and `heroImageUrl` (starts `hero`) both slip past it. That\nwould leave only the fallback rule, which fires when a URL's path happens to\nend in an image extension. A signed or extension-less Tock CDN URL would then\nsurvive compact silently, with nothing in the response to say why. Naming the\nkeys removes the dependency on what a URL happens to look like.\n\nThose two are the only image fields any parsed shape in this server carries —\nthey live on `RestaurantDetails` and nowhere else — and **nothing is kept**:\nno tool here has a picture as its product, so no payload mixes decoration with\ncontent.\n\nExpect one specific non-effect: on **`tock_get_profile` compact provably\nremoves nothing.** The identity record is four fields (`firstName`,\n`lastName`, `email`, `id`), none of them a picture, so both rungs serialise to\nthe same bytes. The rung is declared there for consistency, not for savings.\n\n`view: \"full\"` returns the parsed record untouched. There is deliberately **no\n`raw` rung**: `full` already IS the record this server parsed out of Tock's\npage, so a third value would silently alias one that exists.\n\nWhy the other six have none:\n\n- **`tock_search_restaurants`** returns `RestaurantSummary`, which carries no\n  image key at all — the two image fields exist only on the *details* shape.\n  That is exactly why one of the two restaurant tools has a rung and the other\n  does not; it is not an omission.\n- **`tock_list_metros`** returns hand-built metro records (name, slug, state,\n  country, business count, coordinates). No picture, and no fatter upstream\n  shape behind them to project away from.\n- **`tock_get_availability`** returns an ASSEMBLED calendar — experiences,\n  `openDates`, `openTimes` — built by the parser from Tock's calendar slice,\n  not a pass-through payload. There is no single upstream object to hand back\n  or to slim.\n- **`tock_list_reservations`** returns hand-built reservation records (venue,\n  date/time, party size, experience, cancelled flag) with no media field.\n- **`tock_verify_reservation`** returns a VERDICT — `verdict`, `match`,\n  `searched`, `recheckAdvised`, `reportAs`, `summary`. The verdict is the\n  product, and there is nothing decorative in it to remove.\n- **`tock_healthcheck`** returns a bridge diagnostic, for the same reason.\n\nPassing `view` to one of those is not an error and will not fail: the tool\ndoes not declare it, so zod drops the unknown key and the call runs exactly as\nit would have. You get no warning, so a successful call is not evidence the\nrung was honoured.\n\n## Typical flow\n\n1. `tock_list_metros { query: \"chicago\" }` → find the metro slug.\n2. `tock_search_restaurants { metro: \"chicago\", query: \"tasting menu\" }` → get venue slugs.\n3. `tock_get_availability { slug: \"alinea\", date: \"2026-07-10\", party_size: 2 }` → see experiences and open dates/times.\n4. To book, open `exploretock.com/<slug>` — reservations are prepaid tickets and are completed on Tock.\n\n## Booking verification protocol\n\nBooking happens outside these tools (on exploretock.com, by hand or by UI\nautomation), but **verification is this server's job**. A booking counts as\n**confirmed** only when BOTH hold:\n\n1. a confirmation ID, receipt URL, or confirmation email was captured, **and**\n2. `tock_verify_reservation { venue, date, partySize, bookedMinutesAgo }` returns\n   verdict `confirmed`.\n\nUse `tock_verify_reservation` rather than reading `tock_list_reservations`\nyourself: it checks the canceled and past lists too (a created-then-voided\nbooking appears only in `canceled`), and it applies the lag rule below for you,\nreturning `recheckAdvised: true` when an absence is still inconclusive.\n\nAnything less — including a screenshot of a success screen — must be reported\nas **\"attempted, unverified.\"** Two Tock-specific traps make the stricter rule\nnon-negotiable:\n\n- The post-booking modal is not proof: a confirm submitted with a stale cart\n  is a silent no-op that still renders the success modal.\n- The reservations backend (`PatronReservationHistory`) lags the Reservations\n  tab by **minutes**. A single immediate re-read proving absence proves\n  nothing; re-query after a couple of minutes (and once more before giving a\n  verdict).\n\n## Notes\n\n- **Read-only.** No booking, cancelling, or payment — Tock reservations are prepaid/Turnstile-gated checkouts left to the site.\n- **Discovery needs no login.** Only `tock_list_reservations`, `tock_get_profile` and `tock_verify_reservation` require a signed-in exploretock.com tab.\n- Errors are actionable: a Cloudflare challenge asks you to clear it in the signed-in tab; a signed-out account tool asks you to sign in.\n\nFile v1.1.1:_meta.json\n\n{\n  \"ownerId\": \"kn700jq4sjtf2anb0rk3ft4p7n856872\",\n  \"slug\": \"tock-mcp\",\n  \"version\": \"1.1.1\",\n  \"publishedAt\": 1790177975523\n}\n\nFile v1.1.1:skill-card.md\n\n## Description:\n\nDiscovers restaurants on Tock through an MCP server, including metro search, venue details, bookable experiences, prices, party sizes, open dates and times, and signed-in reservation/profile lookups when a browser bridge is available.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[chrischall](https://clawhub.ai/user/chrischall)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal users and developers use this skill to discover Tock restaurants, check bookable experiences and availability, and query their own Tock reservation/profile information through a configured MCP server. Booking, cancellation, and payment remain outside the skill.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The npm package and fetchproxy browser extension operate through the user's signed-in Tock browser session and can read Tock profile and reservation information.\n\nMitigation: Install only after confirming the package and extension are trusted, and use account-specific tools only in a browser session intended for that access.\n\nRisk: Reservation booking cannot be completed or proven from the skill alone.\n\nMitigation: Complete booking, cancellation, and payment on exploretock.com, then verify any booking with both a captured confirmation artifact and the tock_verify_reservation tool.\n\n## Reference(s):\n\n- [tock-mcp on ClawHub](https://clawhub.ai/chrischall/skills/tock-mcp)\n- [tock-mcp npm package](https://www.npmjs.com/package/tock-mcp)\n- [fetchproxy browser extension](https://github.com/chrischall/fetchproxy)\n- [Tock](https://exploretock.com)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown guidance with JSON configuration and shell command examples; MCP tool responses provide text or structured restaurant, availability, profile, and reservation data.]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Requires the tock-mcp package and fetchproxy browser extension; account-specific tools require a signed-in exploretock.com browser tab.]\n\n## Skill Version(s):\n\n1.1.1 (source: server-resolved release metadata)\n\n## Ethical Considerations:\n\nUsers 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.\n\nArchive v1.1.0: 3 files, 5647 bytes\n\nFiles: skill-card.md (2480b), SKILL.md (9038b), _meta.json (127b)\n\nFile v1.1.0:SKILL.md\n\n---\nname: tock-mcp\ndescription: Discover restaurants on Tock (exploretock.com) via MCP — list cities, search a metro, and get a venue's details plus its bookable experiences, prices, party sizes, and open dates/times. Triggers on phrases like \"search Tock for\", \"what's on Tock in Chicago\", \"find a Tock reservation at\", \"does Alinea have availability on Tock\", \"what experiences does <venue> offer on Tock\", or \"my Tock reservations\". Requires tock-mcp installed and the fetchproxy browser extension running in a signed-in exploretock.com tab.\n---\n\n# tock-mcp\n\nMCP server for Tock (exploretock.com) — restaurant discovery and availability. Every request is relayed through the user's signed-in browser tab via the [fetchproxy](https://github.com/chrischall/fetchproxy) extension, so there's no cookie paste, no bot-wall dance, and no password handling.\n\n- **npm:** [npmjs.com/package/tock-mcp](https://www.npmjs.com/package/tock-mcp)\n- **Source:** [github.com/chrischall/tock-mcp](https://github.com/chrischall/tock-mcp)\n\n> Tock does not publish an official consumer API, and exploretock.com sits behind a Cloudflare challenge. This server fetches the same server-rendered pages the Tock web app uses (parsing their embedded `window.$REDUX_STATE` store) through your own signed-in browser tab. It is **read-only**: Tock reservations are prepaid tickets, so booking is left to exploretock.com. Use at your own discretion.\n\n## Setup\n\nThe MCP server is half of the picture — the other half is the [fetchproxy](https://github.com/chrischall/fetchproxy) browser extension that talks to Tock from your signed-in tab. Both are required.\n\n### 1. Install the MCP server\n\nAdd to `.mcp.json` in your project or `~/.claude/mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"tock\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"tock-mcp\"]\n    }\n  }\n}\n```\n\nOr from source:\n\n```bash\ngit clone https://github.com/chrischall/tock-mcp\ncd tock-mcp\nnpm install && npm run build\n# then point .mcp.json at dist/bundle.js\n```\n\n### 2. Install the fetchproxy extension\n\ntock-mcp shares a single browser extension with every other fetchproxy-based MCP. Install it once from [github.com/chrischall/fetchproxy](https://github.com/chrischall/fetchproxy), then open **exploretock.com** and sign in (only needed for the account tools; discovery works signed-out).\n\n### 3. Approve the one-time pair code\n\nThe first tool call prints a pair code to approve in the Transporter extension popup (trust-on-first-use, per identity). Run `tock_healthcheck` to trigger it, approve the code, and you're paired for good.\n\n## Tools\n\n| Tool | What it does |\n| --- | --- |\n| `tock_list_metros` | List Tock cities/metros (name, slug, business count). Filter by name/country. |\n| `tock_search_restaurants` | List / search venues in a metro slug (cuisine, price, neighborhood, slug). |\n| `tock_get_restaurant` | Venue details + its bookable experiences (prices, party sizes). |\n| `tock_get_availability` | A venue's bookable calendar: experiences, prices, open dates/times. |\n| `tock_list_reservations` | The signed-in user's purchases / reservations (needs a signed-in tab). |\n| `tock_get_profile` | The signed-in user's profile (needs a signed-in tab). |\n| `tock_verify_reservation` | After a booking attempt, re-query the account and return `confirmed` / `cancelled` / `not_found` (needs a signed-in tab). Use this instead of eyeballing a success screen. |\n| `tock_healthcheck` | Round-trip the bridge; reports status + the pair code on first run. |\n\n## Response shape (`view`)\n\nTwo tools take `view: \"compact\" | \"full\"` — `tock_get_restaurant` and\n`tock_get_profile` — and **`compact` is the default**, so you get the slim\nrung without asking for it. The other six of this server's eight tools have no\n`view`; each for its own reason, below.\n\n**Compact here is media stripping, not a field projection.** `src/view.ts`\nholds no hand-written field list, because this repo has no captured Tock\npayload to derive one from honestly. What it does instead is subtractive: drop\nkeys whose value is a picture, plus **two named explicitly** —\n`profileImageUrl` and `heroImageUrl`.\n\nNaming those two is the load-bearing part, and it is worth knowing why. The\nshared rule anchors its media noun at the START of the key, which is what\nkeeps a flag like `hasThumbnail` alive — and it is also why `profileImageUrl`\n(starts `profile`) and `heroImageUrl` (starts `hero`) both slip past it. That\nwould leave only the fallback rule, which fires when a URL's path happens to\nend in an image extension. A signed or extension-less Tock CDN URL would then\nsurvive compact silently, with nothing in the response to say why. Naming the\nkeys removes the dependency on what a URL happens to look like.\n\nThose two are the only image fields any parsed shape in this server carries —\nthey live on `RestaurantDetails` and nowhere else — and **nothing is kept**:\nno tool here has a picture as its product, so no payload mixes decoration with\ncontent.\n\nExpect one specific non-effect: on **`tock_get_profile` compact provably\nremoves nothing.** The identity record is four fields (`firstName`,\n`lastName`, `email`, `id`), none of them a picture, so both rungs serialise to\nthe same bytes. The rung is declared there for consistency, not for savings.\n\n`view: \"full\"` returns the parsed record untouched. There is deliberately **no\n`raw` rung**: `full` already IS the record this server parsed out of Tock's\npage, so a third value would silently alias one that exists.\n\nWhy the other six have none:\n\n- **`tock_search_restaurants`** returns `RestaurantSummary`, which carries no\n  image key at all — the two image fields exist only on the *details* shape.\n  That is exactly why one of the two restaurant tools has a rung and the other\n  does not; it is not an omission.\n- **`tock_list_metros`** returns hand-built metro records (name, slug, state,\n  country, business count, coordinates). No picture, and no fatter upstream\n  shape behind them to project away from.\n- **`tock_get_availability`** returns an ASSEMBLED calendar — experiences,\n  `openDates`, `openTimes` — built by the parser from Tock's calendar slice,\n  not a pass-through payload. There is no single upstream object to hand back\n  or to slim.\n- **`tock_list_reservations`** returns hand-built reservation records (venue,\n  date/time, party size, experience, cancelled flag) with no media field.\n- **`tock_verify_reservation`** returns a VERDICT — `verdict`, `match`,\n  `searched`, `recheckAdvised`, `reportAs`, `summary`. The verdict is the\n  product, and there is nothing decorative in it to remove.\n- **`tock_healthcheck`** returns a bridge diagnostic, for the same reason.\n\nPassing `view` to one of those is not an error and will not fail: the tool\ndoes not declare it, so zod drops the unknown key and the call runs exactly as\nit would have. You get no warning, so a successful call is not evidence the\nrung was honoured.\n\n## Typical flow\n\n1. `tock_list_metros { query: \"chicago\" }` → find the metro slug.\n2. `tock_search_restaurants { metro: \"chicago\", query: \"tasting menu\" }` → get venue slugs.\n3. `tock_get_availability { slug: \"alinea\", date: \"2026-07-10\", party_size: 2 }` → see experiences and open dates/times.\n4. To book, open `exploretock.com/<slug>` — reservations are prepaid tickets and are completed on Tock.\n\n## Booking verification protocol\n\nBooking happens outside these tools (on exploretock.com, by hand or by UI\nautomation), but **verification is this server's job**. A booking counts as\n**confirmed** only when BOTH hold:\n\n1. a confirmation ID, receipt URL, or confirmation email was captured, **and**\n2. `tock_verify_reservation { venue, date, partySize, bookedMinutesAgo }` returns\n   verdict `confirmed`.\n\nUse `tock_verify_reservation` rather than reading `tock_list_reservations`\nyourself: it checks the canceled and past lists too (a created-then-voided\nbooking appears only in `canceled`), and it applies the lag rule below for you,\nreturning `recheckAdvised: true` when an absence is still inconclusive.\n\nAnything less — including a screenshot of a success screen — must be reported\nas **\"attempted, unverified.\"** Two Tock-specific traps make the stricter rule\nnon-negotiable:\n\n- The post-booking modal is not proof: a confirm submitted with a stale cart\n  is a silent no-op that still renders the success modal.\n- The reservations backend (`PatronReservationHistory`) lags the Reservations\n  tab by **minutes**. A single immediate re-read proving absence proves\n  nothing; re-query after a couple of minutes (and once more before giving a\n  verdict).\n\n## Notes\n\n- **Read-only.** No booking, cancelling, or payment — Tock reservations are prepaid/Turnstile-gated checkouts left to the site.\n- **Discovery needs no login.** Only `tock_list_reservations`, `tock_get_profile` and `tock_verify_reservation` require a signed-in exploretock.com tab.\n- Errors are actionable: a Cloudflare challenge asks you to clear it in the signed-in tab; a signed-out account tool asks you to sign in.\n\nFile v1.1.0:_meta.json\n\n{\n  \"ownerId\": \"kn700jq4sjtf2anb0rk3ft4p7n856872\",\n  \"slug\": \"tock-mcp\",\n  \"version\": \"1.1.0\",\n  \"publishedAt\": 1789872757524\n}\n\nFile v1.1.0:skill-card.md\n\n## Description:\n\nDiscover restaurants on Tock (exploretock.com) via MCP -- list cities, search a metro, and get a venue's details plus its bookable experiences, prices, party sizes, and open dates/times.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[chrischall](https://clawhub.ai/user/chrischall)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal users, developers, and agents use this skill to discover Tock restaurants, inspect venue details and availability, and check signed-in account reservations or profile data when the required browser extension is running.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The MCP server and fetchproxy extension can read Tock pages visible in the user's signed-in browser, including profile and reservation information.\n\nMitigation: Install only after confirming that this account access is acceptable, and avoid sharing returned account data with untrusted parties.\n\nRisk: The skill is not intended to book, pay for, cancel, or modify Tock reservations.\n\nMitigation: Use it for discovery and verification only; complete booking, payment, and cancellation directly on Tock.\n\nRisk: A booking success screen alone may not prove that a reservation was confirmed.\n\nMitigation: Treat bookings as confirmed only after capturing a confirmation signal and verifying the reservation with the skill's verification workflow.\n\n## Reference(s):\n\n- [tock-mcp npm package](https://www.npmjs.com/package/tock-mcp)\n- [tock-mcp source repository](https://github.com/chrischall/tock-mcp)\n- [fetchproxy browser extension](https://github.com/chrischall/fetchproxy)\n\n## Skill Output:\n\n**Output Type(s):** [text, configuration, shell commands, guidance]\n\n**Output Format:** [Markdown guidance with JSON configuration and shell command examples; MCP tools return structured restaurant, availability, reservation, profile, verification, and health-check results.]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Read-only Tock helper; account-specific tools require a signed-in exploretock.com browser tab and the fetchproxy extension.]\n\n## Skill Version(s):\n\n1.1.0 (source: ClawHub release evidence)\n\n## Ethical Considerations:\n\nUsers 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.\n\nArchive v1.0.0: 3 files, 5607 bytes\n\nFiles: skill-card.md (2380b), SKILL.md (9038b), _meta.json (127b)\n\nFile v1.0.0:SKILL.md\n\n---\nname: tock-mcp\ndescription: Discover restaurants on Tock (exploretock.com) via MCP — list cities, search a metro, and get a venue's details plus its bookable experiences, prices, party sizes, and open dates/times. Triggers on phrases like \"search Tock for\", \"what's on Tock in Chicago\", \"find a Tock reservation at\", \"does Alinea have availability on Tock\", \"what experiences does <venue> offer on Tock\", or \"my Tock reservations\". Requires tock-mcp installed and the fetchproxy browser extension running in a signed-in exploretock.com tab.\n---\n\n# tock-mcp\n\nMCP server for Tock (exploretock.com) — restaurant discovery and availability. Every request is relayed through the user's signed-in browser tab via the [fetchproxy](https://github.com/chrischall/fetchproxy) extension, so there's no cookie paste, no bot-wall dance, and no password handling.\n\n- **npm:** [npmjs.com/package/tock-mcp](https://www.npmjs.com/package/tock-mcp)\n- **Source:** [github.com/chrischall/tock-mcp](https://github.com/chrischall/tock-mcp)\n\n> Tock does not publish an official consumer API, and exploretock.com sits behind a Cloudflare challenge. This server fetches the same server-rendered pages the Tock web app uses (parsing their embedded `window.$REDUX_STATE` store) through your own signed-in browser tab. It is **read-only**: Tock reservations are prepaid tickets, so booking is left to exploretock.com. Use at your own discretion.\n\n## Setup\n\nThe MCP server is half of the picture — the other half is the [fetchproxy](https://github.com/chrischall/fetchproxy) browser extension that talks to Tock from your signed-in tab. Both are required.\n\n### 1. Install the MCP server\n\nAdd to `.mcp.json` in your project or `~/.claude/mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"tock\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"tock-mcp\"]\n    }\n  }\n}\n```\n\nOr from source:\n\n```bash\ngit clone https://github.com/chrischall/tock-mcp\ncd tock-mcp\nnpm install && npm run build\n# then point .mcp.json at dist/bundle.js\n```\n\n### 2. Install the fetchproxy extension\n\ntock-mcp shares a single browser extension with every other fetchproxy-based MCP. Install it once from [github.com/chrischall/fetchproxy](https://github.com/chrischall/fetchproxy), then open **exploretock.com** and sign in (only needed for the account tools; discovery works signed-out).\n\n### 3. Approve the one-time pair code\n\nThe first tool call prints a pair code to approve in the Transporter extension popup (trust-on-first-use, per identity). Run `tock_healthcheck` to trigger it, approve the code, and you're paired for good.\n\n## Tools\n\n| Tool | What it does |\n| --- | --- |\n| `tock_list_metros` | List Tock cities/metros (name, slug, business count). Filter by name/country. |\n| `tock_search_restaurants` | List / search venues in a metro slug (cuisine, price, neighborhood, slug). |\n| `tock_get_restaurant` | Venue details + its bookable experiences (prices, party sizes). |\n| `tock_get_availability` | A venue's bookable calendar: experiences, prices, open dates/times. |\n| `tock_list_reservations` | The signed-in user's purchases / reservations (needs a signed-in tab). |\n| `tock_get_profile` | The signed-in user's profile (needs a signed-in tab). |\n| `tock_verify_reservation` | After a booking attempt, re-query the account and return `confirmed` / `cancelled` / `not_found` (needs a signed-in tab). Use this instead of eyeballing a success screen. |\n| `tock_healthcheck` | Round-trip the bridge; reports status + the pair code on first run. |\n\n## Response shape (`view`)\n\nTwo tools take `view: \"compact\" | \"full\"` — `tock_get_restaurant` and\n`tock_get_profile` — and **`compact` is the default**, so you get the slim\nrung without asking for it. The other six of this server's eight tools have no\n`view`; each for its own reason, below.\n\n**Compact here is media stripping, not a field projection.** `src/view.ts`\nholds no hand-written field list, because this repo has no captured Tock\npayload to derive one from honestly. What it does instead is subtractive: drop\nkeys whose value is a picture, plus **two named explicitly** —\n`profileImageUrl` and `heroImageUrl`.\n\nNaming those two is the load-bearing part, and it is worth knowing why. The\nshared rule anchors its media noun at the START of the key, which is what\nkeeps a flag like `hasThumbnail` alive — and it is also why `profileImageUrl`\n(starts `profile`) and `heroImageUrl` (starts `hero`) both slip past it. That\nwould leave only the fallback rule, which fires when a URL's path happens to\nend in an image extension. A signed or extension-less Tock CDN URL would then\nsurvive compact silently, with nothing in the response to say why. Naming the\nkeys removes the dependency on what a URL happens to look like.\n\nThose two are the only image fields any parsed shape in this server carries —\nthey live on `RestaurantDetails` and nowhere else — and **nothing is kept**:\nno tool here has a picture as its product, so no payload mixes decoration with\ncontent.\n\nExpect one specific non-effect: on **`tock_get_profile` compact provably\nremoves nothing.** The identity record is four fields (`firstName`,\n`lastName`, `email`, `id`), none of them a picture, so both rungs serialise to\nthe same bytes. The rung is declared there for consistency, not for savings.\n\n`view: \"full\"` returns the parsed record untouched. There is deliberately **no\n`raw` rung**: `full` already IS the record this server parsed out of Tock's\npage, so a third value would silently alias one that exists.\n\nWhy the other six have none:\n\n- **`tock_search_restaurants`** returns `RestaurantSummary`, which carries no\n  image key at all — the two image fields exist only on the *details* shape.\n  That is exactly why one of the two restaurant tools has a rung and the other\n  does not; it is not an omission.\n- **`tock_list_metros`** returns hand-built metro records (name, slug, state,\n  country, business count, coordinates). No picture, and no fatter upstream\n  shape behind them to project away from.\n- **`tock_get_availability`** returns an ASSEMBLED calendar — experiences,\n  `openDates`, `openTimes` — built by the parser from Tock's calendar slice,\n  not a pass-through payload. There is no single upstream object to hand back\n  or to slim.\n- **`tock_list_reservations`** returns hand-built reservation records (venue,\n  date/time, party size, experience, cancelled flag) with no media field.\n- **`tock_verify_reservation`** returns a VERDICT — `verdict`, `match`,\n  `searched`, `recheckAdvised`, `reportAs`, `summary`. The verdict is the\n  product, and there is nothing decorative in it to remove.\n- **`tock_healthcheck`** returns a bridge diagnostic, for the same reason.\n\nPassing `view` to one of those is not an error and will not fail: the tool\ndoes not declare it, so zod drops the unknown key and the call runs exactly as\nit would have. You get no warning, so a successful call is not evidence the\nrung was honoured.\n\n## Typical flow\n\n1. `tock_list_metros { query: \"chicago\" }` → find the metro slug.\n2. `tock_search_restaurants { metro: \"chicago\", query: \"tasting menu\" }` → get venue slugs.\n3. `tock_get_availability { slug: \"alinea\", date: \"2026-07-10\", party_size: 2 }` → see experiences and open dates/times.\n4. To book, open `exploretock.com/<slug>` — reservations are prepaid tickets and are completed on Tock.\n\n## Booking verification protocol\n\nBooking happens outside these tools (on exploretock.com, by hand or by UI\nautomation), but **verification is this server's job**. A booking counts as\n**confirmed** only when BOTH hold:\n\n1. a confirmation ID, receipt URL, or confirmation email was captured, **and**\n2. `tock_verify_reservation { venue, date, partySize, bookedMinutesAgo }` returns\n   verdict `confirmed`.\n\nUse `tock_verify_reservation` rather than reading `tock_list_reservations`\nyourself: it checks the canceled and past lists too (a created-then-voided\nbooking appears only in `canceled`), and it applies the lag rule below for you,\nreturning `recheckAdvised: true` when an absence is still inconclusive.\n\nAnything less — including a screenshot of a success screen — must be reported\nas **\"attempted, unverified.\"** Two Tock-specific traps make the stricter rule\nnon-negotiable:\n\n- The post-booking modal is not proof: a confirm submitted with a stale cart\n  is a silent no-op that still renders the success modal.\n- The reservations backend (`PatronReservationHistory`) lags the Reservations\n  tab by **minutes**. A single immediate re-read proving absence proves\n  nothing; re-query after a couple of minutes (and once more before giving a\n  verdict).\n\n## Notes\n\n- **Read-only.** No booking, cancelling, or payment — Tock reservations are prepaid/Turnstile-gated checkouts left to the site.\n- **Discovery needs no login.** Only `tock_list_reservations`, `tock_get_profile` and `tock_verify_reservation` require a signed-in exploretock.com tab.\n- Errors are actionable: a Cloudflare challenge asks you to clear it in the signed-in tab; a signed-out account tool asks you to sign in.\n\nFile v1.0.0:_meta.json\n\n{\n  \"ownerId\": \"kn700jq4sjtf2anb0rk3ft4p7n856872\",\n  \"slug\": \"tock-mcp\",\n  \"version\": \"1.0.0\",\n  \"publishedAt\": 1789816746209\n}\n\nFile v1.0.0:skill-card.md\n\n## Description:\n\nDiscover restaurants on Tock (exploretock.com) via MCP: list cities, search a metro, and get venue details, bookable experiences, prices, party sizes, and open dates/times.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[chrischall](https://clawhub.ai/user/chrischall)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal users and developers use this skill to discover Tock restaurants, inspect availability, and verify reservation status through a read-only MCP integration. Booking and payment remain on Tock's website.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The integration relies on the external tock-mcp package and fetchproxy extension with access to a signed-in Tock tab.\n\nMitigation: Install only from expected package and source links, review extension permissions, and approve pairing deliberately.\n\nRisk: Account tools can read the signed-in user's Tock profile and reservations.\n\nMitigation: Use account tools only when needed, limit sharing of returned account data, and keep booking and payment actions on Tock's website.\n\nRisk: Booking happens outside the skill, and a success screen alone may not prove a reservation was created.\n\nMitigation: Treat bookings as unverified until confirmation evidence is captured and tock_verify_reservation returns confirmed.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/chrischall/skills/tock-mcp)\n- [npm package: tock-mcp](https://www.npmjs.com/package/tock-mcp)\n- [Source repository: tock-mcp](https://github.com/chrischall/tock-mcp)\n- [fetchproxy browser extension](https://github.com/chrischall/fetchproxy)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, shell commands, configuration, guidance]\n\n**Output Format:** [Markdown with inline JSON and shell command snippets]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Runtime output depends on the external tock-mcp package, the fetchproxy extension, and, for account tools, a signed-in Tock browser tab.]\n\n## Skill Version(s):\n\n1.0.0 (source: server release metadata)\n\n## Ethical Considerations:\n\nUsers 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.","readmeExcerpt":"Skill: tock-mcp Owner: chrischall Summary: Discover restaurants on Tock (exploretock.com) via MCP — list cities, search a metro, and get a venue's details plus its bookable experiences, prices, party sizes, and open dates/times. Triggers on phrases like \"search Tock for\", \"what's on Tock in Chicago\", \"find a Tock reservation at\", \"does Alinea have availability on Tock\", \"what experiences does <venue> offer on Tock\", ","codeSnippets":[],"executableExamples":[{"language":"json","snippet":"{\n  \"mcpServers\": {\n    \"tock\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"tock-mcp\"]\n    }\n  }\n}"},{"language":"bash","snippet":"git clone https://github.com/chrischall/tock-mcp\ncd tock-mcp\nnpm install && npm run build\n# then point .mcp.json at dist/bundle.js"},{"language":"json","snippet":"{\n  \"mcpServers\": {\n    \"tock\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"tock-mcp\"]\n    }\n  }\n}"},{"language":"bash","snippet":"git clone https://github.com/chrischall/tock-mcp\ncd tock-mcp\nnpm install && npm run build\n# then point .mcp.json at dist/bundle.js"},{"language":"json","snippet":"{\n  \"mcpServers\": {\n    \"tock\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"tock-mcp\"]\n    }\n  }\n}"},{"language":"bash","snippet":"git clone https://github.com/chrischall/tock-mcp\ncd tock-mcp\nnpm install && npm run build\n# then point .mcp.json at dist/bundle.js"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: tock-mcp\ndescription: Discover restaurants on Tock (exploretock.com) via MCP — list cities, search a metro, and get a venue's details plus its bookable experiences, prices, party sizes, and open dates/times. Triggers on phrases like \"search Tock for\", \"what's on Tock in Chicago\", \"find a Tock reservation at\", \"does Alinea have availability on Tock\", \"what experiences does <venue> offer on Tock\", or \"my Tock reservations\". Requires tock-mcp installed and the ContextMint Bridge browser extension running in a signed-in exploretock.com tab.\n---\n\n# tock-mcp\n\nMCP server for Tock (exploretock.com) — restaurant discovery and availability. Every request is relayed through the user's signed-in browser tab via the [ContextMint Bridge](https://github.com/nullnet-app/contextmint-bridge/releases) browser extension, so there's no cookie paste, no bot-wall dance, and no password handling.\n\n- **npm:** [npmjs.com/package/tock-mcp](https://www.npmjs.com/package/tock-mcp)\n- **Source:** [github.com/chrischall/tock-mcp](https://github.com/chrischall/tock-mcp)\n\n> Tock does not publish an official consumer API, and exploretock.com sits behind a Cloudflare challenge. This server fetches the same server-rendered pages the Tock web app uses (parsing their embedded `window.$REDUX_STATE` store) through your own signed-in browser tab. It is **read-only**: Tock reservations are prepaid tickets, so booking is left to exploretock.com. Use at your own discretion.\n\n## Setup\n\nThe MCP server is half of the picture — the other half is the [ContextMint Bridge](https://github.com/nullnet-app/contextmint-bridge/releases) browser extension that talks to Tock from your signed-in tab. Both are required.\n\n### 1. Install the MCP server\n\nAdd to `.mcp.json` in your project or `~/.claude/mcp.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"tock\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"tock-mcp\"]\n    }\n  }\n}\n```\n\nOr from source:\n\n```bash\ngit clone https://github.com/chrischall/tock-mcp\ncd tock-mcp\nnpm install && npm run build\n# then point .mcp.json at dist/bundle.js\n```\n\n### 2. Install ContextMint Bridge\n\ntock-mcp shares a single browser extension, ContextMint Bridge, with every other fetchproxy-based MCP. Install it once from [its releases page](https://github.com/nullnet-app/contextmint-bridge/releases) — in Chrome, unzip the chrome zip and load it unpacked (`chrome://extensions` → Developer mode → Load unpacked); Safari isn't available yet, so use Chrome for now. ContextMint Bridge is the fetchproxy extension under its new name, same maintainer; its source is public at https://github.com/nullnet-app/contextmint-bridge — build it yourself or check a release zip against its published `.sha256` file. Then open **exploretock.com** and sign in (only needed for the account tools; discovery works signed-out).\n\n### 3. Approve the one-time pair code\n\nThe first tool call prints a pair code to approve in the ContextMint Bridge popup (trust-on-first-use, per identity). Run `tock_healthcheck` t"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn700jq4sjtf2anb0rk3ft4p7n856872\",\n  \"slug\": \"tock-mcp\",\n  \"version\": \"1.1.8\",\n  \"publishedAt\": 1791588608432\n}"},{"path":"skill-card.md","content":"## Description:\n\nHelps agents discover Tock restaurants, check experiences and availability, and inspect a signed-in user's reservations through a browser-connected MCP server.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[chrischall](https://clawhub.ai/user/chrischall)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nPeople and agents looking for Tock restaurants can compare venues, experiences, prices, party sizes, and available times. Signed-in users can inspect their reservations and verify a booking made on Tock.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The external MCP server and browser extension can access pages in a Tock tab.\n\nMitigation: Verify the npm package and ContextMint Bridge release or source before installing.\n\nRisk: Signed-in account tools can read Tock profile and reservation details.\n\nMitigation: Use signed-in mode only if you are comfortable sharing those details with the MCP flow; complete bookings and payments on Tock.\n\nRisk: A booking success screen or an immediate missing reservation can misstate booking status.\n\nMitigation: Require a receipt or confirmation ID and a confirmed reservation-check verdict; recheck when results are inconclusive.\n\n## Reference(s):\n\n- [ClawHub tock-mcp release](https://clawhub.ai/chrischall/skills/tock-mcp)\n- [tock-mcp npm package](https://www.npmjs.com/package/tock-mcp)\n- [ContextMint Bridge releases](https://github.com/nullnet-app/contextmint-bridge/releases)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Guidance]\n\n**Output Format:** [Text with structured venue, availability, and reservation details]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Booking confirmation requires a receipt or confirmation ID and a confirmed reservation-check verdict.]\n\n## Skill Version(s):\n\n1.1.8 (source: server-resolved release metadata)\n\n## Ethical Considerations:\n\nUsers 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."}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":null,"editorialQuality":{"score":100,"threshold":65,"status":"thin","wordCount":1252,"uniquenessScore":43,"reasons":["uniqueness-below-45"]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-10T00:08:36.305Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-10T00:08:36.305Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-10T07:42:01.923Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"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!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"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","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}