Skip to main content
Glama

Why luma-discovery

Luma hosts a large share of the tech, startup and community events in many cities, but there is no simple way to ask it "what's on near here this week?" from your own backend. Luma's documented API is for organizers managing their own calendars and needs Luma Plus. Assistant-side Luma connectors can't be called from your server.

luma-discovery does the same public discovery the lu.ma website does for signed-out visitors, then hands you tidy records: title, time and timezone, venue and coordinates, organizer, price, registration status and an aggregate guest count. People's identities never leave the library.

Discover here. Register on Luma. Every result carries the official event URL, so a person signs up there themselves.

Related MCP server: Luma Events MCP Server

Quick start

Requires Node 22.13+ (or any bundler that compiles TypeScript, such as Wrangler, Vite or esbuild). The package ships TypeScript source.

Try it in 30 seconds (no account, no key):

git clone https://github.com/mihirkavi/luma-discovery && cd luma-discovery
npm install
npx tsx scripts/nearby.ts 37.7749 -122.4194 3   # latitude, longitude, days ahead

Use it as a library:

npm install github:mihirkavi/luma-discovery
import { LumaDiscoveryClient } from 'luma-discovery';

const luma = new LumaDiscoveryClient();

const { events } = await luma.searchNearby({
  latitude: 37.3382,
  longitude: -121.8863,
  startsAfter: new Date(),
  startsBefore: new Date(Date.now() + 7 * 86_400_000),
});

const detail = await luma.getEvent(events[0].url); // plain-text description and categories

Use it from an AI agent (MCP)

npm run mcp   # stdio transport

Add it to Claude Code:

claude mcp add luma-discovery -- npx tsx /path/to/luma-discovery/src/mcp.ts

Tool

What it does

luma_search_nearby

Public events near a latitude/longitude, optionally between starts_after and starts_before, up to 300 results

luma_get_event

Public details for one event by evt-… id, lu.ma URL or slug

Both tools are annotated read-only. The server tells the model that event text is untrusted data and that it cannot register anyone.

The open event record

Every result uses the same small, provider-neutral shape as structured-event-feeds (ICS feeds, Meetup, Eventbrite), so you can mix sources or swap adapters without changing your code.

Field

Example

title, url, provider, providerEventId

"Meaningful Longevity", https://lu.ma/…, "luma", "evt-…"

startsAt, endsAt, timezone

ISO 8601 instants plus the event's IANA zone

venue

name, address, city, region, country, latitude, longitude

organizer

the hosting calendar's name and URL, or the listed host names for personal calendars

price

isFree, min/max in cents, currency

registration

open · sold_out · waitlist · approval_required · closed, spots remaining, official URL

attendeeCount

an aggregate number only, never identities

recurrence, categories, description

series info; categories and description come from getEvent

The full TypeScript types are in src/types.ts.

What it deliberately does not do

  • No registration, sign-in or account actions. Results link to the official event page.

  • No attendee data. Only the aggregate guest count survives normalization.

  • No keyword search. Luma's public discovery is geographic; filter results yourself.

Honest status

v0.1. Verified live on 26 October 2026 with a San Francisco search (the run in the screenshot above), and earlier on 13 October 2026 with Bay Area searches.

  • This is not an official Luma API. It reads the undocumented api.lu.ma JSON endpoints that power Luma's public website. They can change or disappear without notice. Luma's robots.txt does not disallow them.

  • Keep request volume modest and cache results. The client sends an identifying user agent and has a 10-second timeout.

  • Not published to npm yet; install from GitHub.

npm test           # unit tests with recorded-shape fixtures (no network)
npm run typecheck
npm run smoke      # live check against Luma (prints counts and titles only)
npx tsx scripts/nearby.ts [lat] [lng] [days]   # the demo shown above

Path

What it is

src/index.ts

LumaDiscoveryClient, normalization and attendee stripping

src/mcp.ts

The stdio MCP server

src/types.ts

The open event record types

scripts/

Live smoke check and the nearby demo

test/

Offline tests with recorded response shapes

CI runs the typecheck and tests on every push and pull request.

Part of Open Media Events

luma-discovery is one of the event sources behind Open Media Events, and it works perfectly well on its own.

License

Released under the MIT License.

Related MCP Connectors

Related MCP Servers

  • F
    license
    B
    quality
    D
    maintenance
    Provides access to event data from the Eventfinda API, allowing AI agents to search for events by location and retrieve detailed information including descriptions, dates, addresses, and ticket details.
    1
    4 npm
    -
  • A
    license
    A
    quality
    C
    maintenance
    Provides read-only tools for discovering, searching, and browsing events from Luma, Posh, and Partiful platforms, including event details and guest lists, with optional authenticated access to a user's Luma events.
    10
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI agents to search event calendars by keyword and list upcoming or date-filtered events from a chosen calendar, returning titles, dates, venues, coordinates, and keywords.
    349 npm
    MIT