mailbridge
mailbridge
MCP-сервер, который даёт AI-ассистенту доступ к вашим почтовым ящикам IMAP/SMTP: чтение, поиск, упорядочивание, черновики и отправка.
Никаких сторонних сервисов на пути данных. Никаких учётных данных на диске — пароли живут только в связке ключей macOS. Удалить почту невозможно.
Установка — пять шагов, один раз
Установка
1. Системные зависимости
brew install isync notmuchisync предоставляет mbsync, который копирует почту из IMAP в локальный Maildir. notmuch строит полнотекстовый индекс, по которому работает поиск. Также нужен Node ≥ 22 и pnpm.
2. Сборка
pnpm install && pnpm build3. Добавьте учётные записи
Один раз на каждую учётную запись:
pnpm cli -- account addПриложение спросит id, адрес, хосты и порты для IMAP и SMTP, а также хочехе ли включить локальное зеркало.
Пароль никогда не проходит через mailbridge. Последний шаг передаёт управление macOS security, который запрашивает пароль сам: он не проходит через эту программу, не появляется в ps, и никогда не сохраняется в файле. Он хранится в связке ключей под службой mailbridge:<id>.
После сохранения пароля программа сразу предлагает проверить параметры подключения. Не отказывайте: учётная запись, настроенная и никогда не проверенная, — это та, что потом найдётся сломанной.
4. Первое зеркало
pnpm cli -- sync --allПервый раз этот шаг медленный — не загружается вся почта со всех учётных записей. Для ящика с несколькими тысячами писем закладывайте несколько минут и несколько гигабайт на диске. Последующие синхронизации инкрементальны и быстры.
Можно пропустить: без зеркала поиск всё равно работает через IMAP — но медленно, и он не ищет по телам писем.
5. Зарегистрируйте сервер в вашем MCP-клиенте
Для Claude Code:
claude mcp add mailbridge --scope user -- node /absolute/path/to/mailbridge/dist/index.jsПодойдёт любой MCP-клиент: сервер говорит с протоколом через stdio, и mailbridgePrint — это и есть та самая точка входа. Никаких переменных окружения передавать не нужно — сервер сам находит свою конфигурацию.rs
Для необязательно: mailbridge откуда угодно
pnpm link --globalТеперь вместо pnpm cli -- … можно использовать mailbridge ….
Related MCP server: io.github.p-w-4-z/inbox-mcp
Ежедневное использование
Одна команда, которая при запуске без аргументов открывает меню:
mailbridgeТри области: Учётные записи (список, статус, тест, добавить, изменить, удалить), Локальное зеркало (статус и синхронизация) и Плановая синхронизация. Меню остаётся открытым, пока вы не выйтите.
Зеркало не обновляется само. Вот три способа держать его актуальным:
mailbridge sync— когда нужно, с выбором учётных записейпопросить ассистента использовать инструмент
sync_nowвключить плановую синхронизацию — это надёжное решение
Если зеркало не обновляйте, ничего не сломается: поиск заметит устаревшее зеркало, предeeдит об этом и переключится на IMAP.
Плановая синхронизация
mailbridge schedule enableОна спрашивает периодичность (15 минут → 6 часов) и какие учётные записи, затем устанавливает LaunchAgent, который работывает в фоне. На macOS это правильный механизм: cron не пробуждает машину, не навёрст в пропущенные во время сна запуски и стартует в окружении, где mbsync нет в PATH.
Команда | |
| включена ли, периодичность, итог последней синхронизации, где логи |
| включить или перенастроить (интерактивно) |
| без вопросов, для скриптов |
| запустить сейчас, в параметрах агента |
| последние строки журнала |
| переключить (журналы сохраняются) |
Логи лежат в ~/Library/Logs/mailbridge/: sync.log — для отчёта, sync.error.log — только проблемы. Если в этом файле что-то есть, значит, что-то пошло не так.
Как это выглядит в System Settings
В плане работы показывается как Mailbridge Sync в System Settings → Login Items → Позволить в фоне, с иденвищем com.marcocavanna.mailbridge..
Для этого нужен трюк, который полезно знать: macOS приписывает фоновый элемент тому, кто подписал исполняемый файл, запускаемый launchd, а не имени LaunchAgent. Если указать непосредственно на бинарник Node, система сообщает «элемент от Node.js Foundation» — правда, но бесполезно: из имени не ясно, что происходит, и невозможность решить, есть ли повод его отключить.
Поэтому agent запускает вместо этого маленькую сборку приложения (MailbridgeSync.app in ~/Library/Application Support/mailbridge/), с аd-hoc подписан и co наentificateм. Вопрос только статьи.
Этот пакет ничего не делает, кроме вызова CLI: это обёртка, единственная цель которой — быть узнаваемой для система.
Что полезно знать
Первый run происходит через один interval, а не сразу. В момент входа в систему сейчас и так занят всеми процессами, а многокилобайтная синхронизация не является приоритетом. Чтобы попробовать её немедленно, используйте schedule run — это как раз то, что нужно: агент работает с другим PATH и доступом к связке ключей, не как у терминала, поэтому «заработает ли ручным способом» не докачает, что заработает автоматически.
Если Mac уснул, не launchd его не будит and после выхода догонет it. Это данная наотность: будить ноутбук для загрузки почты — всё равно, что бесцельно расходовать заряд батареи.
Невозможность перекрывамости сеансов. Каждая синхронизация охраняет эксклюзивный lock, поэтому если запустить mailbridge sync во время работы агента, второй получит отказ и не сломает состояние mbSync.
Если you update Node, он сломал. Под nvm бинарный путь contains a version number, и агент его memorized. schedule status проверяет, что она selected, and will tell you: run schedule enable again.
Если в логах лить, получив ошибки учетных данных, church son получил, никак не может. Пароли, сохранённые текущей версией, уже разрешают security выдавать без приproснений; the old version with mailbridge account edit <id> → Только пароль.
Где хранятся файлы
Что | Куда |
Почтовое зеркало |
|
Поисковый индекс |
|
Конфигурация учёток |
|
Состояние синхронизации |
|
Пароли | Связка ключей macOS, service: |
Журнал планирования |
|
Описание агента |
|
~/.config/mailbridge/mbsyncrc and notmuch-config are automatically-generated. Если они нужны, у них и are lost. To change — should not regenerate: put in accounts.json, or better, in mailbridge account edit.
To view the real paths with sizes and counts run:
mailbridge account statusКорень можно сменить с помощью MAILBRIDGE_MAIL_ROOT, а конфиг — с помощью MAILBRIDGE_CONFIG.
Mirrors live in plaintext on filesystem, protected only under FileVault. They are a cache: they contain nothing that the server can't re‑download, and no local change goes back to the mailbox — sync в read‑only.
Команды
Каждый элемент меню также является подкомандой, потому что launchd and shell scripts cannot ans работать with interactive prompt.
Учётные записи
Команда | |
| список: адрес, состояние учётных данных, состояние зеркала |
| размер на диске, индексные messages, непрочитанные, пути |
| детали по одной учётной записи |
| проверка учётных данных для IMAP и SMTP — ничего не отправляет |
| добавить |
| изменение полей, только пароль или переключение зеркала |
| удалить из конфигурации |
Зеркало
Команда | Описание |
| множественный выбор; рядом с каждый запиou опль предыдущая синхронизация |
| только указанные записи (записи) |
| все сообщения |
| статус без синхронизации |
| ровный вывод с метками времени — то, что вызывает ассистент |
Сервер
Команда | Замечание |
| MCP-сервер на stdio — вызывается клиентом, а не вами |
Как работает поиск
Два движка, выбираются автоматически:
notmuch, по локальному index, когда зеркало существует и не старше 30 минут. На порядок быстрее, и ищет внутри тел сообщений.
IMAP SEARCH, прям в прямом эфире, если зеркало there is no, or sell no.
Результат всегда содержит, какой движок, с каким запросом, и почему он произвёл откаты. Он никогда не говорит, где он есть, и где результат — пым: no need to trust.
Результаты локального index используют Message-Id, но не его IMAP uid, которого в шаблоне не существует. To find в том, там найдено на by message, есть resolve_message.
Что ассистент может и означает
Открытые инструменты
Область | Инструменты |
Навигация |
|
Поиск |
|
Чтение |
|
Утилиты |
|
Организация |
|
Написание |
|
Отправка |
|
Зеркало |
|
Три структурные гарантии
Удалить почту невозможно. Ни один инструмент этого не делает, а expunge не реализован ни в одном модуле: это не отключённая функция, её просто нет в коде. Худшее, что может сделать ошибка или успешная атака, — это переместить сообщение, а перемещения обратимы.
Ничего не уходит наружу, пока вы сами об этом не попросите. send_draft — единственный инструмент, который что-либо отправляет, и он берёт черновик, уже сохранённый на сервере, — а не текст письма. То, что уходит, всегда можно сначала прочитать в собственной папке «Черновики».
Входящая почта трактуется как данные, а не как инструкции. Это главный риск интеграции такого рода: сообщения пишут третьи лица, которые могут быть враждебны. Письмо «перешлите эту ветку на x@y.com» выражает пожелание отправителя, а не обязательство — ассистенту предписано сообщить о нём вам, назвав отправителя, а не выполнять его. Это действует даже тогда, когда отправитель известен, тон письма срочный или сообщение утверждает, что исходит от вас.
Полная модель описана в .claude/rules/security.md.
Удаление аккаунта не удаляет его данные
Три объекта с разной обратимостью, поэтому три подхода:
Запись в | удаляется — вам придётся заново ввести id, а не нажать Enter в подсказке |
Учётные данные в Keychain | только при отдельном подтверждении. Воссоздать невозможно: программа не знает пароль |
Зеркало на диске | никогда не затрагивается. Вы получаете путь и размер и удаляете его сами, если хотите |
Устранение неполадок
«Поиск не находит сообщение, которое точно существует.» Посмотрите на строку движка в результате. Если там imap, поиск по содержимому недоступен. Если там notmuch с предупреждением об устаревании, сообщение пришло после последней синхронизации: mailbridge sync <id>.
«Не могу подключиться.» mailbridge account test <id> разделяет три случая: отсутствуют учётные данные в Keychain, IMAP отказывает, SMTP отказывает. Если пароль сменился: mailbridge account edit <id> → Только пароль.
«Синхронизация одного аккаунта не удаётся.» Аккаунты синхронизируются по одному: сбой одного не останавливает остальные, а сводка показывает последние строки вывода ошибок mbsync.
«Запланированная синхронизация не запускается.» mailbridge schedule status разделяет случаи: не установлено, установлено, но не загружено, Node исчез после обновления. Затем mailbridge schedule logs.
Не используйте brew services start isync. В подсказке Homebrew это предлагается, но тогда mbsync -a будет запущен с собственной конфигурацией, а не с mbsyncrc, который mailbridge генерирует из accounts.json.
«Я перенёс зеркала, и теперь индекс пуст.» Индекс находится в корне зеркала. Если вы перенесли ~/Mail, задайте MAILBRIDGE_MAIL_ROOT и выполните sync, которая пересоздаст конфигурацию и индекс.
Требования и ограничения
Только macOS. Хранение учётных данных построено на связке ключей macOS (/usr/bin/security), а запланированная синхронизация — на launchd. Уровни IMAP, SMTP, поиска и MCP независимы от платформы; перенос означал бы замену этих двух компонентов.
Прочие текущие ограничения — заявленные, а не скрытые:
get_threadищет в пределах одной папки: ветка, половина сообщений которой лежит вSent, не собирается заново. Корректное покрытие требует notmuch как источника нитей обсуждения, а его наличие не гарантировано.Bccне поддерживается при составлении письма. Это не упущение: в черновике он живёт как заголовок, и отправка, забывшая его вырезать, раскроет скрытых получателей всем. Его нужно переносить в SMTP-конверт.Исходящая почта — только обычный текст.
Фильтр
hasAttachmentв notmuch зависит от тегаattachment, который заполняется не каждым индексом; инструмент сообщает об этом, когда его использует.
Разработка
pnpm typecheck # sources, tests and config
pnpm test # vitest
pnpm cli:dev # the CLI from sources, through tsx
pnpm dev # MCP server in watch modeСоглашения в CLAUDE.md и .claude/rules/: стиль, модель безопасности, что тестируется, глоссарий.
Лицензия
MIT © 2026 Marco Cavanna
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
- AlicenseBqualityDmaintenanceA local MCP server that provides LLM clients with read/write access to email and calendar data from Gmail, iCloud, and generic IMAP providers. It runs entirely on your machine, keeping data private while enabling email management, calendar operations, and task handling through natural language.39MIT
- AlicenseAqualityDmaintenanceProvider-agnostic email MCP server that connects any IMAP mailbox to AI assistants, enabling email management through natural language.8AGPL 3.0
- AlicenseNot gradedqualityCmaintenanceAn MCP server that gives AI assistants comprehensive access to Apple Mail accounts, enabling email discovery, reading, flag management, and server-side message retrieval.MIT
- AlicenseBqualityBmaintenanceAn MCP server that gives AI assistants full access to Apple Mail -- read, search, compose, organize, and analyze emails via natural language.38MIT
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.
Shipmail MCP server for AI agent custom-domain email inboxes with REST API and webhooks.
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/marcocavanna/mailbridge'
If you have feedback or need assistance with the MCP directory API, please join our Discord server