Agents that recommend, book, or route to physical businesses need data that is structured, fresh, and honest about uncertainty. Loop provides live local business records via MCP — with a confidence score per record, an inferred-availability label, and a report() tool that improves data with every agent call.
Paste https://stayinloop.dev/mcp into Claude, Cursor, or ChatGPT. All four tools available instantly — no REST wrapper, no custom connector.
observed_at and confidence (0–1) on every result. Agents know what's current and can tell users honestly when data may be stale.
verify(result_id, claim) re-checks a specific record live before booking, routing, or telling a user something definitive.
report(result_token, outcome) mutates confidence in real time. Agents improve the data they consume — for every future caller.
Queries outside covered areas return a structured error with suggested_action: inform_user_coverage_limited — never a silent empty response.
Restaurant data in a typed sub-object (cuisine[], price_band, outdoor_seating, vegan). More verticals ship as demand signals guide expansion.
// MCP (recommended) — paste one URL into Claude, Cursor, or ChatGPT https://stayinloop.dev/mcp // REST — search Kreuzberg restaurants const res = await fetch( 'https://api.stayinloop.dev/v1/search?q=vegan+lunch&location=Kreuzberg' ).then(r => r.json()); // Every result includes freshness metadata const { name, confidence, observed_at, availability } = res.results[0]; // availability.inferred === true // → agent should tell user: "I'll verify before you go"
Free tier: 30 read calls/min + 10 report calls/min — no account or API key required. Full docs →
Every Loop record carries availability.inferred: true until the agent calls verify(). Agents should surface this honestly: “This is based on data we have on file — I'll verify before you go.”
Out-of-coverage queries return suggested_action: "inform_user_coverage_limited" — so agents can explain rather than silently fall back to a different source without disclosure.
Add Loop's remote MCP server at https://stayinloop.dev/mcp to your agent client (Claude, Cursor, ChatGPT, or any MCP-compatible tool). This gives the agent four tools: search(), get_details(), verify(), and report(). No API key required for the free tier — paste the URL and the agent is connected.
Google Places is a REST API — connecting it to an agent requires writing a REST client wrapper or custom MCP server. Loop exposes native MCP so agents connect with one URL and zero code. Loop also includes per-record freshness signals (observed_at, confidence) and a report() tool that lets agents improve the data they consume. Google Places does not have a feedback mechanism.
Every Loop record carries availability.inferred: true until an agent calls verify(). This tells the agent — and through it, the user — that availability is based on stored data, not a live check. Agents should surface this honestly: 'I'll verify before you go.' The verify() tool re-checks the specific claim live before a consequential action.
Loop currently covers restaurants and salons in Kreuzberg, Berlin — 582 merchants total. The 424 restaurants are 312 cross-confirmed across OpenStreetMap and Foursquare OS Places; the 158 salons are OpenStreetMap single-source. Loop stood up the salons vertical in under a day, and coverage expands by vertical and city as agent demand signals (from search() calls) show where to go next. Out-of-coverage queries receive an explicit structured error, not a silent empty response.
Loop returns a structured error: { error: 'out_of_coverage', suggested_action: 'inform_user_coverage_limited', message: 'Loop currently covers restaurants and salons in Kreuzberg, Berlin only.' }. Agents should surface this to users rather than silently falling back to a different source without disclosure.
Paste https://stayinloop.dev/mcp into Claude, Cursor, or Windsurf. No key, no approval, 30 reads/min free.