Transporty serwerów MCP

MCP obsługuje mechanizmy transportu do komunikacji między Bob Shell a serwerami MCP.

Przegląd

MCP oferuje trzy opcje transportu, z których każda jest odpowiednia do różnych scenariuszy wdrożenia:

Każdy transport ma odrębne cechy, zalety i zastosowania.

Transport STDIO

Transport STDIO działa lokalnie na Twoim komputerze i komunikuje się przez standardowe strumienie wejścia/wyjścia.

Jak działa transport STDIO

  1. Bob uruchamia serwer MCP jako proces potomny
  2. Komunikacja odbywa się przez strumienie procesów: Bob zapisuje do STDIN serwera, serwer odpowiada przez STDOUT
  3. Każda wiadomość jest rozdzielona znakiem nowej linii
  4. Wiadomości są sformatowane jako JSON-RPC 2.0
Klient                    Serwer
  |                         |
  |---- wiadomość JSON ---->| (przez STDIN)
  |                         | (przetwarza żądanie)
  |<---- wiadomość JSON ----| (przez STDOUT)
  |                         |

Cechy STDIO

  • Lokalność: Działa na tej samej maszynie co Bob
  • Wydajność: Bardzo niskie opóźnienia i narzut (bez stosu sieciowego)
  • Prostota: Bezpośrednia komunikacja między procesami bez konfiguracji sieciowej
  • Relacja: Relacja jeden-do-jednego między klientem a serwerem
  • Bezpieczeństwo: Z natury bezpieczniejszy bez ekspozycji sieciowej

Kiedy używać STDIO

Transport STDIO jest idealny do:

  • Lokalnych integracji i narzędzi działających na tej samej maszynie
  • Operacji wymagających wysokiego bezpieczeństwa
  • Wymagań niskich opóźnień
  • Scenariuszy z jednym klientem (jedna instancja Bob na serwer)
  • Narzędzi i skryptów wiersza poleceń

Przykład implementacji STDIO

const server = new Server({name: 'local-server', version: '1.0.0'});
// Zarejestruj narzędzia...

// Użyj transportu STDIO
const transport = new StdioServerTransport(server);
transport.listen();

Transport Streamable HTTP

Transport Streamable HTTP to nowoczesny standard zdalnej komunikacji z serwerem MCP, zastępujący starszy transport HTTP+SSE. Działa przez HTTP/HTTPS i umożliwia bardziej elastyczne implementacje serwerów.

Jak działa transport Streamable HTTP

  1. Serwer udostępnia jeden punkt końcowy HTTP (punkt końcowy MCP) obsługujący metody POST i GET
  2. Bob wysyła żądania do tego punktu końcowego MCP za pomocą HTTP POST
  3. Serwer przetwarza żądanie i odsyła odpowiedź
  4. Opcjonalnie serwer może używać Server-Sent Events (SSE) przez to samo połączenie, aby przesyłać strumieniowo wiele wiadomości lub powiadomień do Bob

Umożliwia to zarówno podstawowe interakcje żądanie-odpowiedź, jak i bardziej zaawansowane przesyłanie strumieniowe i komunikację inicjowaną przez serwer.

Klient                             Serwer
  |                                  |
  |---- HTTP POST /mcp_endpoint ---->| (żądanie klienta)
  |                                  | (przetwarza żądanie)
  |<--- Odpowiedź HTTP / Strumień SSE| (odpowiedź serwera / strumień)
  |                                  |

Cechy Streamable HTTP

  • Nowoczesny standard: Preferowana metoda dla nowych zdalnych implementacji serwerów MCP
  • Zdalny dostęp: Może być hostowany na innej maszynie niż Bob
  • Skalowalność: Może obsługiwać wiele jednoczesnych połączeń klientów
  • Protokół: Działa przez standardowy HTTP/HTTPS
  • Elastyczność: Obsługuje proste żądanie-odpowiedź i zaawansowane przesyłanie strumieniowe
  • Jeden punkt końcowy: Używa jednej ścieżki URL dla całej komunikacji MCP
  • Uwierzytelnianie: Może używać standardowych mechanizmów uwierzytelniania HTTP
  • Wsteczna kompatybilność: Serwery mogą zachować kompatybilność ze starszymi klientami HTTP+SSE

Kiedy używać Streamable HTTP

Transport Streamable HTTP jest idealny do:

  • Wszystkich nowych zdalnych implementacji serwerów MCP
  • Serwerów wymagających solidnej, skalowalnej i elastycznej komunikacji
  • Integracji mogących obejmować przesyłanie strumieniowe danych lub powiadomienia wysyłane przez serwer
  • Usług publicznych lub scentralizowanych narzędzi
  • Zastępowania starszych implementacji transportu SSE

Przykład implementacji Streamable HTTP

Konfiguracja w ~/.bob/mcp_settings.json (globalna) lub .bob/mcp.json (projekt):

{
  "mcpServers": {
    "StreamableHTTPMCPName": {
      "httpURL": "http://localhost:8080/mcp"
    }
  }
}

Implementację po stronie serwera znajdziesz w dokumentacji MCP SDK dla StreamableHTTPClientTransport.

Wsteczna kompatybilność z HTTP+SSE

Klienci i serwery mogą zachować wsteczną kompatybilność z wycofanym transportem HTTP+SSE.

Serwery chcące obsługiwać starszych klientów powinny nadal hostować zarówno punkty końcowe SSE (/events), jak i POST (/message) starego transportu, obok nowego punktu końcowego MCP zdefiniowanego dla transportu Streamable HTTP.

Transport SSE (starszy)

Transport Server-Sent Events (SSE) działa na zdalnym serwerze i komunikuje się przez HTTP/HTTPS. Dla nowych serwerów zdalnych używaj zamiast tego transportu Streamable HTTP.

Jak działa transport SSE

  1. Bob łączy się z punktem końcowym SSE serwera przez żądanie HTTP GET
  2. Ustanawia to trwałe połączenie, przez które serwer może przesyłać zdarzenia do Bob
  3. Do komunikacji klient-serwer Bob wykonuje żądania HTTP POST do oddzielnego punktu końcowego
  4. Komunikacja odbywa się przez dwa kanały:
    • Strumień zdarzeń (GET): Aktualizacje serwer-klient
    • Punkt końcowy wiadomości (POST): Żądania klient-serwer
Klient                             Serwer
  |                                  |
  |---- HTTP GET /events ----------->| (ustanów połączenie SSE)
  |<---- strumień zdarzeń SSE -------| (trwałe połączenie)
  |                                  |
  |---- HTTP POST /message --------->| (żądanie klienta)
  |<---- zdarzenie SSE z odpowiedzią-| (odpowiedź serwera)
  |                                  |

Cechy SSE

  • Zdalny dostęp: Może być hostowany na innej maszynie niż Bob
  • Skalowalność: Może obsługiwać wiele jednoczesnych połączeń klientów
  • Protokół: Działa przez standardowy HTTP (bez specjalnych protokołów)
  • Trwałość: Utrzymuje trwałe połączenie dla wiadomości serwer-klient
  • Uwierzytelnianie: Może używać standardowych mechanizmów uwierzytelniania HTTP

Kiedy używać SSE

Transport SSE nadaje się do:

  • Zdalnego dostępu przez sieci
  • Scenariuszy z wieloma klientami
  • Usług publicznych
  • Scentralizowanych narzędzi, do których dostęp ma wielu użytkowników
  • Integracji z usługami webowymi

Przykład implementacji SSE

import express from 'express';

const app = express();
const server = new Server({name: 'remote-server', version: '1.0.0'});
// Zarejestruj narzędzia...

// Użyj transportu SSE
const transport = new SSEServerTransport(server);
app.use('/mcp', transport.requestHandler());
app.listen(3000, () => {
  console.log('Serwer MCP nasłuchuje na porcie 3000');
});

Uwagi dotyczące wdrożenia

Wybór między STDIO a transportami zdalnymi (Streamable HTTP lub SSE) bezpośrednio wpływa na sposób wdrażania i zarządzania serwerami MCP.

STDIO: Wdrożenie lokalne

Serwery STDIO działają lokalnie na tej samej maszynie co Bob:

  • Instalacja: Plik wykonywalny serwera musi być zainstalowany na komputerze każdego użytkownika
  • Dystrybucja: Musisz dostarczyć pakiety instalacyjne dla różnych systemów operacyjnych
  • Aktualizacje: Każda instancja musi być aktualizowana osobno
  • Zasoby: Używa procesora, pamięci i dysku lokalnej maszyny
  • Kontrola dostępu: Opiera się na uprawnieniach systemu plików lokalnej maszyny
  • Integracja: Łatwa integracja z lokalnymi zasobami systemowymi (pliki, procesy)
  • Wykonanie: Startuje i zatrzymuje się razem z Bob (cykl życia procesu potomnego)
  • Zależności: Wszystkie zależności muszą być zainstalowane na komputerze użytkownika

Przykładowe zastosowanie:

Lokalne narzędzie do wyszukiwania plików używające STDIO:

  • Działa na Twoim komputerze
  • Ma bezpośredni dostęp do lokalnego systemu plików
  • Startuje na żądanie Bob
  • Nie wymaga konfiguracji sieciowej
  • Musi być zainstalowane obok Bob lub przez menedżer pakietów

Zdalne: Wdrożenie hostowane

Serwery zdalne (Streamable HTTP lub SSE) można wdrażać na zdalnych serwerach i uzyskiwać do nich dostęp przez sieć:

  • Instalacja: Zainstalowane raz na serwerze, dostępne dla wielu użytkowników
  • Dystrybucja: Jedno wdrożenie obsługuje wielu klientów
  • Aktualizacje: Scentralizowane aktualizacje natychmiast wpływają na wszystkich użytkowników
  • Zasoby: Używa zasobów serwera, nie lokalnej maszyny
  • Kontrola dostępu: Zarządzana przez systemy uwierzytelniania i autoryzacji
  • Integracja: Bardziej złożona integracja z zasobami specyficznymi dla użytkownika
  • Wykonanie: Działa jako niezależna usługa (często ciągle)
  • Zależności: Zarządzane na serwerze, nie na komputerach użytkowników

Przykładowe zastosowanie:

Narzędzie do zapytań bazodanowych używające transportu zdalnego:

  • Działa na centralnym serwerze
  • Łączy się z bazami danych za pomocą poświadczeń po stronie serwera
  • Jest stale dostępne dla wielu użytkowników
  • Wymaga odpowiedniej konfiguracji bezpieczeństwa sieciowego
  • Jest wdrażane przy użyciu technologii kontenerów lub chmury

Podejścia hybrydowe

Niektóre scenariusze korzystają z podejścia hybrydowego:

  1. STDIO z dostępem sieciowym: Lokalny serwer STDIO działający jako proxy dla usług zdalnych
  2. Zdalne z lokalnymi poleceniami: Zdalny serwer, który może wyzwalać operacje na komputerze klienta przez callbacki
  3. Wzorzec bramy: Serwery STDIO dla operacji lokalnych łączące się ze zdalnymi serwerami dla wyspecjalizowanych funkcji

Porównanie transportów

KryteriumSTDIOStreamable HTTP / SSE
LokalizacjaTylko lokalna maszynaLokalnie lub zdalnie
KlienciJeden klientWielu klientów
WydajnośćNiższe opóźnieniaWyższe opóźnienia (narzut sieciowy)
Złożoność konfiguracjiProstszeBardziej złożone (wymaga serwera HTTP)
BezpieczeństwoZ natury bezpieczneWymaga jawnych środków bezpieczeństwa
Dostęp sieciowyNiewymaganyWymagany
SkalowalnośćOgraniczone do lokalnej maszynyMożna dystrybuować przez sieć
WdrożenieInstalacja per użytkownikScentralizowana instalacja
AktualizacjeRozproszone aktualizacjeScentralizowane aktualizacje
Użycie zasobówZasoby klientaZasoby serwera
ZależnościZależności po stronie klientaZależności po stronie serwera

Konfiguracja transportów w Bob Shell

Szczegółowe informacje na temat konfigurowania transportów w Bob Shell, w tym przykładowe konfiguracje, znajdziesz w dokumentacji MCP w Bob Shell.

Jak oceniasz ten temat?