luma
luma.
Luma — events of the calendar (read only).
setup & usage
⚠ a Luma API key (Luma Plus)
create a key in Luma, on the calendar or on the organization (Settings → Developer → API keys), then paste it into oto. Reference: Luma API.
calendar_id (cal-…, listed by luma_calendar(op="org_calendars")), and the org_* operations only work with it▸ events and their guests
luma_events(after="<now, ISO 8601>"); the description is only in op="get"luma_events(op="resolve", url="https://lu.ma/…") gives the evt-… idluma_guests(event_id="evt-…", status="approved"); "who checked in" → sort_column="checked_in_at"; one person's answers and payment → op="get", guest="<email>"luma_calendar(op="places", query="…") for the place, then luma_event_admin(op="create", fields={"name": …, "start_at": …, "timezone": "Europe/Paris", "geo_address_json": {"type": "google", "place_id": …}})luma_guest_admin(event_id=…, op="set_status", guest="<email>", status="approved") (dry-run first) — Luma emails the guest unless send_email=falseluma_guest_admin(op="add", guests=[{"email": …, "name": …}]); "invite them" → op="invite" (dry-run first)luma_act(op="send_blast", event_id=…, content_md="…") (dry-run first); luma_blasts reads, changes or cancels the blastsluma_contacts(op="list", sort_column="event_checked_in_count", sort_direction="desc"); segment with tags (op="tag")luma_tickets(op="create_coupon", event_id=…, code="EARLY", discount={"discount_type": "percent", "percent_off": 20})· what reaches people outside your organization
nine gestures are dry-run by default and need dry_run=false to happen: luma_guest_admin(op="invite") and op="set_status", luma_act(op="send_blast"), luma_event_admin(op="cancel") and op="add_host", luma_calendar(op="add_admins"), luma_webhooks(op="create"), luma_memberships(op="set_status") and op="add".
should_refund explicitlysend_email=false; should_refund refunds a paid guest moved out of "going"skip_paymentluma_guests· what can mislead
include_viewed=true), with the location reduced to the city and host-only fields missing2026-11-04T18:30:00.000Z); the event's timezone is separate. Durations are ISO 8601 too (PT2H)remove and block on a contact are different: removed people may follow the calendar again, blocked ones cannot join its events⚙ multiple comptes
this connector accepts multiple comptes: each stored credential becomes a named account (one name per compte), at your level, your team's or your org's.
_account="<name>" on the tool; list them: oto_identity(op='list', connector='luma') (scope='org' or scope='group' for the org's or team's)oto_identity(op='set', connector='luma', identity_id='<name>'); rename: op='rename' with new_name_account) and adding upoutils
chargement…
utilisation
claude code — installe le plugin oto —
claude plugin marketplace add otomata-tech/oto-plugin — mcp + skill configurés.cli —
pipx install oto-cli puis oto luma …