# PushPress MCP tools

> Every PushPress 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/pushpress

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)

14 tools for PushPress on the Cotlet MCP server. Your agent picks them from tools/list.

- MCP server: `https://cotlet.dev/mcp/v1`
- Connects with: Your PushPress Core staff account (admin for plan changes and the No Show / Late Cancel report)
- Integration page: https://cotlet.dev/integrations/pushpress-api-mcp-server

## Endpoints

| Endpoint | Access | Description |
|---|---|---|
| `pushpress_list_members` | read | People in your gym with their plans and plan status. |
| `pushpress_get_member` | read | Profile, plans with status and next bill date, and recent class activity. |
| `pushpress_list_classes` | read | Classes on the calendar for a date range, with coach and reservation counts. |
| `pushpress_get_class_roster` | read | Members of one class grouped by status. |
| `pushpress_list_plan_templates` | read | Plans you sell, with price and whether they are recurring. |
| `pushpress_list_no_shows_late_cancels` | read | Rows of the No Show / Late Cancel report for a date range. |
| `pushpress_book_class_reservation` | write | Reserve a spot in a class for a member. |
| `pushpress_check_in_member` | write | Check a member into a class, with or without a reservation. |
| `pushpress_remove_reservation` | write | Remove a member's reservation or check-in from a class. |
| `pushpress_switch_member_plan` | write | Move a member from one recurring plan to another, now or at the next bill date. |
| `pushpress_pause_member_plan` | write | Pause a member's plan and its billing. |
| `pushpress_cancel_member_plan` | write | Cancel a member's plan now or on a future date. |
| `pushpress_message_class_registrants` | write | Email or text the members registered in a class. |
| `pushpress_cancel_class` | write | Cancel one class, or this and future classes in its series. |

## List members

MCP tool: `pushpress_list_members`

Access: read.

Lists people in Core with the status of each plan: Active, Alert, Pending Active, Pending Cancel, Cancelled, Paused or Completed. Alert means a billing issue; class reservations are restricted for that plan. Pages hold up to 100 people; pass next_cursor back as cursor for the next page.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `search` | string | no | Name or email. |
| `plan_status` | enum | no | active, alert, pending_active, pending_cancel, cancelled, paused or completed. |
| `limit` | integer | no | 1 to 100. Default: 50. |
| `cursor` | string | no | Next page cursor from the previous call. |

### tools/call

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

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "members": [
      {
        "member_id": "usr_8f2k41",
        "name": "Jordan Reyes",
        "plans": [
          {
            "plan_id": "pln_30917",
            "name": "3x Week",
            "status": "active",
            "next_bill_date": "2026-11-01"
          }
        ]
      },
      {
        "member_id": "usr_2c77d9",
        "name": "Alex Kim",
        "plans": [
          {
            "plan_id": "pln_30455",
            "name": "Unlimited",
            "status": "alert",
            "next_bill_date": "2026-10-15"
          }
        ]
      }
    ],
    "next_cursor": null
  },
  "isError": false
}
```

## Get member

MCP tool: `pushpress_get_member`

Access: read.

Returns one profile with contact details, every plan with its status, next bill date and the Plan ID other tools need, and recent reservations and check-ins. Call it before switching, pausing or cancelling a plan.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `member_id` | string | yes | Member ID from list_members. |

### tools/call

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

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "member_id": "usr_8f2k41",
    "name": "Jordan Reyes",
    "email": "jordan@example.com",
    "plans": [
      {
        "plan_id": "pln_30917",
        "name": "3x Week",
        "status": "active",
        "recurring": true,
        "next_bill_date": "2026-11-01"
      }
    ],
    "recent_activity": [
      {
        "class_id": "cls_5101",
        "class_name": "CrossFit 7:00",
        "status": "checked_in",
        "date": "2026-10-09"
      }
    ]
  },
  "isError": false
}
```

## List classes

MCP tool: `pushpress_list_classes`

Access: read.

Lists classes on the calendar between two dates, in start order. Each item has the Class ID other tools need, the coach and how many members are reserved or waitlisted. Cancelled classes are not returned.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `from` | date | yes | First day. |
| `to` | date | no | Last day. Default: same as from. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "pushpress_list_classes",
    "arguments": {
      "from": "2026-10-01"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "classes": [
      {
        "class_id": "cls_5101",
        "name": "CrossFit 7:00",
        "starts_at": "2026-10-12T07:00:00-04:00",
        "coach": "Dana",
        "reserved": 11,
        "waitlist": 0
      },
      {
        "class_id": "cls_5120",
        "name": "CrossFit 9:00",
        "starts_at": "2026-10-17T09:00:00-04:00",
        "coach": "Dana",
        "reserved": 3,
        "waitlist": 1
      }
    ]
  },
  "isError": false
}
```

## Get class roster

MCP tool: `pushpress_get_class_roster`

Access: read.

Returns everyone on one class card with the same statuses Core shows: Checked In, Reserved, Waitlist, Late Cancel and No Show. A Waitlist member moves to Reserved if a spot opens.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `class_id` | string | yes | Class ID from list_classes. |

### tools/call

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

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "class_id": "cls_5120",
    "name": "CrossFit 9:00",
    "members": [
      {
        "member_id": "usr_8f2k41",
        "name": "Jordan Reyes",
        "status": "reserved"
      },
      {
        "member_id": "usr_2c77d9",
        "name": "Alex Kim",
        "status": "reserved"
      },
      {
        "member_id": "usr_91ab03",
        "name": "Sam Ortiz",
        "status": "reserved"
      },
      {
        "member_id": "usr_44de18",
        "name": "Priya Nair",
        "status": "waitlist"
      }
    ]
  },
  "isError": false
}
```

## List plan templates

MCP tool: `pushpress_list_plan_templates`

Access: read.

Lists the plans you can put a member on, with price and whether each is recurring. Use the template ID as new_plan_template_id in switch_member_plan, which works only with recurring plans.

### Parameters

No parameters.

### tools/call

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

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "plan_templates": [
      {
        "template_id": "tpl_3x",
        "name": "3x Week",
        "recurring": true,
        "price": "149.00 USD / month"
      },
      {
        "template_id": "tpl_unlimited",
        "name": "Unlimited",
        "recurring": true,
        "price": "189.00 USD / month"
      }
    ]
  },
  "isError": false
}
```

## List no-shows and late cancels

MCP tool: `pushpress_list_no_shows_late_cancels`

Access: read.

Returns the members who missed a class (No Show) or cancelled inside the late cancel window (Late Cancel). PushPress updates the report within 24 to 48 hours after check-ins or deletions, so recent classes may be incomplete. Fees are not charged automatically.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `from` | date | yes | First day. |
| `to` | date | yes | Last day. |
| `type` | enum | no | no_show, late_cancel or all. Default: all. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "pushpress_list_no_shows_late_cancels",
    "arguments": {
      "from": "2026-10-05",
      "to": "2026-10-11",
      "type": "all"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "rows": [
      {
        "member_id": "usr_91ab03",
        "name": "Sam Ortiz",
        "class_name": "CrossFit 7:00",
        "date": "2026-10-07",
        "type": "no_show"
      },
      {
        "member_id": "usr_2c77d9",
        "name": "Alex Kim",
        "class_name": "CrossFit 9:00",
        "date": "2026-10-08",
        "type": "late_cancel"
      }
    ]
  },
  "isError": false
}
```

## Book class reservation

MCP tool: `pushpress_book_class_reservation`

Access: write.

Adds a member to a class from the class view in Core. Access rules apply: a plan that does not allow the class blocks the booking. It reaches no one else and remove_reservation undoes it, so it runs without asking.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `class_id` | string | yes | Class ID from list_classes. |
| `member_id` | string | yes | Member ID from list_members. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "pushpress_book_class_reservation",
    "arguments": {
      "class_id": "class_8c41d2",
      "member_id": "member_8c41d2"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "class_id": "cls_5120",
    "member_id": "usr_8f2k41",
    "status": "reserved"
  },
  "isError": false
}
```

## Check in member

MCP tool: `pushpress_check_in_member`

Access: write.

Checks a Reserved member in, or adds a walk-in who has no reservation. It enforces the same access rules as a direct check-in. With override set to true it checks the member in anyway, as staff can in the Control Panel; an override does not charge the member. It reaches no one else and remove_reservation can undo the entry, so it runs without asking.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `class_id` | string | yes | Class ID from list_classes. |
| `member_id` | string | yes | Member ID from list_members. |
| `override` | boolean | no | Check in even when the member's plan does not allow the class. Default: false. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "pushpress_check_in_member",
    "arguments": {
      "class_id": "class_8c41d2",
      "member_id": "member_8c41d2"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "class_id": "cls_5101",
    "member_id": "usr_8f2k41",
    "status": "checked_in"
  },
  "isError": false
}
```

## Remove reservation

MCP tool: `pushpress_remove_reservation`

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

Removes the entry, the same as Remove Reservation or Remove Check-In in Core. PushPress states that removing a reservation does not affect the member's plan or billing. The member loses the spot. By default you confirm each call; you can switch that off for this tool.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `class_id` | string | yes | Class ID from list_classes. |
| `member_id` | string | yes | Member ID from list_members. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "pushpress_remove_reservation",
    "arguments": {
      "class_id": "class_8c41d2",
      "member_id": "member_8c41d2"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "class_id": "cls_5120",
    "member_id": "usr_91ab03",
    "status": "removed"
  },
  "isError": false
}
```

## Switch member plan

MCP tool: `pushpress_switch_member_plan`

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

Runs Switch Plan from the member profile. With now, the current plan ends at once and prorated fees go on the first bill of the new plan. With next_bill_date, the current plan shows as pending cancel and the new one as pending active. Works only for recurring plans. PushPress emails the admin and the member. By default you confirm each call; you can switch that off for this tool.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `member_id` | string | yes | Member ID from list_members. |
| `current_plan_id` | string | yes | Plan ID from get_member. |
| `new_plan_template_id` | string | yes | Template ID from list_plan_templates. |
| `when` | enum | yes | now or next_bill_date. |
| `waive_setup_fee` | boolean | no | Set the setup fee to 0. Default: false. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "pushpress_switch_member_plan",
    "arguments": {
      "member_id": "usr_8f2k41",
      "current_plan_id": "pln_30917",
      "new_plan_template_id": "tpl_unlimited",
      "when": "next_bill_date",
      "waive_setup_fee": true
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "member_id": "usr_8f2k41",
    "current_plan": {
      "plan_id": "pln_30917",
      "name": "3x Week",
      "status": "pending_cancel",
      "ends_on": "2026-11-01"
    },
    "new_plan": {
      "name": "Unlimited",
      "status": "pending_active",
      "starts_on": "2026-11-01",
      "setup_fee": "0.00 USD"
    },
    "confirmation_email": "sent to member and admin"
  },
  "isError": false
}
```

## Pause member plan

MCP tool: `pushpress_pause_member_plan`

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

Runs Pause Plan from the member profile. Billing stops while the status is Paused. Leave resume_on empty for an indefinite pause. On resume, unused days from the pause date to the Paid Until Date are credited and the next bill date moves out by that many days. By default you confirm each call; you can switch that off for this tool.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `member_id` | string | yes | Member ID from list_members. |
| `plan_id` | string | yes | Plan ID from get_member (the member's current plan). |
| `pause_from` | date | yes | First day of the pause. |
| `resume_on` | date | no | Day the plan resumes. Empty means indefinite. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "pushpress_pause_member_plan",
    "arguments": {
      "member_id": "usr_2c77d9",
      "plan_id": "pln_30455",
      "pause_from": "2026-10-19",
      "resume_on": "2026-11-19"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "member_id": "usr_2c77d9",
    "plan_id": "pln_30455",
    "status": "paused",
    "paused_from": "2026-10-12",
    "resumes_on": "2026-11-12"
  },
  "isError": false
}
```

## Cancel member plan

MCP tool: `pushpress_cancel_member_plan`

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

Runs Cancel Plan from the member profile. A date of today sets the status to Cancelled and the member loses access at once. A future date sets Pending Cancel, and the member keeps full access until that date has passed. Setting the date one day before the next bill date helps avoid an extra charge. By default you confirm each call; you can switch that off for this tool.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `member_id` | string | yes | Member ID from list_members. |
| `plan_id` | string | yes | Plan ID from get_member (the member's current plan). |
| `cancel_on` | date | no | Cancel date. Default: today. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "pushpress_cancel_member_plan",
    "arguments": {
      "member_id": "member_8c41d2",
      "plan_id": "plan_8c41d2"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "member_id": "usr_8f2k41",
    "plan_id": "pln_30917",
    "status": "pending_cancel",
    "cancel_on": "2026-10-31"
  },
  "isError": false
}
```

## Message class registrants

MCP tool: `pushpress_message_class_registrants`

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

Runs Mass Email Registrants from the class menu. It reaches the members currently registered in the class, by email, text or both. Core sends these one class at a time. By default you confirm each call; you can switch that off for this tool.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `class_id` | string | yes | Class ID from list_classes. |
| `channel` | enum | yes | email, sms or both. |
| `subject` | string | no | Email subject. Used for email and both. |
| `body` | string | yes | Message text. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "pushpress_message_class_registrants",
    "arguments": {
      "class_id": "class_8c41d2",
      "channel": "email",
      "body": "body"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "class_id": "cls_5120",
    "channel": "sms",
    "recipients": 4,
    "status": "sent"
  },
  "isError": false
}
```

## Cancel class

MCP tool: `pushpress_cancel_class`

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

Removes the class from the calendar. PushPress sends no notification, so call message_class_registrants first. Scope is this class only, this class and all future classes on that weekday, or this class and all future classes in the series. Members who were not checked in get their class credits back. By default you confirm each call; you can switch that off for this tool.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `class_id` | string | yes | Class ID from list_classes. |
| `scope` | enum | yes | this_class, this_and_future_weekday or this_and_future_series. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "pushpress_cancel_class",
    "arguments": {
      "class_id": "cls_5120",
      "scope": "this_class"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "class_id": "cls_5120",
    "scope": "this_class",
    "status": "cancelled",
    "reservations_released": 3,
    "members_notified": false
  },
  "isError": false
}
```
