Koskamo

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.

SignUpSheet.page MCP logo, by AlchemforgeVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-01Operated by Alchemforge
MCP endpoint (Streamable HTTP)
https://signupsheet.page/mcp
Vendor documentation

What 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

Vendor evidenceRegistry 1.0.0

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
Server-advertised capabilities
{
  "tools": {
    "listChanged": false
  }
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

SignUpSheet.page makes online sign-up sheets, date polls and group cards that people join from one link, with no accounts and no ads. Each create tool returns a public share link for participants and a private organizer link for the person who asked; anyone with the organizer link can edit or delete the sheet. Dates are YYYY-MM-DD and times are 24-hour HH:MM in the given IANA time zone.

Tools

4 advertised

create_signup_sheet — Create sign-up sheet
Advertised by the server during the last successful anonymous check.
Open-world

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.

create_signup_sheet input schema
{
  "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
}
create_signup_sheet output schema
{
  "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
}
create_signup_sheet annotations
{
  "title": "Create sign-up sheet",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
create_date_poll — Create date poll
Advertised by the server during the last successful anonymous check.
Open-world

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.

create_date_poll input schema
{
  "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
}
create_date_poll output schema
{
  "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
}
create_date_poll annotations
{
  "title": "Create date poll",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
create_group_card — Create group card
Advertised by the server during the last successful anonymous check.
Open-world

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.

create_group_card input schema
{
  "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
}
create_group_card output schema
{
  "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
}
create_group_card annotations
{
  "title": "Create group card",
  "readOnlyHint": false,
  "openWorldHint": true,
  "idempotentHint": false,
  "destructiveHint": false
}
get_sheet_summary — Get sheet status
Advertised by the server during the last successful anonymous check.
Advertised read-only

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.

get_sheet_summary input schema
{
  "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
}
get_sheet_summary output schema
{
  "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"
    }
  }
}
get_sheet_summary annotations
{
  "title": "Get sheet status",
  "readOnlyHint": true,
  "openWorldHint": false,
  "idempotentHint": true,
  "destructiveHint": false
}

Prompts

Not advertised

No prompt definitions available.

Resources

Not advertised

No resource definitions available.

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.

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 signupsheet-page-mcp https://signupsheet.page/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 signupsheet-page-mcp --url https://signupsheet.page/mcp

Cursor

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

Cline

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

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start signupsheet-page-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "signupsheet-page-mcp": {
      "type": "http",
      "url": "https://signupsheet.page/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 signupsheet-page-mcp https://signupsheet.page/mcp

Claude Desktop

Merge this into claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart Claude Desktop.
Claude Desktop configuration
{
  "mcpServers": {
    "signupsheet-page-mcp": {
      "url": "https://signupsheet.page/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": {
    "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.

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.

Claim this listing