Przejdź do głównej zawartości

Najlepsze praktyki MCP: budżet kontekstu, szybkość i agenci równolegli

Najlepsze praktyki MCP utrzymują konfigurację serwerów w ryzach: pomiar kosztu kontekstu każdego serwera, limity i zawężanie wyników narzędzi, przypięte wersje, osobny profil MCP oraz osobny stan przeglądarki i bazy dla każdego agenta równoległego, a także test tylko do odczytu dla każdego serwera. W 2026 roku wyniki narzędzi kosztują więcej kontekstu niż ich schematy.

Czterej agenci pracują w czterech worktree. Dwaj padają jednocześnie, bo walczą o ten sam profil przeglądarki Playwright. Trzeci wykonał migrację bazy, ale jego serwer Postgres wciąż zwraca stary schemat. Czwarty wciągnął do kontekstu 400-liniowy log z Actions i zgubił plan, który realizował. Żaden z tych serwerów nie jest zepsuty. To konfiguracja, która działała dla jednego agenta, a nikt jej nie dostroił dla czterech. Ta strona jest dla developerów i tech leadów, którzy za tę konfigurację odpowiadają.

  • Sposób na zmierzenie kosztu kontekstu każdego serwera w Claude Code i Codeksie zamiast zgadywania.
  • Przełączniki, które ograniczają rozmiar wyników i liczbę narzędzi: MAX_MCP_OUTPUT_TOKENS, enabled_tools, adresy zestawów narzędzi GitHuba.
  • Przypięte wersje serwerów i timeouty, dzięki którym wolne pobieranie przez npx nie udaje zepsutego serwera.
  • Osobne profile MCP dla agentów równoległych: --mcp-config z --strict-mcp-config w Claude Code, --profile w Codeksie oraz odizolowany stan przeglądarki i bazy.
  • Test zdrowia do wklejenia, uruchomienia lokalnie i powtórzenia w CI oraz tabelę awarii z poprawką dla każdego objawu.

Jeśli konfigurujesz MCP po raz pierwszy, zacznij od startowego zestawu MCP. Gdy serwer w ogóle się nie łączy, zajrzyj do problemów z połączeniem serwerów MCP.

Koszt się przesunął. Claude Code (sprawdzone na 2.1.283; działa też na kanale stable) i Codex (0.157.1, od wersji 0.143.0) ładują schematy narzędzi MCP przez wyszukiwanie narzędzi (tool search), domyślnie włączone: agent widzi indeks do przeszukania i pobiera pełną definicję narzędzia dopiero wtedy, gdy jej potrzebuje. Dziesięć podłączonych serwerów nie oznacza już dziesięciu pełnych zrzutów schematów w każdym żądaniu.

Okno kontekstu wciąż zapełniają wyniki narzędzi. Zrzut schematu bazy, pełny log CI, lista 30 zgłoszeń czy snapshot strony trafiają do kontekstu i zostają tam, dopóki sesja nie zostanie skompaktowana albo zakończona. Dlatego poniższe zasady dotyczą głównie wyników, a nie liczby serwerów. Sposobu ładowania w Cursorze nie udało się zweryfikować na potrzeby tej strony (cursor.com był niedostępny 2026-09-26), więc w Cursorze trzymaj krótką listę serwerów i wyłączaj to, czego bieżące zadanie nie potrzebuje.

Ekosystem jest na tyle duży, że pokusa „zainstaluję wszystko, co wygląda przydatnie” jest realna. Na 2026-09-26 oficjalny MCP Registry, wciąż w wersji preview i bez kontroli jakości poza weryfikacją przestrzeni nazw, zawiera 36 176 serwerów (liczba z API rejestru). Instaluj pod zadanie, które masz przed sobą.

Okno terminala
# W terminalu: wszystkie skonfigurowane serwery, zatwierdzone z testem połączenia
claude mcp list
claude mcp get github

Uruchom /context w świeżej sesji, wykonaj jedno typowe zadanie, które używa serwera, i uruchom /context jeszcze raz. Różnica to koszt serwera na jedno zadanie. Dla serwera zainstalowanego jako plugin claude plugin details NAZWA_PLUGINU pokazuje listę komponentów pluginu i przewidywany koszt w tokenach. Serwery MCP, które plugin dodaje, zmierz przez /context przed zadaniem i po nim, jak wyżej, bo schematy narzędzi ładują się na żądanie przez wyszukiwanie narzędzi.

Kosztem są wyniki, więc kontrolujesz je na trzech poziomach: limitu po stronie klienta, listy narzędzi serwera i promptu.

  1. Ogranicz pojedynczy wynik po stronie klienta. W Claude Code MAX_MCP_OUTPUT_TOKENS ustawia górną granicę jednego wyniku narzędzia MCP; gdy jej nie ustawisz, binarka 2.1.283 przyjmuje 25 000 tokenów. Obniż ją w sesji, która ma zostać oszczędna: MAX_MCP_OUTPUT_TOKENS=8000 claude. Limit to siatka bezpieczeństwa, nie filtr: wynik, który w niego uderza, i tak jest złym wynikiem, więc popraw też prompt albo narzędzie.

  2. Udostępniaj mniej narzędzi z serwera. Codex filtruje narzędzia po stronie klienta przez enabled_tools albo disabled_tools we wpisie serwera w config.toml. Wiele serwerów samo się zawęża: zdalny serwer GitHuba przyjmuje adresy per zestaw narzędzi i tylko do odczytu, na przykład https://api.githubcopilot.com/mcp/x/actions/readonly.

    # ~/.codex/config.toml (sparsowane przez codex mcp get na 0.157.1;
    # nazwy narzędzi z README github/github-mcp-server, odczyt 2026-09-26)
    [mcp_servers.github]
    url = "https://api.githubcopilot.com/mcp/"
    bearer_token_env_var = "GITHUB_PAT"
    enabled_tools = ["issue_read", "list_pull_requests", "pull_request_read"]
    tool_timeout_sec = 60
  3. Zawęź pytanie. „Pokaż schemat bazy” zwraca wszystkie tabele. „Pokaż tabele users i orders oraz klucze obce między nimi” zwraca dwie. „Przeczytaj nieudany log z Actions” zwraca setki linii; „zwróć tylko nazwy nieudanych testów i pierwszą linię błędu każdego” zwraca dziesięć.

  4. Przenieś obszerne wyszukiwanie do subagenta. Subagent wydaje własny kontekst na surowe wyniki i zwraca tylko podsumowanie. Wzorzec, który zamienia serwer z dużą liczbą narzędzi w kod ładowany na żądanie, opisuje strona jak obniżyć koszt tokenów MCP.

Jak sprawić, by serwery MCP startowały szybko i działały u wszystkich tak samo?

Dział zatytułowany „Jak sprawić, by serwery MCP startowały szybko i działały u wszystkich tak samo?”

Większość zgłoszeń „serwer jest wolny” to pobieranie przy pierwszym uruchomieniu, a nie wolny serwer. Nieprzypięte npx -y pakiet@latest rozwiązuje wersję i może pobrać nowe wydanie przy starcie sesji, a do tego potrafi zmienić zestaw narzędzi między poniedziałkiem a wtorkiem.

  • Przypinaj wersje w args. @playwright/mcp@0.0.82 (Playwright MCP) albo @upstash/context7-mcp@4.1.1 (Context7), a nie @latest. Serwery pythonowe uruchamiane przez uvx przypinasz tak samo: uvx postgres-mcp@0.3.0 (Postgres MCP Pro i inne serwery baz danych). Podbijaj wersje w przeglądanym pull requeście, jak każdą zależność.
  • Rozgrzej cache raz. Uruchom przypiętą komendę w terminalu przed pierwszą sesją dnia, żeby pobieranie odbyło się poza oknem startowym agenta.
  • Ustawiaj timeouty świadomie. W Claude Code MCP_TIMEOUT (start serwera) i MCP_TOOL_TIMEOUT (jedno wywołanie narzędzia) przyjmują milisekundy, na przykład MCP_TIMEOUT=20000 claude. W Codeksie ustaw startup_timeout_sec i tool_timeout_sec we wpisie [mcp_servers.NAZWA]. Prośba w prompcie, żeby agent „poczekał dłużej”, niczego nie zmienia: timeout egzekwuje klient.
  • Przeładuj po zmianie schematu. Serwer bazy, który trzyma metadane w cache, po migracji wciąż raportuje stary schemat. W Claude Code otwórz /mcp i połącz serwer ponownie. W Codeksie zacznij nową sesję; konfiguracja jest wczytywana przy starcie. W Cursorze zrestartuj serwer w jego ustawieniach MCP.

Jak bezpiecznie uruchamiać serwery MCP dla agentów równoległych?

Dział zatytułowany „Jak bezpiecznie uruchamiać serwery MCP dla agentów równoległych?”

Konfiguracja, która wystarcza jednemu agentowi, psuje się przy czterech, bo część stanu MCP jest wspólna dla maszyny albo konta, a nie dla worktree. Daj każdemu agentowi osobny profil i osobne zasoby ze stanem.

Wspólny zasóbCo się psujeIzolacja
Profil przeglądarki (Playwright MCP)Trwały profil otwiera się naraz tylko w jednej przeglądarce, więc drugi agent pada--isolated (profil w pamięci) albo osobny --user-data-dir dla każdego agenta
Baza za serwerem bazodanowymAgent A robi migrację, serwer agenta B czyta zmieniony schemat albo daneJedna baza na worktree, przekazana przez zmienną środowiskową
Token API i jego limitCzterej agenci na jednym PAT GitHuba dzielą jeden budżet: 5000 żądań na godzinę w osobistym limicie użytkownika (dokumentacja GitHub REST, odczyt 2026-09-26)Zawężone prompty, adresy zestawów tylko do odczytu i gh do masowych odczytów
Sama lista serwerówAgent od review może pisać do Jiry, bo potrzebował jej agent od implementacjiProfil MCP per agent tylko z serwerami, których wymaga jego zadanie

Trzymaj jeden plik JSON na rolę i uruchamiaj każdego agenta tylko z tym plikiem. --strict-mcp-config ignoruje każdą inną konfigurację MCP, w tym projektowy .mcp.json i serwery z zakresu użytkownika.

Okno terminala
# W terminalu, w worktree recenzenta
claude --mcp-config mcp-profiles/review.json --strict-mcp-config
{
"mcpServers": {
"github": {
"type": "http",
"url": "https://api.githubcopilot.com/mcp/x/pull_requests/readonly",
"headers": { "Authorization": "Bearer ${GITHUB_PAT}" }
}
}
}

Uruchom sesję i wpisz /mcp: serwer powinien być połączony, co przy okazji potwierdza, że ${GITHUB_PAT} został podstawiony. Projektowy .mcp.json obsługuje podstawianie ${VAR} i ${VAR:-default}, więc jeden zacommitowany plik może kierować każdy worktree do jego własnych zasobów:

{
"mcpServers": {
"playwright": {
"command": "npx",
"args": ["-y", "@playwright/mcp@0.0.82", "--isolated"]
},
"postgres": {
"command": "uvx",
"args": ["postgres-mcp@0.3.0", "--access-mode=restricted"],
"env": { "DATABASE_URI": "${DATABASE_URI}" }
}
}
}

Samo przygotowanie worktree opisuje strona o agentach równoległych.

Zamień wt-api-2 na nazwę bazy, której powinien używać twój worktree.

Jak zespół ma współdzielić jedną konfigurację MCP?

Dział zatytułowany „Jak zespół ma współdzielić jedną konfigurację MCP?”

Commituj konfigurację, nigdy poświadczeń, i wyznacz jedną osobę jako właściciela pliku.

  • Claude Code: commituj .mcp.json w katalogu głównym repozytorium (nie .claude/mcp.json) z odwołaniami ${VAR}. claude mcp add --scope project zapisze go za ciebie. Każdy developer zatwierdza serwery projektowe przy pierwszym użyciu; claude mcp list pokazuje niezatwierdzone jako oczekujące, a claude mcp reset-project-choices czyści wcześniejsze decyzje.
  • Codex: serwery są w ~/.codex/config.toml. Trzymaj w repozytorium przejrzany fragment (na przykład docs/codex-mcp.toml), który developerzy wklejają, z tokenami czytanymi przez bearer_token_env_var, env_http_headers albo env. Tabela headers = {…} jest po cichu ignorowana; właściwe klucze to http_headers, env_http_headers i bearer_token_env_var.
  • Cursor: commituj .cursor/mcp.json z tymi samymi serwerami i przypiętymi wersjami.
  • Własność: umieść pliki konfiguracji w CODEOWNERS, żeby dodanie serwera albo podbicie wersji wymagało przeglądu tech leada. Listy dozwolonych serwerów dla całej organizacji należą do strony rejestry i bramki MCP; zakresy tokenów i obrona przed prompt injection do strony bezpieczeństwo MCP.

Notka wdrożeniowa w CONTRIBUTING (przewodniku dla kontrybutorów) potrzebuje czterech linii: serwery i przypięte wersje, zakresy tokenów dla każdego z nich, zmienne środowiskowe do ustawienia i poniższy prompt testu zdrowia.

Jak udowodnić, że konfiguracja MCP działa, bez czytania każdego wywołania narzędzia?

Dział zatytułowany „Jak udowodnić, że konfiguracja MCP działa, bez czytania każdego wywołania narzędzia?”

Sprawdzasz dowody, które skrypt albo człowiek może porównać, a nie transkrypty.

  1. Uruchom test zdrowia. Poniższy prompt wywołuje jedno narzędzie tylko do odczytu na serwer i zwraca PASS albo FAIL z identyfikatorem do potwierdzenia, na przykład numerem PR albo liczbą tabel. Konfiguracja nowego developera jest gotowa, gdy każdy wiersz przechodzi.

  2. Zapisz koszt kontekstu w pull requeście, który dodaje serwer. Wklej liczby z /context sprzed jednego typowego zadania i po nim. Recenzent zatwierdza koszt, a nie wrażenie.

  3. Porównuj przypięte wersje. Podbicia wersji przychodzą jako diff konfiguracji objęty CODEOWNERS, więc zmieniony zestaw narzędzi przechodzi przegląd, zanim trafi do czyjejkolwiek sesji.

  4. Powtarzaj test w CI z zaufanego checkoutu. Uruchamiaj go według harmonogramu z gałęzi domyślnej, nigdy na kodzie z niezaufanego pull requesta. --strict-mcp-config sprawia, że zadanie ładuje tylko profil CI, a nie .mcp.json, który kontrybutor mógłby zmienić:

    Okno terminala
    # W CI, z checkoutu gałęzi domyślnej
    claude -p "$(cat ci/mcp-health-prompt.txt)" \
    --mcp-config ci/mcp-readonly.json --strict-mcp-config \
    --allowedTools "mcp__github" "mcp__postgres"

    Codex realizuje ten sam pomysł przez profil: codex -p ci-readonly exec "$(cat ci/mcp-health-prompt.txt)". Profil CI trzymaj tylko do odczytu i daj zadaniu token wyłącznie z zakresami do odczytu. Plik z promptem dla CI to poniższy prompt bez linii o przeglądarce, bo profil CI ładuje tylko GitHuba i Postgresa.

ObjawPrawdopodobna przyczynaWyjście z sytuacji
Agent gubi plan w połowie pracyJeden duży wynik narzędzia zapełnił kontekst/compact albo nowa sesja; obniż MAX_MCP_OUTPUT_TOKENS; przepisz prompt tak, by prosił o przefiltrowane wyniki
Przeglądarka drugiego agenta równoległego nie startujeDwaj agenci dzielą jeden trwały profil PlaywrightaDodaj --isolated do args Playwrighta w każdym profilu
Serwer bazy pokazuje kolumnę, którą usunąłeśSerwer zapisał schemat w cache przed migracjąPołącz serwer ponownie (/mcp w Claude Code) albo zacznij nową sesję Codeksa
Narzędzie wskazane w prompcie „nie istnieje”Wersja serwera zmieniła się pod nieprzypiętym @latest albo odfiltrowuje je enabled_toolsPrzypnij wersję; sprawdź filtr przez codex mcp get NAZWA
Pierwsze wywołanie dnia kończy się timeoutemPobieranie pakietu przy pierwszym uruchomieniu w oknie startowymRozgrzej cache w terminalu; podnieś MCP_TIMEOUT albo startup_timeout_sec
Agent wywołuje narzędzie niewłaściwego serweraDwa serwery udostępniają podobne narzędziaNazwij serwer w prompcie albo usuń jeden z profilu tego agenta
Przy agentach równoległych wywołania GitHuba zaczynają padać w trakcie pracyWspólny PAT wyczerpał godzinowy limitZawęź prompty, używaj gh do masowych odczytów i daj zadaniom w tle własny token GitHub App
Lokalnie działa, w CI nieCI nie ma tokenów, ma inną sieć albo ładuje inną konfiguracjęOsobny profil CI z --strict-mcp-config i sekretami tylko do odczytu
Agent kolegi widzi inne narzędziaNiezatwierdzone albo nieprzypięte serwery projektoweclaude mcp list, żeby sprawdzić zatwierdzenie; przypnij wersje w zacommitowanym pliku

Jeśli serwer w ogóle się nie łączy, najpierw przejdź przez problemy z połączeniem serwerów MCP. Jeśli wynik wygląda tak, jakby niósł polecenia dla agenta, potraktuj go jako próbę prompt injection i postępuj według strony bezpieczeństwo MCP.