KonfiguracjaMCP

Transporty serwerów MCP

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

Przegląd

MCP oferuje trzy opcje transportu, każda odpowiednia dla różnych scenariuszy wdrożenia:

Każdy transport ma odrębne cechy, zalety i przypadki użycia.

Transport STDIO

Transport STDIO działa lokalnie na twoim komputerze i komunikuje się poprzez 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 procesu: Bob pisze do STDIN serwera, serwer odpowiada do 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)
  |                         |

Charakterystyka STDIO

  • Lokalność: Działa na tym samym komputerze co Bob
  • Wydajność: Bardzo niskie opóźnienie i narzut (brak stosu sieciowego)
  • Prostota: Bezpośrednia komunikacja procesów bez konfiguracji sieciowej
  • Relacja: Relacja jeden-do-jednego między klientem a serwerem
  • Bezpieczeństwo: Inherentnie bardziej bezpieczne bez ekspozycji sieciowej

Kiedy używać STDIO

Transport STDIO jest idealny dla:

  • Lokalnych integracji i narzędzi działających na tym samym komputerze
  • Operacji wrażliwych na bezpieczeństwo
  • Wymagań niskiego opóźnienia
  • Scenariuszy z jednym klientem (jedna instancja Boba na serwer)
  • Narzędzi wiersza poleceń lub rozszerzeń IDE

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 jest nowoczesnym standardem dla zdalnej komunikacji serwera MCP, zastępując 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 pojedynczy punkt końcowy HTTP (punkt końcowy MCP), który obsługuje zarówno metody POST, jak i GET
  2. Bob wysyła żądania do tego punktu końcowego MCP używając HTTP POST
  3. Serwer przetwarza żądanie i wysyła odpowiedź
  4. Opcjonalnie serwer może używać Server-Sent Events (SSE) przez to samo połączenie do strumieniowania wielu wiadomości lub powiadomień do Boba

To umożliwia podstawowe interakcje żądanie-odpowiedź, jak również bardziej zaawansowane strumieniowanie i komunikację inicjowaną przez serwer.

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

Charakterystyka Streamable HTTP

  • Nowoczesny standard: Preferowana metoda dla nowych implementacji zdalnych serwerów MCP
  • Dostęp zdalny: Może być hostowany na innym komputerze niż Bob
  • Skalowalność: Może obsługiwać wiele połączeń klientów jednocześnie
  • Protokół: Działa przez standardowy HTTP/HTTPS
  • Elastyczność: Obsługuje proste żądanie-odpowiedź i zaawansowane strumieniowanie
  • Pojedynczy punkt końcowy: Używa pojedynczej ścieżki URL dla całej komunikacji MCP
  • Uwierzytelnianie: Może używać standardowych mechanizmów uwierzytelniania HTTP
  • Kompatybilność wsteczna: Serwery mogą utrzymywać kompatybilność ze starszymi klientami HTTP+SSE

Kiedy używać Streamable HTTP

Transport Streamable HTTP jest idealny dla:

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

Negocjacja protokołu

Gdy Bob łączy się z serwerem Streamable HTTP, używa opcji protocolNegotiation, aby ustalić wersję protokołu. Serwery HTTP domyślnie używają "auto".

WartośćOpis
"auto"Bob wysyła sondę server/discover przed initialize, aby wynegocjować najwyższą wzajemnie obsługiwaną wersję protokołu. Domyślnie dla serwerów HTTP.
"legacy"Bob pomija sondę i łączy się bezpośrednio przy użyciu uzgadniania initialize, kompatybilnego ze wszystkimi serwerami MCP.
{ "pin": "<version>" }Bob łączy się używając określonej wersji protokołu (na przykład { "pin": "2024-11-05" }).

Jeśli serwer HTTP przekracza limit czasu z komunikatem MCP connection timed out after 10000ms, serwer może nie odpowiadać na sondę server/discover. Ustaw "protocolNegotiation": "legacy", aby pominąć sondę:

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

Aby uzyskać więcej szczegółów, zobacz Negocjacja protokołu w „Używanie MCP w Bob".

Przykład implementacji Streamable HTTP

Konfiguracja w settings.json:

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

Dla implementacji po stronie serwera, zapoznaj się z dokumentacją SDK MCP dla StreamableHTTPClientTransport.

Kompatybilność wsteczna z HTTP+SSE

Klient MCP Boba nie przełącza się na transport HTTP+SSE. Poniższe wskazówki są przeznaczone dla autorów serwerów, którzy chcą, aby ich serwer Streamable HTTP pozostał dostępny dla starszych klientów, które jeszcze nie obsługują Streamable HTTP.

Serwery obsługujące 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 (usunięty)

Klient MCP Boba nie obsługuje już samodzielnego transportu HTTP+SSE (specyfikacja MCP 2024-11-05). Serwery korzystające wyłącznie z transportu HTTP+SSE nie mogą połączyć się z Bobem.

Uwaga:

SSE jako kanał odpowiedzi w ramach połączenia Streamable HTTP jest nadal obsługiwany. Bob może odbierać strumienie SSE z serwera Streamable HTTP. Usunięty został tylko samodzielny transport HTTP+SSE (z oddzielnymi punktami końcowymi /events i /message).

Migracja z transportu SSE

Jeśli masz istniejący serwer korzystający z transportu HTTP+SSE, zmigruj go na transport Streamable HTTP lub STDIO:

  • Streamable HTTP: Udostępnij jeden punkt końcowy MCP przyjmujący żądania HTTP POST. Jest to zalecana ścieżka dla serwerów zdalnych. Zobacz Transport Streamable HTTP.
  • STDIO: Jeśli serwer działa lokalnie na tym samym komputerze co Bob, przekonwertuj go na serwer STDIO. Zobacz Transport STDIO.

Rozważania dotyczące wdrożenia

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

STDIO: Wdrożenie lokalne

Serwery STDIO działają lokalnie na tym samym komputerze 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 lokalnego komputera
  • Kontrola dostępu: Opiera się na uprawnieniach systemu plików lokalnego komputera
  • Integracja: Łatwa integracja z lokalnymi zasobami systemowymi (pliki, procesy)
  • Wykonanie: Uruchamia się i zatrzymuje z Bobem (cykl życia procesu potomnego)
  • Zależności: Wszelkie zależności muszą być zainstalowane na komputerze użytkownika

Przykładowy przypadek użycia:

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

  • Działa na komputerze użytkownika
  • Ma bezpośredni dostęp do lokalnego systemu plików
  • Uruchamia się, gdy jest potrzebne przez Boba
  • Nie wymaga konfiguracji sieciowej
  • Musi być zainstalowane obok Boba lub przez menedżera pakietów

Zdalne: Wdrożenie hostowane

Serwery zdalne (Streamable HTTP) mogą być wdrożone na zdalnych serwerach i dostępne przez sieć:

  • Instalacja: Instalowane raz na serwerze, dostępne dla wielu użytkowników
  • Dystrybucja: Pojedyncze wdrożenie obsługuje wielu klientów
  • Aktualizacje: Scentralizowane aktualizacje wpływają na wszystkich użytkowników natychmiast
  • Zasoby: Używa zasobów serwera, a nie lokalnego komputera
  • 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, a nie na komputerach użytkowników

Przykładowy przypadek użycia:

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

  • Działa na centralnym serwerze
  • Łączy się z bazami danych przy użyciu danych uwierzytelniających po stronie serwera
  • Jest ciągle dostępne dla wielu użytkowników
  • Wymaga odpowiedniej konfiguracji bezpieczeństwa sieci
  • Jest wdrażane przy użyciu technologii kontenerowych lub chmurowych

Podejścia hybrydowe

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

  1. STDIO z dostępem do sieci: Lokalny serwer STDIO, który działa jako proxy do zdalnych usług
  2. Zdalne z lokalnymi poleceniami: Zdalny serwer, który może wyzwalać operacje na komputerze klienta przez wywołania zwrotne
  3. Wzorzec bramy: Serwery STDIO dla operacji lokalnych, które łączą się ze zdalnymi serwerami dla specjalistycznych funkcji

Porównanie transportów

RozważanieSTDIOStreamable HTTP
LokalizacjaTylko lokalny komputerLokalny lub zdalny
KlienciPojedynczy klientWielu klientów
WydajnośćNiższe opóźnienieWyższe opóźnienie (narzut sieciowy)
Złożoność konfiguracjiProstszaBardziej złożona (wymaga serwera HTTP)
BezpieczeństwoInherentnie bezpieczneWymaga jawnych środków bezpieczeństwa
Dostęp do sieciNie jest potrzebnyWymagany
SkalowalnośćOgraniczona do lokalnego komputeraMoże być dystrybuowana przez sieć
WdrożenieInstalacja dla każdego użytkownikaScentralizowana instalacja
AktualizacjeRozproszone aktualizacjeScentralizowane aktualizacje
Użycie zasobówUżywa zasobów klientaUżywa zasobów serwera
ZależnościZależności po stronie klientaZależności po stronie serwera

Konfiguruj transporty w Bobie

Aby uzyskać szczegółowe informacje o konfigurowaniu transportów w Bobie, w tym przykładowe konfiguracje, zobacz MCP w Bobie.

Jak oceniasz ten temat?