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. 1

    Create a key

    Settings → API keys. It is shown once and only a hash is stored, so copy it then.

  2. 2

    Point your client at /mcp

    Stateless streamable HTTP, so any client that speaks it works — against this host or your own.

  3. 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.