Every tool runs the equivalent REST API call as you. Each tool’s own description ends with the route it maps to — for example
create_booking reports [POST /booking/] — so you can always trace a tool back to the API reference.Bookings
Despite the singular name,
get_booking lists bookings. Use get_booking_by_id for one specific booking. This mirrors the REST API, where the collection lives at /booking/.Slots
Event types
Availability and schedules
A schedule is a named set of working hours. An availability is a rule inside one.Contacts
Teams
Team event types
Team members
Webhooks
MCP can manage webhook subscriptions. It cannot receive deliveries — those go to your own server. See Build a webhook receiver.Profile
Diagnostics
get_diagnostics_client_ip is a temporary internal diagnostic. Don’t build anything on it — it may be removed without notice.Booking through MCP
This is the single most common failure, and it is not a bug. The correct sequence:1
Find the event type
Use
get_event_types and note the id of the event you want.2
Ask for real slots
Call
get_slots with that event type ID and a date range. It returns only genuinely bookable times.Pass the ID as a string here — "106371", not 106371.3
Book one of them
Pass a time
get_slots returned into create_booking as start. Don’t round it, adjust it, or compute your own.Two shape changes catch people between these steps: create_booking wants the same eventTypeId back as a number, and all of its arguments go inside a body object.content[1] holds the usual success/data envelope, and the times sit under data.slots, grouped by date:
content[1].data.slots["2026-08-31"][0].time. Reading the date keys from the wrong level — straight off content[1], or off a slots key at the top — makes a healthy response look like “no availability.”
The first offered day is often later than you’d assume — minimum booking notice, buffers, and calendar conflicts all push it out. Treat whatever
get_slots returns as the truth.Input gotchas
Worth knowing if you call tools directly rather than prompting conversationally.Write tools nest everything under a body object
Write tools nest everything under a body object
Every tool that sends data — all 25 that create, update, cancel, or reschedule something — takes its fields inside a Tools that act on an existing record keep the identifier outside Read-only tools take their parameters flat —
body object rather than at the top level. (Delete tools send no data, so they have no body.) This is the most common shape error, and the message it produces doesn’t name the field you forgot:create_booking puts everything in body:body and the changes inside it. cancel_booking:get_slots has no body.eventTypeId is a string for slots and a number for booking
eventTypeId is a string for slots and a number for booking
The same ID changes type between the two halves of the booking flow, so the value that just worked fails on the next call.
Passing a number to
get_slots returns Expected string, received number. Passing a string to create_booking returns Expected number, received string. Neither message tells you which direction to convert, so check the table.get_event_types returns id as a number, which is the form create_booking wants and get_slots doesn’t.These tools also want eventTypeId as a number: create_slots_reserve, update_slots, get_availability, get_team_event_type, update_team_eventtype, and delete_team_eventtype. get_slots is the outlier.Date parameters are named inconsistently
Date parameters are named inconsistently
get_slots takes start and end. So does create_booking, inside its body. reschedule_booking takes only start.startTime and endTime are a different concept entirely — they are the clock times on an availability rule, used by create_availability and update_availability. No booking tool uses them. Sending startTime to create_booking fails as a missing start.Responses contain two text blocks, not one
Responses contain two text blocks, not one
Every tool result returns a status line first, then the JSON payload:Parsing
content[0] as JSON gets you the status line and fails. Read content[1].Write tools have no undo
Write tools have no undo
35 of the 58 tools write, and
delete_eventtype, delete_team, and cancel_booking take effect immediately. Keep tool-approval prompts enabled in your client so these need a confirmation, or filter them out at the bridge with --ignore-tool — see How access and permissions work.MCP setup and API details
Connect a client
Setup for Claude, Cursor, ChatGPT, and other MCP clients.
MCP overview
What MCP covers, and how permissions work.
Create a booking
The same slots-then-book flow using the REST API directly.
API reference
Full reference for every endpoint behind these tools.