IMAP MCP
Enables access to Gmail mailboxes via IMAP/SMTP for reading, searching, drafting, and sending emails when allowed.
Enables access to GMX mailboxes via IMAP/SMTP for reading, searching, drafting, and sending emails when allowed.
Enables access to Google Workspace mailboxes via IMAP/SMTP for reading, searching, drafting, and sending emails when allowed.
Enables access to Hetzner mailboxes via IMAP/SMTP for reading, searching, drafting, and sending emails when allowed.
Enables access to iCloud Mail via IMAP/SMTP for reading, searching, drafting, and sending emails when allowed.
Enables access to IONOS mailboxes via IMAP/SMTP for reading, searching, drafting, and sending emails when allowed.
Enables access to mailbox.org accounts via IMAP/SMTP for reading, searching, drafting, and sending emails when allowed.
Enables access to netcup mailboxes via IMAP/SMTP for reading, searching, drafting, and sending emails when allowed.
Enables access to WEB.DE mailboxes via IMAP/SMTP for reading, searching, drafting, and sending emails when allowed.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@IMAP MCPWhat unread emails are in my inbox today?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
IMAP MCP
Lokaler MCP-Server, der Claude Zugriff auf beliebige IMAP-Postfächer gibt und E-Mails über SMTP versendet. Läuft komplett auf deinem Rechner — Zugangsdaten und Mails verlassen die Maschine nur Richtung deines Mailservers.
Es gibt zwei Wege:
Für wen | alle, die einfach ihr Postfach anbinden wollen | Entwicklung, mehr als zwei Postfächer, Linux, Claude Code |
Postfächer | bis zu zwei | beliebig viele |
Voraussetzungen | nur Claude Desktop (macOS oder Windows) | Node ≥ 18.17, Terminal |
Installation | Datei doppelklicken, Adresse + Passwort eintippen | klonen, bauen, JSON konfigurieren |
Server-Einstellungen | automatisch erkannt | automatisch oder von Hand |
Passwort liegt | im Schlüsselbund des Systems | im Klartext in |
Weg A: Fertiges Bundle
Claude Desktop bringt auf macOS und Windows eine eigene Node-Laufzeit mit. Als .mcpb-Bundle verpackt
braucht der Server weder Node noch Terminal noch Git.
Installieren
imap-mail.mcpbherunterladen (rund 1 MB, dieselbe Datei für macOS und Windows).Die Datei doppelklicken — alternativ ins Claude-Desktop-Fenster ziehen oder unter Einstellungen → Erweiterungen → Erweiterte Einstellungen → Erweiterung installieren auswählen.
Im Installationsdialog E-Mail-Adresse und Passwort eintragen. Alle anderen Felder sind optional.
Installieren, fertig. Kein Neustart nötig.
Erster Test im Chat: „Teste die Mail-Verbindung".
Das Bundle ist nicht signiert. Claude Desktop kann deshalb beim Installieren auf einen unbekannten Herausgeber hinweisen.
Was im Dialog abgefragt wird
Feld | |
E-Mail-Adresse | Pflichtfeld |
Passwort | Pflichtfeld. Landet im Schlüsselbund (macOS) bzw. der Anmeldeinformationsverwaltung (Windows), nicht in einer Datei |
Senden erlauben | Standardmäßig aus — Claude kann dann lesen und Entwürfe anlegen, aber nichts verschicken |
Absendername | optional |
Zweites Postfach: Adresse, Passwort, Senden, Absendername | optional — leer lassen, wenn nur ein Postfach gebraucht wird |
Server online nachschlagen | siehe Server-Erkennung |
IMAP-/SMTP-Server (je Postfach) | leer lassen, nur nötig, wenn die Erkennung scheitert |
Anhänge landen im Downloads-Ordner.
Related MCP server: IMAP MCP Server
Vor der Einrichtung
Die meisten Probleme entstehen nicht im Connector, sondern beim Mail-Anbieter:
Gmail, iCloud, Yahoo: Das normale Passwort wird abgelehnt. Nötig ist ein App-Passwort aus den Kontoeinstellungen, bei Gmail zusätzlich aktivierte Zwei-Faktor-Anmeldung.
GMX, Web.de: IMAP ist standardmäßig aus und muss im Webmail unter Einstellungen freigeschaltet werden.
Microsoft 365 / Outlook: Viele Organisationen haben die Anmeldung per Passwort abgeschaltet. Dann lässt sich das Postfach mit diesem Connector nicht anbinden (siehe Einschränkungen).
Eigene Domain: Funktioniert in der Regel ohne weitere Angaben, weil der Anbieter über den MX-Eintrag der Domain erkannt wird.
Wer vorab wissen will, ob eine Adresse erkannt wird, kann Claude mit mail_detect_provider fragen —
das braucht weder Passwort noch Anmeldung.
Wo der Anbieter App-Passwörter anbietet, lohnen sie sich auch ohne Pflicht: Sie lassen sich einzeln widerrufen, ohne das Postfach-Passwort zu ändern.
Erste Schritte
Gute erste Fragen, die nur lesen und nichts verändern:
„Was ist heute ungelesen reingekommen?"
„Fass mir den längsten Mailverlauf dieser Woche zusammen."
„Von welchen Newslettern bekomme ich am meisten Mails?"
Senden bleibt so lange aus, bis es im Dialog freigegeben wird. Wer den Versand ausprobieren will, schickt die erste Testmail am besten an die eigene Adresse.
Zwei Postfächer
Im Dialog lassen sich bis zu zwei Postfächer einrichten, auch bei verschiedenen Anbietern. Jedes wird getrennt erkannt, und Senden wird je Postfach einzeln freigegeben: Man kann etwa das private Postfach nur lesbar lassen und nur im geschäftlichen den Versand erlauben.
Sobald zwei eingerichtet sind, nennt Claude das Postfach bei jedem Zugriff über seine Adresse. Fehlt diese Angabe, kommt eine Rückfrage statt einer stillen Annahme — das zählt vor allem beim Senden, damit keine Mail vom falschen Absender rausgeht. Im Chat reicht es, das Postfach beim Namen zu nennen: „Was ist heute im Geschäftspostfach reingekommen?"
Mehr als zwei gehen über das Bundle nicht, weil das Manifest-Format keine beliebig langen Feldlisten
kennt. Über config.json (Weg B) ist die Zahl unbegrenzt.
Wie die Server-Erkennung funktioniert
Niemand muss seinen IMAP-Server kennen. Der Connector probiert der Reihe nach:
Eingebaute Anbieterliste — Gmail, GMX, Web.de, T-Online, Posteo, mailbox.org, iCloud, Yahoo, Outlook und weitere, erkannt an der Domain der Adresse.
MX-Eintrag der Domain — der wichtigste Fall bei eigenen Domains.
info@meinefirma.demit einem MX-Eintrag aufsmtpin.rzone.dewird als Strato-Postfach erkannt. Deckt Strato, IONOS, All-Inkl, Hetzner, netcup, domainFACTORY, united-domains, Google Workspace und Microsoft 365 ab.Mozillas Autoconfig-Datenbank — dieselbe Quelle, aus der Thunderbird seine Einstellungen zieht.
Raten aus der Domain (
imap.<domain>), klar als unbestätigt gekennzeichnet.
Schritte 2 und 3 brauchen Netzwerk und fragen dabei nur die Domain ab, nie die Adresse oder das Passwort. Wer das nicht möchte, schaltet „Server online nachschlagen" aus; dann greift nur die eingebaute Liste, und seltenere Anbieter müssen von Hand eingetragen werden.
Aktualisieren und entfernen
Update: Unter Einstellungen → Erweiterungen die alte Version deinstallieren, dann die neue Datei installieren. Die Zugangsdaten werden dabei neu abgefragt.
Entfernen: Ebenfalls über Einstellungen → Erweiterungen. Die Passwörter werden dabei aus dem Schlüsselbund gelöscht, es bleiben keine Zugangsdaten auf dem Rechner zurück.
Weg B: Aus dem Quellcode
1. Installieren
git clone https://github.com/abconsultdev/imap-mcp.git
cd imap-mcp && npm install && npm run build2. Konfigurieren
config.example.json nach config.json kopieren und ausfüllen. Die Datei enthält Passwörter im
Klartext und steht deshalb in .gitignore.
{
"accounts": [
{
"name": "hauptpostfach",
"email": "info@example.com",
"displayName": "Dein Name",
"allowSend": true,
"imap": { "host": "imap.example.com", "port": 993, "secure": true, "user": "info@example.com", "pass": "..." },
"smtp": { "host": "smtp.example.com", "port": 465, "secure": true, "user": "info@example.com", "pass": "..." }
}
]
}Feld | Bedeutung |
| Kurzname, den du im Chat benutzt („lies die Mails im hauptpostfach") |
| Absendername im From-Header |
|
|
|
|
| nur für interne Server mit selbstsigniertem Zertifikat |
| IMAP4rev2 nutzen, falls der Server es anbietet. Standard aus, siehe Fehlersuche |
| optional, überschreibt die Auto-Erkennung von Gesendet/Entwürfe/Papierkorb |
| (oberste Ebene) Ordner für Anhänge, Standard |
Mehrere Postfächer: einfach weitere Objekte in accounts eintragen. Bei mehr als einem Account
verlangt jedes Tool den Parameter account.
Gängige Server
Anbieter | IMAP | SMTP | Hinweis |
Gmail / Workspace |
|
| App-Passwort nötig (2FA erforderlich) |
Microsoft 365 / Outlook |
|
| Passwort-Anmeldung oft gesperrt, siehe Einschränkungen |
IONOS |
|
| |
Strato |
|
| |
All-Inkl |
|
| |
mailbox.org |
|
| eigenes App-Passwort empfohlen |
GMX / Web.de |
|
| IMAP muss in den Einstellungen freigeschaltet sein |
Alternative: Umgebungsvariablen
Ohne config.json genügen MAIL_EMAIL und MAIL_PASSWORD für einen Account — die Server werden dann
automatisch erkannt. Das ist auch der Weg, den das .mcpb-Bundle nutzt. Umgebungsvariablen haben
Vorrang vor config.json.
Variable | |
| Pflicht |
|
|
| Absendername |
| überschreiben die Erkennung |
| Ports, Standard 993 / 465 |
| dasselbe für ein zweites Postfach |
|
|
| Ordner für Anhänge, Standard |
| abweichender Pfad zur |
Werte, die noch einen unersetzten Platzhalter der Form ${...} enthalten, werden als nicht gesetzt
behandelt. Die älteren Namen IMAP_HOST, IMAP_USER, IMAP_PASS, IMAP_PORT, SMTP_HOST,
SMTP_PORT, SMTP_USER, SMTP_PASS funktionieren weiterhin.
3. In Claude eintragen
Der Server spricht MCP über stdio. In Claude Desktop unter Einstellungen → Entwickler → Konfiguration bearbeiten eintragen — der Pfad muss absolut sein:
{
"mcpServers": {
"imap": {
"command": "node",
"args": ["/absoluter/pfad/zu/imap-mcp/dist/index.js"]
}
}
}Die Datei liegt unter %APPDATA%\Claude\claude_desktop_config.json (Windows) bzw.
~/Library/Application Support/Claude/claude_desktop_config.json (macOS). Unter Windows werden
Backslashes im Pfad verdoppelt ("C:\\Users\\...\\dist\\index.js") oder durch / ersetzt; unter
macOS wird ~ nicht aufgelöst. Startet der Server nicht, weil Claude Desktop Node nicht findet
(typisch bei nvm oder Homebrew), statt "node" den vollen Pfad aus which node eintragen.
Danach Claude Desktop komplett beenden und neu starten — MCP-Server werden nur beim Start geladen.
In Claude Code:
claude mcp add imap --scope user -- node /absoluter/pfad/zu/imap-mcp/dist/index.jsErster Test im Chat: „Teste die Mail-Verbindung" → ruft mail_test_connection auf und meldet IMAP und
SMTP getrennt.
Mehrere Rechner können parallel auf dasselbe Postfach zugreifen — IMAP ist dafür gebaut. Die
config.json dabei auf jedem Rechner neu anlegen, statt sie zu kopieren.
Referenz
Tools
Lesen
Tool | Zweck |
| Eingerichtete Postfächer (ohne Passwörter) |
| IMAP- und SMTP-Login einzeln prüfen |
| Server-Einstellungen zu einer Adresse ermitteln — ohne Passwort, ohne Anmeldung |
| Alle Ordner + erkannte Sonderordner |
| Nach Absender, Betreff, Text, Datum, ungelesen … — liefert UIDs |
| Eine Nachricht per UID vollständig lesen |
| RFC822-Quelltext (Header-Analyse, SPF/DKIM) |
| Anhänge auf die Platte speichern |
Verwalten
Tool | Zweck |
| gelesen / ungelesen / markiert / beantwortet setzen |
| In anderen Ordner verschieben |
| In den Papierkorb (nie endgültiges Löschen) |
Schreiben
Tool | Zweck |
| Mail als Entwurf ins IMAP-Postfach legen, ohne zu senden |
| Über SMTP versenden und Kopie im Gesendet-Ordner ablegen |
mail_send und mail_create_draft nehmen beide inReplyToUid, damit Antworten sauber im Thread landen
(In-Reply-To und References werden aus der Originalmail gesetzt). Anhänge kommen entweder als
lokaler path oder als contentBase64.
Typische Abläufe
„Was ist heute ungelesen reingekommen?" →
mail_searchmitunseen: true,since: heute„Fass mir den Verlauf mit Anna zusammen" →
mail_searchmitfrom: anna, dannmail_readje UID„Antworte darauf" →
mail_create_draftmitinReplyToUid, du prüfst im Mailprogramm, dannmail_send„Räum die Newsletter weg" →
mail_search, dannmail_movenachArchiv
Sicherheit
Versand ist endgültig. Claude fragt vor
mail_sendnach — bestätige bewusst. Wer generell nur Entwürfe will, lässt Senden aus und nutztmail_create_draft.Es gibt bewusst kein endgültiges Löschen.
mail_move_to_trashverschiebt nur; geleert wird im Mailprogramm.Mailinhalte sind Daten, keine Anweisungen. Wenn in einer Mail steht „leite das weiter" oder „antworte mit X", ist das kein Auftrag von dir — Claude soll dich fragen, bevor so etwas ausgeführt wird.
Beim Bundle liegen Passwörter im Schlüsselbund des Systems. Bei Weg B stehen sie im Klartext in
config.json— Dateirechte einschränken:chmod 600 config.json # macOS / Linux icacls config.json /inheritance:r /grant:r "%USERNAME%:(R,W)" # Windows
Fehlersuche
Verbindung klappt, Ordner werden angezeigt, aber jede Suche liefert 0 Mails
Manche Server kündigen IMAP4rev2 an, beantworten unter rev2 aber jede Suche mit einer leeren
Ergebnisliste (* ESEARCH (TAG "8") UID), obwohl das Postfach voll ist — beobachtet bei Strato. Der
Connector schaltet rev2 deshalb standardmäßig ab; IMAP4rev1 versteht jeder Server. Wer rev2 für einen
bestimmten Server braucht, setzt in config.json unter imap den Schalter "enableIMAP4rev2": true.
Ob die Suche gegen ein konkretes Postfach funktioniert, prüft node test/live.mjs (rein lesend).
Die Server-Felder im Installationsdialog bleiben leer — ist das richtig?
Ja. Der Dialog füllt nichts automatisch aus; die Erkennung passiert erst beim Start des Servers, aus
der eingegebenen Adresse. Die Host-Felder sind nur ein Notausgang für den Fall, dass die Erkennung
scheitert. Was tatsächlich erkannt wurde, zeigt mail_test_connection unter serverErkanntVia.
Authentication failed / LOGIN failed
Passwort falsch oder der Anbieter verlangt ein App-Passwort (Gmail, iCloud, Yahoo) — bei GMX und Web.de ist IMAP zusätzlich standardmäßig deaktiviert und muss im Webmail freigeschaltet werden.
Senden schlägt mit „Senden ist deaktiviert" fehl
Beabsichtigt. Im Installationsdialog den Haken „Senden erlauben" setzen, in config.json
"allowSend": true, per Umgebungsvariable MAIL_ALLOW_SEND=true.
Falscher Server erkannt
mail_detect_provider mit der Adresse aufrufen — die Antwort zeigt, aus welcher Quelle die Werte
stammen. Notfalls IMAP- und SMTP-Server im Installationsdialog von Hand eintragen.
getaddrinfo ENOTFOUND ${user_config.imap_host}
Tritt nur mit Versionen vor 1.0.1 auf. Alte Erweiterung deinstallieren, aktuelle installieren.
Einschränkungen
Nur Passwort-Authentifizierung. Kein OAuth2/XOAUTH2. Postfächer, bei denen der Anbieter die Passwort-Anmeldung abgeschaltet hat (viele Microsoft-365-Organisationen), lassen sich damit nicht anbinden.
Die Volltextsuche macht der IMAP-Server, nicht dieser Connector — wie gut
body/textfunktioniert, hängt vom Anbieter ab.mail_searchholt Kopfdaten für bis zu 200 Treffer pro Aufruf.Kein Push/IDLE — Claude sieht neue Mails, wenn es aktiv nachschaut.
Entwicklung
npm run build # nach dist/ kompilieren (Weg B)
npm run watch # während der Entwicklung
npm run bundle # build/imap-mail.mcpb bauen, inkl. aller Prüfungen (Weg A)
node test/unit.mjs # Helfer + MailComposer (ohne Netzwerk)
node test/detect.mjs # Anbieter-Erkennung: Liste, MX-Muster, Autoconfig
node test/env-matrix.mjs # Konfiguration über Umgebungsvariablen, 15 Fälle
node test/live.mjs # gegen das echte Postfach aus config.json, rein lesendDas Bundle wird mit esbuild zu einer einzigen JavaScript-Datei gebündelt: vier Dateien statt rund 5000, knapp 1 MB statt 6 MB. Ohne Bündelung lägen Typdeklarationen, Sourcemaps und die HTTP-Transporte des MCP-SDK im Bundle, die ein stdio-Server nie lädt.
Bündeln kann dynamisch nachgeladene Module zerreißen — iconv-lite lädt Zeichensatz-Tabellen zur
Laufzeit, mailparser und MailComposer ziehen Module über require() herein. Ein solcher Bruch fiele
sonst erst beim ersten Umlaut in einer echten Mail auf. Deshalb prüft npm run bundle sein eigenes
Ergebnis, bevor gepackt wird: Zeichensatz-Umwandlung, Anhänge, Mail-Aufbau und die komplette
Konfigurationsmatrix laufen gegen die gebündelte Datei (test/bundle-libs.ts wird dafür eigens
mitgebündelt). Schlägt eine Prüfung fehl, entsteht kein .mcpb. Mit npm run bundle -- --skip-checks
lässt sich das überspringen.
Der Live-Test ist der einzige, der einen echten Mailserver fragt. Er vergleicht, was der Server laut
STATUS enthält, mit dem, was die Suche findet — eine erfolgreiche Verbindung und eine vollständige
Ordnerliste allein beweisen nicht, dass die Suche funktioniert. Vor einer neuen Version lohnt es sich,
ihn mit Postfächern der wichtigsten Anbieter laufen zu lassen. Die MX-Erkennung einer eigenen Domain
lässt sich live mit TEST_MX_EMAIL=name@domain.de node test/detect.mjs prüfen.
IMAP-Verbindungen werden pro Account wiederverwendet und nach 5 Minuten Leerlauf geschlossen.
Versionen
Version | |
1.1.0 | Zweites Postfach im Installationsdialog, Senden je Postfach getrennt |
1.0.2 | IMAP4rev2 standardmäßig aus (leere Suchergebnisse bei Strato); neueste Mails ohne Suche |
1.0.1 | Leer gelassene Dialogfelder kamen als Platzhalter an und verhinderten die Server-Erkennung |
1.0.0 | Erste Version |
Lizenz
MIT — siehe LICENSE.
Available Tools
13 toolsmail_create_draftEntwurf anlegenA
Erstellt eine E-Mail und legt sie als Entwurf im IMAP-Postfach ab, ohne sie zu versenden. Der sichere Weg, wenn der Nutzer die Mail vorher im eigenen Mailprogramm prüfen will.
| Name | Required | Description | Default |
|---|---|---|---|
| cc | No | ||
| to | Yes | Empfänger-Adressen. | |
| bcc | No | ||
| html | No | Nachricht als HTML. Ohne text wird daraus eine Textversion erzeugt. | |
| text | No | Nachricht als reiner Text. | |
| account | No | E-Mail-Adresse (oder Name) des Postfachs. Weglassen, wenn nur eines eingerichtet ist. Bei mehreren Pflicht - mail_list_accounts zeigt die verfügbaren. Beim Senden immer das Postfach wählen, von dem der Nutzer absenden will, und im Zweifel nachfragen. | |
| replyTo | No | Abweichende Antwortadresse. | |
| subject | Yes | Betreff. | |
| attachments | No | ||
| inReplyToUid | No | UID der Nachricht, auf die geantwortet wird - setzt In-Reply-To/References für korrektes Threading. | |
| inReplyToMailbox | No | Ordner der Nachricht aus inReplyToUid. | INBOX |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the critical behavior of not sending the email, which is not obvious from the name alone. It also labels it as 'safe', implying non-destructive behavior. Annotations only provide openWorldHint, which is vague and not contradicted; the description adds value by clarifying the draft creation and non-sending nature.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no wasted words. The core action and the key distinction (not sending) are front-loaded, making it easy for an agent to quickly understand the tool's purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 11 parameters but a schema covering most of them, the description provides sufficient context: what it does, when to use it, and the critical 'not sending' aspect. It lacks explicit mention of return values, but no output schema exists, and the description is otherwise complete for selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 73%, so most parameters are already documented. The description adds no parameter-specific meaning beyond what the schema provides; it only explains the overall purpose. Since coverage is moderate and the description does not compensate for undocumented parameters, a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'erstellt' (creates) and the resource 'E-Mail als Entwurf' (email as draft), and explicitly distinguishes it from sending by adding 'ohne sie zu versenden' (without sending). This differentiates it from mail_send among siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a usage condition: 'Der sichere Weg, wenn der Nutzer die Mail vorher im eigenen Mailprogramm prüfen will' (the safe way when the user wants to check the mail in their own mail program). This implies when to use it versus alternatives like mail_send, though it does not explicitly name the alternative or exclude other conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mail_detect_providerMail-Server einer Adresse ermittelnARead-only
Ermittelt zu einer beliebigen E-Mail-Adresse die passenden IMAP- und SMTP-Einstellungen, ohne sich anzumelden. Nützlich, wenn jemand seinen Anbieter nicht kennt oder die automatische Erkennung danebenlag. Es wird kein Passwort benötigt und keine Verbindung zum Postfach aufgebaut.
| Name | Required | Description | Default |
|---|---|---|---|
| Yes | E-Mail-Adresse, z.B. name@example.com | ||
| online | No | MX-Eintrag und Thunderbird-Autoconfig mitbenutzen. Dabei wird die Domain (nicht die Adresse) abgefragt. false = nur eingebaute Liste. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint. The description adds meaningful behavioral context: it does not log in, requires no password, and does not connect to the mailbox. This goes beyond the annotations and reassures the agent about safety and network usage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences, front-loaded with the primary purpose, followed by usage context and a safety note. No redundant or extraneous content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only detection tool with no output schema, the description covers the essential behavioral aspects: what it does, when to use it, and that it's non-invasive. It could mention the return format (e.g., structured settings), but that's a minor gap given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema covers 100% of parameters with descriptions for both 'email' and 'online'. The description does not add any parameter-specific information beyond what the schema provides, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Ermittelt' (determines) and the resource: IMAP/SMTP settings for an email address. This is specific and immediately distinguishes it from sibling tools, which all perform mailbox operations (move, search, send, etc.) rather than provider detection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides explicit context on when to use the tool: when the user doesn't know their provider or when automatic detection failed. It doesn't explicitly name alternatives or exclusions, but the sibling list makes it obvious this is the only detection tool, so the guidance is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mail_get_rawRohe Mail-QuelleBRead-only
Gibt die vollständige RFC822-Quelle einer Nachricht zurück - nützlich zur Analyse von Kopfzeilen, SPF/DKIM oder Weiterleitungen.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | Yes | ||
| account | No | E-Mail-Adresse (oder Name) des Postfachs. Weglassen, wenn nur eines eingerichtet ist. Bei mehreren Pflicht - mail_list_accounts zeigt die verfügbaren. Beim Senden immer das Postfach wählen, von dem der Nutzer absenden will, und im Zweifel nachfragen. | |
| mailbox | No | IMAP-Ordner, z.B. "INBOX" oder "INBOX/Projekte". | INBOX |
| maxChars | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and openWorldHint=true, so the description is consistent with a safe read operation. It adds the purpose but does not disclose the maxChars truncation behavior or the need for a valid uid. Since annotations cover the safety profile, the description adds modest value.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence that states the main action and purpose without fluff. Efficient and readable, though it omits some necessary details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description's mention of 'RFC822-Quelle' gives a good hint of the return value. However, it does not explain truncation via maxChars or how to obtain the uid (e.g., from mail_search). For a read-only tool with annotations covering safety, it is adequate but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50% with account and mailbox described, but uid and maxChars lack descriptions. The description does not compensate for these missing parameter semantics – it never explains how to identify the message (uid) or the effect of maxChars. An agent would have to infer these from the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Gibt die vollständige RFC822-Quelle einer Nachricht zurück' (returns the full RFC822 source). Mentions concrete use cases (header analysis, SPF/DKIM, forwarding). Does not explicitly differentiate from sibling mail_read, but the raw-vs-parsed distinction is implicitly clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides a clear context for when to use it (analyzing headers, SPF/DKIM, forwarding) but does not explicitly compare to alternatives like mail_read or state when not to use it. No mention of the parsed-message alternative or exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mail_list_accountsMail-Accounts auflistenARead-only
Listet die konfigurierten Mail-Accounts mit Servern und Sende-Berechtigung auf. Passwörter werden nie ausgegeben.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already signals a safe read operation, lowering the burden. The description adds valuable context beyond the annotation: it specifies the exact information returned (servers, send permission) and guarantees that passwords are never exposed. This is useful behavioral disclosure without contradicting the annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, well-structured sentence that leads with the action and resource, then adds essential detail and a security guarantee. Every word contributes meaning; there is no redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only listing tool with no parameters and an existing readOnlyHint annotation, the description fully covers what an agent needs to know: what it lists, what fields are included, and that passwords are never exposed. The lack of an output schema is acceptable for such a simple operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline is 4 per the rubric. The description correctly focuses on what the tool returns rather than on parameter details, which are irrelevant here. No additional parameter information is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Listet' = lists) with a clear resource ('Mail-Accounts') and adds detail about the included fields (servers, send permission) and an explicit security note (passwords never output). This clearly distinguishes it from sibling tools like mail_list_mailboxes (which lists mailboxes, not accounts) and other operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for listing configured accounts, but it does not explicitly mention when to use this tool versus alternatives such as mail_list_mailboxes or mail_test_connection. No exclusions or alternative conditions are stated, so the guidance is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mail_list_mailboxesOrdner auflistenARead-only
Listet alle IMAP-Ordner eines Accounts inkl. Sonderrollen (Gesendet, Entwürfe, Papierkorb, Spam).
| Name | Required | Description | Default |
|---|---|---|---|
| account | No | E-Mail-Adresse (oder Name) des Postfachs. Weglassen, wenn nur eines eingerichtet ist. Bei mehreren Pflicht - mail_list_accounts zeigt die verfügbaren. Beim Senden immer das Postfach wählen, von dem der Nutzer absenden will, und im Zweifel nachfragen. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint and openWorldHint annotations already cover the safety and world-openness profile. The description adds useful detail that the listing includes special roles (Sent, Drafts, Trash, Spam), but it does not disclose return format or pagination behavior. That is acceptable given the annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single compact sentence that front-loads the action and resource, then adds the key nuance about special roles in a parenthetical. There is no redundancy or wasted wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity tool with one optional parameter and readOnlyHint/openWorldHint annotations, the description is largely complete. It clearly states what is listed and what folder types are included. It could have mentioned the return shape or path formatting, but the omission is minor given the simplicity of the operation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 100% coverage for the single 'account' parameter, including optionality and a cross-reference to mail_list_accounts. The tool description itself adds no parameter-level detail, but the schema already provides the necessary semantics, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Listet') and a clear resource ('alle IMAP-Ordner eines Accounts'), and further specifies scope by naming special roles (Gesendet, Entwürfe, Papierkorb, Spam). This distinguishes it from account-level tools like mail_list_accounts and message-level tools like mail_search or mail_read.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The usage context is implied: an agent should call this when it needs to enumerate all IMAP folders of an account. However, it does not explicitly state when not to use it or mention alternatives such as mail_list_accounts for account enumeration or mail_search for message lookup.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mail_moveMails verschiebenA
Verschiebt Nachrichten in einen anderen IMAP-Ordner des gleichen Accounts.
| Name | Required | Description | Default |
|---|---|---|---|
| uids | Yes | ||
| account | No | E-Mail-Adresse (oder Name) des Postfachs. Weglassen, wenn nur eines eingerichtet ist. Bei mehreren Pflicht - mail_list_accounts zeigt die verfügbaren. Beim Senden immer das Postfach wählen, von dem der Nutzer absenden will, und im Zweifel nachfragen. | |
| mailbox | No | IMAP-Ordner, z.B. "INBOX" oder "INBOX/Projekte". | INBOX |
| targetMailbox | Yes | Zielordner, z.B. "Archiv". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only include openWorldHint, so the description carries most of the behavioral disclosure burden. It adds the same-account constraint and specifies the destination folder type, but does not mention side effects such as source message removal, target mailbox existence requirements, or failure behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no redundant content. Every word contributes to the core meaning, making it easy to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple 4-parameter move operation, the description plus schema is minimally sufficient to make a correct call. However, it lacks usage differentiation from mail_move_to_trash and does not disclose behavioral caveats, which matters given the absence of a safety annotation and output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already describes account, mailbox, and targetMailbox; uids is self-explanatory as an array of message identifiers. The description itself adds no parameter-level detail, but with 75% schema coverage the structured fields carry the load adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Verschiebt') and resource ('Nachrichten') with a clear destination ('in einen anderen IMAP-Ordner des gleichen Accounts'). This clearly states what the tool does and distinguishes it from siblings like mail_move_to_trash by emphasizing a general folder within the same account.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives such as mail_move_to_trash. It only defines the operation itself, leaving the agent to infer selection criteria from the tool name and sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mail_move_to_trashIn den PapierkorbA
Verschiebt Nachrichten in den Papierkorb. Löscht nie endgültig - zum endgültigen Entfernen den Papierkorb im Mailprogramm leeren.
| Name | Required | Description | Default |
|---|---|---|---|
| uids | Yes | ||
| account | No | E-Mail-Adresse (oder Name) des Postfachs. Weglassen, wenn nur eines eingerichtet ist. Bei mehreren Pflicht - mail_list_accounts zeigt die verfügbaren. Beim Senden immer das Postfach wählen, von dem der Nutzer absenden will, und im Zweifel nachfragen. | |
| mailbox | No | IMAP-Ordner, z.B. "INBOX" oder "INBOX/Projekte". | INBOX |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explicitly discloses that the tool never permanently deletes messages and that permanent removal requires emptying the trash in the mail program. This adds meaningful behavioral context beyond the openWorldHint annotation, clarifying the non-destructive nature of the operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences with no wasted words. The core action is front-loaded, and the important caveat about permanent deletion follows immediately. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple move-to-trash tool, the description plus schema is mostly sufficient: it identifies the action, the target folder, and the non-destructive behavior. It could benefit from mentioning the alternative mail_move for other destinations, but this is not critical for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds no parameter-level meaning. The schema covers account and mailbox with descriptions, but the required 'uids' parameter is undocumented in both the schema and the description. With schema description coverage at 67%, the description should compensate for the missing uids explanation but does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action and resource: 'Verschiebt Nachrichten in den Papierkorb' (moves messages to trash). This clearly distinguishes it from the generic sibling mail_move by targeting the trash folder specifically, and the title reinforces the purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives like mail_move. It does not mention that mail_move should be used for moving to other folders, nor does it state any exclusions. The only additional note about permanent deletion is behavioral, not usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mail_readMail lesenA
Liest eine Nachricht per UID vollständig: Kopfzeilen, Text und Liste der Anhänge. HTML-Mails werden auf Text reduziert, sofern kein Textteil vorhanden ist.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | Yes | UID der Nachricht aus mail_search. | |
| account | No | E-Mail-Adresse (oder Name) des Postfachs. Weglassen, wenn nur eines eingerichtet ist. Bei mehreren Pflicht - mail_list_accounts zeigt die verfügbaren. Beim Senden immer das Postfach wählen, von dem der Nutzer absenden will, und im Zweifel nachfragen. | |
| mailbox | No | IMAP-Ordner, z.B. "INBOX" oder "INBOX/Projekte". | INBOX |
| markSeen | No | Nachricht dabei als gelesen markieren. | |
| maxChars | No | Maximale Zeichenzahl des Textkörpers. | |
| includeHtml | No | Zusätzlich das rohe HTML mitliefern. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide only openWorldHint, no readOnlyHint or destructiveHint. The description discloses the HTML-to-text reduction behavior, which is helpful, but it omits the markSeen side effect that can modify message state. Since the schema includes markSeen but the description does not mention it, an agent may not anticipate that calling this tool can have a write effect. Partial transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core action and scope. Every word adds value: the first sentence defines the operation and result components; the second discloses a behavioral nuance. No fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Without an output schema, the description must explain the return value. It does so by listing headers, text, and attachment list. It also discloses HTML reduction behavior. It does not mention error handling or what happens if the message is not found, but for a read tool with maxChars and includeHtml parameters, the essential information is covered. Slightly incomplete regarding the markSeen side effect, but that is more behavioral than contextual.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all parameters are documented. The description adds a little context by specifying that output includes attachment list, but it does not elaborate on parameter meaning beyond the schema. It references 'UID' which matches the uid parameter, but adds no new semantics for account, mailbox, markSeen, maxChars, or includeHtml. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (liest/reads), a resource (Nachricht per UID), and the scope (Kopfzeilen, Text, Liste der Anhänge). It clearly differentiates from siblings like mail_get_raw by mentioning parsed content and HTML reduction, so an agent can tell when to use this tool without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for reading parsed message content and notes HTML reduction, but it does not explicitly name alternatives or state when not to use it. For example, it does not say 'for raw email use mail_get_raw'. The context is clear but exclusion criteria are missing, so only implied guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mail_save_attachmentAnhang speichernA
Speichert einen Anhang einer Nachricht auf der Festplatte. Zielordner ist standardmäßig der downloadDir aus der Konfiguration.
| Name | Required | Description | Default |
|---|---|---|---|
| uid | Yes | ||
| index | No | Index des Anhangs aus mail_read. Weglassen = alle Anhänge. | |
| account | No | E-Mail-Adresse (oder Name) des Postfachs. Weglassen, wenn nur eines eingerichtet ist. Bei mehreren Pflicht - mail_list_accounts zeigt die verfügbaren. Beim Senden immer das Postfach wählen, von dem der Nutzer absenden will, und im Zweifel nachfragen. | |
| mailbox | No | IMAP-Ordner, z.B. "INBOX" oder "INBOX/Projekte". | INBOX |
| targetDir | No | Zielordner (absoluter Pfad). Default: downloadDir der Konfiguration. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With only openWorldHint present and no read-only or destructive annotations, the description carries the burden of disclosing side effects. It does explicitly state that the tool saves to the hard disk and defaults to downloadDir, which is meaningful. However, it does not mention file naming, overwrite behavior, or whether saving affects the mail server state.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two short sentences that immediately state the core behavior and the default destination. There is no filler or redundant wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter tool with no output schema, the description is minimally adequate but leaves gaps. It does not mention that omitting index saves all attachments, what the tool returns, or how multiple accounts are handled. The schema fills in parameter details, but the description alone would not fully prepare an agent to invoke the tool confidently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 80%, so the schema already documents most parameters. The description only adds that targetDir defaults to downloadDir, which is also repeated in the schema, so it contributes no significant semantic value beyond the structured definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action and resource: 'Speichert einen Anhang einer Nachricht auf der Festplatte.' This clearly identifies it as the save-attachment operation and distinguishes it from the sibling mail tools, none of which write attachments to disk.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool instead of alternatives, nor does it mention prerequisites such as first reading the message with mail_read. The only usage hint appears in the schema's index parameter ('aus mail_read'), not in the description itself.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mail_searchMails suchenARead-only
Durchsucht einen IMAP-Ordner und gibt Kopfdaten (UID, Datum, Absender, Betreff, Flags) der neuesten Treffer zurück. Ohne Filter kommen die neuesten Nachrichten des Ordners. Die UIDs aus dem Ergebnis sind die Eingabe für mail_read.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | Teilstring im Empfänger. | |
| body | No | Teilstring im Nachrichtentext. | |
| from | No | Teilstring im Absender. | |
| seen | No | Nur gelesene Mails. | |
| text | No | Teilstring in Kopfzeilen ODER Text. | |
| limit | No | Maximale Trefferzahl (neueste zuerst). | |
| since | No | Nur Mails ab diesem Datum, z.B. 2026-09-01. | |
| before | No | Nur Mails vor diesem Datum. | |
| unseen | No | Nur ungelesene Mails. | |
| account | No | E-Mail-Adresse (oder Name) des Postfachs. Weglassen, wenn nur eines eingerichtet ist. Bei mehreren Pflicht - mail_list_accounts zeigt die verfügbaren. Beim Senden immer das Postfach wählen, von dem der Nutzer absenden will, und im Zweifel nachfragen. | |
| flagged | No | Nur markierte Mails. | |
| mailbox | No | IMAP-Ordner, z.B. "INBOX" oder "INBOX/Projekte". | INBOX |
| subject | No | Teilstring im Betreff. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already mark the tool readOnlyHint=true, and the description adds useful behavioral details: results are the newest messages, only header data is returned, and UIDs are intended as inputs for subsequent mail_read calls. There are no contradictions, and the description adds value beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, all substantive: operation, default behavior, and downstream usage. No filler or redundant restatement.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only search tool with a fully described schema, the description covers the essential context: what it searches, what it returns, how results are ordered, and how to continue with mail_read. No critical usage information appears missing; account-selection nuance is handled in the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already covers 100% of the parameters with individual German descriptions, so the description does not need to explain each parameter. It reinforces the limit/ordering behavior ('neueste Treffer') and the UID relationship, but adds no parameter-level semantics beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and object: searches an IMAP folder and returns header data (UID, date, sender, subject, flags). It also clarifies the no-filter behavior and connects the output to mail_read, distinguishing it from sibling read/mailbox tools without ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear context: when no filters are given it returns the newest folder messages, and it states that the returned UIDs feed into mail_read. It does not explicitly list when to prefer other siblings like mail_list_mailboxes or mail_get_raw, so it stops short of a full when-not-to-use guide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mail_sendMail sendenADestructive
Versendet eine E-Mail über SMTP und legt sie im Gesendet-Ordner ab. Der Versand ist endgültig und nicht widerrufbar - vor dem Aufruf immer Empfänger, Betreff und Text vom Nutzer bestätigen lassen.
| Name | Required | Description | Default |
|---|---|---|---|
| cc | No | ||
| to | Yes | Empfänger-Adressen. | |
| bcc | No | ||
| html | No | Nachricht als HTML. Ohne text wird daraus eine Textversion erzeugt. | |
| text | No | Nachricht als reiner Text. | |
| account | No | E-Mail-Adresse (oder Name) des Postfachs. Weglassen, wenn nur eines eingerichtet ist. Bei mehreren Pflicht - mail_list_accounts zeigt die verfügbaren. Beim Senden immer das Postfach wählen, von dem der Nutzer absenden will, und im Zweifel nachfragen. | |
| replyTo | No | Abweichende Antwortadresse. | |
| subject | Yes | Betreff. | |
| attachments | No | ||
| inReplyToUid | No | UID der Nachricht, auf die geantwortet wird - setzt In-Reply-To/References für korrektes Threading. | |
| inReplyToMailbox | No | Ordner der Nachricht aus inReplyToUid. | INBOX |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already indicate destructive and open-world behavior, but the description adds specific context: the email is sent via SMTP, stored in the Sent folder, and the operation is 'endgültig und nicht widerrufbar'. This goes beyond the generic destructiveHint and is valuable for an agent deciding whether to call the tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, both essential: the first states action and outcome, the second states the critical irreversibility warning and required confirmation step. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a high-stakes send operation, the description covers the essential warning, the sent-folder side effect, and the SMTP mechanism. It does not mention alternatives or failure behavior, but the schema and annotations fill most remaining gaps, making this adequate for a destructive tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description does not add parameter-level semantics, but the schema already covers most parameters with descriptions (73% coverage). The mention of confirming recipients, subject, and text highlights which fields matter most, though it does not explain their formats or constraints beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Versendet eine E-Mail über SMTP') and the outcome ('legt sie im Gesendet-Ordner ab'), making the tool's purpose obvious. It does not explicitly reference sibling tools, but the send-vs-draft distinction is implied by the verb and resource.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear usage context by warning that sending is final and requires user confirmation of recipients, subject, and text before invocation. It does not explicitly name alternatives like mail_create_draft or state when not to use this tool, so it falls short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mail_set_flagsFlags setzenA
Setzt oder entfernt IMAP-Flags. Gängige Werte: "\Seen" (gelesen), "\Flagged" (markiert), "\Answered" (beantwortet).
| Name | Required | Description | Default |
|---|---|---|---|
| add | No | Flags zum Setzen, z.B. ["\Seen"]. | |
| uids | Yes | UIDs der betroffenen Nachrichten. | |
| remove | No | Flags zum Entfernen. | |
| account | No | E-Mail-Adresse (oder Name) des Postfachs. Weglassen, wenn nur eines eingerichtet ist. Bei mehreren Pflicht - mail_list_accounts zeigt die verfügbaren. Beim Senden immer das Postfach wählen, von dem der Nutzer absenden will, und im Zweifel nachfragen. | |
| mailbox | No | IMAP-Ordner, z.B. "INBOX" oder "INBOX/Projekte". | INBOX |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only provide openWorldHint=true, so the description carries the burden of behavioral disclosure. It does state that flags are set or removed, but it does not disclose permissions, side effects, reversibility, or behavior on invalid flags. This is minimal disclosure for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two short, information-dense sentences. The operation is stated first, and the common values are listed directly after, with no redundant repetition of schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple mutation with five well-documented parameters, the description plus schema covers most invocation needs. However, it does not state that at least one of add or remove should be provided, nor does it describe return or error behavior, leaving some ambiguity for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds value by enumerating common flag values and their German meanings, which applies to both add and remove parameters and goes beyond the schema's single example.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first phrase 'Setzt oder entfernt IMAP-Flags' clearly names a specific action and resource. The common-value examples further clarify the intended domain and distinguish this tool from sibling mail operations like moving, reading, or searching.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The examples ('gelesen', 'markiert', 'beantwortet') imply when the tool should be used, but the description does not explicitly state when to use it over alternatives or note any prerequisites. There is no when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
mail_test_connectionVerbindung testenARead-only
Prüft IMAP-Login und SMTP-Login eines Accounts und meldet beide Ergebnisse einzeln.
| Name | Required | Description | Default |
|---|---|---|---|
| account | No | E-Mail-Adresse (oder Name) des Postfachs. Weglassen, wenn nur eines eingerichtet ist. Bei mehreren Pflicht - mail_list_accounts zeigt die verfügbaren. Beim Senden immer das Postfach wählen, von dem der Nutzer absenden will, und im Zweifel nachfragen. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate read-only and open-world behavior. The description adds the specific behavioral trait that it tests both IMAP and SMTP logins and reports each separately, which is beyond what annotations provide and useful for the agent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, directly to the point, with no filler. It front-loads the verb and resource and efficiently adds the detail about separate reporting.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple diagnostic tool with one optional parameter, read-only annotation, and no output schema, the description adequately explains what the tool does and that it reports two results independently. It does not specify the format of the results, but this is a minor gap given the tool's simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides comprehensive description of the single optional account parameter, including guidance on omission, required when multiple accounts, and reference to mail_list_accounts. The tool description itself adds no parameter semantics, but schema coverage is 100%, so a baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action (checks IMAP and SMTP login) on a specific resource (an account) and notes that it reports both results separately. This clearly distinguishes it from sibling tools, none of which perform connection testing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for verifying an account's connectivity but does not explicitly state when to prefer it over alternatives or exclude cases. The account parameter description gives some guidance on selecting accounts, but not on tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
13 tool updates
v1.1.0- First observed
mail_create_draft - First observed
mail_detect_provider - First observed
mail_get_raw - First observed
mail_list_accounts - First observed
mail_list_mailboxes - First observed
mail_move - First observed
mail_move_to_trash - First observed
mail_read - First observed
mail_save_attachment - First observed
mail_search - First observed
mail_send - First observed
mail_set_flags - First observed
mail_test_connection
TDQS
Scored across 13 tools
Every tool targets a distinct action-resource pair: account operations, mailbox listing, message retrieval, state changes, and message composition are clearly separated. Even mail_move and mail_move_to_trash are cleanly distinguished by trash-specific semantics.
All tools follow a uniform mail_<verb>_<object> pattern with clear, consistent verbs like list, test, detect, move, search, read, get, save, set, send, and create. There is no mixing of casing or verb styles.
13 tools is a well-scoped size for an email/IMAP assistant, covering account inspection, search/read, message mutations, and sending without becoming unwieldy. Each tool has a clear role and earns its place.
The set supports end-to-end email workflows: detect/test accounts, list mailboxes, search and read messages, retrieve raw sources and attachments, move/trash, set flags, and send or draft. Minor gaps like permanent deletion/expunge and mailbox creation are absent, but these appear intentional or config-external and can be worked around.
Maintenance
Related MCP Connectors
Connect any mailbox to Claude, ChatGPT & AI: read, send, reply, schedule & search emails.
Your mailboxes in ChatGPT and Claude: Gmail, iCloud, Fastmail, any IMAP. Passwords stay yours.
Email infrastructure for AI agents — send, receive, search, and reply to email over MCP.
Email inboxes and calendars for AI agents: send, receive, search, draft and schedule.
Related MCP Servers
- AlicenseAqualityAmaintenanceEnables Claude to interact with email accounts via IMAP and SMTP, providing tools for searching, reading, sending, and managing emails across multiple providers.401,715 npm98MIT
- FlicenseNot gradedqualityDmaintenanceEnables Claude to read, search, send, and manage emails across multiple IMAP/SMTP accounts via a single deployment.-
- AlicenseAqualityCmaintenanceEnables Claude to control the macOS Mail app for reading, searching, drafting, sending, and managing emails directly from Claude Desktop.12MIT
- FlicenseNot gradedqualityBmaintenanceEnables Claude to read, search, draft, send, flag, and move email across multiple IMAP/SMTP mailboxes while keeping credentials local.-