Skip to main content
Glama
iCloud MCP

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: icloud-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. の商標です。

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides AI assistants with read-only access to iCloud mail and calendar via IMAP and CalDAV, with opt-in write support for sending mail, managing events, and contacts.
    1
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Enables local AI agents to search and read iCloud Mail, draft and send reviewed replies, and manage calendar events via a local MCP connection.
    19
    1
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    Enables AI assistants to read iCloud Mail over IMAP with an app-specific password, including listing mailboxes, browsing and searching messages, and reading message bodies and attachment filenames. All operations are read-only, so messages remain unread and cannot be sent, deleted, moved, or altered.
    4
    MIT