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 分