slab-email
slab-email
Headlesser E-Mail-Connector für KI-Agenten über REST und MCP.
slab-email ist ein lokaler Microservice, der den Mailbox-Zugriff hinter einer normalisierten API und MCP-Tool-Oberfläche standardisiert.
Es ist für slab-agents und andere KI-Laufzeiten konzipiert, die kontrollierten Zugriff auf mehrere E-Mail-Konten mit sicherer Verwaltung von Anmeldedaten benötigen.
Was ist das?
slab-email ist keine E-Mail-Benutzeroberfläche.
Es bietet:
Normalisierte Lese-/Such-/Erstellungs-/Sende-Funktionen über E-Mail-Anbieter hinweg.
Admin-REST für die Verwaltung von Konten und Zugriffsprofilen.
MCP-Server für LLM-/Tooling-Clients.
Anbieter-spezifische Adapter für:
Proton über Proton Mail Bridge (obligatorisch).
Generisches IMAP/SMTP.
Gmail über OAuth2 + Gmail API.
Verschlüsselte Speicherung von Anmeldedaten in SQLite.
Bereichsbezogene Connector-Tokens mit Berechtigungen pro Profil.
Sende-Idempotenz und grundlegende Anti-Loop-Ratenbegrenzung.
Related MCP server: Mailport
Architektur
Ablauf auf hoher Ebene:
slab-agentsruft/mcpmit einem bereichsbezogenen Connector-Token auf.REST-Admin-Endpunkte konfigurieren Anbieter und Zugriffsprofile.
Konten werden in SQLite gespeichert; Anmeldedaten werden im Ruhezustand verschlüsselt.
Zur Anfragezeit werden Anbieterinstanzen aus der Kontokonfiguration und dem entschlüsselten Geheimnis erstellt.
slab-emailführt Operationen gegen die Anbieter-APIs (IMAP/SMTP oder Gmail API) aus.
slab-agents (REST/MCP) -> slab-email
|
+-> sqlite (config + encrypted secrets)
+-> providers
+ proton_bridge -> Proton Mail Bridge (local IMAP/SMTP)
+ imap_smtp -> Any IMAP/SMTP
+ gmail -> Gmail API (OAuth2)Funktionen
Multi-Konto-Unterstützung:
mehrere Konten gleichzeitig verbinden und verwalten.
Anbieterabstraktion:
Proton Bridge + IMAP/SMTP generisch + Gmail.
Connector-bezogene Berechtigungen:
lesen / entwerfen / senden.
Idempotentes Senden/Antworten mit
idempotencyKey.Thread-bezogene Lese-/Listen-Payloads und vollständige Nachrichten-Hydrierung.
Verschlüsselte Geheimnisse mit
AES-256-GCM.Zugriffstokens, die auf Profile beschränkt sind.
Admin-API und MCP-API getrennt durch Token-Anforderungen.
Docker- und CI-bereit.
Technologie-Stack
Node.js + TypeScript
Express 5
SQLite (
better-sqlite3)Zod
MCP SDK (
@modelcontextprotocol/sdk)IMAP/SMTP:
imapflow,nodemailerGmail:
googleapis/google-auth-library
Schnellstart
1) Lokalen Dienst starten
npm install
cp .env.example .envWerte in .env setzen und ausführen:
export SLAB_EMAIL_ADMIN_KEY=change-me
export SLAB_EMAIL_MASTER_KEY=<32-byte base64 or 64-hex key>
npm run devErwartet:
GET /health→{"status":"ok"}./mcpverfügbar unterPOST /mcp.
2) Ein bereichsbezogenes Profil + Token registrieren
Admin-Token für die Konto-/Profilverwaltung und Connector-Token für die reguläre Nutzung verwenden.
Konfiguration
Erforderliche / relevante Umgebungsvariablen:
HOST(Standard127.0.0.1)PORT(Standard6981)DATABASE_PATH(Standard./data/slab-email.db)SLAB_EMAIL_ADMIN_KEY(erforderlich)SLAB_EMAIL_MASTER_KEY(erforderlich, 32-Byte-Schlüssel)GOOGLE_CLIENT_IDGOOGLE_CLIENT_SECRETGOOGLE_REDIRECT_URI(Standardhttp://127.0.0.1:6981/api/oauth/google/callback)MAX_SENDS_PER_ACCOUNT_PER_HOUR(Standard60)MCP_ALLOWED_ORIGINS(kommagetrennt)MCP_ALLOWED_ORIGINS_HOSTS(kommagetrennt)PUBLIC_ADMIN_ALLOWED_ORIGINS(kommagetrennt)
Siehe .env.example für die minimale Bootstrap-Konfiguration.
Proton Bridge Einrichtung
Proton Mail Bridge installieren.
Proton-Konto in Bridge hinzufügen und generierte IMAP/SMTP-Konfiguration kopieren.
slab-emailmit dieser Konfiguration konfigurieren über:POST /api/accounts/proton-bridge
Testen:
POST /api/accounts/:id/test
Dieses Projekt implementiert bewusst keine Proton-Login-Automatisierung. Verwenden Sie nur Bridge-generierte Anmeldedaten.
Siehe docs/proton.md.
Gmail Einrichtung
Google Cloud OAuth-Anmeldedaten erstellen.
GOOGLE_CLIENT_ID,GOOGLE_CLIENT_SECRET,GOOGLE_REDIRECT_URIin.envsetzen.Dienst starten.
Verwenden:
POST /api/accounts/gmail/connectumauthorizationUrlzu erhalten.
OAuth im Browser abschließen.
Callback:
GET /api/oauth/google/callback
Gmail-Konto wird mit Refresh-Token in der verschlüsselten Datenbank gespeichert.
Siehe docs/gmail.md.
REST API
Basis:
GET /health/api/*POST /mcp
Authentifizierung:
Admin-Endpunkte:
Bearer <SLAB_EMAIL_ADMIN_KEY>Operativ + MCP:
Bearer <bereichsbezogenes Connector-Token>
Siehe docs/api.md für vollständige Anfrage-/Antwortbeispiele.
MCP
Endpunkt: POST /mcp
Tools:
email_list_accountsemail_searchemail_get_messageemail_list_threadsemail_get_threademail_create_draftemail_sendemail_reply
Siehe docs/mcp.md für Tool-Payloads und Nutzung.
Sicherheitsmodell
SLAB_EMAIL_MASTER_KEYist erforderlich, um Anbietergeheimnisse zu verschlüsseln/entschlüsseln.Geheimnisse werden niemals von Admin-REST/MCP zurückgegeben.
Bereichsbezogene Connector-Tokens ersetzen den Admin-Schlüssel in operativen Kontexten.
Lese-/Schreib-/Sendeberechtigungen werden pro Zugriffsprofil durchgesetzt.
Senden ist idempotent durch
(accountId, idempotencyKey).Unbekannte Sendeergebnisse werden als
SEND_OUTCOME_UNKNOWNgemeldet und niemals blind wiederholt.Standardmäßige Sende-Drosselung pro Konto:
MAX_SENDS_PER_ACCOUNT_PER_HOUR.Protokolle schwärzen wahrscheinlich sensible Schlüssel.
Datenmodell
email_accounts: Kontometadaten und Anbieterkonfiguration (ohne Geheimnisse).email_account_secrets: verschlüsselte Payload (username,password,refreshToken).access_profiles+access_profile_accounts.access_tokens: gehashte Connector-Tokens.send_operations: Status + Prüffelder undidempotency_key.
Siehe docs/architecture.md.
Docker
Dockerfilefür Image-Erstellung.docker-compose.ymlfür lokale Laufzeit.
Hinweis: Proton Bridge ist lokal-first. Wenn Bridge außerhalb von Docker auf dem Host ausgeführt wird, muss die Konnektivität sorgfältig konfiguriert werden (Host-Netzwerk oder Äquivalent), da der Container standardmäßig keinen Zugriff auf die Host-127.0.0.1-Anmeldedaten annehmen kann.
Entwicklung
npm run dev # start with hot reload
npm test # run test suite
npm run lint
npm run typecheck
npm run build
npm start # run production bundleTests
Domänentests decken ab:
Konto-Lebenszyklus und Geheimnisverschlüsselung
OAuth-Statusvalidierung
Profilbereich und Berechtigungen
Trennung von Suche/Liste vs. Get-Payload
Sende-Idempotenz
Verhalten bei unbekanntem Sendeergebnis
MCP-Auth/Bereich/Tool-Ausführung
Einschränkungen (MVP)
Keine Anhangsunterstützung.
Keine Mailbox-Synchronisierungs-Engine, lokaler Volltextsuchindex oder Webhook-Push-Synchronisation.
Keine Batch-/Ausgehende-Kampagnen-Workflows.
Keine Webmail-Benutzeroberfläche in diesem Dienst.
slab-agents Integration
Wenn ../slab-agents existiert, verwenden Sie docs/slab-agents-integration.md für den Integrationsvertrag und die Konfiguration.
Lizenz
MIT
This server cannot be deployed
Maintenance
Related MCP Connectors
Email infrastructure for AI agents — send, receive, search, and reply to email over MCP.
Email inboxes for AI agents: send, receive, reply, search, and manage threaded email over MCP.
Hosted email for AI agents: create inboxes, send, receive, and reply over MCP with scoped API keys
Hosted email MCP for AI agents with inboxes, send/receive, memory, recovery, and credits.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables AI agents to search, read, send, and organize Gmail emails via MCP protocol.22144 npm2MIT
- AlicenseNot gradedqualityBmaintenanceConnects multiple IMAP and SMTP mailboxes to MCP clients like ChatGPT without exposing credentials, enabling email search and thread retrieval via natural language.1Apache 2.0
- AlicenseNot gradedqualityBmaintenanceConnects any IMAP/SMTP mailbox to AI agents via MCP, enabling email read, search, send, reply, and management through natural language.6 npmMIT
- FlicenseBqualityBmaintenanceEnables external AI agents to read, send, and manage email over IMAP/SMTP via MCP, including inbox listing, search, drafts, scheduled/batch sending, and operations like reply, archive, and labels.303-