# SignUpGenius MCP tools

> Every SignUpGenius MCP tool on the Cotlet server: tool names, input schemas, a tools/call example and an example result for each tool.

Source: https://cotlet.dev/docs/mcp/signupgenius

Docs sections: [Get started](https://cotlet.dev/docs.md) · [REST API](https://cotlet.dev/docs/api.md) · [MCP](https://cotlet.dev/docs/mcp.md) · [SDKs & CLI](https://cotlet.dev/docs/sdks.md) · [Integrations](https://cotlet.dev/docs/integrations.md)

15 tools for SignUpGenius on the Cotlet MCP server. Your agent picks them from tools/list.

- MCP server: `https://cotlet.dev/mcp/v1`
- Connects with: Your own SignUpGenius organizer account
- Integration page: https://cotlet.dev/integrations/signupgenius-api-mcp-server

## Endpoints

| Endpoint | Access | Description |
|---|---|---|
| `signupgenius_list_signups` | read | Sign-ups you created, with title, group, dates and how many slots are filled. |
| `signupgenius_get_signup` | read | One sign-up with its description, link and every slot: title, date, time, location, wanted and filled. |
| `signupgenius_list_participants` | read | Who signed up for which slot, with name, email, quantity and answers to custom questions. |
| `signupgenius_list_groups` | read | Your groups (the people you invite) with member counts. |
| `signupgenius_list_group_members` | read | Members of a group with name and email. |
| `signupgenius_create_signup` | write | New sign-up saved as a draft. Nothing is visible or sent until you publish it. |
| `signupgenius_add_slots` | write | Add slots (roles or tasks) to a sign-up, on one or more dates and times. |
| `signupgenius_update_slot` | write | Change a slot's title, quantity, location or help comment. Quantity cannot go below the people already signed up. |
| `signupgenius_duplicate_signup` | write | Copy a sign-up with a new title. The copy is an unpublished draft. |
| `signupgenius_publish_signup` | write | Make a draft sign-up live and return its public link. Does not send invites. |
| `signupgenius_add_participant` | write | Sign someone up for a slot as the organizer, from a group or as a new person. |
| `signupgenius_move_participant` | write | Move a participant from their slot to another open slot on the same sign-up. |
| `signupgenius_remove_participant` | write | Delete a participant from a slot. |
| `signupgenius_send_message` | write | Email the people on a sign-up: everyone, those who signed up, or those who have not. |
| `signupgenius_add_group_member` | write | Add a person to one of your groups so you can invite them later. Sends nothing. |

## List sign-ups

MCP tool: `signupgenius_list_signups`

Access: read.

Returns your sign-ups, newest first, with the group each one is assigned to and the count of filled and wanted spots. Use signup_id from each item in the other endpoints. Drafts are included only when status is drafts.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `status` | enum | no | active, past or drafts. Default: active. |
| `limit` | integer | no | 1 to 100. Default: 25. |
| `cursor` | string | no | Next page cursor from the previous call. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "signupgenius_list_signups",
    "arguments": {}
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "signups": [
      {
        "signup_id": "50463821",
        "title": "Spring bake sale",
        "status": "active",
        "group": "PTA",
        "filled": 9,
        "wanted": 12,
        "next_date": "2027-05-09"
      },
      {
        "signup_id": "50471160",
        "title": "Book fair volunteers",
        "status": "active",
        "group": "PTA",
        "filled": 4,
        "wanted": 8,
        "next_date": "2027-03-12"
      }
    ],
    "next_cursor": null
  },
  "isError": false
}
```

## Get sign-up

MCP tool: `signupgenius_get_signup`

Access: read.

Returns the sign-up and its slots in date order. Each slot has the ID other endpoints need and the number of people wanted and filled. Set open_only to get only slots that still have spots.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `signup_id` | string | yes | Sign-up ID from list_signups. |
| `open_only` | boolean | no | Only slots that still have spots. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "signupgenius_get_signup",
    "arguments": {
      "signup_id": "signup_8c41d2"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "signup_id": "50463821",
    "title": "Spring bake sale",
    "status": "active",
    "url": "https://www.signupgenius.com/go/50463821",
    "slots": [
      {
        "slot_id": "3381902441",
        "title": "Bake sale shift",
        "start": "2027-05-09T09:00:00-04:00",
        "location": "School lobby",
        "wanted": 4,
        "filled": 4
      },
      {
        "slot_id": "3381902442",
        "title": "Bake sale shift",
        "start": "2027-05-09T11:00:00-04:00",
        "location": "School lobby",
        "wanted": 4,
        "filled": 2
      }
    ]
  },
  "isError": false
}
```

## List participants

MCP tool: `signupgenius_list_participants`

Access: read.

Returns one row per participant, in slot order. Email is empty when the person did not give one. Answers to custom questions come as question and answer pairs. Use from and to to limit the slot dates.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `signup_id` | string | yes | Sign-up ID from list_signups. |
| `from` | date | no | Only slots on or after this date. |
| `to` | date | no | Only slots on or before this date. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "signupgenius_list_participants",
    "arguments": {
      "signup_id": "signup_8c41d2"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "signup_id": "50463821",
    "participants": [
      {
        "participant_id": "771204518",
        "first_name": "Jordan",
        "last_name": "Reyes",
        "email": "jordan@example.com",
        "slot_id": "3381902441",
        "quantity": 1,
        "answers": [
          {
            "question": "Dietary notes",
            "answer": "Nut free"
          }
        ]
      },
      {
        "participant_id": "771204533",
        "first_name": "Sam",
        "last_name": "Ortiz",
        "email": null,
        "slot_id": "3381902442",
        "quantity": 2,
        "answers": []
      }
    ]
  },
  "isError": false
}
```

## List groups

MCP tool: `signupgenius_list_groups`

Access: read.

Returns every group in your account with its ID and member count. Use group_id from each item in create_signup, list_group_members and add_group_member.

### Parameters

No parameters.

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "signupgenius_list_groups",
    "arguments": {}
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "groups": [
      {
        "group_id": "9120334",
        "name": "PTA",
        "members": 86
      },
      {
        "group_id": "9120571",
        "name": "Class 3B",
        "members": 24
      }
    ]
  },
  "isError": false
}
```

## List group members

MCP tool: `signupgenius_list_group_members`

Access: read.

Returns the people in one group, with name and email, so your agent can compare them with a sign-up. Members without an email have it empty.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `group_id` | string | yes | Group ID from list_groups. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "signupgenius_list_group_members",
    "arguments": {
      "group_id": "group_8c41d2"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "group_id": "9120571",
    "members": [
      {
        "member_id": "6610021",
        "first_name": "Maya",
        "last_name": "Chen",
        "email": "maya@example.com"
      },
      {
        "member_id": "6610022",
        "first_name": "Leo",
        "last_name": "Park",
        "email": "leo@example.com"
      }
    ]
  },
  "isError": false
}
```

## Create sign-up

MCP tool: `signupgenius_create_signup`

Access: write.

Creates an empty sign-up as a draft and returns its ID. Nobody can see it and no email goes out until publish_signup. It reaches no one and you can delete the draft, so it runs without asking first. Add slots next with add_slots.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `title` | string | yes | Sign-up title. |
| `description` | string | no | Text shown at the top of the sign-up. |
| `group_id` | string | no | Group to assign, from list_groups. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "signupgenius_create_signup",
    "arguments": {
      "title": "title"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "signup_id": "50463821",
    "title": "Spring bake sale",
    "status": "draft",
    "group_id": "9120334"
  },
  "isError": false
}
```

## Add slots

MCP tool: `signupgenius_add_slots`

Access: write.

Adds one slot per date-time you pass, all with the same title and quantity, and returns each new slot ID. The sign-up keeps its status, so slots added to a draft stay hidden. It reaches no one, so it runs without asking first.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `signup_id` | string | yes | Sign-up ID from list_signups. |
| `title` | string | yes | Slot name, e.g. "Main dish" or "Setup crew". |
| `quantity` | integer | yes | Number of people wanted per date. |
| `dates` | string[] | no | ISO date-times the slot applies to, with time zone. Empty: slot without a date. |
| `location` | string | no | Where the slot takes place. |
| `help_comment` | string | no | Short note that explains the slot. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "signupgenius_add_slots",
    "arguments": {
      "signup_id": "50463821",
      "title": "Bake sale shift",
      "quantity": 4,
      "dates": [
        "2027-05-09T09:00:00-04:00",
        "2027-05-09T11:00:00-04:00",
        "2027-05-09T13:00:00-04:00"
      ],
      "location": "School lobby",
      "help_comment": "Bring a float of small bills."
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "signup_id": "50463821",
    "status": "draft",
    "slots_added": 3,
    "slots": [
      {
        "slot_id": "3381902441",
        "start": "2027-05-09T09:00:00-04:00",
        "title": "Bake sale shift",
        "wanted": 4,
        "filled": 0
      },
      {
        "slot_id": "3381902442",
        "start": "2027-05-09T11:00:00-04:00",
        "title": "Bake sale shift",
        "wanted": 4,
        "filled": 0
      },
      {
        "slot_id": "3381902443",
        "start": "2027-05-09T13:00:00-04:00",
        "title": "Bake sale shift",
        "wanted": 4,
        "filled": 0
      }
    ]
  },
  "isError": false
}
```

## Update slot

MCP tool: `signupgenius_update_slot`

Access: write.

Changes the fields you pass and returns the slot as it is now. A quantity lower than the people already signed up is refused. On a published sign-up the change is visible at once, but no one is told, so it runs without asking first.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `signup_id` | string | yes | Sign-up ID from list_signups. |
| `slot_id` | string | yes | Slot ID from get_signup. |
| `fields` | object | yes | Any of title, quantity, location, help_comment. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "signupgenius_update_slot",
    "arguments": {
      "signup_id": "signup_8c41d2",
      "slot_id": "slot_8c41d2",
      "fields": "fields"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "slot_id": "3381902442",
    "title": "Bake sale shift",
    "start": "2027-05-09T11:00:00-04:00",
    "location": "Gym entrance",
    "wanted": 5,
    "filled": 2
  },
  "isError": false
}
```

## Duplicate sign-up

MCP tool: `signupgenius_duplicate_signup`

Access: write.

Copies a sign-up, past or active, with its slots, and saves the copy as an unpublished draft under the new title. Nobody sees it and no one is told, so it runs without asking first. Check the dates on the copy before you publish it.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `signup_id` | string | yes | Sign-up ID from list_signups. |
| `title` | string | yes | Title of the copy. |
| `group_id` | string | no | Assign the copy to another group. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "signupgenius_duplicate_signup",
    "arguments": {
      "signup_id": "signup_8c41d2",
      "title": "title"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "signup_id": "52014408",
    "title": "Teacher conferences 2027",
    "status": "draft",
    "copied_from": "48820917",
    "slots": 18
  },
  "isError": false
}
```

## Publish sign-up

MCP tool: `signupgenius_publish_signup`

Access: write. Confirm: waits for the user's OK before it runs.

Makes a draft visible to anyone with the link and returns that link. It does not email the group; use send_message for that. By default you confirm each call; you can switch that off for this tool.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `signup_id` | string | yes | Sign-up ID from list_signups. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "signupgenius_publish_signup",
    "arguments": {
      "signup_id": "signup_8c41d2"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "signup_id": "52014408",
    "status": "active",
    "url": "https://www.signupgenius.com/go/52014408"
  },
  "isError": false
}
```

## Add participant

MCP tool: `signupgenius_add_participant`

Access: write. Confirm: waits for the user's OK before it runs.

Signs a person up for a slot and returns the new participant ID. With send_confirmation on, they get a confirmation email. A full slot is refused. By default you confirm each call; you can switch that off for this tool.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `signup_id` | string | yes | Sign-up ID from list_signups. |
| `slot_id` | string | yes | Slot ID from get_signup. |
| `first_name` | string | yes | First name. |
| `last_name` | string | yes | Last name. |
| `email` | string | no | Email; leave out if the person has none. |
| `send_confirmation` | boolean | no | Send them a confirmation email. Default: true. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "signupgenius_add_participant",
    "arguments": {
      "signup_id": "signup_8c41d2",
      "slot_id": "slot_8c41d2",
      "first_name": "first name",
      "last_name": "last name"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "participant_id": "771204601",
    "signup_id": "50463821",
    "slot_id": "3381902442",
    "first_name": "Maya",
    "last_name": "Chen",
    "confirmation_sent": true
  },
  "isError": false
}
```

## Move participant

MCP tool: `signupgenius_move_participant`

Access: write. Confirm: waits for the user's OK before it runs.

Moves one participant to a slot that still has room, on the same sign-up, and returns both slot IDs. With notify on, the participant gets an email about the change. By default you confirm each call; you can switch that off for this tool.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `signup_id` | string | yes | Sign-up ID from list_signups. |
| `participant_id` | string | yes | Participant ID from list_participants. |
| `to_slot_id` | string | yes | Target slot ID from get_signup. |
| `notify` | boolean | no | Email the participant about the change. Default: true. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "signupgenius_move_participant",
    "arguments": {
      "signup_id": "signup_8c41d2",
      "participant_id": "participant_8c41d2",
      "to_slot_id": "to_slot_8c41d2"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "participant_id": "771204518",
    "from_slot_id": "3381902441",
    "to_slot_id": "3381902442",
    "notified": true
  },
  "isError": false
}
```

## Remove participant

MCP tool: `signupgenius_remove_participant`

Access: write. Confirm: waits for the user's OK before it runs.

Removes one participant from their slot, which frees the spot. With notify on, the participant gets an email. By default you confirm each call; you can switch that off for this tool.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `signup_id` | string | yes | Sign-up ID from list_signups. |
| `participant_id` | string | yes | Participant ID from list_participants. |
| `notify` | boolean | no | Email the participant about the change. Default: true. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "signupgenius_remove_participant",
    "arguments": {
      "signup_id": "signup_8c41d2",
      "participant_id": "participant_8c41d2"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "participant_id": "771204533",
    "slot_id": "3381902442",
    "removed": true,
    "notified": false
  },
  "isError": false
}
```

## Send message

MCP tool: `signupgenius_send_message`

Access: write. Confirm: waits for the user's OK before it runs.

Sends one email from your SignUpGenius account and returns how many people it went to. People without an email are skipped and counted. Assign the sign-up to a group so not_signed_up has a list to compare with. By default you confirm each call; you can switch that off for this tool.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `signup_id` | string | yes | Sign-up ID from list_signups. |
| `recipients` | enum | yes | all, signed_up or not_signed_up. |
| `subject` | string | yes | Email subject. |
| `body` | string | yes | Message text. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "signupgenius_send_message",
    "arguments": {
      "signup_id": "50471160",
      "recipients": "not_signed_up",
      "subject": "Book fair: 6 spots still open next week",
      "body": "Hi all, we still need help on Friday 12 March: 2 spots at 10:00 and 3 at 14:00, plus 1 on Saturday at 9:00. Pick one at the sign-up link."
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "signup_id": "50463821",
    "recipients": "not_signed_up",
    "sent": 14,
    "skipped_no_email": 1
  },
  "isError": false
}
```

## Add group member

MCP tool: `signupgenius_add_group_member`

Access: write.

Adds one person to a group and returns the member ID. Nothing is sent to them, and you can remove them from the group in SignUpGenius, so it runs without asking first. One person per call.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `group_id` | string | yes | Group ID from list_groups. |
| `email` | string | yes | Member email. |
| `first_name` | string | no | First name. |
| `last_name` | string | no | Last name. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "signupgenius_add_group_member",
    "arguments": {
      "group_id": "group_8c41d2",
      "email": "jane@example.com"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "member_id": "6610090",
    "group_id": "9120571",
    "email": "ana@example.com",
    "added": true
  },
  "isError": false
}
```
