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 installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
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.7215MIT
- AlicenseNot gradedqualityDmaintenanceEnables native integration with Apple Reminders on macOS, allowing you to create, list, complete, and manage reminders through natural language.MIT
- FlicenseNot gradedqualityDmaintenanceEnables reading, creating, updating, and deleting Apple Reminders directly on macOS via the EventKit framework.
Related MCP Connectors
MCP connector for Apple Reminders — search, create, complete, and edit via your own Mac.
Manage your family's calendars and lists in Cozi. View, create, and update appointments; organize…
Let ChatGPT, Claude & Cursor use your Mac: email, calendar, iMessage, Teams, files. Local, free.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/augustoFranke/apple-reminders-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server