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:
- Transport STDIO (serwery lokalne)
- Transport Streamable HTTP (nowoczesny standard dla serwerów zdalnych)
- Transport SSE (usunięta opcja zdalna)
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
- Bob uruchamia serwer MCP jako proces potomny
- Komunikacja odbywa się przez strumienie procesu: Bob pisze do STDIN serwera, serwer odpowiada do STDOUT
- Każda wiadomość jest rozdzielona znakiem nowej linii
- 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
- Serwer udostępnia pojedynczy punkt końcowy HTTP (punkt końcowy MCP), który obsługuje zarówno metody POST, jak i GET
- Bob wysyła żądania do tego punktu końcowego MCP używając HTTP POST
- Serwer przetwarza żądanie i wysyła odpowiedź
- 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.
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:
- STDIO z dostępem do sieci: Lokalny serwer STDIO, który działa jako proxy do zdalnych usług
- Zdalne z lokalnymi poleceniami: Zdalny serwer, który może wyzwalać operacje na komputerze klienta przez wywołania zwrotne
- Wzorzec bramy: Serwery STDIO dla operacji lokalnych, które łączą się ze zdalnymi serwerami dla specjalistycznych funkcji
Porównanie transportów
| Rozważanie | STDIO | Streamable HTTP |
|---|---|---|
| Lokalizacja | Tylko lokalny komputer | Lokalny lub zdalny |
| Klienci | Pojedynczy klient | Wielu klientów |
| Wydajność | Niższe opóźnienie | Wyższe opóźnienie (narzut sieciowy) |
| Złożoność konfiguracji | Prostsza | Bardziej złożona (wymaga serwera HTTP) |
| Bezpieczeństwo | Inherentnie bezpieczne | Wymaga jawnych środków bezpieczeństwa |
| Dostęp do sieci | Nie jest potrzebny | Wymagany |
| Skalowalność | Ograniczona do lokalnego komputera | Może być dystrybuowana przez sieć |
| Wdrożenie | Instalacja dla każdego użytkownika | Scentralizowana instalacja |
| Aktualizacje | Rozproszone aktualizacje | Scentralizowane aktualizacje |
| Użycie zasobów | Używa zasobów klienta | Używa zasobów serwera |
| Zależności | Zależności po stronie klienta | Zależ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.
Zrozumienie MCP
Model Context Protocol (MCP) to standaryzowany protokół komunikacyjny, który umożliwia systemom AI interakcję z zewnętrznymi narzędziami i usługami.
Używanie MCP w Bob
Model Context Protocol (MCP) rozszerza możliwości Boba poprzez łączenie z zewnętrznymi narzędziami i usługami. Ten przewodnik pokazuje, jak konfigurować, zarządzać i używać serwerów MCP z Bobem.