Travel planners that recommend restaurants from static training data get hours wrong, miss closures, and invent details. Loop gives your agent a live local business layer: search by cuisine and filters, verify hours before recommending, and report outcomes to improve future itineraries.
Find restaurants matching the traveler's preferences — natural language, typed filters
{ "name": "search", "arguments": { "query": "outdoor terrace, vegetarian options, dinner", "location": "Kreuzberg, Berlin", "filters": { "outdoor_seating": true, "vegetarian": true } } } // → typed results: // { // "result_id": "osm_node_12345678", // "name": "Café Kimchi", // "cuisine": ["korean", "fusion"], // "price_band": "€€", // "outdoor_seating": true, // "vegetarian": true, // "observed_at": "2026-06-12T...", // "confidence": 0.88, // "cross_source_confirmed": true, // "availability": { "inferred": true, "status": "likely_open_now" } // }
Fetch full record + result_token before verify or report
{ "name": "get_details", "arguments": { "result_id": "osm_node_12345678" } } // → same as search result plus: // { // "opening_hours": "Mo-Su 12:00-23:00", // "phone": "+49 30 ...", // "website": "https://...", // "result_token": "eyJhbGci..." // required for report() // }
Re-check live before committing to the recommendation
{ "name": "verify", "arguments": { "result_id": "osm_node_12345678", "claim": "open for dinner on Friday with outdoor seating" } } // → re-checked live: // { // "result_id": "osm_node_12345678", // "name": "Café Kimchi", // "claim": "open for dinner on Friday with outdoor seating", // "latest_observation": { // "type": "recheck", // "value": { // "present": true, // "opening_hours": "Mo-Su 12:00-23:00" // }, // "source": "osm_recheck", // "confidence": 0.85, // "observed_at": "2026-06-12T19:45:00Z" // }, // "record_confidence": 0.91, // "availability": { "inferred": true, "status": "likely_open_now" }, // "note": "Re-verified live against OSM — observed_at reflects this check." // }
Close the loop after the traveler visits — improves future itineraries
// result_token comes from get_details(), valid 30 minutes { "name": "report", "arguments": { "result_token": "eyJhbGci...", "outcome": "correct" } } // outcome: "correct" (data matched reality), // "booked" (reservation placed), // "closed" (was closed when traveler arrived), // "wrong" (hours, cuisine, or details were off), // "other"
Loop is the data and verification layer. It does not make reservations (that’s your booking tool), write trip prose (that’s your LLM), or rate restaurants (there are no star scores). What Loop gives agents is: a typed structured record for each restaurant, a confidence score derived from source completeness, a freshness timestamp from real observations, and a live re-check tool for the moment before committing.
Current coverage: restaurants and salons in Kreuzberg, Berlin. Out-of-coverage queries return an explicit structured error — never empty results or fabricated places.
One MCP endpoint. Four tools. Real-time local business data for AI agents. https://stayinloop.dev/mcp — free tier, no credit card.