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 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
- 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 gradedqualityBmaintenanceEnables calendar management with iCloud through CalDAV, allowing users to list, create, update, and delete events via a standardized API.27MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to access iCloud Calendar, Reminders, and Mail with configurable scope and read-only modes.1MIT
Related MCP Connectors
Calendar API for AI agents: events, availability, Google/Microsoft setup, scheduling, and iCal.
Hosted Google Calendar MCP server for AI agents. No self-hosting or Google Cloud setup.
Connects ChatGPT to your Apple Calendar via a local Mac agent + Vercel relay
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/nweii/apple-calendar-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server