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:
$ 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'"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:
$ claude mcp add --transport http grabmail https://grabmail.io/mcpUm 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:
$ claude mcp add --transport http --scope project grabmail https://grabmail.io/mcp{
"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:
- Settings → Connectors → Add custom connector.
- Fügen Sie
https://grabmail.io/mcpein als URL, und geben Sie ihm einen Namen. - 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:
{
"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:
{
"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:
{
"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:
{
"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:
[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:
{
"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_stepzurück, das sagt, was wo verwendet wird. Serverseitig wird nichts reserviert, es kann also nicht fehlschlagen. Nimmt ein optionales, lesbaresprefixentgegen. 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_containsoderfrom_contains; übergeben Siesince_id, um zu ignorieren, was schon vorher da war. Nach einem stillen Warten antwortet es mittimed_outund 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:
create_inbox. Zurück kommen eine Adresse, ein Alias, und der Hinweis, welches welches ist.- Der Alias kommt ins Formular. Die Website bekommt eine funktionierende Adresse, die das Postfach erreicht und sich nicht zu dessen Öffnung verwenden lässt.
wait_for_messageauf die Adresse, unmittelbar nach dem Absenden, mitsubject_containsgesetzt auf ein Wort, das die Bestätigungsmail tragen wird. Es blockiert; der Agent muss nicht pollen.- Der Code kommt aus der Nachricht, die das Warten zurückgegeben hat. Meist ist gar kein weiterer Aufruf nötig.
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:
## 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
| Symptom | Ursache | Lösung |
|---|---|---|
| Der Server wird nicht aufgeführt | Die 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 auf | Die 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ück | Das 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ültig | Die ö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 nicht | Kein 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
curloben 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.


