Skip to main content
Glama

evite-mcp

CI npm license

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 (see docs/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

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

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

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_upload_photo

POST …/photos/v1/{id}/upload/request/ → GCS → finish → shared-gallery

upload a photo to the event's shared photo album (4-step GCS signed upload) — from a local path, inline base64, or an upload-slot blob_key (see Photo uploads)

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 confirmation matters.

Related MCP server: googlecalendar-mcp

Confirmations

variable

default

MCP_CONFIRM_MODE

ask-user

What a write does on a client that cannot show a confirmation prompt (claude.ai, Claude Desktop). ask-user: two steps — the first call writes nothing and returns a preview plus a token, and the model must get your approval in chat before calling again with it. auto: the same two steps, but the model may use the token after reviewing the preview itself. refuse: writes are refused on such clients. A client that can show prompts (Claude Code) always gets the real prompt, unless MCP_CONFIRM_ELICITATION=off. An unrecognised value is treated as refuse.

MCP_CONFIRM_ELICITATION

on

off never shows a confirmation prompt, so every client gets the MCP_CONFIRM_MODE behaviour. Set it for a client that says it can show prompts but never does (the write hangs — opencode 2.0.x). Any other value is treated as on, with a warning on stderr.

MCP_CONFIRM_TTL_SECONDS

600

How long a token stays valid.

MCP_CONFIRM_SECRET

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 inside EVITE_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 a path is refused there with directions. Instead, call evite_upload_slots with the filenames; each slot has a signed uploadUrl and a ready curl command that PUTs the file with the exact Content-Type. Then pass the slot's blobKey as blob_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's blob says whether that delete worked). If the upload fails it is kept, so a retry can reuse the same blob_key. evite_upload_slots refuses on a local install, which has no blob store.

variable

default

EVITE_UPLOAD_DIR

~/Downloads/evite-mcp

The directories evite_upload_photo may read from — one or more, separated by the platform path delimiter (: on macOS/Linux, ; on Windows); ~ is allowed. A relative path is resolved against the first one. A path outside them (symlinks included), or a hidden file or directory inside them, is refused before the file is even looked at. Put photos to upload in ~/Downloads/evite-mcp, or point this elsewhere.

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:

  1. 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.)

  2. EVITE_SESSION_COOKIE — a raw cookie: header copied from a signed-in evite.com tab (or set in CI). Used verbatim. (Live.)

  3. Fetchproxy bootstrap (fallback) — lift the session cookies (x-evite-session, evtsession, x-evite-features, csrftoken) from a signed-in evite.com browser 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 .sha256 file published beside it (shasum -a 256 -c contextmint-bridge-chrome-<version>.zip.sha256). 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):

  • Fetchproxy as transport (bot-wall retry through the browser bridge) — a fallback only needed if plain fetch trips 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 test

Docs & roadmap

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 tools
evite_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.

NameRequiredDescriptionDefault
guestsYesGuests to add to the draft (un-sent) list.
event_idYesEvite event id (event_id from evite_list_events).
confirmTokenNoONLY 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_broadcastA
Destructive

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).

NameRequiredDescriptionDefault
groupsYesRSVP segments to send to, e.g. ['yes','no','maybe'].
messageYesMessage text to broadcast to the selected RSVP segments.
event_idYesEvite event id (event_id from evite_list_events).
confirmTokenNoONLY 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_countNoOptional recipient count the web UI sends along (informational).
evite_cancel_eventA
DestructiveIdempotent

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).

NameRequiredDescriptionDefault
event_idYesEvite event id (event_id from evite_list_events).
confirmTokenNoONLY 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.

NameRequiredDescriptionDefault
titleYesEvent title.
messageNoEvent message / description.
confirmTokenNoONLY 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_datetimeNoEnd datetime (ISO 8601, event-local).
template_nameYesInvitation template name (required by the create API; e.g. a gallery design id).
start_datetimeYesStart 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).

NameRequiredDescriptionDefault
event_idYesEvite event id (event_id from evite_list_events).
confirmTokenNoONLY 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_eventA
Read-only

Get a single Evite event detail (GET /services/event/v1/{id}): event, settings, location, and more.

NameRequiredDescriptionDefault
viewNoResponse 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_idYesEvite event id (event_id from evite_list_events).
evite_healthcheckA
Read-only

Report evite-mcp status and the resolved auth mode.

NameRequiredDescriptionDefault

No parameters

evite_list_eventsA
Read-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.

NameRequiredDescriptionDefault
viewNoResponse 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.
filterNoFree-text search over event titles.
offsetNoPagination offset.
statusNoRepeatable status filter (upcoming, draft, archived, past, canceled). Default: upcoming + past; with view "brief", upcoming only.
filterByNoWhose events to list: all, host (you are hosting), or others (you are a guest).all
numResultsNoPage size.
evite_list_guestsB
Read-only

List the guests for an Evite event (GET /services/event/v1/{id}/guests/): name, RSVP response, head counts, delivery status, and more.

NameRequiredDescriptionDefault
viewNoResponse 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_idYesEvite event id (event_id from evite_list_events).
evite_list_messagesA
Read-only

List the messages on an Evite event's Messages tab (GET /services/event/v1/{id}/posts/).

NameRequiredDescriptionDefault
viewNoResponse 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_idYesEvite event id (event_id from evite_list_events).
evite_list_templatesA
Read-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.

NameRequiredDescriptionDefault
viewNoResponse 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.
categoryYesGallery category path, e.g. "birthday/kids-teens/kids-birthday", "party", or "wedding".
free_onlyNoList only free (non-premium) templates.
evite_reinstate_eventA
Idempotent

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).

NameRequiredDescriptionDefault
event_idYesEvite event id (event_id from evite_list_events).
confirmTokenNoONLY 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_guestA
DestructiveIdempotent

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).

NameRequiredDescriptionDefault
event_idYesEvite event id (event_id from evite_list_events).
guest_idYesDraft guest id to remove (guest_id from the guest list).
confirmTokenNoONLY 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_rsvpA
Destructive

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).

NameRequiredDescriptionDefault
noteNoOptional note/comment to leave with the RSVP.
event_idYesEvite event id (event_id from evite_list_events).
guest_idYesGuest id to RSVP for (guestId from evite_list_guests).
responseYesRSVP response.
confirmTokenNoONLY 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_kidsYesNumber of kids attending.
number_of_adultsYesNumber of adults attending.
evite_rsvp_summaryA
Read-only

Get the RSVP summary for an Evite event (yes/no/maybe/noReply plus adult/kid head counts). Derived from the event guests endpoint.

NameRequiredDescriptionDefault
viewNoResponse 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_idYesEvite event id (event_id from evite_list_events).
evite_sendA
Destructive

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).

NameRequiredDescriptionDefault
event_idYesEvite event id (event_id from evite_list_events).
confirmTokenNoONLY 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_messageA
Destructive

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).

NameRequiredDescriptionDefault
messageYesMessage text to send to the guest.
event_idYesEvite event id (event_id from evite_list_events).
guest_idYesGuest id to message (guestId from evite_list_guests).
confirmTokenNoONLY 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_eventA
Destructive

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).

NameRequiredDescriptionDefault
titleNoNew title.
messageNoNew event message / description.
event_idYesEvite event id to edit (event_id from evite_list_events).
confirmTokenNoONLY 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_datetimeNoNew end datetime (ISO 8601).
start_datetimeNoNew start datetime (ISO 8601).
evite_update_guestA
Destructive

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).

NameRequiredDescriptionDefault
nameYesNew guest name.
emailYesNew guest email address.
phoneNoNew guest phone (optional; omitted keeps the guest's current phone and invite method).
event_idYesEvite event id (event_id from evite_list_events).
guest_idYesDraft guest id to edit (guest_id from the guest list).
confirmTokenNoONLY 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_photoA
Destructive

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).

NameRequiredDescriptionDefault
pathNoLOCAL 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.
inlineNoThe image itself, base64-encoded. Works everywhere; best for a small photo.
blob_keyNoThe 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_idYesEvite event id (event_id from evite_list_events).
guest_idYesYour guest id on the event (guestId from evite_list_guests — your own row, guestType host/cohost/guest).
mimetypeNoOverride the image mimetype (otherwise inferred from the filename). Must match the file contents.
confirmTokenNoONLY 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_slotsA
Read-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.

NameRequiredDescriptionDefault
filesYesThe photos to upload, one slot each (at most 10).

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 2 tool updatesv1.5.0
    • Changedevite_upload_photo5 fields changed
      • addedInput schema / properties / blob_key
        Added 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"
        +}
      • addedInput schema / properties / inline
        Added 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"
        +}
      • changedInput schema / properties / mimetype / description
        Previous 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."
      • changedInput schema / properties / path / description
        Previous 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."
      • changedInput schema / required
        Previous value: -[
        -  "event_id",
        -  "guest_id",
        -  "path"
        -]New value: +[
        +  "event_id",
        +  "guest_id"
        +]
    • Addedevite_upload_slots
  2. 1 tool updatev1.4.0
    • Changedevite_list_events4 fields changed
      • removedInput schema / properties / status / default
        Removed value: -[
        -  "upcoming",
        -  "past"
        -]
      • changedInput schema / properties / status / description
        Previous 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."
      • changedInput schema / properties / view / description
        Previous 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."
      • changedInput schema / properties / view / enum
        Previous value: -[
        -  "compact",
        -  "full"
        -]New value: +[
        +  "compact",
        +  "full",
        +  "brief"
        +]
  3. 2 tool updatesv1.3.6
    • Changedevite_update_guest1 field changed
      • changedInput schema / properties / phone / description
        Previous value: -"New guest phone (optional)."New value: +"New guest phone (optional; omitted keeps the guest's current phone and invite method)."
    • Changedevite_upload_photo1 field changed
      • changedInput schema / properties / path / description
        Previous 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."
  4. 13 tool updatesv1.3.0
    • Changedevite_add_guest2 fields changed
      • removedInput schema / properties / confirm
        Removed value: -{
        -  "description": "Must be true to proceed. Without this, the tool returns a preview.",
        -  "type": "boolean"
        -}
      • addedInput schema / properties / confirmToken
        Added 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"
        +}
    • Changedevite_broadcast2 fields changed
      • removedInput schema / properties / confirm
        Removed value: -{
        -  "description": "Must be true to proceed. Without this, the tool returns a preview.",
        -  "type": "boolean"
        -}
      • addedInput schema / properties / confirmToken
        Added 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"
        +}
    • Changedevite_cancel_event2 fields changed
      • removedInput schema / properties / confirm
        Removed value: -{
        -  "description": "Must be true to proceed. Without this, the tool returns a preview.",
        -  "type": "boolean"
        -}
      • addedInput schema / properties / confirmToken
        Added 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"
        +}
    • Changedevite_create_event2 fields changed
      • removedInput schema / properties / confirm
        Removed value: -{
        -  "description": "Must be true to proceed. Without this, the tool returns a preview.",
        -  "type": "boolean"
        -}
      • addedInput schema / properties / confirmToken
        Added 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"
        +}
    • Changedevite_duplicate_event2 fields changed
      • removedInput schema / properties / confirm
        Removed value: -{
        -  "description": "Must be true to proceed. Without this, the tool returns a preview.",
        -  "type": "boolean"
        -}
      • addedInput schema / properties / confirmToken
        Added 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"
        +}
    • Changedevite_reinstate_event2 fields changed
      • removedInput schema / properties / confirm
        Removed value: -{
        -  "description": "Must be true to proceed. Without this, the tool returns a preview.",
        -  "type": "boolean"
        -}
      • addedInput schema / properties / confirmToken
        Added 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"
        +}
    • Changedevite_remove_guest2 fields changed
      • removedInput schema / properties / confirm
        Removed value: -{
        -  "description": "Must be true to proceed. Without this, the tool returns a preview.",
        -  "type": "boolean"
        -}
      • addedInput schema / properties / confirmToken
        Added 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"
        +}
    • Changedevite_rsvp2 fields changed
      • removedInput schema / properties / confirm
        Removed value: -{
        -  "description": "Must be true to proceed. Without this, the tool returns a preview.",
        -  "type": "boolean"
        -}
      • addedInput schema / properties / confirmToken
        Added 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"
        +}
    • Changedevite_send2 fields changed
      • removedInput schema / properties / confirm
        Removed value: -{
        -  "description": "Must be true to proceed. Without this, the tool returns a preview.",
        -  "type": "boolean"
        -}
      • addedInput schema / properties / confirmToken
        Added 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"
        +}
    • Changedevite_send_message2 fields changed
      • removedInput schema / properties / confirm
        Removed value: -{
        -  "description": "Must be true to proceed. Without this, the tool returns a preview.",
        -  "type": "boolean"
        -}
      • addedInput schema / properties / confirmToken
        Added 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"
        +}
    • Changedevite_update_event2 fields changed
      • removedInput schema / properties / confirm
        Removed value: -{
        -  "description": "Must be true to proceed. Without this, the tool returns a preview.",
        -  "type": "boolean"
        -}
      • addedInput schema / properties / confirmToken
        Added 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"
        +}
    • Changedevite_update_guest2 fields changed
      • removedInput schema / properties / confirm
        Removed value: -{
        -  "description": "Must be true to proceed. Without this, the tool returns a preview.",
        -  "type": "boolean"
        -}
      • addedInput schema / properties / confirmToken
        Added 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"
        +}
    • Changedevite_upload_photo2 fields changed
      • removedInput schema / properties / confirm
        Removed value: -{
        -  "description": "Must be true to proceed. Without this, the tool returns a preview.",
        -  "type": "boolean"
        -}
      • addedInput schema / properties / confirmToken
        Added 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"
        +}
  5. 1 tool updatev1.1.3
    • Changedevite_upload_photo2 fields changed
      • changedInput schema / properties / mimetype / description
        Previous 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."
      • addedInput schema / properties / mimetype / enum
        Added value: +[
        +  "image/jpeg",
        +  "image/png",
        +  "image/gif",
        +  "image/webp",
        +  "image/heic",
        +  "image/heif"
        +]
  6. 19 tool updatesv1.0.0
    • Changedevite_add_guest1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedevite_broadcast1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedevite_cancel_event1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedevite_create_event1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedevite_duplicate_event1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedevite_get_event1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedevite_list_events1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedevite_list_guests1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedevite_list_messages1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedevite_list_templates1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedevite_reinstate_event1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedevite_remove_guest1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedevite_rsvp1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedevite_rsvp_summary1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedevite_send1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedevite_send_message1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedevite_update_event1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedevite_update_guest1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedevite_upload_photo1 field changed
      • changedInput schema / $schema
        Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
  7. 6 tool updatesv0.8.0
    • Changedevite_get_event1 field changed
      • addedInput schema / properties / view
        Added 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"
        +}
    • Changedevite_list_events1 field changed
      • addedInput schema / properties / view
        Added 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"
        +}
    • Changedevite_list_guests1 field changed
      • addedInput schema / properties / view
        Added 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"
        +}
    • Changedevite_list_messages1 field changed
      • addedInput schema / properties / view
        Added 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"
        +}
    • Changedevite_list_templates1 field changed
      • addedInput schema / properties / view
        Added 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"
        +}
    • Changedevite_rsvp_summary1 field changed
      • addedInput schema / properties / view
        Added 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"
        +}
  8. 20 tool updatesv0.5.0
    • First observedevite_add_guest
    • First observedevite_broadcast
    • First observedevite_cancel_event
    • First observedevite_create_event
    • First observedevite_duplicate_event
    • First observedevite_get_event
    • First observedevite_healthcheck
    • First observedevite_list_events
    • First observedevite_list_guests
    • First observedevite_list_messages
    • First observedevite_list_templates
    • First observedevite_reinstate_event
    • First observedevite_remove_guest
    • First observedevite_rsvp
    • First observedevite_rsvp_summary
    • First observedevite_send
    • First observedevite_send_message
    • First observedevite_update_event
    • First observedevite_update_guest
    • First observedevite_upload_photo

TDQS

A3.9/5.0

Scored across 21 tools

Disambiguation4/5

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.

Naming Consistency5/5

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.

Tool Count3/5

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.

Completeness4/5

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

ActivityActive
ResponsivenessUsually handled

Related MCP Connectors

Related MCP Servers