Apple Calendar MCP
Apple Calendar MCP
Apple Calendar MCP предоставляет AI-клиенту удалённый доступ на чтение и запись к одному аккаунту iCloud Calendar. Он работает как TypeScript Worker без состояния на Cloudflare и не требует устройства Apple, чтобы оставаться в сети.
Одно развёртывание подключается к одному Apple Account. Это не многопользовательский календарный сервис.
Перед развёртыванием
Вам понадобятся:
Аккаунт Cloudflare.
Apple Account с двухфакторной аутентификацией.
MCP-клиент, поддерживающий удалённые HTTPS-серверы и OAuth.
Ваше название часового пояса IANA, например
America/New_York.
Откройте страницы настройки Apple и Cloudflare самостоятельно. Агент может направлять вас и проверять результат, но не должен получать или вводить ваши пароли.
[!WARNING] Никогда не вставляйте пароль от Apple Account, пароль приложения Apple или пароль подтверждения в чат, систему контроля версий, журналы или issues.
Related MCP server: calendar-app-mcp
Создание пароля приложения Apple
Откройте account.apple.com и войдите.
Выберите Sign-In and Security > App-Specific Passwords.
Выберите Generate an app-specific password.
Дайте ему понятную метку, например
Apple Calendar MCP.Держите сгенерированное значение на странице Apple, пока Cloudflare не запросит его.
Apple требует двухфакторную аутентификацию для паролей приложений. У вас может быть до 25 активных паролей. Вы можете отозвать один или все. Смена или сброс основного пароля Apple Account отзывает все пароли приложений. См. инструкции Apple по паролям приложений.
[!WARNING] Пароль приложения Apple шире, чем разрешения Calendar, которые этот MCP показывает клиентам. Worker ограничивает себя только хостами iCloud CalDAV из списка разрешённых, но Apple не выдаёт пароль приложения только для Calendar.
Развёртывание в Cloudflare
Выберите Deploy to Cloudflare в верхней части этой страницы.
Войдите в Cloudflare и следуйте форме развёртывания.
Введите три секретных значения, когда Cloudflare запросит их:
ICLOUD_USERNAME: полный адрес электронной почты, используемый для вашего Apple Account и iCloud Calendar.ICLOUD_APP_PASSWORD: пароль приложения, сгенерированный Apple. Сохраните его точно.APPROVAL_PASSWORD: отдельный уникальный пароль, защищающий одобрение новых MCP-клиентов. Не используйте повторно ни один из паролей Apple.
Дождитесь завершения развёртывания Worker.
Откройте Workers & Pages, выберите Worker, затем выберите Settings и найдите Variables and Secrets.
Измените
CALENDAR_TIME_ZONEсUTCна название вашего часового пояса IANA и разверните настройку.Скопируйте конечную точку в таком виде:
https://<worker-name>.<account-subdomain>.workers.dev/mcp.
Cloudflare хранит три секретных значения как зашифрованные секреты Worker. Форма развёртывания не записывает их в сгенерированный репозиторий или в локальный файл .dev.vars.
Если вы пропустили секрет или хотите заменить его, откройте Workers & Pages, выберите Worker, выберите Settings, найдите Variables and Secrets, добавьте или измените значение как Secret и выберите Deploy.
Cloudflare автоматически предоставляет пространство имён OAUTH_KV. Не добавляйте ID KV в wrangler.jsonc.
Подключение MCP-клиента
Добавьте развёрнутую конечную точку
/mcpкак пользовательский удалённый MCP-сервер или приложение.Выберите Connect. Ваш клиент должен обнаружить OAuth и открыть страницу одобрения Apple Calendar MCP.
Подтвердите имя клиента и запрошенное разрешение.
Введите
APPROVAL_PASSWORDи выберите Allow and return. Выберите Cancel, если страница запрашивает больше доступа, чем вы хотите.Дождитесь, пока клиент сообщит о завершении подключения. Закройте вкладку браузера, если она осталась открытой после завершения.
Обновите или повторно просканируйте инструменты клиента. Клиенты могут кэшировать каталоги инструментов после подключения или обновления сервера.
Для Claude см. Использование пользовательских коннекторов с удалённым MCP. Для ChatGPT см. Режим разработчика и полные коннекторы MCP.
Страница одобрения предлагает два разрешения:
Чтение календарей и событий предоставляет
calendar:readи открывает семь инструментов чтения.Чтение и изменение календарей и событий предоставляет
calendar:read calendar:writeи добавляет четыре инструмента изменения.
Изменение разрешения требует повторной авторизации и обновления каталога инструментов. Обновление сервера не добавляет инструменты записи к существующему разрешению только на чтение.
[!WARNING] Действия записи, затрагивающие участников или приглашения, могут отправлять электронные письма или уведомления другим людям.
Проверка подключения
Сначала проверьте доступ на чтение:
Вызовите
calendar_get_profile. Подтвердите идентификатор Apple Account и часовой пояс.Вызовите
calendar_list_calendars. Подтвердите, что ожидаемые названия календарей отображаются.Если вы одобрили доступ только на чтение, убедитесь, что клиент не показывает инструменты изменения.
Развёртывание, ввод секретов, подключение OAuth и успешное чтение календаря — это отдельные состояния. Успешное чтение календаря доказывает, что учётные данные Apple работают.
Чтобы проверить доступ на запись, сначала создайте пустой временный календарь в Apple Calendar. Попросите агента выполнить этот ограниченный тест только после вашего подтверждения:
Создайте одно будущее событие с уникальным названием, без участников, без повторения и без напоминаний.
Прочитайте событие и сохраните его текущий ETag.
Измените только его название, используя этот ETag.
Прочитайте событие снова и используйте возвращённый ETag, чтобы удалить его.
Подтвердите, что событие отсутствует.
Если очистка не удалась, запишите точный календарь, название и время, чтобы вы могли удалить событие самостоятельно. Не тестируйте запись в календаре по умолчанию.
Вы также можете передать агенту ограниченную процедуру в Настройка Apple Calendar MCP с агентом.
Инструменты
Tool | Scope | Purpose |
|
| Возвращает идентификатор настроенной учётной записи iCloud и часовой пояс по умолчанию. |
|
| Перечисляет видимые календари, действующие часовые пояса и непрозрачные ID. |
|
| Ищет в ограниченном диапазоне времени по всем календарям. |
|
| Перечисляет ограниченный диапазон времени из одного календаря. |
|
| Читает полные сведения о событии и текущий ETag. |
|
| Читает до 20 событий с ошибками по каждому событию. |
|
| Возвращает объединённые интервалы занятости без подробностей. |
|
| Создаёт события с указанием времени, на весь день, с повторением, с приглашёнными, с местом или с напоминаниями. |
|
| Изменяет одно вхождение, это и последующие вхождения или всю серию. |
|
| Удаляет одно вхождение, это и последующие вхождения или всю серию. |
|
| Принимает, отклоняет или предварительно принимает приглашение. |
Инструменты обновления, удаления и ответа на приглашения требуют последний ETag. Изменения повторяющихся вхождений также требуют исходный recurrenceId, возвращённый поиском.
Входные данные со временем используют метки времени RFC 3339 с Z или явным смещением. Клиенты могут опускать timeZone; при создании используется опубликованный часовой пояс IANA календаря, затем CALENDAR_TIME_ZONE. Выходные данные со временем включают значения UTC и локальные значения.
location — это видимое поле Calendar. structuredLocation может добавить название, адрес, широту, долготу и радиус. Подтверждённые координаты включают предпросмотр карты в Apple Calendar. Не угадывайте координаты.
description соответствует Notes в Calendar. url соответствует полю URL события. MCP сохраняет неподдерживаемые вложения и типы напоминаний при несвязанных изменениях, но не загружает, не скачивает и не изменяет вложения. Он не импортирует сырой ICS.
Использование собственного домена
Конечная точка workers.dev по умолчанию не требует настройки имени хоста. Собственный домен требует одного явного параметра в списке разрешённых:
Откройте Worker в Cloudflare.
Выберите Settings > Domains & Routes > Add > Custom Domain и добавьте имя хоста.
В разделе Variables and Secrets добавьте
MCP_HOSTNAMEкак переменную в виде открытого текста. Введите только имя хоста, напримерcalendar.example.com. Не включайтеhttps://, путь, порт или учётные данные.Разверните настройку.
Подключите клиентов снова по адресу
https://<custom-host>/mcpи снова пройдите авторизацию.
Имя хоста является частью идентичности OAuth. Токены, выпущенные для workers.dev, не переносятся на собственный origin.
Добавление Cloudflare Access
Встроенный пароль подтверждения — это защита авторизации по умолчанию. Cloudflare Access — необязательная эшелонированная защита.
Если вы добавляете Access, защищайте только <hostname>/authorize. Оставьте /mcp, /.well-known/*, /oauth/token и /oauth/register доступными для MCP-клиентов. После того как вы убедитесь, что Access защищает /authorize, добавьте EXTERNAL_AUTHORIZATION=true как переменную Worker в виде открытого текста.
[!WARNING] Устанавливайте
EXTERNAL_AUTHORIZATION=trueтолько после того, как внешняя защита охраняет/authorize. Эта настройка объявляет, что внешняя защита активна.
Безопасность
Worker получает ваше имя пользователя Apple и пароль приложения во время выполнения. Вы доверяете своему аккаунту Cloudflare, развёрнутому исходному коду, Apple и каждому подключённому MCP-клиенту. Ограничьте доступ к своему аккаунту Cloudflare и подключайте только те клиенты, которым доверяете.
APPROVAL_PASSWORD защищает новые одобрения. Маршрут одобрения закрыт по умолчанию, если этот пароль не настроен или EXTERNAL_AUTHORIZATION не объявляет проверенную внешнюю защиту. Любой, кто пройдёт защиту, может авторизовать клиента для настроенного Apple Account.
[!WARNING] Смена
APPROVAL_PASSWORDне отзывает уже выпущенные токены OAuth.
Провайдер OAuth Cloudflare хранит токены доступа, токены обновления, коды авторизации и секреты зарегистрированных клиентов в виде хеша. Он шифрует свойства авторизации. Имена клиентов и метаданные разрешений остаются видимыми в хранилище, поэтому они не должны содержать секреты. См. документацию провайдера по хранилищу KV и очистке.
Worker отправляет учётные данные Apple только через HTTPS на хосты iCloud CalDAV из списка разрешённых. Аргументы инструментов не могут выбирать вышестоящий хост. В ошибках скрываются значения, похожие на учётные данные. Worker не записывает в журнал аргументы инструментов или данные событий.
Результаты инструментов могут включать названия, заметки, места, участников и URL. MCP-клиенты могут сохранять эти данные в соответствии с собственными политиками продукта и рабочей области.
Доступ на запись охватывает создание событий, изменения, удаление и ответы на приглашения. ETag предотвращают перезапись более нового события, но не могут сделать непреднамеренную запись безвредной. Несвязанные обновления сохраняют неподдерживаемые свойства Apple, когда это возможно.
Развёртывайте из этого канонического репозитория или из форка, изменения которого вы проверили. Удалённый MCP-сервер может изменить свой каталог инструментов, когда его владелец развёртывает новый код.
Отзыв или смена доступа
Цель | Действие | Результат |
Остановить одного клиента | Отключите или удалите его в настройках этого клиента. Используйте процедуру отзыва, если она доступна. | Клиент перестаёт использовать своё подключение. |
Остановить новые подтверждения | Смените | Существующие OAuth-токены не затрагиваются. |
Немедленно остановить весь доступ Apple | Отключите Worker и отзовите его пароль приложения на account.apple.com. | Вызовы календаря не работают, пока вы не настроите новый пароль приложения. |
Провести обычную ротацию | Создайте новый пароль приложения Apple, замените | Вы проверяете замену до отзыва и избегаете простоя. |
Восстановить доступ после сброса пароля учётной записи Apple | Создайте новый пароль приложения и замените секрет Worker. | Apple уже отозвала старый пароль приложения. |
Если вы подозреваете компрометацию, сначала отзовите старый пароль приложения Apple. Затем замените его и проверьте доступ. Это вызывает кратковременный простой.
Устранение неполадок
Ошибка
401или отклонение пароля iCloud обычно означает, что пароль приложения отсутствует или отозван. Создайте или замените его в Apple и Cloudflare. Не вставляйте его в чат.Отсутствие инструментов записи обычно означает, что у клиента разрешение только на чтение или кэшированный каталог инструментов. Обновите инструменты, затем отключитесь и авторизуйтесь снова, если нужно.
Пользовательский домен, который отклоняет запросы к
/mcp, обычно имеет отсутствующий или недействительныйMCP_HOSTNAME. Укажите точное имя хоста и выполните повторный деплой.Страница подтверждения, которая при сбое отказывает в доступе, не имеет ни
APPROVAL_PASSWORD, ни объявленного внешнего защитного механизма. Добавьте секрет подтверждения, если вы ещё не проверили Cloudflare Access на/authorize.
Локальная разработка
bun install
cp .dev.vars.example .dev.vars
bun run test
bun run typecheck
bun run cloudflare:checkХраните .dev.vars локально. Выполняйте деплой с помощью bun run deploy.
Лицензия
This server cannot be deployed
Maintenance
Related MCP Connectors
GDPR-compliant calendar access for AI assistants: read, create, edit, RSVP. Google, MS 365, Apple.
Calendar API for AI agents: events, availability, Google/Microsoft setup, scheduling, and iCal.
- muse.spaceOAuthspace.muse
Let your agent into iCloud Mail, calendar and contacts. It gets actions, never your password.
Sync Google, Outlook, and iCloud calendars and manage events, availability, and booking links.
1
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables users to view and create events in their iCloud Calendar using natural language through supported LLMs. It integrates with Apple's infrastructure via app-specific passwords to provide secure calendar management.1-
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to access and interact with macOS Calendar.app events and reminders, including viewing, searching, and filtering calendar data.2MIT
- AlicenseNot gradedqualityDmaintenanceEnables calendar management with iCloud through CalDAV, allowing users to list, create, update, and delete events via a standardized API.558 npmMIT
- AlicenseNot gradedqualityCmaintenanceProvides AI calendar operators full iCloud Calendar access through CalDAV, with two-factor authentication and app-specific passwords.MIT