Skip to main content
Glama

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.txt

tzdata включён в зависимости намеренно: урезанные Linux-образы часто поставляются без базы часовых поясов, и тогда ZoneInfo("Europe/Moscow") падает.

Конфигурация

Все настройки задаются через переменные окружения.

Variable

Required

Default

Meaning

YANDEX_USERNAME

да

name@yandex.ru

YANDEX_PASSWORD

да

пароль приложения

YANDEX_CALDAV_URL

нет

https://caldav.yandex.ru

эндпоинт CalDAV

YANDEX_TIMEZONE

нет

Europe/Moscow

зона IANA для всех входных и выходных данных

YANDEX_TRASH_DIR

нет

<project>/trash

где хранятся копии изменённых и удалённых событий

YANDEX_ORGANIZER

нет

значение YANDEX_USERNAME

адрес, который указывается организатором встречи в приглашениях

Сервер общается по MCP через stdio. Пример конфигурации клиента — в examples/.

Инструменты

Tool

What it does

list_events

события за период; по умолчанию — сегодня; разворачивает повторения

list_calendars

названия и URL календарей

create_event

создание события, разового или повторяющегося, с участниками; calendar обязателен

update_event

перенос, переименование, изменение места или описания, добавление и удаление участников; один день серии или вся серия

delete_event

удаление события; один день серии или вся серия

Удаление необратимо — что вас защищает

  1. Проверка названия. delete_event принимает и uid, и название события. Они сравниваются; при несовпадении ничего не удаляется, а в ответе названы оба заголовка и календарь. Устаревший или перепутанный uid — реальный способ удалить не то событие, и именно это здесь отлавливается.

  2. Корзина. Перед каждым удалением и каждым обновлением полное исходное событие записывается в YANDEX_TRASH_DIR в виде .ics-файла с меткой времени. Если копию записать не удалось, операция не выполняется вовсе. Восстановление — импорт этого файла обратно.

  3. Повторяющиеся серии. Любое изменение или удаление серии должно указывать, к чему оно относится: 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.com

tests/probe.jsonl — набор сырых сообщений протокола для проверки рукопожатия и пути чтения:

python src/server.py < tests/probe.jsonl

Известные ограничения

  • События на весь день можно создавать, но их время нельзя перенести.

  • Правила повторения создаются в их распространённых формах (каждый день / неделю / месяц / год, с количеством или датой окончания). Более сложные правила — «каждый второй вторник», наборы дней недели — читаются и разворачиваются корректно, но через инструмент их создать нельзя.

  • Напоминания и сигналы не обрабатываются.

  • Участники всегда приглашаются как обязательные; опциональные участники и роли отдельных участников не раскрываются.

  • Проверено только с Яндекс Календарём. Другие CalDAV-серверы, вероятно, заработают, но не тестировались.

Лицензия

MIT — см. LICENSE.

A
license - permissive license
Not graded
quality - not tested
C
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

  • A
    license
    Not graded
    quality
    A
    maintenance
    A 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
  • A
    license
    Not graded
    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

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.

  • AI-native scheduling: check availability, book meetings, cancel and reschedule via MCP

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/PlatonKing/yandex-calendar-mcp'

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