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

Protokollaushandlung

Wenn Bob eine Verbindung zu einem Streamable HTTP-Server herstellt, verwendet er die Option protocolNegotiation, um festzulegen, wie eine Protokollversion vereinbart werden soll. HTTP-Server sind standardmäßig auf "auto" eingestellt.

WertBeschreibung
"auto"Bob sendet vor initialize eine server/discover-Prüfung (Probe), um die höchste beidseitig unterstützte Protokollversion auszuhandeln. Standard für HTTP-Server.
"legacy"Bob überspringt die Prüfung und stellt die Verbindung direkt über den initialize-Handshake her, der mit allen MCP-Servern kompatibel ist.
{ "pin": "<version>" }Bob verbindet sich mit einer bestimmten Protokollversion (z. B. { "pin": "2024-11-05" }).

Wenn bei einem HTTP-Server ein Timeout mit MCP connection timed out after 10000ms auftritt, reagiert der Server möglicherweise nicht auf die server/discover-Prüfung. Setzen Sie "protocolNegotiation": "legacy", um die Prüfung zu überspringen:

{
  "mcpServers": {
    "my-server": {
      "url": "https://ihre-server-url.com/mcp",
      "protocolNegotiation": "legacy"
    }
  }
}

Weitere Details finden Sie unter Protokollaushandlung in „MCP in Bob verwenden“.

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

Bobs MCP-Client fällt nicht auf den HTTP+SSE-Transport zurück. Die folgende Anleitung richtet sich an Server-Autoren, die ihren Streamable HTTP-Server für ältere Clients zugänglich halten möchten, die Streamable HTTP noch nicht unterstützen.

Server, die ältere Clients unterstützen müssen, sollten weiterhin sowohl den SSE-Endpunkt (/events) als auch den POST-Endpunkt (/message) des alten Transports neben dem neuen MCP-Endpunkt für den Streamable HTTP-Transport hosten.

SSE-Transport (entfernt)

Bobs MCP-Client unterstützt den eigenständigen HTTP+SSE-Transport (MCP-Spezifikation 2024-11-05) nicht mehr. Server, die ausschließlich den HTTP+SSE-Transport verwenden, können keine Verbindung zu Bob herstellen.

Hinweis:

SSE als Antwortkanal innerhalb einer Streamable HTTP-Verbindung wird weiterhin unterstützt. Bob kann SSE-Streams von einem Streamable HTTP-Server empfangen. Nur der eigenständige HTTP+SSE-Transport (mit separaten /events- und /message-Endpunkten) wurde entfernt.

Migration vom SSE-Transport

Wenn Sie einen bestehenden Server haben, der den HTTP+SSE-Transport verwendet, migrieren Sie zu Streamable HTTP-Transport oder STDIO-Transport:

  • Streamable HTTP: Stellen Sie einen einzelnen MCP-Endpunkt bereit, der HTTP-POST-Anfragen akzeptiert. Dies ist der empfohlene Weg für Remote-Server. Siehe Streamable HTTP-Transport.
  • STDIO: Wenn der Server lokal auf derselben Maschine wie Bob läuft, konvertieren Sie ihn zu einem STDIO-Server. Siehe STDIO-Transport.

Bereitstellungsüberlegungen

Die Wahl zwischen STDIO und Streamable HTTP-Transport 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) 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
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?