mcp-ical-swift
mcp-ical-swift
Локальный 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.tsOpenClaw
{
"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"]
}
}
}Инструменты
Инструмент | Описание |
| Список всех календарей Apple Calendar |
| Список событий в диапазоне дат (ГГГГ-ММ-ДД) |
| Поиск событий по ключевому слову (по умолчанию: 30 дней вперед) |
| Создание нового события (название, начало, конец, календарь, местоположение, заметки, весь день) |
| Обновление существующего события по UID |
| Получение полной информации о событии по UID |
| Удаление события по UID |
Как это работает
MCP Client (Claude, OpenClaw, etc.)
--> stdio --> Bun MCP server (src/index.ts)
--> execFileSync --> compiled Swift binary (bin/calendar-reader)
--> EventKit framework --> Apple Calendar dataSwift-бинарный файл компилируется один раз (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-бинарный файл компилируется один раз и вызывается синхронно для каждого вызова инструмента — не подходит для очень высокой пропускной способности
Изменения повторяющихся событий применяются только к одному экземпляру (
.thisEventspan)Доступ к календарю зависит от того, предоставила ли 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Лицензия
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
- AlicenseNot gradedqualityDmaintenanceMCP server for accessing macOS Calendar events2MIT
- AlicenseNot gradedqualityDmaintenanceMCP server for Apple Calendar via native EventKit API with proper recurring event support.239MIT
- AlicenseNot gradedqualityAmaintenanceMCP server for Apple Calendar, Mail, Reminders, and Files on macOS using native frameworks.3116MIT
- AlicenseAqualityBmaintenanceMCP server for Apple Calendar and CalDAV providers. Enables listing, creating, updating, deleting events, and checking free/busy status with per-calendar write protection.86MIT
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.
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/Sealjay/mcp-ical-swift'
If you have feedback or need assistance with the MCP directory API, please join our Discord server