Skip to main content
Glama
Isaac-To
by Isaac-To

CalDAV MCP Forwarder

Ein vollständig zustandsloser Model Context Protocol-Server, der Kalenderoperationen von Cloudflare Workers an einen CalDAV-Server weiterleitet.

Quellcode und Bereitstellungsanleitung sind im GitHub-Repository verfügbar.

Status: Funktionale erste Veröffentlichung. Der Worker unterstützt Kalendererkennung, Ereignisauflistung/-suche, Ereignisabruf, -erstellung, -aktualisierung, -löschung und Frei/Belegt-Abfragen.

Verbindung in drei Schritten

  1. Öffnen Sie https://caldavmcp.anpc.work in einem Browser.

  2. Geben Sie Ihren CalDAV-Server, Benutzername und App-Passwort ein und klicken Sie auf Verbindung testen. Lassen Sie Kalender-URL leer, um Kalender automatisch zu erkennen.

  3. Wählen Sie bei Bedarf einen Standardkalender aus, erstellen Sie das sichere Token und kopieren Sie dann die generierte MCP-URL oder -Konfiguration in Ihren KI-Assistenten.

Die öffentliche Seite erstellt standardmäßig verschlüsselte Token ohne Ablaufdatum für eine einmalige Einrichtung und dauerhafte Verbindung. Sie können optional eine kürzere Lebensdauer wählen. Anmeldeinformationen werden über HTTPS an den Worker zur Verschlüsselung gesendet und niemals im Browser entschlüsselt. Rotieren Sie CONNECTION_TOKEN_KEY, wenn Token widerrufen werden müssen.

Der Assistent kann Ereignisse auflisten, suchen, lesen, erstellen, aktualisieren und löschen sowie Frei/Belegt-Informationen abfragen. Jede Anfrage ist unabhängig; es werden keine Kalender, Anmeldeinformationen oder Sitzungen gespeichert.

Related MCP server: mcp-labrat

Sicherheitsmodell

Platzieren Sie keine rohen Passwörter, App-Passwörter oder Zugriffstoken direkt in einer URL. URLs können vom Browserverlauf, Reverse-Proxys, Analysesystemen und Zugriffsprotokollen gespeichert werden.

Verbindungstoken sind verschlüsselte AES-GCM-Werte:

POST https://caldavmcp.anpc.work/mcp/<encrypted-connection-token>

Das Token repräsentiert Verbindungsdetails wie:

{
  "serverUrl": "https://caldav.example.com",
  "calendarUrl": "https://caldav.example.com/calendars/user/work/",
  "username": "user@example.com",
  "password": "app-password",
  "expiresAt": 1797700000
}

Der Worker entschlüsselt jedes Token für eine Anfrage und verwirft die Verbindungsdetails danach. Token laufen nicht ab, es sei denn, bei ihrer Erstellung wird ein Ablaufdatum gewählt; rotieren Sie CONNECTION_TOKEN_KEY, um alle mit dem vorherigen Schlüssel erstellten Token zu widerrufen. Ereignis- und Frei/Belegt-URLs müssen zum konfigurierten CalDAV-Server gehören. Konfigurieren Sie es als Worker-Geheimnis. Der Schlüssel muss URL-sicheres Base64 sein, das einen 128-, 192- oder 256-Bit-AES-Schlüssel enthält.

Bevorzugen Sie anbieterspezifische App-Passwörter oder OAuth-Zugriffstoken gegenüber einem primären Kontopasswort. Committen Sie niemals Token oder Anmeldeinformationen in dieses Repository.

Verbinden eines MCP-Clients

Konfigurieren Sie nach der Bereitstellung des Workers Ihren MCP-Client mit der Worker-URL. Die genaue Konfiguration variiert je nach Client, aber der Endpunkt ist:

https://caldavmcp.anpc.work/mcp/<encrypted-connection-token>

Für eine MCP-Client-Konfiguration, die einen entfernten HTTP-Server akzeptiert, verwenden Sie den Endpunkt als Server-URL. Zum Beispiel:

{
  "mcpServers": {
    "caldav": {
      "type": "http",
      "url": "https://caldavmcp.anpc.work/mcp/<encrypted-connection-token>"
    }
  }
}

Fügen Sie das obige Beispiel-Token nicht in einen echten Client ein. Ersetzen Sie es durch ein Token, das für das gewünschte CalDAV-Konto und den Kalender generiert wurde.

Der Assistent kann Werkzeuge wie die folgenden aufrufen:

  • list_calendars

  • list_events

  • search_events

  • get_event

  • create_event

  • update_event

  • delete_event

Beispielanfragen, die ein Assistent bearbeiten könnte:

  • "Was steht morgen in meinem Arbeitskalender?"

  • "Erstelle einen Zahnarzttermin für nächsten Dienstag um 10:00 Uhr."

  • "Verschiebe mein 15-Uhr-Meeting auf Freitag."

  • "Lösche das Ereignis mit dem Titel 'Projektüberprüfung'."

  • "Finde alle Ereignisse, die das Quartalsplanungsmeeting erwähnen."

Der Assistent sollte wichtige destruktive Aktionen, insbesondere das Löschen von Ereignissen, bestätigen, bevor er das entsprechende Werkzeug aufruft.

Ausgabeformat der Werkzeuge

Werkzeugantworten verwenden kompaktes JSON mit nur den für die nächste Aktion benötigten Informationen:

  • Kalenderlisten enthalten url sowie verfügbare displayName, description, timezone und color.

  • Ereignislisten und get_event enthalten url, optional etag und die aktuellen iCalendar-data.

  • create_event gibt die erstellte Ereignis-url zurück.

  • update_event gibt die aktualisierte Ereignis-url zurück.

  • delete_event gibt die gelöschte Ereignis-url und deleted: true zurück.

  • get_free_busy gibt nur die Frei/Belegt-iCalendar-data zurück.

Antworten enthalten keine HTTP-Statuscodes, rohe CalDAV-Metadaten oder Präsentationsformatierung.

Bereitstellung

Installieren Sie Abhängigkeiten:

npm install

Führen Sie den Worker lokal aus:

npm run dev

Führen Sie eine Typprüfung des Projekts durch:

npm run typecheck

Unit-Tests ausführen

npm test

Tests mit Abdeckung ausführen

npm run coverage

Abdeckungsschwellenwerte werden bei 90 % für Anweisungen, Zeilen und Funktionen und bei 85 % für Verzweigungen durchgesetzt. Die aktuellen unit-testbaren Quellmodule melden 100 % in allen vier Kategorien. Der Cloudflare Worker-Einstiegspunkt ist ausgeschlossen, da er die Workers-Laufzeit und externe CalDAV-Dienste erfordert; validieren Sie ihn mit einem bereitgestellten oder wrangler dev-Smoke-Test.

Bereitstellung auf Cloudflare Workers:

npx wrangler login
npm run deploy

Der Worker ist als Cloudflare Custom Domain unter caldavmcp.anpc.work konfiguriert. Wrangler erstellt die Domain und das Zertifikat, wenn die Zone im selben Cloudflare-Konto aktiv ist. Setzen Sie das erforderliche Geheimnis vor der Bereitstellung:

npx wrangler secret put CONNECTION_TOKEN_KEY
npm run deploy

Die Domain muss in Cloudflare DNS aktiv sein. Fügen Sie keinen widersprüchlichen CNAME-Eintrag für caldavmcp.anpc.work hinzu; Custom Domains verwalten den DNS-Eintrag.

Setzen Sie den Verschlüsselungsschlüssel als Cloudflare Worker-Geheimnis:

npx wrangler secret put CONNECTION_TOKEN_KEY

Erstellen Sie für die lokale Entwicklung .dev.vars aus .dev.vars.example und ersetzen Sie den Platzhalter durch einen generierten Schlüssel. Wrangler lädt .dev.vars automatisch beim Ausführen von npm run dev; committen Sie diese Datei nicht.

cp .dev.vars.example .dev.vars
openssl rand -base64 32 | tr '+/' '-_' | tr -d '='

Setzen Sie den Verschlüsselungsschlüssel niemals in wrangler.jsonc, Quellcode oder Client-Konfiguration.

Verfügbare Werkzeuge

Alle Werkzeuge arbeiten mit dem durch calendarUrl im Token ausgewählten Kalender oder akzeptieren bei Bedarf eine explizite calendarUrl.

Werkzeug

Zweck

list_calendars

Kalender im Konto erkennen.

list_events

Ereignisse für einen erforderlichen start/end-Bereich auflisten. Ohne calendarUrl werden alle Kalender durchsucht.

search_events

Ereignisdaten nach Text durchsuchen. Ohne calendarUrl werden alle Kalender durchsucht.

get_event

Ein Ereignis anhand seiner Objekt-URL abrufen.

create_event

Ein Ereignis mit Zusammenfassung, Start und Ende erstellen.

update_event

Ein Ereignis mit seinen aktuellen iCalendar-Daten und der Objekt-URL aktualisieren.

delete_event

Ein Ereignis löschen, optional mit Angabe seines ETags.

get_free_busy

Frei/Belegt-Daten für einen Zeitraum abfragen.

Daten sollten ISO-8601-Zeichenfolgen sein, zum Beispiel 2026-08-20T10:00:00Z. Ereignisaktualisierungen erfordern die aktuellen iCalendar-data, damit unbekannte anbieterspezifische Eigenschaften erhalten bleiben.

Werkzeugverhalten für Agenten

  • Rufen Sie zuerst list_calendars auf, wenn die verfügbaren Kalender-URLs unbekannt sind.

  • list_events und search_events erfordern start und end. Eine explizite calendarUrl wählt einen Kalender aus. Ohne diese wird der im Token konfigurierte Kalender verwendet; ist keiner konfiguriert, werden alle Kalender durchsucht.

  • search_events führt eine groß-/kleinschreibungsunabhängige Textsuche über die iCalendar-Daten jedes Ereignisses durch, nicht nur über den Ereignistitel.

  • get_event erfordert die aktuelle HTTPS-Objekt-URL des Ereignisses.

  • create_event erfordert summary, start und end; die Kalenderauswahl erfolgt über explizite URL, Token-Kalender, dann den ersten verfügbaren Kalender.

  • update_event erfordert die aktuellen Ereignis-data; senden Sie nur Felder, die geändert werden sollen, da weggelassene Felder erhalten bleiben.

  • delete_event entfernt ein Ereignis dauerhaft. Bestätigen Sie die Löschung zuerst mit dem Benutzer und übergeben Sie das aktuelle ETag, wenn verfügbar.

  • get_free_busy gibt iCalendar-Frei/Belegt-Daten für den angeforderten Bereich zurück und listet keine Ereignisdetails auf.

Zustandsloser Anfrageablauf

MCP client
   |
   | POST /mcp/<encrypted-token>
   v
Cloudflare Worker
   | decrypt token in memory
   | create request-scoped CalDAV client
   | perform one operation
   | discard credentials and response data
   v
CalDAV server

Es werden keine Kalenderdaten oder MCP-Sitzungszustände von diesem Worker gespeichert. Der Anforderungstext, die Anmeldeinformationen und die CalDAV-Antwort existieren nur während der Anfrage.

Anbieterhinweise

CalDAV-Implementierungen unterscheiden sich. Möglicherweise benötigen Sie ein App-Passwort oder einen anbieterspezifischen Endpunkt:

  • Nextcloud: unterstützt in der Regel App-Passwörter und Kalendersammlungs-URLs.

  • Fastmail: verwenden Sie ein app-spezifisches Passwort und den von Fastmail bereitgestellten CalDAV-Endpunkt.

  • iCloud: erfordert in der Regel ein app-spezifisches Passwort und den CalDAV-Endpunkt des Kontos.

  • Google Kalender: native CalDAV-Unterstützung ist eingeschränkt; verwenden Sie stattdessen die Google-API, wenn die CalDAV-Kompatibilität nicht ausreicht.

Testen Sie immer die Kalendererkennung, wiederkehrende Ereignisse, Zeitzonen, Teilnehmer, ETags und das Löschverhalten mit dem Zielanbieter.

Technologie

  • Cloudflare Workers

  • TypeScript

  • @modelcontextprotocol/sdk

  • tsdav

  • ical.js

  • zod

Einschränkungen

Der Dienst leitet Anfragen weiter und wird kein Kalendersynchronisationsdienst. Er führt kein lokales Ereignisverzeichnis, dedupliziert keine Ereignisse über Kalender hinweg oder stellt Arbeiten für die spätere Ausführung in eine Warteschlange. Wenn ein CalDAV-Anbieter nicht verfügbar ist, schlägt die Anfrage fehl, ohne aus einem persistenten Speicher wiederholt zu werden.

A
license - permissive license
-
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

  • F
    license
    -
    quality
    D
    maintenance
    An MCP server that enables interaction with CalDAV calendars to manage events and check availability through natural language or voice commands. It provides specific tools for listing, searching, and creating calendar entries using an OpenAI-compatible interface.
  • A
    license
    -
    quality
    F
    maintenance
    Provider-agnostic CalDAV calendar MCP server that connects any CalDAV calendar to AI assistants, enabling calendar operations like listing, creating, updating, and deleting events.
    AGPL 3.0
  • A
    license
    A
    quality
    B
    maintenance
    MCP server for Apple Calendar and CalDAV providers. Enables listing, creating, updating, deleting events, and checking free/busy status with per-calendar write protection.
    8
    6
    MIT

View all related MCP servers

Related MCP Connectors

  • Hosted Google Calendar MCP server for AI agents. No self-hosting or Google Cloud setup.

  • Calendar API for AI agents: events, availability, Google/Microsoft setup, scheduling, and iCal.

  • MCP server connecting AI agents to non-custodial staking data across 130+ networks.

View all MCP Connectors

Latest Blog Posts

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/Isaac-To/caldav_mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server