mcpField
I
icloud-calendar-mcp

icloud-calendar-mcp

ローカル
github.com/icloud-calendar-mcp生産性237 週間前に更新

icloud-calendar-mcp について

icloud-calendar-mcp は、CalDAV を通じて iCloud カレンダーに AI アシスタントからアクセスできるようにする MCP サーバーです。Apple のカレンダーをアシスタントから照会・管理したいユーザー向けで、macOS に依存せず JVM 上で動作します。

主な機能

  1. 01iCloud アカウントのカレンダー一覧の取得
  2. 02日付範囲によるイベントの照会
  3. 03イベントの作成・更新・削除
  4. 04繰り返しイベントの単一回または系列全体の編集
  5. 05アプリ用パスワードによる認証

活用シーン

  1. 01アシスタントに今週の予定を確認させる
  2. 02自然言語による会議の作成や日時変更
  3. 03特定の日の予定の時間帯の重複を確認

MCP 対応

本プロジェクトは MCP サーバーであり、カレンダー一覧の取得やイベントの照会・編集のツールを MCP クライアントに提供します。あわせて、カレンダー閲覧用のリソースと、日程調整・変更・重複確認のプロンプトテンプレートを提供します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"org-onekash-icloud-calendar": {
"command": "npx",
"args": [
"-y",
"@icloud-calendar-mcp/server"
],
"env": {
"ICLOUD_USERNAME": "<ICLOUD_USERNAME>",
"ICLOUD_PASSWORD": "<ICLOUD_PASSWORD>"
}
}
}
}
起動コマンドnpx -y @icloud-calendar-mcp/server
設定が必要な環境変数
ICLOUD_USERNAMEYour Apple ID email (e.g., [email protected])
ICLOUD_PASSWORDシークレットApp-specific password for iCloud (not your main Apple ID password)

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npm@icloud-calendar-mcp/server3.2.0

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

iCloud Calendar MCP サーバー

iCloud Calendar MCP サーバー

Tests npm PyPI License MCP Registry Security

AI アシスタントが CalDAV 経由で iCloud Calendar にアクセスできるようにする MCP(Model Context Protocol)サーバーです。OWASP MCP Top 10 に準拠したセキュリティ制御を備えています。

注意

メインの Apple ID パスワードは絶対に使用しないでください。 このサーバーにはアプリ用パスワードが必要です。アプリ用パスワードは Apple ID に影響を与えることなく個別に無効化できます。

このサーバーの特長

  • 移植性の高い CalDAV。 JVM が動作する環境であればどこでも実行できます。macOS、AppleScript、Calendar.app に依存しません。
  • 永続的なイベントハンドル。 get_events と create_event は、セッション間やプロセスの再起動後もイベントを参照できる不透明な handle を返します。そのため、イベントの編集や削除のたびに一覧を再取得する必要はありません。
  • 正確な繰り返し処理。 範囲内の各発生につき 1 件の結果を返します。また、単一の発生分、この発生分と今後の分、またはシリーズ全体を編集・削除できます。
  • 制限付きの応答。 日付範囲とイベント数に上限を設けており、応答を黙って切り詰めるのではなく、明確で構造化されたエラーを返します。
  • 専用のテストスイートにより、OWASP MCP Top 10 に準拠したセキュリティを実現しています。
  • MCP Registry、npm、PyPI で公開されています。

機能

MCP ツール
ツール説明読み取り専用破壊的操作
list_calendarsiCloud アカウントのすべてのカレンダーを一覧表示しますはいいいえ
get_eventsカレンダーから指定した日付範囲内のイベントを取得しますはいいいえ
create_event新しいカレンダーイベントを作成しますいいえいいえ
update_eventイベントを更新します(シリーズ全体または単一の発生分)いいえいいえ
delete_eventイベントを削除します(シリーズ全体または単一の発生分)いいえはい
MCP リソース
リソース説明
calendar://calendars利用可能なカレンダーを参照します
MCP プロンプト

ユーザーが開始するテンプレートで、複数ステップのタスクを Claude が進めるためのガイドとして使用します。

プロンプト説明
schedule_meetingタイトル、参加者、所要時間を基にイベントの下書きを作成し、その後イベントを作成します
reschedule既存のイベントを検索してから編集し、日時を変更します
find_conflictsある日のイベントを一覧表示し、時間帯の重複を報告します
セキュリティ機能
  • 認証情報の保護 - 環境変数のみを使用し、コードや設定ファイルには保存しません
  • 入力の検証 - SSRF 対策を含め、すべてのパラメーターを検証します
  • レート制限 - MCP の仕様に基づき、読み取りは 1 分あたり 60 回、書き込みは 1 分あたり 20 回に制限します
  • 安全なエラー処理 - エラーメッセージから機密データが漏えいしません
  • OWASP MCP Top 10 への準拠 - 主要なリスクすべてを対象とする 282 件のセキュリティテスト
  • ReDoS 対策 - すべての正規表現パターンを壊滅的なバックトラッキングに対してテストしています
  • Unicode セキュリティ - ホモグリフ攻撃やエンコーディング攻撃への対策

クイックスタート

前提条件
インストール

お好みのインストール方法を選択してください。

重要

どの方法でも、同じ Java ビルドが実行されます。npx と uvx を使用する場合も含め、Java 21 以降が PATH に設定されている必要があります。 これらのラッパーは JAR をダウンロードして起動するものであり、JVM に代わるものではありません。

オプション 1:npm(推奨)
npx @icloud-calendar-mcp/server
オプション 2:Python(uvx)
uvx icloud-calendar-mcp
オプション 3:JAR を直接使用
# Download the latest release (version-agnostic name, always resolves)
curl -LO https://github.com/icloud-calendar-mcp/icloud-calendar-mcp/releases/latest/download/icloud-calendar-mcp-all.jar

# Run
java -jar icloud-calendar-mcp-all.jar
オプション 4:ソースからビルド
git clone https://github.com/icloud-calendar-mcp/icloud-calendar-mcp.git
cd icloud-calendar-mcp
./gradlew fatJar
java -jar build/libs/icloud-calendar-mcp-*-all.jar
設定

iCloud の認証情報を環境変数として設定します。

export ICLOUD_USERNAME="[email protected]"
export ICLOUD_PASSWORD="your-app-specific-password"

セキュリティに関する注意:メインの Apple ID パスワードではなく、App 用パスワードを使用してください。


Claude Desktop との連携

Claude Desktop の設定に追加します。

プラットフォーム設定ファイルのパス
macOS~/Library/Application Support/Claude/claude_desktop_config.json
Linux~/.config/claude/claude_desktop_config.json
Windows%APPDATA%\Claude\claude_desktop_config.json
npm を使用
{
  "mcpServers": {
    "icloud-calendar": {
      "command": "npx",
      "args": ["@icloud-calendar-mcp/server"],
      "env": {
        "ICLOUD_USERNAME": "[email protected]",
        "ICLOUD_PASSWORD": "your-app-specific-password"
      }
    }
  }
}
uvx を使用(Python)
{
  "mcpServers": {
    "icloud-calendar": {
      "command": "uvx",
      "args": ["icloud-calendar-mcp"],
      "env": {
        "ICLOUD_USERNAME": "[email protected]",
        "ICLOUD_PASSWORD": "your-app-specific-password"
      }
    }
  }
}
JAR を直接使用
{
  "mcpServers": {
    "icloud-calendar": {
      "command": "java",
      "args": ["-jar", "/path/to/icloud-calendar-mcp-all.jar"],
      "env": {
        "ICLOUD_USERNAME": "[email protected]",
        "ICLOUD_PASSWORD": "your-app-specific-password"
      }
    }
  }
}

使用例

設定が完了したら、Claude に次のように尋ねることができます。

  • 「今週のカレンダーには何が入っていますか?」
  • 「明日の午後 2 時に John との会議を作成して」
  • 「すべてのカレンダーを表示して」
  • 「金曜日の歯医者の予約を削除して」
  • 「午後 3 時の会議を午後 4 時に移動して」
ツールのパラメーター
list_calendars

パラメーターは必要ありません。

get_events
パラメーター型必須説明
calendar_idstringはいカレンダー識別子(list_calendars から取得)
start_datestringはい開始日(YYYY-MM-DD)
end_datestringはい終了日(YYYY-MM-DD)

知っておくべき動作:

  • UTC の日付境界。 start_date と end_date は、UTC の暦日全体を指定します。範囲は start_date の UTC 00:00 から end_date の UTC 終了時までです。時刻指定のあるイベントでは、UTC の時点を示す startTime/endTime が返されます。終日イベントでは、通常の YYYY-MM-DD が返されます。別のタイムゾーンでのユーザーの 1 日を判定するには、前後にそれぞれ 1 日分余分にリクエストし、開始時刻をそのタイムゾーンに変換したときに対象の日付となるイベントを残してください。終日イベントはタイムゾーンに依存しない日付であるため、変換は不要です。
  • 上限。 範囲は 366 日までで、end_date を start_date より前にすることはできません。応答は 1000 件までです。また、展開すると上限を超える単一の繰り返しシリーズは拒否されます。上限に達した場合は、1 週間または 1 か月ごとにクエリしてください。
  • 繰り返しシリーズ。 範囲内の各回が個別の結果として返され、それぞれ固有の handle と、インスタンスを識別する recurrenceId が付与されます。
  • 書き込み後の読み取り。 iCloud は即時反映を保証しないため、作成直後のイベントが次の get_events で短時間表示されないことがあります。これは CDN のインデックス作成の遅延であり、削除されたわけではないため、再作成しないでください。

各結果には、uid、handle、summary、isAllDay のほか、時刻指定のあるイベントでは startTime/endTime、終日イベントでは startDate/endDate が含まれます。また、設定されている場合は description、location、rrule、recurrenceId、status、url、categories、priority、organizer、attendeeCount も含まれます。

create_event
パラメーター型必須説明
calendar_idstringはい対象のカレンダー
titlestringはいイベントのタイトル
start_timestring条件付き時刻指定イベントの ISO 8601 日時。タイムゾーン情報のない値(2026-01-15T09:00:00)は、timezone が設定されていない場合、UTC として解釈されます。Z またはオフセット付きの値は絶対時刻を表し、timezone より優先されます
end_timestring条件付き時刻指定イベントの ISO 8601 日時(start_time と同じルール)
start_datestring条件付き終日イベントの開始日 YYYY-MM-DD
end_datestring条件付き終日イベントの終了日 YYYY-MM-DD(当日を含む)
is_all_daybooleanいいえ終日イベントのフラグ
descriptionstringいいえイベントの説明
locationstringいいえイベントの場所
timezonestringいいえ時刻指定イベントの IANA タイムゾーン(例:America/New_York)
end_timezonestringいいえ開始時と異なる場合の終了時の IANA タイムゾーン(例:フライト)。省略時は timezone が使用されます
rrulestringいいえ繰り返しルール(例:FREQ=WEEKLY;BYDAY=MO)
rdatesstring[]いいえ追加の発生日(RFC 5545 RDATE)
exdatesstring[]いいえ除外する発生日(RFC 5545 EXDATE)
alarmsobject[]いいえイベントのリマインダー(アラームを参照)
update_event

渡したフィールドのみが変更されます。

パラメーター型必須説明
event_idstringはいイベントへの参照です。get_events/create_event から取得した不透明な handle を優先してください。セッション中に以前取得したイベントであれば、UID のみでも使用できます(イベントの参照を参照)
titlestringいいえ新しいタイトル
start_timestringいいえ新しい開始時刻(ISO 8601、作成時と同じルール)
end_timestringいいえ新しい終了時刻(ISO 8601)
start_datestringいいえ終日イベントの新しい開始日(YYYY-MM-DD)
end_datestringいいえ終日イベントの新しい終了日(YYYY-MM-DD)
is_all_daybooleanいいえ終日イベントに変更
descriptionstringいいえ新しい説明
locationstringいいえ新しい場所
timezonestringいいえIANA タイムゾーン(例:America/New_York)
end_timezonestringいいえ開始時と異なる場合の終了時の IANA タイムゾーン
rrulestringいいえ繰り返しルール
rdatesstring[]いいえRDATE を置き換えます(省略すると維持し、空の配列を指定すると消去します)
exdatesstring[]いいえEXDATE を置き換えます(省略すると維持し、空の配列を指定すると消去します)
alarmsobject[]いいえリマインダーを置き換えます(省略すると維持し、空の配列を指定すると消去し、リストを指定すると置き換えます。アラームを参照)
scopestring条件付き繰り返しイベントの編集が適用される発生回(繰り返しイベントの編集を参照)。handle がシリーズ内の個別の発生回を指している場合は必須です
delete_event
パラメーター型必須説明
event_idstringはいイベントへの参照です。不透明な handle を優先してください。セッション中に以前取得したイベントであれば、UID のみでも使用できます
scopestring条件付き繰り返しイベントの削除で削除される発生回(繰り返しイベントの編集を参照)。handle がシリーズ内の個別の発生回を指している場合は必須です
イベントの参照

get_events と create_event は、各イベントについて uid と不透明な handle の2つの識別子を返します。update_event と delete_event には handle を渡してください。handle はそれだけで完結しており、新しいプロセスからでも使用できるため、通常は get_events(または create_event)でハンドルを取得し、それを使って update_event/delete_event を実行します。セッションをまたぐ追加の検索手順は不要です。

uid のみを渡すこともできますが、同じセッション内で以前に取得したイベントに限られ、短期間のインメモリキャッシュを通じて解決されます。UID によるステートレスなサーバー側検索には対応していません。iCloud は CalDAV の calendar-query UID prop-filter を拒否し(HTTP 412)、フィルターを指定しないクエリではカレンダー全体が返されるためです。handle の使用を推奨します。

ハンドルにはイベントの ETag が含まれています。ハンドルの発行後にイベントが別の場所で変更されていた場合、新しいバージョンを上書きせず、編集は競合として報告されます。新しいハンドルを取得するには get_events を再実行してから、もう一度試してください。成功すると、update_event は新しい ETag を含む更新済みのハンドルを返すため、編集を続ける場合は次の操作にそのハンドルを使用してください。

繰り返しイベントの編集

get_events は、繰り返しイベントの各回について、それぞれ固有の handle を持つ結果を1件ずつ返します。特定の回のハンドルを編集または削除する場合は、scope を設定してください。

  • this_occurrence:その回のみ変更またはキャンセルします。
  • this_and_future:その回と、それ以降のすべての回を変更します。
  • all_events:シリーズ全体を変更します。

ハンドルがシリーズの特定の回を指している場合、scope の指定が必須です。指定しないと操作は拒否されるため、1回のみの編集で誤ってシリーズ全体が変更されることはありません。単独のイベントでは scope を省略してください。rrule、rdates、exdates は this_occurrence または this_and_future と併用できません。

アラーム

create_event と update_event では、alarms 配列を指定できます。各項目はオブジェクトです。

フィールド必須説明
triggerはい相対期間(-PT15M、-P1D)または UTC の絶対時刻(20260115T093000Z)
actionいいえDISPLAY(デフォルト)、AUDIO、または EMAIL
descriptionいいえアラームのテキスト(DISPLAY の場合、デフォルトは "Reminder")
summaryいいえ件名。EMAIL の場合のみ
repeat_countいいえ繰り返し回数
repeat_durationいいえ繰り返しの間隔(RFC 5545 の期間)

update_event で既存のアラームを維持するには alarms を省略し、削除するには空の配列を渡し、置き換えるにはリストを渡してください。


トラブルシューティング

新しいイベントがすぐに表示されません。 iCloud では即時に表示される保証がないため、作成直後のイベントは、次の get_events の結果にしばらく表示されない場合があります(CDN のインデックス作成の遅延)。create_event の成功レスポンスが確定情報です。イベントを再作成しないでください。

get_events でサイズまたは件数のエラーが返されます。 範囲が広すぎます。1週間または1か月ずつクエリしてください。レスポンスの上限は1000件です。

認証に失敗します。 Apple ID のパスワードではなくアプリ用パスワードを使用し、ICLOUD_USERNAME には iCloud のメールアドレス全体を設定してください。

どの calendar_id を使えばよいかわかりません。 list_calendars を呼び出し、使用するカレンダーの id を指定してください。

繰り返しイベントの編集が拒否されたか、すべての回が変更されました。 scope を設定してください(繰り返しイベントの編集を参照)。特定の回のハンドルには this_occurrence、this_and_future、または all_events が必要です。

タイムゾーンによって時刻がずれて見えます。 get_events は UTC の日境界を使用します(get_eventsを参照)。時刻指定のイベントを作成する際は timezone を渡し、現地の日付を解決するには追加日を含める方法を使用してください。


セキュリティ

このサーバーは、OWASP MCP Top 10 のガイドラインに従い、セキュリティを最優先に設計されています。

プライバシー

サーバーが通信するのは、マシン(STDIO 経由)と iCloud(caldav.icloud.com)のみです。テレメトリーはなく、カレンダーデータがほかの場所に送信されることもありません。認証情報は環境変数から取得され、ログに記録されることはありません。

セキュリティ制御
制御実装
認証情報の保存環境変数のみを使用し、記録も公開もしません
入力検証すべての入力(カレンダー ID、日付、時刻、テキストフィールド)を検証します
SSRF 保護内部 IP、localhost、危険な URI スキームをブロックします
レート制限スライディングウィンドウ:読み取りは毎分 60 回、書き込みは毎分 20 回
エラー処理エラーからパスワード、トークン、パス、メールアドレスをサニタイズします
インジェクション防止ICS コンテンツを適切にエスケープし、コマンドインジェクションをテスト済みです
ETag の正規化RFC 7232 に準拠し、引用符、W/ プレフィックス、XML エンティティを取り除きます
Content-Length ガードバッファリング前に、サイズ超過のレスポンスを早期に拒否します
サーキットブレーカー自動復旧により、障害の連鎖を防ぎます
監査ログCUD 操作を MCP ロギングプロトコル(MCP08)経由で記録します
ReDoS 保護すべての正規表現パターンについて、壊滅的なバックトラッキングが発生しないことをテストしています
Unicode セキュリティ異体字、正規化、エンコーディングによるバイパスを防ぎます
OWASP MCP Top 10 の対応状況
リスク対策テスト数
MCP01:トークン管理の不備ログ/エラー内の認証情報をマスキングし、安全に保存14
MCP02:権限昇格ツールセットを固定し、動的登録を行わない5
MCP03:ツール引数のインジェクション入力検証、パラメーター化された操作8
MCP04:機密データの漏えいエラーのサニタイズ、認証情報のマスキング10
MCP05:コマンドインジェクション入力を実行せず、データとして扱う3
MCP06:プロンプトインジェクション悪意のあるテキストを解釈せず、データとして保存する3
MCP08:安全でないロギングレート制限、機密データのサニタイズ31
MCP09:リソース枯渇レート制限、入力サイズ制限、DoS 保護25
MCP10:コンテキストの過剰共有状態を分離し、リクエスト間のデータ漏えいを防止3

セキュリティに関する詳細なドキュメントと脆弱性の開示手順については、SECURITY.md を参照してください。


テスト

テストは、MCP サーバーモジュールとベンダー提供の icaldav-core iCalendar ライブラリの 2 か所にあります。どちらも次のコマンドで実行できます。

./gradlew test
テストカバレッジ(MCP サーバー)
カテゴリテスト数説明
セキュリティ282敵対的な入力、OWASP MCP Top 10、ReDoS、Unicode
CalDAV プロトコル181XML 解析、HTTP クライアント、モデル、ETag の正規化
ICS 形式150RFC 5545 の解析、構築、パッチ適用
エラー処理56安全なエラーレスポンス、認証情報のサニタイズ
統合45エンドツーエンドのツール、MCP 仕様への準拠、アノテーション
入力検証44すべてのパラメーター検証ルール
サービスレイヤー26カレンダー操作、キャッシュ
レート制限18同時アクセス、ウィンドウのリセット
キャンセル12操作のキャンセル、クリーンアップ
ロギング9MCP ロギングへの準拠
進捗9進捗の報告
E2E11ライブ CalDAV とエンドツーエンドの統合
セキュリティテストのカテゴリ
カテゴリテスト数対象範囲
敵対的な入力53SQL/NoSQL インジェクション、XSS、パストラバーサル
ICS パッチャーのセキュリティ43CRLF インジェクション、プロパティインジェクション、エンコーディング攻撃
Unicode のセキュリティ38ホモグリフ、正規化、RTL オーバーライド
ロガーのセキュリティ31ログインジェクション、認証情報のサニタイズ
OWASP MCP のリスク29MCP01-10 固有の攻撃ベクトル
進行状況のセキュリティ27トークン列挙、インジェクション
ReDoS 対策25壊滅的なバックトラッキング、リソース枯渇
キャンセルのセキュリティ22リプレイ攻撃、競合状態
認証情報のセキュリティ14トークンのマスキング、安全な保管
特定のテストの実行
# All tests
./gradlew test

# Security tests only
./gradlew test --tests "*SecurityTest*"
./gradlew test --tests "AdversarialTest"

# OWASP MCP specific tests
./gradlew test --tests "OwaspMcpSecurityTest"

# Unicode security tests
./gradlew test --tests "UnicodeSecurityTest"

# ReDoS protection tests
./gradlew test --tests "ReDoSSecurityTest"

# CalDAV tests
./gradlew test --tests "*CalDav*"

# ICS tests
./gradlew test --tests "*Ics*"

アーキテクチャ

+------------------------------------------------------------------+
|                    MCP Server (STDIO Transport)                    |
|                                                                    |
|  +----------------+  +----------------+  +----------------------+  |
|  | Rate Limiter   |  |   Input        |  |  Secure Error        |  |
|  | 60r/20w/min    |  |  Validator     |  |  Handler             |  |
|  +----------------+  +----------------+  +----------------------+  |
|                                                                    |
|  +----------------+  +----------------+  +----------------------+  |
|  | MCP Logger     |  | Cancellation   |  |  Progress            |  |
|  | (RFC 5424)     |  | Manager        |  |  Reporter            |  |
|  +----------------+  +----------------+  +----------------------+  |
|                                                                    |
|  Tools: list_calendars | get_events | create_event |               |
|         update_event | delete_event                                |
|                                                                    |
|  Resources: calendar://calendars                                   |
+------------------------------------------------------------------+
                              |
                              v
+------------------------------------------------------------------+
|                      CalendarService                               |
|  Orchestrates CalDAV operations, caches calendar metadata          |
+------------------------------------------------------------------+
                              |
                              v
+------------------------------------------------------------------+
|                      CalDAV Client Layer                           |
|                                                                    |
|  +-------------------+  +-------------------+  +----------------+  |
|  | OkHttpCalDav      |  |  IcsParser        |  |  IcsBuilder    |  |
|  | Client            |  |  (icaldav-core)   |  |  (icaldav-core)|  |
|  +-------------------+  +-------------------+  +----------------+  |
|                                                                    |
|  +-------------------+  +-------------------+  +----------------+  |
|  | ICloudXml         |  |  IcsPatcher       |  |  EtagUtils     |  |
|  | Parser            |  |  (event edits)    |  |  (RFC 7232)    |  |
|  +-------------------+  +-------------------+  +----------------+  |
|                                                                    |
|  +-------------------+                                             |
|  | Credential        |                                             |
|  | Manager           |                                             |
|  +-------------------+                                             |
+------------------------------------------------------------------+
                              |
                              v
+------------------------------------------------------------------+
|                    iCloud CalDAV API                               |
|                    caldav.icloud.com                               |
+------------------------------------------------------------------+

開発

ビルド
# Build
./gradlew build

# Build fat JAR
./gradlew fatJar

# Run tests
./gradlew test

# Clean build
./gradlew clean build
プロジェクト構成
src/main/kotlin/org/onekash/mcp/calendar/
├── Main.kt                 # MCP server entry point
├── caldav/                 # CalDAV protocol implementation
│   ├── CalDavClient.kt     # Client interface
│   ├── CalDavModels.kt     # Domain models
│   ├── OkHttpCalDavClient.kt
│   ├── ICloudXmlParser.kt
│   └── EtagUtils.kt        # RFC 7232 ETag normalization
├── ics/                    # ICS format handling (via icaldav-core)
│   ├── IcsParser.kt        # Parse iCalendar data
│   ├── IcsBuilder.kt       # Generate iCalendar data
│   └── IcsPatcher.kt       # Patch existing events (CRLF-safe)
├── service/                # Business logic
│   └── CalendarService.kt  # CalDAV orchestration + event cache
├── security/               # Security controls
│   └── CredentialManager.kt
├── validation/             # Input validation
│   └── InputValidator.kt
├── error/                  # Error handling
│   └── SecureErrorHandler.kt
├── ratelimit/              # Rate limiting
│   └── RateLimiter.kt
├── logging/                # MCP logging
│   └── McpLogger.kt
├── progress/               # Progress reporting
│   └── ProgressReporter.kt
└── cancellation/           # Operation cancellation
    └── CancellationManager.kt
MCP Inspector を使用したテスト
ICLOUD_USERNAME="[email protected]" \
ICLOUD_PASSWORD="test-app-password" \
npx @mcp-use/inspector java -jar build/libs/icloud-calendar-mcp-*-all.jar

貢献

皆さまからの貢献を歓迎します!ガイドラインについては、CONTRIBUTING.md をご覧ください。

セキュリティ上の問題

セキュリティ脆弱性については、責任ある開示プロセスに関する SECURITY.md をご覧ください。セキュリティ脆弱性について、公開の Issue を作成しないでください。


ライセンス

このプロジェクトは Apache License 2.0 の下でライセンスされています。詳細は LICENSE ファイルをご覧ください。


謝辞

  • Anthropic による Model Context Protocol
  • Anthropic と JetBrains による MCP Kotlin SDK
  • 低レベルの ICS 解析に使用している ical4j(同梱の icaldav-core ライブラリ経由)
  • HTTP クライアントに使用している OkHttp
  • セキュリティガイダンスに使用している OWASP MCP Top 10

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。