mcpField
D
dav-mcp

dav-mcp

本地服务
github.com/PhilflowIO生产力423 周前更新

关于 dav-mcp

dav-mcp 是一个 MCP 服务,通过 CalDAV、CardDAV 和 VTODO 协议为 AI Agent 提供日历、联系人和任务管理能力。它提供 27 个工具,覆盖日历、联系人和任务的完整增删改查,适用于兼容 RFC 4791 和 RFC 6352 的各类服务器。

主要功能

  1. 0127 个工具,覆盖日历、联系人和任务
  2. 02CalDAV 日历的完整增删改查
  3. 03CardDAV 联系人管理与查询
  4. 04VTODO 任务管理与筛选
  5. 05freebusy_query 客户端计算空闲时段
  6. 06支持 Basic、Digest 和 OAuth 认证

适用场景

  1. 01通过 AI 助手查询日程与创建会议
  2. 02在 n8n 工作流中按条件查询联系人或任务
  3. 03定期清理已完成任务

MCP 相关

dav-mcp 本身是 MCP 服务,向 MCP 客户端暴露日历、联系人和任务相关的工具。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"dav": {
"command": "npx",
"args": [
"-y",
"dav-mcp"
],
"env": {
"CALDAV_SERVER_URL": "<CALDAV_SERVER_URL>",
"CALDAV_USERNAME": "<CALDAV_USERNAME>",
"CALDAV_PASSWORD": "<CALDAV_PASSWORD>",
"AUTH_METHOD": "<AUTH_METHOD>",
"GOOGLE_SERVER_URL": "<GOOGLE_SERVER_URL>",
"GOOGLE_USER": "<GOOGLE_USER>",
"GOOGLE_CLIENT_ID": "<GOOGLE_CLIENT_ID>",
"GOOGLE_CLIENT_SECRET": "<GOOGLE_CLIENT_SECRET>",
"GOOGLE_REFRESH_TOKEN": "<GOOGLE_REFRESH_TOKEN>",
"GOOGLE_TOKEN_URL": "<GOOGLE_TOKEN_URL>"
}
}
}
}
启动命令npx -y dav-mcp
需要配置的环境变量
CALDAV_SERVER_URLBase URL of your CalDAV/CardDAV server (e.g. https://example.com/dav.php/)
CALDAV_USERNAMEUsername for DAV server authentication
CALDAV_PASSWORD密钥Password or app-specific password for DAV server authentication
AUTH_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 Google
GOOGLE_SERVER_URLGoogle CalDAV endpoint; required when AUTH_METHOD=oauth2
GOOGLE_USERGoogle account email; required when AUTH_METHOD=oauth2
GOOGLE_CLIENT_IDOAuth2 client ID; required when AUTH_METHOD=oauth2
GOOGLE_CLIENT_SECRET密钥OAuth2 client secret; required when AUTH_METHOD=oauth2
GOOGLE_REFRESH_TOKEN密钥OAuth2 refresh token; required when AUTH_METHOD=oauth2
GOOGLE_TOKEN_URL密钥OAuth2 token endpoint for AUTH_METHOD=oauth2 (default: https://oauth2.googleapis.com/token)

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npmdav-mcp5.0.0

工具

27

收录的工具列表 · 更新于 3 周前

此工具无需参数。

详细介绍

dav-mcp

赋予 AI Agent 强大的组织能力 —— 将它们变成统筹管理日历、联系人和任务的助手。

基于 27 个可用于生产环境的工具,涵盖 CalDAV、CardDAV 和 VTODO 协议。

许可证:MIT npm 版本


快速开始

一键安装(Claude Desktop)
  1. 从最新版本下载 dav-mcp-<version>.mcpb。从 4.1.2 版本开始,发布包中包含此文件。
  2. 使用 Claude Desktop(macOS 或 Windows)打开该文件。Claude 会显示安装对话框。
  3. 输入服务 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 中:

  1. 添加 AI Agent 节点
  2. 添加 MCP Client Tool 节点并连接到 AI Agent
  3. 配置:
    • MCP 端点:http://localhost:3000/mcp
    • 身份验证:Bearer
    • 令牌:你的密钥令牌

自定义端口:

npx dav-mcp --http --port=8080

Docker

拉取已发布的镜像(distroless,以非 root 用户运行,不含 shell):

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
日历管理完整的增删改查(12 个工具)仅创建和列出(2-3 个工具)
联系人管理完整的 CardDAV(8 个工具)通常完全缺失
任务管理完整支持 VTODO(7 个工具)很少提供
按字段更新所有 RFC 属性及自定义字段很少提供
空闲/忙碌查询适用于所有服务(客户端执行)原生 REPORT,大多数服务不支持
服务端筛选高效查询导出全部数据
多服务提供商适用于任何 CalDAV/CardDAV 服务服务提供商支持有限
工具总数27 个工具2-6 个工具

可用工具(共 27 个)

CalDAV 工具(12 个)
  1. list_calendars - 列出所有可用日历
  2. list_events - 列出所有事件(筛选搜索请使用 calendar_query)
  3. create_event - 创建新的日历事件
  4. update_event - 首选:更新任意事件字段(SUMMARY、LOCATION、STATUS、自定义 X-* 属性);使用 start_date/end_date/all_day 移动或转换事件
  5. update_event_raw - 使用原始 iCal 数据更新事件(高级)
  6. delete_event - 永久删除事件
  7. calendar_query - 首选:按文本、日期范围或地点高效搜索和筛选事件
  8. make_calendar - 创建新的日历集合,可选择指定时区(例如 Europe/Berlin 这样的 IANA 名称,会作为 VTIMEZONE 发送)
  9. update_calendar - 更新日历属性(显示名称、描述、颜色、时区)
  10. delete_calendar - 删除日历及其所有事件
  11. calendar_multi_get - 按 URL 批量获取多个指定事件
  12. freebusy_query - 查找某个时间范围内的空闲和忙碌时段(“我什么时候有空?”),由客户端计算
CardDAV 工具(8 个)
  1. list_addressbooks - 列出所有可用的地址簿
  2. list_contacts - 列出所有联系人(筛选搜索请使用 addressbook_query)
  3. create_contact - 创建新联系人(vCard)
  4. update_contact - 首选:更新联系人的任意字段(FN、EMAIL、TEL、ORG、ADR、自定义 X-* 属性)
  5. update_contact_raw - 使用原始 vCard 数据更新联系人(高级)
  6. delete_contact - 永久删除联系人
  7. addressbook_query - 首选:按姓名、电子邮件或组织高效搜索和筛选联系人
  8. addressbook_multi_get - 按 URL 批量获取多个指定联系人
VTODO 工具(7 个)
  1. list_todos - 列出所有待办事项/任务(筛选搜索请使用 todo_query)
  2. create_todo - 创建待办事项/任务,可选设置到期日期、优先级和状态
  3. update_todo - 首选:更新待办事项的任意字段(SUMMARY、STATUS、PRIORITY、DUE、PERCENT-COMPLETE、自定义 X-* 属性)
  4. update_todo_raw - 使用原始 VTODO iCal 数据更新待办事项(高级)
  5. delete_todo - 永久删除待办事项/任务
  6. todo_query - 首选:按状态/到期日期高效搜索和筛选待办事项
  7. todo_multi_get - 按 URL 批量获取多个指定待办事项
时区

未指定时区的事件或待办事项(“浮动”时间,例如 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(例如,Baikal 设置为 Digest),dav-mcp 会自动切换到 Digest,无需进行任何设置。
DigestCALDAV_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 个请求,在检查 bearer 令牌之前计数。来自回环地址或私有网络(10.0.0.0/8、172.16.0.0/12、192.168.0.0/16)的客户端(例如,同一 Docker 网络中的另一个容器)可获得 10,000 个请求。限制:dav-mcp 看到的是连接到它的地址。若经过 Docker 端口映射或反向代理,该地址就是网桥网关或代理的地址,因此所有外部客户端共用这一个地址、同一个计数器和提高后的限额。如果要公开 HTTP 传输,请在代理处按客户端进行速率限制。
  • Bearer 身份验证: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]。


文档


参与贡献

欢迎提交拉取请求!请阅读 CONTRIBUTING.md 了解指南。


许可证

MIT 许可证 - 详情请参阅 LICENSE


致谢

本项目使用以下项目构建:

  • tsdav - 优秀的 TypeScript CalDAV/CardDAV 库
  • tsdav-utils - 用于符合 RFC 规范的字段更新的字段无关型实用工具层
  • MCP SDK - Anthropic 的 Model Context Protocol
  • ical.js - 符合 RFC 规范的 iCalendar 解析器

有疑问?遇到问题? 请创建一个 GitHub issue


为管理日历、联系人和任务的 AI Agent 打造

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。