Loop
How it worksThe loopWhy LoopPricingDocs
use case agent integration

Local business search
built for AI agents.

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.

what loop gives your agent
🔌

Native MCP — zero code

Paste https://stayinloop.dev/mcp into Claude, Cursor, or ChatGPT. All four tools available instantly — no REST wrapper, no custom connector.

🕐

Freshness per record

observed_at and confidence (0–1) on every result. Agents know what's current and can tell users honestly when data may be stale.

Live verify before acting

verify(result_id, claim) re-checks a specific record live before booking, routing, or telling a user something definitive.

📊

Feedback loop via report()

report(result_token, outcome) mutates confidence in real time. Agents improve the data they consume — for every future caller.

🚧

Explicit out-of-coverage errors

Queries outside covered areas return a structured error with suggested_action: inform_user_coverage_limited — never a silent empty response.

📋

Vertical-typed schema

Restaurant data in a typed sub-object (cuisine[], price_band, outdoor_seating, vegan). More verticals ship as demand signals guide expansion.

connect in seconds
search
// 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 →

the honesty model

Structured uncertainty, not silent failure

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.

How do I connect an AI agent to local business data?

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.

What is the difference between Loop and Google Places for agents?

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.

How does Loop handle uncertainty in local business data?

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.

What verticals and cities does Loop cover?

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.

What happens when an agent queries a city Loop does not cover yet?

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.

Add local business search to your agent

Paste https://stayinloop.dev/mcp into Claude, Cursor, or Windsurf. No key, no approval, 30 reads/min free.