Skip to main content

yandex-calendar-mcp

PyPI CI License: MIT

MCP-сервер для Яндекс Календаря. Подключается по CalDAV к caldav.yandex.ru и даёт модели доступ к событиям, задачам и занятости коллег: чтение всегда, запись только в режиме write.

1. Получить пароль приложения

Яндекс не пускает в CalDAV по основному паролю аккаунта, нужен отдельный пароль приложения.

  1. Открыть https://id.yandex.ru/security/app-passwords, залогинившись в Яндекс ID.
  2. В блоке «Создать пароль приложения» выбрать тип «Календарь».
  3. Ввести любое название, например mcp, и нажать «Далее».
  4. Скопировать пароль из всплывающего окна. Он показывается один раз.
  5. Пароль может заработать не сразу, Яндекс просит подождать до 2–3 часов.

Для Яндекс 360 для бизнеса логин это полный адрес на домене компании (user@company.ru). Если в организации запрещены пароли приложений, запрет снимает администратор.

Источник: инструкция Яндекса по синхронизации календаря.

2. Подключить

Нужен uv: команда uvx скачает пакет с PyPI и запустит его. Переменные окружения:

Переменная Значение
YANDEX_CALDAV_EMAIL полный адрес, login@yandex.ru или login@домен
YANDEX_CALDAV_KEY пароль приложения из шага 1
YANDEX_CALDAV_MODE readonly (по умолчанию) или write
YANDEX_CALDAV_TZ таймзона для дат, по умолчанию Europe/Moscow

Claude Code, только чтение:

claude mcp add yandex-calendar \
  -e YANDEX_CALDAV_EMAIL=login@yandex.ru \
  -e YANDEX_CALDAV_KEY=пароль_приложения \
  -- uvx yandex-calendar-mcp@latest

Claude Code, с записью (YANDEX_CALDAV_MODE=write включает тулы создания, изменения и удаления):

claude mcp add yandex-calendar \
  -e YANDEX_CALDAV_EMAIL=login@yandex.ru \
  -e YANDEX_CALDAV_KEY=пароль_приложения \
  -e YANDEX_CALDAV_MODE=write \
  -- uvx yandex-calendar-mcp@latest

Claude Desktop и другие клиенты с JSON-конфигом:

{
  "mcpServers": {
    "yandex-calendar": {
      "command": "uvx",
      "args": ["yandex-calendar-mcp@latest"],
      "env": {
        "YANDEX_CALDAV_EMAIL": "login@yandex.ru",
        "YANDEX_CALDAV_KEY": "пароль_приложения",
        "YANDEX_CALDAV_MODE": "readonly"
      }
    }
  }
}

Codex CLI (конфиг ~/.codex/config.toml):

codex mcp add yandex-calendar \
  --env YANDEX_CALDAV_EMAIL=login@yandex.ru \
  --env YANDEX_CALDAV_KEY=пароль_приложения \
  --env YANDEX_CALDAV_MODE=readonly \
  -- uvx yandex-calendar-mcp@latest

То же самое руками в ~/.codex/config.toml:

[mcp_servers.yandex-calendar]
command = "uvx"
args = ["yandex-calendar-mcp@latest"]

[mcp_servers.yandex-calendar.env]
YANDEX_CALDAV_EMAIL = "login@yandex.ru"
YANDEX_CALDAV_KEY = "пароль_приложения"
YANDEX_CALDAV_MODE = "readonly"

Cursor: Settings → MCP → Add new global MCP server, либо файл ~/.cursor/mcp.json для всех проектов или .cursor/mcp.json в корне проекта. Пароль можно не писать в файл, а взять из переменной окружения через ${env:...}:

{
  "mcpServers": {
    "yandex-calendar": {
      "type": "stdio",
      "command": "uvx",
      "args": ["yandex-calendar-mcp@latest"],
      "env": {
        "YANDEX_CALDAV_EMAIL": "login@yandex.ru",
        "YANDEX_CALDAV_KEY": "${env:YANDEX_CALDAV_KEY}",
        "YANDEX_CALDAV_MODE": "readonly"
      }
    }
  }
}

Точка входа yandex-calendar-mcp-ro всегда поднимает режим чтения, что бы ни стояло в YANDEX_CALDAV_MODE:

uvx --from yandex-calendar-mcp@latest yandex-calendar-mcp-ro

Запуск из исходников и проверка подключения описаны в docs/DEVELOPMENT.md.

3. Тулы

Даты принимаются в ISO 8601: 2026-10-09 означает весь день, 2026-10-09T15:00 точный момент в таймзоне YANDEX_CALDAV_TZ. calendar_id берётся из list_calendars; без него запрос идёт по всем календарям.

Чтение

Тул Что делает
get_connection_info Логин, сервер, principal URL, список календарей, таймзона
list_calendars Календари аккаунта: id, имя, URL, поддерживаемые компоненты
list_events События за период (по умолчанию 7 дней от сегодня), повторяющиеся раскрываются, фильтр query
get_event Одно событие по uid: участники со статусами, организатор, ссылка на встречу. Для серии без occurrence отдаёт мастер, с occurrence экземпляр на дату
get_event_raw Сырой VCALENDAR по uid для отладки
get_agenda События, сгруппированные по дням (date_from, days)
search_events Текстовый поиск по названию/описанию/месту в окне −30…+90 дней
list_todos Задачи VTODO, по умолчанию только незавершённые
find_free_slots Свободные окна в рабочих часах, считается локально по занятым событиям
sync_changes Изменения одного календаря после sync_token (RFC 6578): события, задачи, URL удалённых
check_availability Занятость участников по их календарям через scheduling outbox и общие свободные окна. Как наложение календарей в веб-интерфейсе. Уведомлений не шлёт

Запись (только в режиме write)

Тул Что делает Аннотация
create_event Создать событие: название, начало, конец или длительность, место, описание, участники, RRULE. Без calendar_id берётся первый календарь с VEVENT write
update_event Частично изменить событие по uid: только переданные поля. Перенос start без end сохраняет длительность. Для серии без recurrence_id меняется вся серия, с ним один экземпляр destructive
delete_event Удалить событие по uid. С recurrence_id удаляется один экземпляр серии (EXDATE) destructive
respond_to_invite accept, decline или tentative: PARTSTAT своего адреса во всех экземплярах, ответ организатору рассылает сервер write
create_todo Создать задачу. Без calendar_id берётся первый календарь с VTODO write
complete_todo Отметить задачу выполненной. Повторный вызов не ошибка destructive
delete_todo Удалить задачу destructive

Правило для встреч. Перед create_event и перед переносом через update_event модель обязана вызвать check_availability для всех участников на нужный слот. При пересечении (BUSY или BUSY-TENTATIVE) встреча не ставится молча: модель показывает пересечения и общие свободные окна и уточняет у пользователя. Правило зашито в instructions сервера и в описания обоих тулов.

Подробности поведения, архитектура и особенности Yandex CalDAV: docs/DEVELOPMENT.md.

Metadata

Release files for yandex-calendar-mcp 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for yandex-calendar-mcp 0.1.0
File Size Uploaded
yandex_calendar_mcp-0.1.0.tar.gz 27.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for yandex-calendar-mcp 0.1.0
File Interpreter ABI Platform
yandex_calendar_mcp-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 60.9 kB

Release files / yandex_calendar_mcp-0.1.0.tar.gz

Download URL yandex_calendar_mcp-0.1.0.tar.gz
Size 27.4 kB
Tags Source
SHA-256 checksum
How to use checksums
58c8660b1b89088bf9c02d7a50f2a971bdac2e3c3089d8678579d8b2bdb5da2d
BLAKE2b-256 checksum
How to use checksums
e1048993591f9633b9db6ea181152a09ed8a5a2656edfabf36e46185fb0fd261
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / yandex_calendar_mcp-0.1.0-py3-none-any.whl

Download URL yandex_calendar_mcp-0.1.0-py3-none-any.whl
Size 33.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
07c09dd8cb430eb05e1cf69d637df221a0c38496f5da06b52b832b55df89d462
BLAKE2b-256 checksum
How to use checksums
a4344a7e50573d1578ad7a4785928db5124d08ff00c53473b28ecc035453fa3d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release history Release notifications | RSS feed

0.3.0

2 release files

0.2.1

2 release files

0.2.0

2 release files

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page