Apple Calendar

io.github.redpop由 GitHub 账号 redpop 发布v0.2.1更新于 Nov 3, 2026

Read and create Apple Calendar events on macOS, and find free time across calendars.

已验证STDIO仅桌面位置与生活效率与工作流

概览

AI 生成的概览

本地运行的 macOS MCP 服务器,让助手读取、创建、修改和删除 Apple 日历事件,并跨日历查找空闲时间。

可以做什么
  • 列出日历,按日期范围读取事件,并支持文本搜索
  • 创建、更新和删除事件,可设置地点、备注、提醒、全天或定时
  • 查找空闲时间:返回可用空档而非忙碌时段,支持工作/个人时段规则和会议前后缓冲
  • 将重复事件按单次发生返回;修改或删除某次发生时必须明确是仅此一次还是此后全部
适用场景
适合在 Mac 上让助手处理日程安排,例如找出本周两小时的专注时段、为通话推荐时间,或直接在 Apple 日历中新建和编辑事件。
运行要求
需要 macOS 14(Sonoma)或更新版本,以及 Node.js 20 或更新版本;通过 npx 本地运行,无需环境变量。首次使用时 macOS 会请求为随包提供的 calendar-helper 授予日历访问权限,需在系统设置中设为“完全访问”而非“仅添加”。
安装前请注意
助手可以创建、更新和删除日历事件(包括重复事件的单次发生),会改动真实数据。它需要完全日历访问权限,范围大于只读。日历数据仅在本地流转,项目声明不含任何网络代码。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Apple Calendar,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

README

apple-calendar-mcp

An MCP server that lets an AI assistant read and create events in Apple Calendar — and work out when you actually have time.

macOS only. It talks to EventKit, Apple's own calendar framework, which has no cross-platform equivalent.

bash
claude mcp add apple-calendar -- npx -y @redpop/apple-calendar-mcp

No Xcode, no Swift toolchain, no repository clone. The signed helper binary ships inside the package.

What it does

Most calendar integrations answer what is on my calendar. This one also answers when am I free:

"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 returns the open gaps, not the busy blocks. It understands that "work" means weekdays during working hours, that "personal" means any day, and that all-day events usually shouldn't count as busy.

It can also keep a buffer around each meeting, because a gap wedged directly between two calls is free on paper and useless in practice.

Alongside that, the usual: list calendars, read events in a range with optional text search, create, update and delete events with location, notes, alarms, all-day or timed. Recurring events come back as individual occurrences, not as the master event — a detail AppleScript-based servers routinely get wrong.

Changing or deleting an occurrence of a recurring event requires saying explicitly whether you mean just that one or every later one too. There is no default for that, because "cancel this Tuesday" and "never again" are not the kind of thing to guess at.

Full parameter reference: docs/tools.md.

Requirements

  • macOS 14 (Sonoma) or newer
  • Node.js 20 or newer

Nothing else. Building from source additionally needs Xcode Command Line Tools, but installing from npm does not.

Setup

1. Add the server to your client.

Claude Code
bash
claude mcp add apple-calendar -- npx -y @redpop/apple-calendar-mcp
Claude Desktop

Quit Claude Desktop first (Cmd+Q) — it rewrites its config on exit, so editing while it runs discards your change. Then add to ~/Library/Application Support/Claude/claude_desktop_config.json:

json
{  "mcpServers": {    "apple-calendar": {      "command": "npx",      "args": ["-y", "@redpop/apple-calendar-mcp"]    }  }}
Cursor, Windsurf, Zed and other MCP clients

Any client that speaks MCP over stdio works. The command is npx, the arguments are -y @redpop/apple-calendar-mcp, and no environment variables are needed.

2. Grant calendar access on first use.

Ask your assistant "what calendars do I have?". A system dialog appears asking to let calendar-helper — not your assistant, the helper itself — access your calendar.

Confirm it, then open System Settings → Privacy & Security → Calendars → calendar-helper → Options… and make sure Full Access is selected, not "Add Only". Read-only access is not enough; the helper checks for full access at startup.

This one dialog is the only manual step, and no package format can take it away. It appears once and survives updates.

Why the dialog says "calendar-helper"

macOS grants calendar permission to the responsible parent process, not to the program actually asking. An AI client that declares no calendar usage in its bundle therefore locks out everything it starts — silently, with no dialog and no entry in System Settings. Several MCP calendar servers work around this by telling you to launch your client from a terminal.

This one doesn't need that. The helper disclaims that inherited responsibility at startup and becomes its own permission identity, so macOS reads the usage description from its bundle and prompts under its own name. One grant then covers every client on the machine.

The full story: docs/architecture.md.

Updating

bash
npx -y @redpop/apple-calendar-mcp@latest

Your calendar grant survives updates: the helper is installed to a fixed path, and macOS binds the grant to that path rather than to the binary's contents.

Uninstalling

Remove the apple-calendar entry from your client's MCP configuration and restart it. Then delete the helper and its permission:

bash
rm -rf ~/Library/Application\ Support/apple-calendar-mcp

The entry under System Settings → Privacy & Security → Calendars stays behind — macOS keeps those even when the binary is gone. Switch it off there if you want it revoked.

Building from source

bash
git clone https://github.com/redpop/apple-calendar-mcp.gitcd apple-calendar-mcpnpm install && npm run build && ./swift/build.sh

Then point your client at dist/index.js with node instead of using npx. Without a Developer ID certificate the helper is signed ad-hoc, and macOS then ties the calendar grant to the exact build — expect a new permission dialog after every rebuild.

Learn more

Privacy

Everything runs locally. Calendar data goes from EventKit to the helper to the MCP server to your client, and nowhere else. There is no network code in this project.

License

MIT — see LICENSE.

来源:README.md,提交 76eab81

工具

0
SourceWeft 尚未在沙箱中启动过该软件包,因此其工具未知。

版本历史

1
  1. v0.2.1最新Sep 16, 2026

评分

已满足适用检查项的 50%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分

    请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。

  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具15 分

    请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。

  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分