MCP in der Produktion: Transport, Auth und Scaling-Herausforderungen loesen
Engineering Team
Vom Prototyp zur Produktion: Was sich aendert
Einen MCP-Server zu erstellen, der auf Ihrem Laptop funktioniert, ist relativ einfach. Einen zu betreiben, der Tausende gleichzeitiger AI-Agenten-Sitzungen ueber eine verteilte Infrastruktur verarbeitet, ist eine voellig andere Engineering-Herausforderung. Produktions-MCP-Deployments muessen fuenf Aspekte behandeln, die Prototypen ignorieren koennen: Transport-Skalierbarkeit, Authentifizierung und Autorisierung, Sitzungsverwaltung im grossen Massstab, Audit-Trails und Multi-Server-Orchestrierung.
Dieser Artikel ist ein technischer Leitfaden fuer Engineering-Teams, die MCP-Server von der Entwicklung in die Produktion ueberfuehren. Wir setzen voraus, dass Sie mindestens einen MCP-Server erstellt haben und die Grundlagen des Protokolls verstehen. Falls nicht, beginnen Sie mit unserem Begleitartikel zum Erstellen Ihres ersten MCP-Servers.
Transport-Skalierbarkeit: stdio vs SSE vs Streamable HTTP
MCP definiert drei Transport-Mechanismen. Die Wahl des richtigen fuer die Produktion ist Ihre erste Architekturentscheidung.
stdio-Transport
Der stdio-Transport kommuniziert ueber Standard-Ein-/Ausgabestrroeme. Die Host-Anwendung startet den MCP-Server als Kindprozess und tauscht JSON-RPC-Nachrichten ueber stdin/stdout aus.
Vorteile:
- Keine Netzwerkkonfiguration
- Isolierung auf Prozessebene
- Keine Portkonflikte
- Geringste Latenz (kein Netzwerk-Stack)
Einschraenkungen:
- Server muss auf derselben Maschine wie der Host laufen
- Ein Serverprozess pro Client-Sitzung
- Kein Load-Balancing
- Keine horizontale Skalierung
Am besten geeignet fuer: Lokale Entwicklungstools, IDE-Erweiterungen, Einzelbenutzer-Desktop-Anwendungen.
SSE-Transport (Server-Sent Events)
Der SSE-Transport verwendet HTTP fuer Client-zu-Server-Nachrichten und Server-Sent Events fuer Server-zu-Client-Nachrichten. Der Server laeuft als HTTP-Dienst.
Vorteile:
- Netzwerkzugaenglich (Remote-Server)
- Kompatibel mit bestehender HTTP-Infrastruktur
- Unterstuetzt mehrere gleichzeitige Clients
- Funktioniert durch Firewalls und Proxies
Einschraenkungen:
- Unidirektionales Streaming (SSE nur Server-zu-Client)
- Session-Affinitaet erforderlich (Stateful-Verbindung)
- Einige Load-Balancer haben Probleme mit langlebigen SSE-Verbindungen
- Keine eingebaute Reconnect-Semantik im Protokoll
Am besten geeignet fuer: Kleine bis mittelgrosse Deployments, interne Tools, Teams mit bestehender HTTP-Infrastruktur.
Streamable HTTP-Transport
Streamable HTTP ist der neueste Transport, speziell fuer Produktions-Deployments entwickelt. Er verwendet Standard-HTTP-POST fuer alle Nachrichten mit optionalem SSE-Streaming fuer langandauernde Operationen.
Vorteile:
- Vollstaendig zustandsloses Request/Response-Modell
- Funktioniert mit jedem HTTP-Load-Balancer
- Eingebaute Sitzungsverwaltung ueber
Mcp-Session-Id-Header - Unterstuetzt Streaming- und Nicht-Streaming-Antworten
- CDN- und Proxy-kompatibel
Einschraenkungen:
- Serverseitiger Sitzungsspeicher erforderlich (Redis, Datenbank)
- Etwas hoeherer Overhead pro Nachricht als stdio
- Neuerer Transport — weniger Ecosystem-Tooling
Am besten geeignet fuer: Produktions-Cloud-Deployments, Multi-Tenant-Plattformen, Enterprise-Umgebungen.
Transport-Vergleichsmatrix
| Eigenschaft | stdio | SSE | Streamable HTTP |
|---|---|---|---|
| Netzwerkfaehig | Nein | Ja | Ja |
| Horizontale Skalierung | Nein | Begrenzt | Ja |
| Load-Balancing | Nein | Session-Affinitaet erforderlich | Standard-HTTP-LB |
| Sitzungsverwaltung | Pro Prozess | Serverspeicher | Externer Store |
| Latenz | Geringste | Niedrig | Niedrig |
| Firewall-kompatibel | N/A | Ja | Ja |
Authentifizierung und Autorisierung
OAuth 2.0-Integration
Produktions-MCP-Server benoetigen eine Moeglichkeit fuer Clients, sich zu authentifizieren und den Zugriff auf bestimmte Tools und Ressourcen einzuschraenken. Das MCP-Protokoll unterstuetzt OAuth 2.0 fuer entfernte Server.
Der Ablauf sieht folgendermassen aus:
- MCP Client verbindet sich mit dem Server und sendet eine
initialize-Anfrage - Server antwortet mit
401 Unauthorizedund einemWWW-Authenticate-Header mit OAuth-Metadaten-URL - Client ruft OAuth-Konfiguration von
/.well-known/oauth-authorization-serverab - Client erhaelt ein Zugriffstoken ueber einen browserbasierten Autorisierungsfluss
- Nachfolgende Anfragen enthalten das Bearer-Token im
Authorization-Header
Autorisierung auf Tool-Ebene
Authentifizierung allein reicht nicht aus. Produktionssysteme benoetigen eine feinkoernige Autorisierung, die steuert, welche Tools ein Benutzer aufrufen und auf welche Ressourcen er zugreifen kann.
Empfohlene Ansaetze:
- Rollenbasierte Zugriffssteuerung (RBAC): Tool-Berechtigungen Rollen zuweisen. Beispiel: Die Rolle
analysthat Zugriff auf schreibgeschuetzte Abfrage-Tools, die Rolleadminauf Schreiboperationen. - Scope-basierte Steuerung: OAuth-Scopes verwenden, um den Tool-Zugriff einzuschraenken. Beispiel: Der Scope
mcp:tools:query:readerlaubt nur SELECT-Abfragen. - Dynamische Tool-Filterung: Die Liste verfuegbarer Tools basierend auf den Berechtigungen des authentifizierten Benutzers filtern.
Horizontale Skalierung mit Redis
Bei Verwendung des zustandslosen Streamable-HTTP-Transports koennen Sie mehrere MCP-Server-Instanzen hinter einem Load-Balancer betreiben. Der Sitzungszustand wird in Redis gespeichert und ueber alle Instanzen geteilt.
Client → Load Balancer → MCP Server 1 ↔ Redis
→ MCP Server 2 ↔ Redis
→ MCP Server 3 ↔ Redis
Jede Anfrage enthaelt den Mcp-Session-Id-Header, und jede Server-Instanz kann den Sitzungszustand aus Redis abrufen, um die Verarbeitung fortzusetzen.
Auto-Scaling auf Kubernetes
Die Bereitstellung von MCP-Servern auf Kubernetes ermoeglicht das automatische Skalieren von Pods basierend auf der Anzahl aktiver Sitzungen oder der CPU-Auslastung. Verwenden Sie benutzerdefinierte Metriken mit dem Horizontal Pod Autoscaler (HPA).
Audit-Logging
Enterprise-Deployments erfordern detaillierte Audit-Trails fuer jeden Aufruf eines externen Tools durch eine AI. Fuer jeden Tool-Aufruf protokollieren Sie:
- Zeitstempel: Zeitpunkt des Aufrufs
- Benutzer-ID: Der Benutzer, der die AI-Aktion ausgeloest hat
- Tool-Name: Das aufgerufene MCP-Tool
- Eingabeparameter: Die an das Tool gesendeten Daten
- Ausgabeergebnis: Die vom Tool zurueckgegebenen Daten
- Ausfuehrungsdauer: Die fuer den Tool-Aufruf benoetigte Zeit
- Fehler: Aufgetretene Fehler
Verwenden Sie strukturierte Protokollierung (JSON-Format) und senden Sie Logs an ein zentrales Logmanagement-System (ELK Stack, Datadog, CloudWatch).
Gateway-Architektur
Fuer Deployments im grossen Massstab sollten Sie ein MCP-Gateway-Muster implementieren. Das Gateway fungiert als Reverse-Proxy zwischen MCP Clients und Backend-MCP-Servern.
Verantwortlichkeiten des Gateways:
- Zentralisierte Authentifizierung: Alle OAuth-Validierung am Gateway durchfuehren
- Ratenbegrenzung: Benutzer- und Tool-spezifische Ratenlimits anwenden
- Routing: Anfragen basierend auf dem Tool-Namen an die entsprechenden Backend-Server weiterleiten
- Audit-Log-Erfassung: Alle Tool-Aufrufe auf Gateway-Ebene protokollieren
- Circuit Breaker: Fallback-Behandlung bei Backend-Server-Ausfaellen
FAQ
F: Kann man den stdio-Transport in der Produktion verwenden? A: Ja, aber nur in begrenzten Szenarien. Er eignet sich fuer Desktop-Anwendungen, bei denen jeder Benutzer seinen eigenen lokalen MCP-Server-Prozess ausfuehrt. Fuer gemeinsam genutzte Server-Infrastruktur verwenden Sie Streamable HTTP.
F: Muessen MCP-Sitzungen persistiert werden? A: Ja, wenn Sie Streamable HTTP verwenden. Der Sitzungszustand umfasst Client-Faehigkeiten, die ausgehandelte Protokollversion und registrierte Benachrichtigungen. Redis ist der empfohlene Sitzungsspeicher.
F: Wie sollte man MCP-Server versionieren?
A: Verwenden Sie das Server-Versionsfeld in der initialize-Antwort. Bei inkompatiblen Aenderungen (Entfernung von Tools, Schemaanpassungen) erhoehen Sie die Major-Version und unterstuetzen waehrend einer Migrationsphase sowohl alte als auch neue Versionen.
F: Was ist die maximale Nachrichtengroesse fuer MCP? A: Das Protokoll definiert kein Maximum, aber praktische Grenzen haengen vom Transport ab. Bei Streamable HTTP halten Sie Antworten unter 10 MB. Bei stdio koennen System-Pipe-Puffer (typischerweise 64 KB) Chunking fuer grosse Antworten erfordern.