dav-mcp について
dav-mcp は、CalDAV、CardDAV、VTODO の各プロトコルを通じて AI エージェントにカレンダー、連絡先、タスクの管理機能を提供する MCP サーバーです。イベント、連絡先、ToDo の作成・取得・更新・削除をカバーする 27 のツールを備え、RFC 4791 および RFC 6352 に準拠したサーバーで利用できます。
主な機能
- 01カレンダー、連絡先、タスクにわたる 27 のツール
- 02CalDAV イベントの作成・取得・更新・削除
- 03CardDAV 連絡先の管理とフィルター検索
- 04ステータスや期限による VTODO タスク管理
- 05クライアント側での空き時間計算
- 06Basic、Digest、OAuth の認証方式
活用シーン
- 01AI アシスタントによる予定の確認と会議の登録
- 02n8n ワークフローでの連絡先やタスクの条件検索
- 03完了済みタスクの定期的な整理
MCP 対応
dav-mcp 自体が MCP サーバーとして、カレンダー、連絡先、タスクに関するツールを MCP クライアントに公開します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
npx -y dav-mcpCALDAV_SERVER_URLBase URL of your CalDAV/CardDAV server (e.g. https://example.com/dav.php/)CALDAV_USERNAMEUsername for DAV server authenticationCALDAV_PASSWORDシークレットPassword or app-specific password for DAV server authenticationAUTH_METHODシークレットAuthentication method, case-insensitive: 'Basic' (default; switches to Digest by itself when the server only offers Digest), 'Digest' (Digest-only servers without ever sending the password) or 'OAuth' for GoogleGOOGLE_SERVER_URLGoogle CalDAV endpoint; required when AUTH_METHOD=oauth2GOOGLE_USERGoogle account email; required when AUTH_METHOD=oauth2GOOGLE_CLIENT_IDOAuth2 client ID; required when AUTH_METHOD=oauth2GOOGLE_CLIENT_SECRETシークレットOAuth2 client secret; required when AUTH_METHOD=oauth2GOOGLE_REFRESH_TOKENシークレットOAuth2 refresh token; required when AUTH_METHOD=oauth2GOOGLE_TOKEN_URLシークレットOAuth2 token endpoint for AUTH_METHOD=oauth2 (default: https://oauth2.googleapis.com/token)ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ツール
27掲載時のツール一覧 · 3 週間前に更新
このツールにパラメーターはありません。
詳細
dav-mcp
AI エージェントに組織化の力を与えましょう — カレンダー、連絡先、タスクを管理する、オーケストレーションを担うアシスタントへと変身させます。
CalDAV、CardDAV、VTODO プロトコルに対応する、実運用向けの27個のツールを搭載しています。
クイックスタート
ワンクリックインストール(Claude Desktop)
- 最新リリースから
dav-mcp-<version>.mcpbをダウンロードします。4.1.2以降のリリースにはこのファイルが含まれています。 - Claude Desktop(macOSまたはWindows)で開きます。Claudeにインストールダイアログが表示されます。
- サーバーのURL、ユーザー名、パスワードを入力します。パスワードはシークレットとして保存されます。サーバーで
Digestが必要な場合を除き、認証方式はBasicのままにしてください。
.mcpbファイルはMCP Bundleです。依存関係を含むサーバーが同梱されているため、Node.jsもnpxもインストールする必要はありません。
Claude Desktop / Cursor(ローカル)
MCP設定ファイルに追加します。
{
"mcpServers": {
"dav-mcp": {
"command": "npx",
"args": ["-y", "dav-mcp"],
"env": {
"CALDAV_SERVER_URL": "https://dav.example.com",
"CALDAV_USERNAME": "your_username",
"CALDAV_PASSWORD": "your_password"
}
}
}
}
設定ファイルの場所:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json - Linux:
~/.config/Claude/claude_desktop_config.json
設定を追加した後、Claude Desktopを再起動してください。
n8n(リモートHTTP)
HTTPサーバーを起動します。
CALDAV_SERVER_URL=https://dav.example.com \
CALDAV_USERNAME=your_username \
CALDAV_PASSWORD=your_password \
BEARER_TOKEN=your-secret-token \
npx dav-mcp --http
次に、n8nで以下を行います。
- AI Agentノードを追加します
- MCP Client Toolノードを追加し、AI Agentに接続します
- 以下を設定します。
- MCP Endpoint:
http://localhost:3000/mcp - Authentication:Bearer
- Token:your-secret-token
- MCP Endpoint:
カスタムポート:
npx dav-mcp --http --port=8080
Docker
公開済みのイメージを取得します(distroless、root以外のユーザーで実行、シェルなし)。
docker run -d --name dav-mcp -p 3000:3000 --env-file .env \
ghcr.io/philflowio/dav-mcp:latest
タグ:latest、正確なリリース番号(5.0.0)、マイナーバージョン系列(5.0)。
別のポートで待ち受けるにはPORTを設定します。ヘルスチェックもそれに従います。
または、ソースからビルドします。
git clone https://github.com/PhilflowIO/dav-mcp.git
cd dav-mcp
cp .env.example .env
# Edit .env with your credentials
docker-compose up
オーケストレーション
ツールが不完全だとAIはその場しのぎの対応を強いられますが、包括的なツールがあれば、すべてのコンポーネントに対して正確な操作を実行できます。
| 機能 | dav-mcp | ほとんどのMCP |
|---|---|---|
| カレンダー管理 | 完全なCRUD(12個のツール) | 作成+一覧表示のみ(2~3個のツール) |
| 連絡先管理 | 完全なCardDAV(8個のツール) | まったく対応していない場合が多い |
| タスク管理 | 完全なVTODO対応(7個のツール) | 含まれていることはまれ |
| フィールド単位の更新 | すべてのRFCプロパティ+カスタムフィールド | 対応していることはまれ |
| 空き時間/予定あり | すべてのサーバーで動作(クライアント側) | ネイティブREPORT。ほとんどのサーバーでは未対応 |
| サーバー側フィルタリング | 効率的なクエリ | すべてのデータをダンプ |
| マルチプロバイダー対応 | あらゆるCalDAV/CardDAVサーバー | 対応プロバイダーに制限あり |
| ツール合計数 | 27個のツール | 2~6個のツール |
利用可能なツール(合計27個)
CalDAVツール(12個)
- list_calendars - 利用可能なすべてのカレンダーを一覧表示
- list_events - すべてのイベントを一覧表示(絞り込み検索にはcalendar_queryを使用)
- create_event - 新しいカレンダーイベントを作成
- update_event - 推奨:任意のイベントフィールド(SUMMARY、LOCATION、STATUS、カスタムX-*プロパティ)を更新。start_date/end_date/all_dayを使ってイベントを移動または変換
- update_event_raw - 生のiCalデータでイベントを更新(上級者向け)
- delete_event - イベントを完全に削除
- calendar_query - 推奨:テキスト、日付範囲、場所でイベントを効率的に検索・絞り込み
- make_calendar - 新しいカレンダーコレクションを作成。必要に応じてタイムゾーンも指定できます(
Europe/BerlinなどのIANA名。VTIMEZONEとして送信) - update_calendar - カレンダーのプロパティ(表示名、説明、色、タイムゾーン)を更新
- delete_calendar - カレンダーとそのすべてのイベントを削除
- calendar_multi_get - URLを指定して複数のイベントを一括取得
- freebusy_query - 範囲を指定して空き時間と予定ありの時間を調べます(「いつ空いていますか?」)。クライアント側で計算されます
CardDAV ツール(8 個)
- list_addressbooks - 利用可能なすべてのアドレス帳を一覧表示します
- list_contacts - すべての連絡先を一覧表示します(絞り込み検索には addressbook_query を使用してください)
- create_contact - 新しい連絡先(vCard)を作成します
- update_contact - 推奨:連絡先の任意のフィールド(FN、EMAIL、TEL、ORG、ADR、カスタム X-* プロパティ)を更新します
- update_contact_raw - 生の vCard データで連絡先を更新します(上級者向け)
- delete_contact - 連絡先を完全に削除します
- addressbook_query - 推奨:名前、メールアドレス、または組織で連絡先を効率的に検索・絞り込みます
- addressbook_multi_get - URL を指定して複数の特定の連絡先を一括取得します
VTODO ツール(7 個)
- list_todos - すべての ToDo/タスクを一覧表示します(絞り込み検索には todo_query を使用してください)
- create_todo - 期限日、優先度、ステータスを任意で指定して新しい ToDo/タスクを作成します
- update_todo - 推奨:ToDo の任意のフィールド(SUMMARY、STATUS、PRIORITY、DUE、PERCENT-COMPLETE、カスタム X-* プロパティ)を更新します
- update_todo_raw - 生の VTODO iCal データで ToDo を更新します(上級者向け)
- delete_todo - ToDo/タスクを完全に削除します
- todo_query - 推奨:ステータス/期限日で ToDo を効率的に検索・絞り込みます
- todo_multi_get - URL を指定して複数の特定の ToDo を一括取得します
タイムゾーン
タイムゾーンを指定せずに作成されたイベントや ToDo(DTSTART:20261010T090000 のような「フローティング」時刻や終日の日付)は、CalDAV の仕様(RFC 4791 §9.9)に従って、そのカレンダーのタイムゾーンで読み取られます。これは make_calendar/update_calendar で設定され、list_calendars で確認できます。タイムゾーンが設定されていないカレンダーは、dav-mcp が実行されているタイムゾーンで読み取られます。これは TZ 環境変数(たとえば Docker または HTTP デプロイメントでの TZ=Europe/Berlin)で指定され、指定がない場合はシステムのタイムゾーンが使われます。作成ツールや更新ツールにタイムゾーンなしで指定した時刻も同様に読み取られ、タイムゾーンなしで保存されたイベントは、移動後もタイムゾーンなしのままです。freebusy_query は空き時間枠をカレンダーのタイムゾーンで表示し、そのタイムゾーン名も示します。
実際の活用例
n8n 自動化ワークフロー
- 会議の管理:「金曜日の会議をすべて表示して」→ 日付フィルター付きの calendar_query が該当するイベントのみを返します
- 連絡先の検索:「Google の社員を全員探して」→ 組織フィルター付きの addressbook_query が該当する連絡先を効率的に見つけます
- タスクのレポート:「期限超過の優先度が高いタスクを表示して」→ フィルター付きの todo_query が該当する結果を返します
- 定期的な整理:毎日の cron ジョブで、対象を絞ったクエリを使って完了済みタスクを削除します
Claude Desktop との連携
- イベントのすばやい作成:「明日の午後 2 時にチーム会議を作成して」→ create_event がすぐに実行されます
- 連絡先の検索:「Sarah のメールアドレスは?」→ 名前フィルター付きの addressbook_query が連絡先を見つけます
- カレンダーの概要:「来週のカレンダーには何が入っている?」→ 期間を指定した calendar_query がイベントを表示します
- カレンダーの管理:「Project Luna という新しいカレンダーを作成して」→ make_calendar がコレクションを作成します
主要なプロバイダーすべてで利用可能
RFC 4791 および RFC 6352 に準拠する CalDAV/CardDAV サーバーであれば、どれでも利用できます。
- Nextcloud - 完全対応
- Baikal - 完全対応
- Radicale - 完全対応
- iCloud - アプリ専用パスワードで利用可能
- RFC 準拠のサーバー - 標準プロトコルに対応
認証
AUTH_METHOD は、dav-mcp のログイン方法を選択します(大文字と小文字は区別されません)。
AUTH_METHOD | 認証情報 | 使用対象 |
|---|---|---|
Basic(デフォルト) | CALDAV_USERNAME、CALDAV_PASSWORD | ほとんどすべてのサーバー。サーバーが Digest のみを提供する場合(たとえば、Digest に設定された Baikal)、dav-mcp は自動的に Digest に切り替えます。設定は不要です。 |
Digest | CALDAV_USERNAME、CALDAV_PASSWORD | Digest(RFC 7616)のみを受け付けるサーバー。Basic で自動的に切り替わる場合は、まずパスワードを Basic 形式で一度送信してから拒否されますが、Digest ではパスワードを送信しません。HTTPS でない接続ではこちらを使用してください。 |
OAuth(または OAuth2) | GOOGLE_*、詳細は以下 | Google Calendar |
dav-mcp には Node.js 22 以降が必要です。設定が間違っている場合(不明な AUTH_METHOD 値や、選択した方式に必要な認証情報が不足している場合)、Basic にフォールバックせず、サーバーの起動が停止します。
Google Calendar(OAuth2)
Google Calendar では、OAuth2 認証を使用してください。
{
"mcpServers": {
"dav-mcp": {
"command": "npx",
"args": ["-y", "dav-mcp"],
"env": {
"AUTH_METHOD": "OAuth",
"GOOGLE_USER": "[email protected]",
"GOOGLE_CLIENT_ID": "your-client-id",
"GOOGLE_CLIENT_SECRET": "your-client-secret",
"GOOGLE_REFRESH_TOKEN": "your-refresh-token"
}
}
}
}
セキュリティ
- 入力検証:実行前に、すべての入力を Zod スキーマで検証します。
- レート制限(HTTP モード):クライアントアドレスごとに 15 分あたり 100 リクエストです。ベアラートークンの確認前にカウントされます。ループバックまたはプライベートネットワーク(10.0.0.0/8、172.16.0.0/12、192.168.0.0/16)上のクライアント(たとえば、同じ Docker ネットワーク上の別のコンテナ)には 10,000 リクエストが適用されます。制限事項:dav-mcp が認識するのは、接続元のアドレスです。Docker のポートマッピングやリバースプロキシの背後では、そのアドレスはブリッジゲートウェイまたはプロキシになるため、外部クライアントはすべてその 1 つのアドレス、カウンター、引き上げられた上限を共有します。HTTP トランスポートを公開する場合は、プロキシでクライアントごとにレート制限を設定してください。
- ベアラー認証:HTTP トランスポートのトークン認証です。
- 認証情報を保存しない:受け渡しのみを行い、ログ記録やキャッシュはしません。
- 構造化ログ:リクエスト ID を使った監査証跡を記録し、個人を特定できる情報は公開しません。
- ツール呼び出しログはデフォルトで無効:デバッグ用に
LOG_TOOL_CALLS=trueを設定すると、すべてのツール呼び出しとその引数を~/.local/state/dav-mcp/tool-calls.jsonl(または$XDG_STATE_HOME、Windows では%LOCALAPPDATA%、あるいはTOOL_CALL_LOG_FILE)に記録します。このファイルはユーザー本人のみが読み取れます。TOOL_CALL_LOG_MODE=consoleを設定すると、代わりに stderr に出力します。 - CORS 保護:許可リストに登録されたオリジンのみを許可し、クロスサイト攻撃をブロックします。
プライバシーポリシー
dav-mcp はお使いのマシン(またはご自身のサーバー)で実行され、設定した DAV サーバーとのみ通信します。テレメトリーはなく、メンテナーや第三者と情報を共有することもありません。ツールの結果は、ツールを呼び出した AI アシスタントに渡されます。認証情報やカレンダーデータは dav-mcp に保存されません。オプションのツール呼び出しログはデフォルトで無効です。ポリシー全文:PRIVACY.md。お問い合わせ:[email protected]。
ドキュメント
- MCP 仕様 - Model Context Protocol のドキュメント
- tsdav ドキュメント - CalDAV/CardDAV ライブラリのリファレンス
- CalDAV RFC 4791 - CalDAV プロトコルの仕様
- CardDAV RFC 6352 - CardDAV プロトコルの仕様
コントリビューション
プルリクエストを歓迎します!ガイドラインについては、CONTRIBUTING.md をお読みください。
ライセンス
MIT License - 詳細は LICENSE をご覧ください。
謝辞
以下を使用して構築されています:
- tsdav - 優れた TypeScript CalDAV/CardDAV ライブラリ
- tsdav-utils - RFC 準拠のフィールド更新を行う、フィールドに依存しないユーティリティレイヤー
- MCP SDK - Anthropic による Model Context Protocol
- ical.js - RFC 準拠の iCalendar パーサー
質問や問題がありますか? GitHub issue を作成してください。
カレンダー、連絡先、タスクを管理する AI エージェントのために構築されています。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。