CalDAV MCP Server
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@CalDAV MCP Serverlist my events for tomorrow"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Calendar Server
This repo runs a real CalDAV server with Docker Compose and connects MCP clients through an existing CalDAV MCP server.
Stack:
CalDAV: Radicale in Docker using
ghcr.io/kozea/radicale:3.7.6MCP HTTP:
dav-mcpin Docker, built frommcp/DockerfilePublic access: Cloudflare Tunnel / Zero Trust
Requirements
Docker Desktop or Docker Engine with Compose
Node.js 20 or newer for
npxMCP usagecloudflaredfor Cloudflare Tunnel
Related MCP server: Chronos MCP
Configure
cp .env.example .envEdit .env:
CALDAV_PORT=5232
CALDAV_BASE_URL=http://127.0.0.1:5232
CALDAV_PUBLIC_URL=https://calendar.example.com
CALDAV_USER=calendar
CALDAV_PASSWORD=use-a-long-random-password
MCP_PORT=3000
MCP_BEARER_TOKEN=use-a-long-random-tokenCALDAV_USER and CALDAV_PASSWORD are written into Radicale's htpasswd file when the container starts. Restart the container after changing them.
Start Radicale
docker compose up -dIf you want to use Apple Calendar locally, export and trust Caddy's local HTTPS CA:
npm run export:caddy-ca
npm run trust:caddy-caCreate the initial calendar collection:
npm run create:default-calendarLogs:
docker compose logs -f radicaleStop:
docker compose downLocal CalDAV server:
http://127.0.0.1:5232/Local HTTPS CalDAV proxy for Apple Calendar:
https://localhost:8443/Default calendar URL:
http://127.0.0.1:5232/<CALDAV_USER>/default/Apple Calendar
Use Other CalDAV Account with account type Advanced:
Account type:
AdvancedUser name: value of
CALDAV_USERPassword: value of
CALDAV_PASSWORDServer address:
127.0.0.1Server path:
/<CALDAV_USER>/Port: value of
CALDAV_PORT, usually5232Use SSL: off
Use Kerberos: off
For your current .env values:
User name: coretracker
Server address: localhost
Server path: /coretracker/
Port: 8443
Use SSL: onThe calendar itself is at /<CALDAV_USER>/default/, but Apple Calendar should be pointed at the user collection /<CALDAV_USER>/ so it can discover the calendar home. Do not put https://... into Server Address in Advanced mode; use the host only.
If Apple logs anonymous user over plain HTTP, use the HTTPS Caddy endpoint above. Recent macOS builds may refuse to send Basic Auth credentials over plain HTTP even to localhost.
Before retrying Apple Calendar, verify Basic Auth from the terminal:
npm run check:authIf Radicale logs only say anonymous user, Apple Calendar has not sent the username/password yet. Remove the failed account, delete saved Calendar/CalDAV passwords for the same host from Keychain Access, then add the account again with the fields above.
After Cloudflare is configured, use:
https://calendar.example.com/Some Apple Calendar versions do not work well behind browser-based Cloudflare Access. Test local CalDAV first. If local works but the Cloudflare URL fails, use a Cloudflare Access service token or bypass Access for trusted client traffic.
HTTP MCP Setup
The Docker Compose stack runs an HTTP MCP server at:
http://127.0.0.1:<MCP_PORT>/mcpWith the current .env, that is:
http://127.0.0.1:9996/mcpUse bearer authentication:
Authorization: Bearer <MCP_BEARER_TOKEN>Generate a local MCP client config from .env:
npm run write:mcp-configThat writes mcp.local.json, which is ignored by git because it contains the bearer token.
Smoke test the HTTP MCP endpoint:
npm run smoke:mcpThe MCP container talks to Radicale internally at http://radicale:5232, so it does not need the local Caddy HTTPS certificate.
Logs:
npm run logs:mcpExpected MCP tools include calendar, event, contact, and todo operations from dav-mcp.
Cloudflare Zero Trust Setup
Create a tunnel:
cloudflared tunnel login
cloudflared tunnel create calendarCreate ~/.cloudflared/config.yml:
tunnel: <TUNNEL_ID>
credentials-file: /Users/<you>/.cloudflared/<TUNNEL_ID>.json
ingress:
- hostname: calendar.example.com
service: http://127.0.0.1:5232
- service: http_status:404Route DNS:
cloudflared tunnel route dns calendar calendar.example.comRun the tunnel:
cloudflared tunnel run calendarIn Cloudflare Zero Trust:
Go to Access -> Applications -> Add an application.
Choose Self-hosted.
Set the application domain to
calendar.example.com.Add an access policy for your user or device.
Save the application.
CalDAV clients still use Radicale Basic Auth with CALDAV_USER and CALDAV_PASSWORD.
Notes
Calendar data is stored in
radicale/data/.The Radicale config is in
radicale/config/config.The Docker Compose file binds Radicale only to
127.0.0.1, so it is not exposed directly to the LAN.The htpasswd file uses plain text inside the local Docker volume because Radicale runs behind localhost binding and Cloudflare Access. Use filesystem permissions and full-disk encryption on the host.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- Alicense-qualityDmaintenanceEnables CRUD operations for calendar events, journal entries, and todos on any CalDAV server (like Radicale) through the Model Communication Protocol.Last updatedMIT
- AlicenseBqualityCmaintenanceA comprehensive MCP server for CalDAV calendar management, supporting multi-account CRUD operations, recurring events, tasks, journals, and advanced search.Last updated2724MIT
- Alicense-qualityDmaintenanceProvider-agnostic CalDAV calendar MCP server that connects any CalDAV calendar to AI assistants, enabling calendar operations like listing, creating, updating, and deleting events.Last updatedAGPL 3.0
- AlicenseAqualityBmaintenanceMCP server for Apple Calendar and CalDAV providers. Enables listing, creating, updating, deleting events, and checking free/busy status with per-calendar write protection.Last updated3026MIT
Related MCP Connectors
Hosted Google Calendar MCP server for AI agents. No self-hosting or Google Cloud setup.
MCP-native open-source Notion alternative: read & write pages, databases and kanban boards.
Calendly MCP Pack — wraps the Calendly API v2 for scheduling data.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/coretracker/caldav-mcp-boilerplate'
If you have feedback or need assistance with the MCP directory API, please join our Discord server