MailSyncMCP
MailSyncMCP
Ищите, читайте и отвечайте на письма во всех аккаунтах Apple Mail прямо из Claude, не передавая ни одного пароля.
Работает с Gmail, Microsoft 365, iCloud и IMAP на собственном домене одинаково, потому что читает то, что Mail уже синхронизировал, а не общается с каждым провайдером. Полностью работает на вашем Mac. Ничего никуда не загружается.
Почему это работает именно так
Apple Mail уже синхронизирует все ваши аккаунты и хранит их учётные данные в Keychain, обновляя их самостоятельно. Этот сервер читает локальное хранилище Mail и просит Mail составить письмо. Он никогда не видит пароль или токен, не хранит их и не запускает повторную аутентификацию. Добавление аккаунта означает добавление его в Mail; здесь ничего не меняется.
Альтернатива — общение с каждым провайдером напрямую — требует проекта Google Cloud, регистрации приложения Azure и refresh-токена для каждого аккаунта. Хуже того, рабочие и учебные аккаунты обычно заблокированы так, что стороннему OAuth-приложению требуется согласие администратора, которое часто просто не дают. Чтение того, что Mail уже синхронизировал, обходит всё это.
Related MCP server: macos-mail-mcp
Безопасность
Чтение и поиск бесплатны. Отправка — нет.
Никаких учётных данных. Нечего утекать или истекать.
Двухфазная фиксация. Инструменты
prepare_*проверяют запрос, отображают полный предпросмотр и возвращают одноразовый токен, который истекает через пять минут. Они ничего не меняют.commit_action(token)— единственный инструмент, который действует, и он принимает только токен и ничего больше, поэтому отправленное сообщение всегда совпадает с показанным.Запрос разрешения клиента при
commit_action.Защита от недоверенного содержимого. Тела сообщений возвращаются обёрнутыми и помеченными как данные. Поскольку для отправки нужен токен, который может создать только отрендеренный предпросмотр, инструкция, спрятанная в письме, не может вызвать отправку почты.
Журнал аудита в
~/.local/share/mailsync/audit.jsonl, только добавление.
Сервер говорит только через stdio. Нет ни слушателя, ни демона, ни таймера, поэтому он действует только при вызове инструмента из чат-сессии.
Установите MAILSYNC_READ_ONLY=1, чтобы полностью отключить составление писем на время
сессии.
Об AppleScript
Каждый скрипт в applescript/ — это статический файл, который получает значения через
argv. Текст скрипта никогда не генерируется, поэтому кавычки, обратные слэши, переводы
строк и синтаксис AppleScript в письме выживают как литеральные данные.
tests/test_applescript_safety.py проверяет это на враждебных полезных нагрузках. Другие
MCP-серверы для Apple Mail конкатенируют данные сообщения в исходный код скрипта и
защищают его функцией экранирования; у этого нет поверхности для инъекций, которую нужно
экранировать.
Инструменты
Чтение: list_accounts, search_mail, get_message, get_thread,
list_attachments, save_attachment, mailbox_stats, open_in_mail,
refresh_index
Составление: prepare_send, prepare_reply, prepare_forward, list_pending,
commit_action
Намеренно нет ничего, что помечало бы, перемещало, архивировало или удаляло почту. Единственное, что может изменить этот сервер, — это отправка или создание черновика нового сообщения.
Ссылки обратно в Mail
Каждое возвращённое сообщение несёт URL message://, построенный из его RFC-822
Message-ID. Клик по нему открывает это сообщение в Apple Mail, поэтому ответы в чате
остаются прослеживаемыми до реального объекта. Сообщения, которые Mail не сохранил
локально, не имеют Message-ID и поэтому не получают ссылку.
Чат-клиенты очищают цели ссылок до разрешённого списка схем (http, https, mailto),
поэтому ссылка message:// отображается как мёртвый текст, а не как кликабельный элемент.
Инструмент open_in_mail существует именно для этого: попросите открыть сообщение, и оно
попадёт прямо в Mail. URL всё равно печатается, чтобы его можно было скопировать или
использовать вне чата.
open_in_mail принимает whole_thread=True, но Mail открывает каждое сообщение в
отдельном окне: нет скриптуемого потокового представления. set selected messages в
основном просмотрщике тестировался многократно и не работает на macOS 26 в режиме
разговора, возвращая объекты, которые мост AppleScript не может преобразовать обратно.
get_thread — лучший способ прочитать переписку.
Ссылка всегда открывает одно сообщение, а не разговор вокруг него. Mail регистрирует
только три схемы URL (mailto, message, mail-pref-pane), и ни одна из них не
адресует поток. Управление собственным потоковым списком Mail через AppleScript
пробовали и отказались: на macOS 26 set selected messages либо выбирает не тот
разговор, либо сообщает о пустом выборе — и в почтовом ящике Gmail All Mail, и в
обычном INBOX. Вместо того чтобы выпускать это, get_message перечисляет остальную
часть разговора со ссылкой на каждое сообщение, а get_thread отображает весь обмен
по порядку.
Установка
python3 -m venv .venv
.venv/bin/pip install -e .
.venv/bin/python -m mailsync --build-indexРегистрация
Claude Code и Claude for Desktop — это отдельные приложения с отдельными файлами конфигурации. Регистрация в одном ничего не даёт для другого:
Поверхность | Файл конфигурации |
Claude Code |
|
Claude for Desktop |
|
Добавьте ту же запись в тот, который используете, указав на Python из venv:
{
"mcpServers": {
"mailsync": {
"command": "/absolute/path/to/Apple-Mail-Sync-MCP/.venv/bin/python",
"args": ["-m", "mailsync"]
}
}
}Поскольку пакет установлен в venv с помощью pip install -e ., запись не зависит от
рабочей директории. После этого закройте и снова откройте приложение.
Локальный сервер, подобный этому, работает как дочерний процесс на вашем Mac, поэтому он доступен только приложениям, работающим там. claude.ai в браузере не может до него добраться.
Каждая поверхность запускает свой собственный процесс ОС; stdio не может разделить один.
Это не разветвляет настройку, потому что обе записи запускают один и тот же установленный
пакет, и каждый процесс читает и пишет в один и тот же индекс в
~/.local/share/mailsync/mailsync.db. Измените код один раз, и оба подхватят его при
следующем перезапуске. Одновременный доступ безопасен: индекс работает в режиме WAL с
таймаутом занятости, протестирован с пятью читателями и двумя одновременными
пересборками.
Полный доступ к диску
~/Library/Mail защищён полным доступом к диску, и MCP-сервер наследует разрешение
приложения, которое его запустило. Claude Code и Claude for Desktop — это отдельные
клиенты TCC, поэтому один может работать, а другой — нет. Предоставьте его в
Системные настройки > Конфиденциальность и безопасность > Полный доступ к диску,
затем полностью закройте и снова откройте приложение.
Без него поиск и чтение всё равно работают из локального индекса, который находится
вне защищённой области. Только refresh_index не работает, поэтому данные устаревают.
Инструмент говорит об этом прямо, а не терпит непонятную ошибку.
Для составления писем дополнительно требуется запущенный Mail.app и разрешение Automation, о котором macOS запрашивает при первом использовании.
Частичные сообщения
Mail хранит копии сообщений только с заголовками, если они не были полностью загружены:
примерно четверть из них в типичном почтовом ящике. Они остаются доступными для поиска
по отправителю, теме, дате и любому предварительному тексту, который Mail сохранил.
get_message принимает fetch_if_partial=True, чтобы попросить Mail предоставить полный
исходный код, что заставляет его загрузить тело с сервера. Для этого требуется работающий
Mail, поэтому это не автоматически, а по запросу.
Как работает индекс
~/.local/share/mailsync/mailsync.db содержит индекс FTS5 по телам сообщений,
извлечённым из ~/Library/Mail/V10/**/*.emlx, привязанный к собственному Envelope Index
Mail. База данных Mail копируется в сторону перед чтением и никогда не открывается для
записи и не блокируется.
Первая сборка занимает около минуты для 12 800 сообщений. После этого обновление занимает одну-две секунды, поскольку повторно разбираются только файлы, у которых изменилось время модификации. Поиск возвращается за однозначные или низкие десятки миллисекунд.
Тела доступны для поиска примерно для 70 процентов сообщений, которые Mail загрузил
полностью. Остальные доступны для поиска по отправителю, теме, дате и собственному
предварительному тексту Mail, и get_message использует их в качестве запасного
варианта. Покрытие растёт само по мере синхронизации Mail.
Обслуживание
Схема Envelope Index от Apple не документирована и может измениться в обновлении macOS.
Всё это ограничено mailsync/index.py, и индекс тел можно пересобрать из файлов .emlx
в любое время с помощью --build-index --full.
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
- AlicenseAqualityAmaintenanceMCP server that gives Claude and other MCP hosts full access to Mail.app on macOS — search, read, send, reply, flag, move, and more across all accounts configured in Mail.app.2489MIT
- AlicenseAqualityAmaintenanceAn MCP server for Apple Mail that enables Claude to read, search, manage, and compose emails via AppleScript.203831MIT
- FlicenseBqualityBmaintenanceMCP server that connects Claude to iCloud Mail, enabling reading, searching, sending, and organizing emails via IMAP/SMTP.14
- AlicenseAqualityAmaintenanceAn MCP server that provides programmatic access to Apple Mail, enabling AI assistants like Claude to read, send, search, and manage emails on macOS.25MIT
Related MCP Connectors
Read, search, send, organize, draft and schedule email across your inboxes from any MCP client.
Hosted email MCP for AI agents with inboxes, send/receive, memory, recovery, and credits.
Search, read, and write your Apple Notes from ChatGPT/Claude via a local Mac agent + MCP 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/st-designs/Apple-Mail-Sync-MCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server