·

GitHub MCP với Claude Code CLI and VS Code

Cài đặt GitHub MCP trong Claude Code CLI and VS Code để AI agent có thể quản lý repository, pull request và issue ngay trong trình soạn thảo.

Ở bài trước bạn đã hiểu GitHub MCP là gì, có tool nào, và những rủi ro security cần lưu tâm. Bài này đi thẳng vào thực hành: cách cài đặt và cấu hình GitHub MCP server để chạy cùng Claude Code — cả ở bản CLI (terminal) và bản VS Code extension — kèm những pattern prompting thực chiến giúp bạn khai thác đúng khả năng của agent thay vì để nó đoán mò.

Claude Code là một trong những agentic coding tool hỗ trợ MCP tốt nhất hiện nay: nó quản lý MCP server ở cấp global, cấp project, và cấp session, cho phép bạn bật/tắt server linh hoạt theo từng ngữ cảnh làm việc. Nắm chắc phần setup này sẽ tiết kiệm cho bạn hàng giờ debug "tại sao agent không thấy tool GitHub" — một lỗi rất phổ biến khi mới bắt đầu.

Cài đặt và kết nối GitHub MCP vào Claude Code

Có ba cách chính để đăng ký GitHub MCP server với Claude Code: qua CLI command, qua file config JSON thủ công, hoặc dùng remote MCP server do GitHub host sẵn (không cần chạy container local).

Cách 1: Dùng lệnh claude mcp add (nhanh nhất)

Nếu bạn chạy GitHub MCP server qua Docker (cách được khuyến nghị vì không cần cài Go/binary riêng):

claude mcp add github -- docker run -i --rm \
  -e GITHUB_PERSONAL_ACCESS_TOKEN \
  -e GITHUB_TOOLSETS=repos,issues,pull_requests \
  ghcr.io/github/github-mcp-server

Trước đó, export token vào biến môi trường của shell (không hard-code token vào command):

export GITHUB_PERSONAL_ACCESS_TOKEN=ghp_xxxxxxxxxxxxxxxxxxxx

Kiểm tra server đã được đăng ký:

claude mcp list

Kết quả nên hiện github với trạng thái kết nối OK. Nếu báo lỗi, thường do Docker daemon chưa chạy, hoặc token sai/thiếu quyền.

Cách 2: Cấu hình trực tiếp trong file .mcp.json (khuyến nghị cho team)

Với project dùng chung trong team, nên commit file .mcp.json ở root repo (không chứa token thật) để mọi người cùng dùng chung cấu hình:

{
  "mcpServers": {
    "github": {
      "command": "docker",
      "args": [
        "run", "-i", "--rm",
        "-e", "GITHUB_PERSONAL_ACCESS_TOKEN",
        "-e", "GITHUB_TOOLSETS=repos,issues,pull_requests,code_security",
        "ghcr.io/github/github-mcp-server"
      ],
      "env": {
        "GITHUB_PERSONAL_ACCESS_TOKEN": "${GITHUB_PERSONAL_ACCESS_TOKEN}"
      }
    }
  }
}

Token thật vẫn để trong biến môi trường máy từng người (.env local, không commit), file .mcp.json chỉ tham chiếu bằng ${GITHUB_PERSONAL_ACCESS_TOKEN}. Cách này đảm bảo mọi thành viên team dùng đúng toolset đã thống nhất, tránh tình trạng mỗi người tự bật tool khác nhau dẫn đến hành vi agent không đồng nhất.

Cách 3: Remote GitHub MCP server (không cần Docker)

GitHub cũng cung cấp một remote MCP server host sẵn tại https://api.githubcopilot.com/mcp/, phù hợp nếu bạn không muốn quản lý container local:

claude mcp add --transport http github https://api.githubcopilot.com/mcp/ \
  --header "Authorization: Bearer ghp_xxxxxxxxxxxxxxxxxxxx"

Với remote server, bạn không cần lo về việc build/update image, nhưng cần lưu ý: request và response sẽ đi qua hạ tầng của GitHub thay vì chạy hoàn toàn local — cân nhắc yếu tố này nếu tổ chức bạn có chính sách data residency nghiêm ngặt.

Kiểm tra scope (phạm vi) đăng ký: user, project, hay local

Claude Code cho phép đăng ký MCP server ở 3 scope:
- --scope user: áp dụng cho mọi project trên máy bạn.
- --scope project (mặc định khi dùng .mcp.json): chỉ áp dụng cho project hiện tại, chia sẻ được qua git.
- --scope local: chỉ áp dụng cho session/máy hiện tại, không commit.

claude mcp add github --scope project -- docker run -i --rm -e GITHUB_PERSONAL_ACCESS_TOKEN ghc.io/github/github-mcp-server

Mẹo: Sau khi thêm server, luôn chạy lệnh /mcp bên trong Claude Code CLI (không phải terminal thường) để xem danh sách tool GitHub MCP đã load thành công chưa và preview schema từng tool — bước này giúp bạn phát hiện ngay nếu GITHUB_TOOLSETS cấu hình sai khiến thiếu tool cần dùng.

Quản lý GitHub Issues và Pull Requests từ terminal Claude Code

Khi GitHub MCP đã kết nối, bạn không cần rời terminal để làm việc với issue/PR — toàn bộ luồng có thể thực hiện bằng prompt tự nhiên, Claude Code sẽ tự chọn tool MCP phù hợp để gọi.

Đọc và triage issue

Liệt kê 10 issue đang open có label "bug" trong repo youthdev/english-grammar-learning-platform,
sắp xếp theo số comment giảm dần, và tóm tắt ngắn gọn nội dung mỗi issue.

Claude Code sẽ gọi search_issues hoặc list_issues với filter tương ứng, sau đó tổng hợp lại thành bảng dễ đọc trong terminal — nhanh hơn nhiều so với việc bạn tự vào GitHub UI lọc từng label.

Tạo issue có cấu trúc từ một đoạn log lỗi

Tao vừa gặp lỗi này khi chạy test:
[paste stack trace]
Hãy tạo issue mới trong repo hiện tại với title ngắn gọn, mô tả nguyên nhân khả năng,
bước reproduce dựa theo log, và gắn label "bug" + "needs-triage".

Đây là use case rất thực tế: agent không chỉ gọi create_issue, mà còn dùng khả năng suy luận của LLM để viết mô tả issue chất lượng — điều mà một script tự động thuần REST API không làm được vì nó không "hiểu" log.

Review pull request end-to-end

Lấy diff của PR #482 trong repo hiện tại, review theo các tiêu chí:
- Có thiếu test cho logic mới không
- Có vi phạm coding convention trong AGENTS.md không
- Có potential bug về edge case không
Sau đó tạo review comment cho từng vấn đề tìm được (line-level nếu xác định được vị trí),
KHÔNG tự approve hay merge.

Claude Code sẽ gọi get_pull_request_diff, get_pull_request_files, đọc thêm file convention nếu cần, rồi dùng create_pending_pull_request_review + add_pull_request_review_comment để để lại comment đúng vị trí dòng code — giống một reviewer thật, nhưng bạn vẫn giữ quyền quyết định cuối (approve/merge) trong tay người.

Merge có điều kiện (luôn nên có checkpoint người)

Kiểm tra PR #482: nếu tất cả CI check đã pass và có ít nhất 1 approval,
hãy squash-merge với message theo Conventional Commits. Nếu chưa đủ điều kiện,
báo cho tôi biết đang thiếu gì, KHÔNG tự merge.

Cách viết prompt có điều kiện rõ ràng ("nếu... thì...", "nếu chưa đủ, không tự làm") là kỹ thuật quan trọng để tránh agent hành động vượt quá ý định của bạn — đặc biệt với hành động không thể hoàn tác như merge.

Mẹo: Với các prompt có tính rủi ro (merge, close hàng loạt, force push), luôn thêm rõ ràng câu "không tự thực hiện bước X, chỉ báo cáo" ngay trong prompt — đừng chỉ dựa vào cấu hình quyền của token để chặn, vì một agent viết prompt mơ hồ vẫn có thể cố gắng gọi tool nó có quyền gọi.

Sử dụng GitHub MCP tool trong VS Code extension của Claude Code

Claude Code có extension chính thức cho VS Code, cho phép bạn dùng agent ngay trong sidebar của editor — và MCP server bạn đã đăng ký qua CLI (ở scope user hoặc project) sẽ tự động khả dụng trong extension, không cần setup lại từ đầu.

Cách kiểm tra MCP server trong VS Code

  1. Mở project đã có file .mcp.json (hoặc đã đăng ký server ở scope user) trong VS Code.
  2. Mở panel Claude Code (thường qua icon ở activity bar, hoặc Cmd+Esc / Ctrl+Esc tùy cấu hình bàn phím).
  3. Trong khung chat, gõ /mcp để xem danh sách server và tool đang active — tương tự cách kiểm tra ở CLI.
  4. Nếu server chưa hiện, kiểm tra lại việc extension có đang mở đúng workspace chứa .mcp.json, hoặc restart extension host (Cmd+Shift+P → "Developer: Restart Extension Host").

Lợi thế khi dùng trong VS Code so với terminal thuần

Điểm khác biệt lớn nhất khi dùng GitHub MCP trong VS Code extension so với CLI là context hiện có sẵn từ editor: agent có thể tham chiếu trực tiếp file đang mở, đoạn code đang được highlight/select, hoặc diff đang xem trong Source Control view — kết hợp với MCP tool để tạo ra hành động chính xác hơn.

Ví dụ prompt thực tế trong VS Code:

Đoạn code tôi đang select trong file src/services/payment.ts có vẻ liên quan
đến issue #217 (đang mở). Hãy đọc lại issue #217, xác nhận đoạn code này đã
fix đúng vấn đề mô tả trong issue chưa, và nếu đúng, comment vào issue #217
xác nhận đã fix kèm link tới file + số dòng liên quan (theo permalink GitHub).

Ở đây agent kết hợp context từ editor (đoạn code đang chọn) với tool MCP (get_issue, add_issue_comment) — một luồng gần như không thể làm gọn bằng CLI thuần vì thiếu ngữ cảnh "đang xem gì trong editor".

Xử lý PR review trực tiếp trong diff view

Khi bạn đang xem một PR checkout local trong VS Code (qua extension GitHub Pull Requests, hoặc chỉ đơn giản checkout branch), bạn có thể yêu cầu Claude Code:

So sánh code hiện tại trong branch này với diff của PR #482 trên GitHub
(dùng MCP để lấy diff gốc), chỉ ra nếu có commit mới được push sau khi tôi
bắt đầu review local, và tóm tắt phần thay đổi thêm đó.

Đây là pattern hữu ích để tránh review "hụt" khi PR bị push thêm commit trong lúc bạn đang đọc code.

Mẹo: Trong VS Code, luôn để agent xác nhận lại branch/file đang mở khớp với PR/issue bạn nhắc tới trước khi cho nó gọi tool ghi (write) — vì extension đôi khi giữ context của tab cũ, dẫn tới agent hành động nhắm nhầm PR nếu bạn vừa chuyển qua chuyển lại nhiều tab.

Các pattern prompting hiệu quả cho GitHub MCP trong Claude Code

Sau khi setup xong phần kỹ thuật, yếu tố quyết định trải nghiệm thực tế lại nằm ở cách bạn viết prompt. Dưới đây là các pattern đã được kiểm chứng qua thực tế sử dụng, không phải lý thuyết suông.

Pattern 1: Chỉ định rõ repo, tránh mơ hồ

Nếu bạn làm việc với nhiều repo, luôn nêu rõ tên repo (owner/repo) trong prompt đầu của session, hoặc xác nhận Claude Code đang ở đúng working directory tương ứng repo đó (agent thường suy ra repo từ git remote của thư mục hiện tại — nếu bạn đang ở thư mục sai, agent sẽ gọi tool nhắm vào repo sai).

Ta đang làm việc trên repo youthdev/product-agentic-system (không phải repo hiện tại
trong terminal). Từ giờ, mọi lệnh liên quan GitHub trong session này áp dụng cho repo đó.

Pattern 2: Giới hạn phạm vi kết quả để tránh tràn context

Với repo lớn, đừng để agent tự list_issues không filter — nó dễ kéo về hàng trăm item khiến context window đầy nhanh và các bước xử lý sau kém chính xác.

Lấy tối đa 20 issue mới nhất, chỉ lấy field title/number/labels/updated_at,
không cần lấy toàn bộ description.

Pattern 3: Chia nhỏ tác vụ nhiều bước bằng checklist rõ ràng

Với tác vụ phức tạp (ví dụ "dọn dẹp issue cũ, gắn lại label, đóng issue stale"), viết prompt theo dạng checklist tuần tự giúp agent thực hiện đúng thứ tự và bạn dễ theo dõi tiến độ:

Thực hiện tuần tự các bước sau trên repo hiện tại:
1. Tìm các issue không có comment nào trong 90 ngày qua và đang không có label "keep-open".
2. Với mỗi issue tìm được, comment thông báo sẽ auto-close sau 7 ngày nếu không có phản hồi.
3. Liệt kê lại danh sách issue đã xử lý ở bước 2 để tôi review trước khi thực hiện bước close thật.
KHÔNG tự động close issue nào trong lượt chạy này.

Pattern 4: Yêu cầu agent trích dẫn nguồn (source of truth) khi tổng hợp

Khi yêu cầu agent tổng hợp thông tin từ nhiều issue/PR, luôn yêu cầu nó trích dẫn số issue/PR cụ thể cho từng nhận định — giúp bạn verify lại nhanh, và giảm rủi ro agent "bịa" thông tin (hallucination) khi tổng hợp lượng lớn dữ liệu.

Tổng hợp các feedback về performance từ issue trong 3 tháng gần nhất,
với mỗi nhận định phải kèm số issue tương ứng (#123, #145...) để tôi verify lại.

Pattern 5: Kết hợp custom slash command cho tác vụ lặp lại

Nếu bạn thường xuyên lặp lại một luồng (ví dụ "review PR theo checklist team"), hãy đóng gói thành custom slash command trong Claude Code (file .claude/commands/review-pr.md) để không phải gõ lại toàn bộ prompt mỗi lần — vừa nhanh hơn, vừa đảm bảo tiêu chí review đồng nhất giữa các thành viên team.

Mẹo: Khi agent trả lời sai hoặc gọi nhầm tool GitHub MCP, đừng vội sửa bằng cách viết lại toàn bộ prompt — hãy hỏi ngược lại agent "bạn vừa gọi tool nào, với input gì, và vì sao chọn tool đó" trước. Rất nhiều lần nguyên nhân là do prompt của bạn mơ hồ (thiếu tên repo, thiếu điều kiện rõ ràng) hơn là do agent "sai".

Tips

  • Mẹo: Đặt tên biến môi trường token nhất quán (GITHUB_PERSONAL_ACCESS_TOKEN) giữa các máy trong team và giữa CLI/VS Code — extension VS Code đọc biến môi trường từ chính terminal/shell mà VS Code được khởi động, nên nếu bạn export token trong một shell session riêng rồi mở VS Code từ shell khác, extension sẽ không thấy token.
  • Mẹo: Dùng claude mcp remove github rồi add lại mỗi khi bạn đổi GITHUB_TOOLSETS hoặc token — một số phiên bản Claude Code cache lại schema tool cũ trong session đang chạy, restart session sau khi đổi cấu hình để chắc chắn.
  • Mẹo: Với repo monorepo lớn, ưu tiên dùng search_code với query có scope rõ (kèm path: hoặc extension:) thay vì để agent tự get_file_contents từng file một — nhanh hơn và tốn ít lượt tool call hơn.
  • Mẹo: Trong VS Code, tạo riêng một workspace setting bật GitHub MCP chỉ cho các project cần — tránh tình trạng mọi project bạn mở đều tự động có quyền gọi GitHub MCP dù không liên quan, gây khó kiểm soát và dễ nhầm repo.
  • Mẹo: Định kỳ (hàng tháng) rà soát lại danh sách MCP server đã đăng ký bằng claude mcp list, xóa server không còn dùng và xoay vòng (rotate) lại token GitHub — thói quen vệ sinh cấu hình này giúp giảm bề mặt tấn công đáng kể theo thời gian.