list_calendars
List every calendar across all configured accounts (Nextcloud, iCloud, Google, …), with ids usable in other tools.
无需输入参数。

io.github.da-the-dev由 GitHub 账号 da-the-dev 发布v0.2.0更新于 Nov 6, 2026
Local MCP server for your calendars across Nextcloud, iCloud, Google and any CalDAV server.
本地 MCP 服务器,把 Nextcloud、iCloud、Google 及其他 CalDAV 日历合并,让助手读取、搜索、新建、修改和删除日程。
Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。
参照 仓库 中的启动说明。
One thin, local MCP server for all your calendars.
Nextcloud · iCloud · Google · any CalDAV, merged into a single view your agent can read and manage.
[npm] [CI] [MCP Registry] [Node] [Platforms] [License: MIT]
Quick start · Accounts · Connect · Tools · Guardrails · Providers · Contributing
Requires Node.js 22+.
pim-mcp check lists what it found:
The config lives at ~/.config/pim-mcp/config.toml on every OS (C:\Users\<you>\.config\pim-mcp\config.toml on Windows). Set PIM_MCP_CONFIG to use another path.
Passwords and tokens never go in the config. It holds a reference instead:
Stored as generic passwords in your login Keychain. You can also manage them in Keychain Access, or with security add-generic-password -s pim-mcp -a icloud -w.
Needs secret-tool:
On a headless machine there's usually no keyring running. Use env: refs (set them in your MCP client's env block) or pass:
Secrets are encrypted with DPAPI, the per-user encryption Credential Manager also uses. They're stored under %APPDATA%\pim-mcp\secrets\, and only your Windows user on this machine can decrypt them. Nothing to install. cmd: refs run in cmd.exe.
pim-mcp secret set pim-mcp/nextcloudpim-mcp secret set pim-mcp/icloudGoogle only allows OAuth for CalDAV:
pim-mcp secret set pim-mcp/google-client-secretpim-mcp auth google --account google opens your browser and stores the refresh token in your OS secret store.Claude Code (any OS)
Claude Desktop, Cursor and other GUI clients. Add this to the client's MCP config:
~/Library/Application Support/Claude/claude_desktop_config.jsonGUI apps don't always see your shell's PATH. If the server fails to start, replace npx with the full path from which npx, e.g. /opt/homebrew/bin/npx.
%APPDATA%\Claude\claude_desktop_config.jsonnpx is a batch script on Windows, so it runs through cmd /c.
Claude Desktop isn't available for Linux; use Claude Code or another MCP client with the same command / args as macOS. env: refs go in the client's env block:
What agents see:
timezone.YYYY-MM-DD, and their end date is inclusive.🟡 untested means standard CalDAV that should just work but hasn't been confirmed with pim-mcp yet. Tried one? A PR updating this table is very welcome.
New providers, bug fixes and "it works with X" confirmations are all welcome. See CONTRIBUTING.md for dev setup, a throwaway local CalDAV server for testing, and how to add a provider.
来源:README.md,提交 006f369
List every calendar across all configured accounts (Nextcloud, iCloud, Google, …), with ids usable in other tools.
无需输入参数。
Events in a time range, merged across all calendars and sorted by start. Recurring events are expanded into occurrences. Defaults to today through the next 7 days.
endstartaccountscalendarsFind events whose title, location or description contains the query (case-insensitive). Defaults to 90 days back through 365 days ahead.
endquery必填startcalendarsFull details of one event (description, attendees, organizer, recurrence rule, reminders).
id必填Free time windows of at least `duration_minutes` across all (or selected) calendars. Events marked free/transparent and cancelled events do not block time.
end必填start必填accountscalendarsworking_hoursduration_minutes必填Create an event. `start` as a date makes an all-day event. Without `end`, timed events last 1 hour and all-day events 1 day.
endbusyrrulestart必填title必填calendar必填locationattendeesdescriptionalarm_minutesChange an event. Only the fields you pass change; moving `start` alone keeps the duration. For recurring events pass `scope`.
id必填endbusyrrulescopestarttitlelocationattendeesdescriptionalarm_minutesDelete an event. The user reviews this call by its `title`, and a title that does not match the event is refused. For recurring events pass `scope` ("instance" removes one occurrence, "series" removes all).
id必填scopetitle必填已满足适用检查项的 90%
该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。
请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。
you › Find me an hour on Thursday afternoon and put the dentist there.
agent › find_free_time start=Thu 12:00 end=Thu 18:00 duration_minutes=60 ↳ 13:00–15:30 · 16:15–18:00 › create_event calendar="icloud/personal" title="Dentist" start=Thu 13:00 ↳ ✓ created Thu 13:00–14:00 · icloud/personal
Done. Thursday 13:00 is booked; you're free again from 14:00.flowchart LR A["🤖 Agent<br><sub>Claude Code · Claude Desktop · Cursor</sub>"] -- "MCP · stdio" --> P["<b>pim-mcp</b><br><sub>on your machine</sub>"] S[("🔐 OS secret store<br><sub>Keychain · Secret Service · DPAPI</sub>")] -. "app passwords / tokens" .-> P P -- CalDAV --> N["☁️ Nextcloud"] P -- CalDAV --> I["🍎 iCloud"] P -- "CalDAV + OAuth" --> G["📅 Google"] P -- CalDAV --> O["🌐 any CalDAV"]npm install -g pim-mcp # 1 · install (or prefix commands with `npx -y`)pim-mcp init # 2 · write ~/.config/pim-mcp/config.tomlpim-mcp secret set pim-mcp/icloud # 3 · store an app password (prompted, not echoed)pim-mcp check # 4 · verify every accountclaude mcp add pim -s user -- npx -y pim-mcp # 5 · connect your agent✓ nextcloud (nextcloud) — 3 calendar(s) nextcloud/personal Personal nextcloud/work Work✓ icloud (icloud) — 2 calendar(s) icloud/family Family icloud/travel Travelsudo apt install libsecret-tools # Debian / Ubuntusudo dnf install libsecret # Fedorasudo pacman -S libsecret # Archpassword = "cmd:pass show pim-mcp/icloud"[[accounts]]id = "nextcloud"provider = "nextcloud"url = "https://your.next.cloud/remote.php/dav"username = "your-login"password = "keychain:pim-mcp/nextcloud"[[accounts]]id = "icloud"provider = "icloud"username = "[email protected]" # the email you sign into your Apple Account withpassword = "keychain:pim-mcp/icloud"[[accounts]]id = "google"provider = "google"username = "[email protected]"client_id = "xxxx.apps.googleusercontent.com"client_secret = "keychain:pim-mcp/google-client-secret"refresh_token = "keychain:pim-mcp/google"[[accounts]]id = "fastmail"provider = "caldav"url = "https://caldav.fastmail.com/"username = "[email protected]"password = "keychain:pim-mcp/fastmail"claude mcp add pim -s user -- npx -y pim-mcp{ "mcpServers": { "pim": { "command": "npx", "args": ["-y", "pim-mcp"] } }}{ "mcpServers": { "pim": { "command": "cmd", "args": ["/c", "npx", "-y", "pim-mcp"] } }}"pim": { "command": "npx", "args": ["-y", "pim-mcp"], "env": { "ICLOUD_PASSWORD": "…" }}timezone = "Europe/Amsterdam" # default: the system timezone
[guardrails]allow_delete = false # delete_event is refusedallow_invites = false # no adding attendees, no editing/deleting events that have them
[[accounts]]# …read_only = true # no writes to this account at allread_only_calendars = ["Family"] # protect specific calendarshide_calendars = ["Birthdays"] # don't show these at all