Apple Calendar MCP
Provides full access to Apple Calendar, enabling reading, searching, creating, updating, and deleting events and calendars, including recurring events, alarms, locations, attendee information, and free/busy availability.
Click on "Install 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., "@Apple Calendar MCPCreate an event: lunch with John next Tuesday at noon"
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.
Apple Calendar MCP
A Claude Desktop extension that gives Claude full access to Apple Calendar on macOS via Apple's first-class EventKit framework. Read, search, create, update, and delete events — including recurring events (edited per-occurrence or for all future occurrences), alarms, structured locations, attendee read-back, and free/busy availability.
Packaged as an MCPB desktop extension with the Calendar.app icon and one-click install.
Companion to the Apple Mail, Apple Reminders, Apple Notes, and Apple Messages connectors.
What it does
Tool | Description |
| Every calendar with id, title, color, source/account, write-access flag, and which is the default |
| Create a new calendar (optional color and source) |
| Rename or recolor an existing calendar |
| Delete a calendar and all its events (destructive) |
| Calendar count, events today, events in the next 7 days, next upcoming event |
| Event occurrences in a date range with filters: calendars, text, all-day, canceled |
| Free-text search across title, notes, and location, within an optional date range |
| Full detail — notes, URL, organizer, attendees + their responses, recurrence, alarms, location, time zone |
|
|
| Merged busy intervals (free/busy) over a range — the gaps are your open slots |
| Create with full property set: recurrence, alarms, structured location, availability, time zone |
| Update any subset of properties; |
| Delete an event or occurrence(s) of a recurring series (span-aware) |
Related MCP server: Apple EventKit MCP Server
How it works
Communication with Calendar happens through EventKit (EKEventStore, EKEvent, EKCalendar, EKRecurrenceRule, EKAlarm, EKStructuredLocation) via PyObjC — the same first-class framework Calendar.app itself uses, reading the same local store (including iCloud-, Google-, and Exchange-synced calendars).
This is the same approach as the companion Apple Reminders connector, and differs from the AppleScript/JXA route: EventKit exposes the full data model (recurrence read-back, per-occurrence editing, attendee responses, structured locations) and is dramatically faster. Unlike Reminders, event fetches are synchronous in EventKit, so no async bridging is needed; the one quirk is that the events predicate spans at most ~4 years per query, so wider ranges are chunked transparently.
Recurring events
Occurrences of a recurring event share one stable event_id; each occurrence returned by list_events also carries an occurrence_date. Write tools accept both:
occurrence_datepicks which occurrence you're targetingspanpicks the scope:this_event(just that occurrence, detaching it) orfuture_events(that occurrence and everything after)
Requirements
macOS 14 Sonoma or later (
requestFullAccessToEventswas added in 14)Python 3.11+
Claude Desktop with extension support
Calendar permission — Full Access — granted to Claude Desktop (see below)
Installation
Option 1: Desktop Extension (recommended)
Download the latest .mcpb from Releases, then double-click to install.
Or build from source:
git clone https://github.com/falconbradley/claude-connector-apple-calendar.git
cd claude-connector-apple-calendar
./build.shThen double-click dist/apple-calendar.mcpb (or drag it into Claude Desktop).
The extension appears in Settings > Extensions with the Calendar icon.
Option 2: Manual MCP config
Edit ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"apple-calendar": {
"command": "uv",
"args": ["run", "--project", "/path/to/claude-connector-apple-calendar", "apple-calendar-mcp"]
}
}
}Permissions
The first time Claude calls a Calendar tool, macOS will prompt you to grant Calendars access. Choose Full Access — the macOS 14+ "Add Only" grant can't read events back, so every read tool (and the read-back after each write) would fail.
If the prompt doesn't appear (which can happen with unsigned interpreters launched as child processes):
Open System Settings → Privacy & Security → Calendars
Add Claude Desktop (or whichever process is running
uv) and enable Full AccessQuit and relaunch Claude Desktop
To verify access status, run:
sqlite3 ~/Library/Application\ Support/com.apple.TCC/TCC.db \
"SELECT client, auth_value FROM access WHERE service='kTCCServiceCalendar'"(auth_value of 2 = full access, 0 = denied.)
Usage examples
Once installed, just ask Claude naturally:
"What's on my calendar today?"
"When am I free for an hour tomorrow afternoon?"
"Schedule lunch with Sam on Friday at noon at Zuni Café."
"Move my 3pm to 4:30 and make it 45 minutes."
"Set up a weekly team sync every Tuesday at 10am for the next 8 weeks."
"Cancel just next Monday's standup, keep the rest of the series."
"Add a 10-minute-before alert to my dentist appointment."
"Who hasn't responded to the offsite invite?"
"Create a 'Travel' calendar and put my flight itinerary on it."
Building from source
# Install mcpb CLI (one time)
npm install -g @anthropic-ai/mcpb
# Install uv (one time, if not already installed)
curl -LsSf https://astral.sh/uv/install.sh | sh
# Build the extension
./build.sh
# Or manually:
mcpb validate manifest.json
mcpb pack . dist/apple-calendar.mcpbProject layout
claude-connector-apple-calendar/
├── manifest.json # MCPB desktop extension manifest
├── icon.png # Calendar.app icon (512x512)
├── icons/ # Multi-size icons
│ ├── icon-128.png
│ ├── icon-256.png
│ └── icon-512.png
├── pyproject.toml # Python package + dependencies
├── build.sh # Validate + pack build script (gates on version drift)
├── tools/ # Dev-only icon extraction (not packed)
├── tests/
│ └── test_e2e.py # End-to-end tests
└── src/
└── apple_calendar_mcp/
├── __init__.py
├── server.py # MCP tools (MCPServer)
├── calendars.py # EventKit-backed CalendarStore
├── permissions.py # TCC grant helpers
└── models.py # Pydantic data modelsTests
# Static tests (model shapes, validation, helpers — no permission needed)
uv run python tests/test_e2e.py --skip-live
# Full suite (requires Calendar permission)
uv run python tests/test_e2e.pyLive tests operate against a dedicated __claude_mcp_test__ calendar which is created at setup and torn down at the end.
Security & privacy
All data stays on your Mac — this is a local MCP server. EventKit reads from the same store Calendar.app uses, including iCloud/Google/Exchange-synced calendars.
Operations gated by macOS TCC: nothing happens until you grant Calendar access.
macOS-only (
"platforms": ["darwin"]in manifest).The connector never reaches outside the Calendar entity — no Reminders, contacts, or files.
Destructive operations (
delete_calendar,delete_event) are explicit tools the model must choose to call; they don't run as side effects of reads.Creating or modifying events never emails invitations — EventKit's public API can't add attendees, so nothing leaves your machine.
Troubleshooting
"Apple Calendar access was not granted" Open System Settings → Privacy & Security → Calendars, ensure Claude Desktop is listed with Full Access (not "Add Only"), then restart Claude Desktop.
Permission prompt doesn't appear Unsigned Python interpreters launched by Claude Desktop sometimes don't trigger the prompt automatically. Add Claude Desktop manually under System Settings → Privacy & Security → Calendars.
Events beyond ~4 years out don't appear EventKit's events predicate spans at most 4 years per query. The connector chunks wider ranges automatically, but extremely wide ranges will be slow — prefer narrower windows.
A recurring-event edit changed the whole series
Pass occurrence_date (from list_events) to target one occurrence, and keep span='this_event'. span='future_events' intentionally rewrites that occurrence and everything after it.
Can Claude invite people to a meeting? No — EventKit's public API exposes attendees read-only. Claude can read who's invited and how they responded, but you add invitees in Calendar.app.
Extension doesn't appear after install Make sure you're running a recent Claude Desktop that supports MCPB extensions. Restart Claude Desktop after installing.
Roadmap
v1 — shipped
List, create, rename, delete calendars
List, search, get events with filters and pagination
Create, update, delete events (span-aware for recurring series)
Recurrence (daily/weekly/monthly/yearly with intervals, by-day, by-month, set positions, end conditions)
Alarms (relative, absolute)
Structured (geocoded) locations
Attendee and organizer read-back with response status
Free/busy availability with interval merging
ical://deep links
v2 — under consideration
RSVP / respond-to-invite (blocked on public EventKit API)
Travel-time and conference-URL read-back where EventKit exposes them
Bulk operations (move/delete multiple events)
Natural "find a slot for N people" helper on top of get_availability
License
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceProvides Claude with full access to Apple Calendar on macOS for event management, smart scheduling, and schedule analytics. It enables natural language event creation, conflict detection, and template-based scheduling through AppleScript integration.231MIT
- FlicenseNot gradedqualityFmaintenanceProvides Claude Desktop with access to Apple Calendar and Reminders on macOS for managing schedules and tasks through natural language. It supports comprehensive operations like creating, editing, and searching events and reminders, along with a custom hashtag-based tagging system.3
- AlicenseNot gradedqualityDmaintenanceEnables Claude and other MCP clients to directly interact with macOS Calendar.app using AppleScript for local calendar management. Provides tools for listing, searching, creating, updating, and deleting calendar events without cloud APIs or CalDAV setup.234MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to access and interact with macOS Calendar.app events and reminders, including viewing, searching, and filtering calendar data.2MIT
Related MCP Connectors
Calendar API for AI agents: events, availability, Google/Microsoft setup, scheduling, and iCal.
Connects ChatGPT to your Apple Calendar via a local Mac agent + Vercel relay
Let ChatGPT, Claude & Cursor use your Mac: email, calendar, iMessage, Teams, files. Local, free.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/falconbradley/claude-connector-apple-calendar'
If you have feedback or need assistance with the MCP directory API, please join our Discord server