Evite for Claude — list events, guest lists & RSVPs, RSVP, message guests, and create/edit events
Evite for Claude — list events, guest lists & RSVPs, RSVP, message guests, and create/edit events
Valid MCP server (1 strong, 1 medium validity signals). No known CVEs in dependencies. Package registry verified. Imported from the Official MCP Registry. Trust signals: trusted author (25/25 approved).
4 files analyzed · 1 issue found
Security scores are indicators to help you make informed decisions, not guarantees. Always review permissions before connecting any MCP server.
This plugin requests these system permissions. Most are normal for its category.
Set these up before or after installing:
Environment variable: EVITE_EMAIL
Environment variable: EVITE_PASSWORD
Environment variable: EVITE_SESSION_COOKIE
Add this to your MCP configuration file:
{
"mcpServers": {
"io-github-chrischall-evite-mcp": {
"env": {
"EVITE_EMAIL": "your-evite-email-here",
"EVITE_PASSWORD": "your-evite-password-here",
"EVITE_SESSION_COOKIE": "your-evite-session-cookie-here"
},
"args": [
"-y",
"evite-mcp"
],
"command": "npx"
}
}
}From the project's GitHub README.
A Model Context Protocol server for Evite — read and act on your events as both guest (invitations received) and host (events you created): list events, view guest lists & RSVP tallies, RSVP, message guests, and create/edit events. Built on @chrischall/mcp-utils.
Status: read + write tools live. The five read tools work against Evite's internal API, authenticating from email/password (tier-1,
POST /ajax_login), a raw cookie env var, or a signed-in browser tab (fetchproxy bootstrap). The twelve write tools are confirm-gated — withoutconfirm: truethey only return a dry-run preview and send nothing — and their endpoints are live-verified (seedocs/EVITE-API.md); a couple of request bodies are still assumed rather than captured (#3).
Six read tools (all read-only), twelve confirm-gated write tools, plus evite_healthcheck:
| Tool | Endpoint | Returns |
|---|---|---|
evite_list_events | GET /services/events/v1/ | your events + a totals breakdown (filterBy = all/host/others, repeatable status, offset/numResults paging) |
evite_get_event | GET /services/event/v1/{id} | single-event detail (event, settings, location) |
evite_list_guests | GET /services/event/v1/{id}/guests/ | the guest list + RSVP responses (delivery status, views, short links) |
evite_rsvp_summary | (derived from guests) | just the RSVP summary (yes/no/maybe/noReply + head counts) |
evite_list_messages | GET /services/event/v1/{id}/posts/ | the event's Messages thread |
evite_list_templates | scrapes /invites/{category}/ | invitation template slugs (the template_name evite_create_event needs) + display names |
Every write tool takes confirm: boolean. Without confirm: true it performs no network call and returns a dry-run preview of exactly what would be sent — that is the safe default. Only confirm: true reaches the live path. Endpoints are verified; the CSRF token (X-CSRFToken, read fresh per request as it rotates) is attached centrally.
| Tool | Endpoint | Action |
|---|---|---|
evite_rsvp | PUT /services/event/v1/{id}/guests/{guestId} | RSVP for a guest (response + adult/kid head counts + optional note) |
evite_send_message | POST /tsunami/v1/services/event/{id}/guest/{gid}/messages | send a private message to one guest (body assumed) |
evite_broadcast | POST /tsunami/v1/services/event/{id}/broadcast/ | broadcast a message to whole RSVP segments (virtual_groups) at once |
evite_create_event | POST /services/event/v1/ ({event:{…}}) | create an event draft (needs template_name; the API 500s even on success) |
evite_update_event | PATCH /services/event/v1/{id} ({event:{…}}) | edit an event (only the fields you pass change) |
evite_add_guest | POST /ajax/event/{id}/guestlist/draft/ | add guests to the draft (un-sent) list — [{name,email}] |
evite_update_guest | PATCH /ajax/event/{id}/guestlist/draft/ | edit a draft guest's name/email/phone |
evite_remove_guest | DELETE /ajax/event/{id}/guestlist/draft/{gid} | remove a draft guest |
evite_send | POST /services/event/v1/{id}/send/ | "Send now" — emails the ready-to-send guests |
evite_cancel_event | POST …/actions/cancel/ | cancel an event / delete a draft (destructive; reversible) |
evite_reinstate_event | POST …/actions/reinstate/ | reinstate a cancelled event |
evite_duplicate_event | GET /plus/create/{id}/copy/ (→302) | copy an event into a fresh draft; returns the new event id |
The authoring flow is evite_create_event → evite_add_guest → evite_send. evite_send, evite_send_message, evite_broadcast, and evite_cancel_event have real-world effects (emails / cancellation notices), so their confirm-gating matters.
Fetchproxy-archetype MCP. Evite has no public API, so the server calls Evite's internal /services/ web API using your session. src/auth.ts resolves that session in priority order:
EVITE_EMAIL + EVITE_PASSWORD (tier-1, preferred) — headless email/password form login: POST the creds to https://www.evite.com/ajax_login, then build the session from the response Set-Cookie jar (x-evite-session, evtsession, csrftoken, x-evite-features). No browser bridge, no hand-copied cookie. Both vars must be set, or the resolver falls through. (Live.)EVITE_SESSION_COOKIE — a raw cookie: header copied from a signed-in evite.com tab (or set in CI). Used verbatim. (Live.)x-evite-session, evtsession, x-evite-features, csrftoken) from a signed-in evite.com browser tab via @fetchproxy/bootstrap. Bootstrap runs once; every API call then goes out via plain Node fetch() with the cookies attached. Opt out with EVITE_DISABLE_FETCHPROXY=1. (Live.)One tier is intentionally deferred (the resolver is shaped to slot it in):
fetch trips a wall; not observed during discovery.The twelve write tools (rsvp, add/update/remove-guest, send, send-message, broadcast, create/update/cancel/reinstate/duplicate event) are confirm-gated (dry-run preview unless confirm: true). The single private client.write() helper attaches the CSRF token via one centralized header (CSRF_HEADER = X-CSRFToken; the csrftoken cookie rotates mid-session, so it's read fresh per request). Endpoints span three bases — REST /services/…, the legacy /ajax/event/{id}/… guest list, and the /tsunami/… messaging service — all live-verified; a couple of request bodies remain assumed (#3).
npm install # resolves @chrischall/mcp-utils from a local tarball (see issue #4)
npm run build
npm test
docs/superpowers/specs/2026-05-31-evite-mcp-design.mddocs/superpowers/plans/2026-05-31-evite-mcp-scaffold-and-spike.mddocs/superpowers/plans/2026-05-31-evite-mcp-auth-and-reads.mddocs/EVITE-API.mdOpen work: #3 — write endpoints + CSRF are now live-verified; only a couple of request bodies (send / send-message) remain assumed. #4 tracks publishing the shared lib. (Discovery #1, tier-1 email/password login #2, and the read tools are done.)
MIT
Be the first to review this server!
by Modelcontextprotocol · Developer Tools
Read, search, and manipulate Git repositories programmatically
by Toleno · Developer Tools
Toleno Network MCP Server — Manage your Toleno mining account with Claude AI using natural language.
by mcp-marketplace · Developer Tools
Create, build, and publish Python MCP servers to PyPI — conversationally.