# BookingKoala by Cotlet (pypi · bookingkoala-api-mcp)

Bookings, providers and customers in your BookingKoala store.

- Trust score: 64/100 (medium)
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-10-24

## Components

- remote · `cotlet.dev`: 69/100, [markdown](https://verifymcp.io/servers/dev-cotlet-bookingkoala/mcp-v1-bookingkoala.md), [page](https://verifymcp.io/servers/dev-cotlet-bookingkoala/mcp-v1-bookingkoala)
- remote · `cotlet.dev`: 40/100, [markdown](https://verifymcp.io/servers/dev-cotlet-bookingkoala/mcp-v1-bookingkoala-connect.md), [page](https://verifymcp.io/servers/dev-cotlet-bookingkoala/mcp-v1-bookingkoala-connect)
- pypi · `bookingkoala-api-mcp`: 64/100 (this document), [markdown](https://verifymcp.io/servers/dev-cotlet-bookingkoala/bookingkoala-api-mcp.md), [page](https://verifymcp.io/servers/dev-cotlet-bookingkoala/bookingkoala-api-mcp)

## Channel facts

- Registry: `pypi`
- Package: `bookingkoala-api-mcp`
- Version: `1.0.3`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-10-24.

- **Supply Chain Security**: 50/100
  - Malware scan not yet available for this package.
  - No known CVEs affecting this package version or its production dependencies.
  - Runs hatchling.build at install time, a recognised build step with no custom scripting around it.
  - 0 of 35 dependencies flagged as unhealthy.
- **Provenance & Transparency**: 84/100
  - Source repository is publicly reachable at the declared URL.
  - Cryptographically verified build provenance (signed, bound to cotletdev/bookingkoala-api-mcp-server).
  - License check failed: the license (PolyForm-Noncommercial-1.0.0) isn't a recognized OSI-approved license.
  - Actively maintained (last published 0 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 79/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (good).
  - Context-footprint check failed: tool/resource definitions use about 2911 tokens (~153/item across 19 items; 17 tools + 2 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 0/100
  - Stability not yet verified: not enough scan history yet (needs a 30-day window).
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - All 2 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.
  - An AI judge read all 19 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

**Unverified: 1 category.** A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.

## Install

### How do I install the BookingKoala by Cotlet MCP server?

BookingKoala by Cotlet runs locally as a PyPI package, launched with uvx bookingkoala-api-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add dev-cotlet-bookingkoala -- uvx bookingkoala-api-mcp
```

### Cursor

```json
{
  "mcpServers": {
    "dev-cotlet-bookingkoala": {
      "command": "uvx",
      "args": [
        "bookingkoala-api-mcp"
      ]
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "dev-cotlet-bookingkoala": {
      "command": "uvx",
      "args": [
        "bookingkoala-api-mcp"
      ]
    }
  }
}
```

### Codex

```bash
codex mcp add dev-cotlet-bookingkoala -- uvx bookingkoala-api-mcp
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "dev-cotlet-bookingkoala": {
      "type": "local",
      "command": [
        "uvx",
        "bookingkoala-api-mcp"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add dev-cotlet-bookingkoala --command uvx --arg bookingkoala-api-mcp
```

### Hermes

```yaml
mcp_servers:
  dev-cotlet-bookingkoala:
    command: "uvx"
    args: ["bookingkoala-api-mcp"]
```

### Netclaw

```json
{
  "McpServers": {
    "dev-cotlet-bookingkoala": {
      "Transport": "stdio",
      "Command": "uvx",
      "Arguments": [
        "bookingkoala-api-mcp"
      ]
    }
  }
}
```

### Vellum

```bash
assistant mcp add dev-cotlet-bookingkoala -t stdio -c uvx -a bookingkoala-api-mcp
```

### Other

```json
{
  "mcpServers": {
    "dev-cotlet-bookingkoala": {
      "command": "uvx",
      "args": [
        "bookingkoala-api-mcp"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-10-24 (score 64)

First indexed and scored.

## MCP tools (17)

### `assign_provider` (~153 tokens)

Assign provider

Assign a provider or team to a booking, or to its whole recurring schedule.

Puts the provider on the booking, as Assign in the booking's sidebar does, and returns the booking as get_booking shows it. BookingKoala tells the provider about the job. A provider who is not available at that time is refused unless even_if_unavailable is true.

Input parameters:

- `booking_id` (integer, required): Booking id from list_bookings.
- `even_if_unavailable` (boolean): Assign although the provider is not available then. Default: false.
- `provider_id` (integer, required): Provider or team id from list_providers.
- `whole_schedule` (boolean): Assign every later booking of the recurring schedule too. Default: false.

### `cancel_booking` (~148 tokens)

Cancel booking

Cancel one booking or its whole recurring schedule, without a cancellation fee.

Checks the store's cancellation rules first (a store that requires a reason gets the 'Other' reason with your text), then cancels as Cancel in the booking's sidebar does, with no fee. Nobody is told unless notify is true. Cancelled bookings leave list_bookings.

Input parameters:

- `booking_id` (integer, required): Booking id from list_bookings.
- `notify` (boolean): Email the customer and providers about it. Default: false.
- `reason` (string): Why it is cancelled (kept on the booking).
- `whole_schedule` (boolean): Cancel the whole recurring schedule from this booking on. Default: false.

### `create_booking` (~98 tokens)

Create booking

Start a new booking as a copy of an existing one: same customer, service and price.

Copies the booking as Duplicate in its sidebar does. The copy is saved as a draft (list_drafts) with the same customer, address, service, extras and price; open form_url to pick the date and book it. Nobody is told until it is booked.

Input parameters:

- `from_booking_id` (integer, required): Booking to copy, from list_bookings.

### `create_customer` (~268 tokens)

Create customer

New customer in the store. BookingKoala emails them an invitation to set a password.

Adds a customer as Add Customer in the admin does, with an optional address that becomes their default service address. BookingKoala emails the customer at once to set a password for the store's booking page, so use their real address. An email already in the store is refused. Returns the new customer as get_customer does.

Input parameters:

- `address` (string): Street address, e.g. 540 W 28th Street, New York, NY, USA.
- `apt` (string): Apartment or suite.
- `city` (string): City.
- `country` (string): Country, e.g. United States.
- `email` (string, required): Email address. BookingKoala sends the customer an invitation to set a password.
- `first_name` (string, required): First name.
- `gender` (string): Gender, optional.
- `last_name` (string, required): Last name.
- `phone` (string): Phone number, digits only for US numbers, e.g. 2125550147.
- `sms_notifications` (boolean): Text the customer booking updates. Default: false.
- `state` (string): State, e.g. New York.
- `zipcode` (string): ZIP or postal code.

### `dashboard` (~128 tokens)

Dashboard

Store totals for a date range: revenue, provider pay, bookings, ratings, referrals.

Returns the figures of the admin Dashboard for the dates given (this month by default): revenue paid and pending, split into bookings, custom invoices and separate charges; what providers earned and what is still unpaid; booking counts, unassigned and cancelled included; ratings and referrals. Amounts are in the store's currency.

Input parameters:

- `end_date` (string): YYYY-MM-DD, included. Default: last day of this month.
- `start_date` (string): YYYY-MM-DD. Default: first day of this month.

### `get_booking` (~87 tokens)

Get booking

One booking with its price breakdown, provider pay, notes and service.

Reads a booking by id: date and arrival window, customer, address, assigned providers, the service parameters and extras, notes, the price breakdown (service total, discounts, tax, tip, final amount) and what the providers are paid for it.

Input parameters:

- `booking_id` (integer, required): Booking id from list_bookings.

### `get_customer` (~109 tokens)

Get customer

One customer: contact details, addresses, booking counts and bookings not charged yet.

Returns the customer's profile as their page in the admin shows it: name, email, phone, saved addresses (address_id is what a booking or invoice for this customer uses), counts of upcoming and cash bookings, the bookings not charged yet (past ones included), gift cards received and the referral summary. Times of day are in the store's time zone.

Input parameters:

- `customer_id` (integer, required): customer_id from list_customers.

### `get_provider` (~139 tokens)

Get provider

One provider or team: contact, category, team members, reviews and payment logs.

Returns the provider's profile as their page in the admin shows it: contact details, IC or W2 category, priority, scheduling permissions, the team's members and lead (for a team) or the teams it belongs to, customer reviews and the newest payment logs (what the store paid the provider). Payment logs come as BookingKoala records them.

Input parameters:

- `payment_logs_limit` (integer): Newest payment logs to include, 1 to 50. Default: 20.
- `provider_id` (integer, required): provider_id from list_providers (a team too).

### `list_bookings` (~214 tokens)

List bookings

Bookings of the store: upcoming, unassigned, completed, charge pending or declined.

Lists bookings as the Bookings page shows them, newest schedule dates first within the filter, with the customer, address, assigned providers, total and whether it is charged. Filter by status, date range, a search on the customer, or one customer or provider. Cancelled bookings are not listed. Page with next_cursor.

Input parameters:

- `cursor` (string): next_cursor from the previous call.
- `customer_id` (integer): Only this customer's bookings.
- `end_date` (string): Up to this date.
- `limit` (integer): Page size. Default: 20.
- `provider_id` (integer): Only this provider's bookings.
- `search` (string): Customer name, email or phone.
- `start_date` (string): From this date.
- `status` (string): Which bookings: upcoming (default), today, unassigned, completed, pending (charge pending), declined (charge declined), paused or all.

### `list_charges` (~206 tokens)

List charges

Charged bookings with their payments and refunds, as the Charges page lists them.

Returns bookings that were charged, newest first, each with its payments: the booking charge, extras, tips, fees and refunds, with amount, tax, refunded amount and card. Filter by booking day and search by customer. BookingKoala gives no total: next_cursor is set while a full page comes back. booking_id and payment_log_id go to refund_charge. Empty until the store charges through a connected payment processor or marks bookings paid in cash.

Input parameters:

- `cursor` (string): next_cursor from the previous call.
- `end_date` (string): Last booking day, YYYY-MM-DD. Default: no upper bound.
- `limit` (integer): 1 to 100. Default: 20.
- `search` (string): Customer name, email or phone, or a booking id.
- `start_date` (string): First booking day, YYYY-MM-DD. Default: no lower bound.

### `list_customers` (~137 tokens)

List customers

Customers of the store, with email and phone; search by name, email or phone.

Returns the store's customers as the Customers page lists them, newest first, active or deactivated. BookingKoala gives no total: next_cursor is set while a full page comes back. Use customer_id in get_customer.

Input parameters:

- `cursor` (string): next_cursor from the previous call.
- `limit` (integer): 1 to 100. Default: 20.
- `search` (string): Part of a name, email or phone number.
- `status` (string): active or inactive (deactivated) customers. Default: active.

### `list_drafts` (~97 tokens)

List drafts

Draft bookings and quotes saved in the store, not yet booked.

Lists the drafts and quotes on the Drafts page: customer, date when set, total and whether it is a quote. create_booking leaves a draft here. Page with next_cursor.

Input parameters:

- `cursor` (string): next_cursor from the previous call.
- `limit` (integer): Page size. Default: 20.
- `search` (string): Customer name or email.

### `list_invoices` (~248 tokens)

List invoices

Invoices of the store or of one customer, with payment status, total and amount due.

Returns invoices as the Invoices page lists them, newest first: number, customer, booking or custom type, payment status (paid, unpaid, partially_paid, void, uncollectible), total, paid, amount due, issue and due dates. Filter by customer, payment status and issue dates (default: two years back to a year ahead), or search by number, email, name or phone. BookingKoala gives no total: next_cursor is set while a full page comes back. invoice_id goes to resend_invoice.

Input parameters:

- `cursor` (string): next_cursor from the previous call.
- `customer_id` (integer): Only this customer's invoices.
- `end_date` (string): To this issue day, YYYY-MM-DD. Default: a year ahead.
- `limit` (integer): 1 to 100. Default: 20.
- `pay_status` (string): Payment status filter.
- `search` (string): Invoice number, customer email, name or phone.
- `start_date` (string): From this issue day, YYYY-MM-DD. Default: 2 years ago.

### `list_providers` (~184 tokens)

List providers

Providers (cleaners, technicians) and teams of the store, in priority order.

Returns the store's service providers as the Providers page lists them, single providers and teams together; type team returns teams only. A team lists its members' provider ids, a provider the teams it belongs to and leads. BookingKoala gives no total: next_cursor is set while a full page comes back. Use provider_id in get_provider and when assigning a booking.

Input parameters:

- `cursor` (string): next_cursor from the previous call.
- `limit` (integer): 1 to 100. Default: 20.
- `search` (string): Part of a name, email or phone number.
- `status` (string): active or inactive (deactivated) providers. Default: active.
- `type` (string): all: providers and teams (default). team: teams only.

### `reschedule_booking` (~171 tokens)

Reschedule booking

Postpone a visit of a recurring booking to the date of a later visit in its schedule.

Works like Postpone in the booking's sidebar: the visit moves to one of the schedule's later visit dates, keeping its arrival time and price, and the booking comes back as get_booking shows it. A date outside the schedule fails with the list of allowed dates. One-time bookings cannot be postponed. Nobody is told unless notify is true. A store that charges a reschedule fee refuses the move here: charge it in the panel.

Input parameters:

- `booking_id` (integer, required): Booking id from list_bookings.
- `date` (string, required): New date: one of the later visit dates of the booking's recurring schedule.
- `notify` (boolean): Email the customer and providers about the change. Default: false.

### `resend_invoice` (~191 tokens)

Resend an invoice

Send an invoice to its customer again by email, text or both.

Sends an existing invoice from list_invoices to its customer again, as the invoice's Resend button does: by email (default) and, with sms true, a text with the invoice link. The invoice's CC and billing addresses get the email too. attach_pdf defaults to the invoice's own setting. The invoice itself does not change. The customer gets it at once. BookingKoala refuses some resends with a warning, for example a void invoice; the error carries its message.

Input parameters:

- `attach_pdf` (boolean): Attach the PDF to the email. Default: as the invoice.
- `email` (boolean): Email the invoice to the customer. Default: true.
- `invoice_id` (string, required): invoice_id from list_invoices.
- `sms` (boolean): Text the invoice link to the customer. Default: false.

### `send_quote` (~214 tokens)

Send a quote

Email a saved quote to the customer with a link to book it.

Sends a quote from list_drafts as the Send quote popup does: saves the recipient and expiry date on the quote, then emails the store's Send quote template (or your subject and message) with the quote's booking link. email defaults to the quote's customer; expires_on to the saved date, else a month ahead. Only drafts saved as quotes can be sent; a plain draft is refused before you confirm. The customer gets the email at once.

Input parameters:

- `draft_id` (integer, required): Id of a quote from list_drafts.
- `email` (string): Send to this address. Default: the quote's customer.
- `expires_on` (string): Last day the customer can book it, YYYY-MM-DD. Default: as saved, else a month ahead.
- `message` (string): Email body (HTML allowed). Default: the store's Send quote template.
- `subject` (string): Email subject. Default: the store's.

## Diagnostics

Captured diagnostic sections: Provenance, Install scripts, Dependencies. The full working is on the page: https://verifymcp.io/servers/dev-cotlet-bookingkoala/bookingkoala-api-mcp#diagnostics

## Score history

- 2026-10-24: 64

## Common questions

### What is the BookingKoala by Cotlet MCP server?

BookingKoala by Cotlet is an MCP server listed in the public MCP registry as dev.cotlet/bookingkoala. Bookings, providers and customers in your BookingKoala store. This page covers its PyPI package (bookingkoala-api-mcp).

### Is the BookingKoala by Cotlet MCP server safe to use?

BookingKoala by Cotlet scores 64 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 24 October 2026. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the BookingKoala by Cotlet MCP server expose?

BookingKoala by Cotlet exposes 17 tools: assign_provider, cancel_booking, create_booking, create_customer, dashboard, and 12 more. Their descriptions and schemas cost roughly 2,792 tokens of context every time the server is loaded.

### Is the BookingKoala by Cotlet MCP server still maintained?

BookingKoala by Cotlet is still listed as active in the MCP registry. We last reached this channel on 24 October 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

### What licence is the BookingKoala by Cotlet MCP server under?

BookingKoala by Cotlet declares the PolyForm-Noncommercial-1.0.0 licence, which is not on the OSI-approved list. Read the terms before using it at work, and note this covers the source only, not the cost of any service it calls.

## Links

- PyPI project: https://pypi.org/project/bookingkoala-api-mcp/
- Socket report: https://socket.dev/pypi/package/bookingkoala-api-mcp
- Repository: https://github.com/cotletdev/bookingkoala-api-mcp-server
- Website: https://cotlet.dev/integrations/bookingkoala-api-mcp-server
- Changelog RSS feed: https://verifymcp.io/servers/dev-cotlet-bookingkoala/bookingkoala-api-mcp.xml
- Changelog JSON feed: https://verifymcp.io/servers/dev-cotlet-bookingkoala/bookingkoala-api-mcp.json
- HTML version of this page: https://verifymcp.io/servers/dev-cotlet-bookingkoala/bookingkoala-api-mcp
