yandex-calendar-mcp
yandex-calendar-mcp
MCP-сервер, который даёт ИИ-ассистенту доступ к Яндекс Календарю по CalDAV. Читайте расписание, создавайте, перемещайте и удаляйте события.
Примечание о языке: описания инструментов и ответы — на русском, потому что сервер написан для русскоязычного ассистента. Код, конфигурация и этот документ — на английском. Всё остальное работает независимо от языка.
Что умеет
Чтение
События за любой период: по умолчанию сегодня, либо явный диапазон до 92 дней.
Сразу все календари, и каждое событие помечено календарём, из которого оно пришло, — или один календарь, выбранный по имени.
Повторяющиеся события разворачиваются в конкретные даты. Если разворачивание не удалось, событие возвращается с предупреждением, а не выдаётся за точное.
Участники перечислены с их ответами — принял, отклонил, предварительно или пока без ответа.
События на весь день распознаются как таковые и не показываются как встречи в полночь.
Каждый ответ указывает часовой пояс и смещение UTC, которые использовались.
Запись
Создание события: название, начало, конец или длительность, место, описание; событие с временем или на весь день, в том числе на несколько дней.
Создание повторяющегося события — ежедневно, еженедельно, ежемесячно или ежегодно — с ограничением по числу повторений или по дате окончания.
Обновление события: перенести, переименовать, изменить место или описание. Затрагиваются только переданные поля; перенесённое событие сохраняет исходную длительность, если не указано иное.
Редактирование или удаление отдельного вхождения повторяющейся серии или всей серии. Изменённый день становится переопределением
RECURRENCE-ID, удалённый —EXDATE. Это стандартные механизмы, поэтому результат корректно выглядит в приложении Яндекс и в любом другом клиенте.Приглашение людей: участников можно добавить при создании события, а также добавить или удалить позже. Яндекс сам отправляет приглашения и уведомления об отмене.
Удаление события с защитными механизмами, описанными ниже.
Часовые пояса — осознанно
Каждая метка времени преобразуется в настроенный пояс с помощью
zoneinfo. Строки времени никогда не режутся по позиции символов.Записанные события содержат явный
DTSTART;TZID=…и полный блокVTIMEZONE, поэтому любой календарный клиент читает их одинаково.Машина, на которой работает сервер, обычно находится в UTC; это никогда не просачивается в ответы, а фактически используемый пояс назван в каждом ответе, поэтому ошибка видна, а не остаётся незамеченной.
Создан для управления ассистентом
Ответы — это обычный читаемый текст с
uidсобытия, поэтому после списка можно сразу выполнить редактирование или удаление.create_eventтребует явного указания календаря: у людей бывает несколько календарей для разных целей, и событие, молча попавшее не в тот календарь, считается потерянным. Ожидается, что ассистент спросит, а не будет угадывать.Ошибки возвращаются в виде предложений с объяснением, что делать дальше, а не в виде стектрейсов.
Related MCP server: MCP Personal Calendar
Требования
Python 3.10 или новее (проверено на 3.13)
Пароль приложения Яндекса app password, а не пароль от аккаунта: https://id.yandex.ru/security/app-passwords → тип приложения "Календарь (CalDAV)"
pip install -r requirements.txttzdata включён в зависимости намеренно: урезанные Linux-образы часто поставляются без базы часовых поясов, и тогда ZoneInfo("Europe/Moscow") падает.
Конфигурация
Все настройки задаются через переменные окружения.
Variable | Required | Default | Meaning |
| да | — |
|
| да | — | пароль приложения |
| нет |
| эндпоинт CalDAV |
| нет |
| зона IANA для всех входных и выходных данных |
| нет |
| где хранятся копии изменённых и удалённых событий |
| нет | значение | адрес, который указывается организатором встречи в приглашениях |
Сервер общается по MCP через stdio. Пример конфигурации клиента — в examples/.
Инструменты
Tool | What it does |
| события за период; по умолчанию — сегодня; разворачивает повторения |
| названия и URL календарей |
| создание события, разового или повторяющегося, с участниками; |
| перенос, переименование, изменение места или описания, добавление и удаление участников; один день серии или вся серия |
| удаление события; один день серии или вся серия |
Удаление необратимо — что вас защищает
Проверка названия.
delete_eventпринимает иuid, и название события. Они сравниваются; при несовпадении ничего не удаляется, а в ответе названы оба заголовка и календарь. Устаревший или перепутанныйuid— реальный способ удалить не то событие, и именно это здесь отлавливается.Корзина. Перед каждым удалением и каждым обновлением полное исходное событие записывается в
YANDEX_TRASH_DIRв виде.ics-файла с меткой времени. Если копию записать не удалось, операция не выполняется вовсе. Восстановление — импорт этого файла обратно.Повторяющиеся серии. Любое изменение или удаление серии должно указывать, к чему оно относится:
occurrence— для одного дня,apply_to_series— для всей серии. Если не указано ни то, ни другое, инструмент отказывается и объясняет выбор. Именно это не даёт «отменить вторник» стереть год встреч.
Приглашение людей отправляет настоящие письма
Яндекс заявляет поддержку calendar-auto-schedule, поэтому добавление участника заставляет сервер отправить приглашение, а удаление — уведомление об отмене. Ни то, ни другое нельзя отозвать. Это проверено от начала до конца, а не только по заявленным возможностям сервера: приглашение, добавленное через create_event, пришло в почтовый ящик получателя.
Что из этого следует:
Адреса принимаются буквально и проверяются. Сервер никогда не выводит адрес из имени — иначе ассистент, который смутно помнит контакт, написал бы незнакомцу.
update_eventдобавляет и удаляет участников, а не заменяет список, поэтому уже данные остальными ответы сохраняются.Каждый ответ перечисляет, кто именно в событии и как ответил, поэтому неверный адрес виден сразу.
Ассистент, управляющий этим сервером, должен подтвердить список адресов с пользователем перед вызовом. Отправка приглашения — это действие, которое нельзя отменить.
Тестирование
python tests/write_cycle.py "Calendar name"Самозачищающиеся прогоны на реальном календаре через настоящий протокол. Разовое событие: создать → попытаться удалить с неверным названием (должен быть отказ) → перенести и переименовать → убедиться, что оно появилось в списке → удалить → убедиться, что его нет. Серия из трёх вхождений: изменить один день, удалить один день, удалить всю серию, каждый раз проверяя, что изменился ровно один день. Если удаление не удалось, uid оставшегося события печатается, а не остаётся молча.
Прогон с участниками выполняется только тогда, когда адрес передан явно, потому что он отправляет настоящие письма:
python tests/write_cycle.py "Calendar name" someone@example.comtests/probe.jsonl — набор сырых сообщений протокола для проверки рукопожатия и пути чтения:
python src/server.py < tests/probe.jsonlИзвестные ограничения
События на весь день можно создавать, но их время нельзя перенести.
Правила повторения создаются в их распространённых формах (каждый день / неделю / месяц / год, с количеством или датой окончания). Более сложные правила — «каждый второй вторник», наборы дней недели — читаются и разворачиваются корректно, но через инструмент их создать нельзя.
Напоминания и сигналы не обрабатываются.
Участники всегда приглашаются как обязательные; опциональные участники и роли отдельных участников не раскрываются.
Проверено только с Яндекс Календарём. Другие CalDAV-серверы, вероятно, заработают, но не тестировались.
Лицензия
MIT — см. LICENSE.
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
- AlicenseNot gradedqualityAmaintenanceAn 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.43297MIT
- AlicenseNot gradedqualityAmaintenanceA CalDAV-compliant MCP server that enables AI models to manage personal schedules and to-do lists, supporting batch creation, modification, and intelligent timezone adjustments.MIT
- AlicenseNot gradedqualityFmaintenanceProvider-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
- AlicenseNot gradedqualityFmaintenanceA comprehensive MCP server that provides AI assistants with natural language access to Apple Calendar, enabling reading, searching, creating, and managing calendar events.3MIT
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.
AI-native scheduling: check availability, book meetings, cancel and reschedule via MCP
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/PlatonKing/yandex-calendar-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server