course
W tym samouczku pokażę ci, jak połączyć Claude Code z GitHubem przy użyciu łącznika Claude (zbudowanego na Model Context Protocol) i wykorzystać go do przeprowadzenia triage otwartoźródłowego repozytorium od początku do końca.
Ten workflow niczego nie klonuje, nie potrzebuje wektorowego magazynu danych i nie dotyka żadnego wiersza w docelowym repozytorium. Zamiast tego Claude Code czyta zgłoszenia przez łącznik i zapisuje artefakty w twoim lokalnym systemie plików, abyś mógł je przejrzeć, zanim zdecydujesz, co (jeśli w ogóle) opublikować.
Po ukończeniu tego samouczka będziesz mieć:
- Działającą konfigurację Claude Code i GitHub MCP z tokenem tylko do odczytu,
- Kilka wielokrotnego użytku promptów, które możesz skierować na dowolne publiczne repo,
- Kompletny artefakt triage dla
langchain-ai/langchain, z którym możesz się porównać.
Czym jest łącznik Claude Code do GitHuba (MCP)?
Claude Code to terminalowy agent do kodowania od Anthropic.
Domyślnie ma już dostęp do twojego systemu plików, shella i gita. Łączniki Claude Code rozszerzają go o zewnętrzny kontekst, taki jak zgłoszenia GitHuba, tickety w Linearze, wiadomości Slacka, zapytania do Postgresa itp., do których sam terminal nie ma dostępu.
Protokół łącznika nazywa się MCP (Model Context Protocol) i jest otwartym standardem udostępniania narzędzi i danych agentom LLM.
Anthropic utrzymuje katalog gotowych łączników, możesz też napisać własne lub połączyć się z zewnętrznymi serwerami MCP.
W tym samouczku użyjemy oficjalnego serwera GitHub MCP, który działa lokalnie przez Dockera. Kilka kluczowych założeń tej konfiguracji:
- Działa jako lokalny kontener Dockera bez pośrednika w chmurze, więc poświadczenia zostają na twojej maszynie.
- Uwierzytelnianie standardowym GitHub Personal Access Token (PAT), więc nie trzeba rejestrować aplikacji OAuth.
- Obsługuje uprawnienia o zawężonym zakresie, np. nieskopowany PAT, który daje dostęp tylko do odczytu w publicznych repozytoriach, więc zapis jest niemożliwy na poziomie API GitHuba.
- Jest udostępniany Claude Code przez polecenie
claude mcp add, po czym narzędzia są dostępne w każdej sesji.
Triage open source opiera się głównie na czytaniu, ocenie i jest tani w skutkach pomyłek.
Przeczytanie 50 zgłoszeń i ich klastrowanie jest nużące dla człowieka, ale dobrze pasuje do modelu, który może trzymać wszystko w kontekście naraz.
Poza tym najpierw zapisujemy wyniki jako lokalne pliki; zły klaster czy nieporadny szkic nic nie kosztuje, a wychwycisz to podczas przeglądu.
Samouczek łącznika Claude Code do GitHuba: zbuduj triage dla langchain-ai/langchain
W tej części skonfigurujemy łącznik GitHuba w Claude Code i uruchomimy cztery prompt’y triage na langchain-ai/langchain. To duże repo ML z naprawdę chaotycznym trackerem zgłoszeń. W skrócie, zbudujemy:
- Połączenie Claude Code z GitHubem przez oficjalny serwer MCP uruchomiony w Dockerze,
- Użycie PAT bez zakresu, aby łącznik był z założenia tylko do odczytu,
- Uruchomienie promptów triage zapisujących wyniki do lokalnych plików,
- Przegląd wyników, w tym przypadków, gdzie Claude odmówił zgrupowania zgłoszeń jako duplikatów.
Zróbmy to krok po kroku.
Krok 1: Zainstaluj wymagania wstępne dla Claude Code i Dockera
Zanim skonfigurujemy łącznik, potrzebujesz trzech rzeczy:
- Claude Code: możesz go zainstalować z oficjalnej instrukcji instalacji Anthropic,
- Docker Desktop: oficjalny serwer GitHub MCP działa w kontenerze, więc Docker musi być zainstalowany i uruchomiony,
- Konto GitHub: będzie potrzebne do wygenerowania PAT w następnym kroku.
Gdy masz już wszystkie wymagania, sprawdź, czy Docker działa:
docker info | head -5
Jeśli Docker nie jest zainstalowany lub demon nie działa, zobaczysz błąd „Cannot connect to the Docker daemon”. Na macOS uruchom Docker Desktop poleceniem:
open -a Docker
Docker Desktop potrzebuje 15–60 sekund, aby być w pełni gotowy, a docker info będzie w tym oknie nadal zwracać błąd. Zamiast sprawdzać ręcznie, użyj krótkiej komendy z oczekiwaniem, która odpytuje, aż demon wstanie:
until
docker info >/dev/null 2>&1; do sleep 2; echo "waiting..."; done && echo "Docker ready"
Gdy zobaczysz wydruk Docker ready, możesz iść dalej.
Krok 2: Utwórz token GitHub tylko do odczytu
Gdy Docker jest gotowy, przejdź do github.com/settings/tokens i wygeneruj nowy klasyczny token.
Uwaga: pozostaw wszystkie zakresy odznaczone. Nieskopowany token nadal może czytać publiczne repozytoria przez API GitHuba, co jest wszystkim, czego nasz agent potrzebuje. Bez wybranych zakresów token nie może niczego zapisać, zmodyfikować ani usunąć na GitHubie, niezależnie od tego, o co poprosimy Claude’a. To twarda gwarancja egzekwowana po stronie GitHuba, a nie obietnica dotycząca zachowania agenta.
Skopiuj i zapisz token od razu po wygenerowaniu, a następnie wyeksportuj go w swoim shellu:
export GITHUB_PERSONAL_ACCESS_TOKEN="ghp_your_token_here"
Jeśli jesteś już w sesji Claude Code, możesz mieć pokusę użycia prefiksu !, aby uruchomić komendę eksportu bezpośrednio w shellu (np. ! export GITHUB_PERSONAL_ACCESS_TOKEN="...").
Jednak ponieważ ! uruchamia tymczasowego podshela, zmienna zniknie w momencie zakończenia komendy i Claude jej nie zobaczy.
Aby bezpiecznie ustawić token bez wklejania go do promptu modelu, masz dwie opcje:
- Wpisz
/exit, aby wyjść z Claude’a, uruchom komendę eksportu w normalnym terminalu i ponownie uruchom claude. - Albo zapisz token w lokalnym pliku
.envw katalogu roboczym — Claude Code automatycznie czyta go przy starcie.
Zweryfikuj, że oba wymagania są gotowe, bez echo’owania samego tokena:
docker info | head -3
echo "Token set: ${GITHUB_PERSONAL_ACCESS_TOKEN:+yes}"
Druga komenda wypisze Token set: yes, jeśli zmienna istnieje, oraz Token set: (nic po dwukropku), jeśli jest pusta.
To bezpieczniejsze niż echo’owanie tokena bezpośrednio, bo nie ma ryzyka, że trafi do historii shella jako jawny tekst.
Krok 3: Zarejestruj łącznik GitHuba w Claude Code
Oficjalny serwer GitHub MCP jest dostarczany jako obraz Dockera.
Rejestrujemy go w Claude Code przy użyciu claude mcp add:
claude mcp add github \
-e GITHUB_PERSONAL_ACCESS_TOKEN=$GITHUB_PERSONAL_ACCESS_TOKEN \
-- docker run -i --rm \
-e GITHUB_PERSONAL_ACCESS_TOKEN \
ghcr.io/github/github-mcp-server
Dwa parametry -e to nie literówka::
- Pierwszy
-e(przed --) ustawia zmienną środowiskową dla procesu MCP uruchamianego przez Claude Code, - Drugi
-e(wewnątrz argumentówdocker run) każe Dockerowi przekazać tę zmienną do kontenera.
Jeśli pominiesz którykolwiek i kontener wystartuje z pustym tokenem, uwierzytelnienie do API GitHuba się nie powiedzie.
Aby sprawdzić, czy łącznik został pomyślnie zarejestrowany:
claude mcp list
Powinieneś zobaczyć:
github — docker run -i --rm -e GITHUB_PERSONAL_ACCESS_TOKEN ghcr.io/github/github-mcp-server — Connected
Jeśli zobaczysz Failed to connect, najczęstsze przyczyny to brak uruchomionego Dockera lub brak eksportu GITHUB_PERSONAL_ACCESS_TOKEN w tym samym shellu, w którym uruchomiłeś claude mcp add.
Krok 4: Kontrola połączenia
Token GitHuba jest już ustawiony. Teraz tworzymy katalog roboczy i otwieramy CLI Claude Code:
mkdir demo && cd demo
claude
Polecenie claude uruchamia interaktywną sesję w bieżącym katalogu.
Wszystkie pliki zapisywane przez Claude’a podczas triage trafią tutaj.
Następnie zadaj proste, tylko-do-odczytu pytanie, aby potwierdzić, że łącznik jest używany:
Using the GitHub MCP connector, fetch the 5 most recently updated open issues in langchain-ai/langchain. Just list titles and numbers.
Za pierwszym razem, gdy Claude Code użyje narzędzia GitHuba, poprosi o aprobatę.
Zatwierdź narzędzia tylko do odczytu, takie jak list_issues, get_issue, search_issues itp.
Jeśli Claude ucieknie się do curl przeciwko publicznemu API GitHuba zamiast użyć narzędzi MCP, łącznik nie jest załadowany. Wyjdź wtedy z sesji i uruchom ją ponownie.
Udane uruchomienie zwróci coś takiego:

Gdy zobaczysz prawdziwe numery zgłoszeń wracające przez MCP, możemy ruszać z właściwym triage.
Krok 5: Wygeneruj podsumowanie backlogu
Zadanie rozgrzewkowe jest w pełni tylko-do-odczytu. Teraz chcemy mapę tego, co jest w trackerze zgłoszeń, zanim zrobimy cokolwiek innego.
Prompt:
Using the GitHub MCP connector, pull the 50 most recently updated open issues from langchain-ai/langchain.
Read their titles, bodies, and labels. Group them by likely area — bugs, feature requests, documentation, questions, and "needs more info."
For each group, give me a count and 3-5 representative issue numbers with a one-line reason. Save as backlog-summary.md in the current directory.

Claude Code pobiera zgłoszenia przez łącznik, czyta je i zapisuje plik markdown grupujący je według obszarów, z reprezentatywnymi numerami zgłoszeń. Sam ten plik jest użyteczny — maintainer może go przejrzeć w 60 sekund i wiedzieć, w jaki tydzień wchodzi.
Krok 6: Oflaguj kandydatów na duplikaty
Wykrywanie duplikatów to miejsce, gdzie agent naprawdę się sprawdza.
Przeczytanie 50 zgłoszeń od deski do deski i zgrupowanie według leżącego u podstaw problemu jest nużące dla człowieka, ale model może trzymać je wszystkie w kontekście i wychwycić podobieństwa, których wyszukiwanie po słowach kluczowych by nie znalazło.
Prompt:
From the same 50 issues you already pulled, identify clusters of likely duplicates: issues describing the same underlying problem, even if titles differ. For each cluster, output issue numbers, a one-sentence shared-problem description, and confidence (high/medium/low). Save as duplicate-candidates.md.
Oto co Claude faktycznie wygenerował u mnie:

Najciekawsza część tego wyniku to klastry 2–4.
Prosty detektor duplikatów oparty na słowach kluczowych zamknąłby wszystkie cztery klastry jako duplikaty.
Claude wyraźnie odmówił nazwania ich duplikatami.
Oflagował je jako klastry komponentów tego samego podsystemu, z odrębnymi przyczynami źródłowymi, i wskazał, które faktycznie zamknąć (tylko klaster 1), a które triagować wspólnie, ale pozostawić otwarte.
To zachowanie, jakiego oczekiwałbyś od uważnego triagera-człowieka — i właśnie dlatego wzorzec „lokalne pliki, potem przegląd” jest wart dodatkowego kroku.
Gdybyśmy podpięli to bezpośrednio do API GitHuba i automatycznie zamknęli wszystko, co oflagował Claude, zamknęlibyśmy trzy prawdziwe bugi.
Krok 7: Przejrzyj, a potem zdecyduj, co opublikować
To cały sens wzorca z lokalnymi plikami.
Zanim cokolwiek dotknie GitHuba, sprawdź każdy plik .md zapisany przez Claude’a i oceń, czy grupowanie zgadza się z twoją intuicją.
Czy klastry o wysokiej pewności rzeczywiście wyglądają na duplikaty? Przeczytaj 2–3 szkice odpowiedzi i sprawdź, czy brzmią jak twoje.
Jeśli chcesz faktycznie opublikować komentarze lub nałożyć etykiety, masz dwie opcje:
- Ręcznie: możesz sam wkleić szkice na GitHubie. Dla jednorazowej sesji triage w cudzym repo to w porządku i często najlepszy wybór.
- Zezwól na zapisy w repo, które posiadasz: Wygeneruj osobny PAT z zakresem repo, dodaj go jako osobny wpis łącznika (np. github-write) i uruchom ponownie prompt’y, prosząc Claude’a o nałożenie etykiet i publikację komentarzy. Claude Code za pierwszym razem poprosi o aprobatę dla każdego narzędzia zapisującego.
Kluczowym zabezpieczeniem przy ścieżce zapisu jest oddzielenie tokenów do odczytu i zapisu.
Podsumowanie
W tym samouczku pokazałem, jak połączyć Claude Code z GitHubem przez MCP i użyć go do przeprowadzenia triage prawdziwego otwartoźródłowego repozytorium end-to-end.
Zamiast budować własnego bota GitHuba czy podłączać webhooki, workflow czyta zgłoszenia przez oficjalny serwer GitHub MCP, zapisuje cztery artefakty triage jako lokalne pliki i pozwala ci wszystko przejrzeć, zanim zdecydujesz, co opublikować.
Szerszy wniosek jest taki, że łączniki zmieniają Claude Code z agenta do kodowania w narzędzie, które potrafi czytać twoje narzędzia i przygotowywać pracę do twojej recenzji.
Domyślnie trzymaj tę pracę lokalnie, dopóki jej nie zobaczysz, a gdy zaufasz wzorcowi, możesz selektywnie pozwolić agentowi działać tam, gdzie koszt błędu jest niski.
Stąd możesz rozszerzyć projekt na kilka sposobów:
- Dodaj łączniki z prawem zapisu w repo, które posiadasz, aby etykiety i komentarze były nakładane automatycznie po przeglądzie,
- Dołącz łączniki do Lineara lub Slacka, aby zsynchronizować decyzje triage z workflow twojego zespołu,
- Zamień prompt’y w zaplanowane zadanie CI, które tworzy cotygodniowego PR-a triage,
- Albo uogólnij powyższe prompt’y do komendy slash Claude Code wielokrotnego użytku, działającej na dowolnym URL-u repo.
FAQs
Czy potrzebuję subskrypcji GitHub Copilot, żeby używać serwera GitHub MCP?
Nie. GitHub oferuje co prawda zdalny endpoint HTTP (api.githubcopilot.com/mcp), który możesz uwierzytelnić standardowym Personal Access Token, ale uruchomienie samohostowanego obrazu Dockera (jak w tym samouczku) utrzymuje połączenie lokalnie na twojej maszynie. Żadna metoda nie wymaga subskrypcji Copilota, ale podejście z Dockerem gwarantuje, że twój token nigdy nie opuszcza lokalnego środowiska.
Dlaczego pozostawić wszystkie zakresy PAT odznaczone?
Nieskopowany klasyczny PAT może czytać publiczne repozytoria przez API GitHuba, ale nie może nic zapisywać, modyfikować ani usuwać, nigdzie. Dzięki temu cały samouczek jest z założenia tylko do odczytu; nawet gdyby Claude próbował opublikować komentarz, GitHub odrzuciłby żądanie kodem 403. Dla triage repozytoriów, których nie posiadasz, to najbezpieczniejsza możliwa konfiguracja.
Co jeśli łącznik pokazuje „Failed to connect”?
Dwie częste przyczyny: Docker nie działa (docker info powinno zwrócić informacje o serwerze, a nie błąd) lub GITHUB_PERSONAL_ACCESS_TOKEN nie został wyeksportowany w shellu, w którym uruchomiłeś claude mcp add. Napraw to, co dotyczy twojego przypadku, usuń i dodaj łącznik ponownie, a potem zrestartuj sesję Claude Code.
Czy Claude Code publikuje coś na GitHubie podczas tego samouczka?
Nie. Wszystkie prompt’y są tylko do odczytu, wszystkie wyjścia są zapisywane do lokalnych plików, a nieskopowany PAT fizycznie nie może pisać do GitHuba. To ty decydujesz, czy cokolwiek kiedykolwiek zostanie opublikowane.
Czy mogę uruchamiać to według harmonogramu?
Tak. Owiń prompt’y w skrypt shella wywołujący Claude Code w trybie nieinteraktywnym (zobacz flagi --print i -p CLI claude w oficjalnej dokumentacji), a następnie uruchamiaj go przez crona lub GitHub Actions. Zacommituj artefakty do gałęzi i otwórz PR do przeglądu.
Czy mogę to skonfigurować przez menu łączników „+” w aplikacji webowej Claude?
Nie, ten przepływ dotyczy czatu Claude.ai / Desktop / mobile. Claude Code używa CLI. Ale po podłączeniu oba interfejsy mogą używać tych samych serwerów MCP pod spodem.