mcpField
C
caldav-mcp

caldav-mcp

本地服务
github.com/dominik1001生产力105今天更新

关于 caldav-mcp

caldav-mcp 是一个 MCP 服务,将 CalDAV 日历和任务操作提供给 AI 助手。它适合需要通过 MCP 客户端查看、管理日程及待办事项的用户,并支持事件与任务的增删改查。

主要功能

  1. 01连接 CalDAV 服务并列出日历
  2. 02按时间范围查询日历事件
  3. 03创建、更新和删除事件
  4. 04查询并分页筛选待办任务
  5. 05创建、更新、完成和删除任务

适用场景

  1. 01通过 AI 助手查看指定日期范围的事件
  2. 02创建或修改日历中的会议
  3. 03管理带截止日期的待办事项

MCP 相关

该 MCP 服务向 MCP 客户端公开 CalDAV 日历和任务工具,包括日历、事件及 VTODO 的查询与管理。

配置

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

mcp.json · 通用配置
{
"mcpServers": {
"caldav": {
"command": "npx",
"args": [
"-y",
"caldav-mcp"
],
"env": {
"CALDAV_BASE_URL": "<CALDAV_BASE_URL>",
"CALDAV_USERNAME": "<CALDAV_USERNAME>",
"CALDAV_PASSWORD": "<CALDAV_PASSWORD>"
}
}
}
}
启动命令npx -y caldav-mcp
需要配置的环境变量
CALDAV_BASE_URLBase URL of the CalDAV server (e.g. https://caldav.example.com)
CALDAV_USERNAMEUsername for CalDAV authentication
CALDAV_PASSWORD密钥Password for CalDAV authentication

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

安装包
npmcaldav-mcp0.9.0

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

caldav-mcp

🗓️ 一个 CalDAV 模型上下文协议(MCP)服务,可将日历操作作为工具提供给 AI 助手。

Release npm version MIT License code style: prettier MCP Compatible semantic-release: angular

✨ 功能

  • 连接到 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 后再运行:

  1. 编译:
npx tsc
  1. 运行:
node dist/index.js

可用工具

list-calendars

列出所有日历,并返回其名称和绝对 URL。将日历的 url 原样作为 calendarUrl 传递给其他工具。

参数:无

返回:

  • 所有可用日历的列表
list-events

列出指定 URL 的日历中开始日期与结束日期之间的所有事件

参数:

  • calendarUrl:string
  • end:string — 结束日期(ISO 8601)
  • start:string — 开始日期(ISO 8601)

返回:

  • 给定时间范围内的事件列表,每个事件包含 uid、summary、start、end,以及可选的 description 和 location
create-event

在指定 URL 的日历中创建事件。对于全天事件,将 wholeDay 设为 true。对于单日全天事件,使用同一日历日期内的 start 和 end 日期时间;它们的时间戳不必相同。

参数:

  • calendarUrl:string
  • description:string(可选)
  • end:string — 结束日期时间(ISO 8601)
  • location:string(可选)
  • recurrenceRule:object(可选)
    • byday:array of string(可选)
    • bymonth:array of number(可选)
    • bymonthday:array of number(可选)
    • count:number(可选)
    • freq:enum(DAILY | WEEKLY | MONTHLY | YEARLY)(可选)
    • interval:number(可选)
    • until:string(可选)
  • start:string — 开始日期时间(ISO 8601)
  • summary:string
  • wholeDay:boolean(可选)— 创建全天事件

返回:

  • 已创建事件的唯一 ID
update-event

更新指定 URL 的日历中的现有事件。仅修改提供的字段。对于单日全天事件,将 wholeDay 设为 true,并将 start 和 end 设为同一个日历日期。

参数:

  • calendarUrl:string
  • description:string(可选)
  • end:string(可选)
  • location:string(可选)
  • recurrenceRule:object(可选)
    • byday:array of string(可选)
    • bymonth:array of number(可选)
    • bymonthday:array of 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 的日历中的事件

参数:

  • calendarUrl:string
  • uid:string — 要删除的事件的唯一标识符(通过 list-events 获取)

返回:

  • 成功删除事件时的确认消息
list-todos

列出指定 URL 的日历中的任务(VTODO)。默认仅返回未完成任务(NEEDS-ACTION 和 IN-PROCESS),并按手动顺序再按截止日期排序。使用 status 可包含已完成的任务(COMPLETED)或所有任务(ALL),并使用 limit/offset 分页浏览较长的列表。

参数:

  • calendarUrl:string
  • due_after:string(可选)— 仅包含截止日期为此时间或之后的任务(ISO 8601)。设置截止时间范围后,不包含未设置截止日期的任务。
  • due_before:string(可选)— 仅包含截止日期为此时间或之前的任务(ISO 8601)。设置截止时间范围后,不包含未设置截止日期的任务。
  • limit:number(可选)— 返回的任务数量上限(默认 50,最大 500)
  • offset:number(可选)— 跳过的任务数量(默认 0)
  • status:enum(OPEN | ALL | NEEDS-ACTION | COMPLETED | IN-PROCESS | CANCELLED)(可选)— 按状态筛选。OPEN(默认)= NEEDS-ACTION + IN-PROCESS;ALL = 全部;或指定确切状态(NEEDS-ACTION、COMPLETED、IN-PROCESS、CANCELLED)。

返回:

  • 一个对象 { todos, total, limit, offset },其中 total 是分页前的数量。每个 todo 包含 uid、summary、status,以及可选的 due、start、completed、description、location。
create-todo

在指定 URL 的日历中创建任务(VTODO)。仅 summary 为必填项;任务可以没有日期。使用 due 设置截止时间,使用 start 设置工作开始时间。

参数:

  • calendarUrl:string
  • description:string(可选)
  • due:string(可选)— 截止日期时间(ISO 8601)
  • location:string(可选)
  • start:string(可选)— 开始日期时间(ISO 8601)
  • status:enum(NEEDS-ACTION | COMPLETED | IN-PROCESS | CANCELLED)(可选)— 未提供时默认为 NEEDS-ACTION
  • summary:string

返回:

  • 已创建 todo 的唯一 ID
update-todo

更新指定 URL 的日历中的现有任务(VTODO)。仅修改已提供的字段。要将任务标记为已完成,建议使用 complete-todo 工具。

参数:

  • calendarUrl:string
  • description:string(可选)
  • due:string(可选)
  • location:string(可选)
  • start:string(可选)
  • status:enum(NEEDS-ACTION | COMPLETED | IN-PROCESS | CANCELLED)(可选)
  • summary:string(可选)
  • uid:string — 要更新的 todo 的唯一标识符(通过 list-todos 获取)

返回:

  • 已更新 todo 的唯一 ID
complete-todo

将任务(VTODO)标记为已完成。将其状态设为 COMPLETED,并记录完成时间。

参数:

  • calendarUrl:string
  • uid:string — 要完成的 todo 的唯一标识符(通过 list-todos 获取)

返回:

  • 已完成 todo 的唯一 ID
delete-todo

删除指定 URL 的日历中的任务(VTODO)

参数:

  • calendarUrl:string
  • uid:string — 要删除的 todo 的唯一标识符(通过 list-todos 获取)

返回:

  • 成功删除 todo 时的确认消息

许可证

MIT

评论

支持 Markdown

第一次接触 MCP?

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

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