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:
- Transport STDIO (serwery lokalne)
- Transport Streamable HTTP (nowoczesny standard dla serwerów zdalnych)
- Transport SSE (starsza opcja zdalna)
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
- Bob uruchamia serwer MCP jako proces potomny
- Komunikacja odbywa się przez strumienie procesów: Bob zapisuje do STDIN serwera, serwer odpowiada przez 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)
| |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
- Serwer udostępnia jeden punkt końcowy HTTP (punkt końcowy MCP) obsługujący metody POST i GET
- Bob wysyła żądania do tego punktu końcowego MCP za pomocą HTTP POST
- Serwer przetwarza żądanie i odsyła odpowiedź
- 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
- Bob łączy się z punktem końcowym SSE serwera przez żądanie HTTP GET
- Ustanawia to trwałe połączenie, przez które serwer może przesyłać zdarzenia do Bob
- Do komunikacji klient-serwer Bob wykonuje żądania HTTP POST do oddzielnego punktu końcowego
- 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:
- STDIO z dostępem sieciowym: Lokalny serwer STDIO działający jako proxy dla usług zdalnych
- Zdalne z lokalnymi poleceniami: Zdalny serwer, który może wyzwalać operacje na komputerze klienta przez callbacki
- Wzorzec bramy: Serwery STDIO dla operacji lokalnych łączące się ze zdalnymi serwerami dla wyspecjalizowanych funkcji
Porównanie transportów
| Kryterium | STDIO | Streamable HTTP / SSE |
|---|---|---|
| Lokalizacja | Tylko lokalna maszyna | Lokalnie lub zdalnie |
| Klienci | Jeden klient | Wielu klientów |
| Wydajność | Niższe opóźnienia | Wyższe opóźnienia (narzut sieciowy) |
| Złożoność konfiguracji | Prostsze | Bardziej złożone (wymaga serwera HTTP) |
| Bezpieczeństwo | Z natury bezpieczne | Wymaga jawnych środków bezpieczeństwa |
| Dostęp sieciowy | Niewymagany | Wymagany |
| Skalowalność | Ograniczone do lokalnej maszyny | Można dystrybuować przez sieć |
| Wdrożenie | Instalacja per użytkownik | Scentralizowana instalacja |
| Aktualizacje | Rozproszone aktualizacje | Scentralizowane aktualizacje |
| Użycie zasobów | Zasoby klienta | Zasoby serwera |
| Zależności | Zależności po stronie klienta | Zależ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.