Drzewo decyzyjne narzędzi dla Claude Code z globalną pamięcią
ai,php,symfony,dev-toolsCzęść 4 z 4
- 19 lat z WordPressem — dlaczego w końcu zrezygnowałem
- Symfony jako generator stron statycznych — jak działa holas.pl
- Zabezpieczenie jedynego dynamicznego endpointu strony statycznej — formularz kontaktowy
- Drzewo decyzyjne narzędzi dla Claude Code z globalną pamięcią
Claude Code może łączyć się z zewnętrznymi narzędziami przez serwery MCP (Model Context Protocol) — Sentry do błędów produkcyjnych, JetBrains do introspekcji IDE, Context7 do dokumentacji bibliotek, Perplexity do wyszukiwania w sieci. Problem: mając sześć serwerów MCP do dyspozycji, Claude nie zawsze wybiera właściwy. Potrafi przeszukiwać grepem 20 plików w poszukiwaniu route'a Symfony, kiedy JetBrains zwróciłby go jednym wywołaniem, albo odpytywać Context7 o "najnowszą wersję PHP", choć aktualne dane ma tylko Perplexity.
Rozwiązaniem jest globalny CLAUDE.md — trwały plik instrukcji, który uczy Claude'a, po które narzędzie sięgnąć w zależności od typu zapytania. Ten wpis opisuje mój setup, drzewo decyzyjne, które zbudowałem, i jak możesz stworzyć własne dla swojego stosu technologicznego.
Problem: za dużo narzędzi, brak strategii
Serwery MCP dają Claude Code supermoce: automatyzację przeglądarki, śledzenie błędów, wyszukiwanie dokumentacji, integrację z IDE. Ale więcej narzędzi oznacza więcej wyborów, a bez wskazówek Claude podejmuje rozsądne, ale nieoptymalne decyzje.
Typowe problemy, które zaobserwowałem:
- Złe narzędzie do zadania — odpytywanie Context7 o "najnowszą wersję Symfony" (ma tylko dokumentację, nie metadane o wydaniach) zamiast Perplexity
- Droga ścieżka zamiast taniej — używanie Grepa do szukania route'ów Symfony w wielu plikach zamiast zapytania JetBrains MCP o strukturalną listę
- Pominięcie specjalisty — brak sprawdzenia Sentry przy błędzie produkcyjnym, kiedy stack trace natychmiast ujawniłby przyczynę
- Zbędne zapytania — próbowanie wielu narzędzi po kolei, kiedy pamięć mogłaby od razu skierować do właściwego
Rozwiązaniem są jawne reguły routingu zapisane w globalnym CLAUDE.md. Claude czyta ten plik na początku każdej sesji, więc drzewo decyzyjne jest zawsze dostępne.
Mój stos MCP
Oto sześć serwerów MCP, których używam, i w czym każdy jest najlepszy.
Context7 — dokumentacja bibliotek i frameworków
Context7 serwuje wersjonowaną dokumentację z przykładami kodu. Podajesz nazwę biblioteki i pytanie, a on zwraca odpowiednią sekcję z oficjalnej dokumentacji.
Workflow: resolve-library-id (znajdź bibliotekę) → query-docs (pobierz dokumentację do konkretnego pytania). Obsługuje wersjonowane zapytania — mogę odpytać /sylius/sylius/v1.14.6 bezpośrednio, nie tylko "latest".
Najlepszy do:
- Sygnatur metod i przykładów konfiguracji
- Poradników migracji między wersjami frameworków
- Wzorców z oficjalnej dokumentacji (formularze Symfony, mapowania Doctrine, filtry API Platform)
Nie radzi sobie z:
- Aktualnymi numerami wersji i datami wydań (ma dokumentację, nie metadane)
- Funkcjami języka PHP (PHP nie jest biblioteką z wersjonowaną dokumentacją w Context7)
- Poradnikami bezpieczeństwa i CVE
- Czymkolwiek wymagającym informacji w czasie rzeczywistym
Perplexity — aktualne fakty i research
Perplexity to wyszukiwarka z AI w czterech trybach: search (wyniki z cytatami ze źródeł), ask (odpowiedzi AI przez sonar-pro), research (dogłębna analiza wieloźródłowa, 30+ sekund) i reason (logiczne rozumowanie krok po kroku).
Najlepszy do:
- Najnowszych numerów wersji, dat wydań, harmonogramów EOL
- Poradników bezpieczeństwa i szczegółów CVE
- Funkcji języka PHP i RFC (property hooks, asymmetric visibility — tego nie ma w Context7)
- Cen usług zewnętrznych (koszty API, porównania hostingów)
- Ogólnych dobrych praktyk programistycznych i benchmarków
Kluczowa rola: Perplexity wypełnia każdą lukę Context7. Kiedy Context7 nic nie zwraca albo zwraca nieaktualne dane, Perplexity prawie zawsze ma odpowiedź.
JetBrains — inteligencja kodu na poziomie IDE
To serwer MCP, który oszczędza najwięcej tokenów. JetBrains MCP łączy Claude Code z indeksem Twojego IDE — tym samym, który napędza autouzupełnianie, go-to-definition i refaktoryzację. Bazowy JetBrains MCP dostarcza generyczne narzędzia (wyszukiwanie plików, lookup symboli, wyszukiwanie tekstowe, komendy terminala), a pluginy frameworkowe rozszerzają go o specjalistyczne narzędzia — plugin Symfony dodaje listowanie route'ów, wyszukiwanie serwisów, inspekcję encji Doctrine i analizę Twiga.
Mój typowy workflow: Wklejam link do ticketu Jira do konwersacji. Claude czyta zadanie przez Atlassian MCP, a potem używa JetBrains MCP do szybkiego rekonesansu kodu — znajdując odpowiednie serwisy, sprawdzając definicje route'ów, inspekcjonując pola encji — zanim napisze choćby jedną linię kodu. Ten krok "najpierw przeanalizuj" wyłapuje nieporozumienia wcześnie i daje Claude'owi kontekst do zadawania lepszych pytań wyjaśniających.
Możliwości specyficzne dla Symfony (przez plugin Symfony):
list_symfony_routes_controllers— wszystkie route'y z kontrolerem, ścieżką, metodami. Jedno wywołanie zamiast grepowania atrybutów w dziesiątkach plikówlocate_symfony_service— znajdź definicję dowolnego serwisu po pełnej nazwie klasylist_doctrine_entity_fields— pola encji, typy i relacje w ustrukturyzowanym formacielist_symfony_commands,list_symfony_forms— komendy konsolowe i typy formularzy w jednym widoku
Przykład oszczędności tokenów: Znalezienie wszystkich route'ów pasujących do /api/ w projekcie Symfony:
- Bez JetBrains: Grep po
#[Routewsrc/Controller/, odczyt każdego pasującego pliku, parsowanie atrybutów route'ów, konfrontacja z_routes.yaml. Łatwo 5-10 wywołań narzędzi i tysiące tokenów treści plików. - Z JetBrains: Jedno wywołanie
list_symfony_routes_controllerszwraca strukturalną, filtrowalną listę. Gotowe.
Przydatny też do: Indeksowane wyszukiwanie tekstowe (search_in_files_by_text), wyszukiwanie plików po nazwie, lookup symboli, uruchamianie komend terminala w IDE, budowanie i testowanie.
Chrome DevTools — automatyzacja przeglądarki
Chrome DevTools MCP pozwala Claude'owi sterować przeglądarką: nawigować po URL-ach, klikać elementy, wypełniać formularze, robić zrzuty ekranu, inspekcjonować żądania sieciowe, uruchamiać JavaScript i wykonywać audyty Lighthouse.
Najlepszy do:
- Wizualnego testowania zmian UI po modyfikacji szablonów lub CSS
- Audytów wydajności i dostępności Lighthouse
- Debugowania problemów frontendowych (błędy w konsoli, żądania sieciowe)
- Weryfikacji responsywności przy różnych szerokościach viewportu
Sentry — śledzenie błędów produkcyjnych
Sentry MCP łączy Claude'a z systemem śledzenia błędów. Może wyszukiwać issues, pobierać stack trace'y, analizować błędy z AI Sentry (Seer) i sprawdzać informacje o wydaniach i wdrożeniach.
Workflow, który sprawia, że to jest wartościowe:
- Zauważasz błąd (lub zgłasza go użytkownik)
- Claude odpytuje Sentry: "wyszukaj błędy 500 z ostatnich 24 godzin"
- Sentry zwraca stack trace, liczbę dotkniętych użytkowników, timestampy first/last seen
- Claude czyta odpowiedni plik źródłowy, identyfikuje przyczynę i proponuje fix
- Cały cykl debugowania odbywa się bez opuszczania terminala
Najlepszy do:
- Badania błędów produkcyjnych z pełnymi stack trace'ami
- Rozumienia częstotliwości i wzorców błędów (czy jest nowy? czy się pogarsza?)
- Korelowania błędów z ostatnimi wdrożeniami
Atlassian/Jira — zarządzanie zadaniami
Jira MCP zapewnia pełne zarządzanie cyklem życia issues: tworzenie, odczyt, edycję, przejścia statusów, komentowanie i wyszukiwanie JQL.
Najlepszy do:
- Czytania specyfikacji zadań przed rozpoczęciem pracy
- Aktualizowania statusu issues w trakcie pracy
- Dodawania technicznych komentarzy do issues dla widoczności zespołu
- Wyszukiwania JQL do znajdowania powiązanych issues lub sprawdzania bieżącego sprintu
Drzewo decyzyjne
Sercem globalnego CLAUDE.md jest tablica routingu, która mapuje typy zapytań na najlepsze narzędzie. Oto faktyczna treść z mojego pliku:
## Search & Research — Tool Decision Tree
### When to use Context7
**Best for**: library/framework API docs with clean code examples
- Versioned library docs (Sylius, Doctrine, API Platform, Symfony, GitHub Actions)
- Official method signatures, configuration examples, how-to patterns
- Concise, authoritative answers directly from official source
- `resolve-library-id` first, then `query-docs`
- **Fails for**: current version/release info, PHP language features,
security CVEs, pricing, general programming
### When to use Perplexity
**Best for**: anything current, factual, or not a library doc
- Latest versions, release dates, EOL schedules
- Security advisories, CVEs, vulnerability details
- PHP language features (property hooks, new syntax)
- External service pricing
- General programming best practices, benchmarks
- Supplement when Context7 fails or for real-world context
### When to use WebSearch
- Official blog posts / release announcements
- As last resort or to supplement
Kluczowy wzorzec: każda sekcja zaczyna się od "best for" (kiedy wybrać to narzędzie) i kończy "fails for" (kiedy je pominąć). Claude korzysta z obu sygnałów — routingu pozytywnego i negatywnego.
Tablica benchmarków
Przepuściłem te same 10 typów zapytań przez Context7, Perplexity i WebSearch i oceniłem wyniki. Ta tablica znajduje się w globalnym CLAUDE.md, żeby Claude mógł się do niej odwoływać przy podejmowaniu decyzji:
| Typ zapytania | Context7 | Perplexity | WebSearch |
|---|---|---|---|
| Wersjonowana dokumentacja bibliotek | ★★★★★ | ★★★★ | ★★★ |
| Aktualne wersje / daty wydań | ✗ | ★★★★★ | ★★★★ |
| Przykłady kodu z oficjalnej dokumentacji | ★★★★★ | ★★★★★ | ★★★★ |
| Funkcje języka PHP | ✗ | ★★★★★ | ★★★★ |
| Framework how-to (API Platform itp.) | ★★★★★ | ★★★★★ | ★★★★ |
| Poradniki bezpieczeństwa / CVE | ✗ | ★★★★★ | ★★★★ |
| Ogólne programowanie (benchmarki itp.) | ✗ | ★★★★ | ★★★★ |
| CI/DevOps workflows | ★★★★ | ★★★★ | ★★★★ |
| Release notes / nowe funkcje | ★★★★ | ★★★ | ★★★★★ |
| Ceny usług zewnętrznych | ✗ | ★★★★★ | ★★★★★ |
Wzorzec jest czytelny: Context7 jest doskonały do wersjonowanej dokumentacji, ale dostaje zero w czymkolwiek wymagającym aktualnych lub rzeczywistych danych. Perplexity pokrywa niemal wszystko. WebSearch jest najsilniejszy w blogpostach i ogłoszeniach o wydaniach.
Umieszczenie tej tabeli w globalnym CLAUDE.md daje Claude'owi ilościową podstawę do wyboru narzędzia, nie tylko reguły.
Jak działa globalna pamięć
Claude Code obsługuje globalny plik instrukcji w ~/.claude/CLAUDE.md. Ten plik jest ładowany na początku każdej konwersacji, niezależnie od projektu. To właściwe miejsce na reguły routingu narzędzi, bo serwery MCP są konfigurowane globalnie, nie per projekt.
Porównanie z projektowym AGENTS.md:
AGENTS.md |
~/.claude/CLAUDE.md |
|
|---|---|---|
| Zakres | Jeden projekt | Wszystkie projekty |
| Treść | Konwencje kodu, architektura, komendy | Routing narzędzi, preferencje osobiste |
| Przykład | "Używaj ddev exec do komend PHP" |
"Używaj Context7 do dokumentacji Symfony" |
Struktura globalnego CLAUDE.md
Globalny CLAUDE.md działa najlepiej, gdy jest ustrukturyzowany jak podręcznik referencyjny, nie narracja. Claude skanuje go na początku sesji — czytelne nagłówki i jawne reguły sprawiają, że ten skan jest skuteczny.
Wskazówki z mojego doświadczenia:
- Zacznij od reguły decyzyjnej, nie od opisu. "Best for: versioned library docs" jest bardziej użyteczne niż "Context7 is a documentation server that..."
- Uwzględnij tryby awarii. "Fails for: current versions" zapobiega próbom użycia Context7 do zapytań, z którymi sobie nie radzi.
- Dodaj inwentarz serwerów. Wymień każdy serwer MCP z jego narzędziami — Claude może się do tego odwołać, gdy potrzebuje funkcji, której jeszcze nie używał.
- Używaj konkretnych przykładów. "Latest Symfony version → Perplexity" jest lepsze niż "use Perplexity for current data."
- Aktualizuj przy zmianach narzędzi. Dodałeś nowy serwer MCP? Zaktualizuj plik. Usunąłeś jeden? Usuń jego wpis. Nieaktualne reguły routingu są gorsze niż brak reguł.
Zbuduj własne drzewo
Konkretne serwery MCP nie mają znaczenia — liczy się wzorzec. Niezależnie od tego, czy używasz Cursora, Windsurf czy Claude Code, czy piszesz w Pythonie czy Go, zasada jest ta sama: naucz swojego asystenta AI, po które narzędzie sięgnąć.
Krok po kroku:
- Wymień swoje serwery MCP (lub równoważne integracje narzędziowe) i do czego każdy służy
- Zidentyfikuj nakładanie się — gdzie dwa narzędzia mogą odpowiedzieć na to samo zapytanie? (Context7 i Perplexity obsługują dokumentację Symfony, ale z różnymi mocnymi stronami)
- Zbenchmarkuj — przepuść te same 5-10 reprezentatywnych zapytań przez każde nakładające się narzędzie. Oceń wyniki. To daje dane, nie przeczucie.
- Napisz reguły routingu — dla każdego narzędzia napisz sekcje "best for" i "fails for" z konkretnymi typami zapytań
- Dołącz benchmark — tablica daje Twojemu AI ilościowy punkt odniesienia, nie tylko instrukcje
- Iteruj — pierwsza wersja nie będzie idealna. Kiedy Claude wybierze złe narzędzie, zaktualizuj plik. Po kilku sesjach routing się doszlifuje.
Mój globalny CLAUDE.md zaczął się jako lista serwerów MCP z jednolinijkowymi opisami. Po kilku tygodniach obserwacji, gdzie Claude podejmował nieoptymalne wybory, ewoluował w drzewo decyzyjne opisane powyżej. Tablica benchmarków była największą pojedynczą poprawą — zamieniła niejasne reguły "preferuj X nad Y" w konkretne dane, na podstawie których Claude mógł działać.
Inwestycja jest niewielka (godzina na konfigurację, kilka minut na aktualizację) a zwrot się kumuluje: mniej zmarnowanych tokenów, szybsze odpowiedzi i mniej czasu na korygowanie wyborów narzędzi w trakcie konwersacji.