MCP server
A Model Context Protocol server so an AI agent can read your availability and manage bookings, using the same handlers and the same rules as the booking page.
Connecting
The server is stateless streamable HTTP at /mcp, authenticated with the same API keys as the REST API. Create one in Settings → API keys, then point your client at it:
{
"mcpServers": {
"calfree": {
"type": "http",
"url": "https://calfree.dev/mcp",
"headers": { "Authorization": "Bearer cf_live_..." }
}
}
}Being stateless and HTTP means there is no local process to install and no session to keep alive — a request carries its own authentication, and any client that speaks streamable HTTP can use it.
Tools
Seven tools. Each one calls the handler of its REST twin, so results are identical to the equivalent API call, and a booking an agent makes sends the same emails and writes the same calendar event as one made on the page.
list_event_typesread onlyEvery event type with its id, title and duration. The first call in any flow.
list_slotsread onlyOpen start times between two dates, as ISO 8601 with offset. Group events also report spots left.
create_bookingwritesTakes a slot and the invitee's details. Sends the emails and writes the calendar event.
list_bookingsread onlyBookings soonest first, filterable by status and start time. Use it to find a booking id.
cancel_bookingwritesFrees the slot and tells the invitee why.
reschedule_bookingwritesMoves a booking to a new start time and notifies the invitee.
get_availabilityread onlyThe weekly hours and date overrides behind the slots.
The order to call them in
Tool descriptions say what to call first, so a capable agent usually works it out unaided. The path through is:
list_event_typesfor anevent_type_id.list_slotsfor that id and a date range, which returns ISO 8601 start times with offsets.create_bookingwith a start time passed back unchanged, plus the invitee’s name and email.
To change an existing meeting, list_bookings gives you a booking_id for reschedule_booking or cancel_booking. Use list_slots rather than get_availability to find times that are actually free: availability describes your weekly hours, while slots account for existing bookings, buffers, notice, caps and calendar busy time.
Errors
Errors come back as plain-language messages that say which tool to call next, because that is what an agent can act on. A slot taken between listing and booking, for instance, tells the agent to call list_slots again rather than returning slot_unavailable and leaving it to guess.
Limits and auditing
- Rate limit: 300 requests a minute per key, shared with REST calls using that key.
- Scope: a key acts as you and reaches only your own data. There is no narrower scope than that yet, so give each agent its own key.
- Audit: bookings made through MCP are recorded with
created_via: mcp, so you can always tell which of your meetings an agent arranged. - Revocation: deleting a key in Settings → API keys cuts the agent off immediately, without touching your booking page.
What it cannot do
The tools cover event types, slots, bookings and availability. An agent cannot change your settings, create API keys, connect a calendar or read another host’s data. Writing availability is a REST call, not a tool.