Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
คำอธิบายจากผู้ทำ (ภาษาอังกฤษตามต้นฉบับ)
Evite for Claude — list events, guest lists & RSVPs, RSVP, message guests, and create/edit events
สามเรื่องนี้ไม่รวมเป็นคะแนนเดียว เพราะความเห็น การวัด และความนิยม เป็นคนละเรื่องกัน
ตัวนี้ยังไม่ได้เรียบเรียงเป็นภาษาไทย ด้านล่างคือข้อเท็จจริงที่เราอ่านจาก registry
เลือกโปรแกรม AI ที่คุณใช้ แล้วคัดลอกค่าตั้งไปวาง
EVITE_EMAIL, EVITE_PASSWORD, EVITE_SESSION_COOKIE, EVITE_SESSION_CACHE, EVITE_SESSION_FILE, EVITE_DISABLE_FETCHPROXY, EVITE_UPLOAD_DIR, FETCHPROXY_WS_PORT, FETCHPROXY_WS_HOST, FETCHPROXY_IDENTITY_DIRค่าที่ติดป้ายความลับคือกุญแจของบัญชีคุณ อย่าส่งให้ใคร และอย่าวางในแชต
ต้องเตรียมก่อน
คุณใช้แอปไหน
เลือกแอปด้านบน เราจำไว้ให้ ครั้งหน้าปุ่มจะขึ้นว่า “ติดตั้งลง …”
เปิด Claude Desktop → Settings → Developer → Edit Config แล้ววางค่านี้ในไฟล์ claude_desktop_config.json
{
"mcpServers": {
"evite": {
"command": "npx",
"args": [
"-y",
"evite-mcp"
],
"env": {
"EVITE_EMAIL": "ใส่ค่าของคุณ",
"EVITE_PASSWORD": "ใส่ค่าของคุณ",
"EVITE_SESSION_COOKIE": "ใส่ค่าของคุณ",
"EVITE_SESSION_CACHE": "ใส่ค่าของคุณ",
"EVITE_SESSION_FILE": "ใส่ค่าของคุณ",
"EVITE_DISABLE_FETCHPROXY": "ใส่ค่าของคุณ",
"EVITE_UPLOAD_DIR": "ใส่ค่าของคุณ",
"FETCHPROXY_WS_PORT": "ใส่ค่าของคุณ",
"FETCHPROXY_WS_HOST": "ใส่ค่าของคุณ",
"FETCHPROXY_IDENTITY_DIR": "ใส่ค่าของคุณ"
}
}
}
}พิมพ์คำสั่งนี้ใน Terminal
claude mcp add evite --env EVITE_EMAIL='ใส่ค่าของคุณ' --env EVITE_PASSWORD='ใส่ค่าของคุณ' --env EVITE_SESSION_COOKIE='ใส่ค่าของคุณ' --env EVITE_SESSION_CACHE='ใส่ค่าของคุณ' --env EVITE_SESSION_FILE='ใส่ค่าของคุณ' --env EVITE_DISABLE_FETCHPROXY='ใส่ค่าของคุณ' --env EVITE_UPLOAD_DIR='ใส่ค่าของคุณ' --env FETCHPROXY_WS_PORT='ใส่ค่าของคุณ' --env FETCHPROXY_WS_HOST='ใส่ค่าของคุณ' --env FETCHPROXY_IDENTITY_DIR='ใส่ค่าของคุณ' -- npx -y evite-mcpเติมค่าที่เว้นว่างไว้ก่อนรัน
วางในไฟล์ .cursor/mcp.json ของโปรเจกต์ หรือ ~/.cursor/mcp.json
{
"mcpServers": {
"evite": {
"command": "npx",
"args": [
"-y",
"evite-mcp"
],
"env": {
"EVITE_EMAIL": "ใส่ค่าของคุณ",
"EVITE_PASSWORD": "ใส่ค่าของคุณ",
"EVITE_SESSION_COOKIE": "ใส่ค่าของคุณ",
"EVITE_SESSION_CACHE": "ใส่ค่าของคุณ",
"EVITE_SESSION_FILE": "ใส่ค่าของคุณ",
"EVITE_DISABLE_FETCHPROXY": "ใส่ค่าของคุณ",
"EVITE_UPLOAD_DIR": "ใส่ค่าของคุณ",
"FETCHPROXY_WS_PORT": "ใส่ค่าของคุณ",
"FETCHPROXY_WS_HOST": "ใส่ค่าของคุณ",
"FETCHPROXY_IDENTITY_DIR": "ใส่ค่าของคุณ"
}
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
วางในไฟล์ .vscode/mcp.json ของโปรเจกต์
{
"servers": {
"evite": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"evite-mcp"
],
"env": {
"EVITE_EMAIL": "ใส่ค่าของคุณ",
"EVITE_PASSWORD": "ใส่ค่าของคุณ",
"EVITE_SESSION_COOKIE": "ใส่ค่าของคุณ",
"EVITE_SESSION_CACHE": "ใส่ค่าของคุณ",
"EVITE_SESSION_FILE": "ใส่ค่าของคุณ",
"EVITE_DISABLE_FETCHPROXY": "ใส่ค่าของคุณ",
"EVITE_UPLOAD_DIR": "ใส่ค่าของคุณ",
"FETCHPROXY_WS_PORT": "ใส่ค่าของคุณ",
"FETCHPROXY_WS_HOST": "ใส่ค่าของคุณ",
"FETCHPROXY_IDENTITY_DIR": "ใส่ค่าของคุณ"
}
}
}
}เบราว์เซอร์จะถามก่อนเปิดแอป จากนั้นแอปแสดงค่าตั้งให้ตรวจแล้วกดยืนยัน ช่อง key เว้นว่างไว้ให้คุณใส่เอง
ตัวนี้รันในเครื่องคุณ แต่ ChatGPT ต่อได้เฉพาะ server บนอินเทอร์เน็ต ลองเลือกแอปอื่น
ตัวเลือกเก็บในคุกกี้บนเครื่องนี้ ไม่ต้องมีบัญชี
EVITE_EMAIL envEVITE_SESSION_CACHE envEVITE_SESSION_FILE envEVITE_DISABLE_FETCHPROXY envEVITE_UPLOAD_DIR envFETCHPROXY_WS_PORT envFETCHPROXY_WS_HOST envFETCHPROXY_IDENTITY_DIR envค่าตั้งนี้สร้างจากข้อมูลใน registry ของผู้ทำ ถ้าไม่ตรงกับ README ให้เชื่อ README
รันในเครื่องคุณ รายการเครื่องมือจะขึ้นในแอป AI หลังติดตั้ง
เราตรวจจากข้อมูลที่ใครก็เปิดดูได้ ยังไม่ได้อ่านโค้ด ข้อที่ไม่เกี่ยวกับตัวนี้ไม่นับในตัวหาร · ตรวจเมื่อ 7 พ.ย. 2569
ชื่อใน registry ยืนยันด้วยบัญชี GitHub chrischall ซึ่งเป็นเจ้าของ repo
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ยังไม่ได้อ่านข้อมูล repo จาก GitHub
ตัวนี้รันบนเครื่องคุณ ไม่มี endpoint บนอินเทอร์เน็ต
ตัวนี้รันบนเครื่อง ใช้ค่าที่ตั้งในเครื่องแทน
รันในเครื่องคุณ เราอ่านรายการเครื่องมือได้เฉพาะตัวที่มี endpoint บนอินเทอร์เน็ต
เทียบกับทุก server ที่ยังใช้งานในหมวดนี้ทั้งทะเบียน ดาวนับเฉพาะเมื่อผู้ลงทะเบียนเป็นเจ้าของ repo
จากการตรวจเบื้องต้นของเรา ผ่าน 1 จาก 1 ข้อที่ตรวจได้ เรายังไม่ได้อ่านโค้ด ก่อนใส่กุญแจหรือ token ให้ดูว่า server ขอสิทธิ์อะไร และเลือกกุญแจที่ทำได้เท่าที่จำเป็น
ต้องใส่ค่าเหล่านี้: EVITE_PASSWORD, EVITE_SESSION_COOKIE
รันบนเครื่องของคุณ โปรแกรม AI จะเปิด server ขึ้นมาเองเมื่อใช้ ข้อมูลไม่ต้องผ่านเซิร์ฟเวอร์ของผู้ทำ (ยกเว้นตัวที่ไปเรียกบริการออนไลน์ต่อ)
repo บน GitHub มีการแก้โค้ดล่าสุด – และส่งรุ่นล่าสุด (1.4.0) เข้า registry เมื่อวานซืน
โปรแกรมที่รองรับ MCP เช่น Claude Desktop, Claude Code, Cursor และ VS Code ตัวนี้ต้องมี Node.js ในเครื่องด้วย
ในหมวดเดียวกันมี Spec Driven Development, Remote Desktop Commander, SuperCollider
server หมวดเดียวกันจากผู้ทำคนอื่น เรียงตามดาว
อ่านการ์ด:★ ดาว GitHubiสามเสา: รีวิว · ผลตรวจ · การใช้งานiอัปเดต = วันที่ส่งรุ่นล่าสุดเข้า registryi
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Make sound with SuperCollider: synths, drums, chords, melodies and soundscapes over OSC.
ส่วนนี้คัดจาก repo ของผู้ทำตามต้นฉบับ PopNx MCP ไม่ได้ตรวจหรือรับรองเนื้อหา ตัด HTML รูปภาพ และสคริปต์ออกแล้ว ลิงก์จะพาออกนอกเว็บ
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).
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 |
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.
| 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. |
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):
EVITE_UPLOAD_DIR (below).{ filename, content_base64 }. Works anywhere; meant for a small photo, since every byte rides inside the tool call.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. |
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:
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.)*cookie: header copied from a signed-in evite.com tab (or set in CI). Used verbatim. *(Live.)*x-evite-session, evtsession, x-evite-features, csrftoken) from a signed-in evite.com browser tab via @fetchproxy/bootstrap, 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- .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):
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).
npm install # resolves @chrischall/mcp-utils from a local tarball (see issue #4)
npm run build npm test
docs/superpowers/specs/2026-05-31-evite-mcp-design.mddocs/superpowers/plans/2026-05-31-evite-mcp-scaffold-and-spike.mddocs/superpowers/plans/2026-05-31-evite-mcp-auth-and-reads.mddocs/EVITE-API.mdOpen work: #3 — write endpoints + CSRF are now live-verified; only a couple of request *bodies* (send / send-message) remain assumed. #4 tracks publishing the shared lib. (Discovery #1, tier-1 email/password login #2, and the read tools are done.)
MIT