Skip to main content
Glama
russellkmoore

iCloud MCP

iCloud MCP

Cloudflare Workers 上でホストされる MCP サーバーで、AI アシスタントに iCloud メール、カレンダー、連絡先 へのネイティブなツールアクセスを提供します。IMAP、CalDAV、CardDAV を介して、認証情報がサーバーから出ることはありません。

License: MIT Platform: Cloudflare Workers Protocol: MCP


これは何か

iCloud MCP は、3 つの Apple プロトコルを話し、それらを MCP クライアント(Claude など)にツールセットとして公開する単一の Cloudflare Worker です。アシスタントは、メールの読み取りと検索、下書きフォルダへの返信の下書き作成、カレンダーイベントの読み取りと管理、空き時間の検索、連絡先の検索を、実際の iCloud アカウントに対して行うことができます。

これは 1 人のユーザーが 1 つの Apple ID に対して使用するために構築されましたが、そのアカウントに固有のものは何もありません。アカウント固有の値はすべて、ユーザーが提供する設定に含まれています。デプロイ を参照してください。

アシスタントができること

  • メールの読み取り(送信はしない)— メッセージと添付ファイル(PDF から抽出したテキストを含む)の一覧表示、検索、読み取り。

  • 下書きメールの作成 — iCloud の下書きフォルダに、新しいメッセージとスレッド返信を、ステージングされた添付ファイルとともに作成します。送信はできません。 人間がすべての下書きを確認し、手動で送信します。これは安全上の境界であり、制限ではありません。セキュリティ を参照してください。

  • カレンダーの管理 — イベントの一覧表示、検索、読み取り、作成、更新、削除。破壊的または誰かに通知する変更は、すべて最初にプレビューされ、明示的な確認ステップの後にのみ適用されます。

  • 空き時間の検索 — 指定した期間について、すべてのカレンダーにわたって空き時間を検索します。

  • 連絡先の検索 — 名前またはメールアドレスで連絡先を検索します。

意図的に行わないこと

  • メールの送信。 SMTP は一切使用しません。下書きと確認のステップが、プロンプトインジェクションされたメール内容があなたの名前で送信されることを防ぐ最後の防衛線です。

  • 自律的な動作。 cron ジョブ、バックグラウンドウォッチャー、ダイジェストはありません。

  • コンテンツのキャッシュ。 iCloud が正規の記録であり、ディスカバリメタデータ(どのサーバーがあなたのアカウントを保持しているか)のみが 24 時間キャッシュされます。

  • 複数ユーザーのサポート や他の iCloud サービス(リマインダー、メモ、写真)はサポートしません。


Related MCP server: Apple MCP

仕組み

MCP client (Claude)
      │  HTTPS, OAuth 2.1 bearer token
      ▼
Cloudflare Worker  ──  OAuth provider gates every request
      │                (@cloudflare/workers-oauth-provider)
      ▼
MCP handler (/mcp)  ──  builds a fresh server per request
      │
      ├─ Mail tools  ──▶ IMAP over TLS (raw TCP socket) ──▶ imap.mail.me.com:993
      ├─ Cal tools   ──▶ CalDAV over HTTPS  ──▶ caldav.icloud.com
      └─ Contact tools ▶ CardDAV over HTTPS ──▶ contacts.icloud.com
  • エンドポイントは OAuth で保護されています。認証されていないリクエストがツールに到達することはありません。

  • IMAP は、Workers ネイティブの TCP ソケット API を介して、ポート 993 で暗黙的 TLS を使用して実行されます。ブリッジもプロキシもありません。接続は単一のリクエスト内で開かれ、使用され、閉じられます。

  • CalDAV/CardDAV は tsdav を使用します。解決されたサーバーの場所は KV にキャッシュされます。

  • あなたの Apple 認証情報は Cloudflare Secrets にのみ存在します。ログに記録されることも、レスポンスで返されることも、エラーメッセージに含まれることもありません。

完全な設計(リクエストフロー、トランスポート内部、安全対策の実施、モジュールマップ)については、ARCHITECTURE.md を参照してください。


ツール

5 つのグループに 23 のツールがあります。すべてのツールの説明には、信頼できないコンテンツに関する注意事項が含まれています。イベントのタイトル、メッセージ本文、連絡先フィールドはデータとして扱われ、指示として扱われることはありません。

診断

ツール

説明

mail_imap_diagnose

iCloud IMAP の接続性、認証、機能を確認します。

dav_diagnose

CalDAV/CardDAV のディスカバリを確認します: 解決された URL、シャードホスト、キャッシュヒット、タイミング。

メール

ツール

説明

mail_list_folders

メールフォルダを役割と件数とともに一覧表示します。

mail_list_messages

フォルダのメッセージを新しい順に一覧表示します(メタデータと上限付きスニペット。本文は含みません)。

mail_list_unread

フォルダの未読メールを一覧表示します。

mail_search

キーワード、送信者、日付範囲で 1 つのフォルダを検索します。

mail_get_message

不透明な ID で 1 つのメッセージを完全に読み取ります。

mail_get_attachment

添付ファイルをテキストとして読み取ります(PDF のテキストは抽出されます)。

mail_compose_new

新しいメッセージを下書きフォルダに作成します(送信はされません)。

mail_compose_reply

メッセージへの返信を下書きフォルダにスレッドとして作成します(送信はされません)。

mail_stage_attachment

下書きに添付するファイルをステージングします(メッセージ、生バイト、アップロード URL から)。

mail_confirm_upload

署名付きアップロードを完了します。

カレンダー

ツール

説明

calendar_list_calendars

カレンダーを一覧表示します: ID、名前、色、購読フラグ。

calendar_list_events

日付範囲内のイベントを一覧表示します(繰り返しイベントは発生インスタンスに展開されます)。

calendar_get_event

不透明な ID で 1 つのイベントを完全に読み取ります。

calendar_search

範囲内でキーワードまたは出席者によってイベントを検索します。

calendar_find_free_slots

すべてのカレンダーにわたって、期間と範囲に対して空きスロットを検索します。

calendar_create_event

イベントを作成します。出席者がいる場合は、最初にプレビューされ、確認を返します。

calendar_update_event

変更をプレビューします。calendar_commit まで何も書き込みません。

calendar_delete_event

1 つのイベントの削除をプレビューします。calendar_commit まで何も書き込みません。

calendar_commit

プレビューされた作成/更新/削除を、その確認トークンを使用して適用します。

連絡先

ツール

説明

contacts_search

名前またはメールアドレスで連絡先を検索します(行にはアドレスが含まれます)。

contacts_get

不透明な ID で 1 つの連絡先を完全に読み取ります。

各ツールの完全な入力パラメータは、ツールの説明自体と ARCHITECTURE.md にあります。


要件

要件

理由

Cloudflare アカウント、Workers 有料プラン

無料プランの 10 ms CPU 予算では、MIME 本文と PDF 添付ファイルを解析できません。

Cloudflare 上のドメイン

workers.dev とプレビュー URL は設計上無効になっているため、カスタムドメインのルートが必要です。

アプリ固有のパスワードを持つ Apple ID

iCloud は、アカウントが 2 要素認証を使用している場合(実際に使用しています)、IMAP/DAV にアプリ固有のパスワードを要求します。

Node.js 20+ と npm

Wrangler と Vitest のツールチェーン用です。


デプロイ

アカウント固有の値はすべて wrangler.jsonc に格納され、これは git で無視されます。追跡されるテンプレートは wrangler.jsonc.example です。npm install は初回実行時にテンプレートを所定の場所にコピーします。

1. クローンとインストール

git clone https://github.com/russellkmoore/icloud-mcp.git
cd icloud-mcp
npm install          # also copies wrangler.jsonc.example -> wrangler.jsonc

2. ストレージバインディングを作成する

各コマンドは ID を出力します。それを wrangler.jsonc の対応するエントリに貼り付けます。

npx wrangler kv namespace create OAUTH_KV
npx wrangler kv namespace create DAV_CACHE
npx wrangler kv namespace create CONFIRM_KV

npx wrangler r2 bucket create icloud-mcp-attachments

ステージングされたアップロードが 1 日後に期限切れになるように、バケットにライフサイクルルールを追加します(Cloudflare ダッシュボード → R2 → バケット → 設定 → オブジェクトライフサイクルルール: プレフィックス staging/、1 日後に削除)。これは必須です。ステージングトークンは 24 時間で期限切れになるため、バイトはそれをあまり超えて存続してはなりません。

3. wrangler.jsonc を記入する

git で無視される wrangler.jsonc でこれらの値を編集します:

  • routes[0].pattern → カスタムドメイン(例: icloud-mcp.your-domain.example

  • vars.R2_ACCOUNT_ID → Cloudflare アカウント ID

  • kv_namespaces[].id → ステップ 2 の 3 つの ID

ホスト名は routes[0].pattern から自動的にビルドに組み込まれます。コードで編集する必要はありません。

4. シークレットを設定する

npx wrangler secret put AUTH_SECRET            # your login password for /authorize
npx wrangler secret put APPLE_ID               # the account's Apple ID (email)
npx wrangler secret put APPLE_APP_PASSWORD     # app-specific password, not the real one
npx wrangler secret put CONFIRM_SECRET         # e.g. `openssl rand -base64 32`
npx wrangler secret put R2_ACCESS_KEY_ID       # from an R2 S3 API token,
npx wrangler secret put R2_SECRET_ACCESS_KEY   #   Object Read & Write, scoped to the bucket

各シークレットの内容については .dev.vars.example を参照してください。

5. デプロイと検証

npm test          # optional: full suite against a local workerd (no live account needed)
npm run deploy
npm run smoke     # confirms the live endpoint refuses an unauthenticated request

MCP クライアントを接続する

MCP エンドポイントは https://your-domain.example/mcp です。OAuth 2.1 と動的クライアント登録を使用します。

  1. MCP クライアントにコネクタ URL(https://your-domain.example/mcp)を追加します。

  2. クライアントは /authorize ページにあなたを送ります。

  3. AUTH_SECRET を入力して承認します。

リダイレクトオリジンの許可リストは https://claude.ai とループバックです。別のオリジンのクライアントを承認するには、src/auth/login-handler.ts に追加します。


ローカル開発

cp .dev.vars.example .dev.vars   # then fill in the values
npx wrangler dev                 # runs the Worker locally

.dev.vars は git で無視され、pre-commit フックによって拒否されます。ローカル実行では Miniflare のローカル KV/R2 を使用するため、実際の Cloudflare ストレージには触れません。

テストや自動化されたステップを実際の Apple ID に向けないでください。スイートは意図的に偽の認証情報を使用します(D-09)。


テスト

npm test          # full suite
npm run typecheck # tsc --noEmit
npm run scan      # the safety scanner (see below)

テストは @cloudflare/vitest-pool-workers を介して実際の workerd ランタイム内で実行されるため、ソケットと DAV コードは Node モックではなく、現実的な Workers の制約に対して実行されます。約 2,400 のテストがあり、ライブアカウントは不要です。


安全対策の実施

5 つの安全ルールは、scripts/forbidden-tokens.mjs によって機械的に実施されます。これはテストスイートと pre-commit フックの両方から実行されます:

  1. opportunistic-TLS トランスポートパスはありません(993 での暗黙的 TLS のみ)。

  2. メール送信はありません — SMTP なし、下書き書き込みパスは 1 つ、カウントとして実施されます。

  3. TCP ソケットを開くことができるモジュールは 1 つだけです。

  4. 認証情報がログやエラーに到達することはありません(src/ にはログ記録はありません)。

  5. メールの読み取りは既読にしません(メールボックスは読み取り専用で開かれ、ピークフェッチを使用します)。

これらのいずれかを変更することは、プロジェクトの安全境界の変更です。ルール、その理由、および実施方法は、ARCHITECTURE.md安全モデル に文書化されています。


プロジェクト構成

src/
  index.ts            Worker entry (the OAuth provider)
  env.ts              binding surface (KV, R2, vars, secrets)
  auth/               OAuth options + the /authorize login handler
  mcp/                MCP handler, per-request server factory, tool registrations
  mail/               IMAP: the one socket importer, session orchestrator, MIME
  dav/                CalDAV/CardDAV: transport, discovery, calendar/contacts, parsers
  staging/            R2 attachment staging + presigned uploads
  feed/               subscription-feed fetch (calendar subscriptions)
scripts/              hostname generation, the safety scanner, smoke test
test/                 ~2,400 tests, run inside workerd

技術スタック

Cloudflare Workers · TypeScript · MCP SDK v2 (@modelcontextprotocol/server) · agents (createMcpHandler) · @cloudflare/workers-oauth-provider · tsdav (CalDAV/CardDAV) · ical.js (iCalendar および vCard) · postal-mime (MIME) · unpdf (PDF テキスト) · aws4fetch (R2 プリサイン) · zod (スキーマ)。


貢献

Issue とプルリクエストを歓迎します。src/ の下で何かを変更する前に、ARCHITECTURE.md を読んでください。特に 安全モデル は、スキャナーがすべてのコミットで実施します。セキュリティの問題を報告するには、SECURITY.md を参照してください。


ライセンス

MIT © 2026 Russell Moore.

このプロジェクトは Apple Inc. とは提携しておらず、その承認も受けていません。「iCloud」および「Apple」は Apple Inc. の商標です。

A
license - permissive license
Not graded
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

View all related MCP servers

Related MCP Connectors

  • Let ChatGPT, Claude & Cursor use your Mac: email, calendar, iMessage, Teams, files. Local, free.

  • Calendar API for AI agents: events, availability, Google/Microsoft setup, scheduling, and iCal.

  • Connects ChatGPT to your Apple Calendar via a local Mac agent + Vercel relay

View all MCP Connectors

Latest Blog Posts

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/russellkmoore/icloud-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server