CalDAV MCP Forwarder
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
Öffnen Sie
https://caldavmcp.anpc.workin einem Browser.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.
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_calendarslist_eventssearch_eventsget_eventcreate_eventupdate_eventdelete_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
urlsowie verfügbaredisplayName,description,timezoneundcolor.Ereignislisten und
get_evententhaltenurl, optionaletagund die aktuellen iCalendar-data.create_eventgibt die erstellte Ereignis-urlzurück.update_eventgibt die aktualisierte Ereignis-urlzurück.delete_eventgibt die gelöschte Ereignis-urlunddeleted: truezurück.get_free_busygibt nur die Frei/Belegt-iCalendar-datazurück.
Antworten enthalten keine HTTP-Statuscodes, rohe CalDAV-Metadaten oder Präsentationsformatierung.
Bereitstellung
Installieren Sie Abhängigkeiten:
npm installFühren Sie den Worker lokal aus:
npm run devFühren Sie eine Typprüfung des Projekts durch:
npm run typecheckUnit-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 deployDer 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 deployDie 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_KEYErstellen 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 |
| Kalender im Konto erkennen. |
| Ereignisse für einen erforderlichen |
| Ereignisdaten nach Text durchsuchen. Ohne |
| Ein Ereignis anhand seiner Objekt-URL abrufen. |
| Ein Ereignis mit Zusammenfassung, Start und Ende erstellen. |
| Ein Ereignis mit seinen aktuellen iCalendar-Daten und der Objekt-URL aktualisieren. |
| Ein Ereignis löschen, optional mit Angabe seines ETags. |
| 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_calendarsauf, wenn die verfügbaren Kalender-URLs unbekannt sind.list_eventsundsearch_eventserfordernstartundend. Eine explizitecalendarUrlwählt einen Kalender aus. Ohne diese wird der im Token konfigurierte Kalender verwendet; ist keiner konfiguriert, werden alle Kalender durchsucht.search_eventsführt eine groß-/kleinschreibungsunabhängige Textsuche über die iCalendar-Daten jedes Ereignisses durch, nicht nur über den Ereignistitel.get_eventerfordert die aktuelle HTTPS-Objekt-URL des Ereignisses.create_eventerfordertsummary,startundend; die Kalenderauswahl erfolgt über explizite URL, Token-Kalender, dann den ersten verfügbaren Kalender.update_eventerfordert die aktuellen Ereignis-data; senden Sie nur Felder, die geändert werden sollen, da weggelassene Felder erhalten bleiben.delete_evententfernt ein Ereignis dauerhaft. Bestätigen Sie die Löschung zuerst mit dem Benutzer und übergeben Sie das aktuelle ETag, wenn verfügbar.get_free_busygibt 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 serverEs 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/sdktsdavical.jszod
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.
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-qualityAmaintenanceAn MCP server that exposes CalDAV calendar operations as tools for AI assistants. It enables users to connect to CalDAV servers to create and list calendar events within specific timeframes.37897MIT
- Flicense-qualityDmaintenanceAn 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.
- Alicense-qualityFmaintenanceProvider-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
- AlicenseAqualityBmaintenanceMCP server for Apple Calendar and CalDAV providers. Enables listing, creating, updating, deleting events, and checking free/busy status with per-calendar write protection.86MIT
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.
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/Isaac-To/caldav_mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server