A TypeScript MCP server for iCloud Calendar with native multi-VALARM support.
Setup
Choose your client, copy the config, then fill in any required environment variables.
claude mcp add caldav --env CALDAV_USERNAME='<CALDAV_USERNAME>' --env CALDAV_PASSWORD='<CALDAV_PASSWORD>' -- docker run -i --rm -e CALDAV_USERNAME -e CALDAV_PASSWORD ghcr.io/lukegskw/caldav-mcp:0.2.0~/.codex/config.toml
[mcp_servers.caldav]
command = "docker"
args = ["run", "-i", "--rm", "-e", "CALDAV_USERNAME", "-e", "CALDAV_PASSWORD", "ghcr.io/lukegskw/caldav-mcp:0.2.0"]
env = { CALDAV_USERNAME = "<CALDAV_USERNAME>", CALDAV_PASSWORD = "<CALDAV_PASSWORD>" }
# codex mcp add caldav --env CALDAV_USERNAME='<CALDAV_USERNAME>' --env CALDAV_PASSWORD='<CALDAV_PASSWORD>' -- docker run -i --rm -e CALDAV_USERNAME -e CALDAV_PASSWORD ghcr.io/lukegskw/caldav-mcp:0.2.0~/.cursor/mcp.json
{
"mcpServers": {
"caldav": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"CALDAV_USERNAME",
"-e",
"CALDAV_PASSWORD",
"ghcr.io/lukegskw/caldav-mcp:0.2.0"
],
"env": {
"CALDAV_USERNAME": "<CALDAV_USERNAME>",
"CALDAV_PASSWORD": "<CALDAV_PASSWORD>"
}
}
}
}.vscode/mcp.json
{
"servers": {
"caldav": {
"type": "stdio",
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"CALDAV_USERNAME",
"-e",
"CALDAV_PASSWORD",
"ghcr.io/lukegskw/caldav-mcp:0.2.0"
],
"env": {
"CALDAV_USERNAME": "<CALDAV_USERNAME>",
"CALDAV_PASSWORD": "<CALDAV_PASSWORD>"
}
}
}
}~/.gemini/settings.json
{
"mcpServers": {
"caldav": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"CALDAV_USERNAME",
"-e",
"CALDAV_PASSWORD",
"ghcr.io/lukegskw/caldav-mcp:0.2.0"
],
"env": {
"CALDAV_USERNAME": "<CALDAV_USERNAME>",
"CALDAV_PASSWORD": "<CALDAV_PASSWORD>"
}
}
}
}claude_desktop_config.json
{
"mcpServers": {
"caldav": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"CALDAV_USERNAME",
"-e",
"CALDAV_PASSWORD",
"ghcr.io/lukegskw/caldav-mcp:0.2.0"
],
"env": {
"CALDAV_USERNAME": "<CALDAV_USERNAME>",
"CALDAV_PASSWORD": "<CALDAV_PASSWORD>"
}
}
}
}.trae/mcp.json
{
"mcpServers": {
"caldav": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"CALDAV_USERNAME",
"-e",
"CALDAV_PASSWORD",
"ghcr.io/lukegskw/caldav-mcp:0.2.0"
],
"env": {
"CALDAV_USERNAME": "<CALDAV_USERNAME>",
"CALDAV_PASSWORD": "<CALDAV_PASSWORD>"
}
}
}
}Environment variables
CALDAV_USERNAMECALDAV_PASSWORD
Replace the placeholders with your own credentials and keep them out of version control.