用途
本 MCP 服务器旨在为 macOS 上的 Apple 提醒事项(Reminders)和日历(Calendar)提供原生集成。它通过 EventKit 框架与系统应用交互,使 AI 助手(如 Claude)能够以自然语言方式读取、创建、更新和删除提醒、列表、子任务及日历事件。
主要能力
- 完整 CRUD 操作:支持提醒、子任务、提醒列表和日历事件的创建、读取、更新、删除。
- 优先级与标签:支持高/中/低/无优先级,以及标签和带进度跟踪的清单子任务。
- 多条件过滤:可按完成状态、截止日期范围、优先级、标签、全文搜索、重复规则、基于位置等条件筛选。
- 灵活日期格式:接受
YYYY-MM-DD、YYYY-MM-DD HH:mm:ss(本地时间)或带时区的 ISO 8601 格式。 - 原生集成:通过 EventKit 与 Reminders.app / Calendar.app 双向同步,在系统应用中配置的值可通过读取响应返回。
- 自动权限处理:自动发现并提示 macOS 权限请求。
- Unicode 支持:全面支持 Unicode 字符,并进行输入验证。
- 结构化提示库:通过 MCP 的 ListPrompts / GetPrompt 端点提供多个提示模板,如每日任务组织器、智能提醒创建器、提醒审查助手、每周规划工作流。
使用方式
环境要求
- Node.js 20 或更高版本
- macOS(EventKit 必需)
- Xcode Command Line Tools(仅从源码构建时需要)
- pnpm(推荐)
发布的 npm 包包含预构建、通用、代码签名的 bin/event 二进制文件,因此使用 npx 无需 Xcode 或 Swift 工具链。从 git 克隆构建则需要上述工具。
安装与配置
将服务器添加到 MCP 客户端。npx 形式适用于所有客户端;本地构建则需将 command / args 替换为指向 dist/index.js 的 node 命令。
Claude Desktop 配置示例(编辑 claude_desktop_config.json):
{
"mcpServers": {
"apple-reminders": {
"command": "npx",
"args": ["-y", "mcp-server-apple-events"]
}
}
}
本地构建配置:
{
"mcpServers": {
"apple-reminders": {
"command": "node",
"args": ["/path/to/dist/index.js"]
}
}
}
配置后需完全重启 Claude Desktop(退出而非仅关闭窗口)使更改生效。
权限说明
内置的 event CLI 通过 bin/event-disclaim 垫片启动,在启动时声明 TCC 责任,因此 macOS 将权限请求归属于 event 自身,而非启动 MCP 服务器的应用。首次 EventKit 调用会提示授权,授权后出现在“系统设置 > 隐私与安全性 > 提醒事项 / 日历”中,一次授权即可覆盖机器上所有 MCP 客户端。
若权限状态异常,可运行 ./check-permissions.sh 重新打开对话框。若权限对话框从未出现且 event 未出现在系统设置中,可执行 tccutil reset Calendar 和 tccutil reset Reminders 重置 TCC 条目,然后在 Claude 对话中重新触发权限请求。
无头/launchd 运行
在无 GUI 会话(SSH、launchd 代理/守护进程)中运行时,首次 EventKit 调用可能因等待无法渲染的权限提示而永久阻塞。服务器会终止超过 30 秒的 event 调用(SIGKILL)并返回可读错误。可通过环境变量 EVENTKIT_CLI_TIMEOUT_MS 调整超时(毫秒,无效/零值回退默认,超时不可禁用)。内置 event CLI 在无 GUI 会话时也会快速失败,并在 15 秒后放弃无法回答的提示(EVENT_PERMISSION_TIMEOUT_MS)。
macOS 26 (Tahoe) 构建问题
若 pnpm build 失败并提示 could not build module 'Foundation',说明 Swift 工具链版本过旧,需要 Swift 6.3 或更新版本。可通过安装 Xcode 26.x 或更新 Command Line Tools 解决。
适用场景
- 通过 AI 助手管理个人提醒和日历事件。
- 自动创建、审查和优化提醒事项。
- 生成每日执行蓝图或每周规划,并自动创建日历时间块。
- 在支持 MCP 的客户端(Claude Desktop、Codex Desktop、Cursor、终端客户端等)中集成 Apple 提醒和日历。
限制
- 只读字段:闹钟、重复规则、位置触发器、结构化位置、日历 url / availability / isAllDay 以及跨日历移动无法通过本服务器写入,只能从 Reminders.app / Calendar.app 中配置并读取。
- 参与者(attendees)更新:需通过 Calendar.app 脚本接口,需要自动化授权和 GUI 会话,不支持无头运行;必须单独更新,不能与其他字段合并;标题和开始日期相同的两个事件会被拒绝而非猜测。
- 单次事件删除(occurrenceDate):需 iCloud 凭据(
ICLOUD_APPLE_ID和ICLOUD_APP_PASSWORD或 Keychain),仅适用于 iCloud 同步的事件。 - URL 方案:接受任何有效 URI 方案(http、https、mailto、tel、obsidian、shortcuts 等),但拒绝 file、javascript、data 等危险方案,http(s) 主机名会检查 SSRF 黑名单。
- 平台限制:仅支持 macOS。
- 无头环境:权限提示无法渲染,可能导致阻塞,虽有超时机制但功能受限。
开发命令
pnpm build— TypeScript + 内置 event CLI(从源码运行前必需)pnpm build:ts— 仅 TypeScriptpnpm build:event— 仅内置 event CLI(swift build -c release→bin/event)pnpm build:release— 构建加公证(发布打包)pnpm test/pnpm test:ci— Jest 测试套件 / 带覆盖率pnpm lint— Biome 格式化/修复 + TypeScript 类型检查pnpm check— lint + 带覆盖率的测试