Przejdź do głównej zawartości

Wprowadzenie do Model Context Protocol

Model Context Protocol (MCP) to otwarty standard, dzięki któremu agent kodujący, taki jak Claude Code, Codex czy Cursor, wywołuje zewnętrzne narzędzia i czyta dane na żywo: pull requesty z GitHuba, błędy z Sentry, zgłoszenia z Lineara, przeglądarkę, bazę danych. We wrześniu 2026 większość serwerów wartych dodania to zdalne serwery hostowane przez dostawców, z logowaniem OAuth, a każdy serwer to nowa granica zaufania.

Ta strona jest dla programistów, którzy dodają pierwsze serwery, i dla tech leadów, którzy decydują, z których zespół może korzystać. Sytuacja, którą rozwiązuje: ktoś wkleił JSON serwera do README, połowa zespołu uruchamia go z prawem zapisu, nikt nie wie, z jakiego pakietu naprawdę pochodzi, a agent właśnie zmienił zgłoszenie na produkcji.

  • Co zmieniło się w 2026: bezstanowa specyfikacja 2026-07-28, którzy klienci ją obsługują i przejście na zdalne serwery z OAuth.
  • Plik konfiguracyjny i polecenie dla każdego agenta, sprawdzone na Claude Code 2.1.283 i codex-cli 0.157.1.
  • Jeden zdalny serwer (Sentry) dodany i zalogowany we wszystkich trzech agentach.
  • Czterokrokowy proces zespołowy: ocena, zawężenie do odczytu, dodanie w zakresie projektu, przegląd w PR.
  • Dwa prompty do skopiowania: jeden ocenia kandydata na serwer, drugi audytuje to, co już jest podłączone.

Host MCP to twój agent. Utrzymuje po jednym połączeniu klienta z każdym serwerem, a każdy serwer udostępnia narzędzia (akcje), zasoby (dane) i prompty. Agent czyta nazwę i opis każdego narzędzia, sam decyduje, kiedy je wywołać, i dostaje ustrukturyzowany wynik, który staje się kontekstem kolejnego kroku.

Serwer łączy się z agentem jednym z dwóch transportów:

  • stdio: agent uruchamia serwer jako lokalny proces (npx, uvx, docker run). Wybierz go dla lokalnych plików, lokalnej bazy albo serwera bez wersji hostowanej.
  • Streamable HTTP: serwer działa pod adresem URL i zwykle uwierzytelnia przez OAuth. Własne hostowane serwery udostępniają m.in. GitHub, Figma, Sentry, Linear, Atlassian, Notion, Supabase, Vercel, Stripe, Cloudflare, Datadog, PostHog, Slack i GitLab. Starszy transport HTTP+SSE jest przestarzały; nie wybieraj go w nowych konfiguracjach.

MCP stworzył Anthropic, który 2025-12-09 przekazał protokół fundacji Agentic AI Foundation (AAIF).

Aktualna wersja specyfikacji to 2026-07-28. Ta wersja sprawia, że protokół jest bezstanowy: znika handshake initialize i nagłówek Mcp-Session-Id, serwery muszą odpowiadać na server/discover, a Tasks przeniesiono do rozszerzenia. Oznacza jako przestarzałe Roots, Sampling i Logging oraz Dynamic Client Registration, którą zastępują Client ID Metadata Documents.

Nie wszyscy klienci nadążyli, więc to, jaki protokół dostajesz, zależy od agenta:

AgentObsługuje 2026-07-28?Sprawdzono
Claude CodeTak, negocjuje go domyślnie z bezpośrednimi serwerami HTTP we wszystkich instalacjach od v2.1.274. Wyłączenie: MCP_PROTOCOL_NEGOTIATION=legacychangelog, 2026-09-26
CodexNie. Funkcja mcp_2026_07_28 ma status under development i jest wyłączona, więc połączenia używają starszego protokołucodex features list, codex-cli 0.157.1
CursorNiesprawdzone: 2026-09-26 cursor.com był nieosiągalny ze środowiska, w którym powstał ten tekst—

Serwer, który obsługuje wyłącznie nową wersję, może więc działać w Claude Code i nie działać w Codeksie. Zmiany po stronie serwera opisuje MCP 2026-07-28: co się zmieniło i jak zmigrować serwer.

Nie. Official MCP Registry wciąż jest w wersji preview (API zamrożone na v0.1 od 2025-10-24). Zliczony przez API 2026-09-26 zawierał od 36 176 do 36 184 serwerów w najnowszych wersjach (liczba zmienia się co godzinę). Jedynym filtrem jest weryfikacja przestrzeni nazw. Kilka wpisów */github, */figma i */sentry pochodzi od wydawców niezwiązanych z tymi firmami. Używaj rejestru, żeby potwierdzić, kto publikuje serwer, a przed instalacją przeczytaj README samego dostawcy. Dopuszczanie serwerów w organizacji opisuje Rejestry i bramki MCP.

Każdy z trzech agentów czyta inny plik i każdy inaczej zawodzi, gdy użyjesz składni innego agenta.

Claude CodeCodexCursor
Zakres projektu (commitujesz).mcp.json w katalogu głównym repo.codex/config.toml, czytany tylko w zaufanym projekcie.cursor/mcp.json
Zakres osobistyclaude mcp add (domyślny zakres local, per projekt w ~/.claude.json) lub --scope user~/.codex/config.toml (tam zapisuje codex mcp add)~/.cursor/mcp.json
Serwer zdalnyclaude mcp add --transport http NAZWA URLcodex mcp add NAZWA --url URL"url": "…" w mcpServers
Logowanie/mcp w sesji albo claude mcp login NAZWAcodex mcp login NAZWAw ustawieniach MCP Cursora, gdy serwer o to poprosi
Sprawdzenieclaude mcp list, claude mcp get NAZWAcodex mcp list, codex mcp get NAZWA --jsonstatus serwera w ustawieniach MCP Cursora

Polecenia z kolumn Claude Code i Codex sprawdzono 2026-09-26 na Claude Code 2.1.283 i codex-cli 0.157.1, łącznie z zachowaniem .codex/config.toml w zaufanym projekcie. Kształty plików Cursora pochodzą z README dostawców (GitHub, Context7, Sentry) i nie były testowane w Cursorze.

Hostowany serwer Sentry dobrze nadaje się na pierwszy zdalny serwer: używa OAuth, nie wymaga klucza API w pliku, a jego adres jest przykładem, który drukuje samo claude mcp add --help. W Official MCP Registry figuruje jako io.github.getsentry/sentry-mcp (0.42.0), a repozytorium miało 862 gwiazdki (getsentry/sentry-mcp na GitHubie, odczyt 2026-09-26).

Uruchom w terminalu w katalogu głównym repo:

Okno terminala
claude mcp add --transport http --scope project sentry https://mcp.sentry.dev/mcp

Polecenie zapisuje ten wpis w .mcp.json:

{
"mcpServers": {
"sentry": {
"type": "http",
"url": "https://mcp.sentry.dev/mcp"
}
}
}

Uruchom claude, wpisz /mcp, wybierz sentry i dokończ logowanie w przeglądarce (albo uruchom claude mcp login sentry w terminalu). Serwer z .mcp.json ma w claude mcp list status Pending approval, dopóki go nie zatwierdzisz; po zatwierdzeniu claude mcp list sprawdza jego stan i pokazuje go jako połączony.

Potem daj agentowi zadanie tylko do odczytu i obserwuj, które narzędzia wywołuje:

Zobaczysz wywołania w rodzaju search_issues, potem pobranie szczegółów zgłoszenia, a na końcu odczyt lokalnych plików. Jeśli agent edytuje kod albo wywołuje narzędzie, które zmienia zgłoszenie, twoje ograniczenie do odczytu (niżej) ma lukę.

Serwer dodany przez jedną osobę do osobistej konfiguracji to eksperyment. Serwer w repo to zależność, którą dziedziczy każdy członek zespołu i każda sesja agenta, więc przechodzi tę samą ścieżkę co nowy pakiet.

  1. Oceń serwer. Potwierdź wydawcę w Official MCP Registry i w README samego dostawcy, sprawdź dokładną nazwę pakietu w npm lub PyPI i wypisz jego narzędzia. Wiele wiarygodnie brzmiących nazw jest błędnych albo porzuconych; najczęstsze wymienia ramka z pułapkami poniżej. Wybieraj hostowany serwer dostawcy z OAuth zamiast wrappera społeczności.

  2. Zawęź go do odczytu. Najpierw użyj przełącznika samego serwera; każdy zapisuje go inaczej. GitHub ma adres /readonly, Supabase read_only=true, Postgres MCP Pro --access-mode=restricted, Grafana --disable-write. Gdy serwer nie ma przełącznika, ogranicz narzędzia po stronie klienta: Codex przyjmuje enabled_tools albo disabled_tools dla każdego serwera w config.toml, a Claude Code nazywa każde narzędzie mcp__<serwer>__<narzędzie>, więc reguła deny w .claude/settings.json blokuje narzędzie zapisu.

  3. Dodaj go w zakresie projektu. Zacommituj .mcp.json, .codex/config.toml albo .cursor/mcp.json bez żadnych poświadczeń w środku. Serwery zdalne logują każdego programistę osobno przez OAuth; serwer stdio czyta token ze zmiennej środowiskowej (--env w Codeksie, -e w Claude Code); serwer zdalny, który zamiast OAuth przyjmuje token, czyta go przez opcję Codeksa bearer_token_env_var (--bearer-token-env-var).

  4. Przejrzyj go w PR. Obejmij te trzy pliki regułą CODEOWNERS, żeby każdą zmianę zatwierdzał tech lead albo właściciel platformy. Recenzent sprawdza diff, a nie zachowanie agenta: wydawcę, nazwę i wersję pakietu, transport, przełącznik trybu odczytu i to, czy serwer sięga do danych, do których repo nie powinno mieć dostępu.

Wpis CODEOWNERS, który możesz przyjąć bez zmian (podmień nazwę zespołu):

# MCP servers are dependencies: platform owners approve every change
/.mcp.json @acme/platform-owners
/.codex/config.toml @acme/platform-owners
/.cursor/mcp.json @acme/platform-owners

Jak sprawdzić konfigurację MCP bez czytania każdego wywołania narzędzia

Dział zatytułowany „Jak sprawdzić konfigurację MCP bez czytania każdego wywołania narzędzia”

Nie musisz śledzić każdego wywołania, żeby mieć dowód, że konfiguracja jest zgodna z zatwierdzoną. Dowodów dostarczają cztery kontrole:

  • Konfiguracja jest taka, jaką zatwierdzono. codex mcp get NAZWA --json wypisuje rozwiązany transport, URL, nagłówki i filtry narzędzi; claude mcp get NAZWA wypisuje zakres, typ, URL i status zatwierdzenia. Porównaj je z przejrzanym plikiem; na przykład klucz headers = {…} w Codeksie jest po cichu pomijany i widać to tu jako http_headers: null.
  • Koszt kontekstu jest zmierzony. Uruchom /context w Claude Code przed dodaniem serwera i po nim. Dla skali: Cloudflare podaje około 244 tys. tokenów dla natywnych schematów swojego API wobec około 1 tys. dla trzynarzędziowego serwera Code Mode. Wyszukiwanie narzędzi (tool search) jest domyślnie włączone w Claude Code i w Codeksie, więc większość schematów ładuje się dopiero na żądanie, ale wyniki narzędzi i tak trafiają do kontekstu. Co zrobić z drogim serwerem, opisuje Jak obniżyć koszt tokenów MCP.
  • Konfiguracja jest przeskanowana. Snyk Agent Scan (uvx snyk-agent-scan@latest, PyPI 0.6.4 w dniu 2026-09-26) skanuje konfiguracje MCP i skille pod kątem prompt injection i zatruwania narzędzi (tool poisoning). Wymaga tokenu API Snyka i uruchamia skanowane serwery stdio, więc niezaufane konfiguracje skanuj w piaskownicy. Pełną konfigurację pokazuje przewodnik po bezpieczeństwie MCP.
  • Agent raportuje swoje wywołania. Prompty na tej stronie kończą się poleceniem „list every MCP tool you called”. Wywołanie zapisujące w zadaniu tylko do odczytu to oblana kontrola, niezależnie od tego, jak wyglądał wynik.

Serwer w Claude Code nigdy się nie łączy. claude mcp add sentry https://mcp.sentry.dev/mcp bez --transport http kończy się sukcesem: Claude Code wypisuje tylko łatwe do przeoczenia ostrzeżenie i zapisuje serwer stdio, którego poleceniem jest adres URL (claude mcp list pokazuje potem Failed to connect — ENOENT). Usuń go przez claude mcp remove sentry i dodaj ponownie z --transport http. --url to flaga Codeksa; Claude Code odrzuca ją jako nieznaną opcję.

Codex ignoruje twój token. Tabela headers = {…} w config.toml jest pomijana. Użyj http_headers, env_http_headers albo bearer_token_env_var, a potem potwierdź przez codex mcp get NAZWA --json. codex mcp add --env działa tylko dla serwerów stdio.

Serwer działa w Claude Code, a w Codeksie nie. Codex 0.157.1 nie obsługuje MCP 2026-07-28. Sprawdź, które wersje protokołu obsługuje serwer; dopóki Codex nie wypuści tej funkcji, używaj wersji serwera, która wciąż obsługuje starszą rewizję.

Plik projektu jest ignorowany. Claude Code czyta .mcp.json w katalogu głównym repo, a nie .claude/mcp.json, i czeka na zatwierdzenie każdego serwera projektu. Codex ignoruje .codex/config.toml, dopóki projekt nie jest zaufany.

OAuth zawiesza się w przeglądarce. Callback trafia na lokalny port, który może blokować VPN albo firewall. Uruchom codex mcp login NAZWA --no-browser i dokończ logowanie, wklejając adres callbacku. W Claude Code serwer wymagający wcześniej zarejestrowanego adresu przekierowania przyjmuje --callback-port i --client-id w claude mcp add.

Agent wywołuje złe narzędzie. Za dużo serwerów to za dużo podobnych opisów narzędzi. Zanim zaczniesz przepisywać prompty, usuń serwery, których nie użyłeś od tygodnia. Pozostałe błędy opisuje Problemy z połączeniem serwera MCP.

Jeśli nie wiesz jeszcze, czy twój problem wymaga serwera MCP, skilla czy wtyczki, zacznij od przeglądu ekosystemu. Potem:

Szczegóły konfiguracji w poszczególnych narzędziach znajdziesz w konfiguracji MCP dla Claude Code, Codeksa i Cursora.