Skip to main content
Glama
nweii
by nweii

Apple Calendar MCP

Apple Calendar MCP は、AI クライアントに 1 つの iCloud Calendar アカウントへのリモート読み取り・書き取りアクセスを提供します。これは Cloudflare 上でステートレスな TypeScript Worker として実行され、Apple デバイスがオンラインであり続ける必要はありません。

Deploy to Cloudflare

1 つのデプロイメントは 1 つの Apple Account に接続します。これはマルチユーザー カレンダー サービスではありません。

デプロイ前 に

必要なもの:

  • Cloudflare アカウント。

  • 二要素認証を有効にした Apple Account。

  • リモート HTTPS サーバーと OAuth をサポートする MCP クライアント。

  • あなたの IANA タイムゾーン名。例: America/New_York

Apple と Cloudflare の設定ページはご自身で開いてください。エージェントは案内や結果の検証はできますが、あなたのパスワードを受取ったり入カしたりするべきではありません。

[!WARNING] Apple Account のパスワード、Apple アプリ固有パスワード、承パスワードをチャット、ソース管理、ログ、または Issue に貼り付けないでください。

Related MCP server: calendar-app-mcp

Apple アプリ固有パスワードを作成する

  1. account.apple.com を開いてサインインします。

  2. Sign-In and Security > App-Specific Passwords を選択します。

  3. Generate an app-specific password を選択します。

  4. 明確なラベルを付けます。例: Apple Calendar MCP

  5. Cloudflare が要求するまで、生成された値は Apple のページに表示したままにします。

Apple では、アプリ固有パスワードに二要素認証が必用です。アクティブなパスワードは最マ 25 個まで作成できます。1 つまたはすべてを取り消しできます。メインの Apple Account パスワードを変更またはリセットすると、すべてのアプリ固有パスワードが取り消されます。Apple のアプリ固有パスワードの手順を参照してください。

[!WARNING] Apple アプリ固有パスワードは、この MCP がクライアントに表示する Calendar 権限よりも広い範囲を持ちます。Worker は許可リストに登録された iCloud CalDAV ホストにのみアクセスを制限しますが、Apple は Calendar 専用のアプリ固有パスワードを発行しません。

Cloudflare にデプロイする

  1. このページ上部の Deploy to Cloudflare を選択します。

  2. Cloudflare にサインインし、デプロイメント フォームに従います。

  3. Cloudflare が要求する 3 つのシークレット値を入カします:

    • ICLOUD_USERNAME: Apple Account と iCloud Calendar に使用する完全なメール アドレス。

    • ICLOUD_APP_PASSWORD: Apple が生成したアプリ固有パスワード。正確にそのまま保ちます。

    • APPROVAL_PASSWORD: 新し MCP クライアントの承を保護する、別の一意のパスワード。Apple のどちらのパスワードも再利用しないでください。

  4. Worker のデプロイメントが完了するまで待ちます。

  5. Workers & Pages を開き、Worker を選択し、Settings を選択して Variables and Secrets を見つけます。

  6. CALENDAR_TIME_ZONEUTC からあなたの IANA タイムゾーン名に変更し、設定をデプロイします。

  7. 次の形式のエンドポインとをコピーします: https://<worker-name>.<account-subdomain>.workers.dev/mcp

Cloudflare は 3 つのシークレット値を暗号化された Worker シークレットとして保格します。デプロイメント フォームは、生成されたリポジトリやローカルの .dev.vars ファイルにそれらを書き込みません。

シークレットをスキップした場合や置き換える必要がある場合は、Workers & Pages を開き、Worker を選択し、Settings を選択して Variables and Secrets を見つけ、値を Secret として追加または編集し、Deploy を選択します。

Cloudflare は OAUTH_KV 名前空間を自動的にプロビジョニングします。wrangler.jsonc に KV ID を追加しないでください。

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

  1. デプロイした /mcp エンドポイントをカスタム リモート MCP サーバーまたはアプリとして追カします。

  2. Connect を選択します。クライアントが OAuth を検出し、Apple Calendar MCP 承ページを開くはずです。

  3. クライアント名と要求された権限を確認します。

  4. APPROVAL_PASSWORD を入カし、Allow and return を選択します。ページが必要以上のアクセスを求める場合は Cancel を選択します。

  5. クライアントが接続完了を報告するまで待ちます。完了後もブラウザ タブが開いたままの場合は閉じます。

  6. クライアントのツールを更新または再スキャンします。クライアントは接続後またはサーバー更新後にツール カタログをキャッシュすることがあります。

Claude の場合は、リモート MCP でカスタム コネクタを使用するを参照してください。ChatGPT の場合は、開発者モードとフル MCP コネクタを参照してください。

承認ページでは、次の 2 つの権限が提供されます:

  • Read calendars and eventscalendar:read を許可し、7 つの読み取りツールを公開します。

  • Read and edit calendars and eventscalendar:read calendar:write を許可し、4 つの変更容易ールを追加します。

権限を変更するには、再認証とツール カタログの更新が必用です。サーバーの更新では、既存の読み取り専用の認可に書き取りツールが追カされません。

[!WARNING] 参カ者や招カ状に関わる書き取り操カは、他の人にメールや通知を送信することがあります。

接続を確認する

まず読み取りアクセスを確認します:

  1. calendar_get_profile を呼び出します。Apple Account の ID とタイムゾーンを確認します。

  2. calendar_list_calendars を呼び出します。期待するカレンダー名が表示されることを確認します。

  3. 読み取り専用アクセスを承した場会、クライアントが変更ツールを表示しないことを確認します。

デプロイメント、シークレットの入カ、OAuth 接続、カレンダーの読み取り成功は、それぞれ独リした状態です。カレンダーの読み取りが成功すれば、Apple の認証情報が機能していることが証明されます。

書き取りアクセスを確認するには、まず Apple Calendar に空の一時カレンダーを作成します。エージェントには、あなたが確認した後にのみ、この制限されたテスを実行するよう依頼します:

  1. 一意のタイル、参カ者なし、繰り返しなし、アラートなしで、未ライのイベントを 1 つ作成します。

  2. イベントを読み取り、現在の ETag を保ちます。

  3. その ETag を使ってタイルのみを変更します。

  4. もう一度イベントを読み取り、返された ETag を使って削除します。

  5. イベントが存在しないことを確認します。

クリーンアップが失敗した場会、正しく なカレンダー、タイル、時刻を記録して、自分でイベントを削除できるようにしてください。デフォルトのカレンダーで書き取りテスをしないでください。

また、エージェントと Apple Calendar MCP をセットアップするの制限された手順をエージェントに与えることもできます。

ツール

ツール

スコープ

目的

calendar_get_profile

calendar:read

設定された iCloud アカウントの ID とデフォルトのタイムゾーンを返します。

calendar_list_calendars

calendar:read

表示されているカレンダー、有効なタイムゾーン、および不透明な ID を一覧表示します。

calendar_search_events

calendar:read

カレンダー全体で制限された時 間範囲を検索します。

calendar_list_events

calendar:read

1 つのカレンダーから制限された時 間範囲を一覧表示します。

calendar_get_event

calendar:read

イベントの詳細と現在の ETag を読み取ります。

calendar_batch_get_events

calendar:read

イベントごとのエラーを含む最マ 20 件のイベントを読み取ります。

calendar_get_availability

calendar:read

イベントの詳細を含まない、結合されたビジー ウィンドウを返します。

calendar_create_event

calendar:write

時 刻指定、終日、繰り返し、招カ、場 所指定、アラート付きのイベントを作成します。

calendar_update_event

calendar:write

1 つの出 現、この出 現以降、または系 列全体を変 更します。

calendar_delete_event

calendar:write

1 つの出 現、この出 現以降、または系 列全体を削 除します。

calendar_respond_to_invitation

calendar:write

招 カを受 託、辞 退、または仮 受 託します。

更新、削除、招カ応答ツールには、最新の ETag が必用です。繰り返しの出 現変 更には、検 索で返された元の recurrenceId も必用です。

時 刻指定の入 力には、Z または明 示的なオフセット付きの RFC 3339 タイムスタンプを使用します。クライアントは timeZone を省 略できます。作 成時 には、カレンダーの公 開された IANA タイムゾーンが使 用され、次に CALENDAR_TIME_ZONE が使 用されます。時 刻指定の出 力には、UTC と現 地の値が含 まれます。

location は表 示される Calendar のフィールドです。structuredLocation では、タイトル、住 所、緯 度、経 度、半 径を追 加できます。検 証済みの座 標により、Apple Calendar のマップ プレビューが有 効になります。座 標を推 測しないでください。

description は Calendar のメモに対 応します。url はイベントの URL フィールドに対 応します。MCP は、無 関係な変 更の際にサポートされていない添 付ファイルとアラーム タイプを保 持しますが、添 付ファイルのアップロード、ダウンロード、変 更は行 いません。生の ICS をインポートすることもありません。

カスタム ドメインを使用する

デフォルトの workers.dev エンドポインとには、ホスト名の設 定は不 要です。カスタム ドメインには、明 示的な許 可リストの設 定が 1 つ必 要です:

  1. Cloudflare で Worker を開きます。

  2. Settings > Domains & Routes > Add > Custom Domain を選 択し、ホスト名を追 加します。

  3. Variables and Secrets で、MCP_HOSTNAME を平 文変 数として追 加します。calendar.example.com などのホスト名のみを入 力します。https://、パス、ポート、認 証情 報を 含 めないでください。

  4. 設 定をデプロイします。

  5. クライアントを再 度 https://<custom-host>/mcp に接 続し、再び認 証を完 了します。

ホスト名は OAuth アイデンティティの一 部です。workers.dev に対 して発 行されたトークンは、カスタム オリジンには移 行しません。

Cloudflare Access を追 加する

組 み込 みの承 認パスワードがデフォルトの認 可ガードです。Cloudflare Access はオプションの多 層防 御です。

Access を追 加する場 合、<hostname>/authorize のみを保 護してください。/me mcp/.well-known/*/oauth/token/oauth/register は MCP クライアントがアクセスできるようにしておいてください。Access が /authorize を保 護していることを確 認したら、EXTERNAL_AUTHORIZATION=true を平 文の Worker 変 数として追 加します。

[!WARNING] EXTERNAL_AUTHORIZATION=true は、外 部ガードが /authorize を保 護している場 合にのみ設 定してください。この設 定は、外 部ガードがアクティブであることを宣 言するものです。

セキュリティ

Worker は、実 行時 にあなたの Apple ユーザーネームとアプリ固 有パスワードを受 け取ります。あなたは自 分の Cloudflare アカウント、デプロイされたソース、Apple、および接 続されたすべての MCP クライアントを信 頼します。Cloudflare アカウントへのアクセスを制 限し、信 頼できるクライアントのみを接 続してください。

APPROVAL_PASSWORD は新 しい承 認を保 護します。このパスワードが設 定されているか、EXTERNAL_AUTHORIZATION が検 証済みの外 部ガードを宣 言している場 合を除 き、承 認ルートはフェイルクローズドになります。ガードを通 かした人 は誰 でも、設 定された Apple Account に対 してクライアントを認 可できます。

Cloudflare の OAuth プロバイダーは、アクセス トークン、リフレッシュ トークン、認 可コード、登 録済みクライアント シークレットをハッシュで保 格します。認 可プ口パティは暗 号 化されます。クライアント名とグラント メタデータはストレージ上 で可 視のま ま残るため、シークレットを 含 めてはな りません。プロバイダーの K V ストレージとクリーンアップのドキュメンテーションを参 照してください。

Worker は、許 可リストに登 録された iCloud CalDAV ホストにのみ、HTTPS で Apple の認 証情 報を送 信します。ツール引 数でアップロード ホストを選 択することはできません。エラーは認 証情 報に似 た値を伏 せます。Worker はツール引 数やイベント ペイロードをログに記 録しません。

ツール結 果には、タイル、メモ、場 所、参 カ者、URL が含 まれる場 合があります。MCP クライアントは、自 社の製 品およびワークスペースのポリシーに基 づいてこのデータを保 持できます。

書 き込 みアクセスは、イベントの作 成、変 更、削 除、招 カへの応 答を対 象とします。ETag はよ り新 しいイベントの上 書 きを防 ぎますが、意 図しない書 き込 みを無 害にすることはできません。無 関係な変 更では、可 能な場 合にサポートされていない Apple プロパティが保 持されます。

この正 準リポジトリ、または変 更をレビューしたフォークからデプロイしてください。リモート MCP サーバーは、所 有 者が新 しいコードをデプロイするとツール カタログを変 更できます。

アクセスを取り消す、またはローテーションする

目標

操作

結果

1つのクライアントを停止する

そのクライアントの設定で切断または削除します。利用可能な場合は失効フローを使用します。

クライアントはその接続の使用を停止します。

新しい承認を停止する

APPROVAL_PASSWORD をローテーションするか、Workerを無効化します。

既存のOAuthトークンは影響を受けません。

すべてのAppleアクセスを直ちに停止する

Workerを無効化し、account.apple.com でそのアプリ固有のパスワードを失効させます。

新しいアプリ固有のパスワードを設定するまで、カレンダー呼び出しは失敗します。

通常のローテーションを行う

新しいAppleアプリ固有のパスワードを作成し、Cloudflareで ICLOUD_APP_PASSWORD を置き換え、読み取り呼び出しを検証してから、古いパスワードを失効させます。

失効前に置き換えを検証するため、ダウンタイムを回避できます。

Apple Accountのパスワードリセット後に復旧する

新しいアプリ固有のパスワードを作成し、Workerのシークレットを置き換えます。

Appleは既に古いアプリ固有のパスワードを失効させています。

侵害を疑う場合は、最初に古いAppleアプリ固有のパスワードを失効させます。次にそれを置き換えてアクセスを検証します。これにより短時間の停止が発生します。

トラブルシューティング

  • 401 まはiCloudパスワードの拒否は、通例、アプリ固有のパスワードが存しないか失効していることを意味します。AppleとCloudflareで作成または置き換えてください。チャットに貼り付けないでください。

  • 書き込みツールがない場合は、通例、クライアントが読み取り専用の許可を持っているか、ツールカタログがキャッシュされていることを意味します。ツールを更新し、必要に応じて切断して再度承認してください。

  • /mcp を拒否するカスタムドメインは、通例、MCP_HOSTNAME が欠落しているか無効です。正確なホスト名を設定して再デプロイしてください。

  • フェイルクローズする承認ページには、APPROVAL_PASSWORD も宣言された外部ガードもありません。/authorize でCloudflare Accessを既に検証していない限り、承認シークレットを追加してください。

ローカルでの開発

bun install
cp .dev.vars.example .dev.vars
bun run test
bun run typecheck
bun run cloudflare:check

.dev.vars はローカルに保持します。bun run deploy でデプロイします。

ライセンス

MIT

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

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

  • Hosted Google Calendar MCP server for AI agents. No self-hosting or Google Cloud setup.

  • 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/nweii/apple-calendar-mcp'

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