Nếu bạn đã hiểu Sentry MCP (Model Context Protocol - giao thức kết nối model với công cụ/dữ liệu bên ngoài) là gì và tại sao nó hữu ích ở bài trước, thì bài này chúng ta sẽ đi thẳng vào thực hành: cài đặt Sentry MCP server trong Claude Code, dùng nó để truy vấn issue (lỗi được Sentry ghi nhận) ngay từ terminal, và tận dụng Claude Code VS Code extension để debug ngay trong editor mà không cần mở tab trình duyệt sang Sentry dashboard.
Đây là một trong những workflow thực tế nhất mà agentic engineering (kỹ thuật phát triển phần mềm có sự tham gia của AI agent) mang lại: thay vì bạn phải tự đọc log, tự nhảy qua nhảy lại giữa Sentry và code, bạn chỉ cần mô tả vấn đề bằng ngôn ngữ tự nhiên, và AI agent sẽ tự gọi đúng tool để lấy dữ liệu, phân tích, rồi đề xuất fix.
Installing and Connecting Sentry MCP to Claude Code
Sentry cung cấp một remote MCP server công khai tại https://mcp.sentry.dev/mcp, nghĩa là bạn không cần tự host hay build server - chỉ cần đăng ký nó với Claude Code bằng một dòng lệnh.
Cài đặt nhanh bằng CLI
Mở terminal và chạy:
claude mcp add --transport http sentry https://mcp.sentry.dev/mcp
Lệnh này báo cho Claude Code biết: "có một MCP server tên sentry, giao tiếp qua HTTP, nằm ở URL này". Claude Code sẽ lưu cấu hình này lại và tự động kết nối mỗi khi bạn mở session mới trong project (hoặc user, tuỳ scope bạn chọn - nói kỹ hơn ở phần dưới).
Luồng đăng nhập OAuth (OAuth - giao thức uỷ quyền đăng nhập không cần chia sẻ mật khẩu)
Điểm hay của Sentry MCP remote server là nó dùng OAuth thay vì bắt bạn tự đi tạo token thủ công. Lần đầu tiên bạn gọi một tool nào đó liên quan đến Sentry trong Claude Code (ví dụ bạn hỏi "list unresolved issues trong project X"), Claude Code sẽ:
- Phát hiện server
sentrychưa được xác thực (authenticate). - Tự động mở trình duyệt mặc định của bạn, chuyển đến trang đăng nhập Sentry.
- Bạn đăng nhập bằng tài khoản Sentry của mình (hoặc SSO nếu tổ chức bạn dùng), rồi bấm "Authorize" để cấp quyền cho Claude Code truy cập dữ liệu Sentry theo scope được yêu cầu (đọc issues, events, projects...).
- Trình duyệt redirect về một local callback, Claude Code nhận token và lưu lại (thường mã hoá, lưu trong keychain hệ điều hành hoặc file cấu hình cục bộ).
- Từ lần sau, bạn không cần đăng nhập lại - trừ khi token hết hạn hoặc bạn revoke quyền truy cập từ phía Sentry.
Toàn bộ quá trình này diễn ra tự động, bạn không phải copy-paste token thủ công trong trường hợp dùng máy cá nhân có trình duyệt.
Kiểm tra kết nối
Sau khi add xong, kiểm tra bằng:
claude mcp list
Bạn sẽ thấy sentry xuất hiện trong danh sách kèm trạng thái kết nối (connected/pending auth). Ngoài ra, khi đang ở trong một session Claude Code, bạn có thể gõ:
/mcp
Lệnh slash command này hiển thị danh sách các MCP server đang active, số lượng tool mà mỗi server expose ra (ví dụ Sentry MCP thường expose các tool như find_issues, get_issue_details, find_projects, find_releases...), và trạng thái auth hiện tại. Nếu thấy trạng thái "needs authentication", bạn có thể trigger lại luồng OAuth ngay từ đây.
Scope: local vs project vs user
Khi add MCP server, bạn có thể chỉ định scope bằng flag --scope:
claude mcp add --transport http sentry https://mcp.sentry.dev/mcp --scope local
claude mcp add --transport http sentry https://mcp.sentry.dev/mcp --scope project
claude mcp add --transport http sentry https://mcp.sentry.dev/mcp --scope user
| Scope | Lưu ở đâu | Dùng khi nào |
|---|---|---|
local (mặc định) |
Config cục bộ, gắn với project + user hiện tại, không share | Bạn muốn thử nghiệm riêng, chưa muốn ảnh hưởng team |
project |
File .mcp.json trong root repo, commit vào git |
Cả team cùng dùng chung Sentry MCP cho project này |
user |
Config global của user, áp dụng mọi project | Bạn làm việc trên nhiều repo và muốn Sentry MCP luôn sẵn sàng |
Với team dùng chung một project Sentry, mình khuyến nghị dùng --scope project để mọi thành viên clone repo về là có sẵn cấu hình, không cần add tay từng người.
Cấu hình static token cho CI/headless environment
Luồng OAuth mở trình duyệt chỉ hoạt động khi có môi trường có UI (máy cá nhân, máy có desktop). Trong môi trường CI/CD hoặc server headless (không có trình duyệt), bạn cần dùng access token tĩnh (static token) thay vì OAuth.
Sentry cho phép tạo Personal Access Token hoặc Org Auth Token (auth token - token xác thực) từ Sentry Settings, sau đó truyền vào qua biến môi trường SENTRY_AUTH_TOKEN. Cấu hình trực tiếp trong file .mcp.json ở root project:
{
"mcpServers": {
"sentry": {
"type": "http",
"url": "https://mcp.sentry.dev/mcp",
"headers": {
"Authorization": "Bearer ${SENTRY_AUTH_TOKEN}"
}
}
}
}
Trong pipeline CI, bạn set SENTRY_AUTH_TOKEN như một secret (ví dụ GitHub Actions secret, GitLab CI variable), Claude Code sẽ tự inject giá trị vào header khi gọi tool - không cần OAuth, không cần trình duyệt.
Mẹo: Nếu bạn làm việc trên nhiều project Sentry (ví dụ tách riêng theo team hoặc theo product), hãy đặt tên server rõ ràng hơn
sentrymặc định, ví dụsentry-checkoutvàsentry-payments, để tránh nhầm lẫn khi gõ/mcpvà thấy nhiều server cùng lúc.
Querying Sentry Issues and Reading Stack Traces from the Terminal
Phần thú vị nhất bắt đầu từ đây: bạn có thể ngồi ngay trong terminal, không cần mở Sentry dashboard, và hỏi Claude Code bằng ngôn ngữ tự nhiên để lấy thông tin issue, event, stack trace (stack trace - dấu vết ngăn xếp gọi hàm khi lỗi xảy ra), breadcrumb (breadcrumb - dấu vết các hành động/sự kiện xảy ra ngay trước khi lỗi xuất hiện).
Bắt đầu session
cd ~/projects/checkout-service
claude
Sau khi Claude Code khởi động và load context của repo, bạn gõ prompt trực tiếp.
Ví dụ 1: Liệt kê top issue chưa resolve
Prompt:
List the top 5 unresolved issues in project checkout-api sorted by event count this week.
Claude Code sẽ nhận diện đây là câu hỏi liên quan đến Sentry, và tự động gọi tool find_issues với các tham số tương ứng (project slug, filter is:unresolved, sort theo count, time range 7d). Bạn sẽ thấy Claude Code hiển thị một dòng xin phép gọi tool (tool-call approval) trước khi thực thi - đây là cơ chế an toàn mặc định, bạn có thể approve từng lần hoặc chọn "always allow" cho tool đó trong session.
Kết quả trả về có thể trông như sau:
Top 5 unresolved issues — checkout-api (last 7 days)
1. CHECKOUT-API-42 NullPointerException: Cannot read properties of undefined (reading 'total')
Events: 1,284 Users affected: 341 First seen: 2026-07-02
2. CHECKOUT-API-58 TimeoutError: Payment gateway did not respond within 5000ms
Events: 612 Users affected: 198 First seen: 2026-07-05
3. CHECKOUT-API-31 ValidationError: discount_code exceeds maximum length
Events: 203 Users affected: 87 First seen: 2026-06-28
4. CHECKOUT-API-67 ConnectionResetError: Redis connection reset by peer
Events: 155 Users affected: 42 First seen: 2026-07-06
5. CHECKOUT-API-19 KeyError: 'shipping_address' not found in session
Events: 98 Users affected: 51 First seen: 2026-06-20
Ví dụ 2: Xem chi tiết stack trace và breadcrumb
Prompt:
Show me the full stack trace and breadcrumbs for issue CHECKOUT-API-42.
Lần này Claude Code gọi tool get_issue_details với issue ID cụ thể. Kết quả trả về gồm stack trace đầy đủ (thường highlight đúng dòng code gây lỗi - có source map (source map - bản đồ ánh xạ code đã build về code gốc) support nếu project có cấu hình), cộng với chuỗi breadcrumb mô tả các bước user/hệ thống thực hiện ngay trước khi exception xảy ra.
Issue: CHECKOUT-API-42
NullPointerException: Cannot read properties of undefined (reading 'total')
Stack trace:
at calculateOrderSummary (src/services/orderService.ts:87:34)
at applyDiscount (src/services/discountService.ts:45:12)
at processCheckout (src/controllers/checkoutController.ts:112:9)
at Layer.handle [as handle_request] (node_modules/express/lib/router/layer.js:95:5)
at next (node_modules/express/lib/router/route.js:144:13)
Breadcrumbs:
10:32:01.102 navigation User navigated to /checkout
10:32:03.451 http POST /api/cart/apply-discount → 200
10:32:03.470 console "Applying discount code: SUMMER26"
10:32:03.481 http POST /api/checkout/process → 500
10:32:03.482 error NullPointerException thrown in calculateOrderSummary
Release: checkout-api@2.14.0
Environment: production
Nhìn vào đây, bạn (hoặc AI agent) đã có đủ manh mối: discount code SUMMER26 khiến orderSummary.total bị undefined tại dòng 87 của orderService.ts, xảy ra ngay sau khi applyDiscount được gọi.
Một số prompt hữu ích khác
Find all issues tagged with release checkout-api@2.14.0Show me events for CHECKOUT-API-42 that happened in the last 24 hours, grouped by environmentWhich issues in checkout-api first appeared after release 2.14.0 was deployed?
Mẹo: Khi triage (triage - phân loại và ưu tiên xử lý) nhiều issue cùng lúc, hãy yêu cầu Claude Code group theo
releasehoặcenvironmentthay vì chỉ list phẳng - điều này giúp bạn phát hiện nhanh issue nào là regression (lỗi mới phát sinh do bản deploy gần nhất) thay vì lỗi cũ đã tồn tại lâu.
Sentry MCP in the Claude Code VS Code Extension for In-Editor Debugging
Nếu bạn quen làm việc trong VS Code, Claude Code extension mang toàn bộ khả năng trên vào ngay editor, giúp bạn debug mà không phải rời màn hình code.
MCP connections trong sidebar
Sau khi cài Claude Code extension cho VS Code và mở panel chat của nó, bạn sẽ thấy một mục liệt kê các MCP server đang kết nối (tương đương lệnh /mcp ở CLI). Sentry sẽ xuất hiện ở đây với icon trạng thái (connected/disconnected), và bạn có thể click vào để xem danh sách tool đang expose hoặc trigger lại OAuth nếu cần re-auth.
Right-click vào exception để tra Sentry issue tương ứng
Đây là điểm khác biệt lớn nhất so với CLI thuần: khi bạn đang nhìn vào một đoạn code ném ra exception (ví dụ một khối try/catch, hoặc một dòng bạn nghi ngờ là nguồn gốc lỗi), bạn có thể:
- Bôi đen đoạn code hoặc right-click ngay tại dòng nghi vấn.
- Chọn "Ask Claude" (hoặc mở chat panel và tham chiếu file bằng
@filename). - Gõ prompt kiểu:
Find the Sentry issue matching this exception in checkout-api and show me recent occurrences.
Claude Code extension sẽ dùng context là file + dòng code bạn đang chọn, kết hợp gọi tool find_issues bên Sentry MCP để tìm issue có message/stack trace khớp, rồi trả kết quả ngay trong panel chat, không rời khỏi VS Code.
Diff review ngay trong editor
Khi bạn nhờ Claude đề xuất fix, extension không chỉ trả lời bằng text - nó hiển thị diff (diff - bản so sánh thay đổi giữa code cũ và mới) trực quan ngay trong editor, giống như một code review bình thường: dòng xoá tô đỏ, dòng thêm tô xanh. Bạn có thể:
- Xem diff từng file bị đề xuất thay đổi.
- Accept toàn bộ, accept từng hunk (đoạn thay đổi), hoặc reject và yêu cầu Claude sửa lại theo hướng khác.
- Yêu cầu Claude giải thích rõ hơn lý do thay đổi tại từng dòng trước khi accept.
Tool-call approval hiển thị inline
Mỗi khi Claude cần gọi một MCP tool (ví dụ get_issue_details, hoặc một tool ghi/sửa dữ liệu như resolve issue), extension hiển thị một thẻ approval ngay inline trong luồng chat - bạn thấy rõ tên tool, tham số được truyền vào, và có nút Approve/Deny. Với các tool chỉ đọc dữ liệu (read-only), bạn có thể cấu hình "always allow" để tránh phải confirm liên tục; với tool có khả năng thay đổi trạng thái issue trên Sentry (ví dụ resolve, ignore, assign), nên giữ chế độ xác nhận thủ công để tránh thao tác nhầm.
Về phím tắt: mở chat panel thường là Cmd/Ctrl + Shift + P rồi gõ "Claude Code: Open Chat", hoặc dùng icon trên activity bar. Trong lúc review diff, phím mũi tên lên/xuống giúp di chuyển giữa các hunk, và có shortcut riêng để accept/reject nhanh (hiển thị ngay trong tooltip của từng nút).
Mẹo: Khi debug một lỗi production gấp, hãy mở đồng thời file nghi vấn và chat panel side-by-side (VS Code hỗ trợ split view) - vừa xem diff đề xuất, vừa đối chiếu trực tiếp với code hiện tại, giúp bạn quyết định approve nhanh hơn nhiều so với chuyển qua lại giữa các cửa sổ.
Prompting AI to Diagnose and Propose Fixes Using Sentry Error Data
Chất lượng câu trả lời của AI agent phụ thuộc rất nhiều vào cách bạn đặt prompt. Phần này tập trung vào 3 kịch bản prompt thực tế nhất khi làm root cause analysis (root cause analysis - phân tích tìm nguyên nhân gốc rễ) và đề xuất fix dựa trên dữ liệu Sentry.
Prompt 1: Chẩn đoán nguyên nhân gốc từ stack trace + release gần nhất
Get the details for issue CHECKOUT-API-42, including its stack trace,
breadcrumbs, and the release it first appeared in. Then look at the diff
between that release and the previous one for src/services/orderService.ts
and src/services/discountService.ts. Explain the root cause before
suggesting anything — I want to understand why this happens, not just
how to patch it.
Prompt này yêu cầu rõ: lấy đủ 3 loại dữ liệu (stack trace, breadcrumb, release), sau đó đối chiếu với thay đổi code gần nhất, và quan trọng nhất - yêu cầu giải thích root cause TRƯỚC KHI đề xuất fix. Đây là thói quen prompt rất quan trọng: nếu bạn để AI nhảy thẳng vào "sửa", đôi khi nó patch nhầm triệu chứng (symptom) thay vì nguyên nhân thật.
Prompt 2: So sánh release đầu tiên xuất hiện lỗi với release hiện tại để phát hiện regression
Compare the "first seen" release of issue CHECKOUT-API-42 with the
currently deployed release of checkout-api. List every commit that
touched src/services/orderService.ts between those two releases, and
tell me which commit most likely introduced this regression. Check if
the event count spiked right after a specific deploy timestamp.
Đây là prompt cực kỳ hữu ích khi bạn nghi ngờ một lỗi không phải "luôn tồn tại" mà là regression mới phát sinh. Việc yêu cầu AI đối chiếu event count theo timestamp deploy giúp xác nhận giả thuyết bằng dữ liệu thực, thay vì đoán mò.
Prompt 3: Đề xuất fix tối thiểu kèm test
Based on the root cause you identified for CHECKOUT-API-42 (discount
application leaving orderSummary.total undefined when the cart is
emptied by a discount), propose the smallest possible code change to
src/services/orderService.ts that fixes this without changing the
public API of calculateOrderSummary. Also write a unit test in
src/services/__tests__/orderService.test.ts that reproduces the exact
scenario from the breadcrumbs (discount code SUMMER26 applied to an
empty cart) and fails before your fix, passes after.
Prompt này chốt lại yêu cầu: fix tối thiểu (minimal fix), không phá vỡ API công khai, và bắt buộc có test tái hiện đúng kịch bản lấy từ breadcrumb thật - không phải test chung chung. Khi Claude đề xuất xong, bạn review diff (ở CLI là hiển thị patch dạng text, ở VS Code extension là diff trực quan) trước khi apply, và có thể yêu cầu tạo PR (PR - pull request, yêu cầu merge code) nếu đã hài lòng.
Cách cấu trúc prompt tốt - ba nguyên tắc
- Chỉ rõ file path cụ thể: đừng hỏi chung chung "fix lỗi trong checkout service" - hãy nói rõ file nào, hàm nào, nếu bạn đã biết từ stack trace. Điều này giúp AI không phải đoán, tiết kiệm context window (context window - giới hạn lượng văn bản mô hình có thể xử lý cùng lúc) cho việc phân tích thay vì tìm kiếm.
- Luôn yêu cầu root cause trước khi fix: tách rõ hai bước "giải thích tại sao" và "sửa như thế nào" trong cùng một prompt hoặc qua hai lượt hỏi liên tiếp. Cách này buộc AI phải suy luận đầy đủ, và bạn cũng có cơ hội chặn lại nếu phân tích sai trước khi nó đi sửa code.
- Luôn nhắc kiểm tra breadcrumb: breadcrumb chứa ngữ cảnh hành vi thực tế (user đã làm gì trước khi lỗi xảy ra) mà đôi khi chỉ nhìn stack trace không thấy được. Nhắc AI "check the breadcrumbs" giúp nó không bỏ sót các case biên (edge case) như giỏ hàng rỗng, session hết hạn, hay race condition (điều kiện tranh chấp khi nhiều tiến trình chạy đồng thời).
Mẹo: Khi làm việc với issue phức tạp, hãy chia thành nhiều lượt hỏi thay vì nhồi tất cả vào một prompt dài: lượt 1 lấy dữ liệu + phân tích root cause, lượt 2 mới yêu cầu fix + test. Cách làm này giúp bạn kiểm soát chất lượng ở từng bước, thay vì nhận một câu trả lời "gộp" khó review.
Tổng kết
Qua bài này, bạn đã biết cách cài đặt Sentry MCP vào Claude Code bằng một dòng lệnh, hiểu luồng OAuth tự động cũng như cách cấu hình static token cho môi trường CI, biết cách đặt câu hỏi để truy vấn issue và đọc stack trace/breadcrumb ngay từ terminal, tận dụng VS Code extension để debug in-editor với diff review trực quan, và quan trọng nhất - biết cách viết prompt chất lượng để AI phân tích đúng root cause trước khi đề xuất fix. Ở bài tiếp theo, chúng ta sẽ khám phá cách dùng Sentry MCP với OpenCode - một agentic coding tool khác trong hệ sinh thái.