MCP Email Server — мультиаккаунтная почта для ИИ-агентов по IMAP и SMTP

· 2 мин чтения
mcp email imap smtp tools
📂 Исходный код на GitHub

Мультиаккаунтный MCP-сервер на Python (BSD-3-Clause) для работы с почтой через ИИ-агентов по IMAP и SMTP: чтение, поиск, фильтрация, отправка, пересылка, черновики, вложения и управление папками. Кроссплатформенный (Windows, macOS, Linux), с локальным веб-UI настройки, SQLite-хранилищем и официальными Docker-образами.

MCP Email Server — мультиаккаунтная почта для ИИ-агентов по IMAP и SMTP

MCP Email Server — это MCP-сервер на Python, который даёт ИИ-агентам полноценный доступ к электронной почте по протоколам IMAP и SMTP. Он умеет читать и искать письма, перемещать их между папками, помечать флагами и тегами, отправлять, отвечать и пересылать, сохранять черновики и работать с вложениями. Отличительные черты проекта — поддержка нескольких аккаунтов одновременно, кроссплатформенность (Windows, macOS и Linux) и очень серьёзное отношение к безопасности: агент в принципе не может ни прочитать, ни изменить учётные данные почты.

Ключевая идея безопасности вынесена в дизайн самого инструмента: через MCP не существует ни одного инструмента для изменения аккаунтов, эндпоинтов или учётных данных. Все настройки выполняются только человеком — через локальный веб-интерфейс или CLI. Поэтому чат с агентом никогда не превращается в канал утечки паролей.

Что нового в Local Email App V2

Начиная с версии 1.0.0 проект перешёл на модель Local Email App V2: аккаунты хранятся в управляемой SQLite-базе (managed.sqlite3), а настройка выполняется через локальный веб-интерфейс. Старые настройки из PyPI-версий 0.16.0 и ниже продолжают работать в обратно совместимом режиме legacy — обязательной миграции нет.

Если хочется перейти на новое хранилище, предусмотрена миграция с предварительным просмотром плана и явным подтверждением:

uvx mcp-email-server@latest config init \
  --database ~/.config/mcp-email-server/managed.sqlite3
uvx mcp-email-server@latest config import-legacy
uvx mcp-email-server@latest config import-legacy --apply
uvx mcp-email-server@latest config doctor

Шаг --apply снова показывает план и просит ввести IMPORT. Исходный TOML-файл и записи в системном хранилище ключей не трогаются. То же самое можно сделать через UI — пункт Import existing settings.

Установка и настройка

Понадобится менеджер пакетов uv. Первый шаг — настроить почтовый аккаунт через веб-интерфейс:

uvx mcp-email-server@latest ui

Команда должна оставаться запущенной. На пустой установке откроется аутентифицированная браузерная сессия, которая подготовит локальное хранилище аккаунтов. Интерфейс минималистичен: разделы Email accounts и Settings & help. Достаточно ввести адрес и пароль — параметры подключения подставятся автоматически по домену почты, но остаются редактируемыми. Исходящая почта (SMTP) опциональна: можно завести аккаунт «только для чтения». Для сохранённого аккаунта есть кнопка Password & test для проверки соединения.

Второй шаг — подключить сервер к MCP-клиенту:

{
  "mcpServers": {
    "mcp-email-server": {
      "command": "uvx",
      "args": ["mcp-email-server@latest", "stdio"]
    }
  }
}

После изменения конфигурации MCP-клиент нужно перезапустить. Проверка простая: попросите агента перечислить настроенные аккаунты или последние письма.

Для headless-сред, начиная с версии 1.6.2, публикуются официальные Docker-образы ghcr.io/wh1isper/mcp-email-server для Linux amd64 и arm64. Также поддерживаются настройка через переменные окружения, произвольные TLS-параметры и, разумеется, несколько аккаунтов. Детали — в документации: getting started, configuration, transports, security и troubleshooting на сайте проекта.

Инструменты MCP

Каталог инструментов в V2 стабильный: список статичен на время жизни процесса, а каждое имя, описание и схема покрыты контрактным тестом.

Аккаунты и планирование

  • list_available_accounts — список включённых аккаунтов с признаками can_receive и can_send. Агент обязан читать только из аккаунтов с can_receive=true и отправлять только через can_send=true.
  • Ресурс email://{account_name} возвращает нечувствительную «карточку возможностей» аккаунта — без конфигурации и маскированных креденшелов.
  • Каждый инструмент помечен подсказками для планирования агента: readOnlyHint, destructiveHint, idempotentHint и openWorldHint. Например, чтение тела письма считается не read-only, потому что с опцией mark_as_read меняет флаги на сервере.

Чтение и поиск

  • list_emails_metadata — поиск по папке без скачивания тел писем. Фильтры: тема, отправитель/получатель, временные границы since/before (с таймзоной), статусы прочитанности/флагов/ответов, поиск по телу (body) и заголовкам с телом (text) средствами IMAP, эвристика has_attachment, семантические теги. Пагинация до 100 результатов на страницу.
  • get_emails_content — пакетное получение тел писем по ID. Длинные тела отдаются чанками (body_offset + max_body_length), опционально помечает письма прочитанными. Возвращает заголовки In-Reply-To и References для трединга.
  • list_email_tags — конфигурация семантических тегов аккаунта: человекопонятные имена, отображающиеся на IMAP-ключевые слова провайдера.

Разделение «лёгкий поиск по метаданным» и «тяжёлое чтение тел» — осознанное: сначала агент находит нужные письма дешёвым запросом, и только потом скачивает содержимое.

Отправка

  • send_email — отправка через SMTP: To/CC/BCC, plain-text или HTML, вложения с диска, заголовки Reply-To, In-Reply-To и References для тредов. Поддержана интернационализация через SMTPUTF8, а ответ содержит RFC Message-Id доставленного письма — причём только после фактического принятия письма провайдером.
  • forward_email — пересылка существующего письма новым получателям: сервер сам читает исходник по IMAP, составляет текст пересылки и заново прикрепляет вложения (сохраняя их MIME-типы).
  • save_to_mailbox — составить письмо и положить его в IMAP-папку (по умолчанию Drafts) без отправки — работает даже для аккаунтов без SMTP.

Папки и мутации

  • list_mailboxes — список IMAP-папок с разделителями иерархии и флагами (включая special-use вроде \Sent).
  • set_email_flags / mark_emails_as_read — управление флагами \Seen, \Flagged, \Answered, \Draft.
  • set_email_tags — управление семантическими тегами (только теми, что помечены writable=true).
  • move_emails — перемещение писем: нативный IMAP MOVE либо безопасный fallback через UID EXPUNGE при поддержке UIDPLUS.
  • archive_emails — перенос в архивную папку, определяемую по флагу \Archive (RFC 6154) с fallback на типовые имена вроде [Gmail]/All Mail.
  • delete_emails — удаление строго по UID через UID EXPUNGE; без поддержки UIDPLUS сервер откажется выполнять операцию, чем гарантирует, что по ошибке не будет отправлен EXPUNGE на всю папку.

Вложения и политик доступа

  • get_attachment_content — чтение вложения как встроенного MCP-ресурса, без записи файлов на диск (включается отдельно флагом enable_attachment_content).
  • download_attachment — скачивание на хост. По умолчанию файл кладётся в Downloads/mcp-email-server с рандомизированным безопасным именем; функция включается явно через enable_attachment_download = true.
  • list_allowed_recipients / list_allowed_senders — allowlist получателей и отправителей с поддержкой glob-шаблонов вида *@example.com. Пустой список получателей запрещает любую отправку, а письма заблокированных отправителей при чтении неотличимы от несуществующих — приватность соблюдается даже от самого агента.

Безопасность: что сделано правильно

Проект выделяется среди почтовых MCP-серверов именно инженерной культурой безопасности:

  • Никаких креденшелов через MCP. Добавление, изменение и удаление аккаунтов недоступно агенту — только UI или CLI, запускаемые пользователем.
  • Детерминированные мутации. Если результат операции потерян (неизвестно, применился ли эффект), сервер помечает его unknown с предупреждением reconciliation needed и никогда не повторяет автоматически — это защищает от дублей писем.
  • Жёсткие лимиты. Всё ограничено явными бюджетами: до 500 UID в пакете чтения, до 100 UID в мутации, 50 MiB на сырьевое сообщение и на пакет тел, 25 MiB на вложение, до 100 получателей и т.д. Превышение возвращает явную ошибку вместо тихой обрезки.
  • Безопасное удаление. UID EXPUNGE вместо общего EXPUNGE исключает массовую потерю писем.
  • Безопасная запись файлов. Скачивание вложений использует pinned-дескрипторы каталогов без symlink-переходов на POSIX и жёстко проверенные NTFS-пути на Windows, с правами только для владельца.

Чем отличается от аналогов

На сайте уже разбирался IMAP MCP Server на TypeScript — более простой вариант, где аккаунт можно добавить прямо через агента. MCP Email Server сознательно идёт другим путём: аккаунты настраивает только человек, зато взамен получаете настоящую мультиаккаунтность, семантические теги, продуманный трединг, Docker-образы для серверов и, пожалуй, самую аккуратную работу с границами ошибок IMAP/SMTP в этой категории.

Проект распространяется по лицензии BSD-3-Clause, на момент написания у него 324 звезды на GitHub.

Источник: https://github.com/Wh1isper/mcp-email-server