multi-email
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; не отправляй его».«Проведи диагностику всех настроенных учётных записей без чтения или изменения почты».
Для отправки:
Попросите Codex подготовить выбранный черновик для проверки.
Проверьте аутентифицированную личность, фактический From/Sender/Reply-To, каждого получателя, тему, заголовки цепочки, формат, статус вложений и полный текст в окне localhost, открытом MCP-сервером.
Нажмите «Одобрить» или «Отклонить» в этом окне.
Вернитесь в Codex и явно подтвердите, что локальная проверка завершена.
Сервер пересобирает манифест фактической отправки, расходует одноразовое одобрение, повторно проверяет ревизию провайдера и замораживает одобренные поля из разрешённого списка в одном запросе отправки.
Замороженная отправка 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> --confirmlogout удаляет локальные учётные данные. 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=highnpm 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.
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 gradedqualityDmaintenanceEnables 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.17Apache 2.0
- AlicenseNot gradedqualityDmaintenanceEnables 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.192MIT
- AlicenseNot gradedqualityDmaintenanceEnables 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
- AlicenseBqualityBmaintenanceEnables AI assistants to manage multiple Gmail accounts simultaneously with built-in OAuth authentication, supporting email reading, sending, drafts, labels, and account management.60702MIT
Related MCP Connectors
Manage Gmail end-to-end: search, read, send, draft, label, and organize threads. Automate workflow…
Authenticated email gateway for AI agents — per-agent inboxes, HITL approval, SPF/DKIM verified.
Authenticated email gateway for AI agents — per-agent inboxes, HITL approval, SPF/DKIM verified.
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/lanfuli/multi-email'
If you have feedback or need assistance with the MCP directory API, please join our Discord server