MCP server
Scheduling an agent can actually use
CalFree speaks Model Context Protocol over stateless HTTP. Seven tools, one API key, and the same rules as your booking page — so handing an agent your calendar is not a gamble.
Two minutes
Connect it
There is nothing to install. Create an API key, paste a block of JSON into your MCP client, and the tools appear.
- 1
Create a key
Settings → API keys. It is shown once and only a hash is stored, so copy it then.
- 2
Point your client at /mcp
Stateless streamable HTTP, so any client that speaks it works — against this host or your own.
- 3
Ask for a meeting
The tool descriptions tell the agent what to call first, so a capable one needs no further prompting.
Client configuration
{
"mcpServers": {
"calfree": {
"type": "http",
"url": "https://calfree.dev/mcp",
"headers": { "Authorization": "Bearer cf_live_..." }
}
}
}The tools
Seven, and no more than seven
Enough to run a calendar, and nothing that could change your account.
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.
An agent cannot change your settings, create API keys, connect a calendar or reach another host’s data.
Why it is safe to try
Three guarantees
- It cannot double book you
- Tools call the same handlers as the booking page, and the final check happens inside the same database transaction. Two bookings for one slot is not a race the agent can win twice.
- It holds a key you can take back
- API keys are shown once and stored hashed. Give each agent its own, and delete it the moment you change your mind. Your booking page is unaffected.
- You can see what it did
- Every booking made over MCP is recorded as created_via: mcp, so your bookings list always distinguishes an agent's work from a person's.
What it's for
Three things people do with it
- An assistant that books for you
- “Find me half an hour with Dana next week.” The agent reads your open times, books one and tells you. No tab, no form, no copy-pasted link.
- Rescheduling without the thread
- A meeting clashes. The agent finds the next time that works, moves it and lets the invitee know — all through tools, not a mailbox.
- A triage step in your own workflow
- A support agent that qualifies a request and then books the call itself, instead of handing over a link and hoping.
Also available
If you are writing the code yourself
Every tool wraps a REST endpoint of the same name, so if the caller is your own program rather than an agent, the REST API is the more direct route. It takes the same keys, enforces the same rate limits and ships an OpenAPI document generated from the schemas it validates with.