Claude & AI Assistants
Connect Claude, ChatGPT, and other AI assistants to EventMoot so they can plan, schedule, and manage events on your behalf.
Overview
EventMoot ships a public REST API and a Model Context Protocol server so AI assistants — Claude, ChatGPT, Copilot, and anything else that speaks MCP — can manage your events, polls, groups, and schedules as a full alternative to the web UI.
Instead of clicking through the dashboard, you can say things like:
"Schedule a campaign session for next weekend and let the party vote on times." "Is anyone in the Thursday Night group free for a one-shot this Friday?" "Finalize the D&D session for this weekend and pick the time with the most yeses."
The assistant authenticates with an API key you mint in your EventMoot settings, and operates strictly as you — it can only see and change things you already have access to.
What you need
- An EventMoot account (any tier)
- An AI assistant that speaks MCP — Claude Desktop, Claude Code, or anything else on this list
- Two minutes to copy a key and edit a config file
Step 1 — Create an API key
Head to Settings → API Keys (or click here) and click Create new key:
- Give it a descriptive name — "My Claude Desktop", "Home Mac", "Work Laptop". You'll see this name in the key list so you know which one to revoke if a device gets lost.
- Leave the default read + write scopes unless you specifically want a read-only key for a shared device.
- Optionally set an expiration date. Unexpired keys stay valid until you revoke them.
- Click Create.
The full key appears exactly once in the format em_live_.... Copy it immediately — the UI will only ever show the first 16 characters again.
Your key inherits your subscription tier's rate limits and feature access. Revoke or rotate at any time from the same page.
Step 2 — Wire it up with your AI assistant
Claude Desktop
Open your claude_desktop_config.json:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json - Linux:
~/.config/Claude/claude_desktop_config.json
Add an eventmoot entry under mcpServers:
{
"mcpServers": {
"eventmoot": {
"command": "npx",
"args": ["-y", "@eventmoot/mcp-server"],
"env": {
"EVENTMOOT_API_KEY": "em_live_your_key_here",
"EVENTMOOT_API_URL": "https://eventmoot.com"
}
}
}
}
Save the file, then fully quit and relaunch Claude Desktop (not just close the window). When you open a new conversation, you should see a hammer icon indicating MCP tools are available. Ask "What can you do with EventMoot?" and Claude will list the tools.
Claude Code
From any terminal:
claude mcp add eventmoot npx @eventmoot/mcp-server -e EVENTMOOT_API_KEY=em_live_your_key_here -e EVENTMOOT_API_URL=https://eventmoot.com
The server is now registered globally. In any Claude Code session, ask it about your events and it will call the EventMoot tools automatically.
Other MCP clients
Any MCP-compatible client works — the two environment variables (EVENTMOOT_API_KEY and EVENTMOOT_API_URL) are the only configuration. Point the client at npx -y @eventmoot/mcp-server and you're done.
What Claude can do
The MCP server exposes 32 tools grouped by area:
Events
| Tool | What it does |
|---|---|
list_events | List your events, filter by status (DRAFT / PUBLISHED / FINALIZED / CANCELLED) or role (organizer, invited, responded) |
create_event | Create a new event with a title, description, location, and optional polls |
get_event | Full event details by slug, including attendees and polls |
update_event | Edit title, description, location, timezone |
publish_event | Publish a draft so invitees can vote |
finalize_event | Pick the winning time slots and lock voting |
cancel_event | Cancel and notify attendees |
delete_event | Permanently delete events you organized |
Polls
| Tool | What it does |
|---|---|
add_poll | Add a poll to an event. Supports DATE_SELECTION, MULTIPLE_CHOICE, SINGLE_CHOICE, RANKING, RATING, YES_NO, TEXT_RESPONSE |
get_poll_results | Current vote counts and rankings |
submit_votes | Submit or update your votes on a poll |
Groups (Moots)
| Tool | What it does |
|---|---|
list_groups | Your groups with your role in each |
create_group | Create a new group |
get_group | Group details and recent activity |
list_group_members | Members and their roles |
list_group_posts | Message board posts |
create_group_post | Post to a group's message board |
reply_to_post | Reply to an existing post |
Your profile
| Tool | What it does |
|---|---|
get_my_profile | Your profile, timezone, subscription tier |
get_my_availability | Your weekly availability schedule |
update_my_availability | Update your weekly availability |
Invites, templates, notifications
| Tool | What it does |
|---|---|
create_invite_link | Generate a shareable invite link for an event |
list_templates | Available event templates |
create_event_from_template | One-shot event creation from a saved template |
list_notifications | Your unread notifications |
mark_notifications_read | Dismiss notifications |
Smart scheduling (Intelligence tools)
| Tool | What it does |
|---|---|
suggest_times | AI-powered scheduling suggestions based on group availability |
get_group_availability | Aggregated availability across a group for a date range |
detect_conflicts | Check calendar conflicts for proposed times |
list_recurring_patterns | Recurring event patterns you've set up |
create_recurring_pattern | Set up weekly / biweekly / monthly recurring events |
get_busy_times | Busy times from connected Google / CalDAV calendars |
Example prompts
Try asking your assistant things like:
- "Find a time next weekend when the whole Saturday Night Crew is free, and draft a 2-hour session around it."
- "What events do I have coming up this week?"
- "Post a message to the Campaign group reminding everyone to set their availability for next month."
- "Create a draft event called 'Session 47 — The Wizard's Library' and add a poll for next Saturday, Sunday, or the following Friday evening."
- "Anyone in the Tuesday group have a conflict with the 7–10pm slot next week?"
The assistant will translate these into the appropriate tool calls automatically.
Rate limits
Per-key rate limits scale with your subscription tier:
| Tier | Requests / hour | Burst / minute |
|---|---|---|
| Entling (free) | 100 | 20 |
| Ent | 1,000 | 60 |
Every API response includes X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset headers. When you hit the limit you'll get a 429 response with a retry time; Claude will wait and inform you.
Most real workflows stay well under the Entling limit — a typical "check my schedule and create an event" interaction is under five requests.
Security
Treat API keys like passwords
- Never paste a key into a chat message — including to the assistant itself. Put it in the
envblock of the MCP config file, which is stored locally on disk. - Use a separate key per device. If a laptop gets lost, you revoke that one key without breaking other setups.
- Give each key a descriptive name so you know what to revoke when you do a cleanup.
Keys are scoped to you
An API key can only access data you already have access to. It cannot:
- See or modify events you weren't invited to
- Change your subscription tier or billing
- Access other users' private data
- Bypass the group member permissions you've set
Revoking a key
Go to Settings → API Keys, find the key by its name or first 16 characters, and click Revoke. Revoked keys stop working immediately. If you suspect a key has been exposed, revoke it, then create a new one and update your MCP config.
We never store the full key
Only a SHA-256 hash of the key lives in our database. The plaintext is shown to you once at creation and never again — if you lose it, revoke and create a new one.
Troubleshooting
The assistant can't find any EventMoot tools
- Check that you fully quit and relaunched the assistant after editing the config (on macOS, "close window" doesn't quit the app — use ⌘Q).
- Verify your config JSON is valid — a missing comma or bracket will silently skip the server.
- On Claude Desktop, check the developer logs: Settings → Developer → Open Logs Folder and look for
mcp.log.
401 INVALID_API_KEY
- The key is wrong, expired, or revoked. Mint a new one and update your config.
- Double-check you didn't accidentally copy a trailing space or newline.
- Make sure the prefix is
em_live_— any other format is invalid.
429 RATE_LIMIT_EXCEEDED
You've hit your tier's rate limit. The response includes an X-RateLimit-Reset header with the Unix timestamp when you can retry. Claude will usually wait automatically. If you hit this often, consider upgrading your tier.
404 on every request
Usually one of:
- The API is switched off on this EventMoot server right now. Check back later, or contact support.
EVENTMOOT_API_URLis wrong — should behttps://eventmoot.comin production.- You're pointing at a self-hosted dev server that isn't running.
The assistant calls a tool but gets "You don't have access"
API keys inherit your permissions — if you couldn't do the action in the web UI, the assistant can't either. Check group membership, roles, and event invite status.
Self-hosting note
If you're running EventMoot locally, point your MCP client at http://localhost:3000 instead of https://eventmoot.com:
"env": {
"EVENTMOOT_API_KEY": "em_live_...",
"EVENTMOOT_API_URL": "http://localhost:3000"
}
The same key format works against either host.
Explore the API in your browser
The full REST API is documented interactively with Swagger UI. Paste your em_live_... key into the Authorize dialog and try any endpoint live against your account.