KonfigurationMCP

MCP-Server-Transporte

MCP unterstützt Transportmechanismen für die Kommunikation zwischen Bob und MCP-Servern.

Übersicht

MCP bietet drei Transportoptionen, die jeweils für unterschiedliche Bereitstellungsszenarien geeignet sind:

Jeder Transport hat unterschiedliche Eigenschaften, Vorteile und Anwendungsfälle.

STDIO-Transport

STDIO-Transport läuft lokal auf Ihrem Computer und kommuniziert über Standard-Ein-/Ausgabeströme.

Wie STDIO-Transport funktioniert

  1. Bob startet einen MCP-Server als Kindprozess
  2. Die Kommunikation erfolgt über Prozessströme: Bob schreibt in STDIN des Servers, der Server antwortet auf STDOUT
  3. Jede Nachricht wird durch ein Zeilenumbruchzeichen begrenzt
  4. Nachrichten sind als JSON-RPC 2.0 formatiert
Client                    Server
  |                         |
  |---- JSON-Nachricht ---->| (über STDIN)
  |                         | (verarbeitet Anfrage)
  |<---- JSON-Nachricht ----| (über STDOUT)
  |                         |

STDIO-Eigenschaften

  • Lokalität: Läuft auf derselben Maschine wie Bob
  • Leistung: Sehr geringe Latenz und Overhead (kein Netzwerk-Stack beteiligt)
  • Einfachheit: Direkte Prozesskommunikation ohne Netzwerkkonfiguration
  • Beziehung: Eins-zu-eins-Beziehung zwischen Client und Server
  • Sicherheit: Inhärent sicherer ohne Netzwerkexposition

Wann STDIO verwenden

STDIO-Transport ist ideal für:

  • Lokale Integrationen und Werkzeuge, die auf derselben Maschine laufen
  • Sicherheitskritische Operationen
  • Anforderungen mit geringer Latenz
  • Einzelclient-Szenarien (eine Bob-Instanz pro Server)
  • Befehlszeilenwerkzeuge oder IDE-Erweiterungen

STDIO-Implementierungsbeispiel


const server = new Server({name: 'local-server', version: '1.0.0'});
// Werkzeuge registrieren...

// STDIO-Transport verwenden
const transport = new StdioServerTransport(server);
transport.listen();

Streamable HTTP-Transport

Streamable HTTP-Transport ist der moderne Standard für die Remote-MCP-Serverkommunikation und ersetzt den älteren HTTP+SSE-Transport. Er arbeitet über HTTP/HTTPS und ermöglicht flexiblere Serverimplementierungen.

Wie Streamable HTTP-Transport funktioniert

  1. Der Server stellt einen einzelnen HTTP-Endpunkt (MCP-Endpunkt) bereit, der sowohl POST- als auch GET-Methoden unterstützt
  2. Bob sendet Anfragen an diesen MCP-Endpunkt mit HTTP POST
  3. Der Server verarbeitet die Anfrage und sendet eine Antwort zurück
  4. Optional kann der Server Server-Sent Events (SSE) über dieselbe Verbindung verwenden, um mehrere Nachrichten oder Benachrichtigungen an Bob zu streamen

Dies ermöglicht sowohl grundlegende Request-Response-Interaktionen als auch fortgeschritteneres Streaming und serverinitiierte Kommunikation.

Client                             Server
  |                                  |
  |---- HTTP POST /mcp_endpoint ---->| (Client-Anfrage)
  |                                  | (verarbeitet Anfrage)
  |<--- HTTP Response / SSE Stream --| (Server-Antwort / Stream)
  |                                  |

Streamable HTTP-Eigenschaften

  • Moderner Standard: Bevorzugte Methode für neue Remote-MCP-Serverimplementierungen
  • Remote-Zugriff: Kann auf einer anderen Maschine als Bob gehostet werden
  • Skalierbarkeit: Kann mehrere Client-Verbindungen gleichzeitig verarbeiten
  • Protokoll: Funktioniert über Standard-HTTP/HTTPS
  • Flexibilität: Unterstützt einfache Request-Response und fortgeschrittenes Streaming
  • Einzelner Endpunkt: Verwendet einen einzelnen URL-Pfad für die gesamte MCP-Kommunikation
  • Authentifizierung: Kann Standard-HTTP-Authentifizierungsmechanismen verwenden
  • Rückwärtskompatibilität: Server können Kompatibilität mit älteren HTTP+SSE-Clients aufrechterhalten

Wann Streamable HTTP verwenden

Streamable HTTP-Transport ist ideal für:

  • Alle neuen Remote-MCP-Serverentwicklungen
  • Server, die robuste, skalierbare und flexible Kommunikation erfordern
  • Integrationen, die Streaming-Daten oder servergesendete Benachrichtigungen beinhalten können
  • Öffentliche Dienste oder zentralisierte Werkzeuge
  • Ersatz von Legacy-SSE-Transportimplementierungen

Streamable HTTP-Implementierungsbeispiel

Konfiguration in settings.json:

{
  "mcpServers": {
    "StreamableHTTPMCPName": {
      "type": "streamable-http",
      "url": "http://localhost:8080/mcp"
    }
  }
}

Für die serverseitige Implementierung siehe die MCP SDK-Dokumentation für StreamableHTTPClientTransport.

Rückwärtskompatibilität mit HTTP+SSE

Clients und Server können Rückwärtskompatibilität mit dem veralteten HTTP+SSE-Transport aufrechterhalten.

Server, die ältere Clients unterstützen möchten, sollten weiterhin sowohl die SSE- (/events) als auch die POST-Endpunkte (/message) des alten Transports hosten, zusätzlich zum neuen MCP-Endpunkt, der für den Streamable HTTP-Transport definiert ist.

SSE-Transport (Legacy)

Server-Sent Events (SSE)-Transport läuft auf einem Remote-Server und kommuniziert über HTTP/HTTPS. Für neue Remote-Server verwenden Sie stattdessen Streamable HTTP-Transport.

Wie SSE-Transport funktioniert

  1. Bob verbindet sich über eine HTTP-GET-Anfrage mit dem SSE-Endpunkt des Servers
  2. Dies stellt eine persistente Verbindung her, über die der Server Ereignisse an Bob senden kann
  3. Für die Client-zu-Server-Kommunikation sendet Bob HTTP-POST-Anfragen an einen separaten Endpunkt
  4. Die Kommunikation erfolgt über zwei Kanäle:
    • Ereignisstrom (GET): Server-zu-Client-Updates
    • Nachrichten-Endpunkt (POST): Client-zu-Server-Anfragen
Client                             Server
  |                                  |
  |---- HTTP GET /events ----------->| (SSE-Verbindung herstellen)
  |<---- SSE-Ereignisstrom -----------| (persistente Verbindung)
  |                                  |
  |---- HTTP POST /message --------->| (Client-Anfrage)
  |<---- SSE-Ereignis mit Antwort ---| (Server-Antwort)
  |                                  |

SSE-Eigenschaften

  • Remote-Zugriff: Kann auf einer anderen Maschine als Bob gehostet werden
  • Skalierbarkeit: Kann mehrere Client-Verbindungen gleichzeitig verarbeiten
  • Protokoll: Funktioniert über Standard-HTTP (keine speziellen Protokolle erforderlich)
  • Persistenz: Hält eine persistente Verbindung für Server-zu-Client-Nachrichten aufrecht
  • Authentifizierung: Kann Standard-HTTP-Authentifizierungsmechanismen verwenden

Wann SSE verwenden

SSE-Transport ist geeignet für:

  • Remote-Zugriff über Netzwerke
  • Multi-Client-Szenarien
  • Öffentliche Dienste
  • Zentralisierte Werkzeuge, auf die viele Benutzer zugreifen müssen
  • Integration mit Webdiensten

SSE-Implementierungsbeispiel

import express from 'express';

const app = express();
const server = new Server({name: 'remote-server', version: '1.0.0'});
// Werkzeuge registrieren...

// SSE-Transport verwenden
const transport = new SSEServerTransport(server);
app.use('/mcp', transport.requestHandler());
app.listen(3000, () => {
  console.log('MCP-Server hört auf Port 3000');
});

Bereitstellungsüberlegungen

Die Wahl zwischen STDIO und Remote-Transporten (Streamable HTTP oder SSE) wirkt sich direkt darauf aus, wie Sie Ihre MCP-Server bereitstellen und verwalten.

STDIO: Lokale Bereitstellung

STDIO-Server laufen lokal auf derselben Maschine wie Bob:

  • Installation: Die ausführbare Serverdatei muss auf dem Computer jedes Benutzers installiert werden
  • Verteilung: Sie müssen Installationspakete für verschiedene Betriebssysteme bereitstellen
  • Updates: Jede Instanz muss separat aktualisiert werden
  • Ressourcen: Verwendet CPU, Speicher und Festplatte der lokalen Maschine
  • Zugriffskontrolle: Verlässt sich auf die Dateisystemberechtigungen der lokalen Maschine
  • Integration: Einfache Integration mit lokalen Systemressourcen (Dateien, Prozesse)
  • Ausführung: Startet und stoppt mit Bob (Kindprozess-Lebenszyklus)
  • Abhängigkeiten: Alle Abhängigkeiten müssen auf dem Computer des Benutzers installiert werden

Beispiel-Anwendungsfall:

Ein lokales Dateisuch-Werkzeug mit STDIO würde:

  • Auf dem Computer des Benutzers laufen
  • Direkten Zugriff auf das lokale Dateisystem haben
  • Bei Bedarf von Bob gestartet werden
  • Keine Netzwerkkonfiguration erfordern
  • Neben Bob oder über einen Paketmanager installiert werden müssen

Remote: Gehostete Bereitstellung

Remote-Server (Streamable HTTP oder SSE) können auf Remote-Servern bereitgestellt und über das Netzwerk aufgerufen werden:

  • Installation: Einmal auf einem Server installiert, von vielen Benutzern aufgerufen
  • Verteilung: Einzelne Bereitstellung bedient mehrere Clients
  • Updates: Zentralisierte Updates betreffen alle Benutzer sofort
  • Ressourcen: Verwendet Serverressourcen, nicht lokale Maschinenressourcen
  • Zugriffskontrolle: Verwaltet durch Authentifizierungs- und Autorisierungssysteme
  • Integration: Komplexere Integration mit benutzerspezifischen Ressourcen
  • Ausführung: Läuft als unabhängiger Dienst (oft kontinuierlich)
  • Abhängigkeiten: Auf dem Server verwaltet, nicht auf Benutzermaschinen

Beispiel-Anwendungsfall:

Ein Datenbankabfrage-Werkzeug mit Remote-Transport würde:

  • Auf einem zentralen Server laufen
  • Sich mit Datenbanken mit serverseitigen Anmeldeinformationen verbinden
  • Für mehrere Benutzer kontinuierlich verfügbar sein
  • Ordnungsgemäße Netzwerksicherheitskonfiguration erfordern
  • Mit Container- oder Cloud-Technologien bereitgestellt werden

Hybrid-Ansätze

Einige Szenarien profitieren von einem Hybrid-Ansatz:

  1. STDIO mit Netzwerkzugriff: Ein lokaler STDIO-Server, der als Proxy für Remote-Dienste fungiert
  2. Remote mit lokalen Befehlen: Ein Remote-Server, der Operationen auf der Client-Maschine über Callbacks auslösen kann
  3. Gateway-Muster: STDIO-Server für lokale Operationen, die sich mit Remote-Servern für spezialisierte Funktionen verbinden

Transportvergleich

ÜberlegungSTDIOStreamable HTTP / SSE
StandortNur lokale MaschineLokal oder remote
ClientsEinzelner ClientMehrere Clients
LeistungGeringere LatenzHöhere Latenz (Netzwerk-Overhead)
EinrichtungskomplexitätEinfacherKomplexer (erfordert HTTP-Server)
SicherheitInhärent sicherErfordert explizite Sicherheitsmaßnahmen
NetzwerkzugriffNicht erforderlichErforderlich
SkalierbarkeitAuf lokale Maschine beschränktKann über Netzwerk verteilt werden
BereitstellungInstallation pro BenutzerZentralisierte Installation
UpdatesVerteilte UpdatesZentralisierte Updates
RessourcennutzungVerwendet Client-RessourcenVerwendet Server-Ressourcen
AbhängigkeitenClientseitige AbhängigkeitenServerseitige Abhängigkeiten

Transporte in Bob konfigurieren

Detaillierte Informationen zur Konfiguration von Transporten in Bob, einschließlich Beispielkonfigurationen, finden Sie unter MCP in Bob.

Wie ist dieses Thema?