Apple Calendar

io.github.mp-consulting由 GitHub 帳號 mp-consulting 發布v0.4.1更新於 Oct 30, 2026

Read, search and plan Apple Calendar on macOS via EventKit: free time, undo, you approve deletes

已驗證STDIO僅桌面效率與工作流溝通與協作

概覽

AI 產生的概覽

本機 macOS MCP 伺服器,讓助理透過 EventKit 讀取、搜尋與規劃 Apple 行事曆事件和提醒事項,刪除或修改共享事件前需確認。

可以做什麼
  • 查看當天行程、列出事件,並在所有行事曆中搜尋多年事件,重複事件依行事曆顯示展開
  • 檢視單一事件的備註、參與者、提醒與重複規則,並列出行事曆
  • 尋找空閒時間、衝突、重複事件、待回覆邀請與時間統計
  • 單筆或批次新增、修改、移動、刪除事件,並可復原近期變更
  • 管理提醒事項:列出、新增、完成、移動與刪除
  • 匯入匯出 iCalendar 檔案、CSV 或 JSON,並在行事曆中開啟事件
適用情境
適合想在 Mac 上讓助理回答行程問題、尋找會議時段、安排專注時間、準備會議或清理重複事件的場合,涵蓋已在行事曆同步的 iCloud、Google、Microsoft 365、CalDAV 等帳號。
執行需求
需要 macOS 14 以上版本的 Apple 晶片或 Intel Mac,並安裝搭配的選單列應用程式(Homebrew cask 或 DMG);只安裝 .mcpb 擴充功能仍需該應用程式。需授予行事曆完整取用權限,可選授予提醒事項完整取用權限。不需 API 金鑰或密碼。供 claude.ai 或手機遠端存取需自備通道與通行碼。
安裝前請注意
助理可新增、移動、刪除事件並修改提醒事項;刪除以及修改有其他參與者的事件預設需在選單列應用程式點選確認,但刪除策略可設為直接刪除。回覆邀請會把答覆送給主辦人。刪除的事件復原後不含參與者。遠端連線可被授予寫入權限,請妥善保管通行碼與通道。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Apple Calendar,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

[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] [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:

sh
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

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:

[Remote access settings: the switch with its status, the connection, the connector URL and tunnel path to copy, the passcode, and two connected Claude apps with Disconnect]

  1. 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).
  2. 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(/.*)?$.
  3. Set a passcode to approve connections from anywhere, or approve them in the menu bar app.
  4. 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

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

text
apple-calendar-mcp [--read-only]                                        serve MCP over stdioapple-calendar-mcp remote [--port N] [--listen ADDR] [--address URL]    serve MCP over HTTP with OAuth (claude.ai)apple-calendar-mcp doctor                                               check the app, the permission and the bridgeapple-calendar-mcp install | uninstall [claude-code | claude-desktop]   register with Claudeapple-calendar-mcp skills [list | install | uninstall | export DIR]     manage the Claude skillsapple-calendar-mcp call <tool> '{"json": "arguments"}'                  run one tool

How it works

text
claude.ai ──HTTPS──▶ tunnel ──HTTP──▶ apple-calendar-mcp remote (OAuth, run by the app) ──▶ EventKit; approvals over the socketClaude ──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

sh
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 calendarsScripts/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.

來源:README.md,提交 208560c

工具

0
SourceWeft 曾在隔離沙箱中以無憑證方式啟動該軟體包一次,以列出其工具,但未能完成:該軟體包類型無法在沙箱中執行。

版本歷史

6
  1. v0.4.1最新Oct 30, 2026
  2. v0.4.0Oct 29, 2026
  3. v0.3.0Oct 22, 2026
  4. v0.1.3Oct 21, 2026
  5. v0.1.2Oct 21, 2026
  6. v0.1.0Oct 21, 2026

評分

已滿足適用檢查項的 50%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分