关于 Apple Calendar
Apple Calendar 是仅适用于 macOS 的 MCP 服务,供 AI 助手读取和管理 Apple Calendar 事件。它还能计算日历间的空闲时段,并通过 EventKit 在本地运行。
主要功能
- 01读取指定日期范围内的事件
- 02创建、更新和删除事件
- 03查找日历空闲时段
- 04支持重复事件的单次实例操作
- 05本地通过 EventKit 访问日历
适用场景
- 01查找适合专注工作的空档
- 02安排跨日历可用时间的会议
- 03创建带提醒或地点的日程
- 04修改或删除重复事件的实例
MCP 相关
它向 MCP 客户端提供 Apple Calendar 的日历列表、事件读取与管理,以及空闲时段查询工具。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
apple-calendar-mcp
一个 MCP 服务,可让 AI 助手读取和创建 Apple Calendar 中的事件,还能帮你找出实际有空的时间。
仅限 macOS。 它使用 EventKit(Apple 自家的日历框架),该框架没有跨平台替代方案。
claude mcp add apple-calendar -- npx -y @redpop/apple-calendar-mcp
无需 Xcode、Swift 工具链,也无需克隆仓库。已签名的辅助程序二进制文件随软件包一同提供。
功能
大多数日历集成只能回答我的日历上有什么安排。它还能回答我什么时候有空:
"Find me two hours for deep work this week, outside meetings"
"When could I fit a 30-minute call with someone in Berlin?"
"Book focus time Thursday morning"
find_free_time 返回空闲时段,而不是忙碌时段。它知道“工作”指工作日的工作时间,“个人”指任何一天,并且全天事件通常不应算作忙碌。
它还可以在每场会议前后留出缓冲时间,因为两通电话之间紧挨着的空档,虽然纸面上有空,实际上却派不上用场。
除此之外,也提供常见功能:列出日历、读取指定时间范围内的事件(可选文本搜索)、创建、更新和删除事件,并支持地点、备注、提醒、全天或定时事件。重复事件会作为单独的发生实例返回,而不是作为主事件返回——这是基于 AppleScript 的服务常常处理错误的细节。
更改或删除重复事件的某个发生实例时,必须明确说明是仅针对该实例,还是也包括此后所有实例。这里没有默认选项,因为“取消这个星期二的安排”和“以后都不再安排”可不是能随便猜的事。
完整参数参考:docs/tools.md。
要求
- macOS 14(Sonoma)或更高版本
- Node.js 20 或更高版本
除此之外别无要求。从源代码构建还需要 Xcode Command Line Tools,但从 npm 安装则不需要。
设置
1. 将服务添加到客户端。
Claude Code
claude mcp add apple-calendar -- npx -y @redpop/apple-calendar-mcp
Claude Desktop
请先退出 Claude Desktop(按 Cmd+Q)——它会在退出时重写配置,因此如果编辑时它仍在运行,你的更改会被丢弃。然后将配置添加到
~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"apple-calendar": {
"command": "npx",
"args": ["-y", "@redpop/apple-calendar-mcp"]
}
}
}
Cursor、Windsurf、Zed 和其他 MCP 客户端
任何通过 stdio 使用 MCP 通信的客户端都可以使用。命令是 npx,参数是 -y @redpop/apple-calendar-mcp,无需设置环境变量。
2. 首次使用时授予日历访问权限。
向助手提问:“我有哪些日历?” 系统会弹出对话框,询问是否允许 calendar-helper(而非你的助手,是辅助程序本身)访问日历。
确认后,打开 系统设置 → 隐私与安全性 → 日历 → calendar-helper → 选项…,并确保选中 完全访问权限,而不是“仅添加”。仅有只读权限并不足够;辅助程序会在启动时检查是否拥有完全访问权限。
这是唯一需要手动操作的步骤,任何软件包格式都无法绕过它。对话框只会出现一次,更新后也仍然有效。
为什么对话框显示“calendar-helper”
macOS 会将日历权限授予负责的父进程,而不是实际发起请求的程序。因此,如果 AI 客户端在其应用包中未声明使用日历,它启动的所有程序都会被锁在外面——没有任何提示,也不会在系统设置中显示相关条目。一些 MCP 日历服务会通过要求你从终端启动客户端来绕过这个问题。
这个服务无需这样做。辅助程序会在启动时放弃继承来的责任,并成为独立的权限主体,因此 macOS 会从它自己的应用包中读取使用说明,并以它自己的名称请求权限。授予一次权限后,这台设备上的所有客户端都能使用。
完整说明:docs/architecture.md。
更新
npx -y @redpop/apple-calendar-mcp@latest
更新不会影响你的日历授权:辅助程序会安装到固定路径,macOS 会将授权绑定到该路径,而不是绑定到二进制文件的内容。
卸载
从客户端的 MCP 配置中移除 apple-calendar 条目,然后重启客户端。接着删除辅助程序及其权限:
rm -rf ~/Library/Application\ Support/apple-calendar-mcp
系统设置 → 隐私与安全性 → 日历 下的条目仍会保留——即使二进制文件已不存在,macOS 也会保留这些条目。如果想撤销权限,可在那里将其关闭。
从源代码构建
git clone https://github.com/redpop/apple-calendar-mcp.git
cd apple-calendar-mcp
npm install && npm run build && ./swift/build.sh
然后让客户端使用 node 指向 dist/index.js,而不是使用 npx。如果没有 Developer ID 证书,辅助程序会使用临时签名,因此 macOS 会将日历权限绑定到确切的构建版本——每次重新构建后都需要重新授权。
了解更多
docs/architecture.md— 两个部分如何协同工作,以及完整的 TCC 权限说明docs/tools.md— 每个工具的参数、默认值以及全天事件的提醒规则docs/cli.md— 独立的calendar-helper命令,可用于在没有 MCP 客户端的情况下进行测试docs/troubleshooting.md— 常见错误及其解决方法
隐私
所有操作都在本地进行。日历数据从 EventKit 传递给辅助程序,再传递给 MCP 服务和客户端,不会流向其他地方。此项目不包含任何网络代码。
许可证
MIT — 参见 LICENSE。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。