Email MCP Server
E-Mail-MCP-Server
Ein Model Context Protocol (MCP)-Server, der E-Mail-Zugriff über IMAP und SMTP bereitstellt. Ermöglicht KI-Agenten und Anwendungen das Lesen, Suchen, Senden und Verwalten von E-Mails über eine standardisierte HTTP/SSE-Schnittstelle.
Funktionen
9 E-Mail-Tools via MCP:
list_folders- Alle IMAP-Postfächer/Ordner auflistensearch_emails- E-Mails mit Filtern suchen (Absender, Betreff, Datumsbereich, Status gelesen/markiert)read_email- Vollständigen E-Mail-Inhalt abrufen, einschließlich Textkörper und Anhang-Metadatenmark_email- E-Mails als gelesen/ungelesen oder markiert/nicht markiert kennzeichnenmove_email- E-Mails zwischen Ordnern verschiebensend_email- Neue E-Mails senden (Nur-Text oder Multipart-HTML)reply_email- Auf E-Mails antworten unter Beibehaltung der Thread-Headerdownload_attachment- E-Mail-Anhänge in das Arbeitsverzeichnis herunterladensend_email_with_attachments- E-Mails mit Dateianhängen aus dem Arbeitsverzeichnis senden
Produktionsreife Architektur:
Async-natives IMAP/SMTP mit Verbindungspooling
Pydantic-basierte Konfiguration und Validierung
Umfassende Fehlerbehandlung mit strukturierten Exceptions
API-Key-Authentifizierung via X-API-Key-Header
systemd-Service-Datei für Ubuntu-Bereitstellung
Testgetriebene Entwicklung:
85+ Unit- und Integrationstests
100% Abdeckung der Kernfunktionalität
Gemockte E-Mail-Server für reproduzierbare Tests
Installation mit Claude Desktop (Empfohlen)
Der einfachste Weg, diesen Server zu nutzen, ist über das MCPB-Bundle — eine Einzeldatei-Installation für Claude Desktop.
1. Herunterladen
Laden Sie email_mcp.mcpb von der neuesten Version herunter.
2. Installieren
Doppelklicken Sie auf email_mcp.mcpb. Claude Desktop öffnet einen Installationsdialog.
3. Konfigurieren
Geben Sie bei Aufforderung Ihre Mailserver-Anmeldedaten ein. Alle Werte werden im OS-Schlüsselbund gespeichert (macOS Keychain / Linux Secret Service):
Feld | Beschreibung | Beispiel |
IMAP Host | IMAP-Server-Hostname |
|
IMAP Port | IMAP-Server-Port |
|
IMAP Username | Ihre E-Mail-Adresse |
|
IMAP Password | Passwort oder App-spezifisches Passwort |
|
IMAP SSL | SSL/TLS für IMAP verwenden |
|
SMTP Host | SMTP-Server-Hostname |
|
SMTP Port | SMTP-Server-Port |
|
SMTP Username | Ihre E-Mail-Adresse |
|
SMTP Password | Passwort oder App-spezifisches Passwort |
|
SMTP STARTTLS | STARTTLS-Modus |
|
Gmail-Nutzer: Sie müssen ein App-Passwort verwenden, nicht Ihr reguläres Google-Konto-Passwort. Aktivieren Sie IMAP unter Gmail-Einstellungen → Weiterleitung und POP/IMAP.
4. Verwenden
Sobald die Installation abgeschlossen ist, kann Claude auf Ihre E-Mails zugreifen. Versuchen Sie:
"Liste meine ungelesenen E-Mails von dieser Woche auf" "Suche nach E-Mails von alice@example.com bezüglich des Projekts" "Sende eine E-Mail an bob@example.com mit dem Betreff 'Hallo' und dem Text 'Hi Bob!'" "Lade den ersten Anhang der E-Mail mit UID 12345 herunter" "Sende eine E-Mail mit dem Anhang report.pdf an team@example.com"
Anforderungen
Python 3.10+ (3.13 empfohlen)
IMAP- und SMTP-Serverzugriff
API-Key für MCP-Authentifizierung
Schnellstart
1. Klonen und Einrichten
git clone https://github.com/pzanna/email_mcp.git
cd email_mcp
python3 -m venv .venv
source .venv/bin/activate # On Windows: .venv\Scripts\activate
pip install -r requirements.txt2. Umgebung konfigurieren
cp .env.example .env
# Edit .env with your credentialsErforderliche Umgebungsvariablen:
# IMAP Configuration
IMAP_HOST=imap.gmail.com
IMAP_PORT=993
IMAP_USER=you@gmail.com
IMAP_PASSWORD=your-app-password
IMAP_SSL=true
# SMTP Configuration
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_USER=you@gmail.com
SMTP_PASSWORD=your-app-password
# SMTP_STARTTLS mode: "none" (auto), "true" (force), "false" (disable)
SMTP_STARTTLS=true
# MCP Server Configuration
MCP_API_KEY=your-secret-api-key-here
MCP_HOST=127.0.0.1
MCP_PORT=8420
MCP_SERVER_NAME=email-mcp
MCP_BASE_URL=http://localhost:8420
# Optional
DEFAULT_FROM_NAME=Your Name
MAX_SEARCH_RESULTS=50
IMAP_POOL_SIZE=3
# Attachment Configuration
EMAIL_BASE_DIR=/path/to/workspace
MAX_ATTACHMENT_SIZE_MB=503. Server ausführen
Lokale Entwicklung (Mac/Linux):
source .venv/bin/activate
uvicorn main:app --host 127.0.0.1 --port 8420Zugriff auf den Server:
MCP-Endpunkt:
http://localhost:8420/mcpGesundheitsprüfung:
http://localhost:8420/healthAPI-Dokumentation:
http://localhost:8420/docs
Testen
# Run all tests
pytest tests/ -v
# Run with coverage
pytest tests/ --cov=. --cov-report=html
# Run specific test file
pytest tests/test_integration.py -v
# Run specific test
pytest tests/test_send.py::test_send_email_plain_text -vAlle 85+ Tests sollten erfolgreich durchlaufen.
Anwendungsbeispiele
Authentifizierung
Alle MCP-Endpunkte erfordern den X-API-Key-Header:
curl -H "X-API-Key: your-secret-api-key-here" \
http://localhost:8420/mcp/toolsVerfügbare Tools auflisten
curl -X GET http://localhost:8420/mcp/tools \
-H "X-API-Key: your-secret-api-key-here"E-Mails suchen
curl -X POST http://localhost:8420/mcp/call \
-H "X-API-Key: your-secret-api-key-here" \
-H "Content-Type: application/json" \
-d '{
"method": "tools/call",
"params": {
"name": "search_emails",
"arguments": {
"from": "user@example.com",
"subject": "invoice",
"since": "2024-01-01",
"limit": 10
}
}
}'E-Mail senden
curl -X POST http://localhost:8420/mcp/call \
-H "X-API-Key: your-secret-api-key-here" \
-H "Content-Type: application/json" \
-d '{
"method": "tools/call",
"params": {
"name": "send_email",
"arguments": {
"to": ["recipient@example.com"],
"subject": "Test Email",
"body": "This is a test email.",
"from_name": "My Name"
}
}
}'E-Mail lesen
curl -X POST http://localhost:8420/mcp/call \
-H "X-API-Key: your-secret-api-key-here" \
-H "Content-Type: application/json" \
-d '{
"method": "tools/call",
"params": {
"name": "read_email",
"arguments": {
"uid": "12345",
"folder": "INBOX"
}
}
}'E-Mail-Anhang herunterladen
curl -X POST http://localhost:8420/mcp/call \
-H "X-API-Key: your-secret-api-key-here" \
-H "Content-Type: application/json" \
-d '{
"method": "tools/call",
"params": {
"name": "download_attachment",
"arguments": {
"uid": "12345",
"attachment_index": 0,
"folder": "INBOX",
"filename_override": "renamed_file.pdf"
}
}
}'Lädt den Anhang in EMAIL_BASE_DIR/attachments/email/downloads/ herunter, mit Sicherheitsvalidierung, um sicherzustellen, dass Dateien innerhalb des Basisverzeichnisses bleiben.
E-Mail mit Anhängen senden
curl -X POST http://localhost:8420/mcp/call \
-H "X-API-Key: your-secret-api-key-here" \
-H "Content-Type: application/json" \
-d '{
"method": "tools/call",
"params": {
"name": "send_email_with_attachments",
"arguments": {
"to": ["recipient@example.com"],
"cc": ["manager@example.com"],
"subject": "Monthly Report",
"body": "Please find the reports attached.",
"body_html": "<p>Please find the <strong>reports</strong> attached.</p>",
"from_name": "John Doe",
"attachment_paths": [
"attachments/email/uploads/report1.pdf",
"attachments/email/uploads/report2.xlsx"
]
}
}
}'Hängt Dateien aus dem Arbeitsverzeichnis an, mit vollständiger Sicherheitsvalidierung und Durchsetzung von Größenbeschränkungen.
Umgang mit Anhängen
Der E-Mail-MCP-Server bietet eine sichere Handhabung von Anhängen mit arbeitsverzeichnisbasierter Dateiverwaltung.
Struktur des Arbeitsverzeichnisses
Alle Anhang-Operationen sind auf das konfigurierte Arbeitsverzeichnis beschränkt:
EMAIL_BASE_DIR/
└── attachments/
└── email/
├── downloads/ # Downloaded email attachments
└── uploads/ # Files ready to attach to outgoing emailsSicherheitsfunktionen
Arbeitsverzeichnis-Einschränkung: Alle Dateioperationen sind auf
EMAIL_BASE_DIRbeschränktSchutz vor Pfad-Traversal: Verhindert den Zugriff auf Dateien außerhalb des Arbeitsverzeichnisses
Dateinamen-Sanitierung: Entfernt gefährliche Zeichen und behandelt reservierte Namen
Größenbeschränkungen: Konfigurierbare Limits pro Datei und für die Gesamtgröße der Anhänge
Dateityp-Validierung: Stellt sicher, dass Anhang-Pfade auf tatsächliche Dateien zeigen
Workflow-Beispiele
Download → Senden-Workflow:
Verwenden Sie
download_attachment, um E-Mail-Anhänge indownloads/zu speichernVerschieben oder kopieren Sie Dateien bei Bedarf nach
uploads/Verwenden Sie
send_email_with_attachments, um Dateien ausuploads/zu senden
Direkter Upload-Workflow:
Legen Sie Dateien im Verzeichnis
uploads/abVerwenden Sie
send_email_with_attachmentsmit arbeitsverzeichnis-relativen Pfaden
Konfiguration
# Workspace directory (required for attachment operations)
EMAIL_BASE_DIR=/path/to/your/workspace
# Maximum attachment size per file (default: 50MB)
MAX_ATTACHMENT_SIZE_MB=50Bereitstellung
Ubuntu-Server mit systemd
Dateien auf den Server kopieren:
scp -r email_mcp user@server:/home/user/Python-Umgebung einrichten:
ssh user@server
cd ~/email_mcp
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txtFür Fernzugriff konfigurieren: Bearbeiten Sie
.env:
MCP_HOST=0.0.0.0 # Allow remote connections
MCP_BASE_URL=http://<your-server-ip>:8420 # Your server IPsystemd-Service installieren:
# Edit email-mcp.service to match your paths
sudo cp email-mcp.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable email-mcp
sudo systemctl start email-mcpStatus prüfen:
sudo systemctl status email-mcp
sudo journalctl -u email-mcp -f # View logsMCP-Client konfigurieren
Fügen Sie dies zu Ihrer MCP-Client-Konfiguration hinzu:
{
"mcpServers": {
"email": {
"url": "http://localhost:8420/mcp",
"headers": {
"X-API-Key": "your-secret-api-key-here"
}
}
}
}Für einen Remote-Server verwenden Sie http://<ihre-server-ip>:8420/mcp (ersetzen Sie dies durch Ihre Server-IP).
Architektur
email_mcp/
├── main.py # FastAPI application entry point (HTTP/SSE mode)
├── mcp_server.py # Stdio MCP entry point (MCPB / Claude Desktop mode)
├── config.py # Pydantic settings (env vars)
├── auth.py # API key authentication middleware
├── imap/
│ ├── client.py # IMAP connection pool
│ ├── read.py # list_folders, read_email
│ ├── search.py # search_emails
│ ├── flags.py # mark_email, move_email
│ └── attachments.py # download_attachment
├── smtp/
│ ├── client.py # send_email, reply_email
│ └── attachments.py # send_email_with_attachments
├── tools/
│ ├── definitions.py # MCP tool schemas
│ ├── handlers.py # Tool request routing
│ └── mcp_routes.py # MCP HTTP endpoints
├── utils/
│ └── attachment_utils.py # Secure file handling utilities
└── tests/ # 85+ unit and integration testsWichtige Designmuster
Verbindungspooling:
asyncio.Semaphorebegrenzt gleichzeitige IMAP-Verbindungen (Standard: 3)Fehlerbehandlung: Strukturierte Exceptions werden auf MCP-Fehlerantworten abgebildet
E-Mail-Threading: In-Reply-To- und References-Header für Antwortketten
Multipart-Nachrichten: Durchlaufen des Nachrichtenbaums zum Extrahieren von Text/HTML/Anhängen
Keine Binärübertragung: Anhänge geben nur Metadaten zurück (Dateiname, Größe, content_type)
Fehlerbehebung
Gmail-spezifische Einrichtung
IMAP aktivieren: Einstellungen → Weiterleitung und POP/IMAP → IMAP aktivieren
App-Passwort: Verwenden Sie ein App-Passwort anstelle Ihres regulären Passworts
Gmail SMTP: Verwenden Sie
smtp.gmail.com:587mit STARTTLS
Verbindungsprobleme
# Test IMAP connection
openssl s_client -connect imap.gmail.com:993
# Test SMTP connection
openssl s_client -starttls smtp -connect smtp.gmail.com:587Häufige Fehler
CONNECTION_TIMEOUT: Überprüfen Sie IMAP_HOST und IMAP_PORTAUTH_FAILED: Überprüfen Sie die Anmeldedaten, verwenden Sie ein App-Passwort für GmailFOLDER_NOT_FOUND: Ordnernamen unterscheiden zwischen Groß- und Kleinschreibung (verwenden Sielist_folderszur Überprüfung)MESSAGE_NOT_FOUND: UID ist möglicherweise ungültig oder die Nachricht wurde gelöscht
SMTPException - Connection already using TLS: Setzen Sie SMTP_STARTTLS=none in .env für den Auto-Modus. Gültige Werte sind none, true und false.
Entwicklung
Projektstruktur
imap/- IMAP-Client und Tools (lesen, suchen, Flags)smtp/- SMTP-Client und Tools (senden, antworten)tools/- MCP-Endpunkt-Handler und Schemastests/- Unit- und Integrationstests
Ausführung in der Entwicklung
# Auto-reload on file changes
uvicorn main:app --reload --host 127.0.0.1 --port 8420
# Debug mode with verbose logging
LOG_LEVEL=DEBUG uvicorn main:app --host 127.0.0.1 --port 8420Neue Tools hinzufügen
Definieren Sie Pydantic-Modelle für Ein-/Ausgabe im entsprechenden Modul
Implementieren Sie die asynchrone Funktion mit Fehlerbehandlung
Fügen Sie das Tool-Schema zu
tools/definitions.pyhinzuBinden Sie den Dispatcher in
tools/mcp_routes.pyeinSchreiben Sie Tests gemäß dem TDD-Ansatz
Lizenz
MIT
Mitwirken
Beiträge sind willkommen! Bitte:
Schreiben Sie Tests für alle neuen Funktionen
Folgen Sie dem bestehenden Code-Stil (black, isort, mypy)
Aktualisieren Sie diese README bei wesentlichen Änderungen
Stellen Sie sicher, dass alle Tests bestehen, bevor Sie PRs einreichen
Support
Für Probleme, Fragen oder Funktionsanfragen öffnen Sie bitte ein Issue auf GitHub.
This server cannot be installed
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
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/pzanna/email_mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server