SignUpSheet.page MCP
An official MCP server for SignUpSheet.page that allows AI assistants to create sign-up sheets, date polls, group cards, and gift exchanges without requiring user authentication or accounts. It provides tools to generate public share links and private organizer links for various scheduling and collection tasks.
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://signupsheet.page/mcpWhat you can do with it
- Create sign-up sheets for potlucks, volunteer shifts, or time slots
- Generate date polls for group scheduling decisions
- Create group cards for occasions like birthdays or farewells
- Retrieve read-only summaries of existing sheets or polls
Source and maintenance
Protocol and capabilities
- Server
- signupsheet-page 1.0.0
- MCP protocol
- 2025-06-18
- Tools
- 4 advertised
- Resources
- Not advertised
- Resource templates
- Not advertised
- Prompts
- Not advertised
{
"tools": {
"listChanged": false
}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
4 advertised
create_signup_sheet — Create sign-up sheet
Creates a live online sign-up sheet on SignUpSheet.page where people claim slots from one shared link without an account, and returns the share link and the private organizer link. Use it when the user wants people to sign up for things: dishes for a potluck or class party, volunteer shifts, snack or carpool days, meal train dates, appointment or conference time slots, supplies to bring, classroom helpers. Each slot has a label, an optional date and start/end time, and how many people it needs; full slots get a waitlist and people get a reminder the day before. Not for voting on dates, group cards, ticket sales or paid registration.
{
"type": "object",
"required": [
"title",
"slots"
],
"properties": {
"slots": {
"type": "array",
"items": {
"type": "object",
"required": [
"label"
],
"properties": {
"date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "Optional date, YYYY-MM-DD."
},
"label": {
"type": "string",
"maxLength": 80,
"minLength": 1,
"description": "e.g. 'Main dish', 'Setup crew', 'Conference 3:00'."
},
"capacity": {
"type": "integer",
"default": 1,
"maximum": 500,
"minimum": 0,
"description": "How many people this slot needs; 0 = unlimited."
},
"end_time": {
"type": "string",
"pattern": "^([01]\\d|2[0-3]):[0-5]\\d$",
"description": "Optional end, 24-hour HH:MM (needs start_time)."
},
"start_time": {
"type": "string",
"pattern": "^([01]\\d|2[0-3]):[0-5]\\d$",
"description": "Optional start, 24-hour HH:MM."
}
},
"additionalProperties": false
},
"maxItems": 200,
"minItems": 1,
"description": "What people can sign up for, in display order."
},
"title": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "Sheet title, e.g. 'Room 12 Thanksgiving potluck – Nov 20'."
},
"chip_in": {
"type": "object",
"properties": {
"goal": {
"type": "integer",
"default": 0,
"maximum": 100000000,
"minimum": 0,
"description": "Optional total goal; 0 = no goal."
},
"other": {
"type": "string",
"maxLength": 90,
"description": "Any other way to pay, as plain text (no links)."
},
"venmo": {
"type": "string",
"maxLength": 31,
"description": "Venmo username."
},
"zelle": {
"type": "string",
"maxLength": 40,
"description": "Zelle email or US phone the user gave."
},
"cashapp": {
"type": "string",
"maxLength": 21,
"description": "Cash App $cashtag."
},
"purpose": {
"type": "string",
"maxLength": 80,
"description": "What the money is for, e.g. 'Gift for Ms. Lee'."
},
"revolut": {
"type": "string",
"maxLength": 33,
"description": "Revolut username."
},
"currency": {
"enum": [
"USD",
"EUR",
"GBP",
"CAD",
"AUD",
"MXN",
"BRL",
"ILS",
"PLN",
"TRY",
"CHF",
"JPY",
"KRW",
"CNY",
"INR",
"ARS",
"COP",
"CLP",
"PEN",
"ZAR",
"NZD",
"SEK",
"NOK",
"DKK",
"CZK",
"HUF",
"RON",
"AED",
"SAR",
"EGP",
"MAD",
"SGD",
"HKD",
"TWD",
"PHP",
"RUB",
"UAH",
"KZT"
],
"type": "string",
"description": "Currency of the amounts. Default: US dollars when Venmo, Cash App or Zelle is given, otherwise the usual currency for the language."
},
"paypal_me": {
"type": "string",
"maxLength": 30,
"description": "PayPal.Me name (the part after paypal.me/)."
},
"suggested_amount": {
"type": "integer",
"maximum": 1000000,
"minimum": 1,
"description": "Suggested amount per person, in whole units of the currency (default 10 US dollars or a similar round amount)."
}
},
"description": "Optional money collection on the same link. People pledge an amount and pay the organizer directly in the organizer's own payment app; SignUpSheet.page does not hold or transfer money. Include at least one way to pay, using only handles the user gave you. Venmo and Zelle work in US dollars only, Cash App in US dollars and pounds.",
"additionalProperties": false
},
"language": {
"enum": [
"en",
"es",
"pt",
"fr",
"de",
"it",
"nl",
"pl",
"ru",
"tr",
"he",
"ar",
"zh",
"ja",
"ko"
],
"type": "string",
"description": "Language of the pages and emails people will see. Use the language the user is writing in; 'en' if it is not in the list."
},
"timezone": {
"type": "string",
"maxLength": 64,
"description": "IANA time zone of the event, e.g. 'America/Chicago' or 'Europe/Madrid'. Needed when dates or times are given (reminders and calendar files use it)."
},
"show_names": {
"type": "boolean",
"default": true,
"description": "Show who signed up to everyone with the link."
},
"description": {
"type": "string",
"maxLength": 1000,
"description": "Optional details shown at the top: place, time, what to bring. Plain text; web links are removed."
},
"require_email": {
"type": "boolean",
"default": false,
"description": "Ask people for an email when signing up (enables reminders and self-cancel links)."
},
"one_per_person": {
"type": "boolean",
"default": false,
"description": "Allow only one slot per person (checked by email; turns on require_email)."
},
"organizer_name": {
"type": "string",
"maxLength": 60,
"description": "Name shown as the organizer, e.g. 'Dana'. Use the user's name if they gave it; otherwise omit."
},
"organizer_email": {
"type": "string",
"maxLength": 200,
"description": "Optional. Only an email address the user gave in this conversation. If set, both links are emailed to it so the private organizer link is not lost. Never guess an address."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"kind",
"title",
"share_url",
"organizer_url_note"
],
"properties": {
"kind": {
"enum": [
"signup_sheet",
"date_poll",
"group_card"
],
"type": "string"
},
"title": {
"type": "string"
},
"chip_in": {
"type": "boolean"
},
"language": {
"type": "string"
},
"timezone": {
"type": "string"
},
"warnings": {
"type": "array",
"items": {
"type": "string"
}
},
"flyer_url": {
"type": "string",
"description": "Printable QR-code flyer for the sheet."
},
"share_url": {
"type": "string",
"description": "Public link to send to participants."
},
"item_count": {
"type": "integer"
},
"organizer_url": {
"type": "string",
"description": "Private management link for the person who asked. Left out only when a repeated request returns a sheet whose organizer link went to the organizer email (see organizer_url_note)."
},
"emailed_links_to": {
"type": [
"string",
"null"
],
"description": "Masked address the links are being emailed to, or null."
},
"organizer_url_note": {
"type": "string"
}
},
"additionalProperties": false
}{
"title": "Create sign-up sheet",
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": false
}create_date_poll — Create date poll
Creates a group scheduling poll on SignUpSheet.page: people open one link and answer yes, maybe or no for each date or time option, and the option that works for most people is highlighted. Returns the share link and the private organizer link, where the organizer can pick the final time and notify everyone who left an email. Use it when the user wants to find a date or time that works for a group, such as a meeting, dinner, reunion, parent night or study session. Not for sign-up slots or opinion polls without dates.
{
"type": "object",
"required": [
"title",
"options"
],
"properties": {
"title": {
"type": "string",
"maxLength": 100,
"minLength": 1,
"description": "e.g. 'Book club – November meeting'."
},
"options": {
"type": "array",
"items": {
"type": "object",
"required": [
"date"
],
"properties": {
"date": {
"type": "string",
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"description": "YYYY-MM-DD."
},
"end_time": {
"type": "string",
"pattern": "^([01]\\d|2[0-3]):[0-5]\\d$",
"description": "Optional end, 24-hour HH:MM (needs start_time)."
},
"start_time": {
"type": "string",
"pattern": "^([01]\\d|2[0-3]):[0-5]\\d$",
"description": "Optional start, 24-hour HH:MM."
}
},
"additionalProperties": false
},
"maxItems": 60,
"minItems": 2,
"description": "Date or date-and-time options to vote on. They are shown in date order."
},
"language": {
"enum": [
"en",
"es",
"pt",
"fr",
"de",
"it",
"nl",
"pl",
"ru",
"tr",
"he",
"ar",
"zh",
"ja",
"ko"
],
"type": "string",
"description": "Language of the pages and emails people will see. Use the language the user is writing in; 'en' if it is not in the list."
},
"timezone": {
"type": "string",
"maxLength": 64,
"description": "IANA time zone of the event, e.g. 'America/Chicago' or 'Europe/Madrid'. Needed when dates or times are given (reminders and calendar files use it)."
},
"description": {
"type": "string",
"maxLength": 1000,
"description": "Optional details (place, length). Plain text; web links are removed."
},
"organizer_name": {
"type": "string",
"maxLength": 60,
"description": "Name shown as the organizer, e.g. 'Dana'. Use the user's name if they gave it; otherwise omit."
},
"organizer_email": {
"type": "string",
"maxLength": 200,
"description": "Optional. Only an email address the user gave in this conversation. If set, both links are emailed to it so the private organizer link is not lost. Never guess an address."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"kind",
"title",
"share_url",
"organizer_url_note"
],
"properties": {
"kind": {
"enum": [
"signup_sheet",
"date_poll",
"group_card"
],
"type": "string"
},
"title": {
"type": "string"
},
"chip_in": {
"type": "boolean"
},
"language": {
"type": "string"
},
"timezone": {
"type": "string"
},
"warnings": {
"type": "array",
"items": {
"type": "string"
}
},
"flyer_url": {
"type": "string",
"description": "Printable QR-code flyer for the sheet."
},
"share_url": {
"type": "string",
"description": "Public link to send to participants."
},
"item_count": {
"type": "integer"
},
"organizer_url": {
"type": "string",
"description": "Private management link for the person who asked. Left out only when a repeated request returns a sheet whose organizer link went to the organizer email (see organizer_url_note)."
},
"emailed_links_to": {
"type": [
"string",
"null"
],
"description": "Masked address the links are being emailed to, or null."
},
"organizer_url_note": {
"type": "string"
}
},
"additionalProperties": false
}{
"title": "Create date poll",
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": false
}create_group_card — Create group card
Creates an online group card on SignUpSheet.page for one person: everyone opens one shared link and writes a message, and the organizer delivers the finished card later by email, on screen or printed. Use it for a farewell, birthday, retirement, thank-you, new baby, get well, sympathy, welcome, wedding, graduation, work anniversary or congratulations card from a team, class or family. It can also collect money for a gift (chip_in): signers pledge an amount and pay the organizer directly. Returns the share link (for signers, not for the recipient) and the private organizer link.
{
"type": "object",
"required": [
"recipient_name",
"occasion"
],
"properties": {
"title": {
"type": "string",
"maxLength": 100,
"description": "Optional; defaults to e.g. 'Farewell card for Sarah' in the chosen language."
},
"chip_in": {
"type": "object",
"properties": {
"goal": {
"type": "integer",
"default": 0,
"maximum": 100000000,
"minimum": 0,
"description": "Optional total goal; 0 = no goal."
},
"other": {
"type": "string",
"maxLength": 90,
"description": "Any other way to pay, as plain text (no links)."
},
"venmo": {
"type": "string",
"maxLength": 31,
"description": "Venmo username."
},
"zelle": {
"type": "string",
"maxLength": 40,
"description": "Zelle email or US phone the user gave."
},
"cashapp": {
"type": "string",
"maxLength": 21,
"description": "Cash App $cashtag."
},
"purpose": {
"type": "string",
"maxLength": 80,
"description": "What the money is for, e.g. 'Gift for Ms. Lee'."
},
"revolut": {
"type": "string",
"maxLength": 33,
"description": "Revolut username."
},
"currency": {
"enum": [
"USD",
"EUR",
"GBP",
"CAD",
"AUD",
"MXN",
"BRL",
"ILS",
"PLN",
"TRY",
"CHF",
"JPY",
"KRW",
"CNY",
"INR",
"ARS",
"COP",
"CLP",
"PEN",
"ZAR",
"NZD",
"SEK",
"NOK",
"DKK",
"CZK",
"HUF",
"RON",
"AED",
"SAR",
"EGP",
"MAD",
"SGD",
"HKD",
"TWD",
"PHP",
"RUB",
"UAH",
"KZT"
],
"type": "string",
"description": "Currency of the amounts. Default: US dollars when Venmo, Cash App or Zelle is given, otherwise the usual currency for the language."
},
"paypal_me": {
"type": "string",
"maxLength": 30,
"description": "PayPal.Me name (the part after paypal.me/)."
},
"suggested_amount": {
"type": "integer",
"maximum": 1000000,
"minimum": 1,
"description": "Suggested amount per person, in whole units of the currency (default 10 US dollars or a similar round amount)."
}
},
"description": "Optional money collection on the same link. People pledge an amount and pay the organizer directly in the organizer's own payment app; SignUpSheet.page does not hold or transfer money. Include at least one way to pay, using only handles the user gave you. Venmo and Zelle work in US dollars only, Cash App in US dollars and pounds.",
"additionalProperties": false
},
"language": {
"enum": [
"en",
"es",
"pt",
"fr",
"de",
"it",
"nl",
"pl",
"ru",
"tr",
"he",
"ar",
"zh",
"ja",
"ko"
],
"type": "string",
"description": "Language of the pages and emails people will see. Use the language the user is writing in; 'en' if it is not in the list."
},
"occasion": {
"enum": [
"farewell",
"birthday",
"thank_you",
"retirement",
"new_baby",
"get_well",
"congratulations",
"welcome",
"wedding",
"graduation",
"sympathy",
"work_anniversary",
"just_because"
],
"type": "string"
},
"timezone": {
"type": "string",
"maxLength": 64,
"description": "IANA time zone of the event, e.g. 'America/Chicago' or 'Europe/Madrid'. Needed when dates or times are given (reminders and calendar files use it)."
},
"show_messages": {
"type": "boolean",
"default": true,
"description": "Let signers see each other's messages before the card is delivered."
},
"organizer_name": {
"type": "string",
"maxLength": 60,
"description": "Name shown as the organizer, e.g. 'Dana'. Use the user's name if they gave it; otherwise omit."
},
"recipient_name": {
"type": "string",
"maxLength": 60,
"minLength": 1,
"description": "Who the card is for, e.g. 'Sarah'."
},
"organizer_email": {
"type": "string",
"maxLength": 200,
"description": "Optional. Only an email address the user gave in this conversation. If set, both links are emailed to it so the private organizer link is not lost. Never guess an address."
},
"message_to_signers": {
"type": "string",
"maxLength": 1000,
"description": "Optional note shown to signers, e.g. 'Sign by Friday — we give it at lunch.' Plain text."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"kind",
"title",
"share_url",
"organizer_url_note"
],
"properties": {
"kind": {
"enum": [
"signup_sheet",
"date_poll",
"group_card"
],
"type": "string"
},
"title": {
"type": "string"
},
"chip_in": {
"type": "boolean"
},
"language": {
"type": "string"
},
"timezone": {
"type": "string"
},
"warnings": {
"type": "array",
"items": {
"type": "string"
}
},
"flyer_url": {
"type": "string",
"description": "Printable QR-code flyer for the sheet."
},
"share_url": {
"type": "string",
"description": "Public link to send to participants."
},
"item_count": {
"type": "integer"
},
"organizer_url": {
"type": "string",
"description": "Private management link for the person who asked. Left out only when a repeated request returns a sheet whose organizer link went to the organizer email (see organizer_url_note)."
},
"emailed_links_to": {
"type": [
"string",
"null"
],
"description": "Masked address the links are being emailed to, or null."
},
"organizer_url_note": {
"type": "string"
}
},
"additionalProperties": false
}{
"title": "Create group card",
"readOnlyHint": false,
"openWorldHint": true,
"idempotentHint": false,
"destructiveHint": false
}get_sheet_summary — Get sheet status
Reads the current public status of a SignUpSheet.page sign-up sheet, date poll or group card from its share link: which slots are open or full, poll answers per option, or how many people have signed a card. Use it when the user asks how their sheet, poll or card is going. Takes the public share link (signupsheet.page/s/…); it never returns email addresses or other private details.
{
"type": "object",
"required": [
"share_url"
],
"properties": {
"share_url": {
"type": "string",
"maxLength": 200,
"description": "The public link, e.g. https://signupsheet.page/s/k3m9x2pq (an 8-character sheet id alone also works)."
}
},
"additionalProperties": false
}{
"type": "object",
"required": [
"kind",
"title",
"closed",
"share_url"
],
"properties": {
"card": {
"type": "object"
},
"kind": {
"enum": [
"signup_sheet",
"date_poll",
"group_card"
],
"type": "string"
},
"poll": {
"type": "object"
},
"slots": {
"type": "array",
"items": {
"type": "object"
}
},
"title": {
"type": "string"
},
"closed": {
"type": "boolean"
},
"totals": {
"type": "object"
},
"chip_in": {
"type": "object"
},
"share_url": {
"type": "string"
},
"truncated": {
"type": "boolean"
}
}
}{
"title": "Get sheet status",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}Prompts
Not advertised
Resources
Not advertised
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
- 734 ms
- 95th percentile latency
- 734 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 734 ms · metadata changed · 4 tool(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http signupsheet-page-mcp https://signupsheet.page/mcpCodex
codex mcp add signupsheet-page-mcp --url https://signupsheet.page/mcpCursor
{
"mcpServers": {
"signupsheet-page-mcp": {
"url": "https://signupsheet.page/mcp"
}
}
}Cline
{
"mcpServers": {
"signupsheet-page-mcp": {
"type": "streamableHttp",
"url": "https://signupsheet.page/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"signupsheet-page-mcp": {
"type": "http",
"url": "https://signupsheet.page/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http signupsheet-page-mcp https://signupsheet.page/mcpClaude Desktop
{
"mcpServers": {
"signupsheet-page-mcp": {
"url": "https://signupsheet.page/mcp"
}
}
}Windsurf
{
"mcpServers": {
"signupsheet-page-mcp": {
"serverUrl": "https://signupsheet.page/mcp"
}
}
}Let your agent find its tools
Find servers like SignUpSheet.page MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.
Other productivity and knowledge servers
Do you run SignUpSheet.page MCP?
Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.