Apple Reminders MCP
Apple Reminders MCP
一个本地 stdio MCP 服务器,可为模型提供对 macOS Reminders 的受控读写访问:列表、提醒、日期、重复、提前提醒、优先级、旗标、备注和 URL。
仅支持 macOS。基于 macOS 27 使用 Swift 6.4 构建。
安装
以扩展包形式安装(推荐)
npm install && npm run package:mcpb那样会生成 apple-reminders-mcp.mcpb。打开它,或者像 apple-calendar-mcp.mcpb 和 apple-mail-mcp.mcpb 那样,把它拖入 Claude Desktop 的扩展面板。
从源码安装
npm install && npm run build然后向你的 MCP 客户端注册:
{
"mcpServers": {
"apple-reminders": {
"command": "node",
"args": ["/absolute/path/to/apple-reminders-mcp/dist/index.js"]
}
}
}Swift 辅助程序特意不使用自己的身份进行代码签名。ad-hoc 身份会使其成为独立的 TCC 主体,从而破坏 EventKit 访问继承(已验证:签名后 requestFullAccessToReminders 会返回 false)。不签名时,它会继承 MCP 客户端的权限。
首次使用你的 MCP 客户端需要:
Reminders 访问权限(系统设置 → 隐私与安全性 → Reminders)——所有功能都需要。
自动化 → Reminders 访问权限——仅在使用旗标时需要。
Related MCP server: Apple Reminders MCP Server
工具
每个工具都有一个采用 Reminders 自身术语的显示名称,这就是客户端显示的名称,而不是原始的函数名。
显示为 | 工具 | 执行的操作 |
显示列表 |
| 每个列表及其 id、名称、颜色、可写性以及是否是默认列表 |
新建列表 |
| 新建列表,可选十六进制颜色 |
编辑列表 |
| 重命名列表和/或更改其颜色 |
删除列表 |
| 删除一个列表以及其中的每条提醒——需要 |
查找提醒 |
| 按列表、完成状态、到期时间范围、文字筛选; |
打开提醒 |
| 查看一条提醒的完整详情 |
新建提醒 |
| 使用任意受支持的字段进行创建 |
编辑提醒 |
| 对任意字段进行补丁修改,包括通过 |
移动列表 |
| 将提醒移到另一个列表 |
删除提醒 |
| 删除一条提醒 |
另外还暴露了 reminders://lists 和 reminders://capabilities 资源,以及一个 triage_reminders prompt。
字段映射
Reminders 应用的详情面板如何映射到此服务器:
Reminders 应用 | 字段 | 说明 |
标题 |
| |
备注 |
| 传入 |
URL |
| 传入 |
日期 / 时间 |
|
|
重复 |
| 不带 |
结束重复 |
| RRULE 的 |
提前提醒 |
| 截止时间前多少分钟;传入 |
列表 |
| |
旗标 |
| 由 AppleScript 支撑,很慢——见下文 |
优先级 |
|
|
完成复选框 |
| |
标签 | — | 不支持,见下文 |
紧急 | — | 不支持,见下文 |
每个提醒都会同时返回 due(UTC,或全天时返回 YYYY-MM-DD)和 dueLocal. 告知用户某个事项的截止时间时,请使用 dueLocal。
勾选一条重复提醒
勾选一条重复提醒会跳到下一次提醒,而不是标记完成——这与 Reminders 应用的做法相同。响应会返回 completed: false,且截止日期也更晚。若要结束重复序列,请先清除 recurrence,或删除该提醒。
哪些内容不受支持,以及原因
在 macOS 27 上,Reminders 界面中有两个字段背后没有对应的 API。这一结论经实测证实,并非猜测。
标签。EKReminder 和 EKCalendarItem 不暴露任何标签属性(通过 Objective-C 运行时转储验证:class_copyPropertyList 不会返回任何类标签形状的成员,respondsToSelector: 对 tags 和 hashtags 都返回 false)。Reminders 的 AppleScript 词典中也没有 tags 术语——它的 reminder 类只暴露 name、id、container、创建/修改日期、body、title、complete、completion date、due date、allday due date、priority 和 flagged。把 #tag 写进标题并不能创建标签:一条通过 EventKit 创建、标题为 zzz mcp probe #zzmcpprobe 的提醒,在 Reminders 中只会原样渲染为纯文本,并没有附带任何标签。标签位于 Reminders group 容器中,这个容器受 TCC 保护,且直接对其进行不安全的写入(它是一个已启用的 Core 数据存储)。
urgent 紧急字段。 出现在 Reminders UI 中的“紧急”开关(Mark this reminder as urgent to set an alert)并不存在于 EventKit 或 AppleScript 词典中。在界面中切换它,不会产生此服务器可读取或写入的任何属性。
如果你需要其中任意一个字段,只能手动在 Reminders 应用中完成。
旗标很慢
flagged 是唯一的不能由 EventKit 访问的字段,所以它通过 Reminders.app 的 AppleScript 桥接来访问。这个桥接很慢,而且会随着列表变大而变慢——在本机界面上测得:小列表约 1 秒,按 id 全局查找约 15 秒,包含数百条提醒的列表约 30 秒。
因此旗标状态是可选的(opt-in):
读出时除非你传
includeFlagged: true,否则忽略它;否则flagged的返回null(表示“未读”,而不是“未标记”)。写入仅在真正发送
flagged时才会花费成本。
如果你的列表非常大,可以在需要时调大 APPLE_REMINDERS_MCP_TIMEOUT_MS(默认 120000)。
安全
拒绝写入只读列表。
APPLE_REMINDERS_MCP_ALLOW_LISTS——逗号分隔的列表名称或 id。若设置,写入被限制在这些列表内。delete_list需要confirm: true,因为它会销毁列表中的每条提醒。破坏性工具的注解。
验证
npm run verify那样会先构建、运行辅助程序的自我测试(RRULE 往返转换、优先级映射、日期组件、id 类型转换、输入拒绝),然后运行一个端到端冒烟测试:通过 stdio 驱动真实的 MCP 服务器,对临时列表进行读写。
冒烟测试覆盖全部 10 个工具,共 27 个断言,包括确保每个工具都声明了可用的 JSON 输入 schema。如果不想跑慢的旗标检查,可以设置 SMOKE_SKIP_FLAGS=1。
目录结构
helper/EventKitReminders.swift EventKit + AppleScript, JSON in on stdin, JSON out on stdout
src/helper.ts spawns the helper, one process per call
src/index.ts MCP tools, zod schemas, model-facing instructions
icon.png 256x256 bundle icon
scripts/make-icon.swift redraws icon.png; geometry and colours are
measured from the Reminders app icon, drawn in
CoreGraphics rather than copied as an asset
scripts/build-helper.sh swiftc build (intentionally unsigned)
scripts/helper-self-test.mjs pure-logic self-tests, touches no real data
scripts/smoke.mjs end-to-end test over stdio JSON-RPC
scripts/package.mjs builds apple-reminders-mcp.mcpb
scripts/package-check.mjs asserts the bundle has the runtime files, an
executable helper, and no dev artifactsThis server cannot be deployed
Maintenance
Related MCP Connectors
MCP connector for Apple Reminders — search, create, complete, and edit via your own Mac.
Connects to PleaseRemind.com to allow read and write access to all your reminders.
Context-aware reminders that surface when your situation matches, not at a fixed time.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables management of Apple Reminders on macOS, including creating, updating, and querying reminders with due dates, priorities, and completion status across different reminder lists.MIT
- AlicenseAqualityDmaintenanceEnables AI assistants to manage Apple Reminders lists and reminders on macOS, including creating, updating, completing, and deleting reminders.7343 npm5MIT
- FlicenseNot gradedqualityDmaintenanceEnables reading, creating, updating, and deleting Apple Reminders directly on macOS via the EventKit framework.-
- AlicenseNot gradedqualityCmaintenanceEnables management of Apple Reminders on macOS, including creating, listing, searching, editing, completing, moving, and deleting reminders and reminder lists via native EventKit.MIT