Apple Calendar MCP

Let Claude read, search and plan Apple Calendar on macOS through EventKit, for every account Calendar has (iCloud, Google, Exchange, CalDAV): agenda, search, free time, conflicts, statistics, invitation answers and event changes with undo. A signed menu bar app holds the Calendars permission and asks before deleting or changing shared events.

Documentation

Apple Calendar MCP icon

Apple Calendar MCP

Let Claude read, search and plan your Apple Calendar: fast, local, and nothing deleted or sent to other people without your OK.

Latest release CI macOS 14+, Apple silicon and Intel Swift 6 MIT License

Apple Calendar MCP is an MCP server for the Calendar app on your Mac, plus a small menu bar app. Claude (Claude Code, the Claude app, or any MCP client) can see your day, search years of events, find free time across all your calendars, plan focus blocks, prepare meetings, and add or move events, and it can only delete an event, or change one other people are invited to, after you click OK.

The companion of Apple Mail MCP, built the same way.

Calendar tab: a shared event change waiting for approval, two more requests below, today's events with what is on now and next, recent activity Claude tab: Claude Code and the Claude app, the nine skills by slash command Settings tab: delete and shared-event policies, working hours, what Claude may do with each calendar and reminder list

Any calendar account, ready for AI

Apple Calendar MCP works with every calendar you can add to Calendar: iCloud, Google, Microsoft 365 and Exchange, Yahoo, Fastmail, any CalDAV server, subscribed calendars (holidays, sports, team schedules), birthdays, and calendars on your Mac only.

Your provider needs no API, no developer account and no MCP support of its own. Add the account in Calendar › Settings › Accounts as you normally would; as soon as Calendar syncs it, every tool works with it, side by side with the others. Your passwords stay with macOS: this app never sees them and never connects to your provider.

Why another Calendar server?

Most Calendar servers drive Calendar with AppleScript. Calendar then walks its events one by one, so a search over a busy year takes seconds or times out, repeating events come back wrong, and Calendar is busy meanwhile.

Apple Calendar MCP uses EventKit, the framework Calendar itself is built on. Reads are database queries that return in milliseconds, repeating events expand exactly as Calendar shows them, and Calendar never has to run.

  • Fast: a day, a week or a year of events in milliseconds, from every account at once.
  • Free time that knows your week: working hours, buffers between meetings, all-day and declined events handled the way Calendar shows them.
  • Safe by default: deleting asks first, changes to events other people are invited to ask first, every change can be undone, and each calendar is yours to set: Claude may change it, only read it, or never see it.
  • Many changes, one OK: a week of focus blocks or a rescheduled afternoon is one call, one approval and one undo.
  • Reminders too: with Reminders access, Claude lists, adds and ticks off reminders, and the agenda shows what is due.
  • One permission (two with Reminders): given once to the menu bar app. No Full Disk Access, no Automation.
  • No passwords, no cloud: everything stays on your Mac.

Install

Homebrew:

brew install --cask mp-consulting/tap/apple-calendar-mcp

Or download the app or the Claude extension from the latest release:

FileFor
AppleCalendarMCP-x.y.z.dmgThe menu bar app with the server inside: Calendar access, approvals, activity, skills, one-click setup. Required.
AppleCalendarMCP-x.y.z.mcpbThe Claude app only: double-click to install the server as a Claude extension. It still needs the app above for Calendar access.

Both are notarized, signed with Developer ID, and run on Apple silicon and Intel Macs (macOS 14+). The server is also listed in the MCP registry as io.github.mp-consulting/apple-calendar-mcp.

Then:

  1. Open Apple Calendar MCP: a calendar appears in the menu bar.
  2. Click Allow Calendar Access and choose Allow Full Access in the macOS prompt.
  3. Open the Claude tab and click Connect next to Claude Code and/or the Claude app.

Permissions

macOS gives calendar access to the app that starts a process. Claude, a terminal or an editor starts the server, and none of them can be given Calendar access on its behalf. So the menu bar app holds the Calendars permission, and servers reach your calendars through it, over a socket in your owner-only support folder. Each side checks the other's code signature: the app answers only this project's server, and the server talks only to this project's app. If the app is not running, the server opens it in the background.

PermissionWhyWhere
Calendars › Full Access for Apple Calendar MCPRead and change eventsAsked once by the app; System Settings › Privacy & Security › Calendars
Reminders › Full Access (optional)Read, add and complete remindersAsked when you turn Reminders on in the app's Settings tab; System Settings › Privacy & Security › Reminders

What Claude can do

ToolWhat it does
agendaToday (or the next days) in one call: what's now and next, conflicts, free time left, open invitations, reminders due
list_eventsEvents in a period, from all calendars or some, repeating ones expanded
search_eventsText, person, place, calendar, dates, video calls, status; or counts per calendar, month, weekday or person with group_by
get_eventOne event in full: notes, attendees and their answers, alarms, repeat rule, video link
find_free_timeSlots of a given length within your working hours, with buffers, across every calendar that counts; within someone else's working hours in their time zone too; as text to paste in a message
find_conflictsOverlapping events that both take the time
find_duplicatesEvents entered twice, which copy to keep, and which copies can safely go
pending_invitationsInvitations you haven't answered
respond_to_invitationAccept, decline or answer "maybe" to an invitation; Calendar sends the answer to the organizer
calendar_statisticsWhere time went: per calendar, weekday, hour and person, meeting load, back-to-back meetings
list_calendarsCalendars with their account, colour and whether they can be changed
create_event, update_event, delete_eventAdd, change, move or delete events, one occurrence or the whole series, with alarms and repeat rules
create_events, update_eventsMany events in one call, checked before any change, one approval and one undo for all of them
list_reminders, create_reminder, update_reminder, delete_remindersReminders: what's open or overdue, add one with a due day or time, tick it off, move it to another list
undo_changeLists recent changes and puts one back
import_ics, export_eventsAdd events from an .ics file (an invitation saved from Mail), or write events to .ics, CSV or JSON: free/busy only, or as an invitation to attach to an email
open_in_calendarShow an event or a day in Calendar

Event ids are EventKit's own; one occurrence of a repeating event is <id>#<start in Unix seconds>.

EventKit cannot invite people from Calendar. Invite them in Calendar, or by email: export_events with invite writes a standard invitation they can accept or decline, and the calendar-invite-by-mail skill attaches it to a draft in Mail (with Apple Mail MCP). Invitations to you can be answered with respond_to_invitation, which uses the same (undocumented) EventKit call as Calendar; the account sends the answer to the organizer, and the app asks you first.

You stay in control

The approval window: a change to a shared event shown in full with a 1 of 3 pager and the people who may be told, two deletions waiting below

When Claude wants to delete events, or change an event other people are invited to, a small window pops up with what would change; nothing happens without a click on OK.

  • Delete policy (Settings): Ask me first (the default), Delete right away, or Never delete.
  • Shared events: changes to events with other attendees ask first by default, because their calendar server may tell them.
  • Undo: every change can be put back with undo_change, a whole batch with one id. A deleted event comes back without its attendees (EventKit cannot invite them again).
  • Each calendar and reminder list (Settings): Read and change, Read only (Claude never adds, moves, changes or deletes anything there), or Hidden (never read, listed or changed).
  • Batch limits: at most 50 events per change by default.
  • Read-only mode: apple-calendar-mcp --read-only offers only the reading tools.
  • Activity: every tool call is listed in the menu bar app (never with event details).

Skills

Pick them in the panel's Claude tab: each one shows what it does and whether it's installed.

SkillOr just ask…
/calendar-daily-brief"What does my day look like?"
/calendar-scheduler"Find an hour with no meetings next week for the budget review."
/calendar-focus-time"Block six hours of focus time this week, mornings if possible."
/calendar-meeting-prep"Prepare me for my meetings tomorrow."
/calendar-weekly-review"How did my week go, and what does next week look like?"
/calendar-time-audit"Where did my time go this month?"
/calendar-cleanup"Find duplicates and conflicts in my calendar and clean them up."
/calendar-invite-import"Add this flight confirmation to my calendar."
/calendar-invite-by-mail"Invite Sam and Priya to Thursday's planning session."

The skills are also served as MCP prompts (in Claude Code: /mcp__apple-calendar__calendar-daily-brief and so on), and two resources, calendar://today and calendar://upcoming, notify subscribed clients when the day changes.

Command line

apple-calendar-mcp [--read-only]                                        serve MCP over stdio
apple-calendar-mcp doctor                                               check the app, the permission and the bridge
apple-calendar-mcp install | uninstall [claude-code | claude-desktop]   register with Claude
apple-calendar-mcp skills [list | install | uninstall | export DIR]     manage the Claude skills
apple-calendar-mcp call <tool> '{"json": "arguments"}'                  run one tool

How it works

Claude ──MCP (stdio)──▶ apple-calendar-mcp ──socket (signatures checked)──▶ Apple Calendar MCP.app ──▶ EventKit ──▶ your accounts
                                                                            menu bar: approvals · activity · settings · Claude setup · updates
  • CalendarStore: the event model, EventKit, the bridge, repeat rules, free time, conflicts, statistics and iCalendar files.
  • CalendarMCPKit: the tools, policies, approvals, undo and skills; CalendarMCPBar is the SwiftUI menu bar app (Liquid Glass on macOS 26).

Development

git clone https://github.com/mp-consulting/apple-calendar-mcp && cd apple-calendar-mcp
# Files under ~/Documents carry Finder metadata that codesign rejects: build outside the repo.
swift test --scratch-path ~/Library/Caches/apple-calendar-mcp-build   # tests run on in-memory calendars
Scripts/build-app.sh --install                                        # build, sign, install, launch the app

apple-calendar-mcp --demo serves a made-up week from memory, to try the tools without touching your calendars. The screenshots come from the app's --demo --approval 3 --snapshot DIR.

Tests never touch your calendars: they run on MemoryBackend, which follows EventKit's rules for repeating events and read-only calendars. Requires Xcode 26 (Swift 6.2) for the app; the server builds with Swift 6.1.

License

MIT © 2026 Mickael Palma. Not affiliated with Apple. Apple Calendar is a trademark of Apple Inc.