@ainative/luma-mcp
v1.0.2
Published
AI-powered CRM and event management MCP with a native Luma connector — create, publish, and manage events, sync guest lists into your CRM pipeline, right from Claude or any MCP-compatible agent.
Maintainers
Keywords
Readme
luma-mcp — AI-Powered CRM Event MCP with a Luma Connector
A Model Context Protocol (MCP) server that gives any AI agent (Claude, Cursor, or your own agent-CRM stack) direct create/publish/manage control over Luma events and guest lists through the official Luma public API — no browser automation, no scraping. Built by AINative Studio as part of its AI-powered CRM tooling: connect an agent to your Luma calendar and let it create, update, publish, duplicate, and track events as part of an automated growth or event-ops workflow.
Keywords: MCP server, Luma MCP, Luma API integration, AI CRM connector, event management MCP, Model Context Protocol, agent event automation, Claude MCP tools, Luma events API, guest list automation.
Why use this
- Full event lifecycle — create, read, update, publish, unpublish, duplicate, and delete events, plus attendance stats and guest export, all from one MCP surface.
- AI-powered CRM benefit — plug this into an agent workflow (growth calendar publishing, event-ops assistants, CRM automation) and let the agent manage your Luma calendar directly instead of a human doing it by hand in the Luma dashboard.
- Talks to the real Luma public API (
https://api.lu.ma/public/v1), the same endpoints and payload shapes proven correct in AINative's own Next.js website client — not a reverse-engineered or unofficial integration.
Install
Published on npm as @ainative/luma-mcp — no local clone required:
{
"mcpServers": {
"luma": {
"command": "npx",
"args": ["-y", "@ainative/luma-mcp"],
"env": { "LUMA_API_KEY": "your_luma_api_key_here" }
}
}
}Or run from this repo directly:
cd packages/mcps/luma-mcp
npm install{
"mcpServers": {
"luma": {
"command": "node",
"args": ["/absolute/path/to/packages/mcps/luma-mcp/index.js"],
"env": { "LUMA_API_KEY": "your_luma_api_key_here" }
}
}
}Required env var
| Var | Description |
|---|---|
| LUMA_API_KEY | Your Luma API key (from Luma calendar settings → API). Server exits at startup if unset. |
Tools
| Tool | Luma endpoint | Description |
|---|---|---|
| luma_create_event | POST /event/create | Create a new event. |
| luma_get_event | GET /event/get | Get event details by ID or slug. |
| luma_update_event | PATCH /event/update | Partially update an existing event (only send changed fields). |
| luma_publish_event | POST /event/publish | Publish an event — makes it publicly visible. |
| luma_unpublish_event | POST /event/unpublish | Unpublish an event — hides it without deleting. |
| luma_duplicate_event | POST /event/duplicate | Duplicate an event with a new start/end time. |
| luma_delete_event | DELETE /event/delete | Permanently delete an event. Irreversible. |
| luma_get_event_attendance | GET /event/get-attendance | Attendance stats: total guests, checked in, approved, pending, declined. |
| luma_list_guests | GET /event/get-guests | List guests for an event (first page, up to 100). |
| luma_export_guests | GET /event/get-guests (paginated) | Export the full guest list across all pages. |
| luma_list_events | GET /calendar/list-events (paginated) | List calendar events (upcoming and/or past), across all pages. |
| luma_get_guest_count | GET /event/get-guests (aggregated) | Total guest count for one event, or summed across every event on the calendar. |
| luma_search_guests | GET /event/get-guests (client-side filter) | Filter an event's guests by name/email, approval status, or check-in state. |
Guest-CRUD tools (luma_add_guest, luma_update_guest, luma_delete_guest)
are not yet implemented — tracked separately as lower priority (core#7874).
Known gotchas
These are proven, previously-hit issues (see
AINative-website-nextjs/LUMA_INVESTIGATION_SUMMARY.md) that this server's
implementation already accounts for:
- Base path is
/public/v1, not/v1.https://api.lu.ma/v1/...404s. - Rate limits are per-calendar: GET 500 req/5min, POST 100 req/5min. Exceeding returns HTTP 429.
- A separate, undocumented "import limit" can return HTTP 400 with
{ code: "over-luma-point-limit" }. This is an account-level bulk-import quota, independent of the rate limits above — not something this server can detect or avoid, only surface (the error message passes through as-is). - Guest payloads must be arrays.
/event/add-guestsrequires aguestsarray, not flat top-level fields — relevant once the guest-CRUD tools are added.
Development
node --check index.js # syntax check (no test framework in this package)
node test-smoke.js # smoke test: stubs the MCP SDK + axios, exercises every tool
LUMA_API_KEY=<key> node test-live-e2e.js # live E2E: real MCP protocol + real Luma API (read-only, needs a real key)This package has no unit test suite (consistent with the other Node MCP
servers under packages/mcps/). Correctness was verified by mirroring the
exact request shapes from AINative-website-nextjs/services/luma/endpoints/events.ts
(the proven-correct source of truth) and test-smoke.js, a committed smoke
harness that stubs the MCP SDK and axios via Module._load, loads the real
index.js, and asserts the full 13-tool list plus request method/path/params
for every read tool.
test-live-e2e.js is the real thing: it spawns the actual server process
and speaks real MCP protocol to it (initialize → tools/list →
tools/call), then makes genuine read-only calls (luma_list_events,
luma_get_event) against the live Luma API. Run it whenever verifying a
deploy — it needs a real LUMA_API_KEY and network access, so it isn't run
in CI. Confirmed passing (8/8) against production, 2026-09-25 — all 13
tools registered and callable, real event data returned.
Refs #3088, #7874, #7878, #7883
