Caldav Mcp

io.github.dominik1001由 GitHub 账号 dominik1001 发布v0.9.0更新于 Oct 24, 2026

CalDAV calendar operations (list, create, update, delete events) as MCP tools.

已验证STDIO仅桌面效率与工作流沟通与协作

概览

AI 生成的概览

让助手通过工具读取和管理 CalDAV 日历、事件与任务,包括列出、创建、更新和删除。

可以做什么
连接 CalDAV 服务器,把日历操作暴露为 MCP 工具。可列出日历、按时间段列出事件,并按 UID 创建、更新或删除事件,支持全天事件和重复事件。也支持任务(VTODO):按状态、截止日期和分页条件列出,以及创建、更新、完成和删除任务。
适用场景
适合让助手操作已有的 CalDAV 日历,例如查看空闲时间、安排或调整会议,或跟踪和完成任务。适用于自建或基于标准的日历服务,而非专有日历服务。
运行要求
以 npm 包(caldav-mcp)通过 stdio 在本地运行,需要 Node.js 和 npx。需要环境变量 CALDAV_BASE_URL、CALDAV_USERNAME 和 CALDAV_PASSWORD,并能访问 CalDAV 服务器网络。仅支持桌面端。
安装前请注意
该服务器持有日历凭据,包括机密项 CALDAV_PASSWORD,并能在所连接的日历上创建、修改和删除事件与任务,改动可能难以撤销。请指向愿意让助手编辑的日历,并考虑使用专用账号或应用专用密码。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Caldav Mcp,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

README

caldav-mcp

🗓️ A CalDAV Model Context Protocol (MCP) server to expose calendar operations as tools for AI assistants.

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

✨ Features

  • Connect to CalDAV servers
  • List calendars
  • List calendar events within a specific timeframe
  • Create calendar events
  • Update calendar events
  • Delete calendar events by UID

Setup

{  "mcpServers": {    ...,    "calendar": {      "command": "npx",      "args": [        "caldav-mcp"      ],      "env": {        "CALDAV_BASE_URL": "<CalDAV server URL>",        "CALDAV_USERNAME": "<CalDAV username>",        "CALDAV_PASSWORD": "<CalDAV password>"      }    }  }}

Development

Quick Start

Run the MCP server in development mode with auto-reload:

bash
npm run dev

This will run the TypeScript code directly with watch mode and automatically load environment variables from .env.

Manual Build

Alternatively, you can compile TypeScript to JavaScript and run it:

  1. Compile:
bash
npx tsc
  1. Run:
bash
node dist/index.js

Available Tools

list-calendars

List all calendars returning both name and absolute URL. Pass a calendar's url unchanged as calendarUrl to the other tools.

Parameters: none

Returns:

  • List of all available calendars

list-events

List all events between start and end date in the calendar specified by its URL

Parameters:

  • calendarUrl: string
  • end: string — End date (ISO 8601)
  • start: string — Start date (ISO 8601)

Returns:

  • A list of events that fall within the given timeframe, each containing uid, summary, start, end, and optionally description and location

create-event

Creates an event in the calendar specified by its URL. For all-day events, set wholeDay to true. For a single-day all-day event, use start and end datetimes on the same calendar date; they do not need to be identical timestamps.

Parameters:

  • calendarUrl: string
  • description: string (optional)
  • end: string — End datetime (ISO 8601)
  • location: string (optional)
  • recurrenceRule: object (optional)
    • byday: array of string (optional)
    • bymonth: array of number (optional)
    • bymonthday: array of number (optional)
    • count: number (optional)
    • freq: enum (DAILY | WEEKLY | MONTHLY | YEARLY) (optional)
    • interval: number (optional)
    • until: string (optional)
  • start: string — Start datetime (ISO 8601)
  • summary: string
  • wholeDay: boolean (optional) — Create as a whole-day event

Returns:

  • The unique ID of the created event

update-event

Updates an existing event in the calendar specified by its URL. Only provided fields are changed. For a one-day full-day event, set wholeDay to true and set start and end to the same calendar day.

Parameters:

  • calendarUrl: string
  • description: string (optional)
  • end: string (optional)
  • location: string (optional)
  • recurrenceRule: object (optional)
    • byday: array of string (optional)
    • bymonth: array of number (optional)
    • bymonthday: array of number (optional)
    • count: number (optional)
    • freq: enum (DAILY | WEEKLY | MONTHLY | YEARLY) (optional)
    • interval: number (optional)
    • until: string (optional)
  • start: string (optional)
  • summary: string (optional)
  • uid: string — Unique identifier of the event to update (obtained from list-events)
  • wholeDay: boolean (optional) — Update whether this is a whole-day event

Returns:

  • The unique ID of the updated event

delete-event

Deletes an event in the calendar specified by its URL

Parameters:

  • calendarUrl: string
  • uid: string — Unique identifier of the event to delete (obtained from list-events)

Returns:

  • Confirmation message when the event is successfully deleted

list-todos

List tasks (VTODOs) in the calendar specified by its URL. By default returns only open tasks (NEEDS-ACTION and IN-PROCESS), sorted by manual order then due date. Use status to include completed (COMPLETED) or all (ALL) tasks, and limit/offset to page through long lists.

Parameters:

  • calendarUrl: string
  • due_after: string (optional) — Only tasks with a due date at or after this (ISO 8601). Undated tasks are excluded when a due window is set.
  • due_before: string (optional) — Only tasks with a due date at or before this (ISO 8601). Undated tasks are excluded when a due window is set.
  • limit: number (optional) — Max tasks to return (default 50, max 500)
  • offset: number (optional) — Tasks to skip (default 0)
  • status: enum (OPEN | ALL | NEEDS-ACTION | COMPLETED | IN-PROCESS | CANCELLED) (optional) — Filter by status. OPEN (default) = NEEDS-ACTION + IN-PROCESS; ALL = everything; or an exact status (NEEDS-ACTION, COMPLETED, IN-PROCESS, CANCELLED).

Returns:

  • An object { todos, total, limit, offset } where total is the count before pagination. Each todo has uid, summary, status, and optionally due, start, completed, description, location.

create-todo

Creates a task (VTODO) in the calendar specified by its URL. Only summary is required; a task may have no dates. Use due for a deadline and start for when work should begin.

Parameters:

  • calendarUrl: string
  • description: string (optional)
  • due: string (optional) — Due datetime (ISO 8601)
  • location: string (optional)
  • start: string (optional) — Start datetime (ISO 8601)
  • status: enum (NEEDS-ACTION | COMPLETED | IN-PROCESS | CANCELLED) (optional) — Defaults to NEEDS-ACTION when omitted
  • summary: string

Returns:

  • The unique ID of the created todo

update-todo

Updates an existing task (VTODO) in the calendar specified by its URL. Only provided fields are changed. To mark a task done, prefer the complete-todo tool.

Parameters:

  • calendarUrl: string
  • description: string (optional)
  • due: string (optional)
  • location: string (optional)
  • start: string (optional)
  • status: enum (NEEDS-ACTION | COMPLETED | IN-PROCESS | CANCELLED) (optional)
  • summary: string (optional)
  • uid: string — Unique identifier of the todo to update (from list-todos)

Returns:

  • The unique ID of the updated todo

complete-todo

Marks a task (VTODO) as done. Sets its status to COMPLETED and records the completion time.

Parameters:

  • calendarUrl: string
  • uid: string — Unique identifier of the todo to complete (from list-todos)

Returns:

  • The unique ID of the completed todo

delete-todo

Deletes a task (VTODO) in the calendar specified by its URL

Parameters:

  • calendarUrl: string
  • uid: string — Unique identifier of the todo to delete (from list-todos)

Returns:

  • Confirmation message when the todo is successfully deleted

License

MIT

来源:README.md,提交 6bbb652

工具

0
SourceWeft 尚未在沙箱中启动过该软件包,因此其工具未知。

版本历史

1
  1. v0.9.0最新Sep 16, 2026

评分

已满足适用检查项的 50%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分

    请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。

  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具15 分

    请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。

  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分