Skip to main content
Glama

Server Details

Create, design and send event invitations, manage guest lists, and track RSVPs.

Ownership verified
Status
Healthy
Uptime
99.5% over 42 days
OAuth
Works in Glama
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

A4.5/5.0

Scored across 18 tools

Disambiguation4/5

Tools are mostly well-differentiated, with explicit cross-references guiding agents away from misuse. There is mild overlap among lemonvite_add_guests, lemonvite_invite_contacts, and lemonvite_add_contacts since all deal with people, but the resource targets (event guest list vs. address book) are clearly explained.

Naming Consistency5/5

All 18 tools use the lemonvite_ prefix followed by a consistent verb_noun snake_case pattern, e.g. lemonvite_add_guests, lemonvite_update_invitation, lemonvite_list_guests. No naming style deviations are present.

Tool Count4/5

With 18 tools, the set is slightly above the ideal 3-15 range but remains reasonable for a domain covering invitations, guests, contacts, designs, payments, and account status. Each tool maps to a meaningful operation, though some consolidation could be possible.

Completeness4/5

Core lifecycle operations are covered: create/get/list/update/publish invitations, full guest management, contact search/add/remove, design generation/editing, and checkout. Minor gaps include no tool to cancel or delete an invitation and no update_contacts operation, but these are not critical for the main workflows.

Available Tools

18 tools
lemonvite_add_contactsAdd contactsAInspect

Use this when the user wants people saved to their Lemonvite contact list (address book) for future invitations without inviting them to an event now; to invite people, use lemonvite_add_guests or lemonvite_invite_contacts. Send the whole list in one call of up to 50 contacts; each needs at least a name, email or phone, and a malformed email or phone fails only its own contact. Contacts are matched by email or phone: one whose email or phone is already saved is not saved again, but a name-only contact is saved every time, so search before saving it again. The contacts page on Lemonvite shows the result. Nobody is messaged. The address book holds at most 2000 contacts; a batch that would pass that saves nothing.

ParametersJSON Schema
NameRequiredDescriptionDefault
contactsYesBatch of 1–50 contacts to save.

Output Schema

ParametersJSON Schema
NameRequiredDescription
addedYes
failedYes
failuresYesContacts that failed validation, with the reason. A refusal of the whole call is in the text.
duplicatesYesContacts not saved again because their email or phone is already saved.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only supply readOnly/destructive/idempotent/openWorld hints; the description goes well beyond them by disclosing dedup semantics (matched by email or phone, name-only re-saved every time), the 2000-contact cap with all-or-nothing batch rejection, per-contact partial validation failure, and that nobody is messaged. These are the operationally decisive facts an agent needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the routing rule, then batch limits, dedup, and cap behavior in compact clauses. Every sentence carries an operational fact, though the density is near the upper bound for a single-call description.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values need no explanation; the description covers scope, alternatives, batch limits, validation behavior, dedup, and the hard cap. 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.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and documents the batch and field limits, so the schema carries most of the load. The description adds genuine value the schema does not: each contact needs at least a name, email, or phone (the item schema has no required array), and that malformed email/phone fails only its own contact.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('people saved to their Lemonvite contact list (address book) for future invitations') and immediately contrasts the scope with sibling tools (lemonvite_add_guests, lemonvite_invite_contacts). An agent can distinguish this from the invite/guest tools 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.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use ('without inviting them to an event now') plus named alternatives and the condition that selects each. It also advises searching before re-saving name-only contacts, giving a concrete pre-call workflow.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lemonvite_add_guestsAdd guestsA
Destructive
Inspect

Use this when the user wants people actually added to the guest list of an existing Lemonvite invitation; do not use it while the user is only brainstorming whom to invite. Send the whole list in one call of up to 50 guests, not one call per guest; each needs at least a name, email or phone. Get event_id from lemonvite_list_invitations. On a published invitation, new guests with an email or phone are invited immediately; on a draft, invitations go out at publish. Adding a guest by phone requires host_confirms_sms_consent=true, meaning the host confirmed these people agreed to receive SMS about this event. The total guest_limit applies to drafts too; only support can raise it. Phone guests beyond the phone allowance are priced in saved batches at publishing on a draft; on a published invitation they return payment_required for the whole call, and none of its guests is saved. Explain the credit cost and the new phone allowance. If needed: Buy the creditsToBuy shortfall with lemonvite_start_checkout without event_id. Then retry only the unsaved guests with authorized_credits after explicit host confirmation. Those credits are shared with publishing; these guests add no further publishing charge. Each guest gets its own result; an invalid or already-invited guest fails alone without stopping the others. To fix an existing guest use lemonvite_update_guests.

ParametersJSON Schema
NameRequiredDescriptionDefault
guestsYesBatch of 1–50 guests to add. Each needs at least a name, email, or phone. Guests with contact details are invited immediately if the event is published.
event_idYesLemonvite event_id returned by lemonvite_create_invitation or lemonvite_list_invitations. Identifies the event to act on; not a guest invitation_id or RSVP URL.
authorized_creditsNoMaximum shared account credits the host explicitly agreed to spend across this entire request. Default 0: return payment_required without spending. Explain the credits used and the increased phone allowance, and obtain confirmation before setting this.
host_confirms_sms_consentNoSet true only when the host confirms the guests agreed to receive SMS about this event. Required when adding guests with phone numbers.

Output Schema

ParametersJSON Schema
NameRequiredDescription
addedYes
failedYes
resultsYes
guest_countYes
credits_usedYes
payment_requiredNoPresent when the batch needs phone allowance credits the call did not authorize. No guest was saved.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare a write/destructive/non-idempotent/open-world profile, and the description substantially enriches it: immediate invitation on published vs deferred to publish on draft, SMS consent requirement, guest_limit immutability, phone pricing behavior, payment_required short-circuit that saves no guests, per-guest isolation of failures, and credit sharing with publishing. This goes well beyond what 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Long but front-loaded with purpose and batch rule; nearly every sentence carries operational weight given payment, SMS-consent, and batch complexity. It reads as one dense block rather than scannable sections, which is the only weakness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need not be described, and the description still covers the branching behaviors (published vs draft, consent, credits, per-guest results) an agent needs to call this correctly. Complete for a high-complexity write tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the schema carries parameter definitions; the description nonetheless adds workflow meaning beyond it, explaining the authorized_credits shortfall/buy-then-retry loop and the semantic weight of host_confirms_sms_consent. Marginal but real added value over the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('people actually added to the guest list of an existing Lemonvite invitation') and explicitly fences off the nearest sibling behavior (brainstorming) and the update path (lemonvite_update_guests for fixing existing guests). An agent can distinguish this from list/add/update/invite siblings without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use, when-not ('do not use it while the user is only brainstorming whom to invite'), batch guidance ('send the whole list in one call of up to 50 guests, not one call per guest'), and names alternatives (lemonvite_update_guests, lemonvite_start_checkout). Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lemonvite_create_invitationCreate a Lemonvite invitationA
Destructive
Inspect

Use this when the user wants an actual Lemonvite invitation or RSVP page for an event, party, celebration or gathering: create an invitation, make an invite, set up RSVPs, or use an invitation image created or selected in this conversation (pass it as invitation_image). It creates a DRAFT only and does not publish, charge, or contact anyone during this call. Optional invitation_image downloads and stores the supplied artwork; optional reminder_date schedules a later email to the host through the reminders service. Do not call it merely because invitation wording or images are being discussed. Required: title, event_type, start_datetime, timezone and, for in-person events, location_name (a venue name; the address is optional). Everything else can be added later with lemonvite_update_invitation. If a required detail is missing or invalid, nothing is created and the error names the field to ask the user about. Next steps: lemonvite_add_guests to invite people, then lemonvite_publish_invitation to go live (lemonvite_start_checkout first if payment_status is payment_required).

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYesEvent title, max 60 characters
timezoneYesIANA timezone of the event's venue (e.g. America/New_York). Required — ask the user if unknown; the wall-clock times are interpreted in this timezone.
host_nameNoHost name shown on the invitation ("from …"). Defaults to the account's display name — required at create when the account has none (e.g. phone-only signups).
event_typeYesOne of: birthday, wedding, party, baby-shower, celebration-of-life, general. Use 'general' when unsure.
is_virtualNoTrue for an online event using virtual_url; false for an in-person event requiring location_name. Defaults to false on create.
max_guestsNoEvent capacity — the most guests that can RSVP yes. null = uncapped.
descriptionNoInvitation wording/details shown to guests
virtual_urlNoMeeting URL for virtual events
end_datetimeNoEvent end, local wall-clock ISO-8601 with no UTC offset. Pass null to remove an existing end time.
custom_fieldsNoThe host's custom fields — the COMPLETE list, in display order, replacing what is saved. Two kinds: `info` = a detail shown on the invitation for guests to read (gift registry link, dress code, parking); `question` = an input on the RSVP form guests answer when they say yes or maybe (dietary restrictions, meal choice), optionally required. To edit, read custom_fields from lemonvite_get_invitation, change the list and send it back WITH each existing field_id — a field sent without its field_id is created anew and a saved field left out of the list is deleted together with any guest answers. Omit to leave the fields unchanged; pass [] to remove them all. Up to 10 of each kind.
location_nameNoVenue name — REQUIRED for in-person events (anything that tells guests where: "Central Park", "Our place"). Ask the user if you do not know it. Not needed when is_virtual is true.
reminder_dateNoOptional: a date (local wall-clock ISO-8601, no offset) on which Lemonvite emails the HOST a reminder about this event — e.g. a year ahead to plan the next one. Never sent to guests; not editable later. Needs an email address on the Lemonvite account.
rsvp_deadlineNoRSVP-by date, local wall-clock ISO-8601 with no UTC offset (must be before start_datetime). Pass null to remove an existing deadline.
start_datetimeYesEvent start as the venue's LOCAL wall-clock time, ISO-8601 with NO UTC offset
allow_plus_onesNoWhether guests may bring additional attendees, subject to the adult and child limits. Defaults to true on create.
group_chat_linkNoURL of a group chat for guests (WhatsApp, Signal, …), shown on the invitation. Pass null to clear.
show_guest_listNoWhether guests can see who else is invited
invitation_imageNoAn invitation graphic already present in this conversation (for example an image the assistant generated). Lemonvite downloads and stores it permanently as the invitation artwork.
location_addressNoStreet address of the venue (optional; helps guests find it). Never required.
allow_guest_postsNoWhether guests may post on the event wall (default true)
guest_bring_itemsNoWhat guests should bring, shown on the invitation. Pass null to clear.
default_limit_kidsNoDefault plus-one allowance: how many KIDS each guest may bring (0–20). null = no limit.
allow_guest_repliesNoWhether guests may reply to wall posts (default true)
birthday_person_nameNoName of the person being celebrated at a birthday event, up to 120 characters.
default_limit_adultsNoDefault plus-one allowance: how many ADULTS each guest may bring (0–20). null = no limit. Both limits at 0 is refused.
birthday_person_likesNoGift and interest hints for the birthday person (birthday events). Pass null to clear.

Output Schema

ParametersJSON Schema
NameRequiredDescription
warningsNo
invitationYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (which only say write/destructive/open-world/non-idempotent), the description discloses that the call produces a DRAFT and does not publish, charge, or contact anyone, that invitation_image triggers a download-and-store side effect, that reminder_date schedules a future host email, and that validation failure creates nothing and returns a field-specific error. That is exactly the kind of mutation semantics 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the trigger condition and the required-field summary, then next steps. Every sentence carries information, though the middle section (image download, reminder email, draft caveat, required fields) is dense and slightly run-on for a single paragraph.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 26-parameter mutation tool with nested objects and an output schema, the description covers the gaps structured data can't: draft-vs-published state, absence of side-effect charges/notifications, error behavior, and the multi-tool workflow that follows. Return values are correctly left to the output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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 a useful synthesis: the required set (title, event_type, start_datetime, timezone) plus the conditional requirement of location_name for in-person events, and the reassurance that everything else is deferred to update_invitation. It doesn't explain the nested custom_fields replacement semantics, but the schema does.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource ('create an invitation, make an invite, set up RSVPs') and scopes it to 'an actual Lemonvite invitation or RSVP page'. It distinguishes itself from siblings by explicitly naming lemonvite_update_invitation, lemonvite_add_guests, lemonvite_publish_invitation and lemonvite_start_checkout, so an agent can route 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.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives an explicit trigger ('when the user wants an actual Lemonvite invitation or RSVP page'), an explicit exclusion ('Do not call it merely because invitation wording or images are being discussed'), and names the alternatives for the follow-up steps (add_guests, publish_invitation, start_checkout). Nothing about when to select this tool is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lemonvite_edit_designEdit the invitation designA
Destructive
Inspect

Use this when the user wants a change to the invitation's CURRENT artwork rather than a new design — "make the sky a sunset", "change the balloons to gold", "remove the banner at the bottom". Lemonvite's design engine applies the request to the existing artwork and leaves everything else as it is. Put the user's request in edit_request in their own words; do not rewrite it into a design brief. Each call spends one of the host's design generations (same as lemonvite_generate_design) and REPLACES the current artwork (the previous version stays in the event's design history on the website), so confirm with the user before calling it. The invitation must already have artwork that is not a GIF and has no text or image layers added in the web editor (those are edited on the website); to create artwork from scratch use lemonvite_generate_design, and to attach an image this assistant made use invitation_image on lemonvite_update_invitation. Get event_id from lemonvite_list_invitations.

ParametersJSON Schema
NameRequiredDescriptionDefault
event_idYesLemonvite event_id returned by lemonvite_create_invitation or lemonvite_list_invitations. Identifies the event to act on; not a guest invitation_id or RSVP URL.
edit_requestYesThe change the user wants, in their own words (what to add, remove, recolour or move). Everything the request does not mention stays as it is.

Output Schema

ParametersJSON Schema
NameRequiredDescription
invitationYes
generations_remainingYesDesign generations left on the connected account after this call.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare destructiveHint=true and idempotentHint=false; the description goes well beyond them by disclosing the cost (one design generation), the destructive effect (REPLACES current artwork, prior version retained in history), and a required confirmation step. It also states eligibility limits (non-GIF, no web-editor layers) that the annotations cannot express.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The design/versus-edit distinction is front-loaded and every clause carries operational weight (cost, replacement, confirmation, preconditions, alternatives). It is dense and long for a two-parameter tool, but there is no filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present, return values need not be described. The description covers side effects, cost, confirmation requirement, preconditions, and routing to three alternative tools, leaving nothing an agent needs before calling it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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 genuine semantics: edit_request must be the user's own words and must NOT be rewritten into a design brief, and unmentioned aspects stay unchanged. Silence on event_id is acceptable since the schema already forbids confusing it with invitation_id or RSVP URL.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (edit the invitation's existing artwork) and immediately contrasts it with the sibling lemonvite_generate_design. The examples ('make the sky a sunset') pin down the resource boundary between editing and creating, so the agent can distinguish it from siblings without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use ('user wants a change to CURRENT artwork rather than a new design'), explicit when-not ('to create artwork from scratch use lemonvite_generate_design'), and a third routed case ('to attach an image this assistant made use invitation_image on lemonvite_update_invitation'). Preconditions are also spelled out (existing non-GIF artwork, no text/image layers).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lemonvite_generate_designGenerate an invitation designA
Destructive
Inspect

Use this when the user wants Lemonvite's design engine to create the invitation artwork, because this assistant cannot make images or because the user asked for a Lemonvite design. Never call it merely because designs or themes are being discussed. Write design_brief as art direction: theme, colours, mood, motifs, style. The date, time and venue are lettered onto the design automatically, so the brief need not repeat them; set include_event_details to false only when the user wants artwork without them. A reference_image from the conversation guides style, subject and palette together with the brief and is not stored as the artwork. To change the current artwork rather than start over, use lemonvite_edit_design; to attach an image this assistant already made, use invitation_image on lemonvite_update_invitation. Each call spends one design generation and REPLACES the current artwork (earlier designs stay in the event's design history on the website), so confirm with the user first. New accounts start with 5 generations; each purchased credit adds 5.

ParametersJSON Schema
NameRequiredDescriptionDefault
event_idYesLemonvite event_id returned by lemonvite_create_invitation or lemonvite_list_invitations. Identifies the event to act on; not a guest invitation_id or RSVP URL.
design_briefNoThe host's art direction in their own words: theme, colours, mood, motifs, style. Omit for a default design suited to the event type.
reference_imageNoAn image already present in this conversation for the design engine to draw on (style, subject, palette). JPEG, PNG or WebP. It guides the design and is not stored as the invitation artwork.
include_event_detailsNoLetter the date, time and venue onto the design (default true).

Output Schema

ParametersJSON Schema
NameRequiredDescription
invitationYes
generations_remainingYesDesign generations left on the connected account after this call.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Goes well beyond the destructiveHint/idempotentHint annotations: it discloses that each call consumes one design generation, REPLACES the current artwork while earlier designs remain in the event's design history, requires user confirmation, and explains the credit economy (5 to start, +5 per purchased credit). That is exactly the cost/side-effect context an agent needs before a destructive, non-idempotent call.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the routing condition, then guidance, then side effects. Every sentence carries distinct information, though the paragraph is dense and a reader must hold several constraints at once; minor structural cost, no waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Output schema exists so return values need no explanation. With annotations covering the safety profile, the description still supplies cost, replacement behavior, confirmation requirement, credit accounting, and parameter intent — 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.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 100%, so the baseline is 3, but the description adds genuine semantics: design_brief should be written as art direction, it need not repeat date/time/venue because those are lettered on automatically, include_event_details=false is the escape hatch for detail-free artwork, and reference_image guides style but is not stored as the artwork. The last point in particular is not derivable from the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource (Lemonvite's design engine creating the invitation artwork) and immediately distinguishes itself from siblings by naming lemonvite_edit_design for changes and invitation_image on lemonvite_update_invitation for attaching existing images. An agent can route correctly 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.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use (user asked for a Lemonvite design, or this assistant cannot make images), explicit when-NOT ("Never call it merely because designs or themes are being discussed"), and named alternatives with the condition selecting each.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lemonvite_get_accountGet Lemonvite accountA
Read-only
Inspect

Use this when the user asks which Lemonvite account is connected, how many credits it has, or how many design generations are left. credits is the account's shared balance: publishing an invitation uses one, and each extra batch of phone guests uses one more. generations_remaining is how many more designs lemonvite_generate_design and lemonvite_edit_design can make; it does not reset over time. Each purchased credit adds 5 generations; to add credits, use lemonvite_start_checkout. For what one invitation needs to publish, use lemonvite_get_invitation (required_credits) instead.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
nameYes
emailYes
creditsYes
credit_price_displayYes
generations_remainingYesDesign generations left for lemonvite_generate_design.

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish the safe read-only, closed-world profile, and the description adds real substance beyond them: credits are consumed by publishing (one) and by extra phone-guest batches (one more), generations_remaining never resets over time, and each purchased credit yields 5 generations. It stops short of stating auth/permission needs or any freshness/caching behavior, which keeps it below 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the triggering user questions, then the two field definitions, then credit rules, then sibling routing. Every sentence carries functional information (cost model, non-resetting counter, 5-generations-per-credit conversion) with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With zero parameters, a present output schema, and annotations covering the safety profile, the description supplies everything else an agent needs: when to call it, how to interpret the two numeric fields, and which sibling to use for the adjacent credit questions. Nothing material is missing for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes no parameters, so there is nothing for the description to disambiguate and the baseline of 4 applies. The prose describes the account fields returned rather than call inputs, which is appropriate here.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

It names a specific resource (the connected Lemonvite account) and enumerates exactly what the caller learns: which account is connected, credits, and generations_remaining. The two returned quantities are defined in domain terms, so an agent can tell this apart from siblings like lemonvite_get_invitation 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.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The opening clause states the user intents that should trigger this call, and the closing clauses route the agent elsewhere when appropriate: lemonvite_start_checkout for adding credits, lemonvite_get_invitation (required_credits) for per-invitation cost. When-not-to-use is handled by explicit alternative naming rather than inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lemonvite_get_invitationGet invitation detailsA
Read-only
Inspect

Use this when the user wants the full current state of one Lemonvite invitation: its details, publication and payment status, credits needed to publish, guest and RSVP counts, custom fields and guest settings. Co-hosts can read it too. Get event_id from lemonvite_list_invitations. Check payment_status here before calling lemonvite_publish_invitation. For each guest's response use lemonvite_list_guests instead, and for RSVP counts alone use lemonvite_get_rsvp_summary.

ParametersJSON Schema
NameRequiredDescriptionDefault
event_idYesLemonvite event_id returned by lemonvite_create_invitation or lemonvite_list_invitations. Identifies the event to act on; not a guest invitation_id or RSVP URL.

Output Schema

ParametersJSON Schema
NameRequiredDescription
warningsNo
invitationYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnlyHint=true, destructiveHint=false, openWorldHint=false), so the bar is lower. The description still adds value by disclosing that co-hosts may read the invitation and by scoping exactly which fields are returned. It does not discuss rate limits or freshness of the data, so it falls 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the trigger condition ('Use this when...'), followed by permission context and then three routing sentences. Every sentence either defines scope, clarifies access, or redirects to an alternative — nothing is filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values need not be detailed, and the description still previews them. With a single fully-documented required parameter, complete annotations, and explicit sibling routing, an agent has everything needed to select and invoke this correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the schema already explains that event_id comes from create/list and is not a guest invitation_id or RSVP URL. The description's 'get event_id from lemonvite_list_invitations' partially repeats that. Baseline 3 applies 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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific read operation on a single named resource and enumerates the exact payload contents (publication/payment status, credits needed, guest and RSVP counts, custom fields, guest settings). This is clearly distinguishable from sibling read tools like get_rsvp_summary and list_guests.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes the agent: get event_id from lemonvite_list_invitations, check payment_status here before lemonvite_publish_invitation, and use lemonvite_list_guests or lemonvite_get_rsvp_summary for guest-level or count-only needs. Both when-to-use and when-to-use-something-else are stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lemonvite_get_rsvp_summaryGet RSVP summaryA
Read-only
Inspect

Use this when the user asks how many guests are going, declined, maybe or have not replied, or how many adults and children are coming to a Lemonvite event. Counts are read live and cover active guests only; removed guests are excluded. Each guest counts once under their RSVP status. adults_going and kids_going add up the party sizes of guests who said yes, so plus-ones are included. Once the invitation is published it also returns the public RSVP link. Get event_id from lemonvite_list_invitations; it is the event's id, not a guest invitation_id. To see which guest said what, use lemonvite_list_guests instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
event_idYesLemonvite event_id returned by lemonvite_create_invitation or lemonvite_list_invitations. Identifies the event to act on; not a guest invitation_id or RSVP URL.

Output Schema

ParametersJSON Schema
NameRequiredDescription
event_idYes
guest_countYes
rsvp_summaryYes
public_rsvp_urlYes

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnlyHint=true, destructiveHint=false), but the description adds substantial operational context: counts are live, only active guests are included, removed guests are excluded, each guest counts once under one status, and plus-ones are folded into adults_going/kids_going party sizes. It also discloses that the public RSVP link is only returned after publication.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the triggering scenario, then metric semantics, then prerequisite, then the sibling alternative. Six tight sentences with no filler; every clause carries information the agent needs.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return structure needn't be explained, yet the description still defines what the returned counts mean (party-size inclusion, active-only scope, single-count rule), which is exactly the context needed to interpret the numbers correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% so the baseline is 3, and the description goes beyond it by warning that event_id is the event's id, not a guest invitation_id, and by pointing to lemonvite_list_invitations as the source. It does not add format/syntax detail, but the disambiguation is genuinely useful.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('counts how many guests are going, declined, maybe or have not replied') and explicitly disambiguates from lemonvite_list_guests ('To see which guest said what'). An agent can select it 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.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives a concrete triggering user question, names the alternative tool and the condition that selects it, and states the prerequisite for obtaining event_id from lemonvite_list_invitations. When-to-use, when-not, and alternative are all present.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lemonvite_invite_contactsInvite contactsA
Destructive
Inspect

Use this when the user wants people from their Lemonvite contact list added to an invitation's guest list, e.g. "find Alice in my contacts and invite her". Find contact_ids with lemonvite_search_contacts first; this tool takes the saved name, email and phone from the contact, so never retype them. Up to 50 contacts per call. It behaves like lemonvite_add_guests: already-invited contacts fail alone, the guest_limit applies, and published phone overages return payment_required for the whole call with none of its guests saved. Explain the credit cost and new phone allowance. If needed: Buy the creditsToBuy shortfall with lemonvite_start_checkout without event_id. Then retry with authorized_credits after explicit host confirmation. On a published invitation the added contacts are invited immediately. Contacts with a phone number require host_confirms_sms_consent=true, meaning the host confirmed they agreed to receive SMS about this event.

ParametersJSON Schema
NameRequiredDescriptionDefault
event_idYesLemonvite event_id returned by lemonvite_create_invitation or lemonvite_list_invitations. Identifies the event to act on; not a guest invitation_id or RSVP URL.
contact_idsYes1–50 contact_ids returned by lemonvite_search_contacts. Each becomes a guest on this invitation.
authorized_creditsNoMaximum shared account credits the host explicitly agreed to spend across this entire request. Default 0: return payment_required without spending. Explain the credits used and the increased phone allowance, and obtain confirmation before setting this.
host_confirms_sms_consentNoSet true only when the host confirms these contacts agreed to receive SMS about this event. Required when any contact has a phone number.

Output Schema

ParametersJSON Schema
NameRequiredDescription
addedYes
failedYes
resultsYes
guest_countYes
credits_usedYes
payment_requiredNoPresent when the batch needs phone allowance credits the call did not authorize. No guest was saved.

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Far exceeds the annotations (destructiveHint/idempotentHint/readOnlyHint). It discloses per-item failure semantics ('already-invited contacts fail alone'), the guest_limit interaction, and atomic whole-call failure on published phone overages ('none of its guests saved'), plus immediate-invite behavior on published invitations and the credit/SMS-consent obligations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the trigger and example, then layers workflow, limits, and failure modes. It is dense and runs long, but nearly every sentence carries operational information an agent needs; only the credit-flow block is slightly verbose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present and full schema coverage, the description fully covers the gaps that structure cannot: sibling routing, the contact-vs-guest distinction, limits, partial/atomic failure behavior, and the credit and SMS-consent preconditions. 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.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is already 100%, so the schema documents each field. The description still adds meaning by explaining that the tool pulls the saved name/email/phone from the contact rather than the caller supplying them, and clarifies the credit-confirmation semantics tied to authorized_credits and host_confirms_sms_consent.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (invite/add) and resource (contacts from the Lemonvite contact list into an invitation's guest list), with a concrete example utterance. It explicitly distinguishes itself from siblings by contrasting with lemonvite_search_contacts (used to find ids) and by likening behavior to lemonvite_add_guests.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives an explicit trigger ('when the user wants people from their contact list added'), a precondition workflow (find contact_ids with lemonvite_search_contacts first), the correct alternative behavior (never retype name/email/phone), and the follow-up repair path (buy credits with lemonvite_start_checkout, then retry) with the confirmation gate spelled out.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lemonvite_list_guestsList guestsA
Read-only
Inspect

Use this when the user wants to see who is on a Lemonvite invitation and how each guest responded: RSVP status, party size (adults and kids), note, answers to the host's custom RSVP questions (dietary restrictions, meal choice), contact details, whether they opened the invitation, and their personal invite link. Returns every active guest in one response, without paging and in no particular order; removed guests are not included. invite_url stays null until the invitation is published. Pass rsvp_status to narrow the list (pending answers "who has not responded"); omit it for everyone. Get event_id from lemonvite_list_invitations. Each guest's invitation_id is what lemonvite_update_guests and lemonvite_remove_guests take. For counts only, use lemonvite_get_rsvp_summary instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
event_idYesLemonvite event_id returned by lemonvite_create_invitation or lemonvite_list_invitations. Identifies the event to act on; not a guest invitation_id or RSVP URL.
rsvp_statusNoFilter guests by RSVP: pending = awaiting reply, attending = going, declined = not going, maybe = tentative. Omit to list all guests.

Output Schema

ParametersJSON Schema
NameRequiredDescription
guestsYes
guest_countYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnly/destructive annotations, it discloses non-obvious behavior: no paging, unordered results, removed guests excluded, invite_url null until publish, and the filter semantics. These are genuine behavioral facts an agent could not infer from annotations alone.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose and trigger are front-loaded, and nearly every clause carries unique information. It is a single dense paragraph rather than structured lines, which slightly hurts scannability, but there is no filler content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only list tool with an output schema, it covers everything an agent needs: source of identifiers, filtering, pagination/ordering behavior, nullability, and cross-links to the related sibling tools. Nothing material is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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 adds meaningful semantics beyond the schema, notably that 'pending' answers 'who has not responded' and that omitting rsvp_status returns everyone, plus tracing event_id back to lemonvite_list_invitations and invitation_id to the update/remove siblings.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb+resource ('see who is on a Lemonvite invitation and how each guest responded') and enumerates the returned fields, so the agent knows exactly what this tool produces. It also explicitly differentiates from the sibling lemonvite_get_rsvp_summary ('For counts only, use... instead').

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It opens with an explicit when-to-use trigger, states the alternative for the counts case (lemonvite_get_rsvp_summary), and explains the rsvp_status filter's effect versus omitting it. It also tells the agent where to source event_id (lemonvite_list_invitations).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lemonvite_list_invitationsList invitationsA
Read-only
Inspect

Use this when the user wants to find or pick one of their Lemonvite invitations, or when you need the event_id of an event they mention. Returns every event the connected account created or co-hosts (drafts, published and cancelled) in one response, without paging. Events are split into upcoming and past by whether their date has passed, each list newest-created first. Upcoming items carry the title, publish_status, start time, active guest count and how many are going; past items carry only the event_id, title and start time. This is a summary for choosing an event: for one invitation's full details use lemonvite_get_invitation, and for its guests use lemonvite_list_guests.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
pastYes
upcomingYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint=false and destructiveHint=false, so safety is covered. The description adds genuinely useful behavioral context beyond that: no paging, all events returned in one response, upcoming/past split by date, newest-created-first ordering, and differing field payloads per list. That said, some of the per-item field detail overlaps with the separate output schema, so it falls just 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, front-loaded with the use case before the return-shape detail and the sibling routing. It is dense rather than padded, though the enumeration of returned fields is heavier than strictly needed given an output schema exists.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter list tool with an output schema, an agent has everything it needs: when to call it, what it returns at a high level, how the results are partitioned and ordered, and which tool to use instead for detail or guest data.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters and schema coverage is 100%, so the baseline is 4. There is no parameter semantics to add and the description correctly avoids inventing any.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb+resource (list the account's invitations) and immediately distinguishes itself from siblings by naming lemonvite_get_invitation and lemonvite_list_guests as the tools for detail and guest data. An agent can tell exactly which tool to pick 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.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It opens with an explicit trigger ('when the user wants to find or pick one of their invitations, or when you need the event_id') and closes with clear routing rules to the two alternatives, each with its own condition. This is explicit when/when-not/alternatives guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lemonvite_publish_invitationPublish an invitationA
DestructiveIdempotent
Inspect

Use this when the user explicitly wants their Lemonvite invitation made live. It opens the RSVP page to guests and DELIVERS the invitation to every guest with a pending email or phone invitation, so it contacts people outside this conversation: call it only when the user's intent to go live and send is clear, never merely because a draft exists. Before calling, read payment_status, required_credits and publishing_price with lemonvite_get_invitation. Publishing uses 1 credit plus one per extra phone batch; explain any extra charge and pass authorized_credits only after the host agrees. If payment_status is payment_required: Use lemonvite_start_checkout with event_id to create a payment link for the host, then publish. Only the event's primary host can publish; a co-host gets an error. Cancelled events cannot be published. Calling it on an already-published invitation is a safe no-op.

ParametersJSON Schema
NameRequiredDescriptionDefault
event_idYesLemonvite event_id returned by lemonvite_create_invitation or lemonvite_list_invitations. Identifies the event to act on; not a guest invitation_id or RSVP URL.
authorized_creditsNoMaximum credits the host has agreed to use after reviewing required_credits.

Output Schema

ParametersJSON Schema
NameRequiredDescription
warningsNo
invitationYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With annotations already flagging destructive/openWorld/idempotent, the description still adds substantial context: it contacts people outside the conversation, costs 1 credit plus one per phone batch, requires host authorization before charges, errors for co-hosts, blocks cancelled events, and is a safe no-op when already published. This exceeds the annotation baseline considerably.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Long but well-organized and front-loaded with the trigger condition and its most important caveat. The payment paragraph is dense, but for a high-stakes outbound-and-billing operation nearly every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values needn't be explained, and the description fully covers the tool's complexity: triggers, payment flow, credit cost, permissions, and edge cases (co-host, cancelled, already-published). 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.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% (baseline 3), and the description adds genuine meaning: it explains authorized_credits should be passed only after the host agrees and describes the credit mechanics (1 credit + one per extra phone batch) that the schema's terse note does not fully convey.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('invitation made live') and, crucially, describes the actual effect: it opens the RSVP page and delivers the invitation to every pending guest. This lets an agent distinguish it from siblings like lemonvite_update_invitation or lemonvite_create_invitation without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit when-to-use ('when the user explicitly wants their invitation made live'), when-not ('never merely because a draft exists'), and a named alternative for a blocker case (payment_required → lemonvite_start_checkout). It also states prerequisites (read payment_status/required_credits via get_invitation) and constraints (primary host only).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lemonvite_remove_contactsRemove contactsA
DestructiveIdempotent
Inspect

Use this when the user wants people deleted from their Lemonvite contact list (address book). Takes up to 50 contact_ids from lemonvite_search_contacts. Deletion is permanent and cannot be undone here; the contacts are not notified. Ids that match no contact of this account are counted in not_found. It does not take anyone off an invitation's guest list; use lemonvite_remove_guests for that.

ParametersJSON Schema
NameRequiredDescriptionDefault
contact_idsYes1–50 contact_ids returned by lemonvite_search_contacts. These contacts are deleted.

Output Schema

ParametersJSON Schema
NameRequiredDescription
removedYes
not_foundYesIds that matched no contact in this account.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is covered; the description goes further by disclosing that deletion is permanent and irreversible here, that contacts are not notified, and how unmatched ids surface as not_found. That is substantive context beyond the 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three tight sentences: trigger first, input source and limit second, irreversibility plus the sibling exclusion last. No filler and nothing redundant with the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive, single-parameter tool with an output schema and full annotation coverage, the description supplies everything an agent needs: when to call it, what to pass, irreversibility, notification behavior, and the sibling it must not be confused with.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% and the single parameter is fully documented (1–50 ids returned by lemonvite_search_contacts), so the baseline is 3. The description repeats the max of 50 and the provenance of the ids rather than adding new syntax or format constraints.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource — deleting people from the Lemonvite contact list (address book) — and explicitly contrasts that scope with invitation guest lists. An agent can distinguish it from lemonvite_remove_guests 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.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives the trigger condition ('when the user wants people deleted from their contact list') and an explicit exclusion with the correct alternative ('does not take anyone off an invitation's guest list; use lemonvite_remove_guests for that'). It also names the upstream tool that supplies ids.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lemonvite_remove_guestsRemove guestsA
DestructiveIdempotent
Inspect

Use this when the user wants guests taken off a Lemonvite invitation. On a draft the guest is deleted permanently. On a published invitation the guest is archived: their invite link stops working, they drop out of guest counts and RSVP totals, and the host can restore them on the Lemonvite website; a removed phone guest still counts toward the phone allowance. Guests are not notified. Get invitation_ids from lemonvite_list_guests. Do not remove a guest just to fix their details; use lemonvite_update_guests instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
event_idYesLemonvite event_id returned by lemonvite_create_invitation or lemonvite_list_invitations. Identifies the event to act on; not a guest invitation_id or RSVP URL.
invitation_idsYes1–50 guest invitation_ids returned by lemonvite_list_guests for this event. These guests are removed and their invite links stop working.

Output Schema

ParametersJSON Schema
NameRequiredDescription
failedYes
removedYes
resultsYes

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and idempotentHint=true, but the description goes well beyond them: it discloses the divergent draft (permanent delete) vs published (archive) semantics, that invite links stop working, that guests drop out of counts and RSVP totals, that the host can restore them on the website, the phone-allowance edge case, and that guests are not notified. This is exactly the mutation-impact context an agent needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the trigger condition, then the behavioral consequences, then the sibling routing. Dense and largely waste-free, though the middle sentence stacks several clauses and could be split for faster scanning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive mutation, the description covers reversibility, side effects, notification behavior, and input sourcing. An output schema exists, so return-value explanation is correctly omitted. Nothing needed to invoke this safely is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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; the schema already documents event_id (with its disambiguation from invitation_id) and the 1–50 invitation_ids bound. The description adds only provenance guidance (get ids from lemonvite_list_guests), which is helpful but not a substantive semantic addition.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('guests taken off a Lemonvite invitation') and immediately distinguishes the two operating modes (draft vs published), which an agent cannot infer from the name alone. It is clearly differentiated from lemonvite_add_guests and lemonvite_remove_contacts.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names the source of the input ('Get invitation_ids from lemonvite_list_guests') and gives an explicit exclusion plus the alternative: 'Do not remove a guest just to fix their details; use lemonvite_update_guests instead.' That is textbook when/when-not/alternative routing.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lemonvite_search_contactsSearch contactsA
Read-only
Inspect

Use this when the user refers to people in their Lemonvite contact list (address book): to find someone ("find Alice in my contacts"), to check whether a contact is saved, or to get contact_ids before inviting contacts with lemonvite_invite_contacts or deleting them with lemonvite_remove_contacts. query matches any part of a contact's name, email or phone, ignoring case. Returns up to 50 contacts sorted by name, plus the total match count; when there are more, narrow the query or send the host to their contacts page on Lemonvite. Only the connected account's own contacts are searched. To see who is on an invitation, use lemonvite_list_guests.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNoText to match anywhere in a contact's name, email or phone, e.g. "Alice". Omit to list contacts from the top.

Output Schema

ParametersJSON Schema
NameRequiredDescription
totalYesContacts matching the query, including any beyond the ones returned.
contactsYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds real behavioral context beyond that: case-insensitive substring matching, a 50-result cap sorted by name, a total match count, and the scoping fact that only the connected account's own contacts are searched. It stops short of a 5 only because some return-shape detail is duplicated in the output schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the primary use case, then matching behavior, result limits and scope, with sibling routing at the end. Mostly every sentence earns its place, though the description is on the longer side and the return-limit sentence slightly overlaps the output schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given a single optional parameter, rich annotations and an output schema, the description supplies everything an agent needs: triggers, matching semantics, result limits, fallback behavior when there are more than 50 matches, scope restrictions, and sibling alternatives. Nothing critical is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the single 'query' parameter is fully documented in the schema, including that omitting it lists from the top. The description restates the same matching semantics ('matches any part of a contact's name, email or phone, ignoring case') without adding format or edge-case detail 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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (search contacts / address book) and immediately differentiates the tool from siblings by naming lemonvite_invite_contacts, lemonvite_remove_contacts and lemonvite_list_guests. An agent can tell exactly what this does and how it differs from the other contact/guest tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives concrete trigger phrases ('find Alice in my contacts', checking whether a contact is saved) and explicitly names the downstream tools whose inputs it feeds (invite/remove contacts need contact_ids). It also routes the agent elsewhere with 'To see who is on an invitation, use lemonvite_list_guests.' Both when-to-use and when-to-use-something-else are covered.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lemonvite_start_checkoutStart Lemonvite checkoutAInspect

Use this when the host wants to buy account credits, for publishing, extra phone guests or design generations. It returns a secure Stripe checkout link for the host to open in a browser. Creating the link charges nothing; Stripe expires an unpaid link after 24 hours, and an abandoned checkout charges nothing. Do not call it before the host has seen and agreed to the amount. With event_id it buys a draft's reviewed publishing shortfall: pass publishing_price.credits_to_buy as quantity, and after payment confirm credit_available with lemonvite_get_invitation, then call lemonvite_publish_invitation. Omit event_id for published-event guest changes or credits in advance; after payment confirm the balance with lemonvite_get_account and retry only the unsaved guest changes with authorized_credits once the host confirms. A published invitation's payment_status stays paid.

ParametersJSON Schema
NameRequiredDescriptionDefault
event_idNoDraft invitation whose publishing shortfall to buy. Omit for account credits, including published-event guest changes.
quantityNoCredits to buy. With event_id, pass the publishing_price.credits_to_buy amount reviewed with the host; the server rejects a changed shortfall.

Output Schema

ParametersJSON Schema
NameRequiredDescription
currencyYes
event_idYes
quantityYes
amount_centsYes
checkout_urlYes
payment_statusYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only supply readOnly=false/openWorld=true/idempotent=false/destructive=false. The description goes well beyond them by disclosing that link creation charges nothing, that Stripe expires an unpaid link after 24 hours, that an abandoned checkout incurs no charge, and that a published invitation's payment_status stays paid.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense but front-loaded: purpose first, then the no-charge/expiry behavior, then the event_id branching. Every sentence carries operational information, though the paragraph is long enough to be slightly demanding.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return-format detail is unnecessary, and the description nonetheless covers the full purchase-to-confirm workflow including post-payment verification and retry steps. Nothing an agent needs 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.

Parameters4/5

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 semantic value: it ties event_id to the draft publishing shortfall and instructs passing publishing_price.credits_to_buy as quantity, and specifies omitting event_id for account credits and guest changes.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (start a Stripe checkout link) and enumerates the concrete goods being bought (account credits, publishing, phone guests, design generations). It is clearly distinguishable from all siblings, none of which handle payment.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes on event_id: use it to buy a draft's publishing shortfall, omit it for account credits or published-event guest changes. States a hard precondition ('Do not call it before the host has seen and agreed to the amount') and names the follow-up siblings (lemonvite_get_invitation, lemonvite_publish_invitation, lemonvite_get_account).

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lemonvite_update_guestsUpdate guestsA
Destructive
Inspect

Use this when the user wants to fix saved guests on a Lemonvite invitation: a name, email or phone number. Send up to 50 in one call; only the fields you pass change, and an empty string clears one. Get each invitation_id from lemonvite_list_guests. Changing contact details does not re-send the invitation, but on a published invitation, adding an email or phone to a guest who had none sends the invitation there. Adding a phone to a guest who had none requires host_confirms_sms_consent=true. On a published invitation a new phone can exceed the phone allowance and return payment_required: explain the credits it uses and the larger allowance, and retry with authorized_credits only after the host agrees. If the account is short of credits: Buy the creditsToBuy shortfall with lemonvite_start_checkout without event_id. Each guest gets its own result, so one failure does not stop the others. To add new guests use lemonvite_add_guests; to take someone off the list use lemonvite_remove_guests.

ParametersJSON Schema
NameRequiredDescriptionDefault
guestsYesBatch of 1–50 guest updates. Each needs an invitation_id and the fields to change. Omitted fields retain their saved values.
event_idYesLemonvite event_id returned by lemonvite_create_invitation or lemonvite_list_invitations. Identifies the event to act on; not a guest invitation_id or RSVP URL.
authorized_creditsNoMaximum shared account credits the host explicitly agreed to spend across this entire request. Default 0: return payment_required without spending. Explain the credits used and the increased phone allowance, and obtain confirmation before setting this.
host_confirms_sms_consentNoSet true only when the host confirms the guest agreed to receive SMS about this event. Required when adding a phone number to a guest who had none.

Output Schema

ParametersJSON Schema
NameRequiredDescription
failedYes
resultsYes
updatedYes
credits_usedYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations only flag destructive/openWorld/idempotent; the description adds substantial behavior beyond them: only passed fields change, an empty string destructively clears a field, contact edits don't re-send the invitation but adding first-time contact does on a published invitation, SMS consent gating, and the full payment_required/authorized_credits/checkout recovery path. This is rich mutation-safety context not derivable from 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Purpose is front-loaded and every sentence carries operational weight, but the passage is dense and the credits/checkout sentence is a run-on that could be trimmed for readability. Still efficiently sized for the tool's complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists so return values needn't be explained, yet the description still notes per-guest results and that one failure doesn't abort the batch. Combined with consent and credit/payment flows, an agent has everything needed to call it correctly in edge cases.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% so the baseline is 3, and the description pushes past it: it explains partial-update semantics, the empty-string-clear convention, the 50-item batch cap, and the conditional requirement for host_confirms_sms_consent and the meaning of authorized_credits (0 = return payment_required without spending).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Specific verb+resource ('fix saved guests on a Lemonvite invitation') with the exact editable fields named (name, email, phone). It explicitly differentiates from siblings by naming lemonvite_add_guests and lemonvite_remove_guests for the adjacent operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use ('when the user wants to fix saved guests'), concrete alternatives ('to add new guests use lemonvite_add_guests; to take someone off the list use lemonvite_remove_guests'), and where to source the required invitation_id (lemonvite_list_guests). Nothing is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lemonvite_update_invitationUpdate an invitationA
DestructiveIdempotent
Inspect

Use this when the user asks to change a saved Lemonvite invitation: its title, description, date and time, location, host details, RSVP and guest settings, custom fields, or artwork (pass a new invitation_image). Only the fields you pass change; omitted fields keep their saved values. Read the current values with lemonvite_get_invitation first, especially before changing custom_fields: that list replaces the saved one, and a saved field left out is deleted with its guest answers. On a published invitation the public RSVP page shows the change on its next load, and guests are not notified. Do not call it merely to discuss possible changes. To create a new event use lemonvite_create_invitation; for new artwork from the design engine use lemonvite_generate_design or lemonvite_edit_design; to go live use lemonvite_publish_invitation.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleNoEvent title, max 60 characters
event_idYesLemonvite event_id returned by lemonvite_create_invitation or lemonvite_list_invitations. Identifies the event to act on; not a guest invitation_id or RSVP URL.
timezoneNoIANA timezone, e.g. America/New_York
host_nameNoHost name shown on the invitation ("from …"). Defaults to the account's display name — required at create when the account has none (e.g. phone-only signups).
event_typeNoOne of: birthday, wedding, party, baby-shower, celebration-of-life, general. Use 'general' when unsure.
is_virtualNoTrue for an online event using virtual_url; false for an in-person event requiring location_name. Defaults to false on create.
max_guestsNoEvent capacity — the most guests that can RSVP yes. null = uncapped.
descriptionNoInvitation wording/details shown to guests
virtual_urlNoMeeting URL for virtual events
end_datetimeNoEvent end, local wall-clock ISO-8601 with no UTC offset. Pass null to remove an existing end time.
custom_fieldsNoThe host's custom fields — the COMPLETE list, in display order, replacing what is saved. Two kinds: `info` = a detail shown on the invitation for guests to read (gift registry link, dress code, parking); `question` = an input on the RSVP form guests answer when they say yes or maybe (dietary restrictions, meal choice), optionally required. To edit, read custom_fields from lemonvite_get_invitation, change the list and send it back WITH each existing field_id — a field sent without its field_id is created anew and a saved field left out of the list is deleted together with any guest answers. Omit to leave the fields unchanged; pass [] to remove them all. Up to 10 of each kind.
location_nameNoVenue name — REQUIRED for in-person events (anything that tells guests where: "Central Park", "Our place"). Ask the user if you do not know it. Not needed when is_virtual is true.
rsvp_deadlineNoRSVP-by date, local wall-clock ISO-8601 with no UTC offset (must be before start_datetime). Pass null to remove an existing deadline.
start_datetimeNoEvent start as the venue's LOCAL wall-clock time, ISO-8601 with NO UTC offset (e.g. 2026-10-04T18:00:00)
allow_plus_onesNoWhether guests may bring additional attendees, subject to the adult and child limits. Defaults to true on create.
group_chat_linkNoURL of a group chat for guests (WhatsApp, Signal, …), shown on the invitation. Pass null to clear.
show_guest_listNoWhether guests can see who else is invited
invitation_imageNoAn invitation graphic already present in this conversation (for example an image the assistant generated). Lemonvite downloads and stores it permanently as the invitation artwork.
location_addressNoStreet address of the venue (optional; helps guests find it). Never required.
allow_guest_postsNoWhether guests may post on the event wall (default true)
guest_bring_itemsNoWhat guests should bring, shown on the invitation. Pass null to clear.
default_limit_kidsNoDefault plus-one allowance: how many KIDS each guest may bring (0–20). null = no limit.
allow_guest_repliesNoWhether guests may reply to wall posts (default true)
birthday_person_nameNoName of the person being celebrated at a birthday event, up to 120 characters.
default_limit_adultsNoDefault plus-one allowance: how many ADULTS each guest may bring (0–20). null = no limit. Both limits at 0 is refused.
birthday_person_likesNoGift and interest hints for the birthday person (birthday events). Pass null to clear.

Output Schema

ParametersJSON Schema
NameRequiredDescription
warningsNo
invitationYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=true, openWorldHint=true, readOnlyHint=false, so the safety profile is covered structurally. The description adds real value beyond that: the partial-update semantics ('only fields you pass change'), the destructive custom_fields replacement rule with deletion of guest answers, and the published-page propagation with no guest notification. It does not restate annotation fields, so it complements rather than duplicates.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the trigger and scope, then the critical custom_fields warning, then sibling routing. Every sentence earns its place. Slightly dense, but no filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 26-parameter mutation tool with nested objects, the description covers the highest-risk behaviors: partial updates, custom_fields replacement and data loss, published-page timing, and redirect routing. With a 100%-covered schema and an existing output schema, nothing an agent needs to call it safely is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema carries most parameter meaning and the baseline is 3. The description adds semantics the schema does not: partial-update behavior for omitted fields, the replace-and-delete hazard for custom_fields, and the pointer to pass a new invitation_image. It does not, however, cover individual field constraints (timezone format, guest limits), which remain schema-only.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (update/change) plus resource (saved Lemonvite invitation) and enumerates the editable surface. It explicitly contrasts itself with lemonvite_create_invitation, lemonvite_generate_design, lemonvite_edit_design, and lemonvite_publish_invitation, so an agent can route correctly without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit when-to-use ('when the user asks to change a saved invitation'), a when-not ('Do not call it merely to discuss possible changes'), a prerequisite ('read current values with lemonvite_get_invitation first'), and named alternatives for each adjacent intent (create, design, publish). This is the strongest tier of usage guidance.

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.

  1. 5 tool updates
    • Addedlemonvite_add_contacts
    • Changedlemonvite_add_guests4 fields changed
      • addedOutput schema / properties / payment_required
        Added value: +{
        +  "additionalProperties": false,
        +  "description": "Present when the batch needs phone allowance credits the call did not authorize. No guest was saved.",
        +  "properties": {
        +    "creditsToBuy": {
        +      "type": "number"
        +    },
        +    "maxInvitations": {
        +      "type": "number"
        +    },
        +    "maxPhoneInvitations": {
        +      "type": "number"
        +    },
        +    "requiredCredits": {
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "requiredCredits",
        +    "creditsToBuy",
        +    "maxPhoneInvitations",
        +    "maxInvitations"
        +  ],
        +  "type": "object"
        +}
      • addedOutput schema / properties / results / items / properties / contact_id
        Added value: +{
        +  "type": "string"
        +}
      • removedOutput schema / properties / results / items / properties / payment_required
        Removed value: -{
        -  "additionalProperties": false,
        -  "properties": {
        -    "creditsToBuy": {
        -      "type": "number"
        -    },
        -    "maxInvitations": {
        -      "type": "number"
        -    },
        -    "maxPhoneInvitations": {
        -      "type": "number"
        -    },
        -    "requiredCredits": {
        -      "type": "number"
        -    }
        -  },
        -  "required": [
        -    "requiredCredits",
        -    "creditsToBuy",
        -    "maxPhoneInvitations",
        -    "maxInvitations"
        -  ],
        -  "type": "object"
        -}
      • changedOutput schema / properties / results / items / required
        Previous value: -[
        -  "guest",
        -  "ok"
        -]New value: +[
        +  "ok"
        +]
    • Addedlemonvite_invite_contacts
    • Addedlemonvite_remove_contacts
    • Addedlemonvite_search_contacts
  2. 8 tool updates
    • Changedlemonvite_add_guests1 field changed
      • changedInput schema / properties / authorized_credits / description
        Previous value: -"Maximum shared account credits the host explicitly agreed to spend across this entire request. Default 0: return payment_required without spending. Explain the cost and increased phone allowance and obtain confirmation before setting this."New value: +"Maximum shared account credits the host explicitly agreed to spend across this entire request. Default 0: return payment_required without spending. Explain the credits used and the increased phone allowance, and obtain confirmation before setting this."
    • Changedlemonvite_create_invitation2 fields changed
      • changedOutput schema / properties / invitation / properties / payment_status / description
        Previous value: -"paid = this event is already covered; credit_available = balance covers all required publishing and phone credits; payment_required = start_checkout first; not_applicable = cancelled, do not buy credits or publish. Always reflects the PRIMARY host's account — the one publishing charges."New value: +"paid = this event is already covered; credit_available = balance covers all required publishing and phone credits; payment_required = the account's credits do not cover publishing; not_applicable = cancelled, cannot be published. Always reflects the PRIMARY host's account — the one whose credits publishing uses."
      • changedOutput schema / properties / invitation / properties / phone_guest_allowance / description
        Previous value: -"Included or already purchased phone guests; null = no phone cap."New value: +"Phone guests this event already allows; null = no phone cap."
    • Changedlemonvite_edit_design3 fields changed
      • changedOutput schema / properties / generations_remaining / description
        Previous value: -"Design generations left on the connected account after this call. New accounts start with 5; every purchased account credit adds 5."New value: +"Design generations left on the connected account after this call."
      • changedOutput schema / properties / invitation / properties / payment_status / description
        Previous value: -"paid = this event is already covered; credit_available = balance covers all required publishing and phone credits; payment_required = start_checkout first; not_applicable = cancelled, do not buy credits or publish. Always reflects the PRIMARY host's account — the one publishing charges."New value: +"paid = this event is already covered; credit_available = balance covers all required publishing and phone credits; payment_required = the account's credits do not cover publishing; not_applicable = cancelled, cannot be published. Always reflects the PRIMARY host's account — the one whose credits publishing uses."
      • changedOutput schema / properties / invitation / properties / phone_guest_allowance / description
        Previous value: -"Included or already purchased phone guests; null = no phone cap."New value: +"Phone guests this event already allows; null = no phone cap."
    • Changedlemonvite_generate_design3 fields changed
      • changedOutput schema / properties / generations_remaining / description
        Previous value: -"Design generations left on the connected account after this call. New accounts start with 5; every purchased account credit adds 5."New value: +"Design generations left on the connected account after this call."
      • changedOutput schema / properties / invitation / properties / payment_status / description
        Previous value: -"paid = this event is already covered; credit_available = balance covers all required publishing and phone credits; payment_required = start_checkout first; not_applicable = cancelled, do not buy credits or publish. Always reflects the PRIMARY host's account — the one publishing charges."New value: +"paid = this event is already covered; credit_available = balance covers all required publishing and phone credits; payment_required = the account's credits do not cover publishing; not_applicable = cancelled, cannot be published. Always reflects the PRIMARY host's account — the one whose credits publishing uses."
      • changedOutput schema / properties / invitation / properties / phone_guest_allowance / description
        Previous value: -"Included or already purchased phone guests; null = no phone cap."New value: +"Phone guests this event already allows; null = no phone cap."
    • Changedlemonvite_get_invitation2 fields changed
      • changedOutput schema / properties / invitation / properties / payment_status / description
        Previous value: -"paid = this event is already covered; credit_available = balance covers all required publishing and phone credits; payment_required = start_checkout first; not_applicable = cancelled, do not buy credits or publish. Always reflects the PRIMARY host's account — the one publishing charges."New value: +"paid = this event is already covered; credit_available = balance covers all required publishing and phone credits; payment_required = the account's credits do not cover publishing; not_applicable = cancelled, cannot be published. Always reflects the PRIMARY host's account — the one whose credits publishing uses."
      • changedOutput schema / properties / invitation / properties / phone_guest_allowance / description
        Previous value: -"Included or already purchased phone guests; null = no phone cap."New value: +"Phone guests this event already allows; null = no phone cap."
    • Changedlemonvite_publish_invitation3 fields changed
      • changedInput schema / properties / authorized_credits / description
        Previous value: -"Maximum credits the host has agreed to spend after reviewing the price."New value: +"Maximum credits the host has agreed to use after reviewing required_credits."
      • changedOutput schema / properties / invitation / properties / payment_status / description
        Previous value: -"paid = this event is already covered; credit_available = balance covers all required publishing and phone credits; payment_required = start_checkout first; not_applicable = cancelled, do not buy credits or publish. Always reflects the PRIMARY host's account — the one publishing charges."New value: +"paid = this event is already covered; credit_available = balance covers all required publishing and phone credits; payment_required = the account's credits do not cover publishing; not_applicable = cancelled, cannot be published. Always reflects the PRIMARY host's account — the one whose credits publishing uses."
      • changedOutput schema / properties / invitation / properties / phone_guest_allowance / description
        Previous value: -"Included or already purchased phone guests; null = no phone cap."New value: +"Phone guests this event already allows; null = no phone cap."
    • Changedlemonvite_update_guests1 field changed
      • changedInput schema / properties / authorized_credits / description
        Previous value: -"Maximum shared account credits the host explicitly agreed to spend across this entire request. Default 0: return payment_required without spending. Explain the cost and increased phone allowance and obtain confirmation before setting this."New value: +"Maximum shared account credits the host explicitly agreed to spend across this entire request. Default 0: return payment_required without spending. Explain the credits used and the increased phone allowance, and obtain confirmation before setting this."
    • Changedlemonvite_update_invitation2 fields changed
      • changedOutput schema / properties / invitation / properties / payment_status / description
        Previous value: -"paid = this event is already covered; credit_available = balance covers all required publishing and phone credits; payment_required = start_checkout first; not_applicable = cancelled, do not buy credits or publish. Always reflects the PRIMARY host's account — the one publishing charges."New value: +"paid = this event is already covered; credit_available = balance covers all required publishing and phone credits; payment_required = the account's credits do not cover publishing; not_applicable = cancelled, cannot be published. Always reflects the PRIMARY host's account — the one whose credits publishing uses."
      • changedOutput schema / properties / invitation / properties / phone_guest_allowance / description
        Previous value: -"Included or already purchased phone guests; null = no phone cap."New value: +"Phone guests this event already allows; null = no phone cap."
  3. 9 tool updates
    • Changedlemonvite_add_guests4 fields changed
      • addedInput schema / properties / authorized_credits
        Added value: +{
        +  "default": 0,
        +  "description": "Maximum shared account credits the host explicitly agreed to spend across this entire request. Default 0: return payment_required without spending. Explain the cost and increased phone allowance and obtain confirmation before setting this.",
        +  "maximum": 100,
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • addedOutput schema / properties / credits_used
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / results / items / properties / payment_required
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "creditsToBuy": {
        +      "type": "number"
        +    },
        +    "maxInvitations": {
        +      "type": "number"
        +    },
        +    "maxPhoneInvitations": {
        +      "type": "number"
        +    },
        +    "requiredCredits": {
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "requiredCredits",
        +    "creditsToBuy",
        +    "maxPhoneInvitations",
        +    "maxInvitations"
        +  ],
        +  "type": "object"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "added",
        -  "failed",
        -  "guest_count",
        -  "results"
        -]New value: +[
        +  "added",
        +  "failed",
        +  "credits_used",
        +  "guest_count",
        +  "results"
        +]
    • Changedlemonvite_create_invitation10 fields changed
      • changedOutput schema / properties / invitation / properties / can_publish / description
        Previous value: -"True when this account is the event's primary host — the only account that can publish it or pay for it. Co-hosts can edit the invitation and manage guests, but must ask the primary host to publish."New value: +"True when this account is the event's primary host and the event is not cancelled. Co-hosts can edit the invitation and manage guests, but must ask the primary host to publish."
      • addedOutput schema / properties / invitation / properties / guest_limit
        Added value: +{
        +  "description": "Total cap; only support can raise it. null = verified host.",
        +  "type": [
        +    "number",
        +    "null"
        +  ]
        +}
      • changedOutput schema / properties / invitation / properties / payment_status / description
        Previous value: -"paid = this event is already covered; credit_available = publish will consume an existing credit; payment_required = start_checkout first. Always reflects the PRIMARY host's account — the one publishing charges."New value: +"paid = this event is already covered; credit_available = balance covers all required publishing and phone credits; payment_required = start_checkout first; not_applicable = cancelled, do not buy credits or publish. Always reflects the PRIMARY host's account — the one publishing charges."
      • changedOutput schema / properties / invitation / properties / payment_status / enum
        Previous value: -[
        -  "paid",
        -  "credit_available",
        -  "payment_required"
        -]New value: +[
        +  "paid",
        +  "credit_available",
        +  "payment_required",
        +  "not_applicable"
        +]
      • addedOutput schema / properties / invitation / properties / phone_batch_size
        Added value: +{
        +  "type": [
        +    "number",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / invitation / properties / phone_guest_allowance
        Added value: +{
        +  "description": "Included or already purchased phone guests; null = no phone cap.",
        +  "type": [
        +    "number",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / invitation / properties / phone_guest_count
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / invitation / properties / publishing_price
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "amount_due": {
        +          "type": "number"
        +        },
        +        "credits_to_buy": {
        +          "type": "number"
        +        },
        +        "existing_credits": {
        +          "type": "number"
        +        },
        +        "phone_batch_count": {
        +          "type": "number"
        +        },
        +        "phone_batch_price": {
        +          "type": "number"
        +        },
        +        "publish_price": {
        +          "type": "number"
        +        },
        +        "total_price": {
        +          "type": "number"
        +        }
        +      },
        +      "required": [
        +        "publish_price",
        +        "phone_batch_count",
        +        "phone_batch_price",
        +        "total_price",
        +        "existing_credits",
        +        "credits_to_buy",
        +        "amount_due"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / invitation / properties / required_credits
        Added value: +{
        +  "description": "Publishing plus phone batches. Review with the host before authorizing this many credits.",
        +  "type": [
        +    "number",
        +    "null"
        +  ]
        +}
      • changedOutput schema / properties / invitation / required
        Previous value: -[
        -  "event_id",
        -  "publish_status",
        -  "payment_status",
        -  "can_publish",
        -  "title",
        -  "event_type",
        -  "description",
        -  "start_datetime",
        -  "end_datetime",
        -  "timezone",
        -  "location",
        -  "host_name",
        -  "rsvp_deadline",
        -  "image_url",
        -  "has_invitation_image",
        -  "price_display",
        -  "guest_count",
        -  "rsvp_summary",
        -  "public_rsvp_url",
        -  "manage_url",
        -  "custom_fields",
        -  "guest_settings"
        -]New value: +[
        +  "event_id",
        +  "publish_status",
        +  "payment_status",
        +  "can_publish",
        +  "title",
        +  "event_type",
        +  "description",
        +  "start_datetime",
        +  "end_datetime",
        +  "timezone",
        +  "location",
        +  "host_name",
        +  "rsvp_deadline",
        +  "image_url",
        +  "has_invitation_image",
        +  "price_display",
        +  "guest_count",
        +  "phone_guest_count",
        +  "guest_limit",
        +  "phone_guest_allowance",
        +  "phone_batch_size",
        +  "required_credits",
        +  "publishing_price",
        +  "rsvp_summary",
        +  "public_rsvp_url",
        +  "manage_url",
        +  "custom_fields",
        +  "guest_settings"
        +]
    • Changedlemonvite_edit_design11 fields changed
      • changedOutput schema / properties / generations_remaining / description
        Previous value: -"Design generations left on the connected account after this call. New accounts start with 5; every purchased publish credit adds 5."New value: +"Design generations left on the connected account after this call. New accounts start with 5; every purchased account credit adds 5."
      • changedOutput schema / properties / invitation / properties / can_publish / description
        Previous value: -"True when this account is the event's primary host — the only account that can publish it or pay for it. Co-hosts can edit the invitation and manage guests, but must ask the primary host to publish."New value: +"True when this account is the event's primary host and the event is not cancelled. Co-hosts can edit the invitation and manage guests, but must ask the primary host to publish."
      • addedOutput schema / properties / invitation / properties / guest_limit
        Added value: +{
        +  "description": "Total cap; only support can raise it. null = verified host.",
        +  "type": [
        +    "number",
        +    "null"
        +  ]
        +}
      • changedOutput schema / properties / invitation / properties / payment_status / description
        Previous value: -"paid = this event is already covered; credit_available = publish will consume an existing credit; payment_required = start_checkout first. Always reflects the PRIMARY host's account — the one publishing charges."New value: +"paid = this event is already covered; credit_available = balance covers all required publishing and phone credits; payment_required = start_checkout first; not_applicable = cancelled, do not buy credits or publish. Always reflects the PRIMARY host's account — the one publishing charges."
      • changedOutput schema / properties / invitation / properties / payment_status / enum
        Previous value: -[
        -  "paid",
        -  "credit_available",
        -  "payment_required"
        -]New value: +[
        +  "paid",
        +  "credit_available",
        +  "payment_required",
        +  "not_applicable"
        +]
      • addedOutput schema / properties / invitation / properties / phone_batch_size
        Added value: +{
        +  "type": [
        +    "number",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / invitation / properties / phone_guest_allowance
        Added value: +{
        +  "description": "Included or already purchased phone guests; null = no phone cap.",
        +  "type": [
        +    "number",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / invitation / properties / phone_guest_count
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / invitation / properties / publishing_price
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "amount_due": {
        +          "type": "number"
        +        },
        +        "credits_to_buy": {
        +          "type": "number"
        +        },
        +        "existing_credits": {
        +          "type": "number"
        +        },
        +        "phone_batch_count": {
        +          "type": "number"
        +        },
        +        "phone_batch_price": {
        +          "type": "number"
        +        },
        +        "publish_price": {
        +          "type": "number"
        +        },
        +        "total_price": {
        +          "type": "number"
        +        }
        +      },
        +      "required": [
        +        "publish_price",
        +        "phone_batch_count",
        +        "phone_batch_price",
        +        "total_price",
        +        "existing_credits",
        +        "credits_to_buy",
        +        "amount_due"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / invitation / properties / required_credits
        Added value: +{
        +  "description": "Publishing plus phone batches. Review with the host before authorizing this many credits.",
        +  "type": [
        +    "number",
        +    "null"
        +  ]
        +}
      • changedOutput schema / properties / invitation / required
        Previous value: -[
        -  "event_id",
        -  "publish_status",
        -  "payment_status",
        -  "can_publish",
        -  "title",
        -  "event_type",
        -  "description",
        -  "start_datetime",
        -  "end_datetime",
        -  "timezone",
        -  "location",
        -  "host_name",
        -  "rsvp_deadline",
        -  "image_url",
        -  "has_invitation_image",
        -  "price_display",
        -  "guest_count",
        -  "rsvp_summary",
        -  "public_rsvp_url",
        -  "manage_url",
        -  "custom_fields",
        -  "guest_settings"
        -]New value: +[
        +  "event_id",
        +  "publish_status",
        +  "payment_status",
        +  "can_publish",
        +  "title",
        +  "event_type",
        +  "description",
        +  "start_datetime",
        +  "end_datetime",
        +  "timezone",
        +  "location",
        +  "host_name",
        +  "rsvp_deadline",
        +  "image_url",
        +  "has_invitation_image",
        +  "price_display",
        +  "guest_count",
        +  "phone_guest_count",
        +  "guest_limit",
        +  "phone_guest_allowance",
        +  "phone_batch_size",
        +  "required_credits",
        +  "publishing_price",
        +  "rsvp_summary",
        +  "public_rsvp_url",
        +  "manage_url",
        +  "custom_fields",
        +  "guest_settings"
        +]
    • Changedlemonvite_generate_design11 fields changed
      • changedOutput schema / properties / generations_remaining / description
        Previous value: -"Design generations left on the connected account after this call. New accounts start with 5; every purchased publish credit adds 5."New value: +"Design generations left on the connected account after this call. New accounts start with 5; every purchased account credit adds 5."
      • changedOutput schema / properties / invitation / properties / can_publish / description
        Previous value: -"True when this account is the event's primary host — the only account that can publish it or pay for it. Co-hosts can edit the invitation and manage guests, but must ask the primary host to publish."New value: +"True when this account is the event's primary host and the event is not cancelled. Co-hosts can edit the invitation and manage guests, but must ask the primary host to publish."
      • addedOutput schema / properties / invitation / properties / guest_limit
        Added value: +{
        +  "description": "Total cap; only support can raise it. null = verified host.",
        +  "type": [
        +    "number",
        +    "null"
        +  ]
        +}
      • changedOutput schema / properties / invitation / properties / payment_status / description
        Previous value: -"paid = this event is already covered; credit_available = publish will consume an existing credit; payment_required = start_checkout first. Always reflects the PRIMARY host's account — the one publishing charges."New value: +"paid = this event is already covered; credit_available = balance covers all required publishing and phone credits; payment_required = start_checkout first; not_applicable = cancelled, do not buy credits or publish. Always reflects the PRIMARY host's account — the one publishing charges."
      • changedOutput schema / properties / invitation / properties / payment_status / enum
        Previous value: -[
        -  "paid",
        -  "credit_available",
        -  "payment_required"
        -]New value: +[
        +  "paid",
        +  "credit_available",
        +  "payment_required",
        +  "not_applicable"
        +]
      • addedOutput schema / properties / invitation / properties / phone_batch_size
        Added value: +{
        +  "type": [
        +    "number",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / invitation / properties / phone_guest_allowance
        Added value: +{
        +  "description": "Included or already purchased phone guests; null = no phone cap.",
        +  "type": [
        +    "number",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / invitation / properties / phone_guest_count
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / invitation / properties / publishing_price
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "amount_due": {
        +          "type": "number"
        +        },
        +        "credits_to_buy": {
        +          "type": "number"
        +        },
        +        "existing_credits": {
        +          "type": "number"
        +        },
        +        "phone_batch_count": {
        +          "type": "number"
        +        },
        +        "phone_batch_price": {
        +          "type": "number"
        +        },
        +        "publish_price": {
        +          "type": "number"
        +        },
        +        "total_price": {
        +          "type": "number"
        +        }
        +      },
        +      "required": [
        +        "publish_price",
        +        "phone_batch_count",
        +        "phone_batch_price",
        +        "total_price",
        +        "existing_credits",
        +        "credits_to_buy",
        +        "amount_due"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / invitation / properties / required_credits
        Added value: +{
        +  "description": "Publishing plus phone batches. Review with the host before authorizing this many credits.",
        +  "type": [
        +    "number",
        +    "null"
        +  ]
        +}
      • changedOutput schema / properties / invitation / required
        Previous value: -[
        -  "event_id",
        -  "publish_status",
        -  "payment_status",
        -  "can_publish",
        -  "title",
        -  "event_type",
        -  "description",
        -  "start_datetime",
        -  "end_datetime",
        -  "timezone",
        -  "location",
        -  "host_name",
        -  "rsvp_deadline",
        -  "image_url",
        -  "has_invitation_image",
        -  "price_display",
        -  "guest_count",
        -  "rsvp_summary",
        -  "public_rsvp_url",
        -  "manage_url",
        -  "custom_fields",
        -  "guest_settings"
        -]New value: +[
        +  "event_id",
        +  "publish_status",
        +  "payment_status",
        +  "can_publish",
        +  "title",
        +  "event_type",
        +  "description",
        +  "start_datetime",
        +  "end_datetime",
        +  "timezone",
        +  "location",
        +  "host_name",
        +  "rsvp_deadline",
        +  "image_url",
        +  "has_invitation_image",
        +  "price_display",
        +  "guest_count",
        +  "phone_guest_count",
        +  "guest_limit",
        +  "phone_guest_allowance",
        +  "phone_batch_size",
        +  "required_credits",
        +  "publishing_price",
        +  "rsvp_summary",
        +  "public_rsvp_url",
        +  "manage_url",
        +  "custom_fields",
        +  "guest_settings"
        +]
    • Changedlemonvite_get_invitation10 fields changed
      • changedOutput schema / properties / invitation / properties / can_publish / description
        Previous value: -"True when this account is the event's primary host — the only account that can publish it or pay for it. Co-hosts can edit the invitation and manage guests, but must ask the primary host to publish."New value: +"True when this account is the event's primary host and the event is not cancelled. Co-hosts can edit the invitation and manage guests, but must ask the primary host to publish."
      • addedOutput schema / properties / invitation / properties / guest_limit
        Added value: +{
        +  "description": "Total cap; only support can raise it. null = verified host.",
        +  "type": [
        +    "number",
        +    "null"
        +  ]
        +}
      • changedOutput schema / properties / invitation / properties / payment_status / description
        Previous value: -"paid = this event is already covered; credit_available = publish will consume an existing credit; payment_required = start_checkout first. Always reflects the PRIMARY host's account — the one publishing charges."New value: +"paid = this event is already covered; credit_available = balance covers all required publishing and phone credits; payment_required = start_checkout first; not_applicable = cancelled, do not buy credits or publish. Always reflects the PRIMARY host's account — the one publishing charges."
      • changedOutput schema / properties / invitation / properties / payment_status / enum
        Previous value: -[
        -  "paid",
        -  "credit_available",
        -  "payment_required"
        -]New value: +[
        +  "paid",
        +  "credit_available",
        +  "payment_required",
        +  "not_applicable"
        +]
      • addedOutput schema / properties / invitation / properties / phone_batch_size
        Added value: +{
        +  "type": [
        +    "number",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / invitation / properties / phone_guest_allowance
        Added value: +{
        +  "description": "Included or already purchased phone guests; null = no phone cap.",
        +  "type": [
        +    "number",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / invitation / properties / phone_guest_count
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / invitation / properties / publishing_price
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "amount_due": {
        +          "type": "number"
        +        },
        +        "credits_to_buy": {
        +          "type": "number"
        +        },
        +        "existing_credits": {
        +          "type": "number"
        +        },
        +        "phone_batch_count": {
        +          "type": "number"
        +        },
        +        "phone_batch_price": {
        +          "type": "number"
        +        },
        +        "publish_price": {
        +          "type": "number"
        +        },
        +        "total_price": {
        +          "type": "number"
        +        }
        +      },
        +      "required": [
        +        "publish_price",
        +        "phone_batch_count",
        +        "phone_batch_price",
        +        "total_price",
        +        "existing_credits",
        +        "credits_to_buy",
        +        "amount_due"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / invitation / properties / required_credits
        Added value: +{
        +  "description": "Publishing plus phone batches. Review with the host before authorizing this many credits.",
        +  "type": [
        +    "number",
        +    "null"
        +  ]
        +}
      • changedOutput schema / properties / invitation / required
        Previous value: -[
        -  "event_id",
        -  "publish_status",
        -  "payment_status",
        -  "can_publish",
        -  "title",
        -  "event_type",
        -  "description",
        -  "start_datetime",
        -  "end_datetime",
        -  "timezone",
        -  "location",
        -  "host_name",
        -  "rsvp_deadline",
        -  "image_url",
        -  "has_invitation_image",
        -  "price_display",
        -  "guest_count",
        -  "rsvp_summary",
        -  "public_rsvp_url",
        -  "manage_url",
        -  "custom_fields",
        -  "guest_settings"
        -]New value: +[
        +  "event_id",
        +  "publish_status",
        +  "payment_status",
        +  "can_publish",
        +  "title",
        +  "event_type",
        +  "description",
        +  "start_datetime",
        +  "end_datetime",
        +  "timezone",
        +  "location",
        +  "host_name",
        +  "rsvp_deadline",
        +  "image_url",
        +  "has_invitation_image",
        +  "price_display",
        +  "guest_count",
        +  "phone_guest_count",
        +  "guest_limit",
        +  "phone_guest_allowance",
        +  "phone_batch_size",
        +  "required_credits",
        +  "publishing_price",
        +  "rsvp_summary",
        +  "public_rsvp_url",
        +  "manage_url",
        +  "custom_fields",
        +  "guest_settings"
        +]
    • Changedlemonvite_publish_invitation11 fields changed
      • addedInput schema / properties / authorized_credits
        Added value: +{
        +  "default": 1,
        +  "description": "Maximum credits the host has agreed to spend after reviewing the price.",
        +  "maximum": 9007199254740991,
        +  "minimum": 1,
        +  "type": "integer"
        +}
      • changedOutput schema / properties / invitation / properties / can_publish / description
        Previous value: -"True when this account is the event's primary host — the only account that can publish it or pay for it. Co-hosts can edit the invitation and manage guests, but must ask the primary host to publish."New value: +"True when this account is the event's primary host and the event is not cancelled. Co-hosts can edit the invitation and manage guests, but must ask the primary host to publish."
      • addedOutput schema / properties / invitation / properties / guest_limit
        Added value: +{
        +  "description": "Total cap; only support can raise it. null = verified host.",
        +  "type": [
        +    "number",
        +    "null"
        +  ]
        +}
      • changedOutput schema / properties / invitation / properties / payment_status / description
        Previous value: -"paid = this event is already covered; credit_available = publish will consume an existing credit; payment_required = start_checkout first. Always reflects the PRIMARY host's account — the one publishing charges."New value: +"paid = this event is already covered; credit_available = balance covers all required publishing and phone credits; payment_required = start_checkout first; not_applicable = cancelled, do not buy credits or publish. Always reflects the PRIMARY host's account — the one publishing charges."
      • changedOutput schema / properties / invitation / properties / payment_status / enum
        Previous value: -[
        -  "paid",
        -  "credit_available",
        -  "payment_required"
        -]New value: +[
        +  "paid",
        +  "credit_available",
        +  "payment_required",
        +  "not_applicable"
        +]
      • addedOutput schema / properties / invitation / properties / phone_batch_size
        Added value: +{
        +  "type": [
        +    "number",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / invitation / properties / phone_guest_allowance
        Added value: +{
        +  "description": "Included or already purchased phone guests; null = no phone cap.",
        +  "type": [
        +    "number",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / invitation / properties / phone_guest_count
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / invitation / properties / publishing_price
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "amount_due": {
        +          "type": "number"
        +        },
        +        "credits_to_buy": {
        +          "type": "number"
        +        },
        +        "existing_credits": {
        +          "type": "number"
        +        },
        +        "phone_batch_count": {
        +          "type": "number"
        +        },
        +        "phone_batch_price": {
        +          "type": "number"
        +        },
        +        "publish_price": {
        +          "type": "number"
        +        },
        +        "total_price": {
        +          "type": "number"
        +        }
        +      },
        +      "required": [
        +        "publish_price",
        +        "phone_batch_count",
        +        "phone_batch_price",
        +        "total_price",
        +        "existing_credits",
        +        "credits_to_buy",
        +        "amount_due"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / invitation / properties / required_credits
        Added value: +{
        +  "description": "Publishing plus phone batches. Review with the host before authorizing this many credits.",
        +  "type": [
        +    "number",
        +    "null"
        +  ]
        +}
      • changedOutput schema / properties / invitation / required
        Previous value: -[
        -  "event_id",
        -  "publish_status",
        -  "payment_status",
        -  "can_publish",
        -  "title",
        -  "event_type",
        -  "description",
        -  "start_datetime",
        -  "end_datetime",
        -  "timezone",
        -  "location",
        -  "host_name",
        -  "rsvp_deadline",
        -  "image_url",
        -  "has_invitation_image",
        -  "price_display",
        -  "guest_count",
        -  "rsvp_summary",
        -  "public_rsvp_url",
        -  "manage_url",
        -  "custom_fields",
        -  "guest_settings"
        -]New value: +[
        +  "event_id",
        +  "publish_status",
        +  "payment_status",
        +  "can_publish",
        +  "title",
        +  "event_type",
        +  "description",
        +  "start_datetime",
        +  "end_datetime",
        +  "timezone",
        +  "location",
        +  "host_name",
        +  "rsvp_deadline",
        +  "image_url",
        +  "has_invitation_image",
        +  "price_display",
        +  "guest_count",
        +  "phone_guest_count",
        +  "guest_limit",
        +  "phone_guest_allowance",
        +  "phone_batch_size",
        +  "required_credits",
        +  "publishing_price",
        +  "rsvp_summary",
        +  "public_rsvp_url",
        +  "manage_url",
        +  "custom_fields",
        +  "guest_settings"
        +]
    • Changedlemonvite_start_checkout2 fields changed
      • changedInput schema / properties / event_id / description
        Previous value: -"The invitation this purchase is for (echoed back)"New value: +"Draft invitation whose publishing shortfall to buy. Omit for account credits, including published-event guest changes."
      • changedInput schema / properties / quantity / description
        Previous value: -"Number of publish credits to buy"New value: +"Credits to buy. With event_id, pass the publishing_price.credits_to_buy amount reviewed with the host; the server rejects a changed shortfall."
    • Changedlemonvite_update_guests4 fields changed
      • addedInput schema / properties / authorized_credits
        Added value: +{
        +  "default": 0,
        +  "description": "Maximum shared account credits the host explicitly agreed to spend across this entire request. Default 0: return payment_required without spending. Explain the cost and increased phone allowance and obtain confirmation before setting this.",
        +  "maximum": 100,
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • addedOutput schema / properties / credits_used
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / results / items / properties / payment_required
        Added value: +{
        +  "additionalProperties": false,
        +  "properties": {
        +    "creditsToBuy": {
        +      "type": "number"
        +    },
        +    "maxInvitations": {
        +      "type": "number"
        +    },
        +    "maxPhoneInvitations": {
        +      "type": "number"
        +    },
        +    "requiredCredits": {
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "requiredCredits",
        +    "creditsToBuy",
        +    "maxPhoneInvitations",
        +    "maxInvitations"
        +  ],
        +  "type": "object"
        +}
      • changedOutput schema / required
        Previous value: -[
        -  "updated",
        -  "failed",
        -  "results"
        -]New value: +[
        +  "updated",
        +  "failed",
        +  "credits_used",
        +  "results"
        +]
    • Changedlemonvite_update_invitation10 fields changed
      • changedOutput schema / properties / invitation / properties / can_publish / description
        Previous value: -"True when this account is the event's primary host — the only account that can publish it or pay for it. Co-hosts can edit the invitation and manage guests, but must ask the primary host to publish."New value: +"True when this account is the event's primary host and the event is not cancelled. Co-hosts can edit the invitation and manage guests, but must ask the primary host to publish."
      • addedOutput schema / properties / invitation / properties / guest_limit
        Added value: +{
        +  "description": "Total cap; only support can raise it. null = verified host.",
        +  "type": [
        +    "number",
        +    "null"
        +  ]
        +}
      • changedOutput schema / properties / invitation / properties / payment_status / description
        Previous value: -"paid = this event is already covered; credit_available = publish will consume an existing credit; payment_required = start_checkout first. Always reflects the PRIMARY host's account — the one publishing charges."New value: +"paid = this event is already covered; credit_available = balance covers all required publishing and phone credits; payment_required = start_checkout first; not_applicable = cancelled, do not buy credits or publish. Always reflects the PRIMARY host's account — the one publishing charges."
      • changedOutput schema / properties / invitation / properties / payment_status / enum
        Previous value: -[
        -  "paid",
        -  "credit_available",
        -  "payment_required"
        -]New value: +[
        +  "paid",
        +  "credit_available",
        +  "payment_required",
        +  "not_applicable"
        +]
      • addedOutput schema / properties / invitation / properties / phone_batch_size
        Added value: +{
        +  "type": [
        +    "number",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / invitation / properties / phone_guest_allowance
        Added value: +{
        +  "description": "Included or already purchased phone guests; null = no phone cap.",
        +  "type": [
        +    "number",
        +    "null"
        +  ]
        +}
      • addedOutput schema / properties / invitation / properties / phone_guest_count
        Added value: +{
        +  "type": "number"
        +}
      • addedOutput schema / properties / invitation / properties / publishing_price
        Added value: +{
        +  "anyOf": [
        +    {
        +      "additionalProperties": false,
        +      "properties": {
        +        "amount_due": {
        +          "type": "number"
        +        },
        +        "credits_to_buy": {
        +          "type": "number"
        +        },
        +        "existing_credits": {
        +          "type": "number"
        +        },
        +        "phone_batch_count": {
        +          "type": "number"
        +        },
        +        "phone_batch_price": {
        +          "type": "number"
        +        },
        +        "publish_price": {
        +          "type": "number"
        +        },
        +        "total_price": {
        +          "type": "number"
        +        }
        +      },
        +      "required": [
        +        "publish_price",
        +        "phone_batch_count",
        +        "phone_batch_price",
        +        "total_price",
        +        "existing_credits",
        +        "credits_to_buy",
        +        "amount_due"
        +      ],
        +      "type": "object"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ]
        +}
      • addedOutput schema / properties / invitation / properties / required_credits
        Added value: +{
        +  "description": "Publishing plus phone batches. Review with the host before authorizing this many credits.",
        +  "type": [
        +    "number",
        +    "null"
        +  ]
        +}
      • changedOutput schema / properties / invitation / required
        Previous value: -[
        -  "event_id",
        -  "publish_status",
        -  "payment_status",
        -  "can_publish",
        -  "title",
        -  "event_type",
        -  "description",
        -  "start_datetime",
        -  "end_datetime",
        -  "timezone",
        -  "location",
        -  "host_name",
        -  "rsvp_deadline",
        -  "image_url",
        -  "has_invitation_image",
        -  "price_display",
        -  "guest_count",
        -  "rsvp_summary",
        -  "public_rsvp_url",
        -  "manage_url",
        -  "custom_fields",
        -  "guest_settings"
        -]New value: +[
        +  "event_id",
        +  "publish_status",
        +  "payment_status",
        +  "can_publish",
        +  "title",
        +  "event_type",
        +  "description",
        +  "start_datetime",
        +  "end_datetime",
        +  "timezone",
        +  "location",
        +  "host_name",
        +  "rsvp_deadline",
        +  "image_url",
        +  "has_invitation_image",
        +  "price_display",
        +  "guest_count",
        +  "phone_guest_count",
        +  "guest_limit",
        +  "phone_guest_allowance",
        +  "phone_batch_size",
        +  "required_credits",
        +  "publishing_price",
        +  "rsvp_summary",
        +  "public_rsvp_url",
        +  "manage_url",
        +  "custom_fields",
        +  "guest_settings"
        +]
  4. 1 tool update
    • Addedlemonvite_edit_design
  5. 10 tool updates
    • Changedlemonvite_add_guests6 fields changed
      • addedInput schema / properties / event_id / description
        Added value: +"Lemonvite event_id returned by lemonvite_create_invitation or lemonvite_list_invitations. Identifies the event to act on; not a guest invitation_id or RSVP URL."
      • addedInput schema / properties / guests / description
        Added value: +"Batch of 1–50 guests to add. Each needs at least a name, email, or phone. Guests with contact details are invited immediately if the event is published."
      • addedInput schema / properties / guests / items / properties / email / description
        Added value: +"Guest email address, e.g. alex@example.com, up to 320 characters."
      • addedInput schema / properties / guests / items / properties / name / description
        Added value: +"Guest display name, up to 200 characters."
      • changedInput schema / properties / guests / items / properties / phone / description
        Previous value: -"E.164 preferred, e.g. +15551234567"New value: +"Guest phone number, up to 32 characters; E.164 preferred, e.g. +15551234567. Requires host_confirms_sms_consent=true."
      • addedInput schema / properties / host_confirms_sms_consent / description
        Added value: +"Set true only when the host confirms the guests agreed to receive SMS about this event. Required when adding guests with phone numbers."
    • Changedlemonvite_create_invitation8 fields changed
      • addedInput schema / properties / allow_plus_ones / description
        Added value: +"Whether guests may bring additional attendees, subject to the adult and child limits. Defaults to true on create."
      • addedInput schema / properties / birthday_person_name / description
        Added value: +"Name of the person being celebrated at a birthday event, up to 120 characters."
      • addedInput schema / properties / event_type / description
        Added value: +"One of: birthday, wedding, party, baby-shower, celebration-of-life, general. Use 'general' when unsure."
      • changedInput schema / properties / invitation_image / properties / download_url / description
        Previous value: -"Temporary URL to download the file from"New value: +"Fetchable HTTPS URL for the image file, up to 10 MB. Temporary conversation-file URLs are accepted."
      • changedInput schema / properties / invitation_image / properties / file_id / description
        Previous value: -"Host file identifier"New value: +"File identifier supplied by the MCP client for the image in this conversation."
      • addedInput schema / properties / invitation_image / properties / file_name / description
        Added value: +"Original filename, e.g. invitation.png. Optional metadata; the stored filename is generated by Lemonvite."
      • addedInput schema / properties / invitation_image / properties / mime_type / description
        Added value: +"Image MIME type: image/jpeg, image/png, image/webp, or image/gif. Design references exclude GIF. Used if the download has no Content-Type."
      • addedInput schema / properties / is_virtual / description
        Added value: +"True for an online event using virtual_url; false for an in-person event requiring location_name. Defaults to false on create."
    • Changedlemonvite_generate_design5 fields changed
      • addedInput schema / properties / event_id / description
        Added value: +"Lemonvite event_id returned by lemonvite_create_invitation or lemonvite_list_invitations. Identifies the event to act on; not a guest invitation_id or RSVP URL."
      • changedInput schema / properties / reference_image / properties / download_url / description
        Previous value: -"Temporary URL to download the file from"New value: +"Fetchable HTTPS URL for the image file, up to 10 MB. Temporary conversation-file URLs are accepted."
      • changedInput schema / properties / reference_image / properties / file_id / description
        Previous value: -"Host file identifier"New value: +"File identifier supplied by the MCP client for the image in this conversation."
      • addedInput schema / properties / reference_image / properties / file_name / description
        Added value: +"Original filename, e.g. invitation.png. Optional metadata; the stored filename is generated by Lemonvite."
      • addedInput schema / properties / reference_image / properties / mime_type / description
        Added value: +"Image MIME type: image/jpeg, image/png, image/webp, or image/gif. Design references exclude GIF. Used if the download has no Content-Type."
    • Changedlemonvite_get_invitation1 field changed
      • addedInput schema / properties / event_id / description
        Added value: +"Lemonvite event_id returned by lemonvite_create_invitation or lemonvite_list_invitations. Identifies the event to act on; not a guest invitation_id or RSVP URL."
    • Changedlemonvite_get_rsvp_summary1 field changed
      • addedInput schema / properties / event_id / description
        Added value: +"Lemonvite event_id returned by lemonvite_create_invitation or lemonvite_list_invitations. Identifies the event to act on; not a guest invitation_id or RSVP URL."
    • Changedlemonvite_list_guests2 fields changed
      • addedInput schema / properties / event_id / description
        Added value: +"Lemonvite event_id returned by lemonvite_create_invitation or lemonvite_list_invitations. Identifies the event to act on; not a guest invitation_id or RSVP URL."
      • addedInput schema / properties / rsvp_status / description
        Added value: +"Filter guests by RSVP: pending = awaiting reply, attending = going, declined = not going, maybe = tentative. Omit to list all guests."
    • Changedlemonvite_publish_invitation1 field changed
      • addedInput schema / properties / event_id / description
        Added value: +"Lemonvite event_id returned by lemonvite_create_invitation or lemonvite_list_invitations. Identifies the event to act on; not a guest invitation_id or RSVP URL."
    • Changedlemonvite_remove_guests2 fields changed
      • addedInput schema / properties / event_id / description
        Added value: +"Lemonvite event_id returned by lemonvite_create_invitation or lemonvite_list_invitations. Identifies the event to act on; not a guest invitation_id or RSVP URL."
      • addedInput schema / properties / invitation_ids / description
        Added value: +"1–50 guest invitation_ids returned by lemonvite_list_guests for this event. These guests are removed and their invite links stop working."
    • Changedlemonvite_update_guests7 fields changed
      • addedInput schema / properties / event_id / description
        Added value: +"Lemonvite event_id returned by lemonvite_create_invitation or lemonvite_list_invitations. Identifies the event to act on; not a guest invitation_id or RSVP URL."
      • addedInput schema / properties / guests / description
        Added value: +"Batch of 1–50 guest updates. Each needs an invitation_id and the fields to change. Omitted fields retain their saved values."
      • addedInput schema / properties / guests / items / properties / email / description
        Added value: +"Guest email address, e.g. alex@example.com, up to 320 characters. Omit on update to keep it; an empty string clears it."
      • addedInput schema / properties / guests / items / properties / invitation_id / description
        Added value: +"Guest invitation_id returned by lemonvite_list_guests for this event; not the event_id."
      • addedInput schema / properties / guests / items / properties / name / description
        Added value: +"Guest display name, up to 200 characters. Omit on update to keep the saved name; an empty string clears it."
      • addedInput schema / properties / guests / items / properties / phone / description
        Added value: +"Guest phone number, up to 32 characters; E.164 preferred, e.g. +15551234567. Omit to keep it; an empty string clears it."
      • changedInput schema / properties / host_confirms_sms_consent / description
        Previous value: -"Required when an update ADDS a phone number to a guest who had none"New value: +"Set true only when the host confirms the guest agreed to receive SMS about this event. Required when adding a phone number to a guest who had none."
    • Changedlemonvite_update_invitation8 fields changed
      • addedInput schema / properties / allow_plus_ones / description
        Added value: +"Whether guests may bring additional attendees, subject to the adult and child limits. Defaults to true on create."
      • addedInput schema / properties / birthday_person_name / description
        Added value: +"Name of the person being celebrated at a birthday event, up to 120 characters."
      • addedInput schema / properties / event_id / description
        Added value: +"Lemonvite event_id returned by lemonvite_create_invitation or lemonvite_list_invitations. Identifies the event to act on; not a guest invitation_id or RSVP URL."
      • changedInput schema / properties / invitation_image / properties / download_url / description
        Previous value: -"Temporary URL to download the file from"New value: +"Fetchable HTTPS URL for the image file, up to 10 MB. Temporary conversation-file URLs are accepted."
      • changedInput schema / properties / invitation_image / properties / file_id / description
        Previous value: -"Host file identifier"New value: +"File identifier supplied by the MCP client for the image in this conversation."
      • addedInput schema / properties / invitation_image / properties / file_name / description
        Added value: +"Original filename, e.g. invitation.png. Optional metadata; the stored filename is generated by Lemonvite."
      • addedInput schema / properties / invitation_image / properties / mime_type / description
        Added value: +"Image MIME type: image/jpeg, image/png, image/webp, or image/gif. Design references exclude GIF. Used if the download has no Content-Type."
      • addedInput schema / properties / is_virtual / description
        Added value: +"True for an online event using virtual_url; false for an in-person event requiring location_name. Defaults to false on create."
  6. 6 tool updates
    • Changedlemonvite_create_invitation3 fields changed
      • addedInput schema / properties / custom_fields
        Added value: +{
        +  "description": "The host's custom fields — the COMPLETE list, in display order, replacing what is saved. Two kinds: `info` = a detail shown on the invitation for guests to read (gift registry link, dress code, parking); `question` = an input on the RSVP form guests answer when they say yes or maybe (dietary restrictions, meal choice), optionally required. To edit, read custom_fields from lemonvite_get_invitation, change the list and send it back WITH each existing field_id — a field sent without its field_id is created anew and a saved field left out of the list is deleted together with any guest answers. Omit to leave the fields unchanged; pass [] to remove them all. Up to 10 of each kind.",
        +  "items": {
        +    "properties": {
        +      "field_id": {
        +        "description": "The saved field this entry updates (from lemonvite_get_invitation). Omit for a new field.",
        +        "type": "string"
        +      },
        +      "input_type": {
        +        "description": "question only: text (free answer, default) or select (guest picks one of `options`).",
        +        "enum": [
        +          "text",
        +          "select"
        +        ],
        +        "type": "string"
        +      },
        +      "kind": {
        +        "description": "info = shown on the invitation; question = asked on the RSVP form.",
        +        "enum": [
        +          "info",
        +          "question"
        +        ],
        +        "type": "string"
        +      },
        +      "label": {
        +        "description": "The heading guests see (\"Gift registry\", \"Any dietary restrictions?\").",
        +        "maxLength": 80,
        +        "type": "string"
        +      },
        +      "options": {
        +        "description": "select questions only: 2 or more distinct choices.",
        +        "items": {
        +          "maxLength": 60,
        +          "type": "string"
        +        },
        +        "maxItems": 12,
        +        "type": "array"
        +      },
        +      "required": {
        +        "description": "question only: guests saying yes or maybe must answer (default false).",
        +        "type": "boolean"
        +      },
        +      "value": {
        +        "description": "info only, required for that kind: the text shown under the heading. URLs become links.",
        +        "maxLength": 1000,
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "kind",
        +      "label"
        +    ],
        +    "type": "object"
        +  },
        +  "maxItems": 20,
        +  "type": "array"
        +}
      • addedOutput schema / properties / invitation / properties / custom_fields
        Added value: +{
        +  "description": "The host's custom fields, in display order: `info` details shown on the invitation (gift registry, dress code) and `question` inputs on the RSVP form (dietary restrictions, meal choice). Change them with custom_fields on lemonvite_update_invitation.",
        +  "items": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "field_id": {
        +        "type": "string"
        +      },
        +      "input_type": {
        +        "anyOf": [
        +          {
        +            "enum": [
        +              "text",
        +              "select"
        +            ],
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "question fields only."
        +      },
        +      "kind": {
        +        "enum": [
        +          "info",
        +          "question"
        +        ],
        +        "type": "string"
        +      },
        +      "label": {
        +        "type": "string"
        +      },
        +      "options": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "type": "string"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "select questions only: the choices offered."
        +      },
        +      "required": {
        +        "description": "question fields only: must be answered by a guest who says yes or maybe.",
        +        "type": "boolean"
        +      },
        +      "value": {
        +        "description": "info fields only: the text shown on the invitation (may contain a URL).",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "required": [
        +      "field_id",
        +      "kind",
        +      "label",
        +      "value",
        +      "input_type",
        +      "options",
        +      "required"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / properties / invitation / required
        Previous value: -[
        -  "event_id",
        -  "publish_status",
        -  "payment_status",
        -  "can_publish",
        -  "title",
        -  "event_type",
        -  "description",
        -  "start_datetime",
        -  "end_datetime",
        -  "timezone",
        -  "location",
        -  "host_name",
        -  "rsvp_deadline",
        -  "image_url",
        -  "has_invitation_image",
        -  "price_display",
        -  "guest_count",
        -  "rsvp_summary",
        -  "public_rsvp_url",
        -  "manage_url",
        -  "guest_settings"
        -]New value: +[
        +  "event_id",
        +  "publish_status",
        +  "payment_status",
        +  "can_publish",
        +  "title",
        +  "event_type",
        +  "description",
        +  "start_datetime",
        +  "end_datetime",
        +  "timezone",
        +  "location",
        +  "host_name",
        +  "rsvp_deadline",
        +  "image_url",
        +  "has_invitation_image",
        +  "price_display",
        +  "guest_count",
        +  "rsvp_summary",
        +  "public_rsvp_url",
        +  "manage_url",
        +  "custom_fields",
        +  "guest_settings"
        +]
    • Changedlemonvite_generate_design2 fields changed
      • addedOutput schema / properties / invitation / properties / custom_fields
        Added value: +{
        +  "description": "The host's custom fields, in display order: `info` details shown on the invitation (gift registry, dress code) and `question` inputs on the RSVP form (dietary restrictions, meal choice). Change them with custom_fields on lemonvite_update_invitation.",
        +  "items": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "field_id": {
        +        "type": "string"
        +      },
        +      "input_type": {
        +        "anyOf": [
        +          {
        +            "enum": [
        +              "text",
        +              "select"
        +            ],
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "question fields only."
        +      },
        +      "kind": {
        +        "enum": [
        +          "info",
        +          "question"
        +        ],
        +        "type": "string"
        +      },
        +      "label": {
        +        "type": "string"
        +      },
        +      "options": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "type": "string"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "select questions only: the choices offered."
        +      },
        +      "required": {
        +        "description": "question fields only: must be answered by a guest who says yes or maybe.",
        +        "type": "boolean"
        +      },
        +      "value": {
        +        "description": "info fields only: the text shown on the invitation (may contain a URL).",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "required": [
        +      "field_id",
        +      "kind",
        +      "label",
        +      "value",
        +      "input_type",
        +      "options",
        +      "required"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / properties / invitation / required
        Previous value: -[
        -  "event_id",
        -  "publish_status",
        -  "payment_status",
        -  "can_publish",
        -  "title",
        -  "event_type",
        -  "description",
        -  "start_datetime",
        -  "end_datetime",
        -  "timezone",
        -  "location",
        -  "host_name",
        -  "rsvp_deadline",
        -  "image_url",
        -  "has_invitation_image",
        -  "price_display",
        -  "guest_count",
        -  "rsvp_summary",
        -  "public_rsvp_url",
        -  "manage_url",
        -  "guest_settings"
        -]New value: +[
        +  "event_id",
        +  "publish_status",
        +  "payment_status",
        +  "can_publish",
        +  "title",
        +  "event_type",
        +  "description",
        +  "start_datetime",
        +  "end_datetime",
        +  "timezone",
        +  "location",
        +  "host_name",
        +  "rsvp_deadline",
        +  "image_url",
        +  "has_invitation_image",
        +  "price_display",
        +  "guest_count",
        +  "rsvp_summary",
        +  "public_rsvp_url",
        +  "manage_url",
        +  "custom_fields",
        +  "guest_settings"
        +]
    • Changedlemonvite_get_invitation2 fields changed
      • addedOutput schema / properties / invitation / properties / custom_fields
        Added value: +{
        +  "description": "The host's custom fields, in display order: `info` details shown on the invitation (gift registry, dress code) and `question` inputs on the RSVP form (dietary restrictions, meal choice). Change them with custom_fields on lemonvite_update_invitation.",
        +  "items": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "field_id": {
        +        "type": "string"
        +      },
        +      "input_type": {
        +        "anyOf": [
        +          {
        +            "enum": [
        +              "text",
        +              "select"
        +            ],
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "question fields only."
        +      },
        +      "kind": {
        +        "enum": [
        +          "info",
        +          "question"
        +        ],
        +        "type": "string"
        +      },
        +      "label": {
        +        "type": "string"
        +      },
        +      "options": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "type": "string"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "select questions only: the choices offered."
        +      },
        +      "required": {
        +        "description": "question fields only: must be answered by a guest who says yes or maybe.",
        +        "type": "boolean"
        +      },
        +      "value": {
        +        "description": "info fields only: the text shown on the invitation (may contain a URL).",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "required": [
        +      "field_id",
        +      "kind",
        +      "label",
        +      "value",
        +      "input_type",
        +      "options",
        +      "required"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / properties / invitation / required
        Previous value: -[
        -  "event_id",
        -  "publish_status",
        -  "payment_status",
        -  "can_publish",
        -  "title",
        -  "event_type",
        -  "description",
        -  "start_datetime",
        -  "end_datetime",
        -  "timezone",
        -  "location",
        -  "host_name",
        -  "rsvp_deadline",
        -  "image_url",
        -  "has_invitation_image",
        -  "price_display",
        -  "guest_count",
        -  "rsvp_summary",
        -  "public_rsvp_url",
        -  "manage_url",
        -  "guest_settings"
        -]New value: +[
        +  "event_id",
        +  "publish_status",
        +  "payment_status",
        +  "can_publish",
        +  "title",
        +  "event_type",
        +  "description",
        +  "start_datetime",
        +  "end_datetime",
        +  "timezone",
        +  "location",
        +  "host_name",
        +  "rsvp_deadline",
        +  "image_url",
        +  "has_invitation_image",
        +  "price_display",
        +  "guest_count",
        +  "rsvp_summary",
        +  "public_rsvp_url",
        +  "manage_url",
        +  "custom_fields",
        +  "guest_settings"
        +]
    • Changedlemonvite_list_guests3 fields changed
      • addedOutput schema / properties / guests / items / properties / answers
        Added value: +{
        +  "description": "The guest's answers to the host's custom RSVP questions (see custom_fields on the invitation), in question order.",
        +  "items": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "field_id": {
        +        "type": "string"
        +      },
        +      "label": {
        +        "type": "string"
        +      },
        +      "value": {
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "field_id",
        +      "label",
        +      "value"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • addedOutput schema / properties / guests / items / properties / note
        Added value: +{
        +  "description": "The free-text note the guest left with their RSVP, if any.",
        +  "type": [
        +    "string",
        +    "null"
        +  ]
        +}
      • changedOutput schema / properties / guests / items / required
        Previous value: -[
        -  "invitation_id",
        -  "name",
        -  "email",
        -  "phone",
        -  "rsvp_status",
        -  "party",
        -  "invite_url",
        -  "has_viewed"
        -]New value: +[
        +  "invitation_id",
        +  "name",
        +  "email",
        +  "phone",
        +  "rsvp_status",
        +  "party",
        +  "note",
        +  "answers",
        +  "invite_url",
        +  "has_viewed"
        +]
    • Changedlemonvite_publish_invitation2 fields changed
      • addedOutput schema / properties / invitation / properties / custom_fields
        Added value: +{
        +  "description": "The host's custom fields, in display order: `info` details shown on the invitation (gift registry, dress code) and `question` inputs on the RSVP form (dietary restrictions, meal choice). Change them with custom_fields on lemonvite_update_invitation.",
        +  "items": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "field_id": {
        +        "type": "string"
        +      },
        +      "input_type": {
        +        "anyOf": [
        +          {
        +            "enum": [
        +              "text",
        +              "select"
        +            ],
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "question fields only."
        +      },
        +      "kind": {
        +        "enum": [
        +          "info",
        +          "question"
        +        ],
        +        "type": "string"
        +      },
        +      "label": {
        +        "type": "string"
        +      },
        +      "options": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "type": "string"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "select questions only: the choices offered."
        +      },
        +      "required": {
        +        "description": "question fields only: must be answered by a guest who says yes or maybe.",
        +        "type": "boolean"
        +      },
        +      "value": {
        +        "description": "info fields only: the text shown on the invitation (may contain a URL).",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "required": [
        +      "field_id",
        +      "kind",
        +      "label",
        +      "value",
        +      "input_type",
        +      "options",
        +      "required"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / properties / invitation / required
        Previous value: -[
        -  "event_id",
        -  "publish_status",
        -  "payment_status",
        -  "can_publish",
        -  "title",
        -  "event_type",
        -  "description",
        -  "start_datetime",
        -  "end_datetime",
        -  "timezone",
        -  "location",
        -  "host_name",
        -  "rsvp_deadline",
        -  "image_url",
        -  "has_invitation_image",
        -  "price_display",
        -  "guest_count",
        -  "rsvp_summary",
        -  "public_rsvp_url",
        -  "manage_url",
        -  "guest_settings"
        -]New value: +[
        +  "event_id",
        +  "publish_status",
        +  "payment_status",
        +  "can_publish",
        +  "title",
        +  "event_type",
        +  "description",
        +  "start_datetime",
        +  "end_datetime",
        +  "timezone",
        +  "location",
        +  "host_name",
        +  "rsvp_deadline",
        +  "image_url",
        +  "has_invitation_image",
        +  "price_display",
        +  "guest_count",
        +  "rsvp_summary",
        +  "public_rsvp_url",
        +  "manage_url",
        +  "custom_fields",
        +  "guest_settings"
        +]
    • Changedlemonvite_update_invitation3 fields changed
      • addedInput schema / properties / custom_fields
        Added value: +{
        +  "description": "The host's custom fields — the COMPLETE list, in display order, replacing what is saved. Two kinds: `info` = a detail shown on the invitation for guests to read (gift registry link, dress code, parking); `question` = an input on the RSVP form guests answer when they say yes or maybe (dietary restrictions, meal choice), optionally required. To edit, read custom_fields from lemonvite_get_invitation, change the list and send it back WITH each existing field_id — a field sent without its field_id is created anew and a saved field left out of the list is deleted together with any guest answers. Omit to leave the fields unchanged; pass [] to remove them all. Up to 10 of each kind.",
        +  "items": {
        +    "properties": {
        +      "field_id": {
        +        "description": "The saved field this entry updates (from lemonvite_get_invitation). Omit for a new field.",
        +        "type": "string"
        +      },
        +      "input_type": {
        +        "description": "question only: text (free answer, default) or select (guest picks one of `options`).",
        +        "enum": [
        +          "text",
        +          "select"
        +        ],
        +        "type": "string"
        +      },
        +      "kind": {
        +        "description": "info = shown on the invitation; question = asked on the RSVP form.",
        +        "enum": [
        +          "info",
        +          "question"
        +        ],
        +        "type": "string"
        +      },
        +      "label": {
        +        "description": "The heading guests see (\"Gift registry\", \"Any dietary restrictions?\").",
        +        "maxLength": 80,
        +        "type": "string"
        +      },
        +      "options": {
        +        "description": "select questions only: 2 or more distinct choices.",
        +        "items": {
        +          "maxLength": 60,
        +          "type": "string"
        +        },
        +        "maxItems": 12,
        +        "type": "array"
        +      },
        +      "required": {
        +        "description": "question only: guests saying yes or maybe must answer (default false).",
        +        "type": "boolean"
        +      },
        +      "value": {
        +        "description": "info only, required for that kind: the text shown under the heading. URLs become links.",
        +        "maxLength": 1000,
        +        "type": "string"
        +      }
        +    },
        +    "required": [
        +      "kind",
        +      "label"
        +    ],
        +    "type": "object"
        +  },
        +  "maxItems": 20,
        +  "type": "array"
        +}
      • addedOutput schema / properties / invitation / properties / custom_fields
        Added value: +{
        +  "description": "The host's custom fields, in display order: `info` details shown on the invitation (gift registry, dress code) and `question` inputs on the RSVP form (dietary restrictions, meal choice). Change them with custom_fields on lemonvite_update_invitation.",
        +  "items": {
        +    "additionalProperties": false,
        +    "properties": {
        +      "field_id": {
        +        "type": "string"
        +      },
        +      "input_type": {
        +        "anyOf": [
        +          {
        +            "enum": [
        +              "text",
        +              "select"
        +            ],
        +            "type": "string"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "question fields only."
        +      },
        +      "kind": {
        +        "enum": [
        +          "info",
        +          "question"
        +        ],
        +        "type": "string"
        +      },
        +      "label": {
        +        "type": "string"
        +      },
        +      "options": {
        +        "anyOf": [
        +          {
        +            "items": {
        +              "type": "string"
        +            },
        +            "type": "array"
        +          },
        +          {
        +            "type": "null"
        +          }
        +        ],
        +        "description": "select questions only: the choices offered."
        +      },
        +      "required": {
        +        "description": "question fields only: must be answered by a guest who says yes or maybe.",
        +        "type": "boolean"
        +      },
        +      "value": {
        +        "description": "info fields only: the text shown on the invitation (may contain a URL).",
        +        "type": [
        +          "string",
        +          "null"
        +        ]
        +      }
        +    },
        +    "required": [
        +      "field_id",
        +      "kind",
        +      "label",
        +      "value",
        +      "input_type",
        +      "options",
        +      "required"
        +    ],
        +    "type": "object"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / properties / invitation / required
        Previous value: -[
        -  "event_id",
        -  "publish_status",
        -  "payment_status",
        -  "can_publish",
        -  "title",
        -  "event_type",
        -  "description",
        -  "start_datetime",
        -  "end_datetime",
        -  "timezone",
        -  "location",
        -  "host_name",
        -  "rsvp_deadline",
        -  "image_url",
        -  "has_invitation_image",
        -  "price_display",
        -  "guest_count",
        -  "rsvp_summary",
        -  "public_rsvp_url",
        -  "manage_url",
        -  "guest_settings"
        -]New value: +[
        +  "event_id",
        +  "publish_status",
        +  "payment_status",
        +  "can_publish",
        +  "title",
        +  "event_type",
        +  "description",
        +  "start_datetime",
        +  "end_datetime",
        +  "timezone",
        +  "location",
        +  "host_name",
        +  "rsvp_deadline",
        +  "image_url",
        +  "has_invitation_image",
        +  "price_display",
        +  "guest_count",
        +  "rsvp_summary",
        +  "public_rsvp_url",
        +  "manage_url",
        +  "custom_fields",
        +  "guest_settings"
        +]
  7. 13 tool updates
    • First observedlemonvite_add_guests
    • First observedlemonvite_create_invitation
    • First observedlemonvite_generate_design
    • First observedlemonvite_get_account
    • First observedlemonvite_get_invitation
    • First observedlemonvite_get_rsvp_summary
    • First observedlemonvite_list_guests
    • First observedlemonvite_list_invitations
    • First observedlemonvite_publish_invitation
    • First observedlemonvite_remove_guests
    • First observedlemonvite_start_checkout
    • First observedlemonvite_update_guests
    • First observedlemonvite_update_invitation

Publisher details

Operator
Lemonvite · Publisher source
Vendor relationship
Not applicable
Trust center
Not applicable
Restrictions
Not applicable

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    B
    maintenance
    Enables creating events, invitations, and personalized guest links, and following RSVPs on InvitaAI from any MCP client.
    18
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    MCP server for Evite that lets you read and act on events as guest or host: list events, view guest lists, RSVP, send messages, and create/edit events.
    20
    385 npm
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources