Skip to main content
Glama
SavvyCal MCP Server

SavvyCal MCP Server

by OfirOhan

SavvyCal MCP Server

CI MCP License: MIT

A Model Context Protocol server for SavvyCal. It lets Claude, Cursor, ChatGPT and other AI agents find open times, book and cancel meetings, and manage your scheduling links.

Unofficial. This is a community project and is not affiliated with SavvyCal. It was built from SavvyCal's public API docs.

What you can ask your agent

  • "Find three 30-minute slots on my Intro call link next week, in New York time, and draft an email offering them to Sam."

  • "Book Dana (dana@acme.com, London) into the first Tuesday-morning slot on my Demo link."

  • "What meetings do I have this week, and who are they with?"

  • "Cancel tomorrow's 3pm and tell them I'm sick."

  • "Turn off my Office hours link until further notice."

Related MCP server: Chronary

Tools

Tool

What it does

Writes?

get_current_user

Who am I (name, email, time zone)

No

list_scheduling_links

All links with durations and state

No

get_scheduling_link

One link's settings and booking form fields

No

find_available_slots

Bookable slots, grouped by day with local times, filterable by duration

No

list_events

Meetings by state, upcoming/past/date range, link

No

get_event

One meeting with attendees and conferencing info

No

book_meeting

Book a slot for someone (sends real invites)

Yes

cancel_meeting

Cancel a meeting (notifies attendees)

Destructive

toggle_scheduling_link

Enable or disable a link

Yes

list_webhooks / create_webhook / delete_webhook

Manage webhooks

Yes

find_available_slots turns SavvyCal's raw slot list into something an LLM can reason about. It groups slots by day, shows them in any time zone (10:00 AM–10:30 AM), lists the available durations, and searches the next 7 days by default. Booking and cancelling tools carry MCP annotations, so clients can ask before running them.

Setup

  1. Create a personal access token at savvycal.com/developers.

  2. Build it:

git clone https://github.com/OfirOhan/savvycal-mcp.git
cd savvycal-mcp && npm install && npm run build

Claude Desktop

Add this to claude_desktop_config.json:

{
  "mcpServers": {
    "savvycal": {
      "command": "node",
      "args": ["/absolute/path/to/savvycal-mcp/dist/index.js"],
      "env": { "SAVVYCAL_TOKEN": "pt_secret_..." }
    }
  }
}

Claude Code / Cursor / other MCP clients

claude mcp add savvycal -e SAVVYCAL_TOKEN=pt_secret_... -- node /path/to/savvycal-mcp/dist/index.js

For Cursor and other clients, use the same command with SAVVYCAL_TOKEN in the environment.

Variable

Default

Notes

SAVVYCAL_TOKEN

(required)

Personal access token, or an OAuth access token

SAVVYCAL_BASE_URL

https://api.savvycal.com

Override for testing

Development

npm install
npm test   # builds, runs unit tests and an end-to-end MCP stdio test against a fake SavvyCal API

The tests run on Node 20, 22 and 24 in CI.

Author

Built by Ofir Ohana, an AI agents engineer. Issues and PRs are welcome.

License

MIT

Available Tools

12 tools
book_meetingBook a meetingA

Book a meeting on a scheduling link for someone. start_at/end_at must exactly match an available slot from find_available_slots. Sends real calendar invites, so confirm details with the user first.

Inputs: email (required), end_at (required), linkId (required), start_at (required), +5 more.

cancel_meetingCancel a meetingA
Destructive

Cancel a scheduled meeting. Attendees are notified, and this cannot be undone, so confirm with the user first.

Inputs: eventId (required), cancel_reason.

create_webhookCreate webhookA

Register a URL that receives SavvyCal event notifications (bookings, cancellations, etc).

Inputs: url (required).

delete_webhookDelete webhookC
Destructive

Delete a webhook by id.

Inputs: webhookId (required).

find_available_slotsFind available slotsA
Read-only

Find bookable time slots on a scheduling link, grouped by day with readable local times. Defaults to the next 7 days (max 31). Use the exact start_at/end_at of a slot when calling book_meeting.

Inputs: linkId (required), raw, from, until, +2 more.

get_current_userGet current userA
Read-only

Get the authenticated SavvyCal user (name, email, time zone, etc).

Inputs: no named parameters.

get_eventGet meetingA
Read-only

Get one meeting with attendees, conferencing details and form answers.

Inputs: eventId (required).

list_eventsList meetingsC
Read-only

List scheduled meetings. Filter by state, period (upcoming/past/fixed date range), link, and sort direction.

Inputs: from, link, after, limit, +6 more.

list_webhooksList webhooksC
Read-only

List configured webhooks.

Inputs: no named parameters.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    A3.6/5.0

    Scored across 12 tools

    Disambiguation5/5

    Each tool targets a distinct resource+action: user, scheduling links (list/get/toggle), availability slots, events (list/get/book/cancel), and webhooks (list/create/delete). The find_available_slots vs book_meeting pairing and toggle vs get for links are clearly separated by descriptions. No two tools appear interchangeable.

    Naming Consistency4/5

    Nearly all tools follow a clean verb_noun snake_case pattern (list_scheduling_links, get_event, create_webhook, delete_webhook). Minor inconsistency: the same underlying entity is referred to both as 'event' (list_events, get_event) and 'meeting' (book_meeting, cancel_meeting), and 'book' vs 'create' diverge slightly. Still highly readable and predictable.

    Tool Count5/5

    12 tools is well-scoped for a scheduling/booking domain, spanning the three natural clusters (links, events, webhooks) plus user context. Every tool maps to a real workflow with no filler or redundancy.

    Completeness4/5

    Core booking lifecycle is covered (find slots, book, cancel, list/get events) and webhooks have near-full CRUD. Notable gap: scheduling links only support list/get/toggle, with no create/update/delete, and events can't be rescheduled directly (only cancel+rebook). Agents can work around these but the surface isn't fully symmetric.

    Related MCP Connectors

    Related MCP Servers