# Momence MCP tools

> Every Momence 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/momence

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 Momence on the Cotlet MCP server. Your agent picks them from tools/list.

- MCP server: `https://cotlet.dev/mcp/v1`
- Connects with: Your Momence staff account (permissions for classes, freezes, refunds and the Inbox decide what works)
- Integration page: https://cotlet.dev/integrations/momence-api-mcp-server

## Endpoints

| Endpoint | Access | Description |
|---|---|---|
| `momence_list_classes` | read | Scheduled classes in a date range, with teacher, location, bookings and status. |
| `momence_get_class_roster` | read | Customers booked into a class and on its waitlist, with check-in status. |
| `momence_search_customers` | read | Find customers by name, email or phone, optionally by tag. |
| `momence_get_customer` | read | Profile, tags, notes, active subscriptions and packs, and upcoming bookings. |
| `momence_list_customer_payments` | read | Payments from the customer profile (Activity > Payments), newest first. |
| `momence_create_class` | write | One-off class or recurring series from a class template, like Classes > Schedule > New Class. |
| `momence_cancel_class` | write | Cancel one class. It stays on the customer schedule marked as cancelled. |
| `momence_book_customer` | write | Book a customer into a class, or add them to its waitlist. |
| `momence_cancel_booking` | write | Cancel a customer's booking in a class, with credit and notification choices. |
| `momence_check_in_customer` | write | Mark a booking as checked in, or undo the check-in. |
| `momence_freeze_membership` | write | Freeze a customer's subscription now or on a date, with an optional unfreeze date. |
| `momence_cancel_membership_renewal` | write | Cancel Renewal on a subscription now or at a scheduled date, so it expires instead of charging again. |
| `momence_send_message` | write | Message customers from the Momence Inbox by email, SMS or in-app message. |
| `momence_refund_payment` | write | Refund a payment as money or as Momence credits; the original purchase stays on record. |

## List classes

MCP tool: `momence_list_classes`

Access: read.

Returns classes between two dates in start order, with teacher, location, booked count and whether the class is cancelled. Cancelled classes are hidden unless include_cancelled is true. Use class_id from each item in get_class_roster and the write tools.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `from` | date | no | First day. Default: today. |
| `to` | date | no | Last day. Default: 7 days from today. |
| `teacher` | string | no | Only classes taught by this teacher. |
| `include_cancelled` | boolean | no | Also return cancelled classes. Default: false. |

### tools/call

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

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "classes": [
      {
        "class_id": "9182736",
        "name": "Vinyasa Flow 60",
        "starts_at": "2026-10-15T19:00:00-07:00",
        "teacher": "Maya Lee",
        "location": "Studio A",
        "booked": 14,
        "capacity": 18,
        "status": "scheduled"
      }
    ]
  },
  "isError": false
}
```

## Get class roster

MCP tool: `momence_get_class_roster`

Access: read.

Returns booked customers and the waitlist for one class. Each booking has a booking_id for check_in_customer and cancel_booking, and its check-in status. Waitlisted customers have no booking_id.

### Parameters

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

### tools/call

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

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "class_id": "9182736",
    "bookings": [
      {
        "booking_id": "bk_204118",
        "customer_id": "cu_5521",
        "name": "Sam Rivera",
        "checked_in": false
      },
      {
        "booking_id": "bk_204119",
        "customer_id": "cu_5530",
        "name": "Jordan Pike",
        "checked_in": true
      }
    ],
    "waitlist": [
      {
        "customer_id": "cu_5544",
        "name": "Alex Moreau"
      }
    ]
  },
  "isError": false
}
```

## Search customers

MCP tool: `momence_search_customers`

Access: read.

Returns matching customers with ID, name, email and tags. Use customer_id in get_customer, book_customer and list_customer_payments. Tags are the ones you set in Momence.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `query` | string | no | Name, email or phone. |
| `tag` | string | no | Only customers with this tag. |
| `limit` | integer | no | 1 to 100. Default: 25. |

### tools/call

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

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "customers": [
      {
        "customer_id": "cu_5530",
        "name": "Jordan Pike",
        "email": "jordan@example.com",
        "tags": [
          "teacher-training"
        ]
      }
    ]
  },
  "isError": false
}
```

## Get customer

MCP tool: `momence_get_customer`

Access: read.

Returns one customer profile with notes, active subscriptions and packs, and upcoming bookings. Subscription IDs from here go into freeze_membership and cancel_membership_renewal.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `customer_id` | string | yes | Customer ID from search_customers. |

### tools/call

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

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "customer_id": "cu_5530",
    "name": "Jordan Pike",
    "email": "jordan@example.com",
    "tags": [
      "teacher-training"
    ],
    "notes": [
      "Prefers the back row."
    ],
    "memberships": [
      {
        "membership_id": "sub_77120",
        "name": "Unlimited Monthly",
        "status": "active",
        "renews_on": "2026-11-05"
      }
    ],
    "upcoming_bookings": [
      {
        "booking_id": "bk_204119",
        "class_id": "9182736",
        "starts_at": "2026-10-15T19:00:00-07:00"
      }
    ]
  },
  "isError": false
}
```

## List customer payments

MCP tool: `momence_list_customer_payments`

Access: read.

Returns the payments listed under Activity > Payments on the customer profile, newest first. Use payment_id in refund_payment.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `customer_id` | string | yes | Customer ID from search_customers. |
| `since` | date | no | Only payments on or after this date. |

### tools/call

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

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "payments": [
      {
        "payment_id": "pay_330917",
        "date": "2026-10-04",
        "description": "Drop-in: Vinyasa Flow 60",
        "amount": 25,
        "currency": "USD",
        "refunded": false
      }
    ]
  },
  "isError": false
}
```

## Create class

MCP tool: `momence_create_class`

Access: write.

Creates one class, or a series when repeat_every_days is set, from an existing class template. Returns the new class IDs and the first dates. With as_draft the classes stay hidden from customers. It reaches no one until published and is undone with cancel_class, so it runs without asking.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `template` | string | yes | Class template name; holds the class name and description. |
| `teacher` | string | yes | Teacher name. |
| `location` | string | yes | Location name, in person or online. |
| `starts_at` | datetime | yes | First class, ISO 8601 with time zone. |
| `duration_minutes` | integer | yes | Length of each class. |
| `repeat_every_days` | integer | no | Days between classes for a recurring series, e.g. 7. Omit for a one-off class. |
| `end_date` | date | no | Last date of the series. Without it the series keeps scheduling itself. |
| `as_draft` | boolean | no | Save unpublished, hidden from customers. Default: false. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "momence_create_class",
    "arguments": {
      "template": "Vinyasa Flow 60",
      "teacher": "Maya Lee",
      "location": "Studio A",
      "starts_at": "2026-10-15T19:00:00-07:00",
      "duration_minutes": 60,
      "repeat_every_days": 7,
      "end_date": "2026-12-31"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "series_id": "ser_48213",
    "classes_created": 12,
    "first_class_id": "9182736",
    "status": "published",
    "next_classes": [
      "2026-10-15T19:00:00-07:00",
      "2026-10-22T19:00:00-07:00"
    ]
  },
  "isError": false
}
```

## Cancel class

MCP tool: `momence_cancel_class`

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

Cancels one class. It stays on the schedule marked as cancelled, and Momence emails every registered customer its cancellation template, with your optional note in it. Returns how many customers were notified. By default you confirm each call; you can switch that off for this tool.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `class_id` | string | yes | Class (session) ID from list_classes. |
| `note` | string | no | Optional note added to the cancellation email. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "momence_cancel_class",
    "arguments": {
      "class_id": "9182736",
      "note": "Maya is unwell today. Your credit is back on your account, and the 9am Vinyasa has spots."
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "class_id": "9182736",
    "status": "cancelled",
    "customers_notified": 14
  },
  "isError": false
}
```

## Book customer

MCP tool: `momence_book_customer`

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

Adds a customer to a class, or to its waitlist when waitlist is true. Returns the booking_id, or the waitlist position. The customer gets Momence's usual booking notice. By default you confirm each call; you can switch that off for this tool.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `class_id` | string | yes | Class (session) ID from list_classes. |
| `customer_id` | string | yes | Customer ID from search_customers. |
| `waitlist` | boolean | no | Add to the waitlist instead of booking. Default: false. |

### tools/call

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

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "class_id": "9182736",
    "customer_id": "cu_5544",
    "status": "booked",
    "booking_id": "bk_204130"
  },
  "isError": false
}
```

## Cancel booking

MCP tool: `momence_cancel_booking`

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

Cancels one customer's booking, the same as Cancel booking next to the customer in the class. You choose whether to credit the customer, whether to notify them and whether it counts as a late cancellation. Late-cancellation charges follow your Cancellation Policy setting. By default you confirm each call; you can switch that off for this tool.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `booking_id` | string | yes | Booking ID from get_class_roster. |
| `credit_customer` | boolean | no | Return the class credit to the customer. |
| `notify_customer` | boolean | no | Send the customer a cancellation notice. |
| `late_cancel` | boolean | no | Mark it as a late cancellation. |

### tools/call

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

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "booking_id": "bk_204118",
    "status": "cancelled",
    "credited": true,
    "notified": true,
    "late_cancel": false
  },
  "isError": false
}
```

## Check in customer

MCP tool: `momence_check_in_customer`

Access: write.

Marks one booking as checked in, or not checked in when checked_in is false. It reaches no one and is undone in one call, so it runs without asking.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `booking_id` | string | yes | Booking ID from get_class_roster. |
| `checked_in` | boolean | no | false undoes the check-in. Default: true. |

### tools/call

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

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "booking_id": "bk_204118",
    "checked_in": true
  },
  "isError": false
}
```

## Freeze membership

MCP tool: `momence_freeze_membership`

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

Freezes a subscription now or from a date, and unfreezes it on unfreeze_on if set. Momence cancels all the customer's future bookings made with that subscription. The renewal date moves forward by the frozen days unless Preserve Payment Schedule is on. Needs a staff account allowed to freeze. By default you confirm each call; you can switch that off for this tool.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `membership_id` | string | yes | Membership (subscription) ID from get_customer. |
| `freeze_from` | date | no | Start of the freeze. Default: now. |
| `unfreeze_on` | date | no | Scheduled unfreeze date. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "momence_freeze_membership",
    "arguments": {
      "membership_id": "sub_77120",
      "freeze_from": "2026-11-01",
      "unfreeze_on": "2026-11-30"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "membership_id": "sub_77120",
    "status": "freeze_scheduled",
    "freeze_from": "2026-11-01",
    "unfreeze_on": "2026-11-30",
    "future_bookings_cancelled": 2
  },
  "isError": false
}
```

## Cancel membership renewal

MCP tool: `momence_cancel_membership_renewal`

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

Stops a subscription from renewing now or at cancel_at. Some memberships need a minimum number of renewals first, and cancelling a main membership also cancels the renewals of its linked membership. By default you confirm each call; you can switch that off for this tool.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `membership_id` | string | yes | Membership (subscription) ID from get_customer. |
| `cancel_at` | datetime | no | Scheduled cancellation. Default: now. |

### tools/call

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

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "membership_id": "sub_77120",
    "status": "renewal_cancelled",
    "cancels_at": "2026-11-05T00:00:00-08:00"
  },
  "isError": false
}
```

## Send message

MCP tool: `momence_send_message`

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

Sends one message from Home > Inbox to one or more customers by email, SMS or in-app. A message to several customers does not reach those who unsubscribed; a one-to-one message does. Sending to 75 or more email recipients needs the Marketing Suite, and SMS is billed in segments. In-app messages show only if the customer enabled notifications. By default you confirm each call; you can switch that off for this tool.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `customer_ids` | string[] | yes | Customer IDs from search_customers or get_class_roster. |
| `channel` | enum | yes | email, sms or in_app. |
| `body` | string | yes | Message text. |
| `subject` | string | no | Email subject. Email only. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "momence_send_message",
    "arguments": {
      "customer_ids": [
        "customer ids"
      ],
      "channel": "email",
      "body": "body"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "channel": "sms",
    "recipients": 14,
    "delivered_to_provider": 14,
    "skipped_unsubscribed": 0
  },
  "isError": false
}
```

## Refund payment

MCP tool: `momence_refund_payment`

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

Refunds one payment from the customer profile, as money back to the card or as Momence credits. The original purchase stays on record with a separate refund entry. Needs a staff account allowed to refund. By default you confirm each call; you can switch that off for this tool.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `payment_id` | string | yes | Payment ID from list_customer_payments. |
| `refund_to` | enum | yes | money or credits. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "momence_refund_payment",
    "arguments": {
      "payment_id": "payment_8c41d2",
      "refund_to": "money"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "payment_id": "pay_330917",
    "refunded_to": "credits",
    "amount": 25,
    "currency": "USD",
    "status": "refunded"
  },
  "isError": false
}
```
