MCP tools reference

PushPress MCP tools

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
PushPress
PushPress 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.

MCP tool pushpress_list_members

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

Parameters: list_members
NameTypeDescription
search string Name or email.
plan_status enum active, alert, pending_active, pending_cancel, cancelled, paused or completed.
limit integer 1 to 100. Default: 50.
cursor string Next page cursor from the previous call.

tools/call

JSON-RPC

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

Example response

{
  "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

read

MCP tool pushpress_get_member

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

Parameters: get_member
NameTypeDescription
member_id required string Member ID from list_members.

tools/call

JSON-RPC

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

Example response

{
  "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
}

MCP tool pushpress_list_classes

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

Parameters: list_classes
NameTypeDescription
from required date First day.
to date Last day. Default: same as from.

tools/call

JSON-RPC

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

Example response

{
  "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
}

MCP tool pushpress_get_class_roster

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

Parameters: get_class_roster
NameTypeDescription
class_id required string Class ID from list_classes.

tools/call

JSON-RPC

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

Example response

{
  "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
}

MCP tool pushpress_list_plan_templates

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-RPC

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

Example response

{
  "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
}

MCP tool pushpress_list_no_shows_late_cancels

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

Parameters: list_no_shows_late_cancels
NameTypeDescription
from required date First day.
to required date Last day.
type enum no_show, late_cancel or all. Default: all.

tools/call

JSON-RPC

{
  "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

{
  "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
}

MCP tool pushpress_book_class_reservation

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

Parameters: book_class_reservation
NameTypeDescription
class_id required string Class ID from list_classes.
member_id required string Member ID from list_members.

tools/call

JSON-RPC

{
  "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

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

MCP tool pushpress_check_in_member

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

Parameters: check_in_member
NameTypeDescription
class_id required string Class ID from list_classes.
member_id required string Member ID from list_members.
override boolean Check in even when the member's plan does not allow the class. Default: false.

tools/call

JSON-RPC

{
  "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

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

Remove reservation

write Confirm

MCP tool pushpress_remove_reservation

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

Parameters: remove_reservation
NameTypeDescription
class_id required string Class ID from list_classes.
member_id required string Member ID from list_members.

tools/call

JSON-RPC

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

Example response

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

Switch member plan

write Confirm

MCP tool pushpress_switch_member_plan

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

Parameters: switch_member_plan
NameTypeDescription
member_id required string Member ID from list_members.
current_plan_id required string Plan ID from get_member.
new_plan_template_id required string Template ID from list_plan_templates.
when required enum now or next_bill_date.
waive_setup_fee boolean Set the setup fee to 0. Default: false.

tools/call

JSON-RPC

{
  "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

{
  "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

write Confirm

MCP tool pushpress_pause_member_plan

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

Parameters: pause_member_plan
NameTypeDescription
member_id required string Member ID from list_members.
plan_id required string Plan ID from get_member (the member's current plan).
pause_from required date First day of the pause.
resume_on date Day the plan resumes. Empty means indefinite.

tools/call

JSON-RPC

{
  "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

{
  "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

write Confirm

MCP tool pushpress_cancel_member_plan

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

Parameters: cancel_member_plan
NameTypeDescription
member_id required string Member ID from list_members.
plan_id required string Plan ID from get_member (the member's current plan).
cancel_on date Cancel date. Default: today.

tools/call

JSON-RPC

{
  "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

{
  "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
}

MCP tool pushpress_message_class_registrants

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

Parameters: message_class_registrants
NameTypeDescription
class_id required string Class ID from list_classes.
channel required enum email, sms or both.
subject string Email subject. Used for email and both.
body required string Message text.

tools/call

JSON-RPC

{
  "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

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

Cancel class

write Confirm

MCP tool pushpress_cancel_class

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

Parameters: cancel_class
NameTypeDescription
class_id required string Class ID from list_classes.
scope required enum this_class, this_and_future_weekday or this_and_future_series.

tools/call

JSON-RPC

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

Example response

{
  "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
}