MCP · Lektion 04 · Transports

STDIO vs. Streamable HTTP

Die JSON-RPC-Nachrichten aus Lektion 2 müssen ja irgendwie transportiert werden. MCP definiert dafür genau zwei Standard-Wege. Die Wahl bestimmt, wo dein Server läuft und wie du ihn deployst.

Dein Gewinn: Du kannst im Workshop begründen, wann man STDIO und wann Streamable HTTP nimmt — und du weißt, dass es im Python-SDK nur ein Argument ist, das umschaltet.

1. STDIO — der Server ist ein Subprozess

Beim stdio-Transport startet der Client den Server als Kindprozess. Kommunikation läuft über die Standard-Streams:1

Wann? Lokale Integrationen: Server und Agent laufen auf derselben Maschine. Genau so läuft dein forgejo-Server in Claude Code. Die Spec sagt: Clients SHOULD stdio unterstützen, wann immer möglich.1 Es ist der einfachste Weg — kein Port, kein Netzwerk, keine Auth.

2. Streamable HTTP — ein eigenständiger Dienst

Beim Streamable HTTP-Transport läuft der Server als unabhängiger Prozess, der mehrere Clients bedienen kann. Ein einziger Endpunkt (z.B. https://example.com/mcp) nimmt:1

Wann? Remote: ein zentral gehosteter Server, an den sich viele Nutzer/Agents übers Netz verbinden. Das ist der empfohlene Transport für Production-Deployments.2

Sicherheits-Warnung der Spec für HTTP: den Origin-Header validieren (DNS-Rebinding!), lokal nur an 127.0.0.1 binden statt 0.0.0.0, und Auth einbauen.1

Historische Notiz fürs Workshop-Selbstbewusstsein: „Streamable HTTP“ ersetzte ab Spec 2025-03-26 den älteren „HTTP+SSE“-Transport. Wenn du irgendwo noch von zwei getrennten SSE-/POST-Endpunkten liest — das ist die alte Variante.1

3. Im Python-SDK: ein Argument

Die gute Nachricht für deinen Bau in Lektion 5: das SDK kapselt beide Transports. Du schreibst dein Tool einmal und wählst beim Start:

if __name__ == "__main__":
    mcp.run(transport="stdio")            # lokal, an Claude Code/Duo
    # mcp.run(transport="streamable-http") # remote, als Webdienst

Mehr ist es nicht. Derselbe Server, zwei Türen.2

4. Mini-Check (aus dem Kopf!)

Warum killt ein print("debug") einen STDIO-Server?
Ein zentral gehosteter Server für viele Nutzer — welcher Transport?
Wer startet bei STDIO den Server-Prozess?

5. Primärquelle

📖 MCP Specification — Transports. Lies stdio und Streamable HTTP inkl. der Security-Warnung.

Sag „weiter“ für Lektion 5 — jetzt bauen wir endlich: dein erster Python-MCP-Server mit dem offiziellen SDK, getestet im MCP Inspector.

1 — MCP Specification, Transports (2025-06-18): …/basic/transports

2 — Python SDK README (modelcontextprotocol/python-sdk): github.com/modelcontextprotocol/python-sdk