caldav-mcp について
caldav-mcp は、CalDAV のカレンダーとタスク操作を AI アシスタントに公開する MCP サーバーです。MCP クライアントから予定やタスクを確認・管理したい人向けで、作成、更新、削除にも対応します。
主な機能
- 01CalDAV サーバーへの接続とカレンダー一覧表示
- 02期間を指定したイベント検索
- 03イベントの作成、更新、削除
- 04タスクの一覧表示とページング・絞り込み
- 05タスクの作成、更新、完了、削除
活用シーン
- 01AI アシスタントで指定期間の予定を確認
- 02カレンダーの会議を作成または編集
- 03期限付きタスクを管理
MCP 対応
MCP クライアントに CalDAV のカレンダーとタスクのツールを公開し、カレンダー、イベント、VTODO の操作を提供します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
npx -y caldav-mcpCALDAV_BASE_URLBase URL of the CalDAV server (e.g. https://caldav.example.com)CALDAV_USERNAMEUsername for CalDAV authenticationCALDAV_PASSWORDシークレットPassword for CalDAV authenticationローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
caldav-mcp
✨ 機能
- CalDAV サーバーに接続する
- カレンダーを一覧表示する
- 指定した期間内のカレンダーイベントを一覧表示する
- カレンダーイベントを作成する
- カレンダーイベントを更新する
- UID を指定してカレンダーイベントを削除する
セットアップ
{
"mcpServers": {
...,
"calendar": {
"command": "npx",
"args": [
"caldav-mcp"
],
"env": {
"CALDAV_BASE_URL": "<CalDAV server URL>",
"CALDAV_USERNAME": "<CalDAV username>",
"CALDAV_PASSWORD": "<CalDAV password>"
}
}
}
}
開発
クイックスタート
自動再読み込みを有効にして、MCP サーバーを開発モードで実行します。
npm run dev
これにより、TypeScript コードがウォッチモードで直接実行され、.env から環境変数が自動的に読み込まれます。
手動ビルド
または、TypeScript を JavaScript にコンパイルして実行できます。
- コンパイル:
npx tsc
- 実行:
node dist/index.js
利用可能なツール
list-calendars
すべてのカレンダーを一覧表示し、名前と絶対 URL の両方を返します。他のツールに渡す calendarUrl には、カレンダーの url を変更せずに指定してください。
パラメーター:なし
戻り値:
- 利用可能なすべてのカレンダーの一覧
list-events
URL で指定したカレンダー内の、開始日から終了日までのすべてのイベントを一覧表示します。
パラメーター:
calendarUrl:stringend:string — 終了日(ISO 8601)start:string — 開始日(ISO 8601)
戻り値:
- 指定された期間内のイベント一覧。各イベントには
uid、summary、start、endが含まれ、descriptionとlocationが含まれる場合もあります。
create-event
URL で指定したカレンダーにイベントを作成します。終日イベントの場合は、wholeDay を true に設定してください。1 日の終日イベントでは、start と end に同じカレンダー日付の日時を指定します。タイムスタンプは同一である必要はありません。
パラメーター:
calendarUrl:stringdescription:string(任意)end:string — 終了日時(ISO 8601)location:string(任意)recurrenceRule:object(任意)byday:string の配列(任意)bymonth:number の配列(任意)bymonthday:number の配列(任意)count:number(任意)freq:enum(DAILY|WEEKLY|MONTHLY|YEARLY)(任意)interval:number(任意)until:string(任意)
start:string — 開始日時(ISO 8601)summary:stringwholeDay:boolean(任意)— 終日イベントとして作成します
戻り値:
- 作成したイベントの一意の ID
update-event
URL で指定したカレンダー内の既存のイベントを更新します。指定したフィールドのみが変更されます。1 日の終日イベントの場合は、wholeDay を true に設定し、start と end に同じカレンダー日を指定してください。
パラメーター:
calendarUrl:stringdescription:string(任意)end:string(任意)location:string(任意)recurrenceRule:object(任意)byday:string の配列(任意)bymonth:number の配列(任意)bymonthday:number の配列(任意)count:number(任意)freq:enum(DAILY|WEEKLY|MONTHLY|YEARLY)(任意)interval:number(任意)until:string(任意)
start:string(任意)summary:string(任意)uid:string — 更新するイベントの一意の識別子(list-events で取得)wholeDay:boolean(任意)— 終日イベントかどうかを更新します
戻り値:
- 更新したイベントの一意の ID
delete-event
URLで指定されたカレンダーのイベントを削除します
Parameters:
calendarUrl: 文字列uid: 文字列 — 削除するイベントの一意の識別子(list-eventsから取得)
Returns:
- イベントが正常に削除された場合の確認メッセージ
list-todos
URLで指定されたカレンダーのタスク(VTODO)を一覧表示します。デフォルトでは、未完了のタスク(NEEDS-ACTIONおよびIN-PROCESS)のみを、手動の順序、次に期限の順で返します。statusを使用すると、完了済み(COMPLETED)またはすべて(ALL)のタスクを含めることができます。また、limit/offsetを使用すると、長いリストをページ分割できます。
Parameters:
calendarUrl: 文字列due_after: 文字列(省略可)— この日時(ISO 8601)以降が期限のタスクのみを対象とします。期限の範囲を設定すると、期限が設定されていないタスクは除外されます。due_before: 文字列(省略可)— この日時(ISO 8601)以前が期限のタスクのみを対象とします。期限の範囲を設定すると、期限が設定されていないタスクは除外されます。limit: 数値(省略可)— 返すタスクの最大数(デフォルト50、最大500)offset: 数値(省略可)— スキップするタスク数(デフォルト0)status: enum(OPEN|ALL|NEEDS-ACTION|COMPLETED|IN-PROCESS|CANCELLED)(省略可)— ステータスで絞り込みます。OPEN(デフォルト)= NEEDS-ACTION + IN-PROCESS、ALL= すべて、または特定のステータス(NEEDS-ACTION、COMPLETED、IN-PROCESS、CANCELLED)を指定します。
Returns:
{ todos, total, limit, offset }オブジェクト。totalはページ分割前の件数です。各todoにはuid、summary、statusが含まれ、due、start、completed、description、locationが含まれる場合もあります。
create-todo
URLで指定されたカレンダーにタスク(VTODO)を作成します。必須項目はsummaryのみで、日付を設定しないタスクも作成できます。期限にはdueを、作業開始日時にはstartを使用します。
Parameters:
calendarUrl: 文字列description: 文字列(省略可)due: 文字列(省略可)— 期限日時(ISO 8601)location: 文字列(省略可)start: 文字列(省略可)— 開始日時(ISO 8601)status: enum(NEEDS-ACTION|COMPLETED|IN-PROCESS|CANCELLED)(省略可)— 省略した場合、デフォルトはNEEDS-ACTIONですsummary: 文字列
Returns:
- 作成したtodoの一意のID
update-todo
URLで指定されたカレンダーの既存のタスク(VTODO)を更新します。指定したフィールドのみが変更されます。タスクを完了にする場合は、complete-todoツールを使用してください。
Parameters:
calendarUrl: 文字列description: 文字列(省略可)due: 文字列(省略可)location: 文字列(省略可)start: 文字列(省略可)status: enum(NEEDS-ACTION|COMPLETED|IN-PROCESS|CANCELLED)(省略可)summary: 文字列(省略可)uid: 文字列 — 更新するtodoの一意の識別子(list-todosから取得)
Returns:
- 更新したtodoの一意のID
complete-todo
タスク(VTODO)を完了としてマークします。ステータスをCOMPLETEDに設定し、完了時刻を記録します。
Parameters:
calendarUrl: 文字列uid: 文字列 — 完了するtodoの一意の識別子(list-todosから取得)
Returns:
- 完了したtodoの一意のID
delete-todo
URLで指定されたカレンダーのタスク(VTODO)を削除します
Parameters:
calendarUrl: 文字列uid: 文字列 — 削除するtodoの一意の識別子(list-todosから取得)
Returns:
- todoが正常に削除された場合の確認メッセージ
ライセンス
MIT
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。