Przejdź do głównej zawartości

Serwery MCP, które rozumieją twój kod: Serena, codebase-memory-mcp, Claude Context i Repomix

Serwery MCP do analizy kodu (code intelligence) dają agentowi wiedzę o strukturze repozytorium zamiast pętli grep i czytania plików. Serena wyszukuje i edytuje symbole przez serwery językowe, codebase-memory-mcp śledzi ścieżki wywołań w lokalnym grafie wiedzy, Claude Context wyszukuje semantycznie w bazie wektorowej, a Repomix pakuje repozytorium do jednego pliku. Poprawności zmiany żaden z nich nie dowodzi; robią to twoje testy.

Prosisz agenta o zmianę nazwy OrderService.applyDiscount w monorepo TypeScript liczącym 400 000 linii. Agent greppuje applyDiscount, czyta 30 plików, żeby odróżnić prawdziwe wywołania od fikstury testowej, napisu w logu i niezwiązanego applyDiscount w CartService, i kończy mu się kontekst, zanim cokolwiek zmieni. Serwer językowy zna odpowiedź od początku. Agentowi brakuje tylko narzędzia, które go zapyta.

Ta strona jest dla programistów, którzy refaktoryzują duże bazy kodu z agentem, i dla tech leadów, którzy decydują, na którym z tych serwerów zespół się ustandaryzuje. Dostajesz tabelę decyzyjną dla czterech serwerów, Serenę zainstalowaną zgodnie z upstreamem we wszystkich trzech narzędziach, przykład zmiany nazwy we wszystkich wywołaniach, czteroetapowy proces refaktoryzacji (mapa, plan, edycja symboli, testy), audyt instalatora codebase-memory-mcp oraz typowe awarie z krokami naprawy. Strona zakłada, że dodawałeś już serwer MCP; jeśli nie, zacznij od przeglądu MCP.

Który serwer code intelligence pasuje do twojej bazy kodu?

Dział zatytułowany „Który serwer code intelligence pasuje do twojej bazy kodu?”

Cztery serwery odpowiadają na różne pytania. Wybieraj według pytania, które najczęściej zadajesz agentowi, a nie według liczby gwiazdek.

Serenacodebase-memory-mcpClaude ContextRepomix
Odpowiada na„Gdzie jest ten symbol, kto się do niego odwołuje, zmień mu nazwꔄCo to wywołuje, co wywołuje to, czego dotyka ten diff”„Gdzie jest kod, który obsługuje X” (po znaczeniu)„Daj mi całe repozytorium albo jego wycinek w jednym pliku”
SilnikSerwery językowe (LSP) albo płatna wtyczka JetBrainsGraf wiedzy z Tree-sittera zapisany lokalnie oraz embeddingi wbudowane w binarkę do lokalnego wyszukiwania semantycznegoEmbeddingi w bazie wektorowej Milvus lub ZillizKompresja i pakowanie przez Tree-sitter
Edytuje kodTak: rename_symbol, replace_symbol_body, insert_after_symbol, safe_delete_symbolNie, graf tylko do odczytuNieNie
Kod opuszcza maszynęNieNie (README: „100% locally”)Tak przy hostowanym dostawcy embeddingów lub Zilliz Cloud; nie przy lokalnym Milvusie i OllamieNie, chyba że pakujesz zdalne repozytorium
Wymagauv oraz serwera językowego dla każdego językaJednej natywnej binarkiNode.js 20+, bazy wektorowej, dostawcy embeddingówNode.js (npx)
Aktualna wersja (2026-09-26)PyPI serena-agent 1.7.0 (2026-08-09)0.11.0 na npm i PyPInpm @zilliz/claude-context-mcp 0.1.15 (2026-06-22)npm repomix 1.18.1 (2026-09-21)

Reguły decyzyjne, które wynikają z tabeli:

  • Zmiany nazw, przenoszenie i zmiany sygnatur w języku typowanym: Serena. Tylko ona z tej czwórki edytuje kod, a zmiana nazwy przez serwer językowy jest dokładna tam, gdzie zamiana tekstu nie jest.
  • „Co się zepsuje, jeśli to zmienię?” w kodzie, którego nie znasz: codebase-memory-mcp. trace_path i detect_changes odpowiadają na pytania o wpływ zmiany jednym wywołaniem.
  • Szukanie kodu po intencji w bardzo dużym repozytorium („gdzie ponawiamy płatności?”), gdy organizacja już utrzymuje bazę wektorową: Claude Context. Najpierw wypróbuj lokalne wyszukiwanie semantyczne codebase-memory-mcp; Claude Context jest najcięższy w utrzymaniu.
  • Przekazanie modelowi całego repozytorium, także cudzego, za jednym razem albo zamiana biblioteki w skill referencyjny: Repomix.

Serena i codebase-memory-mcp dobrze się uzupełniają: graf wyznacza zasięg zmiany, serwer językowy wykonuje edycję. Instalacja wszystkich czterech kosztuje kontekst i niewiele daje.

README Sereny mówi wprost: „Do not install Serena via an MCP or plugin marketplace! They contain outdated and suboptimal installation commands.” Wtyczka serena w claude-plugins-official nadal uruchamia Serenę przez uvx --from git+https://github.com/oraios/serena, czyli drogą, przed którą ostrzega upstream. Zainstaluj narzędzie raz, a potem wskaż je każdemu agentowi.

  1. Zainstaluj uv (jedyne wymaganie Sereny), potem zainstaluj Serenę jako narzędzie uv i ją zainicjalizuj:

    Okno terminala
    uv tool install -p 3.13 serena-agent
    serena init

    serena init konfiguruje domyślny backend oparty na serwerach językowych. Niektóre języki wymagają dodatkowej zależności; wymienia je strona o obsłudze języków w dokumentacji Sereny. serena-agent 1.7.0 wymaga Pythona od 3.11 do 3.14 (PyPI, sprawdzone 2026-09-26).

  2. Podłącz agenta. Konteksty różnią się między narzędziami, bo każdy kontekst wyłącza te narzędzia Sereny, które dublują własne narzędzia agenta do plików i powłoki.

    Okno terminala
    # wszystkie projekty; Serena aktywuje katalog, w którym startuje Claude Code
    claude mcp add --scope user serena -- serena start-mcp-server --context claude-code --project-from-cwd

    serena setup claude-code zapisuje ten sam wpis za ciebie. Jeśli Serena startuje zbyt wolno i /mcp pokazuje ją jako niedziałającą, ustaw MCP_TIMEOUT=60000 w profilu powłoki, jak radzi dokumentacja klientów Sereny.

  3. Sprawdź połączenie. Uruchom /mcp w Claude Code lub Codeksie (w Cursorze otwórz listę MCP w ustawieniach) i potwierdź, że serena jest połączona. Potem poproś: „Use serena to give me the symbols overview of src/orders/order-service.ts”. Agent powinien wywołać get_symbols_overview, a nie czytać plik.

Jak sprawić, żeby agent używał Sereny, a nie grepa

Dział zatytułowany „Jak sprawić, żeby agent używał Sereny, a nie grepa”

Dokumentacja klientów Sereny podaje, że nowsze wydania Claude Code i nowsze modele mocno ciążą ku wbudowanym narzędziom, więc w długich sesjach agent często pomija Serenę. Upstream dostarcza na to hooki (oznaczone jako alfa). remind przypomina agentowi o Serenie po serii wywołań grep lub read_file, activate aktywuje projekt na starcie sesji, a cleanup sprząta stan hooków na końcu. Dodaj je do .claude/settings.json:

{
"hooks": {
"SessionStart": [
{ "matcher": "", "hooks": [{ "type": "command", "command": "serena-hooks activate --client=claude-code" }] }
],
"PreToolUse": [
{ "matcher": "", "hooks": [{ "type": "command", "command": "serena-hooks remind --client=claude-code" }] }
],
"SessionEnd": [
{ "matcher": "", "hooks": [{ "type": "command", "command": "serena-hooks cleanup --client=claude-code" }] }
]
}
}

Upstream oferuje też hook auto-approve i zastępczy prompt systemowy (claude --system-prompt="$(serena prompts print-cc-system-prompt-override)"). Na początek pomiń oba. Hook zatwierdza narzędzia edycyjne Sereny bez pytania, gdy pracujesz w trybie acceptEdits lub auto, a --system-prompt zastępuje domyślny prompt systemowy Claude Code, zamiast go uzupełniać.

Dokumentacja Sereny podaje wersję dla Codeksa w ~/.codex/hooks.json (--client=codex, PreToolUse dopasowane do Bash oraz hook reset po narzędziach Sereny). Skopiuj ten blok z upstreamu zamiast przerabiać powyższy JSON; jego sprzątanie w SessionEnd wymaga Codeksa 0.145.0 lub nowszego. Ta sama dokumentacja każe też ustawić codex_hooks = true w sekcji [features]. W codex-cli 0.157.1 takiej flagi nie ma na liście: codex features list pokazuje hooks jako stabilną i domyślnie włączoną, więc ten krok pomiń. Codex uruchamia nowy lub zmieniony hook dopiero wtedy, gdy zaufasz mu w /hooks (codex-cli 0.157.1).

Zmień nazwę OrderService.applyDiscount we wszystkich wywołaniach przez Serenę

Dział zatytułowany „Zmień nazwę OrderService.applyDiscount we wszystkich wywołaniach przez Serenę”

To zadanie z początku strony. Prompt podaje symbol przez ścieżkę nazwy Sereny (OrderService/applyDiscount) i plik, więc serwer językowy rozpoznaje dokładnie jeden symbol.

Co powinieneś zobaczyć: wywołania find_symbol, potem find_referencing_symbols (każdy wynik zawiera odwołujący się symbol i fragment kodu wokół referencji), pauzę na twoje potwierdzenie, a potem jedno wywołanie rename_symbol. Zmiana nazwy obejmuje w jednej operacji każdą referencję znaną serwerowi językowemu. CartService.applyDiscount zostaje nietknięty, bo to inny symbol.

Ostatnie wyszukiwanie tekstowe ma znaczenie. Serwer językowy nie widzi nazwy metody w napisie, fiksturze JSON, mocku w rodzaju vi.spyOn(service, 'applyDiscount') ani w service[methodName](). W tych miejscach zmiana nazwy psuje się po cichu, a sprawdzenie typów nie wyłapie przypadków z napisami. W Javie i innych językach z przeciążaniem wybierz przeciążenie w find_symbol indeksem liczonym od zera, np. OrderService/applyDiscount[0]; dokumentacja rename_symbol w Serenie podaje, że jego ścieżka nazwy może zamiast tego wymagać sygnatury metody.

Refaktoryzuj dużą bazę kodu: mapa wywołań, plan, edycja symboli, testy

Dział zatytułowany „Refaktoryzuj dużą bazę kodu: mapa wywołań, plan, edycja symboli, testy”

Zmiana nazwy to jeden krok. Prawdziwy refaktor, na przykład wydzielenie logiki rabatów z OrderService do klasy PromotionEngine, wymaga najpierw zasięgu zmiany. Ten proces używa codebase-memory-mcp do mapy i Sereny do edycji. Przebiega tak samo we wszystkich trzech narzędziach; różni się tylko instalacja.

  1. Zapisz punkt odniesienia. Na nowej gałęzi uruchom sprawdzenie typów, lint i pełny zestaw testów, i zachowaj wynik. Jeśli kod, który przenosisz, ma słabe pokrycie, najpierw dopisz testy charakteryzujące; jak silna jest twoja wyrocznia testowa pokazuje, jak to sprawdzić.

  2. Zmapuj wywołania. Zaindeksuj repozytorium raz, potem prześledź ścieżki przychodzące.

    Bez MCP to samo zapytanie uruchomisz w terminalu: codebase-memory-mcp cli trace_path --project my-project --function-name applyDiscount --direction inbound.

  3. Zaplanuj zmianę w przeglądalnych kawałkach. Poproś o plan w pliku, który przeczytasz w całości.

    Przejrzyj ten plan. To kontrakt dla reszty pracy, a wywołania bez testów to miejsca, w których dopisujesz testy przed przeniesieniem.

  4. Edytuj na poziomie symboli, kawałek po kawałku.

  5. Udowodnij zmianę testami, potem sprawdź, co według grafu się zmieniło. Uruchom pełną bramkę i porównaj z punktem odniesienia. Potem poproś agenta o detect_changes, które mapuje niezatwierdzony diff na dotknięte symbole z klasyfikacją ryzyka. Każdy dotknięty symbol powinien być w planie. Wszystko spoza planu to rozrost zakresu albo pominięte wywołanie.

Zainstaluj codebase-memory-mcp tak, żeby nie przepisał ci konfiguracji

Dział zatytułowany „Zainstaluj codebase-memory-mcp tak, żeby nie przepisał ci konfiguracji”

codebase-memory-mcp (DeusData) indeksuje repozytorium do trwałego lokalnego grafu i udostępnia 17 narzędzi MCP, w tym index_repository, search_graph, trace_path (alias trace_call_path), detect_changes, query_graph i get_architecture. Nie potrzebuje klucza API, a README stwierdza, że działa „100% locally and collects no telemetry”. search_graph wyszukuje też semantycznie modelem embeddingów wkompilowanym w binarkę, więc szukanie kodu po znaczeniu nie wymaga bazy wektorowej.

Instalacja jednym poleceniem to curl -fsSL https://raw.githubusercontent.com/DeusData/codebase-memory-mcp/main/install.sh | bash. Skrypt pobiera natywną binarkę i uruchamia jej polecenie install, które wykrywa każdego agenta na maszynie i zapisuje jego konfigurację: dla Claude Code wpis MCP w ~/.claude.json plus skill, trzech subagentów i hooki na SessionStart, SubagentStart oraz PreToolUse dla Grep, Glob i Bash. Dla Codeksa zapisuje config.toml, dodaje odnośnik w $CODEX_HOME/AGENTS.md, skill i agentów. Na komputerze zespołowym to więcej zmian, niż zamawiałeś.

  1. Przeczytaj skrypt, zanim go uruchomisz. Pobierz install.sh (albo install.ps1 na Windowsie) do pliku, przeczytaj go i dopiero wtedy uruchom.

  2. Zainstaluj samą binarkę. Przekaż --skip-config, żeby instalator nie ruszał konfiguracji agentów:

    Okno terminala
    bash install.sh --skip-config

    Albo użyj menedżera pakietów: npm install -g codebase-memory-mcp lub pip install codebase-memory-mcp (oba 0.11.0, sprawdzone 2026-09-26).

  3. Dodaj serwer sam, tam gdzie chcesz.

    Okno terminala
    claude mcp add codebase-memory -- /usr/local/bin/codebase-memory-mcp

    Zastąp /usr/local/bin/codebase-memory-mcp ścieżką, którą wypisuje which codebase-memory-mcp. Polecenia dla Claude Code i Codeksa wyprowadzono z JSON-a w README. /mcp powinno potem pokazać serwer z 17 narzędziami.

  4. Powiedz „Index this project” i potwierdź wynik przez index_status. Aby nowe projekty indeksowały się automatycznie przy pierwszym połączeniu, uruchom codebase-memory-mcp config set auto_index true. Zaindeksowane projekty odświeża watcher działający w tle.

Jeśli pełny instalator już przeszedł, codebase-memory-mcp uninstall usuwa należące do niego wpisy konfiguracji, skille, hooki i instrukcje oraz sam plik binarny, pyta przed usunięciem indeksów i wypisuje (ale nie usuwa) ścieżkę skryptu instalacyjnego.

Claude Context: wyszukiwanie semantyczne, gdy możesz utrzymać bazę wektorową

Dział zatytułowany „Claude Context: wyszukiwanie semantyczne, gdy możesz utrzymać bazę wektorową”

Claude Context (Zilliz) dzieli kod na fragmenty według AST, liczy dla nich embeddingi, zapisuje je w Milvusie lub Zilliz Cloud i odpowiada na zapytania w języku naturalnym hybrydowym wyszukiwaniem BM25 i wektorowym. Udostępnia cztery narzędzia: index_codebase, search_code, clear_index i get_indexing_status. Najbardziej pomaga tam, gdzie powiązany kod nie ma wspólnego słownictwa, więc wyszukiwanie tekstowe go nie znajdzie.

To też jedyny serwer w tym zestawieniu z zależnościami zewnętrznymi. Przy domyślnym EMBEDDING_PROVIDER=OpenAI fragmenty kodu trafiają do API embeddingów, a wektory do Zilliz Cloud. W pełni lokalnie zadziała z własnym Milvusem i EMBEDDING_PROVIDER=Ollama.

Trzymaj klucze poza linią poleceń i poza commitowanymi plikami:

Okno terminala
claude mcp add --scope project claude-context \
-e 'OPENAI_API_KEY=${OPENAI_API_KEY}' -e 'MILVUS_TOKEN=${MILVUS_TOKEN}' \
-- npx -y @zilliz/claude-context-mcp@0.1.15

Pojedyncze cudzysłowy zostawiają ${OPENAI_API_KEY} dosłownie w .mcp.json (sprawdzone w Claude Code 2.1.283); Claude Code podstawia wartość ze środowiska przy starcie.

MILVUS_ADDRESS jest opcjonalne przy osobistym kluczu API Zilliz; dodaj je dla własnego Milvusa. Potem przejdź ścieżkę dostawcy: „Index this codebase”, „Check the indexing status”, „Find functions that handle user authentication”.

Zanim się na nim ustandaryzujesz, oceń kondycję projektu. Na 2026-09-26 ostatnie wydanie npm pochodziło z 2026-06-22, ostatni push z 2026-07-14. Strojenie indeksu przy wyszukiwaniu semantycznym opisuje strona o wyszukiwaniu semantycznym w dużych bazach kodu.

Repomix pakuje repozytorium albo jego wycinek wybrany globem do jednego pliku przyjaznego modelom (domyślnie XML), z liczbą tokenów i skanem sekretów przez Secretlint. To bardziej format dostarczenia niż indeks. Używaj go, żeby przestudiować cudzą bibliotekę bez klonowania jej do projektu, przekazać modelowi cały moduł naraz albo wygenerować skill referencyjny.

Jako serwer MCP w wersji 1.18.1 rejestruje sześć narzędzi (przetestowany handshake, 2026-09-26): pack_codebase, pack_remote_repository, read_repomix_output, grep_repomix_output, generate_skill i attach_packed_output.

Okno terminala
claude mcp add repomix -- npx -y repomix --mcp

Repomix ma też własny marketplace wtyczek: /plugin marketplace add yamadashy/repomix, a potem /plugin install repomix-mcp@repomix.

Dodaj --sandbox po --mcp, żeby ograniczyć narzędzia plikowe do katalogu roboczego. Bez tej flagi README mówi, że serwer „can read any path the host user can”; z nią pakowanie zdalne i generowanie skilli są wyłączone.

CLI robi to samo bez MCP:

Okno terminala
npx repomix --compress # pakuje bieżący katalog do repomix-output.xml
npx repomix --remote yamadashy/repomix --compress # pakuje repozytorium z GitHuba bez klonowania
npx repomix --include "src/**/*.ts" --ignore "**/*.test.ts" # pakuje wycinek
npx repomix --skill-generate # zapisuje Claude Agent Skill w .claude/skills/<name>/

--compress używa Tree-sittera, żeby zachować sygnatury i pominąć ciała funkcji. Dostawca deklaruje około 70% mniej tokenów; ta strona tego nie mierzyła. --skill-output <path> zapisuje skill gdzie indziej, jeśli twój agent czyta skille z innego katalogu.

Jak udowodnić poprawność refaktoru bez czytania każdej linii?

Dział zatytułowany „Jak udowodnić poprawność refaktoru bez czytania każdej linii?”

Serwer code intelligence sprawia, że edycje agenta są precyzyjniejsze. Nie sprawia, że są poprawne. Dowodem jest ta sama bramka co przy każdej zmianie agenta, plus dwa sprawdzenia, które te serwery czynią tanimi.

SprawdzenieCo wyłapujeKto odpowiada
Sprawdzenie typów i lint na każdym kawałkuPominięte referencje w kodzie typowanym, zepsute importyCI, blokujące
Pełny zestaw testów porównany z punktem odniesieniaZmiany zachowania, których typy nie widząCI, blokujące
Pliki testów bez zmian, chyba że plan je wymienia (git diff --stat -- '*.test.ts')Agenta, który „naprawił” testy, żeby refaktor przeszedłRecenzent
Pozostałe wystąpienia starej nazwy w tekście, wypisane w PRNazwy pominięte w napisach, mockach, fiksturach i dostępie dynamicznymAutor (agent), sprawdza recenzent
Wynik detect_changes zgodny z listą symboli z planuRozrost zakresu i pominięte wywołaniaRecenzent
Pliki z mapą wpływu i planem dołączone do PRRefaktor, którego nikt nie zaudytuje po fakcieTech lead

Tech lead zatwierdza na podstawie tych dowodów. Strona o pakiecie dowodów ma szablon PR, który czyni te wiersze obowiązkowymi, a przegląd pull requesta od agenta opisuje sam przegląd.

Każdy serwer dodaje do sesji definicje narzędzi, a niektóre zwracają duże wyniki. Claude Code 2.1.283 i codex-cli 0.157.1 domyślnie ładują schematy narzędzi MCP przez tool search, więc bezczynne serwery kosztują mało; okno zapełniają wyniki.

  • Serena: użyj kontekstu pasującego do agenta (claude-code, codex, ide), żeby nie płacić za zdublowane narzędzia do plików i powłoki.
  • codebase-memory-mcp: domyślnie stronicuje odpowiedzi i przyjmuje max_output_tokens. Proś o jeden poziom głębokości naraz zamiast całego drzewa wywołań.
  • Repomix: spakowane repozytorium to największy pojedynczy wynik, jaki możesz dodać. Pakuj wycinek globem z --compress i przeszukuj wynik grepem zamiast czytać go w całości.
  • Claude Context: search_code zwraca fragmenty, więc węższe zapytania zwracają mniej.

Mierz zamiast zgadywać: uruchom /context w Claude Code przed jednym zapytaniem i po nim. Ogólny wzorzec opisuje strona o obniżaniu kosztu tokenów MCP.

Na 2026-09-26 (gwiazdki GitHub odczytane ze stron repozytoriów; instalacje wtyczek z claude.com/plugins): codebase-memory-mcp ★44,9 tys., Serena ★29,8 tys. i 89 147 instalacji wtyczki z marketplace, Repomix ★28 494, Claude Context ★12 572. Serena, codebase-memory-mcp i Repomix są w oficjalnym rejestrze MCP; Claude Context nie.

Agent ignoruje Serenę i i tak greppuje. W długich sesjach wygrywają wbudowane narzędzia. Naprawa: dodaj hooki remind i activate opisane wyżej i nazwij narzędzie Sereny w prompcie („use find_referencing_symbols”).

Serena nie widzi symboli albo trafia w zły projekt. Globalna konfiguracja uruchomiła Serenę poza repozytorium albo brakuje serwera językowego dla danego języka. Naprawa: aktywuj projekt tak, jak pokazują wyżej zakładki Codex i Cursor, w Claude Code i Codeksie używaj --project-from-cwd i zainstaluj zależność ze strony o obsłudze języków w dokumentacji Sereny.

/mcp pokazuje Serenę jako niedziałającą po starcie. Serwer językowy startuje dłużej, niż klient czeka. Naprawa: ustaw MCP_TIMEOUT=60000 dla Claude Code albo zwiększ startup_timeout_sec w Codeksie.

Zmiana nazwy przeszła sprawdzenie typów, ale wysypała się w czasie działania. Napis, mock, fikstura albo wywołanie obj[name]() nadal używa starej nazwy. Naprawa: po każdej zmianie nazwy szukaj starej nazwy w tekście, jak wymaga prompt powyżej, i popraw te miejsca ręcznie albo przejrzaną zamianą tekstu.

trace_path pomija wywołanie. Dynamiczne wywołanie, wstrzykiwanie zależności po tokenie tekstowym albo refleksja nie zostawiają krawędzi statycznej. Naprawa: uruchom check_index_coverage dla tych ścieżek, porównaj z find_referencing_symbols z Sereny, a to, czego nie widzi żadne z nich, zostaw testom.

codebase-memory-mcp zmienił konfigurację twojego agenta. Nowe hooki odpalają się przy każdym wywołaniu Grep i Bash, a pojawił się skill, którego nie instalowałeś. Naprawa: codebase-memory-mcp uninstall, potem ponowna instalacja z --skip-config i ręczne dodanie serwera.

Claude Context zwraca nieaktualne wyniki. Indeks powstał przed dużym merge’em albo przepisaniem historii. Naprawa: clear_index, potem ponownie index_codebase, i sprawdź get_indexing_status, zanim zaczniesz pytać.

Spakowane repozytorium zalało kontekst. Naprawa: pakuj wycinek przez --include, używaj --compress i pozwól agentowi wywoływać grep_repomix_output zamiast read_repomix_output na całym pliku.