Koskamo

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.

Zovo RSVP Page MCP logo, by ZovoCommunity listingStreamable HTTPNo sign-inEndpoint checked 2026-11-08Published by Zovo
MCP endpoint (Streamable HTTP)
https://rsvp-page.zovo.one/mcp
Vendor documentation

What its tools do

4 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.

Read-only (1)

4 of 4 have a description · 4 of 4 declare behavior hints · 4 of 4 with parameters document them all

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

Community listingRegistry 1.0.0

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
Server-advertised capabilities
{
  "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.

Zovo RSVP Page publishes an event page that guests open in any browser to answer Yes, No or Maybe, with plus-ones and an optional meal-style question. create_rsvp_page returns a guest link to share and a private organizer link to keep. show_rsvp_results reads the headcount from the organizer link. add_rsvp_guests records answers the host received in person. update_rsvp_page edits details or closes and reopens replies.

Tools

4 advertised

create_rsvp_page — Create RSVP page
Advertised by the server during the last successful anonymous check.
Open-world

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.

create_rsvp_page input schema
{
  "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\"]."
    }
  }
}
create_rsvp_page output schema
{
  "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
}
create_rsvp_page annotations
{
  "title": "Create RSVP page",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
show_rsvp_results — Show RSVP results
Advertised by the server during the last successful anonymous check.
Advertised read-onlyOpen-world

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.

show_rsvp_results input schema
{
  "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."
    }
  }
}
show_rsvp_results output schema
{
  "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
}
show_rsvp_results annotations
{
  "title": "Show RSVP results",
  "readOnlyHint": true,
  "openWorldHint": true,
  "idempotentHint": true,
  "destructiveHint": false
}
add_rsvp_guests — Add RSVP answers
Advertised by the server during the last successful anonymous check.
Open-world

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.

add_rsvp_guests input schema
{
  "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."
    }
  }
}
add_rsvp_guests output schema
{
  "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
}
add_rsvp_guests annotations
{
  "title": "Add RSVP answers",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
update_rsvp_page — Update RSVP page
Advertised by the server during the last successful anonymous check.
Open-world

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.

update_rsvp_page input schema
{
  "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\"]."
    }
  }
}
update_rsvp_page output schema
{
  "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
}
update_rsvp_page annotations
{
  "title": "Update RSVP page",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

1 advertised

rsvp-page-widget — Zovo RSVP Page view

Advertised by the server during the last successful anonymous check.

Interactive view for Zovo RSVP Page.

rsvp-page-widget URI
ui://widget/rsvp-page-v1-1.0.0-ee787c7ccf0dc2d502c2507cc5bdf0296edbaaf3d9b7bdfedfbb7f4a4206bd8b.html

MIME type: text/html;profile=mcp-app

rsvp-page-widget-legacy — Zovo RSVP Page view (previous versions)

Advertised by the server during the last successful anonymous check.

rsvp-page-widget-legacy URI template
ui://widget/rsvp-page-{version}.html

MIME type: text/html;profile=mcp-app

30-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.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http zovo-rsvp-page-mcp https://rsvp-page.zovo.one/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add zovo-rsvp-page-mcp --url https://rsvp-page.zovo.one/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable zovo-rsvp-page-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "zovo-rsvp-page-mcp": {
      "url": "https://rsvp-page.zovo.one/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "zovo-rsvp-page-mcp": {
      "type": "streamableHttp",
      "url": "https://rsvp-page.zovo.one/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start zovo-rsvp-page-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "zovo-rsvp-page-mcp": {
      "type": "http",
      "url": "https://rsvp-page.zovo.one/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http zovo-rsvp-page-mcp https://rsvp-page.zovo.one/mcp

Claude Desktop

Open Claude Settings > Connectors > Add custom connector, enter this server URL and enable it for the conversation. This is a manual remote-connector handoff, not a desktop JSON configuration.
Claude Desktop configuration
https://rsvp-page.zovo.one/mcp

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "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.