Skip to main content
Glama
st-designs

MailSyncMCP

by st-designs

MailSyncMCP

Durchsuche, lies und beantworte jeden Account in Apple Mail von Claude aus, ohne ein einziges Passwort herauszugeben.

Funktioniert gleichermaßen mit Gmail, Microsoft 365, iCloud und IMAP mit eigener Domain, weil es das liest, was Mail bereits synchronisiert hat, statt mit jedem Anbieter zu sprechen. Läuft vollständig auf deinem Mac. Nichts wird irgendwohin hochgeladen.

Warum es so funktioniert

Apple Mail synchronisiert bereits jeden Account, den du hast, und verwahrt deren Zugangsdaten bereits in der Keychain, und aktualisiert sie von selbst. Dieser Server liest den lokalen Speicher von Mail und bittet Mail, Nachrichten zu verfassen. Er sieht nie ein Passwort oder einen Token, speichert keinen und löst keine erneute Authentifizierung aus. Einen Account hinzuzufügen bedeutet, ihn in Mail hinzuzufügen; hier ändert sich nichts.

Die Alternative, direkt mit jedem Anbieter zu sprechen, bedeutet ein Google-Cloud-Projekt, eine Azure-App-Registrierung und ein Refresh-Token pro Account. Schlimmer noch: Geschäfts- und Hochschulkonten sind normalerweise so abgesichert, dass eine OAuth-App eines Drittanbieters eine Administrator-Zustimmung benötigt, die oft schlicht verweigert wird. Das zu lesen, was Mail bereits synchronisiert hat, umgeht das alles.

Related MCP server: macos-mail-mcp

Sicherheit

Lesen und Suchen sind unbedenklich. Senden nicht.

  1. Keine Zugangsdaten. Nichts, das auslaufen oder ablaufen kann.

  2. Zweiphasiger Commit. Die prepare_*-Werkzeuge validieren eine Anfrage, erzeugen eine vollständige Vorschau und geben einen Einmal-Token zurück, der nach fünf Minuten abläuft. Sie ändern nichts. commit_action(token) ist das einzige Werkzeug, das handelt, und es nimmt nur einen Token entgegen, sodass die gesendete Nachricht immer die Nachricht ist, die angezeigt wurde.

  3. Client-Berechtigungsabfrage bei commit_action.

  4. Eingrenzung nicht vertrauenswürdiger Inhalte. Nachrichtentexte werden umhüllt und als Daten markiert zurückgegeben. Da das Senden einen Token erfordert, den nur eine gerenderte Vorschau erzeugen kann, kann eine in einer E-Mail versteckte Anweisung nicht dazu führen, dass eine Nachricht gesendet wird.

  5. Auditprotokoll unter ~/.local/share/mailsync/audit.jsonl, append-only.

Der Server spricht nur stdio. Es gibt keinen Listener, keinen Daemon und keinen Timer, sodass er nur handelt, wenn ein Werkzeug aus der Chat-Sitzung aufgerufen wird.

Setze MAILSYNC_READ_ONLY=1, um das Verfassen für eine Sitzung vollständig zu deaktivieren.

Über AppleScript

Jedes Skript in applescript/ ist eine statische Datei, die ihre Werte über argv erhält. Es wird nie Skripttext erzeugt, daher überleben Anführungszeichen, Backslashes, Zeilenumbrüche und AppleScript-Syntax in einer E-Mail als wörtliche Daten. tests/test_applescript_safety.py prüft das gegen böswillige Nutzlasten. Andere Apple-Mail-MCP-Server fügen Nachrichtendaten in den Skriptquelltext ein und verteidigen ihn mit einer Escape-Funktion; dieser hier hat keine Injektionsfläche, die es zu escapen gäbe.

Werkzeuge

Lesen: list_accounts, search_mail, get_message, get_thread, list_attachments, save_attachment, mailbox_stats, open_in_mail, refresh_index

Verfassen: prepare_send, prepare_reply, prepare_forward, list_pending, commit_action

Es gibt bewusst nichts, das E-Mails markiert, verschiebt, archiviert oder löscht. Das Einzige, was dieser Server ändern kann, ist, dass eine neue Nachricht gesendet oder als Entwurf angelegt wird.

Jede zurückgegebene Nachricht trägt eine message://-URL, die aus ihrer RFC-822-Message-ID aufgebaut ist. Ein Klick darauf öffnet die Nachricht in Apple Mail, sodass Antworten im Chat bis zur echten Nachricht zurückverfolgbar bleiben. Nachrichten, die Mail nicht lokal gespeichert hat, haben keine Message-ID und erhalten daher keinen Link.

Chat-Clients bereinigen Link-Ziele anhand einer Zulassungsliste von Schemata (http, https, mailto), daher wird ein message://-Link als toter Text dargestellt statt als etwas, das du anklicken kannst. Das Werkzeug open_in_mail existiert aus diesem Grund: Bitte darum, eine Nachricht zu öffnen, und sie geht direkt zu Mail. Die URL wird trotzdem ausgegeben, damit sie kopiert oder außerhalb des Chats verwendet werden kann.

open_in_mail akzeptiert whole_thread=True, aber Mail öffnet jede Nachricht in einem eigenen Fenster: Es gibt keine skriptbare Thread-Ansicht. set selected messages im Hauptfenster wurde wiederholt getestet und funktioniert unter macOS 26 im Konversationsmodus nicht; es liefert Objekte zurück, die die AppleScript-Brücke nicht zurückkonvertieren kann. get_thread ist der bessere Weg, eine Konversation zu lesen.

Ein Link öffnet immer eine einzelne Nachricht, nicht die Konversation darum herum. Mail registriert nur drei URL-Schemata (mailto, message, mail-pref-pane) und keines davon adressiert einen Thread. Mails eigene Thread-Liste über AppleScript zu steuern, wurde versucht und verworfen: Unter macOS 26 wählt set selected messages entweder die falsche Konversation aus oder meldet eine leere Auswahl, sowohl in einem Gmail-All-Mail-Postfach als auch in einem einfachen INBOX. Statt das auszuliefern, listet get_message den Rest der Konversation mit einem Link pro Nachricht auf, und get_thread rendert den gesamten Austausch in der richtigen Reihenfolge.

Installation

python3 -m venv .venv
.venv/bin/pip install -e .
.venv/bin/python -m mailsync --build-index

Registrieren

Claude Code und Claude for Desktop sind separate Apps mit separaten Konfigurationsdateien. Die Registrierung in der einen bewirkt nichts für die andere:

Oberfläche

Konfigurationsdatei

Claude Code

~/.claude.json, Top-Level mcpServers

Claude for Desktop

~/Library/Application Support/Claude/claude_desktop_config.json

Füge denselben Eintrag zu dem hinzu, was du verwendest, und verweise dabei auf das Python der venv:

{
  "mcpServers": {
    "mailsync": {
      "command": "/absolute/path/to/Apple-Mail-Sync-MCP/.venv/bin/python",
      "args": ["-m", "mailsync"]
    }
  }
}

Da das Paket mit pip install -e . in die venv installiert wird, hängt der Eintrag nicht von einem Arbeitsverzeichnis ab. Beende die App danach und öffne sie erneut.

Ein lokaler Server wie dieser läuft als Kindprozess auf deinem Mac und ist daher nur für Apps verfügbar, die dort laufen. claude.ai in einem Browser kann ihn nicht erreichen.

Jede Oberfläche startet einen eigenen Betriebssystemprozess; stdio kann keinen gemeinsamen Prozess teilen. Das führt nicht zu einer getrennten Einrichtung, weil beide Einträge dasselbe installierte Paket ausführen und jeder Prozess denselben Index unter ~/.local/share/mailsync/mailsync.db liest und schreibt. Bearbeite den Code einmal, und beide übernehmen ihn beim nächsten Neustart. Paralleler Zugriff ist sicher: Der Index läuft im WAL-Modus mit einem Busy-Timeout, getestet mit fünf Lesern und zwei gleichzeitigen Neuaufbauten.

Vollzugriff auf die Festplatte

~/Library/Mail ist durch den Vollzugriff auf die Festplatte geschützt, und ein MCP-Server erbt die Berechtigung der App, die ihn gestartet hat. Claude Code und Claude for Desktop sind getrennte TCC-Clients, daher kann einer funktionieren, während der andere es nicht kann. Erteile den Zugriff unter Systemeinstellungen > Datenschutz & Sicherheit > Vollzugriff auf die Festplatte und beende die App danach vollständig und öffne sie erneut.

Ohne ihn funktionieren Suche und Lesen weiterhin über den lokalen Index, der außerhalb des geschützten Bereichs liegt. Nur refresh_index schlägt fehl, sodass die Daten veralten. Das Werkzeug sagt das deutlich, statt auf unklare Weise zu scheitern.

Das Verfassen benötigt zusätzlich eine laufende Mail.app und die Automatisierungs-Berechtigung, nach der macOS bei der ersten Verwendung fragt.

Unvollständige Nachrichten

Mail behält von Nachrichten, die es nicht vollständig heruntergeladen hat, nur Kopien mit Kopfzeilen: etwa ein Viertel davon in einem typischen Postfach. Diese bleiben über Absender, Betreff, Datum und den Vorschautext durchsuchbar, den Mail gespeichert hat. get_message akzeptiert fetch_if_partial=True, um Mail um die vollständige Quelle zu bitten, wodurch es den Textkörper vom Server holt. Dafür muss Mail laufen, daher ist es opt-in statt automatisch.

So funktioniert der Index

~/.local/share/mailsync/mailsync.db enthält einen FTS5-Index über Nachrichtentexte, die aus ~/Library/Mail/V10/**/*.emlx extrahiert wurden, verknüpft mit Mails eigenem Envelope-Index. Mails Datenbank wird vor dem Lesen beiseitekopiert und niemals beschreibbar geöffnet oder gesperrt.

Ein erster Aufbau dauert etwa eine Minute für 12.800 Nachrichten. Danach dauert eine Aktualisierung ein bis zwei Sekunden, da nur Dateien neu geparst werden, deren mtime sich geändert hat. Suchen liefern Ergebnisse in einstelligen bis niedrigen zweistelligen Millisekunden.

Die Textkörper sind für die etwa 70 Prozent der Nachrichten durchsuchbar, die Mail vollständig heruntergeladen hat. Der Rest ist über Absender, Betreff, Datum und Mails eigenen Vorschautext durchsuchbar, und get_message fällt auf diese zurück. Die Abdeckung steigt von selbst, während Mail synchronisiert.

Wartung

Das Schema von Apples Envelope Index ist undokumentiert und kann sich in einem macOS-Update ändern. All das ist auf mailsync/index.py beschränkt, und der Textindex kann jederzeit mit --build-index --full aus den .emlx-Dateien neu aufgebaut werden.

Install Server
A
license - permissive license
A
quality
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (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
    A
    quality
    A
    maintenance
    MCP server that gives Claude and other MCP hosts full access to Mail.app on macOS — search, read, send, reply, flag, move, and more across all accounts configured in Mail.app.
    24
    89
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    An MCP server for Apple Mail that enables Claude to read, search, manage, and compose emails via AppleScript.
    20
    383
    1
    MIT
  • F
    license
    B
    quality
    B
    maintenance
    MCP server that connects Claude to iCloud Mail, enabling reading, searching, sending, and organizing emails via IMAP/SMTP.
    14
  • A
    license
    A
    quality
    A
    maintenance
    An MCP server that provides programmatic access to Apple Mail, enabling AI assistants like Claude to read, send, search, and manage emails on macOS.
    25
    MIT

View all related MCP servers

Related MCP Connectors

  • Read, search, send, organize, draft and schedule email across your inboxes from any MCP client.

  • Hosted email MCP for AI agents with inboxes, send/receive, memory, recovery, and credits.

  • Search, read, and write your Apple Notes from ChatGPT/Claude via a local Mac agent + MCP relay.

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/st-designs/Apple-Mail-Sync-MCP'

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