Evite Mcp

io.github.chrischall由 GitHub 帳號 chrischall 發布v1.5.0更新於 Nov 7, 2026

Evite for Claude — list events, guest lists & RSVPs, RSVP, message guests, and create/edit events

已驗證STDIO僅桌面效率與工作流溝通與協作

概覽

AI 產生的概覽

讓助理以賓客或主辦人身分讀取並操作你的 Evite 活動:列出活動、賓客名單與回覆、回覆邀請、傳訊息給賓客,以及建立或編輯活動。

可以做什麼
  • 列出活動、查看單一活動詳情、瀏覽邀請函範本
  • 讀取賓客名單、RSVP 統計和活動留言串
  • 替賓客回覆邀請,並向賓客發送私訊或群發訊息
  • 建立、編輯、複製、取消或恢復活動
  • 新增、修改和刪除草稿賓客,然後寄出邀請
  • 把照片上傳到活動的共享相簿,並執行健康檢查
適用情境
適合在 Evite 上籌辦或參加活動時使用,讓助理查看回覆狀況、催請賓客,或起草並寄出邀請而不必打開網站。對管理賓客名單的主辦人和需要回覆邀請的賓客都有用。
執行需求
以 npm 套件形式透過 stdio 在本機執行。需要 Evite 帳號工作階段,可用三種方式之一提供:EVITE_EMAIL 加 EVITE_PASSWORD、原始 EVITE_SESSION_COOKIE,或使用 fetchproxy 瀏覽器橋接並搭配已登入 evite.com 的分頁和 ContextMint Bridge Chrome 擴充功能。需要連線至 evite.com;另有工作階段快取檔和上傳目錄等選用設定。
安裝前請注意
會保存你的 Evite 密碼或工作階段 cookie,並預設把工作階段快取到磁碟。寫入類工具會寄出真實郵件和取消通知:寄送邀請、傳訊息或群發給賓客、取消活動都會造成實際影響,核准前請核對確認預覽。照片上傳會讀取所設定上傳目錄中的本機檔案。此伺服器使用 Evite 未公開的內部 API,可能隨時失效。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Evite Mcp,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

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:

ToolEndpointReturns
evite_list_eventsGET /services/events/v1/your events + a totals breakdown (filterBy = all/host/others, repeatable status, offset/numResults paging)
evite_get_eventGET /services/event/v1/{id}single-event detail (event, settings, location)
evite_list_guestsGET /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_messagesGET /services/event/v1/{id}/posts/the event's Messages thread
evite_list_templatesscrapes /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.

ToolEndpointAction
evite_rsvpPUT /services/event/v1/{id}/guests/{guestId}RSVP for a guest (response + adult/kid head counts + optional note)
evite_send_messagePOST /tsunami/v1/services/event/{id}/guest/{gid}/messagessend a private message to one guest (body assumed)
evite_broadcastPOST /tsunami/v1/services/event/{id}/broadcast/broadcast a message to whole RSVP segments (virtual_groups) at once
evite_upload_photoPOST …/photos/v1/{id}/upload/request/ → GCS → finish → shared-galleryupload 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_eventPOST /services/event/v1/ ({event:{…}})create an event draft (needs template_name; the API 500s even on success)
evite_update_eventPATCH /services/event/v1/{id} ({event:{…}})edit an event (only the fields you pass change)
evite_add_guestPOST /ajax/event/{id}/guestlist/draft/add guests to the draft (un-sent) list — [{name,email}]
evite_update_guestPATCH /ajax/event/{id}/guestlist/draft/edit a draft guest's name/email/phone
evite_remove_guestDELETE /ajax/event/{id}/guestlist/draft/{gid}remove a draft guest
evite_sendPOST /services/event/v1/{id}/send/"Send now" — emails the ready-to-send guests
evite_cancel_eventPOST …/actions/cancel/cancel an event / delete a draft (destructive; reversible)
evite_reinstate_eventPOST …/actions/reinstate/reinstate a cancelled event
evite_duplicate_eventGET /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.

Confirmations

variabledefault
MCP_CONFIRM_MODEask-userWhat 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_ELICITATIONonoff 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_SECONDS600How long a token stays valid.
MCP_CONFIRM_SECRETrandom per processSigning 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.
variabledefault
EVITE_UPLOAD_DIR~/Downloads/evite-mcpThe 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

bash
npm install      # resolves @chrischall/mcp-utils from a local tarball (see issue #4)npm run buildnpm 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

來源:README.md,提交 a496800

工具

0
SourceWeft 尚未在沙箱中啟動過該軟體包,因此其工具未知。

版本歷史

17
  1. v1.5.0最新Nov 7, 2026
  2. v1.4.0Nov 4, 2026
  3. v1.3.7Oct 20, 2026
  4. v1.3.6Oct 16, 2026
  5. v1.3.5Oct 10, 2026
  6. v1.3.4Oct 7, 2026
  7. v1.3.3Oct 5, 2026
  8. v1.3.2Oct 3, 2026
  9. v1.3.1Sep 28, 2026
  10. v1.3.0Sep 25, 2026
  11. v1.2.0Sep 24, 2026
  12. v1.1.3Sep 23, 2026
  13. v1.1.2Sep 23, 2026
  14. v1.1.1Sep 21, 2026
  15. v1.1.0Sep 20, 2026
  16. v1.0.0Sep 19, 2026
  17. v0.8.3Sep 16, 2026

評分

已滿足適用檢查項的 50%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分