evite-mcp
Evite MCP lets you read and manage Evite events from both guest and host perspectives, with confirmation-gated writes.
Check server status and the resolved authentication mode.
List, search, filter, and paginate events by host/guest role and status; choose brief, compact, or full output.
View event details, guest lists, RSVP summaries, event messages, and invitation templates.
RSVP for a guest with adult/kid head counts and an optional note.
Send a private message to one guest or broadcast to RSVP segments.
Upload a local photo to an event's shared gallery.
Create, duplicate, edit, cancel, or reinstate events.
Add, edit, or remove draft guests, then send invitations.
All write tools require confirmation via a prompt or preview plus single-use confirmToken; auth supports email/password, raw cookie, or browser bootstrap.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@evite-mcpShow my upcoming events"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
evite-mcp
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 thirteen write tools ask you to confirm first — nothing is sent until you approve (see Confirmations) — and their endpoints are live-verified (seedocs/EVITE-API.md); a couple of request bodies are still assumed rather than captured (#3).
Tools
Six read tools (all read-only), thirteen confirmed write tools, evite_upload_slots (read-only: upload links for photos on the hosted connector), plus evite_healthcheck:
Tool | Endpoint | Returns |
|
| your events + a totals breakdown ( |
|
| single-event detail (event, settings, location) |
|
| the guest list + RSVP responses (delivery status, views, short links) |
| (derived from guests) | just the RSVP summary (yes/no/maybe/noReply + head counts) |
|
| the event's Messages thread |
| scrapes | invitation template slugs (the |
Write tools (confirmed)
Every write tool asks you to confirm before it sends anything. A client that can show a confirmation prompt (Claude Code) shows one with the exact values that would be sent (unless MCP_CONFIRM_ELICITATION=off). Elsewhere (claude.ai, Claude Desktop) the first call performs no write (at most a read-only lookup — e.g. evite_update_guest reads the draft guest list to build an exact preview) and returns that preview plus a confirmToken; only a repeat call with the token performs the write. The token is single-use, expires, and is bound to the tool and the exact values — change anything and it is refused (DRAFT_CHANGED) with a fresh preview. See Confirmations. Endpoints are verified; the CSRF token (X-CSRFToken, read fresh per request as it rotates) is attached centrally.
Tool | Endpoint | Action |
|
| RSVP for a guest (response + adult/kid head counts + optional note) |
|
| send a private message to one guest (body assumed) |
|
| broadcast a message to whole RSVP segments ( |
|
| upload a photo to the event's shared photo album (4-step GCS signed upload) — from a local |
|
| create an event draft (needs |
|
| edit an event (only the fields you pass change) |
|
| add guests to the draft (un-sent) list — |
|
| edit a draft guest's name/email/phone |
|
| remove a draft guest |
|
| "Send now" — emails the ready-to-send guests |
|
| cancel an event / delete a draft (destructive; reversible) |
|
| reinstate a cancelled event |
|
| 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 confirmation matters.
Related MCP server: googlecalendar-mcp
Confirmations
variable | default | |
|
| What a write does on a client that cannot show a confirmation prompt (claude.ai, Claude Desktop). |
|
|
|
|
| How long a token stays valid. |
| random per process | Signing key; set it only if tokens must survive a server restart. |
Photo uploads
evite_upload_photo takes the image as exactly one of three inputs (JPEG/PNG/GIF/WebP/HEIC, max 20 MB; the bytes must really be that image type, whatever the name says):
path— local installs only. A file insideEVITE_UPLOAD_DIR(below).inline—{ filename, content_base64 }. Works anywhere; meant for a small photo, since every byte rides inside the tool call.blob_key— the hosted connector's way in. It cannot read files on your machine, so apathis refused there with directions. Instead, callevite_upload_slotswith the filenames; each slot has a signeduploadUrland a readycurlcommand that PUTs the file with the exactContent-Type. Then pass the slot'sblobKeyasblob_key. The upload is read on the preview and again on confirm, and its SHA-256 is bound into the confirmation, so a file replaced in between is refused (DRAFT_CHANGED). It is deleted only after Evite accepts the photo (the result'sblobsays whether that delete worked). If the upload fails it is kept, so a retry can reuse the sameblob_key.evite_upload_slotsrefuses on a local install, which has no blob store.
variable | default | |
|
| The directories |
Architecture
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 tohttps://www.evite.com/ajax_login, then build the session from the responseSet-Cookiejar (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 rawcookie:header copied from a signed-inevite.comtab (or set in CI). Used verbatim. (Live.)Fetchproxy bootstrap (fallback) — lift the session cookies (
x-evite-session,evtsession,x-evite-features,csrftoken) from a signed-inevite.combrowser tab via@fetchproxy/bootstrap, which needs the ContextMint Bridge browser extension (Chrome: load the chrome zip from the releases page unpacked. Safari isn't available yet — it will ship inside the ContextMint app, which has no public download — so use Chrome for now). ContextMint Bridge is the fetchproxy browser extension under its new name, from the same maintainer — fetchproxy's own README points to it. Its source is public at nullnet-app/contextmint-bridge: build it yourself, or check a release zip against the.sha256file published beside it (shasum -a 256 -c contextmint-bridge-chrome-<version>.zip.sha256). Bootstrap runs once; every API call then goes out via plain Nodefetch()with the cookies attached. Opt out withEVITE_DISABLE_FETCHPROXY=1. (Live.)
One tier is intentionally deferred (the resolver is shaped to slot it in):
Fetchproxy as transport (bot-wall retry through the browser bridge) — a fallback only needed if plain
fetchtrips a wall; not observed during discovery.
The thirteen write tools (rsvp, add/update/remove-guest, send, send-message, broadcast, upload-photo, create/update/cancel/reinstate/duplicate event) ask you to confirm first (a prompt, or a preview + single-use confirmToken; see Confirmations). 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).
Development
npm install # resolves @chrischall/mcp-utils from a local tarball (see issue #4)
npm run build
npm testDocs & roadmap
Design spec:
docs/superpowers/specs/2026-05-31-evite-mcp-design.mdPlan 1 (scaffold + spike):
docs/superpowers/plans/2026-05-31-evite-mcp-scaffold-and-spike.mdPlan 2 (auth + read tools):
docs/superpowers/plans/2026-05-31-evite-mcp-auth-and-reads.mdInternal API reference (verified from a live session):
docs/EVITE-API.md
Open 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.)
License
MIT
Available Tools
21 toolsevite_add_guestA
Add guests to an event's draft (un-sent) guest list. Nothing is emailed until you evite_send. Asks the user to confirm first: a confirmation prompt where the client supports one; otherwise the first call returns a preview and a confirmToken, and only a repeat call with that token proceeds (see MCP_CONFIRM_MODE). NB: guests only persist on a finalized (sent/sending) event, not a bare new draft.
| Name | Required | Description | Default |
|---|---|---|---|
| guests | Yes | Guests to add to the draft (un-sent) list. | |
| event_id | Yes | Evite event id (event_id from evite_list_events). | |
| confirmToken | No | ONLY for the two-step confirmation fallback (a client without MCP elicitation). The confirmToken from this same tool's phase-1 "confirmation-required" response, passed back ONLY after the user has seen that preview and explicitly approved it in chat — never on the first call, never invented, never reused. Call again with the same arguments. Ignored when the client supports elicitation. |
evite_broadcastADestructive
Broadcast a message to whole RSVP segments of an Evite event at once (e.g. everyone who replied yes/maybe). This really emails every guest in those segments. If a call fails or times out it may still have gone out — check evite_list_messages before calling again. Asks the user to confirm first: a confirmation prompt where the client supports one; otherwise the first call returns a preview and a confirmToken, and only a repeat call with that token proceeds (see MCP_CONFIRM_MODE).
| Name | Required | Description | Default |
|---|---|---|---|
| groups | Yes | RSVP segments to send to, e.g. ['yes','no','maybe']. | |
| message | Yes | Message text to broadcast to the selected RSVP segments. | |
| event_id | Yes | Evite event id (event_id from evite_list_events). | |
| confirmToken | No | ONLY for the two-step confirmation fallback (a client without MCP elicitation). The confirmToken from this same tool's phase-1 "confirmation-required" response, passed back ONLY after the user has seen that preview and explicitly approved it in chat — never on the first call, never invented, never reused. Call again with the same arguments. Ignored when the client supports elicitation. | |
| participant_count | No | Optional recipient count the web UI sends along (informational). |
evite_cancel_eventADestructiveIdempotent
Cancel an Evite event (also used to delete a draft). DESTRUCTIVE — may send a cancellation notice to guests; reversible with evite_reinstate_event. Asks the user to confirm first: a confirmation prompt where the client supports one; otherwise the first call returns a preview and a confirmToken, and only a repeat call with that token proceeds (see MCP_CONFIRM_MODE).
| Name | Required | Description | Default |
|---|---|---|---|
| event_id | Yes | Evite event id (event_id from evite_list_events). | |
| confirmToken | No | ONLY for the two-step confirmation fallback (a client without MCP elicitation). The confirmToken from this same tool's phase-1 "confirmation-required" response, passed back ONLY after the user has seen that preview and explicitly approved it in chat — never on the first call, never invented, never reused. Call again with the same arguments. Ignored when the client supports elicitation. |
evite_create_eventA
Create an Evite event (as a draft). Requires title, start_datetime, and template_name. Asks the user to confirm first: a confirmation prompt where the client supports one; otherwise the first call returns a preview and a confirmToken, and only a repeat call with that token proceeds (see MCP_CONFIRM_MODE). Evite answers a create with a 500 even when the draft IS created; this tool handles that by re-listing your drafts, and returns created:true with the eventId, or created:"unknown" when it cannot confirm — never call it again for the same event; check the drafts instead.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | Event title. | |
| message | No | Event message / description. | |
| confirmToken | No | ONLY for the two-step confirmation fallback (a client without MCP elicitation). The confirmToken from this same tool's phase-1 "confirmation-required" response, passed back ONLY after the user has seen that preview and explicitly approved it in chat — never on the first call, never invented, never reused. Call again with the same arguments. Ignored when the client supports elicitation. | |
| end_datetime | No | End datetime (ISO 8601, event-local). | |
| template_name | Yes | Invitation template name (required by the create API; e.g. a gallery design id). | |
| start_datetime | Yes | Start datetime (ISO 8601, event-local). Required. |
evite_duplicate_eventA
Duplicate an Evite event into a fresh draft (the "Duplicate event" action). Returns the new draft event id. Asks the user to confirm first: a confirmation prompt where the client supports one; otherwise the first call returns a preview and a confirmToken, and only a repeat call with that token proceeds (see MCP_CONFIRM_MODE).
| Name | Required | Description | Default |
|---|---|---|---|
| event_id | Yes | Evite event id (event_id from evite_list_events). | |
| confirmToken | No | ONLY for the two-step confirmation fallback (a client without MCP elicitation). The confirmToken from this same tool's phase-1 "confirmation-required" response, passed back ONLY after the user has seen that preview and explicitly approved it in chat — never on the first call, never invented, never reused. Call again with the same arguments. Ignored when the client supports elicitation. |
evite_get_eventARead-only
Get a single Evite event detail (GET /services/event/v1/{id}): event, settings, location, and more.
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | Response shape: "compact" (default) drops fields the response already carries elsewhere; "full" returns every field this server understands. compact strips image/avatar URLs from the response; "full" returns Evite's payload untouched. No field projection: this server has no verified record of which Evite fields matter, and inventing one would risk dropping a field a caller needs. | |
| event_id | Yes | Evite event id (event_id from evite_list_events). |
evite_healthcheckARead-only
Report evite-mcp status and the resolved auth mode.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
evite_list_eventsARead-only
List your Evite events (GET /services/events/v1/). Returns events plus a totals breakdown. filterBy=others returns events where you are a guest. view "brief" answers one line per event (title — start — status), upcoming events only unless status is given, 25 per page unless numResults is given.
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | Response shape. compact strips image/avatar URLs from the response; "full" returns Evite's payload untouched. No field projection: this server has no verified record of which Evite fields matter, and inventing one would risk dropping a field a caller needs. "brief" answers one line per event — title — <ISO start or "no date"> — <status> — inside the untrusted-data envelope as `data`, with "-- none" for no events and "-- more" when the page came back full. | |
| filter | No | Free-text search over event titles. | |
| offset | No | Pagination offset. | |
| status | No | Repeatable status filter (upcoming, draft, archived, past, canceled). Default: upcoming + past; with view "brief", upcoming only. | |
| filterBy | No | Whose events to list: all, host (you are hosting), or others (you are a guest). | all |
| numResults | No | Page size. |
evite_list_guestsBRead-only
List the guests for an Evite event (GET /services/event/v1/{id}/guests/): name, RSVP response, head counts, delivery status, and more.
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | Response shape: "compact" (default) drops fields the response already carries elsewhere; "full" returns every field this server understands. compact strips image/avatar URLs from the response; "full" returns Evite's payload untouched. No field projection: this server has no verified record of which Evite fields matter, and inventing one would risk dropping a field a caller needs. | |
| event_id | Yes | Evite event id (event_id from evite_list_events). |
evite_list_messagesARead-only
List the messages on an Evite event's Messages tab (GET /services/event/v1/{id}/posts/).
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | Response shape: "compact" (default) drops fields the response already carries elsewhere; "full" returns every field this server understands. compact strips image/avatar URLs from the response; "full" returns Evite's payload untouched. No field projection: this server has no verified record of which Evite fields matter, and inventing one would risk dropping a field a caller needs. | |
| event_id | Yes | Evite event id (event_id from evite_list_events). |
evite_list_templatesARead-only
List invitation templates from a gallery category — use this to find the template_name that evite_create_event requires. category is a gallery path, e.g. "birthday/kids-teens/kids-birthday", "party", "wedding", or "baby-kids/baby/baby-shower". Set free_only:true to list only free templates. Returns each template’s slug (= template_name) and a readable display name.
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | Response shape: "compact" (default) drops fields the response already carries elsewhere; "full" returns every field this server understands. compact strips image/avatar URLs from the response; "full" returns Evite's payload untouched. No field projection: this server has no verified record of which Evite fields matter, and inventing one would risk dropping a field a caller needs. | |
| category | Yes | Gallery category path, e.g. "birthday/kids-teens/kids-birthday", "party", or "wedding". | |
| free_only | No | List only free (non-premium) templates. |
evite_reinstate_eventAIdempotent
Reinstate a previously-cancelled Evite event (the inverse of evite_cancel_event). Asks the user to confirm first: a confirmation prompt where the client supports one; otherwise the first call returns a preview and a confirmToken, and only a repeat call with that token proceeds (see MCP_CONFIRM_MODE).
| Name | Required | Description | Default |
|---|---|---|---|
| event_id | Yes | Evite event id (event_id from evite_list_events). | |
| confirmToken | No | ONLY for the two-step confirmation fallback (a client without MCP elicitation). The confirmToken from this same tool's phase-1 "confirmation-required" response, passed back ONLY after the user has seen that preview and explicitly approved it in chat — never on the first call, never invented, never reused. Call again with the same arguments. Ignored when the client supports elicitation. |
evite_remove_guestADestructiveIdempotent
Remove a draft (un-sent) guest from an Evite event. Asks the user to confirm first: a confirmation prompt where the client supports one; otherwise the first call returns a preview and a confirmToken, and only a repeat call with that token proceeds (see MCP_CONFIRM_MODE).
| Name | Required | Description | Default |
|---|---|---|---|
| event_id | Yes | Evite event id (event_id from evite_list_events). | |
| guest_id | Yes | Draft guest id to remove (guest_id from the guest list). | |
| confirmToken | No | ONLY for the two-step confirmation fallback (a client without MCP elicitation). The confirmToken from this same tool's phase-1 "confirmation-required" response, passed back ONLY after the user has seen that preview and explicitly approved it in chat — never on the first call, never invented, never reused. Call again with the same arguments. Ignored when the client supports elicitation. |
evite_rsvpADestructive
RSVP for a guest on an Evite event. Asks the user to confirm first: a confirmation prompt where the client supports one; otherwise the first call returns a preview and a confirmToken, and only a repeat call with that token proceeds (see MCP_CONFIRM_MODE).
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | Optional note/comment to leave with the RSVP. | |
| event_id | Yes | Evite event id (event_id from evite_list_events). | |
| guest_id | Yes | Guest id to RSVP for (guestId from evite_list_guests). | |
| response | Yes | RSVP response. | |
| confirmToken | No | ONLY for the two-step confirmation fallback (a client without MCP elicitation). The confirmToken from this same tool's phase-1 "confirmation-required" response, passed back ONLY after the user has seen that preview and explicitly approved it in chat — never on the first call, never invented, never reused. Call again with the same arguments. Ignored when the client supports elicitation. | |
| number_of_kids | Yes | Number of kids attending. | |
| number_of_adults | Yes | Number of adults attending. |
evite_rsvp_summaryARead-only
Get the RSVP summary for an Evite event (yes/no/maybe/noReply plus adult/kid head counts). Derived from the event guests endpoint.
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | Response shape: "compact" (default) drops fields the response already carries elsewhere; "full" returns every field this server understands. compact strips image/avatar URLs from the response; "full" returns Evite's payload untouched. No field projection: this server has no verified record of which Evite fields matter, and inventing one would risk dropping a field a caller needs. | |
| event_id | Yes | Evite event id (event_id from evite_list_events). |
evite_sendADestructive
Send the invitation to the ready-to-send (draft) guests of an event ("Send now"). THIS EMAILS GUESTS. If a call fails or times out it may still have sent — check evite_list_guests (delivery status) before calling again. Asks the user to confirm first: a confirmation prompt where the client supports one; otherwise the first call returns a preview and a confirmToken, and only a repeat call with that token proceeds (see MCP_CONFIRM_MODE).
| Name | Required | Description | Default |
|---|---|---|---|
| event_id | Yes | Evite event id (event_id from evite_list_events). | |
| confirmToken | No | ONLY for the two-step confirmation fallback (a client without MCP elicitation). The confirmToken from this same tool's phase-1 "confirmation-required" response, passed back ONLY after the user has seen that preview and explicitly approved it in chat — never on the first call, never invented, never reused. Call again with the same arguments. Ignored when the client supports elicitation. |
evite_send_messageADestructive
Send a private message to one Evite event guest. This really notifies the guest. Sent as the event host (Evite delivers per-guest chat over Firebase, not REST), so only a host can use it. Asks the user to confirm first: a confirmation prompt where the client supports one; otherwise the first call returns a preview and a confirmToken, and only a repeat call with that token proceeds (see MCP_CONFIRM_MODE).
| Name | Required | Description | Default |
|---|---|---|---|
| message | Yes | Message text to send to the guest. | |
| event_id | Yes | Evite event id (event_id from evite_list_events). | |
| guest_id | Yes | Guest id to message (guestId from evite_list_guests). | |
| confirmToken | No | ONLY for the two-step confirmation fallback (a client without MCP elicitation). The confirmToken from this same tool's phase-1 "confirmation-required" response, passed back ONLY after the user has seen that preview and explicitly approved it in chat — never on the first call, never invented, never reused. Call again with the same arguments. Ignored when the client supports elicitation. |
evite_update_eventADestructive
Edit an existing Evite event (only the fields you pass change). Asks the user to confirm first: a confirmation prompt where the client supports one; otherwise the first call returns a preview and a confirmToken, and only a repeat call with that token proceeds (see MCP_CONFIRM_MODE).
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | New title. | |
| message | No | New event message / description. | |
| event_id | Yes | Evite event id to edit (event_id from evite_list_events). | |
| confirmToken | No | ONLY for the two-step confirmation fallback (a client without MCP elicitation). The confirmToken from this same tool's phase-1 "confirmation-required" response, passed back ONLY after the user has seen that preview and explicitly approved it in chat — never on the first call, never invented, never reused. Call again with the same arguments. Ignored when the client supports elicitation. | |
| end_datetime | No | New end datetime (ISO 8601). | |
| start_datetime | No | New start datetime (ISO 8601). |
evite_update_guestADestructive
Edit a draft (un-sent) guest's name/email/phone on an Evite event. Asks the user to confirm first: a confirmation prompt where the client supports one; otherwise the first call returns a preview and a confirmToken, and only a repeat call with that token proceeds (see MCP_CONFIRM_MODE).
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | New guest name. | |
| Yes | New guest email address. | ||
| phone | No | New guest phone (optional; omitted keeps the guest's current phone and invite method). | |
| event_id | Yes | Evite event id (event_id from evite_list_events). | |
| guest_id | Yes | Draft guest id to edit (guest_id from the guest list). | |
| confirmToken | No | ONLY for the two-step confirmation fallback (a client without MCP elicitation). The confirmToken from this same tool's phase-1 "confirmation-required" response, passed back ONLY after the user has seen that preview and explicitly approved it in chat — never on the first call, never invented, never reused. Call again with the same arguments. Ignored when the client supports elicitation. |
evite_upload_photoADestructive
Upload a photo to an Evite event's shared photo gallery. This really adds the photo to the event album. Needs your guest_id on the event (from evite_list_guests). Pass the image as exactly one of: path (a file in EVITE_UPLOAD_DIR — local installs only), inline (base64 — small files), or blob_key. On the hosted connector, use the slot flow: call evite_upload_slots, PUT the file to the uploadUrl with its curl command, then pass the returned blobKey here as blob_key. JPEG/PNG/GIF/WebP/HEIC, max 20 MB. Asks the user to confirm first: a confirmation prompt where the client supports one; otherwise the first call returns a preview and a confirmToken, and only a repeat call with that token proceeds (see MCP_CONFIRM_MODE).
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | LOCAL INSTALLS ONLY. Path to the image file, inside the upload directory (EVITE_UPLOAD_DIR, default ~/Downloads/evite-mcp; a relative path is resolved there, a leading ~ is expanded; hidden files are refused). Refused on the hosted connector — use blob_key (via evite_upload_slots) or inline there. | |
| inline | No | The image itself, base64-encoded. Works everywhere; best for a small photo. | |
| blob_key | No | The blobKey of an upload slot from evite_upload_slots, after the file was PUT to its uploadUrl. The hosted way to send a photo of any size. Deleted once Evite accepts the photo; kept if the upload fails, so a retry can reuse it. | |
| event_id | Yes | Evite event id (event_id from evite_list_events). | |
| guest_id | Yes | Your guest id on the event (guestId from evite_list_guests — your own row, guestType host/cohost/guest). | |
| mimetype | No | Override the image mimetype (otherwise inferred from the filename). Must match the file contents. | |
| confirmToken | No | ONLY for the two-step confirmation fallback (a client without MCP elicitation). The confirmToken from this same tool's phase-1 "confirmation-required" response, passed back ONLY after the user has seen that preview and explicitly approved it in chat — never on the first call, never invented, never reused. Call again with the same arguments. Ignored when the client supports elicitation. |
evite_upload_slotsARead-only
Get upload links for photos to add to an Evite event album — the way to send a photo on the hosted connector, which cannot read files on your machine. Returns one slot per file: PUT the file to its uploadUrl (the returned curl command does it, with the exact Content-Type), then call evite_upload_photo with the slot's blobKey as blob_key. Links expire after 30 minutes. Changes nothing on Evite. Unavailable on a local install — pass path or inline to evite_upload_photo there.
| Name | Required | Description | Default |
|---|---|---|---|
| files | Yes | The photos to upload, one slot each (at most 10). |
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
2 tool updates
v1.5.0- Changed
evite_upload_photo5 fields changed- added
Input schema / properties / blob_keyAdded value: +{ + "description": "The blobKey of an upload slot from evite_upload_slots, after the file was PUT to its uploadUrl. The hosted way to send a photo of any size. Deleted once Evite accepts the photo; kept if the upload fails, so a retry can reuse it.", + "minLength": 1, + "type": "string" +} - added
Input schema / properties / inlineAdded value: +{ + "description": "The image itself, base64-encoded. Works everywhere; best for a small photo.", + "properties": { + "content_base64": { + "description": "The image bytes, standard base64 (a \"data:image/…;base64,\" prefix and line breaks are tolerated).", + "minLength": 1, + "type": "string" + }, + "filename": { + "description": "Filename to store the photo under — a bare name with an image extension, e.g. \"photo.jpg\".", + "minLength": 1, + "type": "string" + } + }, + "required": [ + "filename", + "content_base64" + ], + "type": "object" +} - changed
Input schema / properties / mimetype / descriptionPrevious value: -"Override the image mimetype (otherwise inferred from the file). Must match the file contents."New value: +"Override the image mimetype (otherwise inferred from the filename). Must match the file contents." - changed
Input schema / properties / path / descriptionPrevious value: -"Path to the local image file to upload, inside the upload directory (EVITE_UPLOAD_DIR, default ~/Downloads/evite-mcp; a relative path is resolved there, a leading ~ is expanded; hidden files are refused). JPEG/PNG/GIF/WebP/HEIC, max 20 MB."New value: +"LOCAL INSTALLS ONLY. Path to the image file, inside the upload directory (EVITE_UPLOAD_DIR, default ~/Downloads/evite-mcp; a relative path is resolved there, a leading ~ is expanded; hidden files are refused). Refused on the hosted connector — use blob_key (via evite_upload_slots) or inline there." - changed
Input schema / requiredPrevious value: -[ - "event_id", - "guest_id", - "path" -]New value: +[ + "event_id", + "guest_id" +]
- Added
evite_upload_slots
1 tool update
v1.4.0- Changed
evite_list_events4 fields changed- removed
Input schema / properties / status / defaultRemoved value: -[ - "upcoming", - "past" -] - changed
Input schema / properties / status / descriptionPrevious value: -"Repeatable status filter (upcoming, draft, archived, past, canceled)."New value: +"Repeatable status filter (upcoming, draft, archived, past, canceled). Default: upcoming + past; with view \"brief\", upcoming only." - changed
Input schema / properties / view / descriptionPrevious value: -"Response shape: \"compact\" (default) drops fields the response already carries elsewhere; \"full\" returns every field this server understands. compact strips image/avatar URLs from the response; \"full\" returns Evite's payload untouched. No field projection: this server has no verified record of which Evite fields matter, and inventing one would risk dropping a field a caller needs."New value: +"Response shape. compact strips image/avatar URLs from the response; \"full\" returns Evite's payload untouched. No field projection: this server has no verified record of which Evite fields matter, and inventing one would risk dropping a field a caller needs. \"brief\" answers one line per event — title — <ISO start or \"no date\"> — <status> — inside the untrusted-data envelope as `data`, with \"-- none\" for no events and \"-- more\" when the page came back full." - changed
Input schema / properties / view / enumPrevious value: -[ - "compact", - "full" -]New value: +[ + "compact", + "full", + "brief" +]
2 tool updates
v1.3.6- Changed
evite_update_guest1 field changed- changed
Input schema / properties / phone / descriptionPrevious value: -"New guest phone (optional)."New value: +"New guest phone (optional; omitted keeps the guest's current phone and invite method)."
- Changed
evite_upload_photo1 field changed- changed
Input schema / properties / path / descriptionPrevious value: -"Path to the local image file to upload (a leading ~ is expanded). JPEG/PNG/GIF/WebP/HEIC, max 20 MB."New value: +"Path to the local image file to upload, inside the upload directory (EVITE_UPLOAD_DIR, default ~/Downloads/evite-mcp; a relative path is resolved there, a leading ~ is expanded; hidden files are refused). JPEG/PNG/GIF/WebP/HEIC, max 20 MB."
13 tool updates
v1.3.0- Changed
evite_add_guest2 fields changed- removed
Input schema / properties / confirmRemoved value: -{ - "description": "Must be true to proceed. Without this, the tool returns a preview.", - "type": "boolean" -} - added
Input schema / properties / confirmTokenAdded value: +{ + "description": "ONLY for the two-step confirmation fallback (a client without MCP elicitation). The confirmToken from this same tool's phase-1 \"confirmation-required\" response, passed back ONLY after the user has seen that preview and explicitly approved it in chat — never on the first call, never invented, never reused. Call again with the same arguments. Ignored when the client supports elicitation.", + "type": "string" +}
- Changed
evite_broadcast2 fields changed- removed
Input schema / properties / confirmRemoved value: -{ - "description": "Must be true to proceed. Without this, the tool returns a preview.", - "type": "boolean" -} - added
Input schema / properties / confirmTokenAdded value: +{ + "description": "ONLY for the two-step confirmation fallback (a client without MCP elicitation). The confirmToken from this same tool's phase-1 \"confirmation-required\" response, passed back ONLY after the user has seen that preview and explicitly approved it in chat — never on the first call, never invented, never reused. Call again with the same arguments. Ignored when the client supports elicitation.", + "type": "string" +}
- Changed
evite_cancel_event2 fields changed- removed
Input schema / properties / confirmRemoved value: -{ - "description": "Must be true to proceed. Without this, the tool returns a preview.", - "type": "boolean" -} - added
Input schema / properties / confirmTokenAdded value: +{ + "description": "ONLY for the two-step confirmation fallback (a client without MCP elicitation). The confirmToken from this same tool's phase-1 \"confirmation-required\" response, passed back ONLY after the user has seen that preview and explicitly approved it in chat — never on the first call, never invented, never reused. Call again with the same arguments. Ignored when the client supports elicitation.", + "type": "string" +}
- Changed
evite_create_event2 fields changed- removed
Input schema / properties / confirmRemoved value: -{ - "description": "Must be true to proceed. Without this, the tool returns a preview.", - "type": "boolean" -} - added
Input schema / properties / confirmTokenAdded value: +{ + "description": "ONLY for the two-step confirmation fallback (a client without MCP elicitation). The confirmToken from this same tool's phase-1 \"confirmation-required\" response, passed back ONLY after the user has seen that preview and explicitly approved it in chat — never on the first call, never invented, never reused. Call again with the same arguments. Ignored when the client supports elicitation.", + "type": "string" +}
- Changed
evite_duplicate_event2 fields changed- removed
Input schema / properties / confirmRemoved value: -{ - "description": "Must be true to proceed. Without this, the tool returns a preview.", - "type": "boolean" -} - added
Input schema / properties / confirmTokenAdded value: +{ + "description": "ONLY for the two-step confirmation fallback (a client without MCP elicitation). The confirmToken from this same tool's phase-1 \"confirmation-required\" response, passed back ONLY after the user has seen that preview and explicitly approved it in chat — never on the first call, never invented, never reused. Call again with the same arguments. Ignored when the client supports elicitation.", + "type": "string" +}
- Changed
evite_reinstate_event2 fields changed- removed
Input schema / properties / confirmRemoved value: -{ - "description": "Must be true to proceed. Without this, the tool returns a preview.", - "type": "boolean" -} - added
Input schema / properties / confirmTokenAdded value: +{ + "description": "ONLY for the two-step confirmation fallback (a client without MCP elicitation). The confirmToken from this same tool's phase-1 \"confirmation-required\" response, passed back ONLY after the user has seen that preview and explicitly approved it in chat — never on the first call, never invented, never reused. Call again with the same arguments. Ignored when the client supports elicitation.", + "type": "string" +}
- Changed
evite_remove_guest2 fields changed- removed
Input schema / properties / confirmRemoved value: -{ - "description": "Must be true to proceed. Without this, the tool returns a preview.", - "type": "boolean" -} - added
Input schema / properties / confirmTokenAdded value: +{ + "description": "ONLY for the two-step confirmation fallback (a client without MCP elicitation). The confirmToken from this same tool's phase-1 \"confirmation-required\" response, passed back ONLY after the user has seen that preview and explicitly approved it in chat — never on the first call, never invented, never reused. Call again with the same arguments. Ignored when the client supports elicitation.", + "type": "string" +}
- Changed
evite_rsvp2 fields changed- removed
Input schema / properties / confirmRemoved value: -{ - "description": "Must be true to proceed. Without this, the tool returns a preview.", - "type": "boolean" -} - added
Input schema / properties / confirmTokenAdded value: +{ + "description": "ONLY for the two-step confirmation fallback (a client without MCP elicitation). The confirmToken from this same tool's phase-1 \"confirmation-required\" response, passed back ONLY after the user has seen that preview and explicitly approved it in chat — never on the first call, never invented, never reused. Call again with the same arguments. Ignored when the client supports elicitation.", + "type": "string" +}
- Changed
evite_send2 fields changed- removed
Input schema / properties / confirmRemoved value: -{ - "description": "Must be true to proceed. Without this, the tool returns a preview.", - "type": "boolean" -} - added
Input schema / properties / confirmTokenAdded value: +{ + "description": "ONLY for the two-step confirmation fallback (a client without MCP elicitation). The confirmToken from this same tool's phase-1 \"confirmation-required\" response, passed back ONLY after the user has seen that preview and explicitly approved it in chat — never on the first call, never invented, never reused. Call again with the same arguments. Ignored when the client supports elicitation.", + "type": "string" +}
- Changed
evite_send_message2 fields changed- removed
Input schema / properties / confirmRemoved value: -{ - "description": "Must be true to proceed. Without this, the tool returns a preview.", - "type": "boolean" -} - added
Input schema / properties / confirmTokenAdded value: +{ + "description": "ONLY for the two-step confirmation fallback (a client without MCP elicitation). The confirmToken from this same tool's phase-1 \"confirmation-required\" response, passed back ONLY after the user has seen that preview and explicitly approved it in chat — never on the first call, never invented, never reused. Call again with the same arguments. Ignored when the client supports elicitation.", + "type": "string" +}
- Changed
evite_update_event2 fields changed- removed
Input schema / properties / confirmRemoved value: -{ - "description": "Must be true to proceed. Without this, the tool returns a preview.", - "type": "boolean" -} - added
Input schema / properties / confirmTokenAdded value: +{ + "description": "ONLY for the two-step confirmation fallback (a client without MCP elicitation). The confirmToken from this same tool's phase-1 \"confirmation-required\" response, passed back ONLY after the user has seen that preview and explicitly approved it in chat — never on the first call, never invented, never reused. Call again with the same arguments. Ignored when the client supports elicitation.", + "type": "string" +}
- Changed
evite_update_guest2 fields changed- removed
Input schema / properties / confirmRemoved value: -{ - "description": "Must be true to proceed. Without this, the tool returns a preview.", - "type": "boolean" -} - added
Input schema / properties / confirmTokenAdded value: +{ + "description": "ONLY for the two-step confirmation fallback (a client without MCP elicitation). The confirmToken from this same tool's phase-1 \"confirmation-required\" response, passed back ONLY after the user has seen that preview and explicitly approved it in chat — never on the first call, never invented, never reused. Call again with the same arguments. Ignored when the client supports elicitation.", + "type": "string" +}
- Changed
evite_upload_photo2 fields changed- removed
Input schema / properties / confirmRemoved value: -{ - "description": "Must be true to proceed. Without this, the tool returns a preview.", - "type": "boolean" -} - added
Input schema / properties / confirmTokenAdded value: +{ + "description": "ONLY for the two-step confirmation fallback (a client without MCP elicitation). The confirmToken from this same tool's phase-1 \"confirmation-required\" response, passed back ONLY after the user has seen that preview and explicitly approved it in chat — never on the first call, never invented, never reused. Call again with the same arguments. Ignored when the client supports elicitation.", + "type": "string" +}
1 tool update
v1.1.3- Changed
evite_upload_photo2 fields changed- changed
Input schema / properties / mimetype / descriptionPrevious value: -"Override the image mimetype (otherwise inferred from the file extension)."New value: +"Override the image mimetype (otherwise inferred from the file). Must match the file contents." - added
Input schema / properties / mimetype / enumAdded value: +[ + "image/jpeg", + "image/png", + "image/gif", + "image/webp", + "image/heic", + "image/heif" +]
19 tool updates
v1.0.0- Changed
evite_add_guest1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
evite_broadcast1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
evite_cancel_event1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
evite_create_event1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
evite_duplicate_event1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
evite_get_event1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
evite_list_events1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
evite_list_guests1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
evite_list_messages1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
evite_list_templates1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
evite_reinstate_event1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
evite_remove_guest1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
evite_rsvp1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
evite_rsvp_summary1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
evite_send1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
evite_send_message1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
evite_update_event1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
evite_update_guest1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
- Changed
evite_upload_photo1 field changed- changed
Input schema / $schemaPrevious value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
6 tool updates
v0.8.0- Changed
evite_get_event1 field changed- added
Input schema / properties / viewAdded value: +{ + "description": "Response shape: \"compact\" (default) drops fields the response already carries elsewhere; \"full\" returns every field this server understands. compact strips image/avatar URLs from the response; \"full\" returns Evite's payload untouched. No field projection: this server has no verified record of which Evite fields matter, and inventing one would risk dropping a field a caller needs.", + "enum": [ + "compact", + "full" + ], + "type": "string" +}
- Changed
evite_list_events1 field changed- added
Input schema / properties / viewAdded value: +{ + "description": "Response shape: \"compact\" (default) drops fields the response already carries elsewhere; \"full\" returns every field this server understands. compact strips image/avatar URLs from the response; \"full\" returns Evite's payload untouched. No field projection: this server has no verified record of which Evite fields matter, and inventing one would risk dropping a field a caller needs.", + "enum": [ + "compact", + "full" + ], + "type": "string" +}
- Changed
evite_list_guests1 field changed- added
Input schema / properties / viewAdded value: +{ + "description": "Response shape: \"compact\" (default) drops fields the response already carries elsewhere; \"full\" returns every field this server understands. compact strips image/avatar URLs from the response; \"full\" returns Evite's payload untouched. No field projection: this server has no verified record of which Evite fields matter, and inventing one would risk dropping a field a caller needs.", + "enum": [ + "compact", + "full" + ], + "type": "string" +}
- Changed
evite_list_messages1 field changed- added
Input schema / properties / viewAdded value: +{ + "description": "Response shape: \"compact\" (default) drops fields the response already carries elsewhere; \"full\" returns every field this server understands. compact strips image/avatar URLs from the response; \"full\" returns Evite's payload untouched. No field projection: this server has no verified record of which Evite fields matter, and inventing one would risk dropping a field a caller needs.", + "enum": [ + "compact", + "full" + ], + "type": "string" +}
- Changed
evite_list_templates1 field changed- added
Input schema / properties / viewAdded value: +{ + "description": "Response shape: \"compact\" (default) drops fields the response already carries elsewhere; \"full\" returns every field this server understands. compact strips image/avatar URLs from the response; \"full\" returns Evite's payload untouched. No field projection: this server has no verified record of which Evite fields matter, and inventing one would risk dropping a field a caller needs.", + "enum": [ + "compact", + "full" + ], + "type": "string" +}
- Changed
evite_rsvp_summary1 field changed- added
Input schema / properties / viewAdded value: +{ + "description": "Response shape: \"compact\" (default) drops fields the response already carries elsewhere; \"full\" returns every field this server understands. compact strips image/avatar URLs from the response; \"full\" returns Evite's payload untouched. No field projection: this server has no verified record of which Evite fields matter, and inventing one would risk dropping a field a caller needs.", + "enum": [ + "compact", + "full" + ], + "type": "string" +}
20 tool updates
v0.5.0- First observed
evite_add_guest - First observed
evite_broadcast - First observed
evite_cancel_event - First observed
evite_create_event - First observed
evite_duplicate_event - First observed
evite_get_event - First observed
evite_healthcheck - First observed
evite_list_events - First observed
evite_list_guests - First observed
evite_list_messages - First observed
evite_list_templates - First observed
evite_reinstate_event - First observed
evite_remove_guest - First observed
evite_rsvp - First observed
evite_rsvp_summary - First observed
evite_send - First observed
evite_send_message - First observed
evite_update_event - First observed
evite_update_guest - First observed
evite_upload_photo
TDQS
Scored across 21 tools
Most tools map cleanly to a distinct resource-action pair, with clear separation between event, guest, RSVP, message, and template operations. A few names could be momentarily confused, especially evite_send vs evite_send_message/evite_broadcast and evite_upload_photo vs evite_upload_slots, but the descriptions resolve the overlap.
All tools use a consistent evite_ prefix followed by snake_case verb/noun phrasing. The pattern is predictable throughout, with only minor noun-oriented names like evite_healthcheck.
At 21 tools, the surface is heavier than the ideal 3-15 range and feels somewhat dense. The Evite domain has several sub-areas, so most tools are justified, but the set is still large enough to risk cognitive overload.
Core event lifecycle, guest management, RSVP, messaging, templates, and photo upload are covered, including useful inverse and duplicate operations. Minor gaps exist around photo management, such as listing or deleting event photos, and there is no dedicated guest detail tool, but these are workaroundable.
Maintenance
Related MCP Connectors
Your IMAP mailbox as an MCP server: read, search and (if you allow it) organize mail. Open source.
MCP server for Nylas — read email, calendars, events and contacts, and send email or create events.
A MCP server that works with Google Calendar to manage event listing, reading, and updates.
Google Events listings with dates, venues, and ticket links via a hosted MCP server.
Related MCP Servers
- AlicenseAqualityBmaintenanceMCP server for Apple Calendar and CalDAV providers. Enables listing, creating, updating, deleting events, and checking free/busy status with per-calendar write protection.6MIT
- AlicenseNot gradedqualityDmaintenanceA Model Context Protocol (MCP) server for managing Google Calendar events.MIT
- AlicenseDqualityDmaintenanceMCP server for interacting with Google Calendar, enabling reading events from public calendars and, with OAuth, creating, updating, and deleting events.1ISC
- FlicenseNot gradedqualityBmaintenanceMCP server for MailCal that reads emails via IMAP, extracts calendar events (interviews, assessments, meetings, deadlines), and provides tools to list, sync, add, update, and delete these events.6-