让你的 AI 通过 `mcp-caldav` 获得真正的日历超能力

发布: (2026年1月14日 GMT+8 17:04)
9 min read
原文: Dev.to

I’m ready to translate the article, but I need the full text you’d like translated. Could you please provide the content (excluding the source line and any code blocks) that you want converted to Simplified Chinese? Once I have that, I’ll keep the source link and formatting exactly as you requested.

TL;DR

“我可以让我的 AI 实际查看并管理我的日历吗?”

mcp‑caldav 是一个 MCP 服务器,可将任何兼容 CalDAV 的日历(Nextcloud、iCloud、FastMail、Yandex 等)桥接到你的 AI 工具。这样 AI 就可以:

  • 列出日历
  • 读取日程
  • 创建事件(提醒、参与者、重复)
  • 按 UID 搜索或删除事件

该项目已被收录在流行的 awesome‑mcp‑servers 集合中,证明它不仅仅是个玩具。

项目功能

DirectionRole
CalDAV使用日历语言——事件、UID、RRULE、参与者、提醒、类别、优先级。
MCP提供一套干净的工具供 LLM 调用——列出日历、创建事件、获取事件、搜索、删除。

示例工作流

  • “本周我的日历上有什么?”
  • “在明天下午创建一个 30 分钟的会议,参加者是 Alex。”
  • “显示下个月所有标记为 #deep‑work 的事件。”
  • “删除我们刚创建的 Test meeting。”

没有任何魔法——只是你的日历和 AI 之间坚实的管道。

Repository Layout

caldav-mcp/
├─ src/
│   └─ mcp_caldav/
│       ├─ __init__.py      # main entry point / CLI
│       ├─ server.py        # MCP server (tools, protocol wiring)
│       └─ client.py        # CalDAV client wrapper (auth, HTTP, (de)serialization)
├─ tests/
│   ├─ test_server.py
│   └─ test_client.py
├─ e2e/                     # end‑to‑end tests against a real CalDAV server
├─ pyproject.toml          # packaging & dependency config
├─ Makefile                # dev commands (make test, make check, …)
├─ README.md
├─ USAGE.md
└─ QUICKSTART.md

一个干净、适合中级开发者的友好布局:明确的入口点、关注点分离,以及真实的测试套件。

核心设计要点

  • 严格类型mypy 严格规则
  • 快速 linting/格式化ruff
  • 预提交钩子 – 保持风格和检查的一致性

运行 mcp‑caldav

使用 uv(推荐)

git clone https://github.com/madbonez/caldav-mcp.git
cd caldav-mcp

# 安装运行时 + 开发依赖,创建 .venv,生成 uv.lock
uv sync --dev

运行服务器:

uv run mcp-caldav          # 来自本地检出

或直接运行已发布的包而无需检出:

uvx mcp-caldav

使用 pip

pip install -e .
mcp-caldav

所有方式都会暴露一个普通的 Python CLI 入口点。

Source:

配置

服务器从环境变量读取设置:

export CALDAV_URL="https://caldav.example.com/"
export CALDAV_USERNAME="your-username"
export CALDAV_PASSWORD="your-password"

常用 CalDAV 接口

提供商URL
Yandex Calendarhttps://caldav.yandex.ru/
Google Calendar (CalDAV + OAuth)https://apidata.googleusercontent.com/caldav/v2/
Nextcloudhttps://your-domain.com/remote.php/dav/calendars/username/
ownCloudhttps://your-domain.com/remote.php/dav/calendars/username/
Apple iCloudhttps://caldav.icloud.com/(通常使用应用专用密码)
FastMailhttps://caldav.fastmail.com/dav/calendars/user/

注意: Yandex 实施了严格的速率限制(≈ 60 秒/兆字节)。大量写入操作可能会触发 504 超时。若需更高吞吐量,建议使用 Nextcloud 或 Google。详细信息请参见 PROVIDER_NOTES.md

与 Cursor(或任何 MCP‑aware 客户端)集成

添加 mcp‑caldav 作为全局 MCP 服务器,以便 AI 能自动调用日历工具。

使用 uvx(无需本地检出)

{
  "mcpServers": {
    "mcp-caldav": {
      "command": "uvx",
      "args": ["mcp-caldav"],
      "env": {
        "CALDAV_URL": "https://caldav.example.com/",
        "CALDAV_USERNAME": "your-username",
        "CALDAV_PASSWORD": "your-password"
      }
    }
  }
}

使用本地检出

{
  "mcpServers": {
    "mcp-caldav": {
      "command": "uv",
      "args": [
        "run",
        "--directory",
        "/Users/you/dev/caldav-mcp",
        "mcp-caldav"
      ],
      "env": {
        "CALDAV_URL": "https://caldav.example.com/",
        "CALDAV_USERNAME": "your-username",
        "CALDAV_PASSWORD": "your-password"
      }
    }
  }
}

配置完成后,Cursor(或任何支持 MCP 的客户端)将向 LLM 提供以下工具。

暴露的 MCP 工具

工具描述
caldav_list_calendars返回您可以访问的所有日历(个人、工作、共享,…)。对 AI 选择目标日历或发现可用日历很有帮助。
caldav_create_event创建一个新事件,包含:
• 标题、描述、地点
• 开始/结束时间戳或持续时间
• 重复规则(每日/每周/每月/每年)
• 类别/标签
• 优先级(0‑9)
• 参与者及其状态
• 多个提醒
caldav_get_events获取指定日期范围内的事件。返回 UID、类别、优先级、参与者及其状态、重复细节、提醒等。
caldav_get_today_events返回今天的所有事件,包括全天条目。非常适合“我星期四有什么安排?”之类的查询。
caldav_search_events按关键字、标签或其他元数据搜索。
caldav_delete_event根据 UID 删除事件。

这些工具为您在 LLM 驱动的工作流中提供了对任何 CalDAV 日历的完整 CRUD 接口。

快速回顾

  1. 克隆 / 安装 仓库(uv 或 pip)。
  2. 为你的 CalDAV 服务器设置环境变量
  3. 运行 mcp-caldav
  4. 配置 你的 MCP 客户端(Cursor 等)指向该服务器。
  5. 向你的 AI 提出自然语言的日历问题——它将在后台调用相应的 MCP 工具。

享受真正驻留在 AI 大脑中的日历!

CalDAV MCP 工具概览

caldav_get_week_events

返回本周的事件。

  • 可选定义一周的起始是 “今天” 还是 星期一
  • 非常适合每周计划提示。

高级操作

caldav_get_event_by_uid

通过 UID 查找单个事件。

使用场景: “展示一下你刚才提到的那次会议的更多细节。”

caldav_delete_event

通过 UID 删除事件。

使用场景: 编程方式清理测试事件或取消会议。

caldav_search_events

搜索条件:

  • text(标题 / 描述)
  • location(地点)
  • attendees(参与者)

示例:

  • “查找今年标题中包含 ‘performance review’ 的所有事件。”
  • “显示上个月与 Alice 的会议。”
  • “列出下季度标记为 #deep‑work 的所有事件。”

开发工具

项目配备了坚实的质量保证栈:

工具目的
ruff快速 linting + 格式化
mypy静态类型检查
pre‑commit在提交前运行检查

入门

# Install all dependencies (including dev group)
uv sync --group dev

常用 Make 命令

命令描述
make check运行 全部 质量检查
make lint仅 lint
make format格式化代码
make type-check运行静态类型检查
make test运行 全部 测试
make test-unit仅运行 单元 测试
make test-e2e运行 端到端 测试(需要真实的 CalDAV 服务器)
make test-cov在终端显示覆盖率
make coverage-html生成 HTML 覆盖报告(htmlcov/

端到端测试设置

  1. 复制示例 env 文件:

    cp .env.e2e.example .env.e2e
  2. .env.e2e 中填写真实的 CalDAV 凭证。

  3. 运行测试:

    make test-e2e

awesome-mcp-servers 列表

awesome-mcp-servers 列表精选高质量的 MCP 服务器。mcp-caldav 非常契合,因为:

  • 通过 标准协议 将 AI 连接到真实世界数据(你的日历)。
  • 代码库干净、体积适中,易于浏览。
  • 测试覆盖良好(单元测试 + E2E)。
  • 文档齐全(README.mdUSAGE.mdQUICKSTART.mdPROVIDER_NOTES.md)。

为什么把这个仓库当作参考?

  • 关注点分离: 传输层(MCP) 与 领域逻辑(CalDAV 客户端) 分开。
  • 表达力强的工具表面: 小巧却功能强大的 API。
  • 即插即用: 可直接使用现有的 CalDAV 服务器,无需重新造轮子。

如果你希望你的 AI 不仅仅是聊天——例如真正管理你的日程——mcp-caldav 是一个坚实的起点:

  • 使用 标准协议(CalDAV)。
  • 暴露明确的 MCP 工具
  • 经受足够的实战考验,入选 awesome-mcp-servers

🔗 https://github.com/madbonez/caldav-mcp

欢迎将其接入你的系统或进行扩展(例如添加更新/补丁操作或更丰富的搜索功能)。这正是构建严肃 MCP 工作流的人所需要的工作方式。

Back to Blog

相关文章

阅读更多 »

Rapg:基于 TUI 的密钥管理器

我们都有这种经历。你加入一个新项目,首先听到的就是:“在 Slack 的置顶消息里查找 .env 文件”。或者你有多个 .env …

技术是赋能者,而非救世主

为什么思考的清晰度比你使用的工具更重要。Technology 常被视为一种魔法开关——只要打开,它就能让一切改善。新的 software,...

踏入 agentic coding

使用 Copilot Agent 的经验 我主要使用 GitHub Copilot 进行 inline edits 和 PR reviews,让我的大脑完成大部分思考。最近我决定 t...