Skip to main content

Serwer MCP

DLA AGENTÓW AIChatGPTClaude

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ę:

  1. 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.
  2. 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).
  3. Ś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/schema lub logs://latest). Obsługuje subskrypcję aktualizacji: gdy zasób ulega zmianie, serwer wysyła powiadomienie notifications/resources/updated.
  • 3. Interfejs Szablonów (Prompts API): Biblioteka scenariuszy kontekstowych (np. review_pull_request lub debug_memory_leak), którą serwer eksportuje klientowi wraz z rekomendowanymi argumentami.
  • 4. Tryb wdrożenia:
    • Lokalny (Local Process): uruchamiany za pomocą npx, uvx lub docker run w połączeniu ze stdio.
    • 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.

3. Pipeline techniczny i mechanika wewnętrzna

Cykl życia przetwarzania żądania przez serwer MCP:

  1. Bootstrap & Protocol Binding (Uruchomienie procesu): Serwer inicjalizuje instancję klasy Server, przypina adapter transportowy (StdioServerTransport) i oczekuje na pakiet wejściowy initialize od klienta.
  2. 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.
  3. Validation & Execution (Walidacja argumentów i wykonanie): Po otrzymaniu żądania tools/call serwer 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).
  4. 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 strumienia stderr, 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 transporcie stdio natychmiast psuje to parser klienta. Zawsze używaj console.error() lub specjalistycznego loggera kierującego wyjście do stderr.
  • 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'), SIGTERM oraz SIGINT w 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/passwd skompromituje hosta. Zawsze normalizuj ścieżki i weryfikuj, czy mieszczą się one wewnątrz dozwolonego katalogu głównego.
/ Najczęściej zadawane pytaniaSchema.org FAQPage

FAQ: Serwer MCP

Za pomocą oficjalnego `@modelcontextprotocol/sdk` w TypeScript lub Python (`mcp`). Wystarczy zadeklarować instancję serwera, podłączyć transport `StdioServerTransport` lub `SSEServerTransport`, opisać schematy wejściowe za pomocą Zod/Pydantic oraz zarejestrować obsługę wywołań przez `setRequestHandler`.
/ Linki wewnętrzne
Wszystkie hasła