Courses
Trong hướng dẫn này, tôi sẽ chỉ cho bạn cách kết nối Claude Code với GitHub bằng một Claude connector (xây dựng trên Model Context Protocol) và dùng nó để phân loại toàn diện một kho mã nguồn mở.
Quy trình không nhân bản (clone) gì, không cần vector store và không chạm vào bất kỳ dòng dữ liệu nào trong repo đích. Thay vào đó, Claude Code đọc các issue thông qua connector và ghi các artefact vào hệ thống tệp cục bộ của bạn để bạn xem lại trước khi quyết định có đăng gì (nếu có) hay không.
Kết thúc hướng dẫn, bạn sẽ có:
- Một thiết lập Claude Code và GitHub MCP hoạt động với token chỉ đọc,
- Một số prompt có thể tái sử dụng để áp dụng cho bất kỳ repo công khai nào,
- Một artefact phân loại hoàn chỉnh cho
langchain-ai/langchainđể bạn đối chiếu.
Claude Code GitHub Connector (MCP) là gì?
Claude Code là trợ lý lập trình trên terminal của Anthropic.
Mặc định, nó đã có quyền với hệ thống tệp, shell và git của bạn. Claude Code Connectors mở rộng nó để truy cập ngữ cảnh bên ngoài, như GitHub issues, vé Linear, tin nhắn Slack, truy vấn Postgres, v.v., mà riêng terminal không thể chạm tới.
Giao thức connector có tên là MCP (Model Context Protocol), một tiêu chuẩn mở để cung cấp công cụ và dữ liệu cho các tác tử LLM.
Anthropic duy trì một thư mục connector sẵn dùng, và bạn cũng có thể tự viết hoặc kết nối tới các máy chủ MCP của bên thứ ba.
Trong hướng dẫn này, chúng ta sẽ dùng máy chủ GitHub MCP chính thức, chạy cục bộ qua Docker. Một vài ý tưởng cốt lõi đằng sau thiết lập này:
- Chạy như một container Docker cục bộ không qua trung gian đám mây, nên thông tin xác thực nằm trên máy của bạn.
- Xác thực bằng GitHub Personal Access Token (PAT) tiêu chuẩn, nên không cần đăng ký ứng dụng OAuth.
- Hỗ trợ phân quyền theo phạm vi, như PAT không phạm vi, cho phép chỉ đọc repo công khai, nên việc ghi là bất khả thi ở cấp API của GitHub.
- Được lộ diện với Claude Code thông qua lệnh
claude mcp add, sau đó các công cụ sẽ khả dụng trong mọi phiên.
Phân loại mã nguồn mở là công việc nặng về đọc, nặng về phán đoán và rẻ nếu sai.
Đọc 50 issue và gom cụm chúng là việc nhàm chán với con người, nhưng lại hợp với một mô hình có thể giữ tất cả trong ngữ cảnh cùng lúc.
Ngoài ra, chúng ta ghi đầu ra thành tệp cục bộ trước; một cụm kém hoặc bản nháp vụng về không tốn gì, và bạn có thể phát hiện khi rà soát.
Hướng dẫn Claude Code GitHub Connector: Xây dựng quy trình phân loại cho langchain-ai/langchain
Trong phần này, chúng ta sẽ thiết lập connector GitHub trong Claude Code và chạy bốn prompt phân loại với langchain-ai/langchain. Đây là một repo ML lớn với bộ theo dõi issue thực sự lộn xộn. Ở mức cao, chúng ta sẽ làm những việc sau:
- Kết nối Claude Code với GitHub qua máy chủ MCP chính thức chạy bằng Docker,
- Dùng PAT không phạm vi để connector ở chế độ chỉ đọc ngay từ thiết kế,
- Chạy các prompt phân loại và lưu kết quả vào tệp cục bộ,
- Rà soát đầu ra, bao gồm vài trường hợp Claude từ chối gom các issue thành bản sao trùng lặp.
Hãy thực hiện từng bước.
Bước 1: Cài đặt các điều kiện tiên quyết cho Claude Code và Docker
Trước khi thiết lập connector, bạn cần ba thứ:
- Claude Code: Bạn có thể cài đặt theo hướng dẫn chính thức của Anthropic,
- Docker Desktop: máy chủ GitHub MCP chính thức chạy trong container, nên Docker cần được cài và khởi động,
- Một tài khoản GitHub: Cần thiết để tạo PAT ở bước tiếp theo.
Khi đã đủ điều kiện, hãy kiểm tra Docker đang chạy:
docker info | head -5
Nếu Docker chưa cài hoặc daemon chưa chạy, bạn sẽ thấy lỗi "Cannot connect to the Docker daemon". Trên macOS, mở Docker Desktop bằng:
open -a Docker
Docker Desktop mất 15–60 giây để sẵn sàng hoàn toàn, và docker info sẽ tiếp tục báo lỗi trong khoảng thời gian đó. Thay vì kiểm tra thủ công, hãy dùng một dòng lệnh chờ nhỏ để thăm dò đến khi daemon sẵn sàng:
until
docker info >/dev/null 2>&1; do sleep 2; echo "waiting..."; done && echo "Docker ready"
Khi thấy in ra Docker ready, bạn có thể tiếp tục.
Bước 2: Tạo token GitHub chỉ đọc
Khi Docker đã sẵn sàng, tiếp theo hãy vào github.com/settings/tokens và tạo một token classic mới.
Lưu ý: Để trống mọi phạm vi (scope). Một token không phạm vi vẫn có thể đọc các repo công khai qua GitHub API, đó là tất cả những gì agent của chúng ta cần. Không chọn phạm vi nào đồng nghĩa token không thể ghi, sửa hoặc xóa bất cứ thứ gì trên GitHub, bất kể chúng ta yêu cầu Claude làm gì. Đây là đảm bảo cứng do phía GitHub cưỡng chế, không phải lời hứa về hành vi của agent.
Sao chép và lưu token ngay sau khi tạo, sau đó export nó trong shell của bạn:
export GITHUB_PERSONAL_ACCESS_TOKEN="ghp_your_token_here"
Nếu bạn đang ở trong một phiên Claude Code, bạn có thể sẽ muốn dùng tiền tố ! để chạy lệnh export trực tiếp trong shell (ví dụ, ! export GITHUB_PERSONAL_ACCESS_TOKEN="...").
Tuy nhiên, do ! sinh ra một subshell tạm thời, biến sẽ biến mất ngay khi lệnh kết thúc, và Claude sẽ không thấy nó.
Để đặt token an toàn mà không dán nó vào prompt của mô hình, bạn có hai lựa chọn:
- Gõ
/exitđể thoát Claude, chạy lệnh export trong terminal bình thường của bạn và khởi động lại claude. - Hoặc lưu token trong tệp
.envcục bộ trong thư mục làm việc của bạn, Claude Code sẽ tự động đọc khi khởi động.
Xác minh cả hai điều kiện đã sẵn sàng mà không in ra token:
docker info | head -3
echo "Token set: ${GITHUB_PERSONAL_ACCESS_TOKEN:+yes}"
Lệnh thứ hai in Token set: yes nếu biến tồn tại và Token set: (không có gì sau dấu hai chấm) nếu nó trống.
Cách này an toàn hơn so với echo token trực tiếp vì không có khả năng nó nằm lại trong lịch sử shell ở dạng văn bản thuần.
Bước 3: Đăng ký GitHub connector với Claude Code
Máy chủ GitHub MCP chính thức được phân phối dưới dạng ảnh Docker.
Chúng ta đăng ký nó với Claude Code bằng 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
Hai cờ -e ở đây không phải lỗi đánh máy::
- Cờ
-eđầu tiên (trước --) đặt biến môi trường cho tiến trình MCP mà Claude Code khởi chạy, - Cờ
-ethứ hai (bên trong tham sốdocker run) yêu cầu Docker chuyển tiếp biến đó vào container.
Nếu thiếu một trong hai và container khởi động với token trống, nó sẽ không xác thực được với GitHub API.
Để kiểm tra connector đã đăng ký thành công:
claude mcp list
Bạn sẽ thấy:
github — docker run -i --rm -e GITHUB_PERSONAL_ACCESS_TOKEN ghcr.io/github/github-mcp-server — Connected
Nếu thấy Failed to connect, hai nguyên nhân phổ biến nhất là Docker chưa chạy hoặc GITHUB_PERSONAL_ACCESS_TOKEN chưa được export trong cùng shell nơi bạn chạy claude mcp add.
Bước 4: Kiểm tra kết nối cơ bản
Giờ token GitHub đã sẵn sàng. Tiếp theo, tạo thư mục làm việc và mở CLI của Claude Code:
mkdir demo && cd demo
claude
Lệnh claude khởi chạy một phiên tương tác trong thư mục hiện tại.
Mọi tệp Claude ghi trong quá trình phân loại sẽ nằm ở đây.
Sau đó hỏi một câu chỉ đọc đơn giản để xác nhận connector đang được dùng:
Using the GitHub MCP connector, fetch the 5 most recently updated open issues in langchain-ai/langchain. Just list titles and numbers.
Lần đầu Claude Code dùng công cụ GitHub, nó sẽ yêu cầu phê duyệt.
Hãy phê duyệt các công cụ chỉ đọc như list_issues, get_issue, search_issues, v.v.
Nếu Claude quay về dùng curl với GitHub API công khai thay vì dùng công cụ MCP, tức là connector chưa được nạp. Khi đó, hãy thoát phiên và khởi động lại.
Một lần chạy thành công sẽ trả về tương tự như:

Khi bạn thấy các số issue thực sự trả về qua MCP, chúng ta sẵn sàng chạy quy trình phân loại thực tế.
Bước 5: Tạo bản tóm tắt tồn đọng
Bài tập khởi động này hoàn toàn chỉ đọc. Giờ, chúng ta muốn có một bức tranh tổng thể về những gì có trong bộ theo dõi issue trước khi làm gì khác.
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 lấy các issue qua connector, đọc chúng và viết một tệp markdown gom theo khu vực với các số issue tiêu biểu. Chỉ riêng tệp này đã hữu ích vì người duy trì có thể lướt qua trong 60 giây và biết tuần này sẽ đối mặt kiểu công việc gì.
Bước 6: Gắn cờ các ứng viên trùng lặp
Phát hiện trùng lặp là nơi một agent thể hiện giá trị.
Đọc 50 issue từ đầu đến cuối và gom theo vấn đề gốc là nhàm chán với con người, nhưng một mô hình có thể giữ tất cả trong ngữ cảnh và phát hiện chồng lấn mà tìm kiếm từ khóa sẽ bỏ lỡ.
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.
Đây là những gì Claude thực sự tạo ra trong lần chạy của tôi:

Phần thú vị nhất của đầu ra này là các cụm 2 đến 4.
Một bộ phát hiện trùng lặp ngây thơ dựa trên từ khóa có thể đã đóng cả bốn cụm là trùng lặp.
Claude đã thẳng thừng từ chối gọi chúng là trùng lặp.
Nó gắn cờ là các cụm theo thành phần có cùng hệ con, nguyên nhân gốc khác nhau và cho tôi biết cụm nào thực sự nên đóng (chỉ Cụm 1) và cụm nào nên phân loại chung nhưng vẫn để mở.
Đó là hành vi bạn mong đợi từ một người phân loại cẩn trọng, và chính là lý do mô hình “tệp cục bộ rồi rà soát” đáng để thêm một bước.
Nếu chúng ta nối thẳng vào API của GitHub và tự động đóng mọi thứ Claude gắn cờ, chúng ta đã đóng nhầm ba lỗi thực sự.
Bước 7: Rà soát, rồi quyết định đăng gì
Đây là mục đích của mô hình tệp cục bộ.
Trước khi chạm vào GitHub, hãy kiểm tra từng tệp .md Claude đã lưu và xem nhóm có khớp trực giác của bạn không.
Các cụm độ tin cậy cao có thực sự trông như trùng lặp không? Đọc 2–3 phản hồi nháp và kiểm tra xem chúng có đúng văn phong của bạn.
Nếu bạn muốn thực sự đăng bình luận hoặc gán nhãn, bạn có hai lựa chọn:
- Thủ công: Bạn có thể tự dán các bản nháp vào GitHub. Với một phiên phân loại một lần trên repo của người khác, cách này ổn và thường là lựa chọn đúng.
- Ủy quyền ghi trên repo bạn sở hữu: Tạo một PAT riêng có phạm vi repo, thêm nó như một mục connector riêng (ví dụ, github-write), và chạy lại các prompt yêu cầu Claude áp nhãn và đăng bình luận. Claude Code sẽ yêu cầu phê duyệt với mỗi công cụ ghi lần đầu sử dụng.
Nước đi an toàn chủ chốt cho luồng ghi là tách biệt token đọc và token ghi.
Kết luận
Trong hướng dẫn này, tôi đã minh họa cách kết nối Claude Code với GitHub qua MCP và dùng nó để phân loại trọn vẹn một kho mã nguồn mở thực tế.
Thay vì xây một bot GitHub tùy chỉnh hay mắc nối webhook, quy trình đọc issue qua máy chủ GitHub MCP chính thức, ghi bốn artefact phân loại thành tệp cục bộ và để bạn xem lại mọi thứ trước khi quyết định đăng gì.
Thông điệp rộng hơn là các connector biến Claude Code từ một trợ lý lập trình thành công cụ có thể đọc công cụ của bạn và chuẩn bị công việc để bạn duyệt.
Mặc định hợp lý là giữ công việc đó cục bộ cho đến khi bạn đã xem, và khi bạn tin tưởng mô hình này, bạn có thể chọn lọc cho agent hành động nơi chi phí sai sót thấp.
Từ đây, bạn có thể mở rộng dự án theo nhiều cách:
- Thêm connector có khả năng ghi trên các repo bạn sở hữu để nhãn và bình luận được áp dụng tự động sau khi rà soát,
- Xâu chuỗi connector Linear hoặc Slack để đồng bộ quyết định phân loại vào quy trình nhóm của bạn,
- Biến các prompt thành một job CI theo lịch tạo PR phân loại hằng tuần,
- Hoặc tổng quát hóa các prompt trên thành lệnh gạch chéo Claude Code tái sử dụng được cho mọi URL repo.
FAQs
Tôi có cần đăng ký GitHub Copilot để dùng máy chủ GitHub MCP không?
Không. Mặc dù GitHub có cung cấp một endpoint HTTP từ xa (api.githubcopilot.com/mcp) mà bạn có thể xác thực bằng Personal Access Token tiêu chuẩn, chạy ảnh Docker tự lưu trữ (như trong hướng dẫn này) sẽ giữ kết nối cục bộ trên máy của bạn. Cả hai cách đều không yêu cầu đăng ký Copilot, nhưng cách dùng Docker bảo đảm token của bạn không bao giờ rời môi trường cục bộ.
Vì sao để trống toàn bộ scope của PAT?
Một PAT classic không phạm vi có thể đọc các repo công khai qua GitHub API, nhưng không thể ghi, sửa hoặc xóa bất cứ thứ gì, ở bất cứ đâu. Điều này khiến toàn bộ hướng dẫn ở chế độ chỉ đọc theo thiết kế; ngay cả khi Claude cố đăng bình luận, GitHub sẽ từ chối với mã 403. Với việc phân loại các repo bạn không sở hữu, đây là thiết lập an toàn nhất.
Nếu connector hiển thị "Failed to connect" thì sao?
Hai nguyên nhân phổ biến: Docker chưa chạy (docker info phải trả về thông tin máy chủ, không phải lỗi), hoặc GITHUB_PERSONAL_ACCESS_TOKEN chưa được export trong shell nơi bạn chạy claude mcp add. Khắc phục nguyên nhân tương ứng, xóa và thêm lại connector, rồi khởi động lại phiên Claude Code.
Claude Code có đăng gì lên GitHub trong hướng dẫn này không?
Không. Tất cả prompt đều chỉ đọc, mọi đầu ra đều được ghi vào tệp cục bộ, và PAT không phạm vi về mặt kỹ thuật không thể ghi lên GitHub. Bạn kiểm soát việc có đăng gì hay không.
Tôi có thể chạy cái này theo lịch không?
Có. Gói các prompt trong một shell script gọi Claude Code ở chế độ không tương tác (xem các cờ --print và -p của CLI claude trong tài liệu chính thức), rồi chạy qua cron hoặc GitHub Actions. Commit các artefact lên một nhánh và mở PR để rà soát.
Tôi có thể thiết lập thông qua menu connector '+' trên web app Claude thay vào đó không?
Không, luồng đó dành cho chat Claude.ai / Desktop / di động. Claude Code dùng CLI. Nhưng khi đã kết nối, cả hai giao diện đều có thể dùng chung các máy chủ MCP bên dưới.