
Caldav Mcp
io.github.dominik1001由 GitHub 帳號 dominik1001 發布v0.9.0更新於 Oct 24, 2026
CalDAV calendar operations (list, create, update, delete events) as MCP tools.
概覽
讓助理透過工具讀取與管理 CalDAV 行事曆、活動與待辦事項,包括列出、建立、更新和刪除。
- 可以做什麼
- 連線至 CalDAV 伺服器,把行事曆操作公開為 MCP 工具。可列出行事曆、依時間範圍列出活動,並依 UID 建立、更新或刪除活動,支援全天活動與重複活動。也支援待辦事項(VTODO):依狀態、到期日和分頁條件列出,以及建立、更新、完成和刪除待辦事項。
- 適用情境
- 適合讓助理操作既有的 CalDAV 行事曆,例如查看空閒時間、安排或調整會議,或追蹤與完成待辦事項。適用於自架或符合標準的行事曆服務,而非專有行事曆服務。
- 執行需求
- 以 npm 套件(caldav-mcp)透過 stdio 在本機執行,需要 Node.js 與 npx。需要環境變數 CALDAV_BASE_URL、CALDAV_USERNAME 和 CALDAV_PASSWORD,並能連線至 CalDAV 伺服器。僅支援桌面端。
安裝
在 SourceWeft 中
- 開啟 儀表板中的 Caldav Mcp,將其新增到工作區。
- 為需要使用其工具的對話啟用該服務。
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
Development
Quick Start
Run the MCP server in development mode with auto-reload:
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:
- Compile:
- Run:
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: stringend: 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 optionallydescriptionandlocation
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: stringdescription: 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: stringwholeDay: 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: stringdescription: 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: stringuid: 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: stringdue_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 }wheretotalis the count before pagination. Each todo hasuid,summary,status, and optionallydue,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: stringdescription: 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 omittedsummary: 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: stringdescription: 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: stringuid: 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: stringuid: 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版本歷史
1- v0.9.0最新Sep 16, 2026
評分
已滿足適用檢查項的 50%
該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。
- 近 30 天內可連通25 分
請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。
- 已宣告認證方式10 分
請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。
- 已列出工具15 分
請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。
- 描述必需15 分
- 圖示10 分
- 文件15 分
- 授權條款10 分