KI-Agenten & MCP

E-Mail-Postfach für Claude Code, Cursor und Windsurf per MCP

Jeder Coding-Agent stockt am selben Satz: „Prüfen Sie Ihre E-Mails auf den Code“. Die Lösung ist ein MCP-Server, eine URL, kein Schlüssel und kein Konto — und die Konfiguration unterscheidet sich in jedem Client. Hier ist sie für Claude Code, Claude Desktop, Cursor, Windsurf, VS Code, Codex CLI und Gemini CLI, mit den vier Tool-Aufrufen, die eine Anmeldung durchtragen, und dem Absatz, den man in die eigenen Anweisungen des Agenten schreibt.

  • Einsteiger
  • 14 Min. Lesezeit
Ein aufgeklappter grauer Laptop mit einem blauen Umschlag, der wie ein USB-Stick in der Seite steckt, und ein blauer Stecker in einer grauen Steckdose davor

Ein Server, sieben Clients

Der Server ist ein einzelner HTTPS-Endpunkt, der das Model Context Protocol über Streamable HTTP spricht: ein POST mit JSON-RPC, eine JSON-Antwort, kein offen gehaltener Stream. Es gibt nichts zu installieren, nichts, das lokal laufen müsste, und nichts, wofür man sich anmelden müsste — auf den öffentlichen Domains ist die URL die gesamte Konfiguration:

MCP-Endpunkthttps://grabmail.io/mcp

Jeder MCP-Client akzeptiert einen entfernten HTTP-Server, aber jeder hält seine Konfiguration in einer anderen Datei mit einem leicht anderen Schlüsselnamen. Die Abschnitte unten geben für jeden die genaue Zeile an. Die Formate sind die, die im September 2026 aktuell sind; wenn sich seither etwas geändert hat, ist die eigene Dokumentation des jeweiligen Clients maßgeblich.

Prüfen, ob er antwortet, aus einer Shell

Bevor Sie irgendeinen Client anfassen, weisen Sie nach, dass der Server da ist, und sehen Sie, was er anbietet. Weil der Transport einfaches HTTP ist, reicht ein curl:

die Tools auflisten
$ curl -s -X POST https://grabmail.io/mcp -H "Content-Type: application/json" -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}' | jq '.result.tools[].name'
was zurückkommt
"create_inbox"
"list_domains"
"list_messages"
"read_message"
"wait_for_message"
"delete_message"

Wenn das funktioniert, wird auch jeder Client unten funktionieren, und ein Client, der dann trotzdem scheitert, hat ein Konfigurationsproblem im Client, kein Serverproblem. Wenn es nicht funktioniert, prüfen Sie, ob Ihr Netzwerk ausgehendes HTTPS zu grabmail.io erlaubt — das ist sein gesamter Fußabdruck.

Claude Code

Ein Befehl, aus jedem Verzeichnis. Er registriert den Server für Ihren Nutzer, sodass er in jedem Projekt verfügbar ist:

Shell
$ claude mcp add --transport http grabmail https://grabmail.io/mcp

Um ihn stattdessen über das Repository mit einem Team zu teilen, beschränken Sie ihn auf das Projekt. Das schreibt ein .mcp.json im Wurzelverzeichnis, das eingecheckt wird und zu dessen Freigabe Teamkollegen aufgefordert werden:

Shell — Projekt-Scope
$ claude mcp add --transport http --scope project grabmail https://grabmail.io/mcp
.mcp.json — was der Projekt-Scope schreibt
{
  "mcpServers": {
    "grabmail": {
      "type": "http",
      "url": "https://grabmail.io/mcp"
    }
  }
}

Starten Sie Claude Code neu, führen Sie /mcp aus, und grabmail wird mit seinen sechs Tools aufgeführt. Der Server beantwortet außerdem den initialize-Aufruf des Protokolls mit einem kurzen Absatz an Anweisungen, den Claude Code dem Modell zuführt — der Agent kommt also bereits mit dem Wissen an, den Alias herauszugeben und auf die Adresse zu warten.

Claude Desktop

Entfernte Server werden über die Anwendung hinzugefügt, nicht über die Konfigurationsdatei:

  1. Settings → Connectors → Add custom connector.
  2. Fügen Sie https://grabmail.io/mcp ein als URL, und geben Sie ihm einen Namen.
  3. Beginnen Sie eine neue Unterhaltung, und die Tools erscheinen unter dem Connector.

Bei einer Version, die in claude_desktop_config.json nur lokale Server akzeptiert, verbinden Sie den entfernten Endpunkt mit mcp-remote, das als lokaler Prozess läuft und an die URL weiterleitet:

claude_desktop_config.json — über die mcp-remote-Bridge
{
  "mcpServers": {
    "grabmail": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://grabmail.io/mcp"]
    }
  }
}

Cursor

Cursor liest .cursor/mcp.json im Projekt (oder ~/.cursor/mcp.json für jedes Projekt). Ein entfernter Server ist eine url:

.cursor/mcp.json
{
  "mcpServers": {
    "grabmail": {
      "url": "https://grabmail.io/mcp"
    }
  }
}

Öffnen Sie Cursor Settings → MCP, um ihn aufgeführt zu sehen und seine Tools zu aktivieren. Im Agent mode ruft das Modell sie von selbst auf; im Chat können Sie sie namentlich anfordern.

Windsurf

Windsurf hält seine Server in ~/.codeium/windsurf/mcp_config.json, und der Schlüssel für einen entfernten Server ist serverUrl statt url — die eine Stelle, an der die Form abweicht:

~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "grabmail": {
      "serverUrl": "https://grabmail.io/mcp"
    }
  }
}

Cascade listet den Server nach einem Aktualisieren über das MCP-Panel auf. Dieselbe Datei erreicht man auch über Windsurf Settings → Cascade → MCP servers → View raw config.

VS Code

Der agent mode von VS Code liest .vscode/mcp.json im Workspace, oder die Datei auf Nutzerebene, die MCP: Add Server in der Command Palette schreibt. Server stehen unter servers, nicht unter mcpServers, und ein entfernter deklariert seinen Transport:

.vscode/mcp.json
{
  "servers": {
    "grabmail": {
      "type": "http",
      "url": "https://grabmail.io/mcp"
    }
  }
}

Ein kleiner „Start“-Link erscheint über dem Eintrag im Editor; danach erscheinen die Tools im Tool-Picker des Chats, und agent mode ruft sie auf, ohne gefragt zu werden.

Codex CLI und Gemini CLI

Codex CLI hält seine Konfiguration in TOML unter ~/.codex/config.toml. Ein entfernter Server ist eine Tabelle mit einer url:

~/.codex/config.toml
[mcp_servers.grabmail]
url = "https://grabmail.io/mcp"

Gemini CLI liest ~/.gemini/settings.json (oder .gemini/settings.json im Projekt), und der Schlüssel für einen Streamable-HTTP-Server ist httpUrl:

~/.gemini/settings.json
{
  "mcpServers": {
    "grabmail": {
      "httpUrl": "https://grabmail.io/mcp"
    }
  }
}

Eine Version von beiden, die nur lokale Server akzeptiert, erreicht den Endpunkt über dieselbe mcp-remote-Bridge, die für Claude Desktop gezeigt wurde: command = "npx", args = ["-y", "mcp-remote", "https://grabmail.io/mcp"].

Die sechs Tools

Ganz gleich welcher Client, das Modell sieht dieselben sechs Tools mit denselben Namen. Es gibt keinen Zustand, der zwischen Aufrufen verwaltet werden müsste, und keines von ihnen braucht ein Argument, das der vorherige nicht zurückgegeben hat.

create_inbox
Erfindet eine frische Adresse und gibt sie mit ihrem Alias und einem next_step zurück, das sagt, was wo verwendet wird. Serverseitig wird nichts reserviert, es kann also nicht fehlschlagen. Nimmt ein optionales, lesbares prefix entgegen.
wait_for_message
Blockiert, bis eine Nachricht an der Adresse ankommt, bis zu 25 Sekunden lang, und gibt sie dann vollständig zurück — Betreff, Absender, Klartext, HTML. Filtern Sie mit subject_contains oder from_contains; übergeben Sie since_id, um zu ignorieren, was schon vorher da war. Nach einem stillen Warten antwortet es mit timed_out und bittet darum, erneut aufgerufen zu werden.
read_message
Eine Nachricht vollständig, per ID. Selten nötig, weil das Warten die ganze Nachricht schon zurückgibt.
list_messages
Alles, was an einer Adresse wartet, neueste zuerst, sofort — auch wenn es nichts ist.
list_domains
Die öffentlichen Domains, die jeder verwenden darf, für den Fall, dass ein Formular gerade eine davon abgelehnt hat.
delete_message
Entfernt eine Nachricht jetzt statt in 5 Tagen. Idempotent, ein Agent, der es erneut versucht, kostet also nichts.

Die Anmelde-Schleife in vier Aufrufen

Das ist die Abfolge, die fast jede Aufgabe braucht, und der Client ändert daran nichts:

  1. create_inbox. Zurück kommen eine Adresse, ein Alias, und der Hinweis, welches welches ist.
  2. Der Alias kommt ins Formular. Die Website bekommt eine funktionierende Adresse, die das Postfach erreicht und sich nicht zu dessen Öffnung verwenden lässt.
  3. wait_for_message auf die Adresse, unmittelbar nach dem Absenden, mit subject_contains gesetzt auf ein Wort, das die Bestätigungsmail tragen wird. Es blockiert; der Agent muss nicht pollen.
  4. Der Code kommt aus der Nachricht, die das Warten zurückgegeben hat. Meist ist gar kein weiterer Aufruf nötig.
ein Prompt, der die ganze Schleife durchspielt
Sign up for a trial at https://app.example.com/signup with a fresh GrabMail inbox.
Use the ALIAS in the form, wait for the confirmation code with wait_for_message
on the ADDRESS, enter it, and tell me the resulting login.

Was in die eigenen Anweisungen des Agenten gehört

Der Server sagt dem Modell beim Verbindungsaufbau, wie es ihn verwendet, aber ein Modell, das dieselben vier Regeln in seinen eigenen Projektanweisungen gelesen hat, befolgt sie jedes Mal statt nur meistens. Fügen Sie das zu CLAUDE.md, .cursor/rules, .windsurfrules, AGENTS.md oder GEMINI.md hinzu — je nachdem, was der Client liest:

CLAUDE.md, .cursor/rules, AGENTS.md — derselbe Absatz
## Email

- To receive email, use the `grabmail` MCP server. Call `create_inbox` once per task.
- Put the **alias** it returns into forms; poll the **address** it returns with `wait_for_message`.
- Call `wait_for_message` right after submitting a form, with `subject_contains` set to a word
  you expect ("code", "verify", "confirm"). If it returns `timed_out`, call it again — up to
  three times — before concluding the mail was not sent.
- Never reuse an inbox across tasks. Never send anything confidential to one: it is public.

Die zwei Regeln, auf die es am meisten ankommt, sind die, die ein Agent falsch macht, wenn man sie ihm nicht sagt: den Alias ins Formular geben und die Adresse pollen, und timed_out als „erneut aufrufen“ zu behandeln, nicht als „die Mail wurde nie verschickt“. Ein Postfach, das ein KI-Agent lesen kann geht ausführlich auf beides ein, einschließlich, warum das Warten zurückkehrt, bevor die Mail es tut.

Wenn es nicht funktioniert

SymptomUrsacheLösung
Der Server wird nicht aufgeführtDie Konfigurationsdatei liegt am falschen Ort, verwendet den falschen Schlüssel (url / serverUrl / httpUrl / servers), oder der Client wurde nicht neu gestartet.Kopieren Sie den Block für Ihren Client genau, starten Sie neu, und führen Sie das curl oben aus, um den Server als Ursache auszuschließen.
Die Tools werden aufgeführt, aber das Modell ruft sie nie aufDie Tools sind im MCP-Panel des Clients deaktiviert, oder dem Modell wurde nicht gesagt, dass es einen E-Mail-Schritt gibt.Aktivieren Sie sie, und fügen Sie den Anweisungs-Absatz oben hinzu.
wait_for_message gibt ständig timed_out zurückDas Formular wurde nie abgeschickt, der Alias wurde falsch eingetippt, die Website hat die Domain abgelehnt, oder es laufen bereits 8 Wartevorgänge.Bis zu dreimal erneut aufrufen; die eigene Fehlermeldung des Formulars prüfen; Warum Anmeldeformulare Wegwerf-E-Mail blockieren lesen.
Die Website sagt, die Adresse sei ungültigDie öffentliche Domain steht auf einer Sperrliste für Wegwerf-Mail.Verwenden Sie eine eigene Domain (ein MX-Eintrag) oder eine Domain aus dem Pool, der von den Listen ferngehalten wird.
Die Bridge (mcp-remote) startet nichtKein Node auf der Maschine, oder npx erreicht die Registry nicht.Node 18+ installieren, oder eine Client-Version verwenden, die die URL direkt entgegennimmt.

Bevor Sie es für fertig erklären

  • Das curl oben listet von Ihrer Maschine aus sechs Tools auf.
  • Der Server erscheint nach einem Neustart im MCP-Panel des Clients, Tools aktiviert.
  • Der Anweisungs-Absatz steht in der Datei, die Ihr Client liest.
  • Ein Test-Prompt hat eine Anmeldung abgeschlossen: Alias im Formular, Warten auf die Adresse, Code ausgelesen.
  • Nichts Vertrauliches wird je an eines dieser Postfächer geschickt — sie sind öffentlich.

Das ist die ganze Einrichtung. Derselbe Server funktioniert von jedem Framework aus, das MCP spricht, und für Agenten, die ohne MCP gebaut sind — eine einfache Tool-Funktion in LangChain, dem OpenAI Agents SDK oder der eigenen Schleife — zeigt E-Mail für KI-Agenten die REST-Version derselben vier Schritte.

Fragen

Brauche ich einen API-Schlüssel oder ein Konto für den MCP-Server?

Nein. Die öffentlichen Domains verlangen weder Schlüssel noch Konto noch Header, und der MCP-Server legt genau das offen, was die REST-API offenlegt. Nur der kostenpflichtige Pool von Domains, der von den Wegwerf-Mail-Sperrlisten ferngehalten wird, verwendet ein Bearer-Token, übergeben als Authorization-Header am Endpunkt.

Ist es Streamable HTTP oder SSE?

Streamable HTTP: ein POST, eine JSON-Antwort. Es gibt keinen Event-Stream, der offen gehalten werden müsste, weshalb wait_for_message auf 25 Sekunden begrenzt ist — einem Client, der ein GET öffnet und SSE erwartet, wird in einfachem JSON mitgeteilt, dass es keins gibt.

Können sich mehrere Agenten den Server gleichzeitig teilen?

Ja. Es gibt keinen Sitzungsstatus; jeder Aufruf trägt alles, was er braucht. Das einzige geteilte Limit ist, dass insgesamt 8 wait_for_message-Aufrufe gleichzeitig laufen — darüber hinaus antwortet das Tool sofort mit timed_out und bittet darum, erneut aufgerufen zu werden, was der Anweisungs-Absatz oben behandelt.

Warum kehrt wait_for_message zurück, bevor die Mail ankommt?

Weil ein Server-Worker, der minutenlang schläft, ein Worker ist, den sonst niemand nutzen kann. Das Warten ist auf 25 Sekunden begrenzt und sagt ehrlich timed_out, statt zu scheitern; der Agent ruft erneut auf. Drei Aufrufe sind über eine Minute Wartezeit, das deckt jede transaktionale Mail ab, die tatsächlich verschickt wurde.

Kann der Agent auch E-Mails versenden?

Nein. Der Dienst empfängt nur, und das mit Absicht — ein kostenloser Server ohne Konto, der versenden könnte, wäre binnen einer Stunde ein Spam-Relay. Ein Agent, der Mail versenden muss, braucht einen Versand-Provider; dieser hier ist zum Lesen dessen da, was zurückkommt.

Ist das Postfach privat für meinen Agenten?

Nein. Wer die Adresse kennt, kann es lesen, auf einer öffentlichen Domain genauso wie auf Ihrer eigenen. Deshalb gibt es den Alias: Die Website bekommt eine Adresse, die das Postfach erreicht und sich nicht zu dessen Öffnung verwenden lässt. Lassen Sie einen Agenten nie etwas Vertrauliches an eines dieser Postfächer schicken.

Welche Client-Konfiguration ist maßgeblich, falls sich das ändert?

Die jeweils eigene Dokumentation des Clients. Die Formen oben sind die, die im September 2026 aktuell sind; die Serverseite ändert sich dadurch nicht — es ist eine URL, und jeder Client, der einen entfernten MCP-Server über HTTP aufrufen kann, kann sie aufrufen.

Probieren Sie es aus, solange es frisch ist

Eine Adresse braucht einen Klick, kein Konto und keine Karte. Alles in dieser Anleitung funktioniert damit sofort.

Willkommen zurück

Ihre Postfächer und Ihre Domains an einem Ort.