CalDAV calendars

Official registry Productivity

Read and write CalDAV calendars: events, tasks and journal entries over the open standard

Install

Add this to your client's MCP configuration (Claude Desktop: claude_desktop_config.json; Cursor: .cursor/mcp.json; VS Code and others use the same "mcpServers" shape).

NPM package @ni-c/caldav-mcp
Claude Code
claude mcp add caldav-calendars -e 'CALDAV_URL=<CALDAV_URL>' -e 'CALDAV_USERNAME=<CALDAV_USERNAME>' -e 'CALDAV_PASSWORD=<your caldav_password>' -e 'CALDAV_TOKEN=<your caldav_token>' -e 'CALDAV_CALENDARS=<CALDAV_CALENDARS>' -e 'CALDAV_TIMEZONE=<CALDAV_TIMEZONE>' -e 'CALDAV_USER_EMAIL=<CALDAV_USER_EMAIL>' -e 'CALDAV_MAX_EVENTS=<CALDAV_MAX_EVENTS>' -e 'CALDAV_READ_ONLY=<CALDAV_READ_ONLY>' -e 'CALDAV_INSECURE_TLS=<CALDAV_INSECURE_TLS>' -e 'CALDAV_ALLOW_PLAINTEXT=<CALDAV_ALLOW_PLAINTEXT>' -e 'CALDAV_ALLOW_TOOLS=<CALDAV_ALLOW_TOOLS>' -e 'CALDAV_DENY_TOOLS=<CALDAV_DENY_TOOLS>' -e 'ELICITATION=<ELICITATION>' -- npx -y @ni-c/caldav-mcp@0.1.5
JSON configuration (Claude Desktop, Cursor, VS Code)
{
    "mcpServers": {
        "caldav-calendars": {
            "command": "npx",
            "args": [
                "-y",
                "@ni-c/caldav-mcp@0.1.5"
            ],
            "env": {
                "CALDAV_URL": "<CALDAV_URL>",
                "CALDAV_USERNAME": "<CALDAV_USERNAME>",
                "CALDAV_PASSWORD": "<your caldav_password>",
                "CALDAV_TOKEN": "<your caldav_token>",
                "CALDAV_CALENDARS": "<CALDAV_CALENDARS>",
                "CALDAV_TIMEZONE": "<CALDAV_TIMEZONE>",
                "CALDAV_USER_EMAIL": "<CALDAV_USER_EMAIL>",
                "CALDAV_MAX_EVENTS": "<CALDAV_MAX_EVENTS>",
                "CALDAV_READ_ONLY": "<CALDAV_READ_ONLY>",
                "CALDAV_INSECURE_TLS": "<CALDAV_INSECURE_TLS>",
                "CALDAV_ALLOW_PLAINTEXT": "<CALDAV_ALLOW_PLAINTEXT>",
                "CALDAV_ALLOW_TOOLS": "<CALDAV_ALLOW_TOOLS>",
                "CALDAV_DENY_TOOLS": "<CALDAV_DENY_TOOLS>",
                "ELICITATION": "<ELICITATION>"
            }
        }
    }
}

Environment variables

  • CALDAV_URL required Root of the CalDAV server, e.g. https://dav.example.net. A calendar collection URL also works.
  • CALDAV_USERNAME Account name. Most hosted services want an app-specific password with it.
  • CALDAV_PASSWORD secret Password or app-specific password. Deleted from the environment once read.
  • CALDAV_TOKEN secret Bearer token, as an alternative to username and password. Not both.
  • CALDAV_CALENDARS Comma-separated calendars this server may touch, by path or final path segment. Default: all of them.
  • CALDAV_TIMEZONE IANA zone for timestamps that carry no offset, e.g. Europe/Berlin (default: UTC)
  • CALDAV_USER_EMAIL The address you are invited as, so respond_to_event can find your own attendee line
  • CALDAV_MAX_EVENTS Entries a listing returns by default, 1 to 500 (default: 100)
  • CALDAV_READ_ONLY Set to true to register only the read tools (default: false)
  • CALDAV_INSECURE_TLS Set to true to accept a self-signed certificate on the configured host only (default: false)
  • CALDAV_ALLOW_PLAINTEXT Set to true to allow a plain http:// URL to a host that is not loopback, which sends the credentials unencrypted (default: false)
  • CALDAV_ALLOW_TOOLS Comma-separated tool names or list_* prefixes to register; 'essential' selects a curated preset (default: all tools)
  • CALDAV_DENY_TOOLS Comma-separated tool names or list_* prefixes to remove from whatever the allow list left
  • ELICITATION Deliberately unprefixed, and reaches every MCP server in the environment. Set to false to make guarded tools use the two-call token instead of a dialog (default: true)
OCI package ghcr.io/ni-c/caldav-mcp:0.1.5
Claude Code
claude mcp add caldav-calendars -e 'CALDAV_URL=<CALDAV_URL>' -e 'CALDAV_USERNAME=<CALDAV_USERNAME>' -e 'CALDAV_PASSWORD=<your caldav_password>' -e 'CALDAV_TOKEN=<your caldav_token>' -e 'CALDAV_CALENDARS=<CALDAV_CALENDARS>' -e 'CALDAV_TIMEZONE=<CALDAV_TIMEZONE>' -e 'CALDAV_USER_EMAIL=<CALDAV_USER_EMAIL>' -e 'CALDAV_MAX_EVENTS=<CALDAV_MAX_EVENTS>' -e 'CALDAV_READ_ONLY=<CALDAV_READ_ONLY>' -e 'CALDAV_INSECURE_TLS=<CALDAV_INSECURE_TLS>' -e 'CALDAV_ALLOW_PLAINTEXT=<CALDAV_ALLOW_PLAINTEXT>' -e 'CALDAV_ALLOW_TOOLS=<CALDAV_ALLOW_TOOLS>' -e 'CALDAV_DENY_TOOLS=<CALDAV_DENY_TOOLS>' -e 'ELICITATION=<ELICITATION>' -- docker run -i --rm ghcr.io/ni-c/caldav-mcp:0.1.5
JSON configuration (Claude Desktop, Cursor, VS Code)
{
    "mcpServers": {
        "caldav-calendars": {
            "command": "docker",
            "args": [
                "run",
                "-i",
                "--rm",
                "ghcr.io/ni-c/caldav-mcp:0.1.5"
            ],
            "env": {
                "CALDAV_URL": "<CALDAV_URL>",
                "CALDAV_USERNAME": "<CALDAV_USERNAME>",
                "CALDAV_PASSWORD": "<your caldav_password>",
                "CALDAV_TOKEN": "<your caldav_token>",
                "CALDAV_CALENDARS": "<CALDAV_CALENDARS>",
                "CALDAV_TIMEZONE": "<CALDAV_TIMEZONE>",
                "CALDAV_USER_EMAIL": "<CALDAV_USER_EMAIL>",
                "CALDAV_MAX_EVENTS": "<CALDAV_MAX_EVENTS>",
                "CALDAV_READ_ONLY": "<CALDAV_READ_ONLY>",
                "CALDAV_INSECURE_TLS": "<CALDAV_INSECURE_TLS>",
                "CALDAV_ALLOW_PLAINTEXT": "<CALDAV_ALLOW_PLAINTEXT>",
                "CALDAV_ALLOW_TOOLS": "<CALDAV_ALLOW_TOOLS>",
                "CALDAV_DENY_TOOLS": "<CALDAV_DENY_TOOLS>",
                "ELICITATION": "<ELICITATION>"
            }
        }
    }
}

Environment variables

  • CALDAV_URL required Root of the CalDAV server, e.g. https://dav.example.net. A calendar collection URL also works.
  • CALDAV_USERNAME Account name. Most hosted services want an app-specific password with it.
  • CALDAV_PASSWORD secret Password or app-specific password. Deleted from the environment once read.
  • CALDAV_TOKEN secret Bearer token, as an alternative to username and password. Not both.
  • CALDAV_CALENDARS Comma-separated calendars this server may touch, by path or final path segment. Default: all of them.
  • CALDAV_TIMEZONE IANA zone for timestamps that carry no offset, e.g. Europe/Berlin (default: UTC)
  • CALDAV_USER_EMAIL The address you are invited as, so respond_to_event can find your own attendee line
  • CALDAV_MAX_EVENTS Entries a listing returns by default, 1 to 500 (default: 100)
  • CALDAV_READ_ONLY Set to true to register only the read tools (default: false)
  • CALDAV_INSECURE_TLS Set to true to accept a self-signed certificate on the configured host only (default: false)
  • CALDAV_ALLOW_PLAINTEXT Set to true to allow a plain http:// URL to a host that is not loopback, which sends the credentials unencrypted (default: false)
  • CALDAV_ALLOW_TOOLS Comma-separated tool names or list_* prefixes to register; 'essential' selects a curated preset (default: all tools)
  • CALDAV_DENY_TOOLS Comma-separated tool names or list_* prefixes to remove from whatever the allow list left
  • ELICITATION Deliberately unprefixed, and reaches every MCP server in the environment. Set to false to make guarded tools use the two-call token instead of a dialog (default: true)

Frequently asked questions

What is CalDAV calendars?

Read and write CalDAV calendars: events, tasks and journal entries over the open standard

How do I install CalDAV calendars?

It runs on your machine. In Claude Code: claude mcp add caldav-calendars -e 'CALDAV_URL=<CALDAV_URL>' -e 'CALDAV_USERNAME=<CALDAV_USERNAME>' -e 'CALDAV_PASSWORD=<your caldav_password>' -e 'CALDAV_TOKEN=<your caldav_token>' -e 'CALDAV_CALENDARS=<CALDAV_CALENDARS>' -e 'CALDAV_TIMEZONE=<CALDAV_TIMEZONE>' -e 'CALDAV_USER_EMAIL=<CALDAV_USER_EMAIL>' -e 'CALDAV_MAX_EVENTS=<CALDAV_MAX_EVENTS>' -e 'CALDAV_READ_ONLY=<CALDAV_READ_ONLY>' -e 'CALDAV_INSECURE_TLS=<CALDAV_INSECURE_TLS>' -e 'CALDAV_ALLOW_PLAINTEXT=<CALDAV_ALLOW_PLAINTEXT>' -e 'CALDAV_ALLOW_TOOLS=<CALDAV_ALLOW_TOOLS>' -e 'CALDAV_DENY_TOOLS=<CALDAV_DENY_TOOLS>' -e 'ELICITATION=<ELICITATION>' -- npx -y @ni-c/caldav-mcp@0.1.5. For other clients, paste the JSON configuration from this page into their MCP settings.

Does CalDAV calendars need an API key?

Yes. It expects CALDAV_URL, CALDAV_PASSWORD, CALDAV_TOKEN, which you set in its configuration.

Is CalDAV calendars open source?

Its code is public on GitHub, but the repository does not declare a standard license.

Who maintains CalDAV calendars?

It is published by ni-c. AI.tn lists it but does not maintain or endorse it.

From the official MCP Registry. Listing is not an endorsement: review a server's code and permissions before giving it access to your data.