Apple Calendar について
Apple Calendarは、AIアシスタントがApple Calendarの予定を読み取り、管理するmacOS専用のMCPサーバーです。EventKitを通じてローカルで動作し、複数のカレンダーから空き時間も探せます。
主な機能
- 01指定期間の予定を読み取り
- 02予定の作成、更新、削除
- 03カレンダー間の空き時間検索
- 04繰り返し予定の個別回を操作
- 05EventKitによるローカルアクセス
活用シーン
- 01集中作業に使える空き時間を探す
- 02カレンダーの空き状況に合わせて会議を調整
- 03アラームや場所付きの予定を作成
- 04繰り返し予定の特定回を変更または削除
MCP 対応
カレンダー一覧、Apple Calendarの予定の読み取りと管理、空き時間検索のツールをMCPクライアントに公開します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
apple-calendar-mcp
AI アシスタントが Apple Calendar のイベントを読み取ったり作成したりでき、実際にいつ時間があるかも判断できる MCP サーバーです。
macOS 専用です。 Apple 独自のカレンダーフレームワークである EventKit を使用しており、クロスプラットフォームの同等機能はありません。
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 カレンダーサーバーは、クライアントをターミナルから起動するよう案内することで、この問題に対処しています。
このサーバーでは、その必要はありません。ヘルパーは起動時に引き継いだ責任を放棄し、独自のアクセス許可 ID を持つようになります。そのため、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
次に、npx を使う代わりに、node を使ってクライアントから dist/index.js を指定します。Developer ID 証明書がない場合、ヘルパーはアドホック署名されます。その場合、macOS はカレンダーの許可をビルドごとに紐付けるため、ビルドのたびに新しい権限ダイアログが表示されます。
詳細はこちら
docs/architecture.md— 2 つの部分の連携方法と、TCC 権限に関する全体像docs/tools.md— 各ツールのパラメーターとデフォルト値、終日イベントのアラームルールdocs/cli.md— 単独で使えるcalendar-helperコマンド。MCP クライアントを使わずにテストする場合に便利ですdocs/troubleshooting.md— よくあるエラーとその解決方法
プライバシー
すべての処理はローカルで実行されます。カレンダーデータは EventKit からヘルパー、MCP サーバー、クライアントへと渡され、それ以外に送信されることはありません。このプロジェクトにはネットワーク関連のコードはありません。
ライセンス
MIT — LICENSE を参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。