Restaurant finder
Skill clairem0/technically-curious-skills/travel/restaurant-finder
Find and book restaurant reservations. Discovers top-rated restaurants via Google Maps, checks availability in parallel via Firecrawl, and books via Chrome MCP. Use when the user says "find a restaurant", "book a reservation", "check availability", "find me a table", or mentions OpenTable/Resy/Tock.From its SKILL.md
npx -y skills add clairem0/technically-curious-skills --skill restaurant-finderAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
- 0 stars0 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
7.0 KB, ~1.6k tokens by cl100k_base, as published. Nobody here has run it
Restaurant Finder
Discover restaurants, scan availability fast, book interactively.
Config: Load
config.mdfor personal details (name, email, phone for booking forms). Platform reference: Seereferences/booking-platforms.mdfor per-platform form-filling notes and Chrome MCP extraction scripts.
Connectors
| Phase | Tool | Why |
|---|---|---|
| Discover restaurants | Rube (Google Maps) | Reliable ratings, location-aware |
| Scan availability | Firecrawl | Parallel across all date × restaurant combos |
| Scan availability (fallback) | Chrome MCP | When Firecrawl credits exhausted — sequential but free |
| Book | Chrome MCP | Interactive — click slots, handle seating, fill forms, confirm |
Workflow
Step 1: Gather Details
Parse from the user's message. Only ask if critical info is missing:
| Input | Required? | Default |
|---|---|---|
| Restaurant(s) OR location | Yes | — |
| Date(s) | Yes | — |
| Party size | Yes | 2 |
| Time | No | 6:00–8:00 PM window |
| Cuisine | No | Any |
| Special requests | No | None |
Two modes:
- Specific restaurants named → skip discovery, go straight to availability scan (Step 3)
- Location/vibe only → run discovery first (Step 2)
Step 2: Discover Restaurants (Skip if restaurants specified)
Use Rube to search Google Maps for top-rated restaurants near the location.
Search with: location, radius (~1 mile), type: restaurant, minimum rating 4.3, cuisine keyword if specified.
Two location anchors (from + to): Run both searches in parallel. Label results by anchor.
Present top 10 sorted by rating before proceeding:
Top-rated near [location]:
1. [Name] — [rating] [cuisine] [address]
2. ...
Which should I check for availability?
Fallback: If Google Maps isn't connected in Rube, use Firecrawl or Exa to search for restaurants, or Chrome MCP to search Google Maps manually.
Step 3: Scan Availability
Try Firecrawl first (fast, parallel). If credits exhausted, fall back to Chrome MCP (sequential but free).
Firecrawl Approach (Primary)
Fire all date × restaurant combinations in parallel — one scrape per combo, all in a single message.
Credit cost: Each scrape with
waitForcosts ~5 Firecrawl credits. A 2-restaurant × 3-date search = 30 credits.
OpenTable search URL (works as both platform detection and availability scan):
https://www.opentable.com/s?covers={party_size}&dateTime={YYYY-MM-DD}T{HH:MM}&term={restaurant_name}+{city}
If the restaurant appears in results → it's on OpenTable. If not → try Resy/Tock.
Use JSON extraction with a schema that captures restaurant name, available times, and booking URL. Set waitFor: 5000 for JavaScript rendering.
Resy — SPA, direct restaurant URLs are unreliable. Scrape city listing page (resy.com/cities/{city-code}) in markdown format with waitFor: 5000 and search for the restaurant name.
Tock — direct pages usually render: exploretock.com/{restaurant-slug}
If Firecrawl returns empty: Increase waitFor to 8000–10000ms, try markdown format, or fall back to Chrome MCP.
Chrome MCP Fallback
Sequential (one page at a time) but reliable and free. Navigate to each OpenTable search URL and extract availability with evaluate_script. See references/booking-platforms.md for the extraction script.
Step 4: Present Results
# Reservations for [Party Size]
## [Date range] around [Target Time]
### [Restaurant Name]
| Date | Available Times | Notes |
|------|----------------|-------|
| **Fri 4/3** | 6:15 PM, 6:30 PM, 6:45 PM | On target |
| **Sat 4/4** | 9:00 PM, 9:15 PM | Late only |
| **Sun 4/5** | No availability | Fully booked |
### Bottom line
[Quick recommendation — best match to what the user asked for]
Sort: near-target availability first, then late/early, then fully booked, then phone-only.
Step 5: Book via Chrome MCP
Once the user selects a restaurant + date + time:
- Navigate to the search results page (NOT direct restaurant URLs — some 404):
https://www.opentable.com/s?covers={n}&dateTime={date}T{time}&term={restaurant}+{city} - Click the target time slot via
evaluate_script - Handle seating options if they appear (bar, dining room, patio) — present choices and wait
- Fill personal details from
config.mdusing the React-aware value setter (seereferences/booking-platforms.md) - Opt out of marketing — uncheck email/SMS opt-ins
- Confirm before submitting — show restaurant, date, time, party size, seating type. Only proceed after explicit approval.
- Submit and capture confirmation number
Step 6: Save to Favorites (Optional)
After a successful booking, offer to save the restaurant for future trips.
Edge Cases
| Scenario | Response |
|---|---|
| No availability at target time | Check ±30 min, then ±1 hr. If still nothing, ask to expand. |
| Large parties (6+) | Most platforms cap at 6 online. Note to call directly. |
| Restaurant not on any platform | Include with phone: "Not on online booking — call [phone]." |
| Firecrawl credits exhausted | Switch to Chrome MCP fallback. Note it'll be slower. |
| Auth modal during booking | Ask user to log in manually in the browser, then retry. |
Do / Don't
Do:
- Fire all Firecrawl scrapes in parallel (one per date × restaurant combo)
- Use OpenTable search URLs — they double as platform detection AND availability scan
- Use
evaluate_scriptoverclick/fillfor Chrome MCP interactions - Book from the search results page (click time slot → booking flow)
- Take snapshots before and after form filling
- Uncheck marketing opt-ins
Don't:
- Construct direct Resy restaurant URLs (SPA — they 404)
- Navigate to
opentable.com/r/{slug}for booking (can 404 — use search page instead) - Submit without explicit confirmation
- Skip snapshot verification before submitting
Customization Notes
- Discovery method — Rube (Google Maps via Composio) or Firecrawl/Exa search. The key requirement is rated restaurant search within a radius.
- Booking platforms — The skill covers OpenTable, Resy, and Tock. Add platforms by extending the references file.
- Form fill details — Edit
config.mdwith your name, email, and phone for form autofill. - Browser tool — Chrome DevTools MCP is used for booking. The AI assistant Chrome profile should be logged into your booking platforms.