# Notion Calendar MCP

> Notion Calendar MCP Server manages your entire schedule through natural language conversation. Your AI agent uses this server to create, read, update, and delete calendar events. You can check team availability across multiple people, audit complex free/busy times, and retrieve active booking links—all without opening a single calendar app.

## Overview
- **Category:** loved-by-devs
- **Price:** Free
- **Tags:** time-management, scheduling, calendar-sync, event-management, team-availability

## Description

This server hooks your Notion Calendar account up to any AI agent, letting you manage your whole schedule just by talking to your client. You don't need to open a single calendar app; your agent handles everything.

**Creating and Modifying Events**
When you need to set up time, your agent uses **`create_event`** to generate brand-new calendar events, giving you an instantly confirmed schedule bind for the meeting. If you gotta change something later—maybe a title, a time slot, or who's attending—you use **`update_event`**. This tool changes all those details for an existing event while keeping a record of its history.

**Checking Availability Across Teams**
Dealing with multiple people is where this thing shines. You don’t guess if people are free; you run an automated check using **`get_free_busy`**, which cross-references the schedules of everyone involved to show exactly when they're genuinely available for a meeting. For checking availability on just one or more users, you can also use **`get_availability`** to pinpoint if a specific time slot actually works for your group.

**Reading and Listing All Entries**
If you need details, you’ve got options. To pull up all the info—the properties and specifics—for one single event using its ID, you use **`get_event`**. If you want a full rundown of scheduled meetings, supporting filters by date or specific criteria, run **`list_events`** to see multiple entries at once. You can also check which calendars are connected to your account by calling **`list_calendars`**, which gives you all the unique IDs for every calendar associated with your profile.

**Booking and Profile Details**
Need people to book time with you? The system finds the precise, active URL—your scheduling form link—via **`get_scheduling_links`**. If you wanna know what's going on under the hood of your account setup, inspect deep internal settings and preferences using **`get_profile`**. You can also permanently remove any meeting or data entry by executing **`delete_event`**.

Your agent handles complex scheduling math and conflict checks automatically. It lets you manage full team coordination without ever having to open a calendar interface.

## Tools

### list_events
Lists multiple scheduled events within the Notion calendar, supporting filtering by date or criteria.

### get_event
Retrieves all properties and details associated with a single, active calendar event ID.

### create_event
Creates a new calendar event with specified details, generating a confirmed schedule bind.

### update_event
Changes details (title, time, attendees) for an existing event while preserving its history.

### delete_event
Permanently removes an explicit calendar event and its associated data.

### list_calendars
Retrieves a list of all connected calendars and their unique IDs.

### get_availability
Runs an automated check to determine if a specific time slot is available for one or more users.

### get_scheduling_links
Finds the specific, active URL for booking time on your calendar profile.

### get_free_busy
Checks overlapping schedules across multiple users to see when everyone is genuinely available.

### get_profile
Inspects deep internal settings and preferences related to your overall calendar profile.

## Prompt Examples

**Prompt:** 
```
List my calendar events for today
```

**Response:** 
```
I found 3 events for today: 'Morning Sync' at 9:00 AM, 'Product Review' at 2:00 PM, and 'Team Coffee' at 4:30 PM. Would you like to see the details for any of these?
```

**Prompt:** 
```
Check if john@acme.com and sarah@acme.com are free tomorrow
```

**Response:** 
```
Analyzing schedules for tomorrow... Both John and Sarah are free between 10:00 AM - 11:30 AM and 2:00 PM - 3:00 PM. Would you like me to schedule a meeting in one of these slots?
```

**Prompt:** 
```
Give me my booking link for '15 Minute Coffee Chat'
```

**Response:** 
```
Here is your scheduling link for '15 Minute Coffee Chat': https://cron.com/johndoe/15-min-coffee. This link is active and ready to be shared with your clients.
```

## Capabilities

### Check Team Availability
You check if multiple people are free for a specific time range using `get_free_busy`.

### Create and Modify Events
Your agent can schedule new meetings or update the details of existing ones with tools like `create_event` and `update_event`.

### List All Calendar Entries
You pull a list of all scheduled events, filtering by date range or criteria using `list_events`.

### Identify Booking Links
The system retrieves the precise scheduling form link for your profile via `get_scheduling_links`.

## Use Cases

### Setting up a Team Workshop
The PM needs to schedule 8 people for a half-day workshop. They ask their agent: 'When are all eight free next week?' The agent runs `get_free_busy`, analyzes the overlaps, and suggests three specific time slots, solving the coordination problem instantly.

### Onboarding a New Client
The sales rep needs to book a discovery call. They ask their agent for the link: 'Give me my booking link for new clients.' The agent calls `get_scheduling_links` and returns the precise, shareable URL.

### Rescheduling an Executive Meeting
The EA knows a meeting needs to move. They tell their agent: 'Update the Project Alpha sync to Thursday at 10 AM.' The agent runs `update_event`, changing the time and notifying all attendees.

### Auditing Calendar Data
The manager suspects some old meetings were never formally logged. They ask: 'List all events in Q1 that are marked as completed.' The agent uses `list_events` to pull the necessary records for review.

## Benefits

- Stop guessing on scheduling. Use `get_free_busy` to check multiple people's calendars at once, eliminating the painful 'Are you free Tuesday?' email chain.
- Never miss a meeting detail again. If you only have an ID, `get_event` pulls all properties instantly, giving you the full context in one call.
- Booking links are simple. The `get_scheduling_links` tool gives you your current, active URL for clients—no more needing to manually copy and paste complex URLs.
- Manage conflicts with precision. When planning a large project meeting, running `get_free_busy` prevents scheduling overlaps before they even happen.
- Quickly clean up mess-ups. Need to cancel or change an old invite? Use `delete_event` or `update_event` to manage the record directly.
- You keep track of everything via the agent. The ability to run `list_events` means you always have a single, verifiable list of what's coming up.

## How It Works

The bottom line is you control your entire calendar stack through simple conversation, no logins or manual clicks required.

1. 1. Subscribe to the server and enter your Notion Calendar API Key.
2. 2. Your AI client sends a natural language request (e.g., 'Are John and Sarah free tomorrow morning?').
3. 3. The agent maps that intent to the necessary tool calls (`get_free_busy`) and returns clear, actionable schedule data.

## Frequently Asked Questions

**How do I check if multiple people are available tomorrow with get_free_busy?**
You simply ask your AI agent. You give it a list of emails (e.g., 'John and Jane') and the date range, and the `get_free_busy` tool returns all mutual gaps in time.

**Can I use get_scheduling_links to find my booking URL?**
Yes. The `get_scheduling_links` tool finds your current, active scheduling form link for you. It's perfect when you need to share a meeting signup page with clients.

**What is the difference between list_events and get_event?**
`list_events` gives you a collection of multiple events based on criteria (like 'all meetings last month'). `get_event` requires a specific ID to pull all details for that single meeting.

**Does create_event handle time zones automatically?**
Yes. The server provisions the event payload with time zone data, ensuring the hard schedule bind is accurate regardless of where you or your attendees are located.

**If I use `update_event`, what should I do if the active state doesn't match the payload?**
The system returns an error code indicating a mismatch. You need to check the response payload for specific validation failures, which will tell you exactly why the update failed.

**Are there rate limits when running `list_events`? What does the bounding mean?**
Yes, calling `list_events` hits bounded records. The API handles this by returning a paginated list of results, so you'll need to iterate through the pages until all CRM data is retrieved.

**How does `get_profile` help me check my connection setup and preferences?**
`get_profile` inspects deep internal arrays holding your configuration. It gives you access to localized settings and details about which calendar providers are connected, letting you validate the credentials.

**Is there any way to recover data after calling `delete_event`?**
No, deleting an event is irreversible. The tool vaporizes explicit validations, so if you run `delete_event`, make sure you've got the right schedule drop details first.

**Can my agent create events on my synced Google or Outlook calendars?**
Yes. When you use the 'create_event' tool, the agent commands the Notion Calendar backend to generate the meeting overlay, which is then synchronized directly to your connected upstream provider logic.

**How do I check if my team members are free for a meeting on a specific date?**
Use the 'get_free_busy' tool. Provide a JSON array of email addresses and the target date. Your agent will analyze the cross-references and identify available hourly slots, predicting any potential collision limits.

**Can I retrieve my scheduling links via chat to share with clients?**
Absolutely. The 'get_scheduling_links' tool extracts the precise active booking forms tied directly to your Notion Calendar profile, allowing your agent to provide you with ready-to-share links instantly.