Lemonvite
Server Details
Create, design and send event invitations, manage guest lists, and track RSVPs.
- Status
- Healthy
- Uptime
- 99.5% over 22 days
- OAuth
- Works in Glama
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
TDQS
Scored across 18 tools
Although add_contacts, add_guests and invite_contacts all involve adding people, each description crisply states its distinct scope (address book vs guest list vs saved contacts to guest list) and cross-references the others. Design tools (generate vs edit) and get/list tools are likewise clearly separated.
Every tool follows the identical lemonvite_verb_noun snake_case pattern (add_guests, update_invitation, list_guests, remove_contacts, start_checkout). No deviations or mixed conventions.
18 tools is slightly above the ideal 3-15 band, but the domain genuinely spans invitations, guests, contacts, designs, RSVPs and payments, so each tool earns a place. It is heavy but not bloated with redundant entries.
Full lifecycle is covered: create/get/update/publish invitations, guest and contact CRUD, design generation/editing, RSVP summaries, account and checkout. Minor gaps remain, such as no explicit cancel-invitation tool despite cancelled events being referenced.
Available Tools
18 toolslemonvite_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.
| Name | Required | Description | Default |
|---|---|---|---|
| contacts | Yes | Batch of 1–50 contacts to save. |
Output Schema
| Name | Required | Description |
|---|---|---|
| added | Yes | |
| failed | Yes | |
| failures | Yes | Contacts that failed validation, with the reason. A refusal of the whole call is in the text. |
| duplicates | Yes | Contacts not saved again because their email or phone is already saved. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare the mutation/safety profile; the description adds substantial context beyond them: nobody is messaged, matching/dedup by email or phone, the name-only re-save exception, the atomic 2000-contact cap failure, and per-contact validation failure isolation. The idempotentHint=false annotation is consistent with the stated re-save behavior, not contradicted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Long but densely packed with no filler; it is front-loaded with the when-to-use rule before the mechanics. Each sentence carries a distinct constraint (routing, batch size, validation, dedup, cap), though slightly more could be tightened.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need not be explained, and the description still covers limits, atomicity, side effects, validation behavior, and dedup rules. Nothing an agent needs to call this correctly is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so field formats are already documented, but the description adds real meaning: the 1-50 batch constraint, the requirement of at least name/email/phone, and the dedup key semantics. These go beyond the structured schema without fully compensating for anything missing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('people saved to their Lemonvite contact list (address book)') and immediately distinguishes the tool from siblings by name. An agent can separate saving contacts from inviting guests without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger ('when the user wants people saved... without inviting them to an event now') and names the alternatives for the contrasting case ('to invite people, use lemonvite_add_guests or lemonvite_invite_contacts'). Both when-to-use and when-not-to-use are covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lemonvite_add_guestsAdd guestsADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| guests | Yes | 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. | |
| event_id | Yes | 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. | |
| authorized_credits | No | 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. | |
| host_confirms_sms_consent | No | Set true only when the host confirms the guests agreed to receive SMS about this event. Required when adding guests with phone numbers. |
Output Schema
| Name | Required | Description |
|---|---|---|
| added | Yes | |
| failed | Yes | |
| results | Yes | |
| guest_count | Yes | |
| credits_used | Yes | |
| payment_required | No | Present when the batch needs phone allowance credits the call did not authorize. No guest was saved. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only flag destructive/openWorld/non-idempotent; the description goes far beyond them, disclosing draft vs published invite timing, SMS-consent prerequisites, guest_limit enforcement, the payment_required failure mode that saves none of the guests, per-guest independent results, and that purchased credits are shared with publishing so no further charge applies.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Information is densely front-loaded with the when/when-not clause and batching instruction first. It is long and packs several distinct flows (consent, limits, credits, retry) into one paragraph, so it is efficient but borders on overloaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given four parameters, an output schema, and destructive annotations, the description covers everything an agent needs: prerequisites, failure semantics, credit flow, and follow-up tools. Return values are left to the output schema, as intended.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so the baseline is 3; the description adds meaning beyond it by explaining that authorized_credits is a host-confirmed spend cap and that newly bought credits are shared with publishing, and by restating the min-contact rule for each guest.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('people actually added to the guest list of an existing Lemonvite invitation') and immediately differentiates from the near-neighbor scenario of brainstorming invitees. It also names the sibling to use for modifications (lemonvite_update_guests), so an agent can separate it from update/list/remove tools 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit when (user wants people added) and when-not (brainstorming), plus concrete batching rules ('whole list in one call of up to 50 guests, not one call per guest'). It routes to specific alternatives: lemonvite_list_invitations to obtain event_id, lemonvite_start_checkout to buy credits, lemonvite_update_guests to fix existing guests.
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 invitationAInspect
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. 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).
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | Event title, max 60 characters | |
| timezone | Yes | IANA 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_name | No | Host 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_type | Yes | One of: birthday, wedding, party, baby-shower, celebration-of-life, general. Use 'general' when unsure. | |
| is_virtual | No | True for an online event using virtual_url; false for an in-person event requiring location_name. Defaults to false on create. | |
| max_guests | No | Event capacity — the most guests that can RSVP yes. null = uncapped. | |
| description | No | Invitation wording/details shown to guests | |
| virtual_url | No | Meeting URL for virtual events | |
| end_datetime | No | Event end, local wall-clock ISO-8601 with no UTC offset. Pass null to remove an existing end time. | |
| custom_fields | No | 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. | |
| location_name | No | Venue 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_date | No | Optional: 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_deadline | No | RSVP-by date, local wall-clock ISO-8601 with no UTC offset (must be before start_datetime). Pass null to remove an existing deadline. | |
| start_datetime | Yes | Event start as the venue's LOCAL wall-clock time, ISO-8601 with NO UTC offset | |
| allow_plus_ones | No | Whether guests may bring additional attendees, subject to the adult and child limits. Defaults to true on create. | |
| group_chat_link | No | URL of a group chat for guests (WhatsApp, Signal, …), shown on the invitation. Pass null to clear. | |
| show_guest_list | No | Whether guests can see who else is invited | |
| invitation_image | No | An 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_address | No | Street address of the venue (optional; helps guests find it). Never required. | |
| allow_guest_posts | No | Whether guests may post on the event wall (default true) | |
| guest_bring_items | No | What guests should bring, shown on the invitation. Pass null to clear. | |
| default_limit_kids | No | Default plus-one allowance: how many KIDS each guest may bring (0–20). null = no limit. | |
| allow_guest_replies | No | Whether guests may reply to wall posts (default true) | |
| birthday_person_name | No | Name of the person being celebrated at a birthday event, up to 120 characters. | |
| default_limit_adults | No | Default plus-one allowance: how many ADULTS each guest may bring (0–20). null = no limit. Both limits at 0 is refused. | |
| birthday_person_likes | No | Gift and interest hints for the birthday person (birthday events). Pass null to clear. |
Output Schema
| Name | Required | Description |
|---|---|---|
| warnings | No | |
| invitation | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds high-value behavior beyond the annotations: 'It creates a DRAFT only and does not publish, charge, or contact anyone.' It also discloses failure behavior ('nothing is created and the error names the field'), which is important for an agent deciding how to recover. This is genuinely useful context that the plain boolean hints do not provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence earns its place: trigger condition, draft-only caveat, negative trigger, required fields, error behavior, and next steps all flow in a logical order. No filler or redundant restatement of the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich schema and output schema, the description covers everything an agent needs to decide when to call the tool, what minimal fields to provide, what failure looks like, and what to do afterward. The only remaining details belong to the schema itself, which is appropriately left there.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value by identifying the minimal required parameter set, calling out the conditional requirement for location_name on in-person events, and explaining how to map a conversation image to invitation_image. This is meaningful guidance for a 26-parameter tool, though the schema already does most of the semantic work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: creating an actual Lemonvite invitation/RSVP page, and lists concrete triggers ('create an invitation, make an invite, set up RSVPs'). It also distinguishes itself from related work by warning 'Do not call it merely because invitation wording or images are being discussed' and by pointing to lemonvite_update_invitation, lemonvite_add_guests, and lemonvite_publish_invitation for later steps.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says when to use the tool ('when the user wants an actual Lemonvite invitation or RSVP page'), when not to use it ('merely because invitation wording or images are being discussed'), and names the sibling alternatives for follow-up actions. It also gives a clear next-step sequence: add guests, publish, and checkout when payment is required.
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 designADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| event_id | Yes | 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. | |
| edit_request | Yes | The 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
| Name | Required | Description |
|---|---|---|
| invitation | Yes | |
| generations_remaining | Yes | Design generations left on the connected account after this call. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate destructive=true and readOnly=false; description elaborates with specifics: spends one design generation, REPLACES current artwork, previous version remains in history, and constraints (no GIF, no text/image layers). Adds substantial behavioral context beyond annotations with no contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is long but every sentence carries essential information: usage trigger, constraints, cost, confirmation, and alternative pathways. Front-loaded with the primary usage condition. Minor redundancy with annotations but overall well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers all critical aspects: destructive nature, cost (design generation), prerequisites (existing non-GIF artwork without layers), confirmation requirement, source for event_id, and alternatives. With an output schema present, return format is handled. Nothing an agent needs to invoke correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema already fully documents both parameters (100% coverage), so baseline is 3. Description adds value by instructing to put the request in user's own words and not rewrite into a design brief, effectively clarifying the intended content of edit_request beyond schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states specific verb 'edit' and resource 'current artwork', with concrete examples and explicit contrast to generating a new design. It clearly distinguishes from sibling lemonvite_generate_design while naming the alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use ('change to CURRENT artwork rather than a new design'), when not to use (GIF or layered artwork), and names alternatives (lemonvite_generate_design for from-scratch, invitation_image via update_invitation for attaching images). Also instructs to confirm before calling and how to get event_id.
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 designADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| event_id | Yes | 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. | |
| design_brief | No | The host's art direction in their own words: theme, colours, mood, motifs, style. Omit for a default design suited to the event type. | |
| reference_image | No | An 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_details | No | Letter the date, time and venue onto the design (default true). |
Output Schema
| Name | Required | Description |
|---|---|---|
| invitation | Yes | |
| generations_remaining | Yes | Design generations left on the connected account after this call. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark destructiveHint=true, and the description adds concrete behavioral context: each call spends one design generation, replaces current artwork, keeps earlier designs in history, and reference_image is not stored as artwork. It also discloses credit economics for new accounts. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence earns its place: purpose, exclusions, parameter guidance, behavioral consequences, and alternatives are all present. It front-loads the core purpose and never repeats schema boilerplate.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, credit-costing tool with nested parameters and sibling overlap, the description fully covers invocation conditions, parameter semantics, side effects, and alternatives. The presence of an output schema means return-value detail is not required, and nothing necessary for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the description still adds meaning: design_brief should be art direction and need not repeat auto-lettered event details; include_event_details defaults true and false only for artwork without details; reference_image guides style/subject/palette and is not stored; event_id is explicitly distinguished from guest invitation_id and RSVP URL.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: Lemonvite's design engine creates invitation artwork. It explicitly distinguishes from siblings by naming lemonvite_edit_design for changing artwork and lemonvite_update_invitation for attaching assistant-made images, so an agent can select correctly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use conditions: user wants a Lemonvite design, assistant cannot make images, or user asked for a Lemonvite design. It also gives a negative rule ('Never call it merely because designs or themes are being discussed') and names alternatives for related but distinct actions, including edit_design and update_invitation.
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 accountARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| name | Yes | |
| Yes | ||
| credits | Yes | |
| credit_price_display | Yes | |
| generations_remaining | Yes | Design generations left for lemonvite_generate_design. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark this as readOnly and non-destructive, but the description goes further by explaining the semantics of credits and generations_remaining, including that credits are a shared balance, publishing uses one credit, extra phone-guest batches use additional credits, and generations_remaining does not reset over time. This is valuable behavioral context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence earns its place: trigger conditions, credit semantics, generation semantics, the credit-to-generation conversion, and related tool routing. The most important usage guidance is front-loaded, and there is no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter account status tool with an output schema, the description is complete. It explains both key output fields, their relationship, non-resetting behavior, and related tools for actions like adding credits or checking invitation requirements. No important context is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and 100% schema description coverage, so the baseline is 4. The description adds meaning to the output fields (credits and generations_remaining) rather than input parameters, which is appropriate for a zero-parameter read-only account tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with explicit trigger conditions: which account is connected, how many credits it has, or how many design generations are left. It names the resource (Lemonvite account) and the specific fields, clearly distinguishing it from generation, invitation, and checkout tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use guidance and points to alternatives: lemonvite_start_checkout for adding credits and lemonvite_get_invitation for invitation-specific required_credits. It also clarifies how generations_remaining relates to lemonvite_generate_design and lemonvite_edit_design, so an agent can route correctly.
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 detailsARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| event_id | Yes | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| warnings | No | |
| invitation | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds meaningful behavioral context: co-hosts can read it, and it returns payment/publication status and credits needed to publish. It could mention potential errors or response format, but the output schema covers that. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single long sentence but is front-loaded with the primary purpose and then packed with useful routing and usage context. It avoids fluff and every clause adds value. Slightly verbose but not redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has an output schema and annotations, the description need not repeat return details. It covers when to use, what it returns, how to obtain the parameter, and how it relates to sibling tools. Nothing essential is missing for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the parameter description already clarifies that event_id is not a guest invitation_id or RSVP URL. The description adds cross-tool guidance ('Get event_id from lemonvite_list_invitations') which aids retrieval. While not strictly necessary, this additional context earns above the baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves the full current state of a Lemonvite invitation, enumerating specific fields (details, publication/payment status, credits, guest/RSVP counts, custom fields, guest settings). It also distinguishes itself from sibling tools by specifying what it is not (e.g., not for guest responses or RSVP summaries). This is a specific verb+resource with strong sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly instructs when to use this tool ('Use this when the user wants the full current state'), provides an alternative for obtaining event_id, and gives clear exclusions: use lemonvite_list_guests for per-guest responses, lemonvite_get_rsvp_summary for counts alone, and check payment_status here before calling lemonvite_publish_invitation. This is thorough and leaves no ambiguity about routing.
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 summaryARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| event_id | Yes | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| event_id | Yes | |
| guest_count | Yes | |
| rsvp_summary | Yes | |
| public_rsvp_url | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even though annotations already declare readOnlyHint=true and destructiveHint=false, the description adds meaningful behavioral context: counts are read live, cover only active guests, remove excluded guests, count each guest once, and include plus-ones in party-size totals. It also discloses the conditional behavior around returning the public RSVP link only once the invitation is published, which the annotations do not convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the primary use case and then delivers dense, relevant detail in a compact space. Every sentence earns its place: usage criteria, live count semantics, party-size calculation, link behavior, parameter source, and the sibling alternative. There is no redundant filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with one well-documented parameter, a read-only annotation profile, and an output schema, the description is complete. It covers when to use it, how to obtain the event_id, what the counts mean, the edge case around plus-ones, and when the RSVP link appears, leaving no practical gap for an agent invoking the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the input schema already documents event_id as the Lemonvite event identifier, not a guest invitation_id or RSVP URL. The tool description restates this guidance, adding marginal clarity but no genuinely new parameter semantics beyond what the schema provides, so the high-coverage baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource (Lemonvite RSVP summary) and the exact queries it answers: how many guests are going, declined, maybe, have not replied, or how many adults and children are coming. It also distinguishes itself from lemonvite_list_guests by stating that this tool returns counts, not per-guest details.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool ('when the user asks how many guests are going...') and names the alternative for a different need ('To see which guest said what, use lemonvite_list_guests instead'). It also tells the agent where to obtain the required event_id, making the routing and prerequisites clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lemonvite_invite_contactsInvite contactsADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| event_id | Yes | 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. | |
| contact_ids | Yes | 1–50 contact_ids returned by lemonvite_search_contacts. Each becomes a guest on this invitation. | |
| authorized_credits | No | 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. | |
| host_confirms_sms_consent | No | Set 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
| Name | Required | Description |
|---|---|---|
| added | Yes | |
| failed | Yes | |
| results | Yes | |
| guest_count | Yes | |
| credits_used | Yes | |
| payment_required | No | Present when the batch needs phone allowance credits the call did not authorize. No guest was saved. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructive/openWorld/non-idempotent, and the description adds substantial operational detail beyond them: the 50-contact cap, that already-invited contacts fail alone, guest_limit enforcement, all-or-nothing payment_required on published phone overages, immediate invitation on published events, and the SMS-consent gate. This is exactly the kind of failure-mode disclosure that helps an agent call safely.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The most important routing information (when to use, search first) is front-loaded, and the error/credit/SMS handling follows logically. It is dense and slightly long, with a couple of details that echo the schema (the 50-contact limit), but nearly every sentence carries operational weight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, credit-consuming, multi-step tool, the description covers prerequisites, error semantics, credit/consent workflow, and side effects. Since an output schema exists, return values need not be re-explained, and 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents each parameter (baseline 3). The description adds value beyond it by explaining that the saved name/email/phone are pulled from the contact and must not be retyped, and by describing the authorized_credits retry workflow and host_confirms_sms_consent trigger condition.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: adding people from the Lemonvite contact list to an invitation's guest list, with a concrete example. It clearly distinguishes this tool from siblings like lemonvite_add_guests and lemonvite_search_contacts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It opens with an explicit when-to-use trigger, mandates lemonvite_search_contacts as the source of contact_ids, and explains the relationship to lemonvite_add_guests. It also routes the credit shortfall case to lemonvite_start_checkout with the exact conditions (no event_id, retry with authorized_credits after host confirmation).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lemonvite_list_guestsList guestsARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| event_id | Yes | 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. | |
| rsvp_status | No | Filter guests by RSVP: pending = awaiting reply, attending = going, declined = not going, maybe = tentative. Omit to list all guests. |
Output Schema
| Name | Required | Description |
|---|---|---|
| guests | Yes | |
| guest_count | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal read-only, but the description adds non-obvious behavior: every active guest is returned in one response, there is no paging, ordering is unspecified, removed guests are excluded, and invite_url stays null until publication. These are behavioral caveats an agent could not infer from the schema or annotations. There is no contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense at around 140 words, but every sentence earns its place: scope, response behavior, publish caveat, filtering behavior, ID sourcing, downstream tool IDs, and alternative routing. The primary use case is front-loaded, with caveats and routing details following naturally. No filler or redundant restatement of the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description does not need to re-enumerate return fields. It covers input sourcing, filter semantics, important behavioral caveats, and the alternative tool for counts, which is everything an agent needs to call it correctly. The description is complete for a read-only list operation of this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is already high, and the description adds meaning beyond it: it tells the agent where to obtain event_id and interprets rsvp_status=pending as 'who has not responded'. It also explains that omitting rsvp_status lists everyone, which reinforces the schema without restating enum definitions. This is modest but useful added value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description leads with a specific use case: seeing who is on a Lemonvite invitation and how each guest responded, then enumerates the returned fields. It clearly distinguishes itself from siblings by describing itself as a guest-listing operation and even points to the count-summary alternative. It is not a tautology of the title and gives an agent enough to identify the right tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says when to use the tool ('Use this when the user wants to see who is on a Lemonvite invitation...') and when not to ('For counts only, use lemonvite_get_rsvp_summary instead'). It also provides operational routing: get event_id from lemonvite_list_invitations, and note that each guest's invitation_id is what update/remove tools consume. This is strong guidance for tool selection and sequencing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lemonvite_list_invitationsList invitationsARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| past | Yes | |
| upcoming | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, so the safe-read profile is clear. The description goes further by disclosing non-paginated single-response behavior, split into upcoming/past, newest-first ordering, and the differing field sets for each category. This is rich behavioral context that the annotations do not provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the primary usage, followed by a compact breakdown of return structure and field details, and ends with explicit routing to sibling tools. Every sentence contributes a distinct, necessary piece of information; there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with an output schema, the description fully covers what an agent needs: what triggers the call, what comes back, how it's organized, and where to go for deeper detail. The absence of pagination is called out, and the field-level differences between upcoming and past items are specified. Nothing is left to inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the schema coverage is 100% (vacuously). Per the baseline for 0-param tools, a 4 is appropriate since description adds nothing about parameters, but nothing is needed. It does mention what the returned data contains, which indirectly aids understanding of what can be used.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('find or pick... Lemonvite invitations') and precisely scopes the result set ('every event the connected account created or co-hosts'). It explicitly differentiates itself from lemonvite_get_invitation and lemonvite_list_guests, leaving no ambiguity about which tool to choose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It opens with the exact trigger condition ('when the user wants to find or pick one of their Lemonvite invitations, or when you need the event_id...') and then names the alternatives for full details and guests. This gives an agent explicit when-to-use and when-to-use-other 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 invitationADestructiveIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| event_id | Yes | 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. | |
| authorized_credits | No | Maximum credits the host has agreed to use after reviewing required_credits. |
Output Schema
| Name | Required | Description |
|---|---|---|
| warnings | No | |
| invitation | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide the safety profile (not read-only, open-world, destructive, idempotent), and the description meaningfully expands on it: it discloses the external-contact side effect ('contacts people outside this conversation'), the cost model (1 credit plus one per extra phone batch), that calling on an already-published invitation is a safe no-op, and the permission boundary for co-hosts. Nothing contradicts the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Despite being long, every sentence carries load-bearing guidance: when to use, when not to, prerequisite reads, cost, payment fallback, permissions, edge cases. The main intent is front-loaded in the first sentence and the structure follows the execution order an agent would need. For a paid, externally-sending side-effecting action, the density is justified with zero filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and both parameters fully documented, the description covers everything an agent needs to call it correctly: triggers, prerequisites, pricing, checkout path, permission restrictions, cancelled-event handling, and idempotent no-op behavior. Nothing an agent would need to ask about is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds genuine semantic value beyond the schema: it explains the credit pricing that determines authorized_credits, instructs that authorized_credits should only be passed 'after the host agrees' and after explaining extra charges, and ties event_id into the checkout fallback flow (pass it to lemonvite_start_checkout). This goes beyond the field-level descriptions already present.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The title and description state a specific verb and resource: 'Publish an invitation' means taking it live, opening the RSVP page, and DELIVERING it to guests with pending email or phone invitations. This distinguishes it clearly from siblings like lemonvite_create_invitation, lemonvite_update_invitation, and lemonvite_edit_design — an agent can tell exactly what action this triggers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives an explicit when-to-use ('only when the user's intent to go live and send is clear, never merely because a draft exists'), names the prerequisite flow (lemonvite_get_invitation to read payment_status, required_credits, publishing_price), and names the exact alternative for the payment_required case (lemonvite_start_checkout with event_id). It even states who cannot use it (co-hosts get an error) and which events are excluded (cancelled).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lemonvite_remove_contactsRemove contactsADestructiveIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| contact_ids | Yes | 1–50 contact_ids returned by lemonvite_search_contacts. These contacts are deleted. |
Output Schema
| Name | Required | Description |
|---|---|---|
| removed | Yes | |
| not_found | Yes | Ids that matched no contact in this account. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, and the description adds substantially beyond them: deletion is permanent and not undoable, contacts are not notified, unmatched ids land in not_found, and guest lists are unaffected. This is exactly the kind of consequence disclosure a destructive tool needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded trigger, then constraints, then the sibling exclusion — a sensible order. It is dense with semicolon-joined clauses, but essentially every clause carries unique information, so it stays close to efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value explanation is not needed; the description covers trigger, ID source, permanence, notification behavior, unmatched-id handling, and sibling routing. Nothing an agent needs to invoke this destructive tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the single parameter is well documented, so the baseline is 3. The description still adds real value by naming the origin of the ids (lemonvite_search_contacts) and the not_found behavior for unmatched ids, which the schema does not state.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('people deleted from their Lemonvite contact list (address book)') and explicitly distinguishes itself from the nearest sibling by stating it does not touch invitation guest lists. An agent can differentiate it from lemonvite_remove_guests without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Opens with an explicit trigger ('Use this when the user wants people deleted...') and names the alternative with its selecting condition ('use lemonvite_remove_guests for that'). It also routes the agent to lemonvite_search_contacts as the ID source, so both the when and the from-where are covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lemonvite_remove_guestsRemove guestsADestructiveIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| event_id | Yes | 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. | |
| invitation_ids | Yes | 1–50 guest invitation_ids returned by lemonvite_list_guests for this event. These guests are removed and their invite links stop working. |
Output Schema
| Name | Required | Description |
|---|---|---|
| failed | Yes | |
| removed | Yes | |
| results | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the annotations, detailing permanent deletion on drafts, archiving on published invitations, invite links stopping, guest counts and RSVP totals dropping, host restoration on the website, phone-guest allowance behavior, and lack of guest notification. No annotation is contradicted; in fact, the description reinforces the destructiveHint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the primary use case and then packs high-value behavioral details, source guidance, and an exclusion into a compact set of sentences. Every sentence earns its place, and there is no redundant restatement of the tool name or title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the destructive nature, the tool supplies all necessary side effects (deletion vs. archive, counts, restoration, phone allowance, notification), a source for IDs, and an explicit alternative for a related but different action. An output schema exists, so return-value details are not required in the description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds meaningful provenance for invitation_ids by instructing callers to get them from lemonvite_list_guests, and it explains the consequence that removed guests' invite links stop working, enriching the schema's 'these guests are removed' note.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('remove') and resource ('guests from a Lemonvite invitation'), and it differentiates from the sibling lemonvite_update_guests by explicitly warning not to use removal for detail fixes. It also clarifies the draft vs. published distinction, making the tool's purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It opens with an explicit when-to-use trigger ('Use this when the user wants guests taken off'), tells the caller where to source invitation_ids ('from lemonvite_list_guests'), and names the alternative tool for fixing details (lemonvite_update_guests). This leaves no ambiguity about when it applies versus its siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lemonvite_search_contactsSearch contactsARead-onlyInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Text to match anywhere in a contact's name, email or phone, e.g. "Alice". Omit to list contacts from the top. |
Output Schema
| Name | Required | Description |
|---|---|---|
| total | Yes | Contacts matching the query, including any beyond the ones returned. |
| contacts | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so safety is covered. The description adds real behavioral context beyond that: the search scope is limited to the connected account's own contacts, results cap at 50 sorted by name plus a total match count, and it advises how to handle overflow. It stops short of richer detail but the added value is genuine.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the trigger condition and use cases before mechanics (matching behavior, result cap). Every sentence carries information, though the paragraph is dense and slightly long for a single-parameter tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return shape need not be described, yet the description still communicates the cap, ordering, and total count that matter for deciding whether to re-query. Combined with annotations and full schema coverage, an agent has everything needed to invoke this correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description adds meaning the schema lacks: matching is case-insensitive and the query may be omitted to list contacts from the top. These are useful selection hints for an agent deciding how to construct the call.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('search contacts in the Lemonvite address book') and immediately scopes it with three concrete intents (find someone, check if saved, get contact_ids). It is clearly distinguishable from siblings like lemonvite_list_guests, which it explicitly names as the alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use it (user refers to people in their contact list) and routes to alternatives by name: lemonvite_invite_contacts and lemonvite_remove_contacts for downstream use of contact_ids, and lemonvite_list_guests for invitation rosters. No inference required.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| event_id | No | Draft invitation whose publishing shortfall to buy. Omit for account credits, including published-event guest changes. | |
| quantity | No | Credits 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
| Name | Required | Description |
|---|---|---|
| currency | Yes | |
| event_id | Yes | |
| quantity | Yes | |
| amount_cents | Yes | |
| checkout_url | Yes | |
| payment_status | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint=false, idempotentHint=false, destructiveHint=false. The description adds genuine value beyond these: 'creating the link charges nothing', 'Stripe expires an unpaid link after 24 hours', 'an abandoned checkout charges nothing', and the guarantee that a published invitation's payment_status stays paid. These are non-obvious side effects an agent could not infer from the schema or annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, and every sentence is functional across the two operational modes and safety constraints. It is long, but the length is earned by genuine complexity; it could be tightened into structured bullets but contains no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given two operational modes, integration with three sibling tools, payment-side effects, and safety constraints, nothing an agent needs to call it correctly is missing. The output schema exists, so return values need not be explained, and post-payment verification steps are specified in detail.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema already covers both params at 100%, so baseline is 3. The description adds value above that: how to derive quantity (pass publishing_price.credits_to_buy), the server-rejecting-changed-shortfall behavior, and the mode-dependent interpretation of event_id. This exceeds the schema, though it doesn't fully restate parameter formats.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('start checkout', 'buy account credits') and the exact triggers (publishing, extra phone guests, design generations). It distinguishes itself from sibling tools by inlining the follow-up workflows (lemonvite_get_invitation, lemonvite_publish_invitation, lemonvite_get_account), so an agent can separate checkout from the other 14 tools 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Exceptionally explicit: states when to use (host buying credits), when NOT to call (before the host has seen and agreed to the amount), and fully splits the two modes (with event_id vs. omitted). It names the exact sibling calls to make after payment and the retry/authorization behavior, leaving no ambiguity about selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
lemonvite_update_guestsUpdate guestsADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| guests | Yes | Batch of 1–50 guest updates. Each needs an invitation_id and the fields to change. Omitted fields retain their saved values. | |
| event_id | Yes | 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. | |
| authorized_credits | No | 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. | |
| host_confirms_sms_consent | No | 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. |
Output Schema
| Name | Required | Description |
|---|---|---|
| failed | Yes | |
| results | Yes | |
| updated | Yes | |
| credits_used | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true and readOnly=false, and the description earns its keep with non-obvious behavior: partial-update semantics (only passed fields change, empty string clears), per-guest independent results so one failure doesn't stop the batch, invitation re-send rules on published invitations, the SMS-consent requirement, and the credits/payment_required path.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The opening is front-loaded with the trigger and the batch/partial-update rules before the more specialized payment and consent conditions. It is dense and long-ish, but nearly every sentence carries operationally necessary information; the credit-retry sentence is the only slightly heavy passage.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
A mutation tool with an output schema, so return values need not be described. All decision-relevant behavior (identity source, batch limits, consent and credit gates, sibling routing) is present; 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.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is already 100%, so the structured fields carry the parameter detail; the description rises above baseline by tying parameters to workflow (authorized_credits is only set after the host agrees, host_confirms_sms_consent is required when adding a phone to a guest who had none) and by mapping invitation_id back to lemonvite_list_guests.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('fix saved guests on a Lemonvite invitation') and enumerates the mutable fields (name, email, phone). It explicitly distinguishes itself from the add and remove siblings in the final sentence, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use triggers, names alternatives ('To add new guests use lemonvite_add_guests; to take someone off the list use lemonvite_remove_guests'), and covers edge-case routing such as the payment_required flow and the lemonvite_start_checkout fallback for a credit shortfall.
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 invitationADestructiveIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | Event title, max 60 characters | |
| event_id | Yes | 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. | |
| timezone | No | IANA timezone, e.g. America/New_York | |
| host_name | No | Host 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_type | No | One of: birthday, wedding, party, baby-shower, celebration-of-life, general. Use 'general' when unsure. | |
| is_virtual | No | True for an online event using virtual_url; false for an in-person event requiring location_name. Defaults to false on create. | |
| max_guests | No | Event capacity — the most guests that can RSVP yes. null = uncapped. | |
| description | No | Invitation wording/details shown to guests | |
| virtual_url | No | Meeting URL for virtual events | |
| end_datetime | No | Event end, local wall-clock ISO-8601 with no UTC offset. Pass null to remove an existing end time. | |
| custom_fields | No | 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. | |
| location_name | No | Venue 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_deadline | No | RSVP-by date, local wall-clock ISO-8601 with no UTC offset (must be before start_datetime). Pass null to remove an existing deadline. | |
| start_datetime | No | Event start as the venue's LOCAL wall-clock time, ISO-8601 with NO UTC offset (e.g. 2026-10-04T18:00:00) | |
| allow_plus_ones | No | Whether guests may bring additional attendees, subject to the adult and child limits. Defaults to true on create. | |
| group_chat_link | No | URL of a group chat for guests (WhatsApp, Signal, …), shown on the invitation. Pass null to clear. | |
| show_guest_list | No | Whether guests can see who else is invited | |
| invitation_image | No | An 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_address | No | Street address of the venue (optional; helps guests find it). Never required. | |
| allow_guest_posts | No | Whether guests may post on the event wall (default true) | |
| guest_bring_items | No | What guests should bring, shown on the invitation. Pass null to clear. | |
| default_limit_kids | No | Default plus-one allowance: how many KIDS each guest may bring (0–20). null = no limit. | |
| allow_guest_replies | No | Whether guests may reply to wall posts (default true) | |
| birthday_person_name | No | Name of the person being celebrated at a birthday event, up to 120 characters. | |
| default_limit_adults | No | Default plus-one allowance: how many ADULTS each guest may bring (0–20). null = no limit. Both limits at 0 is refused. | |
| birthday_person_likes | No | Gift and interest hints for the birthday person (birthday events). Pass null to clear. |
Output Schema
| Name | Required | Description |
|---|---|---|
| warnings | No | |
| invitation | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=true, idempotentHint=true, and openWorldHint=true. The description adds crucial behavioral context beyond those flags: partial-update semantics (omitted fields keep saved values), the destructive replace behavior of custom_fields (a saved field left out is deleted with its guest answers), the fact that published invitations update on next page load without notifying guests, and the requirement to pass existing field_ids. This is rich, non-obvious behavioral disclosure that materially changes how an agent should call the tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense paragraph that front-loads the core purpose and usage condition, then packs the most important behavioral warnings (partial update, custom_fields replacement, published page behavior) before the sibling routing. Every sentence earns its place; there is no filler or repetition of schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 26-parameter mutation tool with a full output schema and 100% schema description coverage, the description covers the essential operational context: when to use it, what changes, what doesn't, the destructive custom_fields behavior, published-invitation visibility, and which siblings handle other intents. The output schema exists, so return values need no explanation. Nothing an agent needs to call this correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds value beyond the schema by explaining the overall partial-update model ('Only the fields you pass change; omitted fields keep their saved values') and by highlighting the custom_fields replace semantics and the need to read current values first. It also clarifies the invitation_image parameter as 'pass a new invitation_image' for artwork changes. The description doesn't enumerate every parameter, but the schema already covers them thoroughly, so the added semantic layer is meaningful.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource ('change a saved Lemonvite invitation') and enumerates exactly which fields can be changed, including artwork via invitation_image. It also distinguishes itself from siblings by naming lemonvite_create_invitation, lemonvite_generate_design, lemonvite_edit_design, and lemonvite_publish_invitation as the tools for other intents. An agent can tell exactly what this tool is for.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use guidance ('Use this when the user asks to change a saved Lemonvite invitation'), tells the agent to read current values with lemonvite_get_invitation first, warns against calling it merely to discuss changes, and names the sibling tools for create, design, and publish. This is exemplary routing 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.
5 tool updates
- Added
lemonvite_add_contacts - Changed
lemonvite_add_guests4 fields changed- added
Output schema / properties / payment_requiredAdded 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" +} - added
Output schema / properties / results / items / properties / contact_idAdded value: +{ + "type": "string" +} - removed
Output schema / properties / results / items / properties / payment_requiredRemoved value: -{ - "additionalProperties": false, - "properties": { - "creditsToBuy": { - "type": "number" - }, - "maxInvitations": { - "type": "number" - }, - "maxPhoneInvitations": { - "type": "number" - }, - "requiredCredits": { - "type": "number" - } - }, - "required": [ - "requiredCredits", - "creditsToBuy", - "maxPhoneInvitations", - "maxInvitations" - ], - "type": "object" -} - changed
Output schema / properties / results / items / requiredPrevious value: -[ - "guest", - "ok" -]New value: +[ + "ok" +]
- Added
lemonvite_invite_contacts - Added
lemonvite_remove_contacts - Added
lemonvite_search_contacts
8 tool updates
- Changed
lemonvite_add_guests1 field changed- changed
Input schema / properties / authorized_credits / descriptionPrevious 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."
- Changed
lemonvite_create_invitation2 fields changed- changed
Output schema / properties / invitation / properties / payment_status / descriptionPrevious 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." - changed
Output schema / properties / invitation / properties / phone_guest_allowance / descriptionPrevious value: -"Included or already purchased phone guests; null = no phone cap."New value: +"Phone guests this event already allows; null = no phone cap."
- Changed
lemonvite_edit_design3 fields changed- changed
Output schema / properties / generations_remaining / descriptionPrevious 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." - changed
Output schema / properties / invitation / properties / payment_status / descriptionPrevious 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." - changed
Output schema / properties / invitation / properties / phone_guest_allowance / descriptionPrevious value: -"Included or already purchased phone guests; null = no phone cap."New value: +"Phone guests this event already allows; null = no phone cap."
- Changed
lemonvite_generate_design3 fields changed- changed
Output schema / properties / generations_remaining / descriptionPrevious 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." - changed
Output schema / properties / invitation / properties / payment_status / descriptionPrevious 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." - changed
Output schema / properties / invitation / properties / phone_guest_allowance / descriptionPrevious value: -"Included or already purchased phone guests; null = no phone cap."New value: +"Phone guests this event already allows; null = no phone cap."
- Changed
lemonvite_get_invitation2 fields changed- changed
Output schema / properties / invitation / properties / payment_status / descriptionPrevious 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." - changed
Output schema / properties / invitation / properties / phone_guest_allowance / descriptionPrevious value: -"Included or already purchased phone guests; null = no phone cap."New value: +"Phone guests this event already allows; null = no phone cap."
- Changed
lemonvite_publish_invitation3 fields changed- changed
Input schema / properties / authorized_credits / descriptionPrevious 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." - changed
Output schema / properties / invitation / properties / payment_status / descriptionPrevious 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." - changed
Output schema / properties / invitation / properties / phone_guest_allowance / descriptionPrevious value: -"Included or already purchased phone guests; null = no phone cap."New value: +"Phone guests this event already allows; null = no phone cap."
- Changed
lemonvite_update_guests1 field changed- changed
Input schema / properties / authorized_credits / descriptionPrevious 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."
- Changed
lemonvite_update_invitation2 fields changed- changed
Output schema / properties / invitation / properties / payment_status / descriptionPrevious 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." - changed
Output schema / properties / invitation / properties / phone_guest_allowance / descriptionPrevious value: -"Included or already purchased phone guests; null = no phone cap."New value: +"Phone guests this event already allows; null = no phone cap."
9 tool updates
- Changed
lemonvite_add_guests4 fields changed- added
Input schema / properties / authorized_creditsAdded 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" +} - added
Output schema / properties / credits_usedAdded value: +{ + "type": "number" +} - added
Output schema / properties / results / items / properties / payment_requiredAdded value: +{ + "additionalProperties": false, + "properties": { + "creditsToBuy": { + "type": "number" + }, + "maxInvitations": { + "type": "number" + }, + "maxPhoneInvitations": { + "type": "number" + }, + "requiredCredits": { + "type": "number" + } + }, + "required": [ + "requiredCredits", + "creditsToBuy", + "maxPhoneInvitations", + "maxInvitations" + ], + "type": "object" +} - changed
Output schema / requiredPrevious value: -[ - "added", - "failed", - "guest_count", - "results" -]New value: +[ + "added", + "failed", + "credits_used", + "guest_count", + "results" +]
- Changed
lemonvite_create_invitation10 fields changed- changed
Output schema / properties / invitation / properties / can_publish / descriptionPrevious 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." - added
Output schema / properties / invitation / properties / guest_limitAdded value: +{ + "description": "Total cap; only support can raise it. null = verified host.", + "type": [ + "number", + "null" + ] +} - changed
Output schema / properties / invitation / properties / payment_status / descriptionPrevious 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." - changed
Output schema / properties / invitation / properties / payment_status / enumPrevious value: -[ - "paid", - "credit_available", - "payment_required" -]New value: +[ + "paid", + "credit_available", + "payment_required", + "not_applicable" +] - added
Output schema / properties / invitation / properties / phone_batch_sizeAdded value: +{ + "type": [ + "number", + "null" + ] +} - added
Output schema / properties / invitation / properties / phone_guest_allowanceAdded value: +{ + "description": "Included or already purchased phone guests; null = no phone cap.", + "type": [ + "number", + "null" + ] +} - added
Output schema / properties / invitation / properties / phone_guest_countAdded value: +{ + "type": "number" +} - added
Output schema / properties / invitation / properties / publishing_priceAdded 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" + } + ] +} - added
Output schema / properties / invitation / properties / required_creditsAdded value: +{ + "description": "Publishing plus phone batches. Review with the host before authorizing this many credits.", + "type": [ + "number", + "null" + ] +} - changed
Output schema / properties / invitation / requiredPrevious 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" +]
- Changed
lemonvite_edit_design11 fields changed- changed
Output schema / properties / generations_remaining / descriptionPrevious 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." - changed
Output schema / properties / invitation / properties / can_publish / descriptionPrevious 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." - added
Output schema / properties / invitation / properties / guest_limitAdded value: +{ + "description": "Total cap; only support can raise it. null = verified host.", + "type": [ + "number", + "null" + ] +} - changed
Output schema / properties / invitation / properties / payment_status / descriptionPrevious 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." - changed
Output schema / properties / invitation / properties / payment_status / enumPrevious value: -[ - "paid", - "credit_available", - "payment_required" -]New value: +[ + "paid", + "credit_available", + "payment_required", + "not_applicable" +] - added
Output schema / properties / invitation / properties / phone_batch_sizeAdded value: +{ + "type": [ + "number", + "null" + ] +} - added
Output schema / properties / invitation / properties / phone_guest_allowanceAdded value: +{ + "description": "Included or already purchased phone guests; null = no phone cap.", + "type": [ + "number", + "null" + ] +} - added
Output schema / properties / invitation / properties / phone_guest_countAdded value: +{ + "type": "number" +} - added
Output schema / properties / invitation / properties / publishing_priceAdded 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" + } + ] +} - added
Output schema / properties / invitation / properties / required_creditsAdded value: +{ + "description": "Publishing plus phone batches. Review with the host before authorizing this many credits.", + "type": [ + "number", + "null" + ] +} - changed
Output schema / properties / invitation / requiredPrevious 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" +]
- Changed
lemonvite_generate_design11 fields changed- changed
Output schema / properties / generations_remaining / descriptionPrevious 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." - changed
Output schema / properties / invitation / properties / can_publish / descriptionPrevious 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." - added
Output schema / properties / invitation / properties / guest_limitAdded value: +{ + "description": "Total cap; only support can raise it. null = verified host.", + "type": [ + "number", + "null" + ] +} - changed
Output schema / properties / invitation / properties / payment_status / descriptionPrevious 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." - changed
Output schema / properties / invitation / properties / payment_status / enumPrevious value: -[ - "paid", - "credit_available", - "payment_required" -]New value: +[ + "paid", + "credit_available", + "payment_required", + "not_applicable" +] - added
Output schema / properties / invitation / properties / phone_batch_sizeAdded value: +{ + "type": [ + "number", + "null" + ] +} - added
Output schema / properties / invitation / properties / phone_guest_allowanceAdded value: +{ + "description": "Included or already purchased phone guests; null = no phone cap.", + "type": [ + "number", + "null" + ] +} - added
Output schema / properties / invitation / properties / phone_guest_countAdded value: +{ + "type": "number" +} - added
Output schema / properties / invitation / properties / publishing_priceAdded 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" + } + ] +} - added
Output schema / properties / invitation / properties / required_creditsAdded value: +{ + "description": "Publishing plus phone batches. Review with the host before authorizing this many credits.", + "type": [ + "number", + "null" + ] +} - changed
Output schema / properties / invitation / requiredPrevious 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" +]
- Changed
lemonvite_get_invitation10 fields changed- changed
Output schema / properties / invitation / properties / can_publish / descriptionPrevious 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." - added
Output schema / properties / invitation / properties / guest_limitAdded value: +{ + "description": "Total cap; only support can raise it. null = verified host.", + "type": [ + "number", + "null" + ] +} - changed
Output schema / properties / invitation / properties / payment_status / descriptionPrevious 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." - changed
Output schema / properties / invitation / properties / payment_status / enumPrevious value: -[ - "paid", - "credit_available", - "payment_required" -]New value: +[ + "paid", + "credit_available", + "payment_required", + "not_applicable" +] - added
Output schema / properties / invitation / properties / phone_batch_sizeAdded value: +{ + "type": [ + "number", + "null" + ] +} - added
Output schema / properties / invitation / properties / phone_guest_allowanceAdded value: +{ + "description": "Included or already purchased phone guests; null = no phone cap.", + "type": [ + "number", + "null" + ] +} - added
Output schema / properties / invitation / properties / phone_guest_countAdded value: +{ + "type": "number" +} - added
Output schema / properties / invitation / properties / publishing_priceAdded 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" + } + ] +} - added
Output schema / properties / invitation / properties / required_creditsAdded value: +{ + "description": "Publishing plus phone batches. Review with the host before authorizing this many credits.", + "type": [ + "number", + "null" + ] +} - changed
Output schema / properties / invitation / requiredPrevious 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" +]
- Changed
lemonvite_publish_invitation11 fields changed- added
Input schema / properties / authorized_creditsAdded value: +{ + "default": 1, + "description": "Maximum credits the host has agreed to spend after reviewing the price.", + "maximum": 9007199254740991, + "minimum": 1, + "type": "integer" +} - changed
Output schema / properties / invitation / properties / can_publish / descriptionPrevious 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." - added
Output schema / properties / invitation / properties / guest_limitAdded value: +{ + "description": "Total cap; only support can raise it. null = verified host.", + "type": [ + "number", + "null" + ] +} - changed
Output schema / properties / invitation / properties / payment_status / descriptionPrevious 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." - changed
Output schema / properties / invitation / properties / payment_status / enumPrevious value: -[ - "paid", - "credit_available", - "payment_required" -]New value: +[ + "paid", + "credit_available", + "payment_required", + "not_applicable" +] - added
Output schema / properties / invitation / properties / phone_batch_sizeAdded value: +{ + "type": [ + "number", + "null" + ] +} - added
Output schema / properties / invitation / properties / phone_guest_allowanceAdded value: +{ + "description": "Included or already purchased phone guests; null = no phone cap.", + "type": [ + "number", + "null" + ] +} - added
Output schema / properties / invitation / properties / phone_guest_countAdded value: +{ + "type": "number" +} - added
Output schema / properties / invitation / properties / publishing_priceAdded 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" + } + ] +} - added
Output schema / properties / invitation / properties / required_creditsAdded value: +{ + "description": "Publishing plus phone batches. Review with the host before authorizing this many credits.", + "type": [ + "number", + "null" + ] +} - changed
Output schema / properties / invitation / requiredPrevious 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" +]
- Changed
lemonvite_start_checkout2 fields changed- changed
Input schema / properties / event_id / descriptionPrevious 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." - changed
Input schema / properties / quantity / descriptionPrevious 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."
- Changed
lemonvite_update_guests4 fields changed- added
Input schema / properties / authorized_creditsAdded 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" +} - added
Output schema / properties / credits_usedAdded value: +{ + "type": "number" +} - added
Output schema / properties / results / items / properties / payment_requiredAdded value: +{ + "additionalProperties": false, + "properties": { + "creditsToBuy": { + "type": "number" + }, + "maxInvitations": { + "type": "number" + }, + "maxPhoneInvitations": { + "type": "number" + }, + "requiredCredits": { + "type": "number" + } + }, + "required": [ + "requiredCredits", + "creditsToBuy", + "maxPhoneInvitations", + "maxInvitations" + ], + "type": "object" +} - changed
Output schema / requiredPrevious value: -[ - "updated", - "failed", - "results" -]New value: +[ + "updated", + "failed", + "credits_used", + "results" +]
- Changed
lemonvite_update_invitation10 fields changed- changed
Output schema / properties / invitation / properties / can_publish / descriptionPrevious 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." - added
Output schema / properties / invitation / properties / guest_limitAdded value: +{ + "description": "Total cap; only support can raise it. null = verified host.", + "type": [ + "number", + "null" + ] +} - changed
Output schema / properties / invitation / properties / payment_status / descriptionPrevious 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." - changed
Output schema / properties / invitation / properties / payment_status / enumPrevious value: -[ - "paid", - "credit_available", - "payment_required" -]New value: +[ + "paid", + "credit_available", + "payment_required", + "not_applicable" +] - added
Output schema / properties / invitation / properties / phone_batch_sizeAdded value: +{ + "type": [ + "number", + "null" + ] +} - added
Output schema / properties / invitation / properties / phone_guest_allowanceAdded value: +{ + "description": "Included or already purchased phone guests; null = no phone cap.", + "type": [ + "number", + "null" + ] +} - added
Output schema / properties / invitation / properties / phone_guest_countAdded value: +{ + "type": "number" +} - added
Output schema / properties / invitation / properties / publishing_priceAdded 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" + } + ] +} - added
Output schema / properties / invitation / properties / required_creditsAdded value: +{ + "description": "Publishing plus phone batches. Review with the host before authorizing this many credits.", + "type": [ + "number", + "null" + ] +} - changed
Output schema / properties / invitation / requiredPrevious 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" +]
1 tool update
- Added
lemonvite_edit_design
10 tool updates
- Changed
lemonvite_add_guests6 fields changed- added
Input schema / properties / event_id / descriptionAdded 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." - added
Input schema / properties / guests / descriptionAdded 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." - added
Input schema / properties / guests / items / properties / email / descriptionAdded value: +"Guest email address, e.g. alex@example.com, up to 320 characters." - added
Input schema / properties / guests / items / properties / name / descriptionAdded value: +"Guest display name, up to 200 characters." - changed
Input schema / properties / guests / items / properties / phone / descriptionPrevious 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." - added
Input schema / properties / host_confirms_sms_consent / descriptionAdded value: +"Set true only when the host confirms the guests agreed to receive SMS about this event. Required when adding guests with phone numbers."
- Changed
lemonvite_create_invitation8 fields changed- added
Input schema / properties / allow_plus_ones / descriptionAdded value: +"Whether guests may bring additional attendees, subject to the adult and child limits. Defaults to true on create." - added
Input schema / properties / birthday_person_name / descriptionAdded value: +"Name of the person being celebrated at a birthday event, up to 120 characters." - added
Input schema / properties / event_type / descriptionAdded value: +"One of: birthday, wedding, party, baby-shower, celebration-of-life, general. Use 'general' when unsure." - changed
Input schema / properties / invitation_image / properties / download_url / descriptionPrevious 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." - changed
Input schema / properties / invitation_image / properties / file_id / descriptionPrevious value: -"Host file identifier"New value: +"File identifier supplied by the MCP client for the image in this conversation." - added
Input schema / properties / invitation_image / properties / file_name / descriptionAdded value: +"Original filename, e.g. invitation.png. Optional metadata; the stored filename is generated by Lemonvite." - added
Input schema / properties / invitation_image / properties / mime_type / descriptionAdded 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." - added
Input schema / properties / is_virtual / descriptionAdded value: +"True for an online event using virtual_url; false for an in-person event requiring location_name. Defaults to false on create."
- Changed
lemonvite_generate_design5 fields changed- added
Input schema / properties / event_id / descriptionAdded 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." - changed
Input schema / properties / reference_image / properties / download_url / descriptionPrevious 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." - changed
Input schema / properties / reference_image / properties / file_id / descriptionPrevious value: -"Host file identifier"New value: +"File identifier supplied by the MCP client for the image in this conversation." - added
Input schema / properties / reference_image / properties / file_name / descriptionAdded value: +"Original filename, e.g. invitation.png. Optional metadata; the stored filename is generated by Lemonvite." - added
Input schema / properties / reference_image / properties / mime_type / descriptionAdded 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."
- Changed
lemonvite_get_invitation1 field changed- added
Input schema / properties / event_id / descriptionAdded 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."
- Changed
lemonvite_get_rsvp_summary1 field changed- added
Input schema / properties / event_id / descriptionAdded 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."
- Changed
lemonvite_list_guests2 fields changed- added
Input schema / properties / event_id / descriptionAdded 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." - added
Input schema / properties / rsvp_status / descriptionAdded value: +"Filter guests by RSVP: pending = awaiting reply, attending = going, declined = not going, maybe = tentative. Omit to list all guests."
- Changed
lemonvite_publish_invitation1 field changed- added
Input schema / properties / event_id / descriptionAdded 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."
- Changed
lemonvite_remove_guests2 fields changed- added
Input schema / properties / event_id / descriptionAdded 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." - added
Input schema / properties / invitation_ids / descriptionAdded value: +"1–50 guest invitation_ids returned by lemonvite_list_guests for this event. These guests are removed and their invite links stop working."
- Changed
lemonvite_update_guests7 fields changed- added
Input schema / properties / event_id / descriptionAdded 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." - added
Input schema / properties / guests / descriptionAdded value: +"Batch of 1–50 guest updates. Each needs an invitation_id and the fields to change. Omitted fields retain their saved values." - added
Input schema / properties / guests / items / properties / email / descriptionAdded value: +"Guest email address, e.g. alex@example.com, up to 320 characters. Omit on update to keep it; an empty string clears it." - added
Input schema / properties / guests / items / properties / invitation_id / descriptionAdded value: +"Guest invitation_id returned by lemonvite_list_guests for this event; not the event_id." - added
Input schema / properties / guests / items / properties / name / descriptionAdded value: +"Guest display name, up to 200 characters. Omit on update to keep the saved name; an empty string clears it." - added
Input schema / properties / guests / items / properties / phone / descriptionAdded value: +"Guest phone number, up to 32 characters; E.164 preferred, e.g. +15551234567. Omit to keep it; an empty string clears it." - changed
Input schema / properties / host_confirms_sms_consent / descriptionPrevious 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."
- Changed
lemonvite_update_invitation8 fields changed- added
Input schema / properties / allow_plus_ones / descriptionAdded value: +"Whether guests may bring additional attendees, subject to the adult and child limits. Defaults to true on create." - added
Input schema / properties / birthday_person_name / descriptionAdded value: +"Name of the person being celebrated at a birthday event, up to 120 characters." - added
Input schema / properties / event_id / descriptionAdded 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." - changed
Input schema / properties / invitation_image / properties / download_url / descriptionPrevious 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." - changed
Input schema / properties / invitation_image / properties / file_id / descriptionPrevious value: -"Host file identifier"New value: +"File identifier supplied by the MCP client for the image in this conversation." - added
Input schema / properties / invitation_image / properties / file_name / descriptionAdded value: +"Original filename, e.g. invitation.png. Optional metadata; the stored filename is generated by Lemonvite." - added
Input schema / properties / invitation_image / properties / mime_type / descriptionAdded 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." - added
Input schema / properties / is_virtual / descriptionAdded value: +"True for an online event using virtual_url; false for an in-person event requiring location_name. Defaults to false on create."
6 tool updates
- Changed
lemonvite_create_invitation3 fields changed- added
Input schema / properties / custom_fieldsAdded 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" +} - added
Output schema / properties / invitation / properties / custom_fieldsAdded 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" +} - changed
Output schema / properties / invitation / requiredPrevious 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" +]
- Changed
lemonvite_generate_design2 fields changed- added
Output schema / properties / invitation / properties / custom_fieldsAdded 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" +} - changed
Output schema / properties / invitation / requiredPrevious 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" +]
- Changed
lemonvite_get_invitation2 fields changed- added
Output schema / properties / invitation / properties / custom_fieldsAdded 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" +} - changed
Output schema / properties / invitation / requiredPrevious 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" +]
- Changed
lemonvite_list_guests3 fields changed- added
Output schema / properties / guests / items / properties / answersAdded 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" +} - added
Output schema / properties / guests / items / properties / noteAdded value: +{ + "description": "The free-text note the guest left with their RSVP, if any.", + "type": [ + "string", + "null" + ] +} - changed
Output schema / properties / guests / items / requiredPrevious 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" +]
- Changed
lemonvite_publish_invitation2 fields changed- added
Output schema / properties / invitation / properties / custom_fieldsAdded 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" +} - changed
Output schema / properties / invitation / requiredPrevious 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" +]
- Changed
lemonvite_update_invitation3 fields changed- added
Input schema / properties / custom_fieldsAdded 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" +} - added
Output schema / properties / invitation / properties / custom_fieldsAdded 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" +} - changed
Output schema / properties / invitation / requiredPrevious 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" +]
13 tool updates
- First observed
lemonvite_add_guests - First observed
lemonvite_create_invitation - First observed
lemonvite_generate_design - First observed
lemonvite_get_account - First observed
lemonvite_get_invitation - First observed
lemonvite_get_rsvp_summary - First observed
lemonvite_list_guests - First observed
lemonvite_list_invitations - First observed
lemonvite_publish_invitation - First observed
lemonvite_remove_guests - First observed
lemonvite_start_checkout - First observed
lemonvite_update_guests - First observed
lemonvite_update_invitation
Publisher details
- Operator
- Lemonvite · Publisher source
- Operator website
- https://www.lemonvite.com/ · Publisher source
- Vendor relationship
- Not applicable
- Documentation
- https://www.lemonvite.com/assistants
- Trust center
- Not applicable
- Restrictions
- Not applicable
Related MCP Connectors
- FotifyOAuthapp.fotify
Create events, collect guest photos and manage RSVP invitations for weddings and parties.
- HearthOAuthrsvp.hearth
Plan gatherings with Hearth invitations: draft events, add guests, check RSVPs. Host confirms.
Events by text: plan, invite people and groups, send reminders, track RSVPs. US and Canada numbers.
- TypeformOAuthcom.typeform
Build and edit forms, manage automations and contacts, and analyze responses.
Related MCP Servers
- AlicenseAqualityBmaintenanceEnables creating events, invitations, and personalized guest links, and following RSVPs on InvitaAI from any MCP client.18MIT
- AlicenseNot gradedqualityCmaintenanceEnables creating and customizing mobile wedding invitations through natural language, with support for multiple designs, RSVP, maps, gallery, and share tokens.Creative Commons Attribution Non Commercial 4.0 International
- FlicenseNot gradedqualityDmaintenanceEnables users to manage wedding preparation tasks including timeline generation, budget review, vendor quote comparison, role assignment briefs, and drafting messages for family, vendors, and friends.-
- AlicenseAqualityAmaintenanceMCP 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.20834 npmMIT
Glama MCP Gateway
Add one secure layer between your agents and this server.