Discover events from Luma β search by category, city, distance, and keywords with calendar export
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
π‘ Paste into ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows)
A FastMCP server that discovers events from Luma β combining the Discover feed and subscribed calendars β with distance filtering and ICS export. No API key required for basic discovery.
Luma's Discover API has two endpoints that behave very differently:
This MCP uses both via two search modes:
city param) β searches your preferred categories via the Category API. Deep, rich results filtered by address and distance.city) β fetches the curated top events for that city via the Place API.On first run, the server returns popular events near you (geo-biased by IP), then walks you through setting up categories, address, and login for progressively richer results.
| Tool | What it does |
|---|---|
search_events | Home mode: search by category with address/distance filtering. Travel mode: curated events for a specific city. |
set_preferences | Save default categories (list), address, and max distance. Persists in SQLite across restarts. |
get_event | Fetch full details for a single event by API id or lu.ma URL. |
export_event_ics | Generate an ICS string for any event β paste into Apple Calendar, Google Calendar, Outlook, etc. |
To access events from calendars you follow on Luma, install the optional auth dependencies:
On first use, the raw Discover feed returns hundreds of popular events near you (geo-biased by IP). The server then walks you through setup one prompt at a time to narrow results:
Each prompt appears after returning results, so you see events immediately. After you configure a preference, the search reruns automatically and the next prompt appears. You can respond "not now" (prompt reappears next time) or "never" (permanently dismissed).
Use set_preferences to save defaults that persist across restarts:
Subscribed calendars require a Luma session cookie. The server handles this automatically via an inline login flow.
How it works:
search_events with login=true. A Chromium browser opens to lu.ma/signin; log in normally. The session cookie is stored in the local SQLite DB.search_events with skip_login_days=N to defer (0 = ask next time, -1 = never).The server maintains a local SQLite database (~/.luma-mcp/events.db by default) that records the first time each event is seen. This enables two filters on search_events:
added_within_days β only return events first seen within the last N days.new_only β only return events that have never been seen before.Every result also includes first_seen_at (ISO timestamp) and is_new (boolean).
Add to your Cursor MCP settings (.cursor/mcp.json):
| Source | Auth | Coverage |
|---|---|---|
Discover (api.lu.ma) | None required | Public events by city and category β same feed as luma.com/discover |
Subscribed calendars (api.lu.ma) | Browser login (auto-managed) | Events from calendars you follow on Luma |
Without logging in, the server still works β Discover is fully available with no authentication.
Set a home address via set_preferences(address="...") with max_distance_miles. In home mode, events beyond the radius are excluded. Events without location data are included by default (with distance_miles: null). In travel mode, distance filtering uses the city center at 25 miles automatically.
Geocoding uses Nominatim (free, OpenStreetMap) by default. For higher volume, set GEOCODING_PROVIDER=google or mapbox with the corresponding GEOCODING_API_KEY in your environment.
Event times (start_at, end_at) are returned in the user's system timezone. The timezone field from Luma is included in every result for reference.
get_event returns the RSVP URL; there's no headless registration path. Use export_event_ics to add events to your calendar.api.lu.ma), which can change without notice. Breakage is isolated to luma_web_client.py.Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/luma-events)<a href="https://allmcps.com/mcp/luma-events"><img src="https://allmcps.com/api/badge/luma-events?style=directory" alt="Luma Events on AllMCPs" /></a>