SavvyCal MCP Server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@SavvyCal MCP Server Find three 30-minute slots on my Intro call link next week"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
SavvyCal MCP Server
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? |
| Who am I (name, email, time zone) | No |
| All links with durations and state | No |
| One link's settings and booking form fields | No |
| Bookable slots, grouped by day with local times, filterable by duration | No |
| Meetings by state, upcoming/past/date range, link | No |
| One meeting with attendees and conferencing info | No |
| Book a slot for someone (sends real invites) | Yes |
| Cancel a meeting (notifies attendees) | Destructive |
| Enable or disable a link | Yes |
| 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
Create a personal access token at savvycal.com/developers.
Build it:
git clone https://github.com/OfirOhan/savvycal-mcp.git
cd savvycal-mcp && npm install && npm run buildClaude 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.jsFor Cursor and other clients, use the same command with SAVVYCAL_TOKEN in the environment.
Variable | Default | Notes |
| (required) | Personal access token, or an OAuth access token |
|
| Override for testing |
Development
npm install
npm test # builds, runs unit tests and an end-to-end MCP stdio test against a fake SavvyCal APIThe 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 toolsbook_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 meetingADestructive
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 webhookCDestructive
Delete a webhook by id.
Inputs: webhookId (required).
find_available_slotsFind available slotsARead-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 userARead-only
Get the authenticated SavvyCal user (name, email, time zone, etc).
Inputs: no named parameters.
get_eventGet meetingARead-only
Get one meeting with attendees, conferencing details and form answers.
Inputs: eventId (required).
get_scheduling_linkGet scheduling linkBRead-only
Get one scheduling link with its settings and booking form fields.
Inputs: linkId (required).
list_eventsList meetingsCRead-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_scheduling_linksList scheduling linksBRead-only
List the user's scheduling links (id, name, slug, url, durations, state).
Inputs: after, limit, state, before.
list_webhooksList webhooksCRead-only
List configured webhooks.
Inputs: no named parameters.
toggle_scheduling_linkEnable/disable linkB
Toggle a scheduling link between active and disabled.
Inputs: linkId (required).
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 12 tools
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.
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.
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.
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
Calendar API for AI agents: events, availability, Google/Microsoft setup, scheduling, and iCal.
AI-native scheduling: check availability, book meetings, cancel and reschedule via MCP
Scheduling infrastructure for AI agents across Google and Microsoft calendars.
Create and query group meeting availability polls, time-zone slots, and scheduling links.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceExposes Cal.com scheduling tools to AI agents via MCP, enabling listing event types, checking availability, and managing bookings (create, cancel, reschedule).89 npmMIT
- AlicenseAqualityCmaintenanceCalendar API purpose-built for AI agents. Exposes tools to manage agents, calendars, and events, find meeting times, run scheduling proposals, set availability rules, manage webhooks, and subscribe to iCal feeds.5490 npmApache 2.0
- FlicenseNot gradedqualityDmaintenanceExposes personal Calendly account as MCP tools, allowing users to manage events, view availability, and handle bookings through natural language.-
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to list scheduled Calendly events, check availability for event types, and create single-use scheduling links.131 npmMIT