mcp-ical-swift
mcp-ical-swift
macOS SequoiaのTCC制限を回避するためにコンパイル済みSwiftバイナリを使用する、Apple Calendar用のローカルMCPサーバーです。
なぜこれが必要なのか
macOS Sequoia (26.x) では、ヘッドレスプロセスは標準のTCC(プライバシーとセキュリティ)メカニズムを通じてカレンダーへのアクセス権を取得できません。
PythonからのEventKit (例: PyObjC) は
kTCCServiceCalendarを必要としますが、これはヘッドレスプロセスではトリガーできないシステムダイアログを通じてのみ許可されます。Sequoiaの「システム設定」>「プライバシーとセキュリティ」>「カレンダー」には+ボタンが存在しません。osascript経由のAppleScript はkTCCServiceAppleEvents(自動化の許可)を必要としますが、これは呼び出し元のバイナリ(通常はnodeやbun)に帰属します。TCCデータベースを直接編集しても、TCCデーモンの整合性チェックによって無視されます。icalBuddy やその他のHomebrewツールは内部でEventKitを使用しており、同様の壁に突き当たります。
コンパイル済みのSwiftバイナリ (swiftc) が機能するのは、それがAppleによって署名されたMach-O実行ファイルであり、システムSwiftツールチェーンからカレンダーのTCC権限を継承するためです。Node/Bunが execFileSync を介してこのバイナリを起動すると、EventKitは authorizationStatus = .fullAccess を報告し、カレンダーデータを返します。
Related MCP server: apple-calendar-mcp
機能
すべてのカレンダーを一覧表示
指定した期間内のイベントを一覧表示
キーワードでイベントを検索
新規イベントの作成(カレンダー、場所、メモ、終日対応)
既存イベントの更新
UIDによるイベント詳細の取得
イベントの削除
stdio経由で完全にローカルで動作(ネットワーク、APIキー、クラウドは不要)
前提条件
macOS Sequoia (26.x) 以降
Bun 1.1以降
swiftc用のXcode Command Line Tools (xcode-select --install)Appleカレンダー内のカレンダーデータ(iCloud、Exchange、またはローカルカレンダー)
インストール
git clone https://github.com/Sealjay/mcp-ical-swift.git
cd mcp-ical-swift
bun install
bun run buildbuild スクリプトは src/calendar-reader.swift を bin/calendar-reader にコンパイルします。
MCPクライアントの設定
Claude Code
claude mcp add --transport stdio ical --scope user -- bun run /absolute/path/to/mcp-ical-swift/src/index.tsOpenClaw
{
"mcp": {
"servers": {
"ical": {
"command": "bun",
"args": ["run", "/absolute/path/to/mcp-ical-swift/src/index.ts"]
}
}
}
}Claude Desktop
claude_desktop_config.json に以下を追加します:
{
"mcpServers": {
"ical": {
"command": "bun",
"args": ["run", "/absolute/path/to/mcp-ical-swift/src/index.ts"]
}
}
}ツール
ツール | 説明 |
| すべてのAppleカレンダーを一覧表示 |
| 指定期間内(YYYY-MM-DD)のイベントを一覧表示 |
| キーワードでイベントを検索(デフォルト:30日先まで) |
| 新規イベントを作成(タイトル、開始、終了、カレンダー、場所、メモ、終日) |
| UIDで既存イベントを更新 |
| UIDでイベントの詳細を取得 |
| UIDでイベントを削除 |
仕組み
MCP Client (Claude, OpenClaw, etc.)
--> stdio --> Bun MCP server (src/index.ts)
--> execFileSync --> compiled Swift binary (bin/calendar-reader)
--> EventKit framework --> Apple Calendar dataSwiftバイナリは一度コンパイルされ (bun run build)、各ツール呼び出し時に同期的に実行されます。バイナリはJSONをstdoutに出力し、Bun MCPサーバーがそれをMCPツール結果としてラップします。サーバーはインジェクションリスクを避けるため、シェル実行ではなく execFileSync を使用します。
重要なポイント:swiftc でコンパイルされたバイナリはAppleによって署名されており、システムツールチェーンからカレンダーのTCC権限を継承します。これにより、Node、Bun、Python、AppleScriptがヘッドレス環境でカレンダーにアクセスすることを妨げるTCC制限を回避できます。
プライバシーとセキュリティ
このサーバーはデフォルトでシステム上のすべてのカレンダー(iCloud、Exchange、ローカル、共有、購読)にアクセスします。
list_eventsおよびsearch_eventsのオプションのcalendarパラメータを使用して、リクエストごとにカレンダー名でフィルタリングできます。イベントのメモはレスポンスに含まれ、機密データ(会議のPIN、パスワード、個人情報など)が含まれている可能性があります。MCPクライアントにアクセス権を付与する際はこれを考慮してください。
書き込み操作(
create_event、update_event、delete_event)は確認ステップなしで実行可能です。MCPクライアント(またはその中のプロンプトインジェクション)がカレンダーデータを変更する可能性があります。すべての通信はstdio経由のローカルで行われ、外部サービスにデータは送信されません。
脆弱性を報告する場合は SECURITY.md を参照してください。
制限事項
macOS専用(EventKitとSwiftツールチェーンが必要)
Bunランタイムが必要
Swiftバイナリは一度コンパイルされ、ツール呼び出しごとに同期的に呼び出されるため、非常に高いスループットの用途には適していません
定期的なイベントの変更は、その単一のインスタンスのみに適用されます (
.thisEventスパン)カレンダーへのアクセスは、macOSのTCCがコンパイル済みバイナリに許可を与えているかどうかに依存します
トラブルシューティング
「Calendar access is not granted(カレンダーへのアクセス権がありません)」
コンパイルされたバイナリは、カレンダーのTCC権限を持つコンテキストから少なくとも一度実行する必要があります。ビルドとテストを実行してください:
bun run build
bin/calendar-reader list-events $(date +%Y-%m-%d)これでイベントが返されれば、バイナリはカレンダーへのアクセス権を持っています。そうでない場合は、Terminal.app(通常はカレンダーのTCC権限が付与されています)から実行してみてください。
イベントが空の場合
Appleカレンダーでカレンダーが設定されていることを確認してください。以下を実行してください:
bin/calendar-reader list-calendarsコンパイルに失敗する場合
Xcode Command Line Toolsがインストールされていることを確認してください:
xcode-select --installライセンス
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceMCP server for accessing macOS Calendar events2MIT
- AlicenseNot gradedqualityDmaintenanceMCP server for Apple Calendar via native EventKit API with proper recurring event support.239MIT
- AlicenseNot gradedqualityAmaintenanceMCP server for Apple Calendar, Mail, Reminders, and Files on macOS using native frameworks.3116MIT
- AlicenseAqualityBmaintenanceMCP server for Apple Calendar and CalDAV providers. Enables listing, creating, updating, deleting events, and checking free/busy status with per-calendar write protection.86MIT
Related MCP Connectors
MCP connector for iMessage & Contacts via a local Mac agent + Vercel relay
Connects ChatGPT to your Apple Calendar via a local Mac agent + Vercel relay
Hosted Google Calendar MCP server for AI agents. No self-hosting or Google Cloud setup.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Sealjay/mcp-ical-swift'
If you have feedback or need assistance with the MCP directory API, please join our Discord server