Zovo RSVP Page MCP
An MCP server that allows agents to create shared RSVP pages for events, manage guest responses (Yes/No/Maybe), track headcounts with plus-ones, handle meal choices, and export data to CSV. It supports adding calendar files and managing reply deadlines.
Endpoint and access
No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.
https://rsvp-page.zovo.one/mcpWhat its tools do
4 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.
Read-only (1)
Can change data (3)
Checks and signals
Each line is separate evidence, not a trust score.
- Passed Endpoint answered the live check ·
- Availability 1 of 1 checks passed in 30 days
What you can do with it
- Create an RSVP page for an event with specific date and location details
- Check the live headcount and per-choice totals for an event
- Add specific guests as attendees with a designated number of plus-ones
- Export the list of replies and event data to a CSV file
Source and maintenance
Protocol and capabilities
- Server
- rsvp-page 1.0.0
- MCP protocol negotiated in check
- 2025-11-25
- Tools
- 4 advertised
- Resources
- 1 advertised
- Resource templates
- 1 advertised
- Prompts
- Not advertised
{
"tools": {
"listChanged": true
},
"resources": {
"listChanged": true
}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
4 advertised
create_rsvp_page — Create RSVP page
Use this when the user wants guests to RSVP to an event: it publishes a shared web page where guests answer Yes/No/Maybe, add plus-ones and answer one optional multiple-choice question (for example meal choice). Returns a guest link to share and a private organizer link for results. Needs the title, start (local date-time) and IANA time zone. The event must end within 105 days. Does not send invitations, emails or reminders, and does not sell tickets or take payments.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"title",
"start",
"time_zone"
],
"properties": {
"end": {
"type": "string",
"maxLength": 40,
"description": "Optional end: HH:MM on the same day (e.g. 23:00; an earlier time means the next day), a local date-time YYYY-MM-DDTHH:MM, or for an all-day event the last day YYYY-MM-DD."
},
"note": {
"type": "string",
"maxLength": 600,
"description": "Short note for guests, e.g. Dress code smart casual. Parking at the back."
},
"start": {
"type": "string",
"maxLength": 40,
"minLength": 10,
"description": "Start as local date and time YYYY-MM-DDTHH:MM in the event's time zone, e.g. 2026-11-21T19:00. Use a date YYYY-MM-DD for an all-day event."
},
"title": {
"type": "string",
"maxLength": 120,
"minLength": 1,
"description": "Event name shown as the page title, e.g. Maya's 30th birthday dinner."
},
"location": {
"type": "string",
"maxLength": 200,
"description": "Place as plain text, e.g. Luigi's, 12 Main St, back room. Links are not allowed."
},
"question": {
"type": "string",
"maxLength": 120,
"description": "Optional one multiple-choice question for guests who answer Yes, e.g. Meal choice."
},
"host_name": {
"type": "string",
"maxLength": 60,
"description": "Host display name shown to guests, e.g. Sam."
},
"time_zone": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "IANA time zone of the event, e.g. America/New_York, Europe/London, Asia/Bangkok. Abbreviations such as EST are refused."
},
"allow_maybe": {
"type": "boolean",
"description": "Offer a Maybe answer as well as Yes and No. Default true. Example: false."
},
"rsvp_deadline": {
"type": "string",
"maxLength": 40,
"description": "Optional last day to reply, YYYY-MM-DD (end of that day) or YYYY-MM-DDTHH:MM, in the event's time zone, e.g. 2026-11-14."
},
"max_extra_guests": {
"type": "integer",
"maximum": 10,
"minimum": 0,
"description": "How many extra guests (plus-ones) one reply may bring, 0-10. Default 0. Example: 2."
},
"question_options": {
"type": "array",
"items": {
"type": "string",
"maxLength": 60
},
"maxItems": 8,
"description": "2-8 answer choices for the question, e.g. [\"Chicken\", \"Fish\", \"Vegetarian\"]."
}
}
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"title",
"when",
"status",
"page_ends",
"public_url",
"manage_url",
"calendar_url",
"settings",
"headcount",
"replies"
],
"properties": {
"when": {
"type": "string"
},
"added": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"type": "string"
},
"status": {
"type": "string"
},
"changed": {
"type": "array",
"items": {
"type": "string"
}
},
"replies": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"answer",
"extra_guests"
],
"properties": {
"name": {
"type": "string"
},
"answer": {
"type": "string"
},
"choice": {
"type": "string"
},
"message": {
"type": "string"
},
"extra_guests": {
"type": "number"
},
"added_by_host": {
"type": "boolean"
}
},
"additionalProperties": false
}
},
"skipped": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"reason"
],
"properties": {
"name": {
"type": "string"
},
"reason": {
"type": "string"
}
},
"additionalProperties": false
}
},
"settings": {
"type": "object",
"required": [
"start",
"end",
"time_zone",
"starts_utc",
"location",
"host_name",
"allow_maybe",
"max_extra_guests",
"rsvp_deadline",
"question",
"question_options"
],
"properties": {
"end": {
"type": [
"string",
"null"
]
},
"start": {
"type": "string"
},
"location": {
"type": "string"
},
"question": {
"type": "string"
},
"host_name": {
"type": "string"
},
"time_zone": {
"type": "string"
},
"starts_utc": {
"type": "string"
},
"allow_maybe": {
"type": "boolean"
},
"rsvp_deadline": {
"type": [
"string",
"null"
]
},
"max_extra_guests": {
"type": "number"
},
"question_options": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"headcount": {
"type": "object",
"required": [
"coming_people",
"yes_replies",
"yes_extra_guests",
"no_replies",
"total_replies"
],
"properties": {
"no_replies": {
"type": "number"
},
"yes_replies": {
"type": "number"
},
"maybe_people": {
"type": "number"
},
"coming_people": {
"type": "number"
},
"maybe_replies": {
"type": "number"
},
"total_replies": {
"type": "number"
},
"yes_extra_guests": {
"type": "number"
}
},
"additionalProperties": false
},
"page_ends": {
"type": "string"
},
"manage_url": {
"type": "string"
},
"public_url": {
"type": "string"
},
"calendar_url": {
"type": "string"
},
"choice_totals": {
"type": "array",
"items": {
"type": "object",
"required": [
"choice",
"replies",
"people"
],
"properties": {
"choice": {
"type": "string"
},
"people": {
"type": "number"
},
"replies": {
"type": "number"
}
},
"additionalProperties": false
}
},
"replies_count": {
"type": "object",
"required": [
"shown",
"total"
],
"properties": {
"shown": {
"type": "number"
},
"total": {
"type": "number"
}
},
"additionalProperties": false
},
"yes_without_choice": {
"type": "number"
}
},
"additionalProperties": false
}{
"title": "Create RSVP page",
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": false
}show_rsvp_results — Show RSVP results
Use this when the user asks who is coming, how many people are coming, or for meal-choice totals on an RSVP page made with create_rsvp_page. Takes the private organizer link and returns the headcount (yes replies plus their guests, maybe separately), per-choice totals, and the reply list. Does not work with the guest link and does not change the page.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"manage_url"
],
"properties": {
"manage_url": {
"type": "string",
"maxLength": 300,
"minLength": 10,
"description": "The private organizer link returned when the page was created, e.g. https://rsvp-page.zovo.one/m/AbC.../XyZ.... The guest link (/p/...) does not work here."
}
}
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"title",
"when",
"status",
"page_ends",
"public_url",
"manage_url",
"calendar_url",
"settings",
"headcount",
"replies"
],
"properties": {
"when": {
"type": "string"
},
"added": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"type": "string"
},
"status": {
"type": "string"
},
"changed": {
"type": "array",
"items": {
"type": "string"
}
},
"replies": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"answer",
"extra_guests"
],
"properties": {
"name": {
"type": "string"
},
"answer": {
"type": "string"
},
"choice": {
"type": "string"
},
"message": {
"type": "string"
},
"extra_guests": {
"type": "number"
},
"added_by_host": {
"type": "boolean"
}
},
"additionalProperties": false
}
},
"skipped": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"reason"
],
"properties": {
"name": {
"type": "string"
},
"reason": {
"type": "string"
}
},
"additionalProperties": false
}
},
"settings": {
"type": "object",
"required": [
"start",
"end",
"time_zone",
"starts_utc",
"location",
"host_name",
"allow_maybe",
"max_extra_guests",
"rsvp_deadline",
"question",
"question_options"
],
"properties": {
"end": {
"type": [
"string",
"null"
]
},
"start": {
"type": "string"
},
"location": {
"type": "string"
},
"question": {
"type": "string"
},
"host_name": {
"type": "string"
},
"time_zone": {
"type": "string"
},
"starts_utc": {
"type": "string"
},
"allow_maybe": {
"type": "boolean"
},
"rsvp_deadline": {
"type": [
"string",
"null"
]
},
"max_extra_guests": {
"type": "number"
},
"question_options": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"headcount": {
"type": "object",
"required": [
"coming_people",
"yes_replies",
"yes_extra_guests",
"no_replies",
"total_replies"
],
"properties": {
"no_replies": {
"type": "number"
},
"yes_replies": {
"type": "number"
},
"maybe_people": {
"type": "number"
},
"coming_people": {
"type": "number"
},
"maybe_replies": {
"type": "number"
},
"total_replies": {
"type": "number"
},
"yes_extra_guests": {
"type": "number"
}
},
"additionalProperties": false
},
"page_ends": {
"type": "string"
},
"manage_url": {
"type": "string"
},
"public_url": {
"type": "string"
},
"calendar_url": {
"type": "string"
},
"choice_totals": {
"type": "array",
"items": {
"type": "object",
"required": [
"choice",
"replies",
"people"
],
"properties": {
"choice": {
"type": "string"
},
"people": {
"type": "number"
},
"replies": {
"type": "number"
}
},
"additionalProperties": false
}
},
"replies_count": {
"type": "object",
"required": [
"shown",
"total"
],
"properties": {
"shown": {
"type": "number"
},
"total": {
"type": "number"
}
},
"additionalProperties": false
},
"yes_without_choice": {
"type": "number"
}
},
"additionalProperties": false
}{
"title": "Show RSVP results",
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}add_rsvp_guests — Add RSVP answers
Use this when the host got answers outside the page (in person, by text) and wants them counted on their RSVP page. Takes the organizer link and 1-50 guests with name, answer (yes/no/maybe), extra guests and choice. A name that already replied is skipped, not overwritten; that guest can change their own answer with their link. Does not send anything to the guests.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"manage_url",
"guests"
],
"properties": {
"guests": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"answer"
],
"properties": {
"name": {
"type": "string",
"maxLength": 60,
"minLength": 1,
"description": "Guest first name or nickname, e.g. Tom."
},
"answer": {
"enum": [
"yes",
"no",
"maybe"
],
"type": "string",
"description": "The guest's answer, e.g. yes."
},
"choice": {
"type": "string",
"maxLength": 60,
"description": "Their answer to the page's question, e.g. Fish."
},
"extra_guests": {
"type": "integer",
"maximum": 10,
"minimum": 0,
"description": "Extra guests this person brings, e.g. 1. Ignored for no."
}
}
},
"maxItems": 50,
"minItems": 1,
"description": "Answers to record, e.g. [{\"name\": \"Tom\", \"answer\": \"yes\", \"extra_guests\": 1, \"choice\": \"Fish\"}]."
},
"manage_url": {
"type": "string",
"maxLength": 300,
"minLength": 10,
"description": "The private organizer link returned when the page was created, e.g. https://rsvp-page.zovo.one/m/AbC.../XyZ.... The guest link (/p/...) does not work here."
}
}
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"title",
"when",
"status",
"page_ends",
"public_url",
"manage_url",
"calendar_url",
"settings",
"headcount",
"replies"
],
"properties": {
"when": {
"type": "string"
},
"added": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"type": "string"
},
"status": {
"type": "string"
},
"changed": {
"type": "array",
"items": {
"type": "string"
}
},
"replies": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"answer",
"extra_guests"
],
"properties": {
"name": {
"type": "string"
},
"answer": {
"type": "string"
},
"choice": {
"type": "string"
},
"message": {
"type": "string"
},
"extra_guests": {
"type": "number"
},
"added_by_host": {
"type": "boolean"
}
},
"additionalProperties": false
}
},
"skipped": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"reason"
],
"properties": {
"name": {
"type": "string"
},
"reason": {
"type": "string"
}
},
"additionalProperties": false
}
},
"settings": {
"type": "object",
"required": [
"start",
"end",
"time_zone",
"starts_utc",
"location",
"host_name",
"allow_maybe",
"max_extra_guests",
"rsvp_deadline",
"question",
"question_options"
],
"properties": {
"end": {
"type": [
"string",
"null"
]
},
"start": {
"type": "string"
},
"location": {
"type": "string"
},
"question": {
"type": "string"
},
"host_name": {
"type": "string"
},
"time_zone": {
"type": "string"
},
"starts_utc": {
"type": "string"
},
"allow_maybe": {
"type": "boolean"
},
"rsvp_deadline": {
"type": [
"string",
"null"
]
},
"max_extra_guests": {
"type": "number"
},
"question_options": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"headcount": {
"type": "object",
"required": [
"coming_people",
"yes_replies",
"yes_extra_guests",
"no_replies",
"total_replies"
],
"properties": {
"no_replies": {
"type": "number"
},
"yes_replies": {
"type": "number"
},
"maybe_people": {
"type": "number"
},
"coming_people": {
"type": "number"
},
"maybe_replies": {
"type": "number"
},
"total_replies": {
"type": "number"
},
"yes_extra_guests": {
"type": "number"
}
},
"additionalProperties": false
},
"page_ends": {
"type": "string"
},
"manage_url": {
"type": "string"
},
"public_url": {
"type": "string"
},
"calendar_url": {
"type": "string"
},
"choice_totals": {
"type": "array",
"items": {
"type": "object",
"required": [
"choice",
"replies",
"people"
],
"properties": {
"choice": {
"type": "string"
},
"people": {
"type": "number"
},
"replies": {
"type": "number"
}
},
"additionalProperties": false
}
},
"replies_count": {
"type": "object",
"required": [
"shown",
"total"
],
"properties": {
"shown": {
"type": "number"
},
"total": {
"type": "number"
}
},
"additionalProperties": false
},
"yes_without_choice": {
"type": "number"
}
},
"additionalProperties": false
}{
"title": "Add RSVP answers",
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": false
}update_rsvp_page — Update RSVP page
Use this when the host wants to change an RSVP page made with create_rsvp_page: close replies, reopen them, or edit the title, time, location, note, plus-one limit, deadline or add question choices. Takes the organizer link and only the fields to change. Choices that already have replies cannot be removed. Does not notify guests about the change and does not delete replies.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"manage_url"
],
"properties": {
"end": {
"type": "string",
"maxLength": 40,
"description": "New end time (HH:MM or YYYY-MM-DDTHH:MM), or an empty string to remove it."
},
"note": {
"type": "string",
"maxLength": 600,
"description": "Short note for guests, e.g. Dress code smart casual. Parking at the back."
},
"start": {
"type": "string",
"maxLength": 40,
"minLength": 10,
"description": "Start as local date and time YYYY-MM-DDTHH:MM in the event's time zone, e.g. 2026-11-21T19:00. Use a date YYYY-MM-DD for an all-day event."
},
"title": {
"type": "string",
"maxLength": 120,
"minLength": 1,
"description": "Event name shown as the page title, e.g. Maya's 30th birthday dinner."
},
"replies": {
"enum": [
"close",
"reopen"
],
"type": "string",
"description": "close stops new replies; reopen allows them again. Example: close."
},
"location": {
"type": "string",
"maxLength": 200,
"description": "Place as plain text, e.g. Luigi's, 12 Main St, back room. Links are not allowed."
},
"host_name": {
"type": "string",
"maxLength": 60,
"description": "Host display name shown to guests, e.g. Sam."
},
"time_zone": {
"type": "string",
"maxLength": 64,
"minLength": 1,
"description": "IANA time zone of the event, e.g. America/New_York, Europe/London, Asia/Bangkok. Abbreviations such as EST are refused."
},
"manage_url": {
"type": "string",
"maxLength": 300,
"minLength": 10,
"description": "The private organizer link returned when the page was created, e.g. https://rsvp-page.zovo.one/m/AbC.../XyZ.... The guest link (/p/...) does not work here."
},
"allow_maybe": {
"type": "boolean",
"description": "Offer a Maybe answer as well as Yes and No. Default true. Example: false."
},
"rsvp_deadline": {
"type": "string",
"maxLength": 40,
"description": "New reply deadline YYYY-MM-DD or YYYY-MM-DDTHH:MM, or an empty string to remove it."
},
"max_extra_guests": {
"type": "integer",
"maximum": 10,
"minimum": 0,
"description": "How many extra guests (plus-ones) one reply may bring, 0-10. Default 0. Example: 2."
},
"question_options": {
"type": "array",
"items": {
"type": "string",
"maxLength": 60
},
"maxItems": 8,
"description": "2-8 answer choices for the question, e.g. [\"Chicken\", \"Fish\", \"Vegetarian\"]."
}
}
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"title",
"when",
"status",
"page_ends",
"public_url",
"manage_url",
"calendar_url",
"settings",
"headcount",
"replies"
],
"properties": {
"when": {
"type": "string"
},
"added": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"type": "string"
},
"status": {
"type": "string"
},
"changed": {
"type": "array",
"items": {
"type": "string"
}
},
"replies": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"answer",
"extra_guests"
],
"properties": {
"name": {
"type": "string"
},
"answer": {
"type": "string"
},
"choice": {
"type": "string"
},
"message": {
"type": "string"
},
"extra_guests": {
"type": "number"
},
"added_by_host": {
"type": "boolean"
}
},
"additionalProperties": false
}
},
"skipped": {
"type": "array",
"items": {
"type": "object",
"required": [
"name",
"reason"
],
"properties": {
"name": {
"type": "string"
},
"reason": {
"type": "string"
}
},
"additionalProperties": false
}
},
"settings": {
"type": "object",
"required": [
"start",
"end",
"time_zone",
"starts_utc",
"location",
"host_name",
"allow_maybe",
"max_extra_guests",
"rsvp_deadline",
"question",
"question_options"
],
"properties": {
"end": {
"type": [
"string",
"null"
]
},
"start": {
"type": "string"
},
"location": {
"type": "string"
},
"question": {
"type": "string"
},
"host_name": {
"type": "string"
},
"time_zone": {
"type": "string"
},
"starts_utc": {
"type": "string"
},
"allow_maybe": {
"type": "boolean"
},
"rsvp_deadline": {
"type": [
"string",
"null"
]
},
"max_extra_guests": {
"type": "number"
},
"question_options": {
"type": "array",
"items": {
"type": "string"
}
}
},
"additionalProperties": false
},
"headcount": {
"type": "object",
"required": [
"coming_people",
"yes_replies",
"yes_extra_guests",
"no_replies",
"total_replies"
],
"properties": {
"no_replies": {
"type": "number"
},
"yes_replies": {
"type": "number"
},
"maybe_people": {
"type": "number"
},
"coming_people": {
"type": "number"
},
"maybe_replies": {
"type": "number"
},
"total_replies": {
"type": "number"
},
"yes_extra_guests": {
"type": "number"
}
},
"additionalProperties": false
},
"page_ends": {
"type": "string"
},
"manage_url": {
"type": "string"
},
"public_url": {
"type": "string"
},
"calendar_url": {
"type": "string"
},
"choice_totals": {
"type": "array",
"items": {
"type": "object",
"required": [
"choice",
"replies",
"people"
],
"properties": {
"choice": {
"type": "string"
},
"people": {
"type": "number"
},
"replies": {
"type": "number"
}
},
"additionalProperties": false
}
},
"replies_count": {
"type": "object",
"required": [
"shown",
"total"
],
"properties": {
"shown": {
"type": "number"
},
"total": {
"type": "number"
}
},
"additionalProperties": false
},
"yes_without_choice": {
"type": "number"
}
},
"additionalProperties": false
}{
"title": "Update RSVP page",
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": false
}Prompts
Not advertised
Resources
1 advertised
rsvp-page-widget — Zovo RSVP Page view
Interactive view for Zovo RSVP Page.
ui://widget/rsvp-page-v1-1.0.0-ee787c7ccf0dc2d502c2507cc5bdf0296edbaaf3d9b7bdfedfbb7f4a4206bd8b.htmlrsvp-page-widget-legacy — Zovo RSVP Page view (previous versions)
ui://widget/rsvp-page-{version}.html30-day availability
Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.
- Successful checks
- 1 of 1 (100%)
- Average latency
- 866 ms
- 95th percentile latency
- 866 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 866 ms · metadata changed · 4 tool(s), 1 resource(s), 1 resource template(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http zovo-rsvp-page-mcp https://rsvp-page.zovo.one/mcpCodex
codex mcp add zovo-rsvp-page-mcp --url https://rsvp-page.zovo.one/mcpCursor
{
"mcpServers": {
"zovo-rsvp-page-mcp": {
"url": "https://rsvp-page.zovo.one/mcp"
}
}
}Cline
{
"mcpServers": {
"zovo-rsvp-page-mcp": {
"type": "streamableHttp",
"url": "https://rsvp-page.zovo.one/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"zovo-rsvp-page-mcp": {
"type": "http",
"url": "https://rsvp-page.zovo.one/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http zovo-rsvp-page-mcp https://rsvp-page.zovo.one/mcpClaude Desktop
https://rsvp-page.zovo.one/mcpWindsurf
{
"mcpServers": {
"zovo-rsvp-page-mcp": {
"serverUrl": "https://rsvp-page.zovo.one/mcp"
}
}
}Let your agent find its tools
Find servers like Zovo RSVP Page MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.