Serwer MCP
Usługa programowa lub proces w tle, który implementuje specyfikację MCP i zapewnia zewnętrznym klientom AI standaryzowany dostęp do wykonywania funkcji, odczytu zasobów oraz szablonów promptów.
1. Przegląd koncepcji i problem systemowy
Każda nowoczesna firma lub programista dysponuje unikalnym zestawem usług wewnętrznych: bazami danych typu proprietary, API mikrousług, specyficznymi narzędziami CLI czy skryptami wdrożeniowymi. Przed wprowadzeniem standardu MCP integracja tych narzędzi ze sztuczną inteligencją wymagała tworzenia dedykowanych pluginów dla każdego systemu z osobna.
MCP Server radykalnie upraszcza architekturę:
- Inkapsulacja sekretów: Wszystkie poufne klucze (hasła do baz danych, tokeny systemów płatniczych) przechowywane są wyłącznie po stronie serwera i nie trafiają do kontekstu LLM.
- Jednolity interfejs implementacji: Kod backendu piszesz raz, a staje się on automatycznie dostępny w dowolnym kliencie MCP (Cursor, Claude Code, Windsurf, wewnętrzne pipeline'y).
- Ścisłe typowanie kontraktu: Dzięki schematom Zod lub Pydantic serwer gwarantuje, że model przekaże jedynie poprawne parametry przed rozpoczęciem wykonania logiki biznesowej.
2. Taksonomia architektury i model mentalny
Architektura serwera opiera się na trzech funkcjonalnych interfejsach zdefiniowanych przez protokół:
- 1. Interfejs Narzędzi (Tools API):
Metody o efektach ubocznych wywoływane przez model. Każde narzędzie posiada unikalną nazwę, czytelny dla człowieka opis (wykorzystywany przez LLM do wyboru) oraz schemat
inputSchema. - 2. Interfejs Zasobów (Resources API):
Strumienie informacji adresowane URI przeznaczone do odczytu (np.:
postgres://analytics/users/schemalublogs://latest). Obsługuje subskrypcję aktualizacji: gdy zasób ulega zmianie, serwer wysyła powiadomienienotifications/resources/updated. - 3. Interfejs Szablonów (Prompts API):
Biblioteka scenariuszy kontekstowych (np.
review_pull_requestlubdebug_memory_leak), którą serwer eksportuje klientowi wraz z rekomendowanymi argumentami. - 4. Tryb wdrożenia:
- Lokalny (Local Process): uruchamiany za pomocą
npx,uvxlubdocker runw połączeniu zestdio. - Zdalna mikrousługa (Remote SSE): pełnoprawny kontener w chmurze obsługujący żądania przez HTTP Server-Sent Events z autoryzacją przy użyciu Bearer tokens.
- Lokalny (Local Process): uruchamiany za pomocą
3. Pipeline techniczny i mechanika wewnętrzna
Cykl życia przetwarzania żądania przez serwer MCP:
- Bootstrap & Protocol Binding (Uruchomienie procesu):
Serwer inicjalizuje instancję klasy
Server, przypina adapter transportowy (StdioServerTransport) i oczekuje na pakiet wejściowyinitializeod klienta. - Capability Registration (Rejestracja możliwości):
Serwer rejestruje handlerów:
ListToolsRequestSchema: zwraca tablicę JSON-schematów dostępnych narzędzi.CallToolRequestSchema: routuje wywołanie konkretnej funkcji.
- Validation & Execution (Walidacja argumentów i wykonanie):
Po otrzymaniu żądania
tools/callserwer weryfikuje przekazane argumenty za pomocą walidatora schematu. W przypadku niezgodności zwracany jest strukturalny błąd. Jeśli dane są poprawne, wykonywana jest docelowa logika biznesowa (zapytanie do bazy danych, wywołanie AWS). - Structured Response Serialization (Formowanie odpowiedzi):
Wynik wykonania owijany jest w protokołową tablicę
content: [{ type: "text", text: "..." }]. Wszystkie wewnętrzne logi systemowe kierowane są do strumieniastderr, aby nie naruszyć integralności kanału JSON-RPC.
4. Praktyczne scenariusze inżynierskie w produkcji
01. Bezpieczna brama korporacyjna do mikrousług
Zespół inżynierski tworzy pojedynczy serwer MCP w TypeScript, który umożliwia agentom sprawdzanie statusu incydentów w PagerDuty, monitorowanie buildów w GitHub Actions oraz generowanie testowych tokenów w wewnętrznym IdP bez ręcznego przełączania między panelami webowymi.
02. Lokalny asystent DevOps dla Kubernetes
Serwer MCP działa na maszynie inżyniera z lokalnymi kredensami kubectl. Udostępnia on agentowi w Cursor narzędzia k8s_get_pods, k8s_describe_pod, k8s_get_logs. Model natychmiast lokalizuje przyczynę błędu CrashLoopBackOff, nie wymagając od człowieka ręcznego kopiowania logów.
03. Interfejs sprzętowy dla IoT i systemów wbudowanych
Serwer MCP wdrożony na Raspberry Pi lub lokalnym serwerze udostępnia dostęp do interakcji z portami sprzętowymi (GPIO/Serial). Programista może tekstowo poprosić agenta o przeprowadzenie cyklu testowego podłączonego mikrokontrolera.
5. Pułapki, typowe błędy i bezpieczeństwo
- Wyciek artefaktów debugowania do stdout: Najczęstszy błąd początkujących – pozostawiony
console.log("data", res)w ciele funkcji. W transporciestdionatychmiast psuje to parser klienta. Zawsze używajconsole.error()lub specjalistycznego loggera kierującego wyjście dostderr. - Procesy zombie (Resource Leaking): Jeśli klient zostanie awaryjnie zamknięty, proces potomny serwera może pozostać zawieszony w pamięci. Zawsze podpinaj listenerów do zdarzeń
process.stdin.on('close'),SIGTERMorazSIGINTw celu graceful shutdown połączeń z bazą danych. - Brak sanitizacji ścieżek (Path Traversal): Jeśli narzędzie odczytuje pliki według ścieżki wskazanej przez model, przekazanie argumentu
../../../../etc/passwdskompromituje hosta. Zawsze normalizuj ścieżki i weryfikuj, czy mieszczą się one wewnątrz dozwolonego katalogu głównego.
FAQ: Serwer MCP
Powiązane pojęcia
MCP (Model Context Protocol)
Otwarty standard firmy Anthropic oparty na JSON-RPC 2.0, służący do ujednolicenia dwukierunkowego połączenia asystentów AI z narzędziami zewnętrznymi, bazami danych i środowiskiem systemowym.
Klient MCP
Środowisko programistyczne (Claude Code, Cursor, Cline, agenci SDK), które zarządza cyklem życia połączeń z serwerami MCP, agreguje manifesty narzędzi oraz kontroluje uprawnienia dostępu modelu.
Wywoływanie narzędzi (Function Calling)
Niskopoziomowy mechanizm modeli językowych, który umożliwia im niezawodne generowanie zwalidowanych parametrów w formacie JSON do wykonywania funkcji w zewnętrznym środowisku programistycznym.
Docker dla agentów i botów (konteneryzacja w piaskownicy)
Metodologia izolacji autonomicznych agentów AI, interpreterów kodu oraz usług działających w tle w lekkich piaskownicach Docker przy użyciu cgroups i przestrzeni nazw (Namespaces) w celu zapobiegania uszkodzeniu systemu operacyjnego hosta.