SuperAPI AI 工具集

mcp-server-apple-reminders

这是一个基于 Model Context Protocol (MCP) 的服务器,用于在 macOS 上通过 EventKit 框架原生集成 Apple 提醒事项和日历。它提供对提醒、列表、子任务和日历事件的完整 CRUD 操作,支持优先级、标签、过滤、日期格式和 Unicode,并自动处理 macOS 权限。用户可通过 MCP 客户端(如 Claude Desktop)以自然语言与 Apple 提醒和日历交互。

访问官网

工具介绍

用途

本 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 — 仅 TypeScript
  • pnpm 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 + 带覆盖率的测试