evite-mcp
evite-mcp reads and acts on your Evite events as both guest and host — with every write confirmed before anything is sent.
Read events: list your events (
filterByall/host/others, status filters, paging) with totals, and get full detail for a single event.Read people & activity: guest list with RSVP responses, delivery status and head counts; a condensed RSVP summary; and the event's Messages thread.
Browse invitation templates by gallery category to find the
template_nameneeded to create an event.RSVP for a guest (yes/no/maybe + adult/kid head counts + optional note).
Message guests: private message to one guest, or broadcast to whole RSVP segments (yes/no/maybe).
Upload photos from a local directory to an event's shared gallery (4-step GCS signed upload, size/type/path restrictions).
Manage events: create a draft, edit fields, cancel/delete, reinstate, duplicate into a fresh draft.
Manage guest drafts: add
{name,email}guests, edit name/email/phone, remove; then "Send now" to email the invitations.Authoring flow:
evite_create_event→evite_add_guest→evite_send.Safety: every write asks first — a prompt where supported, else a preview plus single-use
confirmToken;MCP_CONFIRM_MODE/ELICITATION/TTL/SECRETcontrol this. Send, message, broadcast and cancel have real guest-visible effects.Auth: email/password login, raw session cookie, or signed-in browser tab bootstrap;
evite_healthcheckreports status and resolved auth mode.
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, 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 local image to the event's shared photo album (4-step GCS signed upload) |
|
| 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
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
20 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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds substantial behavior beyond annotations (which only declare readOnlyHint=false, openWorldHint=true, destructiveHint=false): the confirmation gate, the confirmToken two-step fallback with reuse prohibition, and the critical caveat that guests only persist on a finalized event, not a bare draft. This is high-value disclosure an agent could not derive from schemas or annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core action and the no-email guarantee, then progressively discloses the confirmation protocol and persistence caveat. Dense but every clause earns its place; the 'NB' and 'MCP_CONFIRM_MODE' references are slightly jargon-heavy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers action, side effects, confirmation protocol, token lifecycle, and a persistence footgun – everything needed to call this mutation safely. No output schema exists, but the important response semantics (preview/confirmToken in phase 1) are described inline.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description adds real semantics for confirmToken (fallback-only, never invented, never on first call, ignored under elicitation) that the schema description only partially covers. The 'guests' semantics ('draft/un-sent list') are also reinforced.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb (add) + resource (guests) + scope (a draft, un-sent guest list) that clearly distinguishes it from evite_update_guest, evite_remove_guest, and evite_send. An agent can route correctly without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when nothing is emailed ('until you evite_send') and gives the full confirmation flow, including the two-phase fallback when elicitation is unsupported. This is exactly the when/when-not/alternatives guidance the dimension asks for.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint=true and openWorldHint=true, and the description adds the behavioral detail that matters most: it genuinely emails all guests, a failed/timed-out call may still have sent, and a user confirmation (elicitation or preview+confirmToken round-trip) is required before sending. This goes well beyond what the annotations convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, no filler, and the headline action is front-loaded before the side-effect warning and the confirmation mechanics. The confirmation sentence is dense but each clause (elicitation path, fallback path, token rule) carries distinct information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, no-output-schema send tool, the description covers the action, side effects, failure/retry semantics, and the required confirmation protocol. An agent has everything needed to invoke it safely without additional context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so groups, message, event_id, and confirmToken are already documented in the schema (including the strict 'never on the first call, never reused' rule). The description adds the overall preview/confirmToken flow but no parameter-level detail beyond it, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (broadcast) and resource (a message to RSVP segments of an Evite event), plus the bulk scope ('at once') that separates it from per-guest siblings like evite_send_message. An agent can identify the operation and its blast radius without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear usage context: it emails every guest in the selected segments, it routes the agent to evite_list_messages after a failure/timeout before retrying, and it documents the confirmation gate and MCP_CONFIRM_MODE fallback. It does not explicitly contrast with evite_send_message/evite_send for single-recipient sends, but the segment-scoped framing makes the boundary implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, yet the description adds what those hints cannot: cancellation notices may reach guests, the action is recoverable via evite_reinstate_event, and the exact two-phase confirmation contract (preview + confirmToken, repeat call with same arguments, MCP_CONFIRM_MODE). That is real behavioral context beyond structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the action, immediately flags DESTRUCTIVE, then explains reversibility and the confirmation mechanism in order of importance. Every clause carries decision-relevant information; nothing is filler despite the density.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, open-world, confirmed-write tool with no output schema, the description covers side effects, reversibility, and the full confirmation protocol an agent must implement. Nothing needed to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3, but the description supplies flow-level meaning the schema alone implies only locally: confirmToken is never sent on the first call, is never invented or reused, and is ignored entirely under elicitation. It also anchors event_id's origin (evite_list_events) alongside the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Cancel an Evite event') plus the secondary scope (draft deletion), and names the inverse sibling evite_reinstate_event. An agent can distinguish this from evite_update_event or evite_remove_guest without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context for use (cancelling events, deleting drafts) and routes the agent to evite_reinstate_event when reversal is needed. It does not spell out explicit 'do not use for X' exclusions, but the destructive warning plus the named alternative covers the main routing decision.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=false, destructiveHint=false, openWorldHint=true. The description adds genuinely non-obvious behavior: the mandatory confirmation gate, the elicitation vs. confirmToken fallback, and the upstream 500-on-success quirk with its re-list-and-report workaround. This is exactly the behavioral context structured fields cannot carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and required fields, then the confirmation protocol, then the failure handling. Every sentence carries information, though the run-on em-dash clauses in the middle make it denser than it needs to be.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and a mutation that can fail ambiguously, the description supplies the return contract itself (created:true with eventId, or created:"unknown"), which is the single most important thing an agent needs to avoid duplicate drafts. Nothing material is left unspecified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3, but the description reinforces the three required fields and, more importantly, explains confirmToken's role in the phase-1/phase-2 flow and when it must never be sent. That is meaning beyond the schema's per-parameter text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Create an Evite event') plus a scope qualifier ('as a draft') that separates it from evite_duplicate_event and evite_update_event. An agent can identify the operation and its intended state without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear operating context: it asks for user confirmation first, describes both confirmation paths, and explicitly rules out repeat calls for the same event ('never call it again... check the drafts instead'). It stops short of naming the sibling tool (evite_list_events) as the alternative, so the routing is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint=false, destructiveHint=false and openWorldHint=true. The description goes further by disclosing that the result is a draft (not a live/sent event), that a new event id is returned, and that a confirmation gate with a confirmToken fallback governs execution — meaningful behavioral context beyond the structured fields, though permissions/auth requirements are still unstated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and return value, followed by the confirmation protocol; no sentence is wasted. The nested parenthetical about the fallback path is dense but earns its place by preventing misuse of confirmToken.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description supplies the return value (new draft event id), the confirmation contract, and the token fallback — everything an agent needs to call this mutation safely and correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both event_id and confirmToken are already documented in the schema, and the description largely restates the confirmToken protocol rather than adding new semantics. Baseline 3 is appropriate when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Duplicate an Evite event into a fresh draft') and names the exact UI action it mirrors. It is clearly distinguishable from siblings like evite_create_event and evite_update_event without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear operational context: confirmation is required first, and the two-step fallback applies only to clients without MCP elicitation. It does not, however, state when to prefer this over evite_create_event or any other sibling, so it stops short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so safety and network reach are covered. The description adds the endpoint shape and hints at returned sections (event, settings, location), but says nothing about auth requirements, error behavior for a missing/unauthorized event_id, or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One compact, front-loaded sentence that leads with the verb and resource and puts the endpoint reference in parentheses. The closing "and more" is vague filler that doesn't earn its place, but nothing else is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read tool with full schema documentation, readOnly/openWorld annotations, and no output schema to explain, the description is nearly complete. It only lacks any note on error or permission behavior for invalid event ids.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both parameters (including the view enum with its compact/full tradeoff) are thoroughly documented in the schema itself. The description adds no parameter syntax or format detail beyond what the schema already carries, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Get a single Evite event detail") and names the underlying endpoint, so the agent knows this is a single-resource fetch. The word "single" implicitly distinguishes it from the evite_list_events sibling, but no sibling is named explicitly and the trailing "and more" leaves the payload scope fuzzy.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no explicit when-to-use or when-not-to-use guidance. The only routing hint is in the schema ("event_id from evite_list_events"), which implies a list-then-fetch flow and identifies the sibling to obtain the id from. Usage is therefore inferred rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
evite_healthcheckARead-only
Report evite-mcp status and the resolved auth mode.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=false, so the safety profile is covered. The description adds value beyond that by disclosing that the response includes the resolved auth mode, not just a bare up/down status, which is behavioral context an agent would not get from the annotation block alone.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; both what is checked and what is returned are stated without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no parameters, no output schema, and annotations covering the read-only profile, the description supplies the one thing missing from structured data: the shape of what comes back (status plus auth mode). It stops short of enumerating possible status values or formats, a minor gap for a diagnostic endpoint.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, which sets the baseline at 4. There is nothing further for the description to clarify about arguments.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Report') and resource ('evite-mcp status and the resolved auth mode'), giving an agent an unambiguous sense of what the call returns. It is clearly a diagnostic among a sibling set composed entirely of event/guest/message operations, so no ambiguity with siblings exists.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: an agent can infer this is the call to make when verifying connectivity or the active auth mode, but the description never says when to prefer it or what conditions warrant running it. No alternatives exist among the siblings, so no explicit exclusion is needed, keeping this at the minimum-viable level.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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.
| 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. | |
| filter | No | Free-text search over event titles. | |
| offset | No | Pagination offset. | |
| status | No | Repeatable status filter (upcoming, draft, archived, past, canceled). | |
| filterBy | No | Whose events to list: all, host (you are hosting), or others (you are a guest). | all |
| numResults | No | Page size. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds genuine value a schema cannot: it discloses the return shape ('events plus a totals breakdown') despite no output schema, and clarifies the guest view for filterBy=others. It omits pagination behavior, sort order, and any rate or auth constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences with the core purpose and return shape front-loaded and no filler. The endpoint path '(GET /services/events/v1/)' is arguably noise for an agent, but it does reinforce the read-only nature of the call.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With six fully documented parameters, read-only/open-world annotations, and no output schema, the description covers the essentials: what it lists, what comes back, and the one non-obvious filter mode. Remaining gaps (ordering, pagination semantics beyond the schema, cross-tool sequencing) are minor for a zero-required-parameter listing tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter is already documented in detail, which sets the baseline at 3. The description's only parameter content ('filterBy=others returns events where you are a guest') largely restates the schema's own 'others (you are a guest)' text, adding no new syntax, defaults, or interaction rules.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('List your Evite events') and even pins the underlying endpoint, so the agent knows this retrieves a collection rather than a single record. The resource name implicitly separates it from siblings like evite_list_guests, evite_list_templates, and evite_get_event, though no sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: the agent can infer this is the browsing entry point for events, and the filterBy=others note hints at a guest-perspective mode. There is no explicit when-to-use/when-not guidance, no mention of alternatives (e.g., evite_get_event for a single event), and no prerequisites such as authentication context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered and the description only needs to add context. It usefully previews the response contents but says nothing about pagination, result volume, freshness, or auth requirements, and 'and more' indicates the field list is deliberately partial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with a parenthetical endpoint and a compact field list; nothing is padded. The trailing 'and more' is slightly filler but costs little.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description responsibly sketches the return contents (name, RSVP, head counts, delivery status) so the agent knows what comes back. It is thin on pagination/volume behavior, but the schema exposes no paging parameters, so the gap is minor.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents both event_id and the compact/full view enum, including the projection caveat. The description adds no parameter-level detail beyond referencing the endpoint path, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (List) and resource (guests) scoped to an Evite event, and enumerates the returned fields (name, RSVP response, head counts, delivery status). It is clear and agent-legible, but it does not distinguish itself from the overlapping sibling evite_rsvp_summary or evite_get_event, which also surface RSVP/head-count data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit when-to-use guidance and no mention of alternatives such as evite_rsvp_summary (aggregate counts) or evite_get_event (single event detail). The use case is only implied by the verb 'List', leaving the agent to infer routing on its own.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds the endpoint path and the tab scope, but says nothing about pagination, ordering, or rate limits that a list tool would benefit from disclosing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single tight sentence front-loads the verb, resource, and scope, then appends the endpoint. Every clause earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read tool with full schema coverage and readOnly annotations, the description is adequate but thin: it omits result ordering, pagination, and how 'Messages tab' content differs from other message endpoints. No output schema exists, so return-shape expectations are left unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both event_id and view are fully documented in the schema, including the compact/full enum semantics. The description adds no parameter-level detail beyond what the schema provides, matching the baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (List) and resource (messages on an Evite event's Messages tab), and includes the underlying endpoint. It doesn't differentiate from the closest sibling evite_send_message, though the read/write distinction is implied.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by 'List the messages on an Evite event's Messages tab' — an agent infers it's for reading event messages — but there is no explicit when-to-use versus evite_send_message or evite_broadcast, and no stated prerequisites beyond needing an event id.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint and openWorldHint, so the safety profile is covered. The description adds value beyond that by disclosing the return shape ('each template's slug (= template_name) and a readable display name'), filling in the absence of an output schema. It doesn't mention rate limits or result volume, hence not a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the core action and purpose, then parameter notes. Every sentence carries information that isn't duplicated elsewhere; nothing is padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description supplies the needed return-value account (slug plus display name), names the consuming tool, and documents all three parameters. Nothing an agent needs to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline is 3. The description goes further by giving realistic category path examples and restating free_only's effect, and it uniquely maps the returned slug to the `template_name` string other tools expect — meaning not present in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('List invitation templates from a gallery category') and immediately explains the downstream purpose: finding the `template_name` that evite_create_event requires. This clearly distinguishes it from read siblings like evite_list_events or evite_get_event.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly names the condition that selects this tool — locating `template_name` before calling evite_create_event — and shows concrete category path values. An agent knows both when to call it and what to do with the output.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare the safety profile (readOnly=false, destructive=false, idempotent=true, openWorld=true), and the description adds genuinely new behavioral context the annotations cannot convey: a mandatory user confirmation step, an elicitation-capable prompt path, and a two-phase preview/confirmToken fallback with the rule that the token is never sent on the first call. That is exactly the kind of invocation-critical behavior this dimension rewards.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, purpose front-loaded, then the confirmation protocol. No filler, no restatement of the title, and the parenthetical pointer to MCP_CONFIRM_MODE is a compact way to offload detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter mutation with no output schema, the description covers what an agent needs: scope, the inverse relationship, and the full confirmation choreography including the confirmToken return path. It does not describe the success outcome of the reinstate itself, a minor gap given no output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters, including the detailed confirmToken contract, are already documented in the schema. The description's mention of confirmToken and the preview response reinforces but does not add syntax or format meaning beyond that. Baseline 3 applies when the schema carries the parameter burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Reinstate a previously-cancelled Evite event') and immediately anchors it to its sibling by calling itself 'the inverse of evite_cancel_event'. An agent can distinguish it from the cancel tool without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The inverse-of-cancel framing makes the applicable context clear (only for already-cancelled events), and the description spells out the two confirmation paths so the agent knows how to invoke it. It stops short of explicitly stating preconditions (e.g. that the event must currently be cancelled) or an alternative sibling to use otherwise.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructive/idempotent/openWorld, but the description adds the operationally decisive detail they cannot: a mandatory user-confirmation step, with two distinct modes (native elicitation vs. preview-then-confirmToken) and a pointer to MCP_CONFIRM_MODE. This tells the agent what the first call actually does and prevents an accidental unconditional delete.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the what/scope before the confirmation mechanics. The second sentence is dense with nested clauses but each one carries real procedural information, so nothing is padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive tool with no output schema, the description covers the confirmation contract, which is the main ambiguity. It leaves minor gaps: whether removal is permanent/reversible, what happens if the guest is not actually a draft, and whose authorization is required.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the confirmToken field already carries an unusually thorough description of its lifecycle. The description only restates the token gating at a high level, adding little semantic detail beyond what the schema provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (remove) and resource (guest), and narrows scope with the crucial qualifier 'draft (un-sent)', which immediately separates it from anything touching already-invited guests. An agent can pick this out from the 19 siblings without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context: this is for un-sent draft guests, and it lays out the confirmation gate the agent must respect. It stops short of naming an alternative or stating explicitly what to do when the guest has already been sent (e.g. that no tool covers that case), so it is clear context without full exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructive (writes an RSVP) and openWorld. The description adds crucial non-annotation behavior: a confirmation step, a preview + confirmToken two-step fallback, and that the token must never be reused or invented. This is exactly the extra detail annotations can't convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One dense but efficient sentence. It front-loads the action and then qualifies the confirmation behavior. Slightly packed but no filler sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a mutation tool with annotations covering safety and a confirmation path that must be understood to call correctly, the description covers the non-obvious flow. It doesn't explain required preconditions (event/guest existence) or return shape, but no output schema exists to cover that, so a small gap remains.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all 7 params. The description adds no param-level detail beyond the schema, which is acceptable given full coverage — baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: 'RSVP for a guest on an Evite event.' Clearly distinguishes from siblings like evite_update_guest or evite_add_guest — this sets an attendance response, not guest metadata.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains the confirmation flow, which is useful context, but doesn't say when to choose this tool over alternatives (e.g., why not evite_update_guest) or the precondition that the event/guest must exist and the event allow RSVPs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the safety profile is covered. The description adds useful context about the returned fields and the fact that it is a derived/aggregated view rather than raw guest records, but says nothing about freshness, staleness of the aggregate, permissions, or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero waste, with the resource and returned content front-loaded. The trailing provenance sentence is short and genuinely informative about data origin.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully names the returned fields (yes/no/maybe/noReply plus adult/kid counts), which is enough for a read-only aggregate tool. Minor gaps remain around whether derived counts can lag behind guest updates, but nothing critical for invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the view enum is documented at length in the schema itself, including the compact/full tradeoff. The description adds no parameter information beyond the schema, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get the RSVP summary for an Evite event') and even enumerates the returned buckets, so the agent knows exactly what comes back. It does not explicitly distinguish itself from the sibling evite_rsvp or evite_list_guests, which is the only thing keeping it from a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance and no named alternative, despite evite_rsvp and evite_list_guests being obvious candidates an agent might confuse it with. The note that it is 'derived from the event guests endpoint' hints at its relationship to the guest data but stops short of routing advice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and openWorldHint=true, but the description goes further by disclosing that real guests are emailed (irreversible external effect), that a timeout may still have sent the invitation (non-idempotency), and that a confirmation gate applies. It does not cover rate limits or per-invitee partial-failure behavior, which keeps this short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action and the caps-lock warning, and every clause carries information; nothing is filler. It is dense to the point of being hard to scan, with nested parentheticals in the confirmation sentence, so it falls short of a model two-sentence structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, no-output-schema, one-required-param tool, the description covers the safety gate, the retry hazard, the recovery tool, and the confirmation-token protocol. An agent has everything it needs to call this correctly and to avoid double-sending.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3, and the description earns an extra point by framing confirmToken as a phase-2-only artifact tied to the preview and MCP_CONFIRM_MODE, which is context the schema field alone does not convey. event_id semantics are left entirely to the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Send the invitation to the ready-to-send (draft) guests of an event') and scopes it to draft/ready-to-send guests, which cleanly separates it from siblings like evite_send_message, evite_broadcast and evite_rsvp. An agent can identify the tool without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit pre-call conditions (user confirmation first), an explicit failure path ('If a call fails or times out... check evite_list_guests before calling again'), and names the alternative tool to consult. It also states what the token-based path is for versus clients with elicitation support.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well past the annotations: it discloses that the message is actually delivered ('This really notifies the guest'), that it is sent as the event host over Firebase rather than REST, that host privileges are required, and it details the two-phase confirmation behavior including preview, confirmToken, and MCP_CONFIRM_MODE. This is exactly the extra behavioral context annotations cannot carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four sentences, front-loaded with the action and immediately followed by the critical 'really notifies' caveat and the auth constraint. Dense but nearly every clause carries information; a minor typo ('This really notifies') and the parenthetical about Firebase are the only slack.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description still explains what the confirmation-required response contains (a preview and a confirmToken) and how to proceed, and it covers the auth requirement and the mutation's real-world effect. Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds real value by framing confirmToken as a conditional, second-call-only artifact tied to the confirmation fallback and cross-referencing MCP_CONFIRM_MODE, which the schema field alone does not establish as a flow.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Send a private message to one Evite event guest'), and the word 'one' plus 'private' implicitly distinguishes it from broadcast-style siblings like evite_broadcast and evite_send. An agent can select it without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear preconditions: only a host can use it, it targets a single guest, and it requires confirmation before proceeding. It does not explicitly name an alternative (e.g. evite_broadcast) for the many-guests case, so it falls just short of full when/when-not routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag destructiveHint/openWorldHint, but the description adds the crucial behavior that this mutation is gated behind user confirmation, including the exact two-phase preview + confirmToken fallback and the MCP_CONFIRM_MODE reference. That is a substantial disclosure an agent cannot get from the annotations alone, and it is consistent with them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the action and the patch contract before the longer confirmation detail, with no filler sentences. The second sentence is dense and long, but every clause carries operational meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description partially compensates by describing the phase-1 preview/confirmToken response shape. Combined with 100% schema coverage and destructive annotations, an agent has enough to call it correctly, though it never states required permissions or what happens to unmentioned fields beyond preservation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3; the description earns above baseline by stating the partial-update contract ("only the fields you pass change"), which tells the agent that unspecified fields are preserved. It adds little else about individual parameters, since the schema already documents event_id, confirmToken, and the datetime fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ("Edit") and resource ("an existing Evite event") plus the patch semantics ("only the fields you pass change"), which separates it from evite_create_event and the other event lifecycle siblings. It stops short of naming a sibling directly, but the distinction is inferable without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description spends its guidance budget on the confirmation mechanism (confirm first, or the two-step confirmToken fallback), which is procedural rather than selection guidance. It never says when to prefer this over evite_create_event, evite_duplicate_event, or evite_cancel_event, so tool-selection context is only implied by the word "existing".
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and openWorldHint=true; the description goes further by disclosing the full confirmation protocol, including that the first call may return only a preview plus confirmToken and that the token must never be invented or reused. It does not explain why the operation is destructive (e.g., whether the guest is re-notified), which leaves one behavioral gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core action before the confirmation caveat. The second sentence is long but every clause (preview, token, repeat call, MCP_CONFIRM_MODE pointer) carries necessary operational detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no output schema, the description covers the unusual two-phase confirmation contract well enough for correct invocation. It omits what a successful edit returns or side effects on the guest's invite status, which would round out the picture.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so name, email, phone, event_id, guest_id and confirmToken are already documented in the schema. The description confirms which fields are editable but adds no format, validation, or sourcing detail beyond the schema text; the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (edit), resource (guest), the editable fields (name/email/phone), and a scope constraint (draft/un-sent only), which implicitly separates it from evite_add_guest and evite_remove_guest. It stops short of naming any sibling tool outright, so it is clear but not fully self-differentiating.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'draft (un-sent)' qualifier tells the agent when this tool applies and implicitly excludes already-sent guests, and the confirmation protocol explains the call sequence. No alternative tool is named for the sent-guest case, so the routing guidance is contextual rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
evite_upload_photoADestructive
Upload a local image 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). 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 | Yes | 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. | |
| 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 file). 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. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only say non-read-only, open-world, destructive; the description goes well beyond them by disclosing the two-phase confirmation protocol, the confirmToken round-trip, the MCP_CONFIRM_MODE fallback behavior, and the guest-membership requirement. That is exactly the operational context an agent needs before a mutating call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the action, then prerequisites, then the confirmation mechanics — a sensible priority order. Dense but each sentence carries load; the parenthetical "(see MCP_CONFIRM_MODE)" is a slight deferral rather than an inline explanation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutating tool with no output schema, the description covers the confirmation path and its return shape (preview + confirmToken) but says nothing about the success response after the upload actually lands. That is a modest gap in an otherwise thorough definition.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description usefully ties guest_id to its source call and explains the lifecycle of confirmToken (phase-1 response, repeat call with identical arguments, ignored under elicitation). It does not add new meaning for path/mimetype beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Upload a local image to an Evite event's shared photo gallery") and disambiguates further with "This really adds the photo to the event album," ruling out any preview/dry-run reading. No sibling tool touches photo galleries, so the agent can select it unambiguously.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete prerequisites and routing (event_id from evite_list_events, guest_id from evite_list_guests) plus the mandatory confirmation sequence. It never states when NOT to use it or names an alternative, but for a one-of-a-kind upload tool the omitted exclusions are minor.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
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 20 tools
Each tool targets a distinct resource and action, with no true duplicates. Potential overlaps like evite_send vs evite_send_message vs evite_broadcast are clearly separated by scope (invitations, private guest chat, segment broadcast).
All tools use the evite_ prefix and snake_case, giving a consistent, recognizable style. Most follow a verb_noun pattern, though a few are verb-only (evite_send, evite_rsvp, evite_broadcast) or noun-only (evite_healthcheck), which are minor deviations.
20 tools is on the heavy side for an MCP integration and falls into the borderline 16-25 range. Most map to distinct Evite operations, but a few (e.g., evite_rsvp_summary derived from guest data) could potentially be consolidated.
The core event and guest lifecycle is well covered: create, update, duplicate, cancel, reinstate, list, guest management, RSVP, messaging, and photo upload. Minor gaps remain, such as photo listing/removal, event search, and richer guest detail operations.
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
- FlicenseNot gradedqualityDmaintenanceA Model Context Protocol (MCP) server for managing Google Calendar events.-
- FlicenseDqualityDmaintenanceMCP server for interacting with Google Calendar, enabling reading events from public calendars and, with OAuth, creating, updating, and deleting events.1-
- 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-