Skip to main content
Glama
lanfuli

multi-email

by lanfuli

Multi Email

Multi Email — это плагин Codex и MCP-сервер с открытым исходным кодом для независимо авторизованных почтовых ящиков Gmail и Microsoft 365. Каждая операция явно указывает account_alias; неявного активного почтового ящика не существует.

Поддерживаются поиск, чтение, создание черновиков, архивирование, изменение состояния прочитанности, метки Gmail, категории Microsoft и отправка через контролируемое сервером окно проверки на localhost.

Статус релиза: 0.1.2 считается официальным только при установке из аннотированного тега v0.1.2 или соответствующего релиза GitHub в репозитории lanfuli/multi-email. npm-пакет codex-multi-email ещё не опубликован; перед установкой проверьте владельца репозитория и тег релиза.

Зачем это существует

Большинство почтовых интеграций предполагают одну активную учётную запись. Multi Email сохраняет маршрутизацию явной, чтобы один запрос мог охватывать несколько независимо авторизованных учётных записей без смешивания идентификаторов сообщений, черновиков, меток или учётных данных.

Codex task
  -> Multi Email skill and MCP tools
  -> local Node.js MCP process
  -> Gmail API or Microsoft Graph

OAuth tokens -> macOS Keychain
Account aliases and OAuth app settings -> local mode-0600 config
Mailbox content returned by tools -> Codex conversation/model context

Процесс MCP и хранилище учётных данных работают на Mac, но сквозной рабочий процесс не обязательно ограничен локальной машиной. Подсказки и результаты работы инструментов, включая выбранное содержимое почты, могут обрабатываться Codex/OpenAI в соответствии с настройками продукта, учётной записи и контроля данных пользователя. Google и Microsoft также обрабатывают трафик API провайдера. См. Безопасность, конфиденциальность и потоки данных.

Related MCP server: Gmail MCP Server

Модель безопасности

  • Каждая операция требует явного account_alias.

  • Чтение — поведение навыка по умолчанию; изменения требуют текущего явного запроса пользователя.

  • Необратимое удаление не предоставляется.

  • Тела писем, вложения, цитируемый текст, подписи и ссылки рассматриваются как ненадёжные данные, а не как инструкции для инструментов.

  • Ограничены размеры поиска, пакетной записи, получателей и тел сообщений.

  • Отправка блокируется до тех пор, пока пользователь не просмотрит полный поддерживаемый черновик в виде обычного текста в окне 127.0.0.1 и не нажмёт «Одобрить».

  • Недолговечный approval_request_id привязан к манифесту фактической отправки: аутентифицированный субъект, почтовый ящик, фактическая личность отправителя, идентификатор черновика и цепочки, каждый получатель, тема, полный текст, ревизия провайдера и подтверждённое отсутствие вложений. Одобрение истекает, одноразовое и аннулируется при любом изменении связанных данных.

  • Версия 0.1.2 завершается с ошибкой до проверки или отправки, если черновик провайдера содержит HTML, multipart или неизвестный MIME, встроенный контент, вложения, некорректный адрес почтового ящика, неподдерживаемую личность From/Sender/Reply-To или неполную ревизию провайдера.

  • Запрос отправки провайдеру формируется из одобренных полей обычного текста из разрешённого списка. Gmail передаёт это замороженное необработанное сообщение в запросе отправки черновика; Microsoft использует один MIME-запрос sendMail вместо отправки изменяемого черновика провайдера.

  • Ни один инструмент MCP не может одобрить собственный запрос на отправку.

  • Отправка никогда не повторяется автоматически после неоднозначного результата, поскольку провайдер мог уже принять её.

Эти меры снижают риск случайных действий и действий, вызванных инъекциями в подсказки; они не делают OAuth-токены доступными только для чтения. Google gmail.modify и Microsoft Mail.ReadWrite и Mail.Send предоставляют существенный доступ к почтовому ящику.

Поддерживаемые операции

Область

Gmail

Microsoft 365

Проверка личности учётной записи

Да

Да

Диагностика учётных данных, токена, областей и личности

Один псевдоним или все, без чтения почты

Один псевдоним или все, без чтения почты

Нативный поиск провайдера и чтение сообщений

Да

Да

Новые черновики и черновики ответов

Да

Да

Обновление черновика

Да

Да

Архивация и прочитано/непрочитано

Да

Да

Метки/категории

Список и изменение идентификаторов меток

Изменение точного известного имени категории

Замороженная отправка с проверкой человеком

Локальное окно полной проверки

Локальное окно полной проверки; исходный черновик сохраняется

Плагин намеренно не вызывает конечные точки контента вложений провайдера, не раскрывает содержимое вложений через MCP, не удаляет почту безвозвратно, не работает с календарями, не раскрывает произвольные API провайдера и не включает автоматически псевдонимы отправки, делегированные личности или общие почтовые ящики. Ответы Gmail с format=full всё же могут доставлять небольшие байты встроенных MIME-частей в локальный процесс; они не возвращаются инструментом. Чтение сообщений раскрывает только имена вложений. Черновики, создаваемые плагином, — обычный текст. Черновики провайдера, содержащие HTML, встроенный контент, вложения, некорректные адреса почтовых ящиков или неподдерживаемые личности, не могут пройти проверку перед отправкой в версии 0.1.2.

Поисковые запросы являются нативными для провайдера: синтаксис поиска Gmail для Google и синтаксис поиска почты Microsoft Graph для Microsoft 365.

mail_list_accounts сообщает, существуют ли локальные учётные данные, с помощью credentialPresent и connectionStatus (credential_present_unverified или not_authorized). Эти поля не являются утверждениями об аутентификации. Используйте mail_diagnose_accounts для проверки текущего состояния токена, областей и личности провайдера.

Требования

  • macOS на Apple Silicon или Intel

  • Node.js 22 или новее

  • Codex desktop или CLI с поддержкой локального stdio MCP и плагинов

  • OAuth-клиент Google Cloud Desktop с включённым Gmail API для учётных записей Gmail

  • Публичное клиентское приложение Microsoft Entra для учётных записей Microsoft 365

Зафиксированный пакет dist/ содержит зависимости JavaScript и обе нативные бинарные библиотеки Keychain для macOS, поэтому снимок Git-маркетплейса может запуститься без зафиксированного каталога node_modules/. Для разработки и импорта npm-библиотек по-прежнему используются обычные npm-зависимости.

Установка из GitHub

Самый прозрачный способ установки — локальный клон:

git clone https://github.com/lanfuli/multi-email.git
cd multi-email
git checkout --detach v0.1.2
node ./scripts/multi-email --help
codex plugin marketplace add "$(pwd)"
codex plugin add multi-email@multi-email

После установки начните новую задачу Codex, чтобы навык и инструменты MCP были обнаружены.

Codex также принимает источник Git-маркетплейса после создания репозитория:

codex plugin marketplace add lanfuli/multi-email --ref v0.1.2
codex plugin add multi-email@multi-email

Явный --ref фиксирует установленный снимок на проверенном релизе, а не на изменяемой ветке по умолчанию. Запись в маркетплейсе репозитория использует документированный локальный источник в корне репозитория ("./"). Текущая документированная схема маркетплейса Codex также поддерживает формы URL, git-subdir и npm; этот репозиторий не использует npm-источник, поскольку публикации в npm не было.

Примеры настройки ниже выполняются из соответствующего локального клона. Будущая установка через npm сможет использовать эквивалентный бинарный файл multi-email ... напрямую; не запускайте npm run setup из потребляющего проекта.

Настройка OAuth

Путь к конфигурации по умолчанию:

~/.config/codex-multi-email/config.json

Установите CODEX_MULTI_EMAIL_CONFIG, чтобы использовать другой абсолютный путь. CLI настройки создаёт отсутствующий каталог конфигурации с режимом 0700, оставляет права существующего родительского каталога без изменений, записывает файл конфигурации с режимом 0600 и отказывается от цели конфигурации, которая является символической ссылкой или не обычным файлом.

Инициализируйте любой провайдер независимо или укажите настройки обоих провайдеров в одной команде.

Только Google:

node ./scripts/multi-email init \
  --google-client-json /absolute/path/to/desktop-oauth.json

Только Microsoft:

node ./scripts/multi-email init \
  --microsoft-client-id <entra-application-client-id> \
  --microsoft-tenant organizations

Оба провайдера:

node ./scripts/multi-email init \
  --google-client-json /absolute/path/to/desktop-oauth.json \
  --microsoft-client-id <entra-application-client-id> \
  --microsoft-tenant organizations

Чтобы позже добавить или заменить настройки Microsoft:

node ./scripts/multi-email set-microsoft-client <entra-application-client-id> \
  --microsoft-tenant organizations

Добавляйте и авторизуйте каждый почтовый ящик независимо:

node ./scripts/multi-email add-account gmail-01 <gmail-address> google
node ./scripts/multi-email auth gmail-01

node ./scripts/multi-email add-account m365-main <microsoft-365-address> microsoft
node ./scripts/multi-email auth m365-main

node ./scripts/multi-email list
node ./scripts/multi-email doctor

Используйте заполнители только в документации; не сохраняйте реальные адреса, JSON OAuth-клиента, сгенерированную конфигурацию, URL авторизации, коды или токены.

Google OAuth

Авторизация Google запрашивает openid, email и gmail.modify через loopback-поток OAuth для Desktop. Возвращённый профиль Gmail должен точно совпадать с настроенным адресом, прежде чем токены будут сохранены в Keychain.

Собственные учётные данные OAuth не освобождают приложение или пользователя от требований Google к проверке, экрану согласия, тестовым пользователям, ограниченным областям, организации, квотам или хранению. Проект OAuth, оставленный в режиме Testing, может вести себя иначе, чем проверенное рабочее приложение, а отдельные учётные записи или администраторы могут по-прежнему блокировать доступ.

Microsoft OAuth

Авторизация Microsoft использует интерактивную авторизацию MSAL в системном браузере и запрашивает делегированные User.Read, Mail.ReadWrite и Mail.Send. Профиль /me должен совпадать с настроенной личностью, прежде чем кэш MSAL будет сохранён. Политика клиента или согласие администратора могут блокировать эти области.

Использование в Codex

Всегда указывайте псевдоним учётной записи:

  • «Используй gmail-01, чтобы найти непрочитанные сообщения за последние два дня».

  • «По gmail-01 и m365-main обобщи сообщения, требующие моего ответа, без изменений».

  • «Создай черновик ответа в m365-main; не отправляй его».

  • «Проведи диагностику всех настроенных учётных записей без чтения или изменения почты».

Для отправки:

  1. Попросите Codex подготовить выбранный черновик для проверки.

  2. Проверьте аутентифицированную личность, фактический From/Sender/Reply-To, каждого получателя, тему, заголовки цепочки, формат, статус вложений и полный текст в окне localhost, открытом MCP-сервером.

  3. Нажмите «Одобрить» или «Отклонить» в этом окне.

  4. Вернитесь в Codex и явно подтвердите, что локальная проверка завершена.

  5. Сервер пересобирает манифест фактической отправки, расходует одноразовое одобрение, повторно проверяет ревизию провайдера и замораживает одобренные поля из разрешённого списка в одном запросе отправки.

  6. Замороженная отправка Microsoft намеренно сохраняет исходный черновик, поскольку действие отправки существующего черновика Graph не имеет условной защиты по ревизии. Проверьте поле результата sourceDraftRetained; не отправляйте этот сохранённый черновик снова без новой проверки.

Не вставляйте URL локальной проверки, cookie, nonce, отпечатки, значения OAuth или содержимое Keychain в Codex или в issue.

Обновление

Для локального клона маркетплейса:

git fetch origin --tags
git checkout --detach v0.1.2
codex plugin add multi-email@multi-email

Заменяйте v0.1.2 только на более новый аннотированный тег релиза, который вы проверили. Git-маркетплейс, установленный с --ref, остаётся зафиксированным, поэтому явно переводите его на новый релиз:

codex plugin remove multi-email@multi-email
codex plugin marketplace remove multi-email
codex plugin marketplace add lanfuli/multi-email --ref v0.1.2
codex plugin add multi-email@multi-email

После переустановки начните новую задачу Codex.

Удаление и очистка локальных данных

Удалите плагин и маркетплейс:

codex plugin remove multi-email@multi-email
codex plugin marketplace remove multi-email

Удаление плагина не удаляет OAuth-учётные данные или конфигурацию. Предпочитайте защищённые команды жизненного цикла перед удалением клона:

node ./scripts/multi-email logout <alias> --confirm
node ./scripts/multi-email revoke <alias> --confirm

logout удаляет локальные учётные данные. revoke также пытается выполнить отзыв на стороне провайдера, если провайдер безопасно это поддерживает; Microsoft может потребовать удаления через Microsoft My Apps с последующим logout. Проверяйте результат команды, а не предполагайте, что отзыв у провайдера прошёл успешно.

Текущие элементы Keychain используют службу io.github.lanfuli.multi-email. В исторических установках также могут быть проверенные устаревшие элементы под com.openai.codex.multi-email; хранилище учётных данных мигрирует только после проверки личности провайдера, а doctor намеренно доступен только для чтения и никогда не мигрирует. Для необязательной очистки устаревших данных используйте Keychain Access в macOS и проверьте точный путь конфигурации перед удалением ~/.config/codex-multi-email/config.json.

Разработка

npm ci
npm run validate
npm run pack:check
npm audit --omit=dev --audit-level=high

npm run build использует точную версию @vercel/ncc из package-lock.json, создаёт CommonJS-пакет dist/server.cjs и включает keyring.darwin-arm64.node и keyring.darwin-x64.node. CommonJS выбран намеренно, поскольку нативный загрузчик Keychain полагается на поведение __filename/createRequire в Node. Проверка холодной установки тестирует как снимок Git без зависимостей, так и установленный npm-тарбол.

Метаданные пакета структурно готовы к будущей публикации npm-пакета с именем codex-multi-email, но этот README не утверждает, что имя зарезервировано или что пакет опубликован. Мейнтейнер должен пройти аутентификацию, проверить владение, изучить npm publish --dry-run и явно опубликовать.

See CONTRIBUTING.md, SECURITY.md и CHANGELOG.md.

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

  • Неизвестный алиас: выполните node ./scripts/multi-email list, затем используйте точный алиас в каждом вызове.

  • Состояние соединения неясно: вызовите mail_diagnose_accounts для одного алиаса или всех алиасов; он проверяет наличие учётных данных, работоспособность токена, области доступа и идентичность, не читая сообщения и не выполняя записи.

  • Нет авторизации или истёк срок действия токена: повторно выполните node ./scripts/multi-email auth <alias>; никогда не вставляйте токен в чат.

  • Запрос на проверку истёк или отклонён: подготовьте новый запрос на проверку и примите новое решение в локальном окне.

  • Черновик изменён после одобрения: снова просмотрите полный новый черновик.

  • Черновик не проходит проверку: удалите HTML, встроенное содержимое, вложения, альтернативные идентичности отправителя или лишние значения Reply-To, либо пересоздайте его как простой текстовый черновик через Multi Email. Не обходите это ограничение.

  • Результат отправки недействителен: не повторяйте отправку; сначала проверьте папки Drafts и Sent только в режиме чтения.

  • Авторизация Gmail заблокирована: проверьте экран согласия OAuth, статус тестового пользователя, запрошенную область Gmail, политику учётной записи/организации и состояние проверки приложения.

  • Согласие Microsoft заблокировано: проверьте настройки общедоступного клиента, выбор клиента, делегированные разрешения и политику администратора.

  • Общий почтовый ящик или вторичный адрес From: не поддерживается до тех пор, пока не будут реализованы и проверены в конце концов полная расшифрованная идентичность и разрешения.

Лицензия

MIT © 2026 Vincent_Lan. См. LICENSE.

A
license - permissive license
Not graded
quality - not tested
A
maintenance

Maintenance

Maintainers
Response time
0dRelease cycle
3Releases (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

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables interaction with Gmail through the Gmail API to read, send, and manage emails. Supports multiple Gmail accounts with real-time monitoring and advanced features for email search and attachment handling.
    17
    Apache 2.0
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to interact with Gmail through OAuth2 authentication, allowing users to list, search, read emails, and create drafts with a safety-first design that prevents accidental sends by default.
    192
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to manage Gmail accounts through natural language for tasks like sending, reading, searching, and organizing emails. It supports advanced features including draft management, label operations, and batch actions via secure OAuth 2.0 authentication.
    MIT
  • A
    license
    B
    quality
    B
    maintenance
    Enables AI assistants to manage multiple Gmail accounts simultaneously with built-in OAuth authentication, supporting email reading, sending, drafts, labels, and account management.
    60
    70
    2
    MIT

View all related MCP servers

Related MCP Connectors

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/lanfuli/multi-email'

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