用途
dav-mcp 旨在将 AI 智能体转变为能够编排日历、联系人和任务的助手。它通过 MCP(Model Context Protocol)协议,让 AI 助手可以精确操作 CalDAV/CardDAV 服务器上的事件、vCard 联系人和 VTODO 任务。
主要能力
dav-mcp 提供 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:创建新日历集合,可选时区(IANA 名称,如 Europe/Berlin,以 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_query)
- create_todo:创建新待办/任务,可选截止日期、优先级、状态
- update_todo:更新任意待办字段(SUMMARY、STATUS、PRIORITY、DUE、PERCENT-COMPLETE、自定义 X-* 属性)
- update_todo_raw:使用原始 VTODO iCal 数据更新待办(高级)
- delete_todo:永久删除待办/任务
- todo_query:按状态/截止日期高效搜索和过滤待办
- todo_multi_get:按 URL 批量获取多个指定待办
使用方式
一键安装(Claude Desktop): 从最新 release 下载 dav-mcp-<version>.mcpb(4.1.2 起提供),用 Claude Desktop 打开,输入服务器 URL、用户名和密码(密码存储为 secret),认证方式保持 Basic 除非服务器需要 Digest。.mcpb 是 MCP Bundle,包含服务器及其依赖,无需安装 Node.js 或 npx。
Claude Desktop / Cursor(本地): 在 MCP 配置文件中添加配置。配置文件位置: 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 服务器,添加 AI Agent 节点,添加 MCP Client Tool 节点并连接到 AI Agent,配置 MCP Endpoint 为 http://localhost:3000/mcp,认证为 Bearer Token。
也可拉取已发布镜像(distroless,非 root 运行,无 shell),标签有 latest、精确版本(5.0.0)和次要版本线(5.0)。设置 PORT 可更改端口,健康检查会跟随。或从源码构建。
适用场景
- n8n 自动化工作流:会议管理、联系人搜索、任务报告、定时清理
- Claude Desktop 集成:快速创建事件、联系人查找、日历概览、日历管理
- 兼容所有主流提供商:Nextcloud、Baikal、Radicale、iCloud(需应用专用密码)以及任何符合 RFC 的服务器
限制
- 需要 Node.js 22 或更高版本
- 配置错误(未知 AUTH_METHOD 值或缺少所选方法的凭据)会在启动时停止服务器,而不是回退到 Basic
- HTTP 模式有速率限制:每客户端地址每 15 分钟 100 次请求(在检查 bearer token 之前计数);回环或私有网络(10.0.0.0/8、172.16.0.0/12、192.168.0.0/16)的客户端为 10,000 次。限制:dav-mcp 看到的是连接它的地址。在 Docker 端口映射或反向代理后面,那是桥接网关或代理,因此所有外部客户端共享该地址、其计数器和提高的限制。如果暴露 HTTP 传输,请在代理处按客户端限速
- 工具调用日志默认关闭,可通过 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
- 无遥测,不与维护者或第三方共享数据。工具结果发送给调用工具的 AI 助手。凭据和日历数据不由 dav-mcp 存储;可选工具调用日志默认关闭
- 时区处理:未指定时区的事件或待办(浮动时间或全天日期)按其日历的时区读取(RFC 4791 §9.9),即 make_calendar/update_calendar 设置的时区,list_calendars 会显示。没有时区的日历按 dav-mcp 运行所在时区读取:TZ 环境变量(如 Docker 或 HTTP 部署中的 TZ=Europe/Berlin),否则系统时区。创建和更新工具未给定时区的时间同样读取,移动时未存储时区的事件保持无时区。freebusy_query 按日历时区打印其时间段并命名该时区
安全
- 输入验证:所有输入在执行前用 Zod schema 验证
- Bearer 认证:HTTP 传输的令牌认证
- 无凭据存储:仅传递,从不记录或缓存
- 结构化日志:带请求 ID 的审计跟踪,无 PII 暴露
- CORS 保护:白名单来源,阻止跨站攻击
技术栈
基于 tsdav(TypeScript CalDAV/CardDAV 库)、tsdav-utils(字段无关的 RFC 合规字段更新工具层)、MCP SDK(Anthropic 的 Model Context Protocol)、ical.js(RFC 合规的 iCalendar 解析器)。
许可
MIT License。