How to Connect FindLocal to Claude, Cursor, and Other AI Assistants (MCP)

Reference: the up-to-date endpoint, parameter and field tables now live at /mcp. This post is the walkthrough.

Update: there are no shared demo keys anymore. Authorize with your own API key from /pricing — the same key works for the MCP server and the JSON API, and there’s a free tier.

Find Local runs a remote MCP server. MCP (Model Context Protocol) is the open standard AI assistants use to call outside tools, so once it’s connected you can ask Claude or Cursor things like “what’s free in Brooklyn this weekend?” or “any jazz near Cambridge tonight?” and it will answer from the same curated venue calendars the website uses, with links back to each event.

The server lives at:

https://mcp.findlocal.community/mcp

It’s read-only, uses the Streamable HTTP transport (an /sse endpoint exists for older clients), and authorizes with OAuth plus a short account key step described below. If you’d rather query the data directly from code, see the Events API guide.

1. Add the server to your client

Claude.ai (web and desktop)

  1. Open Settings → Connectors.
  2. Choose Add custom connector.
  3. Paste https://mcp.findlocal.community/mcp and save.
  4. Click Connect. A small FindLocal authorization page opens — see the account key step below.
  5. In a new chat, make sure the FindLocal connector is toggled on, then ask about events.

Claude Code (terminal)

claude mcp add --transport http findlocal https://mcp.findlocal.community/mcp

Start a session and the first FindLocal tool call will open the authorization page in your browser.

Cursor

Add the server to ~/.cursor/mcp.json (or your project’s .cursor/mcp.json) and restart Cursor:

{
  "mcpServers": {
    "findlocal": {
      "url": "https://mcp.findlocal.community/mcp"
    }
  }
}

Any other MCP client

Any client that supports remote servers over Streamable HTTP with OAuth works — point it at the URL above. To poke at the tools without a chat client, use the MCP Inspector:

npx @modelcontextprotocol/inspector
# transport: Streamable HTTP, URL: https://mcp.findlocal.community/mcp

2. Authorize with your API key

When your client connects, FindLocal shows a one-field consent page asking for your API key. Usage is metered against your account’s monthly quota so we can keep the service healthy.

Once authorized you won’t be asked again for that client. You can check where you stand any time by asking the assistant to run get_usage, which reports the account’s calls used and remaining for the current month. When a quota is exhausted, tool calls return a clear “monthly quota reached” message rather than partial data.

3. Ask questions

Some prompts that work well:

Every event the assistant gets back includes a url to its page on findlocal.community, plus ticket and venue links when the venue publishes them, so you can jump straight from the chat to buying a ticket.

The tools

These are the tools the server exposes. Your assistant picks the right one automatically; the list is here so you know what’s possible and how to phrase requests.

Tool What it does Inputs
search_events The main one. Upcoming events in a city, filtered every way the site can filter. Returns { city, total_matched, returned, events }. city (required; name or slug), region, when (anytime, today, tomorrow, weekend, this_weekend, week), date_from / date_to (YYYY-MM-DD), category (a slug or a genre word like jazz), free_only, price_max (city’s local currency), time_of_day (morning, afternoon, evening), query (free text over titles, venues and performers), performer (performer/author names only), authors_only, series_id (every date of one series), collapse (default true: a daily or near-daily programme comes back once, collapsed, with series_first / series_last; false = one row per date), sort (date or featured), limit (1–200, default 50)
get_event Full detail for one event, including its description. Past and delisted events still come back, flagged expired / delisted; a cross-venue duplicate also carries duplicate_of, the id of the event we kept. id
list_venues Active venues in a city or region with address, coordinates, type, size / capacity, and upcoming counts. city (required), region, limit (≤500)
get_venue One venue by id, or a fuzzy name search returning up to 5 matches. id, or name (+ optional city)
list_categories The category slugs search_events accepts, with the number of upcoming events in each for a city. city (required)
get_events_at_venue Upcoming events at one venue. venue_id, limit (≤100, default 20)
get_usage Your plan and the account’s calls used and remaining this month. Free. none
get_api_docs The REST API reference by topic, for when you’re building an integration. Free. topic
get_setup_guide A ready-to-run snippet (curl, JavaScript, Python, Claude Code, Cursor, Claude Desktop, or the Free-plan attribution link). Free. target

Categories are music, comedy, theater, dance, art, food_drink, family, market, workshop, fitness, nightlife, community, festival, parks, literary, film, and talks. Cities can be given by name (“New York”) or slug (“new-york”); the full list of metros (US and UK) is in llms.txt.

An event in a tool result looks like:

{
  "id": "8f9b9068-4e11-466b-a1cc-d36230d28fdd",
  "title": "Hooley Hour",
  "date": "2026-09-04",
  "start_time": "17:00:00",
  "city": "Boston",
  "region": "Cambridge",
  "venue": { "id": "b7716a13-…", "name": "The Lilypad", "address": "1353 Cambridge St, Cambridge, MA 02139" },
  "category": "music",
  "category_tags": ["Theater", "Music"],
  "performers": [{ "name": "The Hooley Band", "role": "headliner" }],
  "price_label": "Free",
  "price_usd": 0,
  "price_amount": 0,
  "currency": "USD",
  "is_free": true,
  "recurring": true,
  "upcoming_dates_in_series": 4,
  "series_id": "s_3f0c9a1d2b7e4c55",
  "details_url": "https://www.lilypadinman.com/home/2026/hooley-hour-bs5y2-pl4db9",
  "image": "https://images.squarespace-cdn.com/…/1000016764.jpg",
  "website": "https://www.lilypadinman.com/",
  "url": "https://findlocal.community/event/8f9b9068-4e11-466b-a1cc-d36230d28fdd",
  "source": "scraper_local"
}

Fields that are empty for an event are simply omitted. date is the venue’s local calendar day; price_label is the venue’s own wording and price_amount our parsed number in the metro’s currency (GBP for London; price_usd repeats it for US metros only); is_free is set when we can tell either way. A multi-day run stored as one event (an exhibition or festival) has end_date, its last day; organizer names who puts the event on when that isn’t the venue; series_id is shared by every date of one series and can be passed back to search_events.

Good to know

What’s next

← All posts