signupgenius-mcp
MCP server for SignUpGenius — 14 read tools + 2 write across profile, groups, sign-ups, and reports.
Setup
Three auth modes, tried in priority order — first match wins. You only need one.
Mode 1 — fetchproxy fallback (zero env vars, recommended)
Install the ContextMint Bridge browser extension once (releases: Chrome loads the chrome zip unpacked; Safari isn't available yet, so use Chrome for now — it's the fetchproxy extension renamed, source at https://github.com/nullnet-app/contextmint-bridge, verify a zip with its .sha256 file), sign into signupgenius.com, and add to .mcp.json (project) or ~/.claude/mcp.json (global):
{
"mcpServers": {
"signupgenius": {
"command": "npx",
"args": ["-y", "signupgenius-mcp"]
}
}
}
At startup the MCP reads your accessToken / cfid / cftoken cookies once via the extension, then talks to SignUpGenius directly — the extension is not in the request hot path after that. Works with free accounts.
Mode 2 — session login (email + password)
Add an env block with your direct-login credentials (won't work with Google/Apple/Facebook/Microsoft SSO or 2FA):
{
"mcpServers": {
"signupgenius": {
"command": "npx",
"args": ["-y", "signupgenius-mcp"],
"env": {
"SIGNUPGENIUS_EMAIL": "you@example.com",
"SIGNUPGENIUS_PASSWORD": "your-password"
}
}
}
}
Mode 3 — Pro API key (required for slot reports)
The three signupgenius_report_* tools that list filled / available / all participants for a given sign-up only work against the documented Pro v2 API. Get a key from Pro Tools → API Management in your SignUpGenius dashboard (Pro subscription required), then:
"env": { "SIGNUPGENIUS_USER_KEY": "your-api-key" }
Modes can be combined; Pro key wins where it applies, session/fetchproxy handles everything else.
Tools
Profile
signupgenius_get_profile— Your own profile (name, email, account type).
Groups
signupgenius_list_groups— Every group you own or belong to.signupgenius_list_group_members— Members of one of your groups.signupgenius_get_group_member— One member's full record.signupgenius_add_group_member(write) — Add a person to one of your groups (they may start receiving the group's invitations). Same confirmation as the other writes: a client that can show a prompt gets one (unless the server setsMCP_CONFIRM_ELICITATION=off); otherwise the first call adds nothing and returns a preview plus aconfirmToken— show it to the user, then repeat the call with the same arguments plusconfirmToken.
Sign-ups — created by you
signupgenius_list_created_active— Sign-ups you've created that are still open.signupgenius_list_created_expired— Sign-ups you've created that have ended.signupgenius_list_created_all— Both active and expired in one call.
Sign-ups — others'
signupgenius_list_invited— Sign-ups you've been invited to.signupgenius_list_signedupfor— Sign-ups you've taken a slot on. (Session-mode also includes the bonussignupgenius_legacy_get_my_signupswhich calls the same backend the SignUpGenius web wizard uses and sometimes returns fuller data.)signupgenius_legacy_get_my_signups(session only) — Bonus richer "what am I signed up for" lookup.
Public sign-up
signupgenius_get_public_signup— Sheet metadata by URL or slug: title, description, organizer, category, timezone, and the custom questions a sign-up must answer. No auth required. Metadata only — it carries no slots.signupgenius_list_slots— Every slot on ANY public sign-up: date, day of week, start/end time, title, location, capacity, filled vs available, and who has signed up (with the number of spots each entry consumes). No auth required, and it works on sheets the user did not create. Reach for this first for "what's still open" — the report tools below cannot answer it for someone else's sheet.signupgenius_rsvp(write) — RSVP yes/no/maybe to a headcount (Yes/No/Maybe) sheet. Never writes on the first call: a client that can show a prompt gets one (unless the server setsMCP_CONFIRM_ELICITATION=off); otherwise you get a preview plus aconfirmToken— show the preview to the user and, only after they approve, repeat the call with the same arguments plusconfirmToken. Responds as the signed-in account unless you passfirstname/lastname/email(see Who a sign-up is for below). Not for slot-based sheets.signupgenius_claim_slot(write) — Sign up for a slot on a slot-based sheet. The first call writes nothing and returns a preview of the sheet, slot and identity (plus aconfirmTokenwhen the client cannot show a prompt, or when the server setsMCP_CONFIRM_ELICITATION=off); show it to the user, then repeat the call with the same arguments plusconfirmToken. Pass the sheet's required custom fields (read them fromsignupgenius_get_public_signup). Signs up as the signed-in account unless you passfirstname/lastname/email(see Who a sign-up is for below).signupgenius_release_slot(write) — Give up a slot the user signed up for. Same two-step confirmation as above. Takesitem_member_idandslotitemidfrom the samesignupgenius_list_slotsrow; it only ever withdraws the signed-in user's own entry and refuses anyone else's.
Reports — slots for a sign-up (Pro key only, owner-scoped)
signupgenius_report_all— Every slot + participant on a sign-up.signupgenius_report_filled— Filled slots only.signupgenius_report_available— Available slots only.
These need SIGNUPGENIUS_USER_KEY and answer only for sign-ups the key holder created — a Pro key is not a workaround for someone else's sheet. Use signupgenius_list_slots for availability and participant names on any sheet; the reports add only what it cannot carry: custom-question answers.
Outside key mode these fail fast with a KeyModeRequiredError naming the tool, the mode required and the mode in effect, and instructing the user to set SIGNUPGENIUS_USER_KEY.
Who a sign-up is for
signupgenius_claim_slot and signupgenius_rsvp default the name and email to the signed-in account's profile. Omit firstname, lastname and email when the user is signing up themselves, which is the usual case. Pass them only when the user asks to sign up someone else, such as a spouse or child. The tool allows that, but the preview then shows identityDiffersFromAccount: true and an identityNote naming both people. Point this out to the user before they confirm, because the entry stays tied to their account. Every preview's identity block shows the name and email that will be sent, and source says whether they came from the account, were supplied, or were mixed. The confirm token is bound to that identity, so changing it after the preview means previewing again.
Trigger examples
- "Check SignUpGenius — what am I signed up for this week?" →
signupgenius_list_signedupfor(+_legacy_get_my_signupsin session mode) - "What slots are still open on the PTA potluck sign-up?" →
signupgenius_list_slots(no auth, works on anyone's sheet) - "Who signed up for which slot on MY potluck?" →
signupgenius_report_all(Pro key, own sheets only) - "List my SignUpGenius groups" →
signupgenius_list_groups - "Add Jordan Smith (jordan@example.com) to my Scouts group" →
signupgenius_add_group_member - "What sign-ups have I created that are still active?" →
signupgenius_list_created_active - "RSVP me to slot 3 on this SignUpGenius link" →
signupgenius_rsvp
Gotchas
- Reports require Pro.
signupgenius_report_*only work withSIGNUPGENIUS_USER_KEY— session/fetchproxy users get a clear error pointing at the key. - SSO accounts not supported. Session mode is direct email/password only — no Google/Apple/Facebook/Microsoft SSO, no 2FA. Use fetchproxy mode instead if your account uses SSO.
- Session listings collapse. In session mode the v3
signups/createdendpoint returns active + expired in one paginated call — the threelist_created_*tools all hit the same endpoint and filter client-side. Pro key mode has separate endpoints and exposes the real distinction. - Write surface is small. Only
signupgenius_add_group_member,signupgenius_rsvp,signupgenius_claim_slotandsignupgenius_release_slotmutate, all behind the confirmation gate; everything else is read-only. - ToS caveat. SignUpGenius's terms generally prohibit scripted/automated access. Personal-account, personal-scale use is the intended audience; running this against accounts you don't own or at scale is your problem.
