Skip to main content
Glama

mcp-ical-swift

Bun Swift MCP License: MIT macOS

Локальный MCP-сервер для Apple Calendar, который использует скомпилированный Swift-бинарный файл для обхода ограничений TCC в macOS Sequoia.

Зачем это нужно

В macOS Sequoia (26.x) фоновые процессы не могут получить доступ к Календарю через стандартный механизм TCC (Transparency, Consent, and Control):

  • EventKit из Python (например, PyObjC) требует kTCCServiceCalendar, который можно предоставить только через системное диалоговое окно, которое фоновые процессы не могут вызвать. В Системных настройках > Конфиденциальность и безопасность > Календари на Sequoia нет кнопки +.

  • AppleScript через osascript требует kTCCServiceAppleEvents (разрешение на автоматизацию), которое привязывается к вызывающему бинарному файлу (обычно node или bun). Прямое редактирование базы данных TCC игнорируется проверками целостности демона TCC.

  • icalBuddy и другие инструменты Homebrew используют EventKit внутри себя и сталкиваются с той же проблемой.

Скомпилированный Swift-бинарный файл (swiftc) работает, потому что он создает исполняемый файл Mach-O с подписью Apple, который наследует TCC Календаря от системного набора инструментов Swift. Когда Node/Bun запускает этот файл через execFileSync, EventKit сообщает authorizationStatus = .fullAccess и возвращает данные календаря.

Related MCP server: apple-calendar-mcp

Возможности

  • Список всех календарей

  • Список событий в заданном диапазоне дат

  • Поиск событий по ключевым словам

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

  • Обновление существующих событий

  • Получение полной информации о событии по UID

  • Удаление событий

  • Работает полностью локально через stdio — без сети, без API-ключей, без облака

Предварительные требования

  • macOS Sequoia (26.x) или новее

  • Bun 1.1+

  • Xcode Command Line Tools (xcode-select --install) для swiftc

  • Данные календаря в Apple Calendar (iCloud, Exchange или локальные календари)

Установка

git clone https://github.com/Sealjay/mcp-ical-swift.git
cd mcp-ical-swift
bun install
bun run build

Скрипт build компилирует src/calendar-reader.swift в bin/calendar-reader.

Конфигурация MCP-клиента

Claude Code

claude mcp add --transport stdio ical --scope user -- bun run /absolute/path/to/mcp-ical-swift/src/index.ts

OpenClaw

{
  "mcp": {
    "servers": {
      "ical": {
        "command": "bun",
        "args": ["run", "/absolute/path/to/mcp-ical-swift/src/index.ts"]
      }
    }
  }
}

Claude Desktop

Добавьте в claude_desktop_config.json:

{
  "mcpServers": {
    "ical": {
      "command": "bun",
      "args": ["run", "/absolute/path/to/mcp-ical-swift/src/index.ts"]
    }
  }
}

Инструменты

Инструмент

Описание

ical__list_calendars

Список всех календарей Apple Calendar

ical__list_events

Список событий в диапазоне дат (ГГГГ-ММ-ДД)

ical__search_events

Поиск событий по ключевому слову (по умолчанию: 30 дней вперед)

ical__create_event

Создание нового события (название, начало, конец, календарь, местоположение, заметки, весь день)

ical__update_event

Обновление существующего события по UID

ical__get_event

Получение полной информации о событии по UID

ical__delete_event

Удаление события по UID

Как это работает

MCP Client (Claude, OpenClaw, etc.)
  --> stdio --> Bun MCP server (src/index.ts)
    --> execFileSync --> compiled Swift binary (bin/calendar-reader)
      --> EventKit framework --> Apple Calendar data

Swift-бинарный файл компилируется один раз (bun run build) и вызывается синхронно для каждого вызова инструмента. Он выводит JSON в stdout, который MCP-сервер Bun оборачивает в результаты инструментов MCP. Сервер использует execFileSync (не выполнение в оболочке), чтобы избежать рисков инъекций.

Ключевая идея: бинарные файлы, скомпилированные через swiftc, подписаны Apple и наследуют TCC Календаря от системного набора инструментов. Это обходит ограничения TCC, которые блокируют доступ к календарям для Node, Bun, Python и AppleScript в фоновых контекстах.

Конфиденциальность и безопасность

  • Этот сервер по умолчанию получает доступ ко всем календарям в системе (iCloud, Exchange, локальные, общие, подписки). Вы можете фильтровать их по имени календаря для каждого запроса, используя необязательный параметр calendar в list_events и search_events.

  • Заметки к событиям возвращаются в ответах и могут содержать конфиденциальные данные (PIN-коды встреч, пароли, личные данные). Учитывайте это при предоставлении доступа MCP-клиенту.

  • Операции записи (create_event, update_event, delete_event) доступны без этапа подтверждения. MCP-клиент (или инъекция промпта внутри него) может изменить данные вашего календаря.

  • Вся связь происходит локально через stdio — никакие данные не отправляются на внешние сервисы.

  • Чтобы сообщить об уязвимости, см. SECURITY.md.

Ограничения

  • Только macOS (требуется EventKit и набор инструментов Swift)

  • Требуется среда выполнения Bun

  • Swift-бинарный файл компилируется один раз и вызывается синхронно для каждого вызова инструмента — не подходит для очень высокой пропускной способности

  • Изменения повторяющихся событий применяются только к одному экземпляру (.thisEvent span)

  • Доступ к календарю зависит от того, предоставила ли macOS TCC разрешение скомпилированному бинарному файлу

Устранение неполадок

"Calendar access is not granted" (Доступ к календарю не предоставлен)

Скомпилированный бинарный файл должен быть запущен хотя бы один раз из контекста, у которого есть TCC Календаря. Запустите сборку и тест:

bun run build
bin/calendar-reader list-events $(date +%Y-%m-%d)

Если это возвращает события, значит, у бинарного файла есть доступ к Календарю. Если нет, попробуйте запустить из Terminal.app (у которого обычно есть разрешение TCC Календаря).

События пусты

Проверьте, настроены ли у вас календари в Apple Calendar. Запустите:

bin/calendar-reader list-calendars

Ошибка компиляции

Убедитесь, что установлены Xcode Command Line Tools:

xcode-select --install

Лицензия

MIT

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

View all related MCP servers

Related MCP Connectors

  • MCP connector for iMessage & Contacts via a local Mac agent + Vercel relay

  • Connects ChatGPT to your Apple Calendar via a local Mac agent + Vercel relay

  • Hosted Google Calendar MCP server for AI agents. No self-hosting or Google Cloud setup.

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/Sealjay/mcp-ical-swift'

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