multi-email
Multi Email
Multi Email ist ein Open-Source-Codex-Plugin und MCP-Server für unabhängig autorisierte Gmail- und Microsoft-365-Postfächer. Jede Operation benennt einen expliziten account_alias; es gibt kein implizites aktives Postfach.
Es unterstützt Suchen, Lesen, Entwerfen, Archivieren, Änderungen des Lesestatus, Gmail-Labels, Microsoft-Kategorien und das Senden über ein servererzwungenes localhost-Überprüfungsfenster.
Versionsstatus:
0.1.2ist nur offiziell, wenn es aus dem annotierten Tagv0.1.2oder dem passenden GitHub-Release unterlanfuli/multi-emailinstalliert wird. Das npm-Paketcodex-multi-emailist noch nicht veröffentlicht; überprüfen Sie den Repository-Besitzer und das Release-Tag vor der Installation.
Warum es das gibt
Die meisten E-Mail-Integrationen gehen von einem aktiven Konto aus. Multi Email hält das Routing explizit, sodass eine Anfrage mehrere unabhängig autorisierte Konten abdecken kann, ohne Nachrichten-IDs, Entwürfe, Labels oder Anmeldedaten zu vermischen.
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 contextDer MCP-Prozess und der Anmeldedatenspeicher laufen auf dem Mac, aber der End-to-End-Workflow ist nicht unbedingt nur lokal. Prompts und Tool-Ergebnisse, einschließlich ausgewählter E-Mail-Inhalte, können gemäß den Produkt-, Konto- und Datenkontroll-Einstellungen des Benutzers von Codex/OpenAI verarbeitet werden. Google und Microsoft verarbeiten auch Provider-API-Datenverkehr. Siehe Sicherheit, Datenschutz und Datenfluss.
Related MCP server: Gmail MCP Server
Sicherheitsmodell
Jede Operation erfordert einen expliziten
account_alias.Lesen ist die Standardfähigkeit; Mutationen erfordern eine aktuelle, explizite Benutzeranfrage.
Dauerhaftes Löschen ist nicht verfügbar.
E-Mail-Inhalte, Anhänge, zitierter Text, Signaturen und Links werden als nicht vertrauenswürdige Daten behandelt, niemals als Tool-Anweisungen.
Such-, Schreib-Batch-, Empfänger- und Textgrößen sind begrenzt.
Das Senden ist blockiert, bis der Benutzer den vollständigen unterstützten Klartext-Entwurf in einem
127.0.0.1-Fenster überprüft und auf „Genehmigen“ klickt.Eine kurzlebige
approval_request_idist an ein effektives Sende-Manifest gebunden: authentifizierter Prinzipal, Postfach, effektive Absenderidentität, Entwurfs- und Thread-Identität, jeder Empfänger, Betreff, vollständiger Text, Provider-Revision und das verifizierte Fehlen von Anhängen. Die Genehmigung läuft ab, ist nur einmal verwendbar und wird durch jede gebundene Änderung ungültig.Version
0.1.2schlägt vor der Überprüfung oder dem Senden fehl, wenn ein Provider-Entwurf HTML, mehrteilige oder unbekannte MIME, Inline-Inhalte, Anhänge, eine fehlerhafte Postfachadresse, eine nicht unterstützte From/Sender/Reply-To-Identität oder eine unvollständige Provider-Revision enthält.Die Provider-Sendeanfrage wird aus den genehmigten, auf die Whitelist gesetzten Klartextfeldern erstellt. Gmail liefert diese eingefrorene Roh-Nachricht in der Entwurfs-Sendeanfrage; Microsoft verwendet eine MIME-
sendMail-Anfrage, anstatt einen veränderbaren Provider-Entwurf zu senden.Kein MCP-Tool kann seine eigene Sendeanfrage genehmigen.
Ein Senden wird nach einem mehrdeutigen Ergebnis nie automatisch wiederholt, da der Provider es möglicherweise bereits akzeptiert hat.
Diese Kontrollen reduzieren versehentliche und prompt-injizierte Aktionen; sie machen OAuth-Tokens nicht schreibgeschützt. Google gmail.modify und Microsoft Mail.ReadWrite plus Mail.Send gewähren erheblichen Postfachzugriff.
Unterstützte Operationen
Bereich | Gmail | Microsoft 365 |
Kontenidentitätsprüfung | Ja | Ja |
Diagnose von Anmeldedaten, Token, Bereichen und Identität | Ein Alias oder alle, ohne E-Mails zu lesen | Ein Alias oder alle, ohne E-Mails zu lesen |
Providernative Suche und Nachrichtenlesen | Ja | Ja |
Neue Entwürfe und Antwortentwürfe | Ja | Ja |
Entwurfsaktualisierung | Ja | Ja |
Archivieren und gelesen/ungelesen | Ja | Ja |
Labels/Kategorien | Label-IDs auflisten und ändern | Genauen bekannten Kategorienamen ändern |
Menschlich überprüftes eingefrorenes Senden | Lokales Vollüberprüfungsfenster | Lokales Vollüberprüfungsfenster; Quelldatei wird beibehalten |
Das Plugin ruft absichtlich keine Provider-Endpunkte für Anhangsinhalte auf, legt Anhangsinhalte nicht über MCP offen, löscht keine E-Mails dauerhaft, verwaltet keine Kalender, legt keine beliebigen Provider-APIs offen und aktiviert nicht automatisch Send-as-Aliase, delegierte Identitäten oder freigegebene Postfächer. Gmail-format=full-Antworten können dennoch kleine Inline-MIME-Part-Bytes an den lokalen Prozess liefern; sie werden nicht vom Tool zurückgegeben. Nachrichtenlesen legt nur Anhangsnamen offen. Vom Plugin erstellte Entwürfe sind Klartext. Provider-Entwürfe mit HTML, Inline-Inhalten, Anhängen, fehlerhaften Postfachadressen oder nicht unterstützten Identitäten können das Sendeüberprüfungs-Gate in Version 0.1.2 nicht passieren.
Suchanfragen sind providernativ: Gmail-Suchsyntax für Google und Microsoft-Graph-Mail-Suchsyntax für Microsoft 365.
mail_list_accounts meldet, ob ein lokaler Anmeldedatensatz mit credentialPresent und connectionStatus (credential_present_unverified oder not_authorized) vorhanden ist. Diese Felder sind keine Authentifizierungsansprüche. Verwenden Sie mail_diagnose_accounts, um die aktuelle Token-, Bereichs- und Provider-Identitätsgesundheit zu überprüfen.
Anforderungen
macOS auf Apple Silicon oder Intel
Node.js 22 oder neuer
Codex-Desktop oder CLI mit lokalem stdio-MCP- und Plugin-Support
Ein Google-Cloud-Desktop-OAuth-Client mit aktivierter Gmail-API für Gmail-Konten
Eine Microsoft-Entra-Public-Client-Anwendung für Microsoft-365-Konten
Das eingecheckte dist/-Bundle enthält seine JavaScript-Abhängigkeiten und beide nativen macOS-Keychain-Binärdateien, sodass ein Git-Marketplace-Snapshot ohne ein eingechecktes node_modules/-Verzeichnis starten kann. Entwicklungs- und npm-Bibliotheksimporte verwenden weiterhin normale npm-Abhängigkeiten.
Von GitHub installieren
Die transparenteste Installation ist ein lokaler Klon:
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-emailStarten Sie nach der Installation eine neue Codex-Aufgabe, damit die Fähigkeit und die MCP-Tools erkannt werden.
Codex akzeptiert auch eine Git-Marketplace-Quelle, sobald das Repository existiert:
codex plugin marketplace add lanfuli/multi-email --ref v0.1.2
codex plugin add multi-email@multi-emailDas explizite --ref hält den installierten Snapshot auf dem überprüften Release statt auf dem sich bewegenden Standardzweig. Der Repository-Marketplace-Eintrag verwendet die dokumentierte lokale Quelle im Repository-Stammverzeichnis ("./"). Das aktuell dokumentierte Codex-Marketplace-Schema hat auch URL-, Git-Unterverzeichnis- und npm-Quellenformen; dieses Repository verwendet keine npm-Quelle, da keine npm-Veröffentlichung stattgefunden hat.
Die Setup-Beispiele unten laufen aus dem passenden lokalen Klon. Eine zukünftige npm-Installation kann das äquivalente multi-email ...-Binär direkt verwenden; führen Sie npm run setup nicht aus einem verbrauchenden Projekt aus.
OAuth konfigurieren
Der Standardkonfigurationspfad ist:
~/.config/codex-multi-email/config.jsonSetzen Sie CODEX_MULTI_EMAIL_CONFIG, um einen anderen absoluten Pfad zu verwenden. Die Setup-CLI erstellt ein fehlendes Konfigurationsverzeichnis mit Modus 0700, lässt die Berechtigungen eines vorhandenen übergeordneten Verzeichnisses unverändert, schreibt die Konfigurationsdatei mit Modus 0600 und lehnt ein Konfigurationsziel ab, das ein Symlink oder eine nicht reguläre Datei ist.
Initialisieren Sie entweder einen Provider unabhängig oder geben Sie beide Provider-Einstellungen in einem Befehl an.
Nur Google:
node ./scripts/multi-email init \
--google-client-json /absolute/path/to/desktop-oauth.jsonNur Microsoft:
node ./scripts/multi-email init \
--microsoft-client-id <entra-application-client-id> \
--microsoft-tenant organizationsBeide Provider:
node ./scripts/multi-email init \
--google-client-json /absolute/path/to/desktop-oauth.json \
--microsoft-client-id <entra-application-client-id> \
--microsoft-tenant organizationsUm Microsoft-Einstellungen später hinzuzufügen oder zu ersetzen:
node ./scripts/multi-email set-microsoft-client <entra-application-client-id> \
--microsoft-tenant organizationsFügen Sie jedes Postfach unabhängig hinzu und autorisieren Sie es:
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 doctorVerwenden Sie Platzhalter nur in der Dokumentation; committen Sie keine echten Adressen, OAuth-Client-JSON, generierte Konfiguration, Autorisierungs-URLs, Codes oder Tokens.
Google OAuth
Google-Autorisierung fordert openid, email und gmail.modify über einen Loopback-Desktop-OAuth-Flow an. Das zurückgegebene Gmail-Profil muss genau mit der konfigurierten Adresse übereinstimmen, bevor Tokens im Keychain gespeichert werden.
Bring-your-own-OAuth-Anmeldedaten befreien eine App oder einen Benutzer nicht von Googles Verifizierungs-, Zustimmungsbildschirm-, Testbenutzer-, eingeschränkten Bereichs-, Organisations-, Kontingent- oder Aufbewahrungsanforderungen. Ein OAuth-Projekt im Testmodus kann sich anders verhalten als eine verifizierte Produktions-App, und einzelne Konten oder Administratoren können den Zugriff weiterhin blockieren.
Microsoft OAuth
Microsoft-Autorisierung verwendet die interaktive MSAL-Systembrowser-Autorisierung und fordert delegierte User.Read, Mail.ReadWrite und Mail.Send an. Das /me-Profil muss mit der konfigurierten Identität übereinstimmen, bevor der MSAL-Cache gespeichert wird. Mandantenrichtlinie oder Administratorzustimmung können diese Bereiche blockieren.
In Codex verwenden
Nennen Sie immer den Kontoalias:
„Verwenden Sie
gmail-01, um ungelesene Nachrichten der letzten zwei Tage zu finden.“„Fassen Sie über
gmail-01undm365-mainNachrichten zusammen, die meine Antwort benötigen, ohne Änderungen vorzunehmen.“„Erstellen Sie einen Antwortentwurf in
m365-main; senden Sie ihn nicht.“„Diagnostizieren Sie alle konfigurierten Konten, ohne E-Mails zu lesen oder zu ändern.“
Für ein Senden:
Bitten Sie Codex, den ausgewählten Entwurf zur Überprüfung vorzubereiten.
Überprüfen Sie die authentifizierte Identität, effektive From/Sender/Reply-To, jeden Empfänger, Betreff, Threading-Header, Format, Anhangsstatus und den vollständigen Klartext im localhost-Fenster, das vom MCP-Server geöffnet wird.
Klicken Sie in diesem Fenster auf „Genehmigen“ oder „Ablehnen“.
Kehren Sie zu Codex zurück und bestätigen Sie explizit, dass die lokale Überprüfung abgeschlossen ist.
Der Server erstellt das effektive Sende-Manifest neu, verbraucht die einmalige Genehmigung, überprüft die Provider-Revision erneut und friert die genehmigten Whitelist-Felder in eine Sendeanfrage ein.
Ein eingefrorenes Microsoft-Senden behält absichtlich den ursprünglichen Quellentwurf bei, da die Graph-Aktion zum Senden eines vorhandenen Entwurfs keine bedingte Revisionssperre hat. Überprüfen Sie das Ergebnisfeld
sourceDraftRetained; senden Sie diesen beibehaltenen Entwurf nicht erneut ohne eine neue Überprüfung.
Fügen Sie die lokale Überprüfungs-URL, Cookies, Nonces, Fingerabdrücke, OAuth-Werte oder Keychain-Inhalte nicht in Codex oder ein Issue ein.
Aktualisieren
Für einen lokalen Klon-Marketplace:
git fetch origin --tags
git checkout --detach v0.1.2
codex plugin add multi-email@multi-emailErsetzen Sie v0.1.2 nur mit einem neueren annotierten Release-Tag, den Sie überprüft haben. Ein Git-Marketplace, der mit --ref installiert wurde, bleibt gepinnt, also verschieben Sie ihn explizit auf ein neues Release:
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-emailStarten Sie nach der Neuinstallation eine neue Codex-Aufgabe.
Deinstallieren und lokale Daten entfernen
Entfernen Sie das Plugin und den Marketplace:
codex plugin remove multi-email@multi-email
codex plugin marketplace remove multi-emailDie Plugin-Entfernung löscht keine OAuth-Anmeldedaten oder Konfiguration. Bevorzugen Sie die geschützten Lebenszyklusbefehle, bevor Sie den Klon löschen:
node ./scripts/multi-email logout <alias> --confirm
node ./scripts/multi-email revoke <alias> --confirmlogout entfernt lokale Anmeldedaten. revoke versucht auch eine provider-seitige Widerrufung, wo der Provider dies sicher unterstützt; Microsoft kann eine Entfernung über Microsoft My Apps gefolgt von logout erfordern. Überprüfen Sie das Befehlsergebnis, anstatt anzunehmen, dass der Provider-Widerruf erfolgreich war.
Aktuelle Keychain-Elemente verwenden den Dienst io.github.lanfuli.multi-email. Historische Installationen können auch verifizierte Legacy-Elemente unter com.openai.codex.multi-email haben; der Anmeldedatenspeicher migriert nur nach Validierung der Provider-Identität, während doctor bewusst schreibgeschützt ist und nie migriert. Verwenden Sie macOS-Schlüsselbundzugriff für optionale Legacy-Bereinigung und überprüfen Sie den genauen Konfigurationspfad, bevor Sie ~/.config/codex-multi-email/config.json löschen.
Entwicklung
npm ci
npm run validate
npm run pack:check
npm audit --omit=dev --audit-level=highnpm run build verwendet die exakte @vercel/ncc-Version in package-lock.json, erzeugt das CommonJS-Bundle dist/server.cjs und enthält sowohl keyring.darwin-arm64.node als auch keyring.darwin-x64.node. CommonJS ist beabsichtigt, da der native Keychain-Loader auf Node's __filename/createRequire-Verhalten angewiesen ist. Der Kaltinstallationscheck testet sowohl einen abhängigkeitsfreien Git-Snapshot als auch ein installiertes npm-Tarball.
Die Paketmetadaten sind strukturell bereit für ein zukünftiges öffentliches npm-Paket namens codex-multi-email, aber diese README behauptet nicht, dass der Name reserviert ist oder dass ein Paket veröffentlicht wurde. Ein Maintainer muss sich authentifizieren, den Besitz verifizieren, npm publish --dry-run überprüfen und explizit veröffentlichen.
Siehe CONTRIBUTING.md, SECURITY.md und CHANGELOG.md.
Fehlerbehebung
Unbekannter Alias: führen Sie
node ./scripts/multi-email listaus und verwenden Sie dann bei jedem Aufruf den exakten Alias.Verbindungsstatus unklar: rufen Sie
mail_diagnose_accountsfür einen Alias oder alle Aliase auf; es prüft das Vorhandensein von Anmeldedaten, die Token-Verwendbarkeit, Scopes und die Identität, ohne Nachrichten zu lesen oder Schreibvorgänge durchzuführen.Nicht autorisiert oder Token abgelaufen: führen Sie
node ./scripts/multi-email auth <alias>erneut aus; fügen Sie niemals ein Token in den Chat ein.Review-Anfrage abgelaufen/abgelehnt: bereiten Sie eine neue Review vor und treffen Sie eine neue Entscheidung im lokalen Fenster.
Entwurf nach Genehmigung geändert: überprüfen Sie den vollständigen neuen Entwurf erneut.
Entwurf nicht überprüfbar: entfernen Sie HTML, Inline-Inhalte, Anhänge, alternative Absenderidentitäten oder zusätzliche Reply-To-Werte, oder erstellen Sie ihn als Klartext-Entwurf über Multi Email neu. Umgehen Sie das Gate nicht.
Sendeergebnis ungewiss: nicht erneut versuchen; prüfen Sie zuerst Entwürfe und Gesendet im Nur-Lese-Modus.
Gmail-Autorisierung blockiert: überprüfen Sie den OAuth-Zustimmungsbildschirm, den Testbenutzerstatus, den angeforderten Gmail-Bereich, die Konto-/Organisationsrichtlinie und den App-Verifizierungsstatus.
Microsoft-Zustimmung blockiert: überprüfen Sie die Public-Client-Einstellungen, die Mandantenauswahl, delegierte Berechtigungen und die Administratorrichtlinie.
Gemeinsames Postfach oder alternative From-Adresse: nicht unterstützt, bis die exakte delegierte Identität und die Berechtigungen implementiert und Ende-zu-Ende verifiziert sind.
Lizenz
MIT © 2026 Vincent_Lan. Siehe 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