# Setmore MCP tools

> Every Setmore 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/setmore

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

- MCP server: `https://cotlet.dev/mcp/v1`
- Connects with: Your own Setmore account (Free or Pro) in the web app
- Integration page: https://cotlet.dev/integrations/setmore-api-mcp-server

## Endpoints

| Endpoint | Access | Description |
|---|---|---|
| `setmore_list_appointments` | read | Appointments in a date range with customer, service, team member, time and label. |
| `setmore_get_appointment` | read | One appointment: customer, service, team member, start and end, label and where it was booked. |
| `setmore_list_available_slots` | read | Open times for a service on a day, based on working hours and existing bookings. |
| `setmore_list_services` | read | Services and classes with category, cost, duration and the team members who offer them. |
| `setmore_list_staff` | read | Team members with the services they offer and their working hours. |
| `setmore_find_customer` | read | Search customers by name, email or phone. |
| `setmore_get_customer` | read | Customer profile: contact details, your private notes and past and upcoming appointments. |
| `setmore_get_appointment_report` | read | Appointment history from Reports, filtered by date range, service, class or team member. |
| `setmore_create_appointment` | write | Book a service for a customer. Setmore emails the confirmation unless you turned it off. |
| `setmore_reschedule_appointment` | write | Move an appointment to a new time or team member. The customer is emailed unless you turned it off. |
| `setmore_cancel_appointment` | write | Delete an appointment from your calendar. The customer is emailed unless you turned it off. |
| `setmore_set_appointment_label` | write | Track status with a label such as Confirmed or No-Show. Only you and your team see it. |
| `setmore_add_customer_note` | write | Add a private note to a customer profile. The customer does not see it. |
| `setmore_block_time` | write | Add an Event to the calendar so customers cannot book that time. |
| `setmore_delete_event` | write | Delete an Event from the calendar and free the time. |

## List appointments

MCP tool: `setmore_list_appointments`

Access: read.

Returns appointments between two days, in your account time zone, with the customer, service, team member, start and end and the label if you set one. Filter by team member or service. Use appointment_id from each item in get_appointment, reschedule_appointment and cancel_appointment.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `from` | date | yes | First day, in your account time zone. |
| `to` | date | no | Last day. Default: same as from. |
| `staff_id` | string | no | Only this team member, from list_staff. |
| `service_id` | string | no | Only this service, from list_services. |

### tools/call

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

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "appointments": [
      {
        "appointment_id": "apt_51d7e2b9",
        "service": "Massage, 60 min",
        "staff": "Anna",
        "customer": "Sam Client",
        "start": "2026-10-16T15:00:00-04:00",
        "end": "2026-10-16T16:00:00-04:00",
        "label": "Confirmed"
      },
      {
        "appointment_id": "apt_62e8f3ca",
        "service": "Massage, 60 min",
        "staff": "Anna",
        "customer": "Lee Customer",
        "start": "2026-10-16T17:00:00-04:00",
        "end": "2026-10-16T18:00:00-04:00",
        "label": null
      }
    ]
  },
  "isError": false
}
```

## Get appointment

MCP tool: `setmore_get_appointment`

Access: read.

Returns one appointment with the customer, service, team member, start and end, and its label. Booked via is the source Setmore assigns when the appointment is created, such as the web app, your website or Instagram. It is read only and cannot be edited.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `appointment_id` | string | yes | Appointment ID from list_appointments. |

### tools/call

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

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "appointment_id": "apt_51d7e2b9",
    "service": "Massage, 60 min",
    "staff": "Anna",
    "customer": {
      "customer_id": "cus_7c04a1",
      "name": "Sam Client"
    },
    "start": "2026-10-16T15:00:00-04:00",
    "end": "2026-10-16T16:00:00-04:00",
    "label": "Confirmed",
    "booked_via": "Booked from website"
  },
  "isError": false
}
```

## List available slots

MCP tool: `setmore_list_available_slots`

Access: read.

Returns open start times for one service on one day. A team member's open times follow their working hours, not your business hours, and exclude their appointments and events. Pass a start from this list to create_appointment or reschedule_appointment.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `service_id` | string | yes | Service from list_services. |
| `date` | date | yes | Day to check. |
| `staff_id` | string | no | Only this team member. Default: everyone who offers the service. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "setmore_list_available_slots",
    "arguments": {
      "service_id": "service_8c41d2",
      "date": "2026-10-01"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "service": "Massage, 60 min",
    "date": "2026-10-16",
    "slots": [
      {
        "staff_id": "stf_3a90de",
        "staff": "Anna",
        "start": "2026-10-16T09:00:00-04:00"
      },
      {
        "staff_id": "stf_3a90de",
        "staff": "Anna",
        "start": "2026-10-16T13:00:00-04:00"
      },
      {
        "staff_id": "stf_5b12c7",
        "staff": "Ben",
        "start": "2026-10-16T10:00:00-04:00"
      }
    ]
  },
  "isError": false
}
```

## List services

MCP tool: `setmore_list_services`

Access: read.

Lists the services and classes set up in your account, grouped by the categories you use on your Booking Page. Use service_id from each item in list_available_slots, create_appointment and get_appointment_report.

### Parameters

No parameters.

### tools/call

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

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "services": [
      {
        "service_id": "svc_8f21c4",
        "name": "Massage, 60 min",
        "category": "Massage",
        "duration_minutes": 60,
        "cost": 80,
        "staff": [
          "Anna",
          "Ben"
        ]
      },
      {
        "service_id": "svc_a19d03",
        "name": "Consultation, 30 min",
        "category": "Consultations",
        "duration_minutes": 30,
        "cost": 0,
        "staff": [
          "Anna"
        ]
      }
    ]
  },
  "isError": false
}
```

## List staff

MCP tool: `setmore_list_staff`

Access: read.

Lists the team members in your account with the services each one offers and their working days and hours. Working hours decide a team member's open times. Use staff_id from each item in the other tools.

### Parameters

No parameters.

### tools/call

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

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "staff": [
      {
        "staff_id": "stf_3a90de",
        "name": "Anna",
        "services": [
          "Massage, 60 min",
          "Consultation, 30 min"
        ],
        "working_hours": "Mon-Fri 09:00-17:00"
      },
      {
        "staff_id": "stf_5b12c7",
        "name": "Ben",
        "services": [
          "Massage, 60 min"
        ],
        "working_hours": "Tue-Sat 10:00-18:00"
      }
    ]
  },
  "isError": false
}
```

## Find customer

MCP tool: `setmore_find_customer`

Access: read.

Searches your customer list and returns matches with contact details. Use customer_id from each item in get_customer, add_customer_note and create_appointment.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `query` | string | yes | Name, email or phone number. |
| `limit` | integer | no | 1 to 50. Default: 10. |

### tools/call

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

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "customers": [
      {
        "customer_id": "cus_7c04a1",
        "name": "Sam Client",
        "email": "client@example.com",
        "phone": "+1 555 0100"
      }
    ]
  },
  "isError": false
}
```

## Get customer

MCP tool: `setmore_get_customer`

Access: read.

Returns one customer with their contact details, your private notes and their past, present and future appointments, as in the Customers tab. Notes are for your reference and the customer does not see them.

### Parameters

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

### tools/call

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

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "customer_id": "cus_7c04a1",
    "name": "Sam Client",
    "email": "client@example.com",
    "phone": "+1 555 0100",
    "notes": "Prefers afternoon slots.",
    "appointments": [
      {
        "appointment_id": "apt_51d7e2b9",
        "service": "Massage, 60 min",
        "start": "2026-10-16T15:00:00-04:00"
      }
    ]
  },
  "isError": false
}
```

## Get appointment report

MCP tool: `setmore_get_appointment_report`

Access: read.

Returns the appointment history that Settings > Booking Page > Reports shows in the web app, with counts per team member for the filter you set. Setmore recommends ranges of no more than 3 months for best results. It reads only; nothing is exported to a file.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `from` | date | yes | Start date. Up to 3 months per call for best results. |
| `to` | date | yes | End date. |
| `service_id` | string | no | Only this service or class. |
| `staff_id` | string | no | Only this team member. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "setmore_get_appointment_report",
    "arguments": {
      "from": "2026-09-01",
      "to": "2026-09-30",
      "service_id": "svc_8f21c4"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "from": "2026-09-01",
    "to": "2026-09-30",
    "service": "Massage, 60 min",
    "total_appointments": 42,
    "by_staff": [
      {
        "staff": "Anna",
        "appointments": 25
      },
      {
        "staff": "Ben",
        "appointments": 17
      }
    ]
  },
  "isError": false
}
```

## Create appointment

MCP tool: `setmore_create_appointment`

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

Books one service with a team member at a start time, for an existing customer or a new one. Setmore sends a booking confirmation email to the provider and the customer unless you turned it off in Settings > Notifications. By default you confirm each call; you can switch that off for this tool.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `service_id` | string | yes | Service from list_services. |
| `start` | datetime | yes | ISO 8601 with time zone. |
| `customer_id` | string | no | Existing customer from find_customer. Or pass customer. |
| `customer` | object | no | New customer: name, email, phone. Add an email so the customer gets confirmations. |
| `staff_id` | string | no | Team member from list_staff. Default: first one free. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "setmore_create_appointment",
    "arguments": {
      "service_id": "svc_8f21c4",
      "start": "2026-10-16T15:00:00-04:00",
      "customer": {
        "name": "Sam Client",
        "email": "client@example.com"
      },
      "staff_id": "stf_3a90de"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "appointment_id": "apt_51d7e2b9",
    "status": "booked",
    "service": "Massage, 60 min",
    "staff": "Anna",
    "start": "2026-10-16T15:00:00-04:00",
    "end": "2026-10-16T16:00:00-04:00",
    "customer_id": "cus_7c04a1",
    "confirmation_email": "sent"
  },
  "isError": false
}
```

## Reschedule appointment

MCP tool: `setmore_reschedule_appointment`

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

Changes the start time, the team member, or both for one appointment. Setmore emails the provider and the customer about the change unless rescheduled-appointment emails are off in Settings > Notifications. By default you confirm each call; you can switch that off for this tool.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `appointment_id` | string | yes | Appointment ID from list_appointments. |
| `start` | datetime | yes | New start, ISO 8601 with time zone. |
| `staff_id` | string | no | Assign a different team member. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "setmore_reschedule_appointment",
    "arguments": {
      "appointment_id": "apt_51d7e2b9",
      "start": "2026-10-19T10:00:00-04:00",
      "staff_id": "stf_5b12c7"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "appointment_id": "apt_51d7e2b9",
    "status": "rescheduled",
    "staff": "Anna",
    "start": "2026-10-20T15:00:00-04:00",
    "end": "2026-10-20T16:00:00-04:00",
    "customer_email": "sent"
  },
  "isError": false
}
```

## Cancel appointment

MCP tool: `setmore_cancel_appointment`

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

Deletes one appointment from the calendar, as Delete does in the app. Setmore notifies the provider and the customer by email unless canceled-appointment emails are off in Settings > Notifications. It cannot be undone with one call; book again with create_appointment. By default you confirm each call; you can switch that off for this tool.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `appointment_id` | string | yes | Appointment ID from list_appointments. |

### tools/call

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

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "appointment_id": "apt_62e8f3ca",
    "status": "canceled",
    "customer_email": "sent"
  },
  "isError": false
}
```

## Set appointment label

MCP tool: `setmore_set_appointment_label`

Access: write.

Sets the label on one appointment, like the Label dropdown in the web app. Customers never see labels, and nothing is sent to anyone. It runs without asking first because one call sets the label back.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `appointment_id` | string | yes | Appointment ID from list_appointments. |
| `label` | string | yes | Pending, Confirmed, Done, No-Show, Paid, Running Late or one of your custom labels. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "setmore_set_appointment_label",
    "arguments": {
      "appointment_id": "apt_51d7e2b9",
      "label": "No-Show"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "appointment_id": "apt_51d7e2b9",
    "label": "No-Show",
    "previous_label": "Confirmed"
  },
  "isError": false
}
```

## Add customer note

MCP tool: `setmore_add_customer_note`

Access: write.

Writes to the Notes tab of the customer profile, which is for your reference only. Nothing is sent to anyone, so it runs without asking first. A note the customer can see is an appointment comment, which this tool does not write.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `customer_id` | string | yes | Customer ID from find_customer. |
| `note` | string | yes | Note text. |

### tools/call

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

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "customer_id": "cus_7c04a1",
    "status": "saved",
    "note": "No-show on 16 Oct 2026."
  },
  "isError": false
}
```

## Block time

MCP tool: `setmore_block_time`

Access: write.

Creates a Setmore Event with no guests. Customers cannot book that time on your Booking Page. Events suit blocks within a day; longer absences are Time Off under Settings > Your team, which this tool does not change. It adds no guests, so nobody is emailed and it runs without asking first; delete_event removes it.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `start` | datetime | yes | ISO 8601 with time zone. |
| `duration_minutes` | integer | yes | Length of the block, within one day. |
| `staff_id` | string | no | Whose calendar, from list_staff. Default: yours. |
| `notes` | string | no | Shown on the event, for example "Lunch". |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "setmore_block_time",
    "arguments": {
      "start": "2026-10-01T09:00:00Z",
      "duration_minutes": 1
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "event_id": "evt_3d51a8",
    "status": "created",
    "staff": "Anna",
    "start": "2026-10-19T12:00:00-04:00",
    "end": "2026-10-19T13:00:00-04:00",
    "notes": "Lunch"
  },
  "isError": false
}
```

## Delete event

MCP tool: `setmore_delete_event`

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

Deletes one Event, as Delete does in the app. If the event has guests, Setmore notifies them of the change. By default you confirm each call; you can switch that off for this tool.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `event_id` | string | yes | Event ID from block_time. |

### tools/call

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

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "event_id": "evt_3d51a8",
    "status": "deleted"
  },
  "isError": false
}
```
