Apple Calendar

io.github.mgcrea由 GitHub 帳號 mgcrea 發布v1.37.1更新於 Nov 8, 2026

Search, read and act on Apple Calendar — ranges, free-time lookup, writes off by default

已驗證STDIO僅桌面效率與工作流檔案與儲存

概覽

AI 產生的概覽

本機 macOS MCP 伺服器,讓助理搜尋與讀取 Apple 行事曆事件,建立、修改與刪除預設關閉。

可以做什麼
  • 列出帳號與行事曆,並對本機行事曆資料庫執行診斷
  • 依日期範圍列出與搜尋事件,並取得單一事件詳細資料
  • 僅在明確開啟寫入後建立、修改與刪除事件
  • 將讀寫限制在指定帳號與行事曆,並設定預設行事曆、範圍與時區
適用情境
適合讓助理根據 Mac 上使用者自己的 Apple 行事曆回答行程問題,例如尋找空檔或彙整近期事件;若刻意開啟寫入,也可管理事件。
執行需求
在 macOS 上透過 npx(Node.js)在本機執行,讀取行事曆 App 的 SQLite 資料庫,因此必須為啟動伺服器的程式(終端機、IDE、助理應用程式)授予完整磁碟存取權並重新啟動。寫入另需行事曆的自動化權限。透過環境變數設定,例如 APPLE_CALENDAR_ALLOW_WRITES、APPLE_CALENDAR_ACCOUNTS 與 APPLE_CALENDAR_CALENDARS。
安裝前請注意
寫入預設關閉;以 APPLE_CALENDAR_ALLOW_WRITES 開啟後會提供透過 Apple Events 建立、修改與刪除事件的工具,變更會寫入真實行事曆並同步至帳號。完整磁碟存取權限範圍很廣。帳號與行事曆允許清單同時限制讀寫,建議設定以縮小暴露範圍。本專案為非官方專案,與 Apple 無關。

安裝

在 SourceWeft 中

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

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

其他 MCP 客戶端

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

README

@mgcrea/mcp-apple-calendar

Model Context Protocol server for the macOS Apple Calendar app.

Unofficial. Not affiliated with Apple. It reads the Calendar store already on your Mac.

One lane for reads, one for writes

  • Index lane — read-only SQLite over Calendar.sqlitedb. Every read goes through it.
  • Apple Events lane — writes only. There is no jxa/read.ts in this package, and a test asserts there never will be.

This is the inverse of Notes. Notes shipped on Apple Events because search took 97 ms. Calendar cannot: a ±90-day range query over 1,349 events takes 3,355 ms over Apple Events, whose is worse and unstable, and every per-property bulk fetch costs ~1.8 s whichever property it is — so the cost cannot be amortised the way Notes amortises a bulk fetch. The store opens read-only in 1 ms. Calendar needs the file lane for speed, not capability.

It does not need EventKit, which is why the companion app stays a pure broker rather than linking a framework that would drag its own TCC prompt in.

PermissionNeeded forWithout it
Full Disk Accessall readsnothing works — there is no read fallback
Automation → Calendarwrites onlyreads are unaffected

Neither is granted to Calendar.app — it is the reader that needs permission. Grant Full Disk Access to whatever launches the server (Terminal, iTerm, VS Code, Claude), then restart it.

With writes off — the default — no Automation prompt appears at all. A read-only Calendar server needs exactly one permission.

Tools

Read: diagnostics, list_accounts, list_calendars, list_events, search_events, get_event.

Write, registered only when APPLE_CALENDAR_ALLOW_WRITES=1 — with the flag off they are invisible to the model, not merely refused: create_event, update_event, delete_events.

Configuration

VariableDefault
APPLE_CALENDAR_ALLOW_WRITESoffRegister the mutating tools.
APPLE_CALENDAR_ACCOUNTSallRead-side allowlist, comma-separated.
APPLE_CALENDAR_CALENDARSallRead-side allowlist, comma-separated.
APPLE_CALENDAR_DEFAULT_CALENDARCalendar'sCalendar a new event goes to when none named.
APPLE_CALENDAR_DEFAULT_RANGE_DAYS7An unbounded default would scan a decade.
APPLE_CALENDAR_MAX_RANGE_DAYS366Ceiling on a caller-supplied range.
APPLE_CALENDAR_DEFAULT_EVENT_DURATION_MINUTES60Used when a write names no end.
APPLE_CALENDAR_INCLUDE_DECLINEDoffInclude declined events in reads.
APPLE_CALENDAR_INCLUDE_CANCELLEDoffInclude cancelled events in reads.
APPLE_CALENDAR_TIMEZONEsystemOverride the zone ranges are resolved in.
APPLE_CALENDAR_INDEX_MODEautoauto | ro | immutable | off.
APPLE_CALENDAR_STOREautoExplicit Calendar.sqlitedb path.
APPLE_CALENDAR_OSASCRIPT_TIMEOUT_MS30000Sized for the first-run permission prompt.

Notes that will bite you

  • ~/Library/Calendars does not exist. The store is ~/Library/Group Containers/group.com.apple.calendar/Calendar.sqlitedb.
  • Recurrence lives in a cache table. A naive SELECT ... FROM CalendarItem over a date range misses expanded repeats; the range query unions items carrying no recurrence rule with everything in the cache. 456 of 489 cached parents carry no rule of their own.
  • Dates are seconds since 2001, not 1970 — CalendarItem.last_modified and orig_date both.
  • A floating time zone is not the system one. Anything matching GMT±HHMM is a real zone; treating the rest as floating is what stops a two-hour silent shift.
  • Writes always go through Apple Events, never the store, which the app holds open and syncs.

Licence

MIT.

來源:packages/calendar/README.md,提交 2398a54

工具

0
SourceWeft 尚未在沙箱中啟動過該軟體包,因此其工具未知。

版本歷史

17
  1. v1.37.0Nov 7, 2026
  2. v1.36.2Nov 4, 2026
  3. v1.36.1Nov 3, 2026
  4. v1.35.0Oct 30, 2026
  5. v1.34.0Oct 29, 2026
  6. v1.31.0Oct 26, 2026
  7. v1.30.0Oct 22, 2026
  8. v1.29.1Oct 21, 2026
  9. v1.28.0Oct 13, 2026
  10. v1.27.0Oct 13, 2026
  11. v1.26.0Oct 6, 2026
  12. v1.25.0Oct 3, 2026
  13. v1.24.1Sep 29, 2026
  14. v1.24.0Sep 27, 2026
  15. v1.23.0Sep 19, 2026
  16. v1.22.1Sep 16, 2026
  17. v1.21.1Sep 16, 2026

評分

已滿足適用檢查項的 50%

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

  • 近 30 天內可連通25 分

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

  • 已宣告認證方式10 分

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

  • 已列出工具15 分

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

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