CalDAV MCP Forwarder
CalDAV MCP Forwarder
Полностью не имеющий состояния сервер Model Context Protocol, который перенаправляет операции с календарём на CalDAV-сервер из Cloudflare Workers.
Исходный код и инструкции по развёртыванию доступны в репозитории GitHub.
Статус: Функциональный первый релиз. Worker поддерживает обнаружение календарей, поиск/просмотр событий, получение, создание, обновление, удаление событий и запросы свободного/занятого времени.
Подключение в три шага
Откройте
https://caldavmcp.anpc.workв браузере.Введите ваш CalDAV-сервер, имя пользователя и пароль приложения, затем нажмите Test connection. Оставьте Calendar URL пустым, чтобы календари были обнаружены автоматически.
При желании выберите календарь по умолчанию, создайте защищённый токен, затем скопируйте сгенерированный MCP URL или конфигурацию в ваш ИИ-ассистент.
Публичная страница по умолчанию создаёт зашифрованные токены без срока действия для подключения по принципу «установил и забыл». При желании можно выбрать более короткий срок жизни. Учётные данные отправляются по HTTPS на Worker для шифрования и никогда не декодируются в браузере. Поверните CONNECTION_TOKEN_KEY, если токены необходимо отозвать.
Ассистент может выводить список, искать, читать, создавать, обновлять и удалять события, а также запрашивать информацию о свободном/занятом времени. Каждый запрос независим; никакие календари, учётные данные или сессии не сохраняются.
Related MCP server: mcp-labrat
Модель безопасности
Не помещайте необработанные пароли, пароли приложений или токены доступа непосредственно в URL. URL могут сохраняться в истории браузера, обратных прокси, системах аналитики и журналах доступа.
Токены соединения представляют собой зашифрованные значения AES-GCM:
POST https://caldavmcp.anpc.work/mcp/<encrypted-connection-token>Токен содержит детали подключения, такие как:
{
"serverUrl": "https://caldav.example.com",
"calendarUrl": "https://caldav.example.com/calendars/user/work/",
"username": "user@example.com",
"password": "app-password",
"expiresAt": 1797700000
}Worker расшифровывает каждый токен для одного запроса и сразу после этого отбрасывает детали подключения. Токены не имеют срока действия, если при их создании не был выбран срок; поверните CONNECTION_TOKEN_KEY, чтобы отозвать все токены, созданные с предыдущим ключом. URL событий и свободного/занятого времени должны принадлежать настроенному CalDAV-серверу. Настройте его как секрет Worker. Ключ должен быть URL-безопасным base64, содержащим 128-, 192- или 256-битный AES-ключ.
Предпочитайте пароли приложений, предоставленные провайдером, или OAuth-токены доступа вместо основного пароля учётной записи. Никогда не фиксируйте токены или учётные данные в этом репозитории.
Подключение MCP-клиента
После развёртывания Worker настройте ваш MCP-клиент, указав URL Worker. Точная конфигурация зависит от клиента, но конечная точка такова:
https://caldavmcp.anpc.work/mcp/<encrypted-connection-token>Для конфигурации MCP-клиента, который принимает удалённый HTTP-сервер, используйте конечную точку в качестве URL сервера. Например:
{
"mcpServers": {
"caldav": {
"type": "http",
"url": "https://caldavmcp.anpc.work/mcp/<encrypted-connection-token>"
}
}
}Не вставляйте приведённый выше пример токена в реальный клиент. Замените его токеном, сгенерированным для нужной учётной записи CalDAV и календаря.
Ассистент сможет вызывать такие инструменты, как:
list_calendarslist_eventssearch_eventsget_eventcreate_eventupdate_eventdelete_event
Примеры запросов, которые может обработать ассистент:
«Что у меня в рабочем календаре завтра?»
«Создай запись к стоматологу на следующий вторник в 10:00.»
«Перенеси мою встречу в 15:00 на пятницу.»
«Отмени событие с названием "Project review".»
«Найди все события, упоминающие ежеквартальное плановое совещание.»
Ассистент должен подтверждать важные деструктивные действия, особенно удаление событий, перед вызовом соответствующего инструмента.
Формат вывода инструментов
Ответы инструментов используют компактный JSON, содержащий только информацию, необходимую для следующего действия:
Списки календарей содержат
url, а также доступныеdisplayName,description,timezoneиcolor.Списки событий и
get_eventсодержатurl, опциональныйetagи текущие iCalendardata.create_eventвозвращаетurlсозданного события.update_eventвозвращаетurlобновлённого события.delete_eventвозвращаетurlудалённого события иdeleted: true.get_free_busyвозвращает только iCalendardataсвободного/занятого времени.
Ответы не включают HTTP-статусы, необработанные метаданные CalDAV или форматирование представления.
Развёртывание
Установите зависимости:
npm installЗапустите Worker локально:
npm run devПроверьте типы в проекте:
npm run typecheckЗапуск модульных тестов
npm test
Запуск тестов с покрытием
npm run coverage
Пороги покрытия установлены на уровне 90% для операторов, строк и функций,
и 85% для ветвлений. Текущие модули исходного кода, поддающиеся модульному тестированию, показывают 100% по всем четырём категориям. Точка входа Cloudflare Worker исключена, так как она требует среды выполнения Workers и внешних CalDAV-сервисов; проверяйте её с помощью развёрнутого или wrangler dev дымового теста.
Разверните на Cloudflare Workers:
npx wrangler login
npm run deployWorker настроен как пользовательский домен Cloudflare по адресу
caldavmcp.anpc.work. Wrangler создаёт домен и сертификат, когда зона активна в той же учётной записи Cloudflare. Установите необходимый секрет перед развёртыванием:
npx wrangler secret put CONNECTION_TOKEN_KEY
npm run deployДомен должен быть активен в DNS Cloudflare. Не добавляйте конфликтующую CNAME-запись для caldavmcp.anpc.work; пользовательские домены управляют DNS-записью.
Установите ключ шифрования как секрет Cloudflare Worker:
npx wrangler secret put CONNECTION_TOKEN_KEYДля локальной разработки создайте .dev.vars из .dev.vars.example и замените
заполнитель на сгенерированный ключ. Wrangler автоматически загружает .dev.vars при запуске npm run dev; не фиксируйте этот файл.
cp .dev.vars.example .dev.vars
openssl rand -base64 32 | tr '+/' '-_' | tr -d '='Никогда не помещайте ключ шифрования в wrangler.jsonc, исходный код или конфигурацию клиента.
Доступные инструменты
Все инструменты работают с календарём, выбранным через calendarUrl в токене, или принимают явный calendarUrl, где это уместно.
Инструмент | Назначение |
| Обнаружить календари в учётной записи. |
| Вывести список событий за обязательный диапазон |
| Искать данные событий по тексту. Без |
| Получить событие по его URL объекта. |
| Создать событие с заголовком, началом и концом. |
| Обновить событие, используя его текущие iCalendar-данные и URL объекта. |
| Удалить событие, опционально указав его ETag. |
| Запросить данные свободного/занятого времени за временной диапазон. |
Даты должны быть строками в формате ISO 8601, например 2026-08-20T10:00:00Z. Обновления событий требуют текущих iCalendar data, чтобы сохранить неизвестные свойства, специфичные для провайдера.
Поведение инструментов для агентов
Сначала вызовите
list_calendars, если доступные URL календарей неизвестны.list_eventsиsearch_eventsтребуютstartиend. ЯвныйcalendarUrlвыбирает один календарь. Без него используется календарь, настроенный в токене; если ни один не настроен, поиск ведётся по всем календарям.search_eventsвыполняет текстовый поиск без учёта регистра по iCalendar-данным каждого события, а не только по заголовку.get_eventтребует текущий HTTPS URL объекта события.create_eventтребуетsummary,startиend; выбор календаря: явный URL, календарь из токена, затем первый доступный календарь.update_eventтребует текущиеdataсобытия; отправляйте только те поля, которые должны измениться, так как опущенные поля сохраняются.delete_eventбезвозвратно удаляет событие. Сначала подтвердите удаление с пользователем и передавайте текущий ETag, если он доступен.get_free_busyвозвращает iCalendar-данные свободного/занятого времени для запрошенного диапазона и не выводит детали событий.
Поток запросов без состояния
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Никакие данные календаря или состояние MCP-сессии не сохраняются этим Worker. Тело запроса, учётные данные и ответ CalDAV существуют только во время запроса.
Заметки по провайдерам
Реализации CalDAV различаются. Возможно, вам понадобится пароль приложения или конечная точка, специфичная для провайдера:
Nextcloud: обычно поддерживает пароли приложений и URL коллекций календарей.
Fastmail: используйте пароль, специфичный для приложения, и конечную точку CalDAV, предоставленную Fastmail.
iCloud: как правило, требуется пароль приложения и конечная точка CalDAV учётной записи.
Google Calendar: нативная поддержка CalDAV ограничена; используйте API Google, если совместимость с CalDAV недостаточна.
Всегда тестируйте обнаружение календарей, повторяющиеся события, часовые пояса, участников, ETag и поведение при удалении с целевым провайдером.
Технологии
Cloudflare Workers
TypeScript
@modelcontextprotocol/sdktsdavical.jszod
Ограничения
Сервис перенаправляет запросы и не становится службой синхронизации календарей. Он не ведёт локальный индекс событий, не дедуплицирует события между календарями и не ставит работу в очередь для последующего выполнения. Если провайдер CalDAV недоступен, запрос завершается ошибкой без повторной попытки из постоянного хранилища.
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