Developers
Luau for AI assistants.
Luau exposes what it does best to any agent that speaks MCP: plan the hangout, invite the people, track who's coming, and know who's free. Works with Meta Muse, ChatGPT, and any Model Context Protocol client. Not a developer? The plain-English version is at luau.co/muse.
Connect in one message (Muse)
In Muse, paste the prompt below. Muse builds the bridge, walks you through signing in to Luau, and saves the connection as a skill.
Build a custom integration to Luau. Its MCP server is https://app.luau.co/api/mcp (streamable HTTP; OAuth 2.1 authorization code with PKCE S256 — discovery at https://app.luau.co/.well-known/oauth-authorization-server). Use a static public client: client ID kai-muse-connector, no client secret, token endpoint auth method none; do not use dynamic client registration. Request scopes events.read events.write social.read social.write invites.write rsvp.write. I want you to be able to see my events and guest lists, create events and Hangvites, invite friends, remind people who haven't RSVP'd, RSVP for me, manage sign-up sheets, and tell me who's free. Test it, then save it as a skill.
When Muse's “Add custom connector” sheet asks for a Client ID, enter kai-muse-connector. If you weren't already signed in to Luau, the first attempt can end with “Something went wrong” after you approve; tap Add again and it completes.
Things to ask once connected
- Plan my daughter's 8th birthday at the park Saturday at 2, invite her class, and make a sign-up sheet for snacks.
- Who hasn't RSVP'd to the birthday party? Remind them.
- When was the last time I hung out with Justin?
- When did Cassie, Devyn, Justin and I last hang out as a group?
- Which of my close friends have I not seen in a while?
- I want to watch the game today — who's free? Send a Hangvite.
- Who's in for the Hangvite I sent this morning?
- What's on my calendar with friends this month?
- RSVP yes to Sarah's party with a plus-one.
- RSVP yes to the block party for me and the kids. Is Devyn's family coming?
- Hide the guest list for the shower and let guests share the invite.
- What's the Packers schedule? Move Saturday's game to 3pm.
- RSVP me to every fish fry except the ones that clash with my calendar.
- What did I do with friends last month? Who actually showed up to the party?
- Log that I had dinner with Cassie and her mom last night.
- Find an evening next week that works for Cassie, Devyn and Justin.
- Make Sarah a co-host of the block party. Cancel Saturday's dinner.
- Sign Maria up for the 9am check-in shift, and send me the volunteer list.
- Remind me to see Justin twice a month. Mom's birthday is Nov 3 — what should I plan?
- Who are my ten closest friends? Do Cassie and Devyn know each other? Make a crew called Game Night with Justin and Mark.
Endpoints
- MCP server
https://app.luau.co/api/mcp(streamable HTTP; POST JSON-RPC)- Server card
https://app.luau.co/.well-known/mcp/server-card.json- Authorization server
https://app.luau.co/.well-known/oauth-authorization-server- Protected resource
https://app.luau.co/api/mcp/.well-known/oauth-protected-resource
Auth is OAuth 2.1 authorization code with PKCE (S256) and RFC 7591 dynamic client registration. Clients that don't register dynamically can use a static public client ID instead: no secret, token endpoint auth method none, PKCE required. Calling a protected tool without a token returns HTTP 401 with a WWW-Authenticate header that points at the protected-resource metadata; expired tokens say so; a missing scope returns 403 naming the scope; more than 60 tool calls a minute returns 429 with Retry-After. preview_event works without an account so anyone can plan before they sign up.
Scopes
events.read— See your events, guest lists, and RSVPsevents.write— Create and update events and Hangvites on your accountsocial.read— See your friends on Luau, when you last hung out, and who might be freesocial.write— Set your social goals and important dates (your own profile only)invites.write— Invite guests and send reminders on your behalfrsvp.write— RSVP to events and Hangvites for you
Ask for a subset with the standard scope parameter; the consent screen lists exactly what was requested.
Tools
| Tool | Scope | What it does |
|---|---|---|
preview_eventread-only | none | Draft an event and show the user a preview (no account needed). |
create_event | events.write | Create the previewed event on the user's account. |
create_event_series | events.write | Create a recurring or explicit series of events. |
list_my_eventsread-only | events.read | Upcoming events the user hosts, attends, or was invited to. |
get_eventread-only | events.read | One event with its guest list and who hasn't responded. |
get_event_by_urlread-only | none | Resolve a pasted Luau link to its event or series. |
list_my_seriesread-only | events.read | Event series the user hosts or belongs to, with the next occurrence. |
get_seriesread-only | events.read | One series: full schedule, members, settings. |
update_series | events.write | Change a series' details or settings (pushed to upcoming occurrences). |
add_series_events | events.write | Add occurrences to a series. |
cancel_series_event | events.write | Cancel one occurrence (guests notified). |
reschedule_series_event | events.write | Move one occurrence to a new date (guests notified). |
rsvp_to_series | rsvp.write | RSVP the user to every upcoming occurrence at once. |
invite_to_seriessends | invites.write | Invite friends to a whole series (sends invites). |
cancel_series | events.write | Cancel every upcoming occurrence of a series (guests notified). |
find_peopleread-only | social.read | Find friends in the user's Luau circle by name. |
last_hangout_withread-only | social.read | When the user last hung out with someone, and their rhythm. |
friends_to_reconnectread-only | social.read | Close friends the user is overdue to see. |
who_is_freeread-only | social.read | Who is free now, today, or on a date. |
group_historyread-only | social.read | When a group of friends and the user were last all together, and how often. |
find_timeread-only | social.read | Best windows over the next days for a named group of friends. |
get_my_profileread-only | social.read | What Luau knows about the user for planning: interests, household, upcoming dates, goals, prefs. |
get_social_goalsread-only | social.read | The user's social goals with progress. |
set_social_goal | social.write | Set a social goal (preset, custom, or "see X twice a month"). |
add_important_date | social.write | Add a birthday / anniversary / date for Kai to plan around. |
list_planning_opportunitiesread-only | social.read | What Kai's planner has queued to nudge the user about. |
my_circleread-only | social.read | The user's closest people, ranked, with last-seen and upcoming-together. |
mutual_friendsread-only | social.read | Whether named friends know each other, and who knows all of them. |
list_crewsread-only | social.read | The user's Hangvite crews and members. |
create_crew | social.write | Create a named crew (optionally with members). |
update_crew | social.write | Rename / add / remove members / make default / delete a crew. |
crew_invite_linkread-only | social.read | A join link + text for inviting someone to a crew (nothing sent). |
log_moment | events.write | Log a hangout that wasn't on Luau (counts toward closeness). |
mark_attendance | events.write | Host corrects who came / no-showed on a past event. |
create_hangvitesends | events.write | Send a same-day "who's in?" Hangvite (sends invites). |
get_hangvite_statusread-only | events.read | Who's in, out, or silent on a Hangvite. |
invite_to_hangvitesends | events.write | Invite more people to a live Hangvite (sends invites). |
respond_to_hangvite | rsvp.write | Accept or pass on a Hangvite the user received. |
invite_guestssends | invites.write | Invite people to an event by name, phone, or email (sends invites). |
remind_non_responderssends | invites.write | Remind invited guests who haven't RSVP'd (sends reminders). |
uninvite_guestsends | invites.write | Remove a guest from an event; preview first, then confirm (sends them a notice). |
cancel_event | events.write | Cancel a standalone event the user hosts (guests notified). |
add_co_hostsends | invites.write | Make a friend a co-host (sends them a notice), or mint an invite link for someone not on Luau. |
remove_co_host | events.write | Remove a co-host (nothing sent). |
rsvp | rsvp.write | RSVP to an event as the user. |
update_event | events.write | Change an event's details. |
create_signups_sheet | events.write | Add a sign-up sheet (roles, shifts, supplies, zones). |
get_signups_boardread-only | events.read | The sign-up board: what's filled, what's still needed. |
claim_signup | rsvp.write | Sign the user up for a role or supply. |
share_needread-only | events.read | A ready-to-send ask for one need or the whole board. |
assign_signupsends | invites.write | Host puts a person on a need/shift (sends them a note; holds a spot for non-mutuals). |
update_signups_sheet | events.write | Host edits a published sheet: needs, shifts, zones, cap. |
get_signups_rosterread-only | events.read | Host roster of who signed up, with a CSV link. |
upload_event_image | events.write | Upload an image (base64) to use as an invite image. |
set_event_image | events.write | Set or replace an event's invite image from a URL or bytes. |
Tools marked sends message other people (invites, reminders) and are annotated so your assistant asks you before running them.
Images
Every event gets an invite image. If you do nothing, Luau picks one from the draft's image_search_keywords and preview_event shows it before you commit. If the user made or chose an image, there are two ways to bring it in:
upload_event_image— base64 in the tool call (up to about 3 MB decoded), returns animage_urlto put on the draft or pass toset_event_image.POST https://app.luau.co/api/mcp/upload— multipartfilewith the same bearer token, for larger files from a shell (up to 4 MB). Same response.
A public https image_url is also accepted on drafts and by set_event_image; Luau checks it is a real image and re-hosts it. A URL that fails the check never blocks the event — the automatic image is used and the result says so. Uploads are moderated. Event results include the final image_url and an inline image so you can show the invite.
Access requirements
- A free Luau account (phone sign-in). United States.
- Everything a tool returns is the connected user's own data: their events, their guest lists, their friends on Luau. Nothing about anyone else's graph is exposed.
- “Who's free” uses a friend's Google Calendar only when that friend opted into calendar matching, and only as free/busy, never event details.
- Rate limits are fair use; sustained abuse gets HTTP 429.
Support
Questions or a connector review to coordinate: support@luau.co. Policies: privacy · terms.