# DaySmart MCP tools

> Every DaySmart 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/daysmart

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

- MCP server: `https://cotlet.dev/mcp/v1`
- Connects with: Your own DaySmart Salon or DaySmart Pet cloud account (some reports depend on your user role)
- Integration page: https://cotlet.dev/integrations/daysmart-api-mcp-server

## Endpoints

| Endpoint | Access | Description |
|---|---|---|
| `daysmart_list_appointments` | read | Appointments in the Appointment Book for a date range, with client, pet, services, employee and status. |
| `daysmart_get_appointment` | read | Full ticket: services and products with prices, deposit, appointment notes, confirmation type and the Appointment Log. |
| `daysmart_find_clients` | read | Search clients by name, phone or email. |
| `daysmart_get_client` | read | Client profile with contact details, client notes, balance, upcoming appointments and pets with their notes. |
| `daysmart_list_vaccination_alerts` | read | DaySmart Pet: pets whose vaccinations are expired or expire before a date, with the vaccine and expiration date. |
| `daysmart_list_waitlist` | read | Waitlist entries with client, requested services, preferred employee, preferred dates and comment. |
| `daysmart_list_services` | read | Services with category, duration and price, as set up in your account. |
| `daysmart_list_employees` | read | Active employees with the services they can perform. |
| `daysmart_run_report` | read | Run a built-in report (for example Sales by Day of the Week, Client Spending, Employee Performance Report) and return its rows. |
| `daysmart_book_appointment` | write | Book a client (and pet) for one or more services, or convert a waitlist entry. DaySmart sends the client its Appointment Scheduled message. |
| `daysmart_update_appointment` | write | Change date, time, duration, employee, price or notes. DaySmart sends the client an Appointment Changed message. |
| `daysmart_void_appointment` | write | Void an appointment with a reason, and optionally void its credit card transactions. |
| `daysmart_update_pet_notes` | write | DaySmart Pet: set the General, Grooming, Personality and Medical notes of a pet. |
| `daysmart_add_vaccination` | write | DaySmart Pet: record a vaccine with its expiration date on the pet's Medical Information. |
| `daysmart_send_pickup_text` | write | Text the client that their pet is ready, from the appointment ticket. |

## List appointments

MCP tool: `daysmart_list_appointments`

Access: read.

Returns appointments for a date range, oldest start time first, as shown in the Appointment Book. Filter by employee to get one groomer's day. Each item has the ticket ID that get_appointment, update_appointment and send_pickup_text take.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `from` | date | yes | First day. |
| `to` | date | no | Last day. Default: same as from. |
| `employee_id` | string | no | Only this employee, from list_employees. |

### tools/call

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

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "appointments": [
      {
        "appointment_id": "a_771204",
        "start": "2026-10-16T10:00:00-04:00",
        "end": "2026-10-16T11:30:00-04:00",
        "status": "Scheduled",
        "client": "Yourname Client",
        "client_id": "c_48211",
        "pet": "Max",
        "employee": "Sam",
        "services": [
          "Full Groom"
        ]
      },
      {
        "appointment_id": "a_771231",
        "start": "2026-10-16T13:00:00-04:00",
        "end": "2026-10-16T14:00:00-04:00",
        "status": "Scheduled",
        "client": "Dana Lee",
        "client_id": "c_50177",
        "pet": "Poppy",
        "employee": "Sam",
        "services": [
          "Bath & Brush"
        ]
      }
    ]
  },
  "isError": false
}
```

## Get appointment

MCP tool: `daysmart_get_appointment`

Access: read.

Returns one ticket with services, prices, appointment notes and confirmation type. The Appointment Log lists each change with time, user and status, the same as at the bottom of the ticket in DaySmart.

### Parameters

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

### tools/call

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

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "appointment_id": "a_771204",
    "status": "Scheduled",
    "start": "2026-10-16T10:00:00-04:00",
    "client": "Yourname Client",
    "pet": "Max",
    "employee": "Sam",
    "services": [
      {
        "name": "Full Groom",
        "price": 75
      }
    ],
    "appointment_notes": "Short summer cut, nails too.",
    "confirmation_type": "Text",
    "log": [
      {
        "at": "2026-10-09T15:12:00-04:00",
        "user": "Front desk",
        "status": "Scheduled"
      }
    ]
  },
  "isError": false
}
```

## Find clients

MCP tool: `daysmart_find_clients`

Access: read.

Returns matching clients with their IDs and pets, best match first. Use client_id with get_client and book_appointment.

### Parameters

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

### tools/call

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

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "clients": [
      {
        "client_id": "c_48211",
        "name": "Yourname Client",
        "phone": "+1 555 010 0148",
        "pets": [
          {
            "pet_id": "p_90315",
            "name": "Max"
          }
        ]
      }
    ]
  },
  "isError": false
}
```

## Get client

MCP tool: `daysmart_get_client`

Access: read.

Returns the client profile, client notes (staff only), balance, upcoming appointments and each pet with its Comments in General, Grooming, Personality and Medical. Pets exist in DaySmart Pet only.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `client_id` | string | yes | Client ID from find_clients. |

### tools/call

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

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "client_id": "c_48211",
    "name": "Yourname Client",
    "email": "client@example.com",
    "balance": 0,
    "client_notes": "Prefers Friday mornings.",
    "upcoming": [
      {
        "appointment_id": "a_771204",
        "start": "2026-10-16T10:00:00-04:00"
      }
    ],
    "pets": [
      {
        "pet_id": "p_90315",
        "name": "Max",
        "breed": "Poodle",
        "notes": {
          "general": "",
          "grooming": "Short summer cut.",
          "personality": "Friendly",
          "medical": ""
        }
      }
    ]
  },
  "isError": false
}
```

## List vaccination alerts

MCP tool: `daysmart_list_vaccination_alerts`

Access: read.

Returns pets with a vaccination record that is expired or expires before the date you give, soonest first. DaySmart flags vaccinations 3 months ahead. A pet with no record for a required vaccine is not listed.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `expiring_before` | date | no | Include vaccinations expiring before this date. Default: today. |
| `upcoming_only` | boolean | no | Only pets with an upcoming appointment. Default: false. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "daysmart_list_vaccination_alerts",
    "arguments": {
      "expiring_before": "2026-11-02",
      "upcoming_only": true
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "alerts": [
      {
        "pet_id": "p_90315",
        "pet": "Max",
        "client": "Yourname Client",
        "vaccine": "Rabies",
        "expires": "2026-10-22",
        "next_appointment": "2026-10-16T10:00:00-04:00"
      }
    ]
  },
  "isError": false
}
```

## List waitlist

MCP tool: `daysmart_list_waitlist`

Access: read.

Returns the entries in the Waitlist section of the Appointment Book. Preferred employee is a name or First Available. Pass waitlist_entry_id to book_appointment to convert an entry.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `date` | date | no | Only entries that prefer this date. |

### tools/call

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

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "entries": [
      {
        "waitlist_entry_id": "w_3302",
        "client": "Yourname Client",
        "client_id": "c_48211",
        "pet_id": "p_90315",
        "employee": "First Available",
        "preferred": [
          "2026-10-16 afternoon"
        ],
        "services": [
          "Full Groom"
        ],
        "comment": "Any time after 1pm."
      }
    ]
  },
  "isError": false
}
```

## List services

MCP tool: `daysmart_list_services`

Access: read.

Returns the services set up in your DaySmart account. Use service_id with book_appointment.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `category` | string | no | Only this service category. |

### tools/call

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

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "services": [
      {
        "service_id": "s_112",
        "name": "Full Groom",
        "category": "Grooming",
        "duration_minutes": 90,
        "price": 75
      }
    ]
  },
  "isError": false
}
```

## List employees

MCP tool: `daysmart_list_employees`

Access: read.

Returns active employees. Services follow the employee service limitations set in DaySmart. Use employee_id with list_appointments and book_appointment.

### Parameters

No parameters.

### tools/call

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

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "employees": [
      {
        "employee_id": "e_7",
        "name": "Sam",
        "services": [
          "Full Groom",
          "Bath & Brush"
        ]
      }
    ]
  },
  "isError": false
}
```

## Run report

MCP tool: `daysmart_run_report`

Access: read.

Runs a report from More, then Reports, and returns its rows as JSON. Most reports take a date range; a few have none. If your user role has no access to a report category, the call fails with a permission error or returns no rows.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `report` | string | yes | Report name exactly as in Reports, e.g. "Sales By Employee Category". |
| `from` | date | no | Start of the date range, for reports that have one. |
| `to` | date | no | End of the date range. |
| `employee_id` | string | no | Filter by employee, for reports that allow it. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "daysmart_run_report",
    "arguments": {
      "report": "Sales By Employee Category",
      "from": "2026-10-05",
      "to": "2026-10-11"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "report": "Sales By Employee Category",
    "from": "2026-10-05",
    "to": "2026-10-11",
    "rows": [
      {
        "employee": "Sam",
        "category": "Grooming",
        "total": 1420
      },
      {
        "employee": "Jess",
        "category": "Grooming",
        "total": 980
      }
    ],
    "total": 2400
  },
  "isError": false
}
```

## Book appointment

MCP tool: `daysmart_book_appointment`

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

Creates the appointment in the Appointment Book. With waitlist_entry_id it converts that entry and keeps its details. DaySmart sends the Appointment Scheduled message by email, text or both, per your settings. By default you confirm each call; you can switch that off for this tool.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `client_id` | string | yes | Client ID from find_clients. |
| `start` | datetime | yes | Start time, ISO 8601 with time zone. |
| `services` | object | yes | List of { service_id, employee_id, pet_id? }. |
| `appointment_notes` | string | no | Appointment notes for the ticket. |
| `waitlist_entry_id` | string | no | Convert this waitlist entry into the appointment. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "daysmart_book_appointment",
    "arguments": {
      "client_id": "c_48211",
      "start": "2026-10-16T14:00:00-04:00",
      "services": [
        {
          "service_id": "s_112",
          "employee_id": "e_7",
          "pet_id": "p_90315"
        }
      ],
      "waitlist_entry_id": "w_3302"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "appointment_id": "a_771290",
    "status": "Scheduled",
    "start": "2026-10-16T14:00:00-04:00",
    "end": "2026-10-16T15:30:00-04:00",
    "client": "Yourname Client",
    "services": [
      {
        "name": "Full Groom",
        "employee": "Sam",
        "pet": "Max",
        "price": 75
      }
    ],
    "converted_from_waitlist": "w_3302"
  },
  "isError": false
}
```

## Update appointment

MCP tool: `daysmart_update_appointment`

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

Edits the fields you can change under Appt Details. DaySmart sends Appointment Changed on every update, even a small one like a duration change. If the assigned employee is inactive, DaySmart blocks the edit. By default you confirm each call; you can switch that off for this tool.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `appointment_id` | string | yes | Appointment (ticket) ID from list_appointments. |
| `fields` | object | yes | Any of start, duration_minutes, employee_id, price, appointment_notes, confirmation_type. |

### tools/call

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

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "appointment_id": "a_771204",
    "status": "Scheduled",
    "start": "2026-10-16T11:00:00-04:00",
    "end": "2026-10-16T12:30:00-04:00",
    "employee": "Sam",
    "client_notified": true
  },
  "isError": false
}
```

## Void appointment

MCP tool: `daysmart_void_appointment`

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

Uses the Void action on the ticket, which needs a reason. Voiding does not refund a payment by itself: with void_card_transactions true the card payments are voided and refunded, with false the original charge stays and can be applied to a new ticket as a Custom Payment. By default you confirm each call; you can switch that off for this tool.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `appointment_id` | string | yes | Appointment (ticket) ID from list_appointments. |
| `reason` | string | yes | Why the appointment is voided. |
| `void_card_transactions` | boolean | no | Void and refund the ticket's credit card payments. Default: true. |

### tools/call

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

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "appointment_id": "a_771231",
    "status": "Voided",
    "reason": "Client moved away",
    "card_transactions_voided": true
  },
  "isError": false
}
```

## Update pet notes

MCP tool: `daysmart_update_pet_notes`

Access: write.

Replaces the text of each note category you send and leaves the others as they are. Notes are for staff only; no client or employee is notified, and one call restores the old text, so this tool does not ask for your OK.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `pet_id` | string | yes | Pet ID from get_client. |
| `fields` | object | yes | Any of general_notes, grooming_notes, personality_notes, medical_notes. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "daysmart_update_pet_notes",
    "arguments": {
      "pet_id": "pet_8c41d2",
      "fields": "fields"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "pet_id": "p_90315",
    "name": "Max",
    "notes": {
      "general": "",
      "grooming": "Nervous with dryers. Use low heat.",
      "personality": "Friendly",
      "medical": ""
    }
  },
  "isError": false
}
```

## Add vaccination

MCP tool: `daysmart_add_vaccination`

Access: write.

Adds the vaccine with its Expiration date under Medical Information. The vaccine must be on your Master Vaccination list. No client is notified and one more call fixes a wrong date, so this tool does not ask for your OK.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `pet_id` | string | yes | Pet ID from get_client. |
| `vaccine` | string | yes | Vaccine name as on your Master Vaccination list. |
| `expires` | date | yes | Expiration date. |

### tools/call

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "daysmart_add_vaccination",
    "arguments": {
      "pet_id": "pet_8c41d2",
      "vaccine": "vaccine",
      "expires": "2026-10-01"
    }
  }
}
```

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "pet_id": "p_90315",
    "vaccinations": [
      {
        "vaccine": "Rabies",
        "expires": "2027-09-30"
      }
    ]
  },
  "isError": false
}
```

## Send Ready For Pickup text

MCP tool: `daysmart_send_pickup_text`

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

Sends the one-way Ready For Pickup text from the ticket. DaySmart keeps no saved default message, so you give the text each time. It counts toward your monthly text allotment and needs texting set up with client opt-in. By default you confirm each call; you can switch that off for this tool.

### Parameters

| Name | Type | Required | Description |
|---|---|---|---|
| `appointment_id` | string | yes | Appointment (ticket) ID from list_appointments. |
| `message` | string | yes | Text to send to the client. |

### tools/call

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

### Example response

```json
{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "appointment_id": "a_771204",
    "sent": true,
    "channel": "text",
    "message": "Max is ready for pickup. See you soon!"
  },
  "isError": false
}
```
