
Apple Calendar
io.github.mp-consultingPublished by GitHub account mp-consultingv0.4.1Updated Oct 30, 2026
Read, search and plan Apple Calendar on macOS via EventKit: free time, undo, you approve deletes
Overview
Local macOS MCP server that lets an assistant read, search and plan Apple Calendar events and reminders through EventKit, with approval before deletes or…
- What you can do
- Read the day, list events and search years of events across all calendars, with repeating events expanded
- Inspect a single event's notes, attendees, alarms and repeat rule, and list calendars
- Find free time, conflicts, duplicates, pending invitations and time statistics
- Create, update, move or delete events singly or in batches, and undo recent changes
- Manage reminders: list, add, complete, move and delete
- Import and export iCalendar files, CSV or JSON, and open events in Calendar
- When to use it
- Useful when you want an assistant on a Mac to answer questions about your schedule, find meeting slots, block focus time, prepare for meetings or clean up duplicates, across iCloud, Google, Microsoft 365, CalDAV and other accounts already synced in Calendar.
- Requirements
- macOS 14 or later on Apple silicon or Intel, with the companion menu bar app installed (Homebrew cask or DMG); the .mcpb extension alone still needs that app. Grant Calendars Full Access, and optionally Reminders Full Access. No API keys or passwords. Remote access for claude.ai or phones needs a tunnel and a passcode.
Installation
In SourceWeft
- Open Apple Calendar in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Other MCP clients
Follow the launch instructions in the repository.
README
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] [Listed on mcpservers.org]
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, remote access for claude.ai, 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:
Or download the app or the Claude extension from the latest release:
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:
- Open Apple Calendar MCP: a calendar appears in the menu bar.
- Click Allow Calendar Access and choose Allow Full Access in the macOS prompt.
- 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.
claude.ai and your phone
The Claude apps on iPhone, Android and the web reach Calendar on your Mac as a custom connector. The menu bar app serves MCP over HTTP with OAuth; a tunnel (such as cloudflared) publishes it at an HTTPS address of yours. Turn it on in More settings… › Remote access:
- Enter the public address the tunnel publishes, such as
https://mcp.example.com/me/calendar. Several servers can share one host name, each on its own path (Apple Mail MCP at/me/mail, for instance). - Route that path to the port (8591 by default) in the tunnel. The route must also carry the discovery documents,
which OAuth puts at the root with the path appended; the settings show the exact path pattern, for example
^/(\.well-known/[^/]+/)?me/calendar(/.*)?$. - Set a passcode to approve connections from anywhere, or approve them in the menu bar app.
- In claude.ai, Settings › Connectors › Add custom connector with the connector URL (no client ID or secret). Connect opens the sign-in page:
[The sign-in page: Connect Claude to Apple Calendar, a choice of full access or read only, the passcode field with Allow, Approve on my Mac, and Don't allow] [The menu bar app asks: Claude wants to connect to Apple Calendar, with Deny and Allow]
A connection may do what Claude on the Mac may do, or only read; deleting and changing shared events still wait for your OK in the menu bar app. Connected apps lists each one, and Disconnect ends it at its next request. Tokens last an hour and refresh for 90 days of use; the server keeps only their hashes. Details, the tunnel set-up and the security model: docs/remote.md.
What Claude can do
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
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-onlyoffers 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.
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
How it works
- 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
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.
Source: README.md at commit 208560c
Tools
0Version history
6- v0.4.1LatestOct 30, 2026
- v0.4.0Oct 29, 2026
- v0.3.0Oct 22, 2026
- v0.1.3Oct 21, 2026
- v0.1.2Oct 21, 2026
- v0.1.0Oct 21, 2026
Score
50% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
- Reached in the last 30 days25 pts
Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.
- Auth declared10 pts
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
- Tools listed15 pts
Answer tools/list without a credential, or ship a package that starts in a sandbox without one.
- DescriptionRequired15 pts
- Logo10 pts
- Documentation15 pts
- License10 pts