evite-mcp

evite-mcp

MCP server for Evite that lets you read and act on events as guest or host: list events, view guest lists, RSVP, send messages, and create/edit events.

Category
访问服务器

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 are confirm-gated — without confirm: true they only return a dry-run preview and send nothing — 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 confirm-gated write tools, plus evite_healthcheck:

Tool Endpoint Returns
evite_list_events GET /services/events/v1/ your events + a totals breakdown (filterBy = all/host/others, repeatable status, offset/numResults paging)
evite_get_event GET /services/event/v1/{id} single-event detail (event, settings, location)
evite_list_guests GET /services/event/v1/{id}/guests/ the guest list + RSVP responses (delivery status, views, short links)
evite_rsvp_summary (derived from guests) just the RSVP summary (yes/no/maybe/noReply + head counts)
evite_list_messages GET /services/event/v1/{id}/posts/ the event's Messages thread
evite_list_templates scrapes /invites/{category}/ invitation template slugs (the template_name evite_create_event needs) + display names

Write tools (confirm-gated)

Every write tool takes confirm: boolean. Without confirm: true it performs no network call and returns a dry-run preview of exactly what would be sent — that is the safe default. Only confirm: true reaches the live path. Endpoints are verified; the CSRF token (X-CSRFToken, read fresh per request as it rotates) is attached centrally.

Tool Endpoint Action
evite_rsvp PUT /services/event/v1/{id}/guests/{guestId} RSVP for a guest (response + adult/kid head counts + optional note)
evite_send_message POST /tsunami/v1/services/event/{id}/guest/{gid}/messages send a private message to one guest (body assumed)
evite_broadcast POST /tsunami/v1/services/event/{id}/broadcast/ broadcast a message to whole RSVP segments (virtual_groups) at once
evite_upload_photo POST …/photos/v1/{id}/upload/request/ → GCS → finish → shared-gallery upload a local image to the event's shared photo album (4-step GCS signed upload)
evite_create_event POST /services/event/v1/ ({event:{…}}) create an event draft (needs template_name; the API 500s even on success)
evite_update_event PATCH /services/event/v1/{id} ({event:{…}}) edit an event (only the fields you pass change)
evite_add_guest POST /ajax/event/{id}/guestlist/draft/ add guests to the draft (un-sent) list — [{name,email}]
evite_update_guest PATCH /ajax/event/{id}/guestlist/draft/ edit a draft guest's name/email/phone
evite_remove_guest DELETE /ajax/event/{id}/guestlist/draft/{gid} remove a draft guest
evite_send POST /services/event/v1/{id}/send/ "Send now" — emails the ready-to-send guests
evite_cancel_event POST …/actions/cancel/ cancel an event / delete a draft (destructive; reversible)
evite_reinstate_event POST …/actions/reinstate/ reinstate a cancelled event
evite_duplicate_event GET /plus/create/{id}/copy/ (→302) copy an event into a fresh draft; returns the new event id

The authoring flow is evite_create_event → evite_add_guest → evite_send. evite_send, evite_send_message, evite_broadcast, and evite_cancel_event have real-world effects (emails / cancellation notices), so their confirm-gating matters.

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. 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) are confirm-gated (dry-run preview unless confirm: true). The single private client.write() helper attaches the CSRF token via one centralized header (CSRF_HEADER = X-CSRFToken; the csrftoken cookie rotates mid-session, so it's read fresh per request). Endpoints span three bases — REST /services/…, the legacy /ajax/event/{id}/… guest list, and the /tsunami/… messaging service — all live-verified; a couple of request bodies remain assumed (#3).

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

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选