Chrome DevTools MCP: Cho Agent AI đôi mắt để nhìn vào trình duyệt
Hướng dẫn chuyên nghiệp từ cài đặt đến thực chiến: kết nối Chrome DevTools MCP với VS Code, Cursor, GitHub Copilot, Claude Code và Gemini CLI bằng npx chrome-devtools-mcp@latest và cờ --autoConnect. Kèm cấu hình JSON, quy trình kết nối Chrome M144+, ví dụ Lighthouse audit, phân tích lỗi CORS và checklist xác minh hoạt động.
Mục lục
Tuần trước tôi bảo agent sửa một bug CORS trên trang admin. Nó viết ra ba phiên bản “đúng về mặt lý thuyết” — thêm header, đổi credentials, sửa middleware — không cái nào chạy. Vì nó không thấy request thực tế trong DevTools. Nó chỉ đoán.
Chrome DevTools MCP xóa bỏ khoảng mù đó. Agent mở Chrome thật, đọc Network waterfall thật, chạy Lighthouse thật, rồi mới sửa. Dưới đây là cách tôi cài đặt nó cho VS Code, Cursor, GitHub Copilot, Claude Code và Gemini CLI, kèm những quy trình đã thực sự giúp tôi rút ngắn thời gian debug từ nửa giờ xuống vài phút.
TL;DR — npx chrome-devtools-mcp@latest là lệnh duy nhất bạn cần nhớ. Cờ --autoConnect (Chrome M144+) cho phép tái dùng phiên Chrome đã đăng nhập. Phần còn lại chỉ là dán JSON vào đúng file config.
Nguồn chính thức (đọc trước khi tin tôi)
| Nguồn | Link | Dùng khi |
|---|---|---|
| GitHub repo | ChromeDevTools/chrome-devtools-mcp | Cấu hình client, cờ CLI, danh sách tool |
| npm | chrome-devtools-mcp | Phiên bản, changelog |
| Chrome Developers Blog | Chrome DevTools (MCP) for your AI agent | Triết lý thiết kế |
| Chrome Developers Blog | Let your Coding Agent debug your browser session | Quy trình --autoConnect |
| Tool reference | docs/tool-reference.md | 29 tool có sẵn |
Yêu cầu nền tảng: Node.js ≥ 20.19 LTS, Chrome stable (hoặc Chrome for Testing), npm. Dùng --autoConnect cần Chrome M144 trở lên — nếu chưa lên stable, chỉ định --channel=beta hoặc --channel=canary.
Cấu hình chuẩn dùng chung
Gần như tất cả client chia sẻ cùng một cấu hình gốc. Ghim nó lại — mọi biến thể chỉ là thêm cờ:
{
"mcpServers": {
"chrome-devtools": {
"command": "npx",
"args": ["-y", "chrome-devtools-mcp@latest"]
}
}
}
Cờ -y bỏ qua prompt xác nhận của npx ở lần đầu. @latest bảo đảm client luôn lấy bản mới — đổi lại độ ổn định: pin version ([email protected]) nếu bạn chạy trong CI.
Các cờ tôi dùng nhiều nhất:
| Cờ | Mục đích |
|---|---|
--autoConnect | Kết nối Chrome M144+ đang chạy — giữ nguyên đăng nhập |
--browser-url=http://127.0.0.1:9222 | Kết nối thủ công qua remote debugging port (sandbox, WSL, VM) |
--headless | CI hoặc background task |
--isolated | Profile tạm, tự xoá sau phiên — tốt cho audit lặp lại |
--channel=beta | Dùng Chrome Beta khi stable chưa có M144 |
--viewport=1440x900 | Chuẩn hoá kích thước khi chụp screenshot |
--no-usage-statistics | Tắt telemetry Google |
--slim | Chỉ 3 tool (navigate, evaluate, screenshot) — tiết kiệm context |
Cài đặt theo từng client
Sáu client dưới đây đều dùng chung cấu hình gốc phía trên — phần khác biệt chỉ là đặt vào đâu và gõ lệnh nào để thêm. Mở phần bạn cần:
1. VS Code + GitHub Copilot
Cách nhanh — cài như plugin (khuyến nghị, gồm cả skills):
- Mở Command Palette (
⌘⇧P/Ctrl+Shift+P). - Chạy
Chat: Install Plugin From Source. - Dán
https://github.com/ChromeDevTools/chrome-devtools-mcp.
Cách thủ công — chỉ MCP server:
code --add-mcp '{"name":"chrome-devtools","command":"npx","args":["-y","chrome-devtools-mcp@latest"]}'Hoặc thêm vào .vscode/mcp.json (workspace) hay user settings:
{
"servers": {
"chrome-devtools": {
"command": "npx",
"args": ["-y", "chrome-devtools-mcp@latest"]
}
}
}Sau đó mở Chat, chọn Agent mode, tick chrome-devtools ở Tools picker.
2. Cursor
One-click: mở nút install trên README.
Thủ công: Cursor Settings → MCP → New MCP Server, dán cấu hình chuẩn phía trên. File kết quả nằm ở ~/.cursor/mcp.json:
{
"mcpServers": {
"chrome-devtools": {
"command": "npx",
"args": ["-y", "chrome-devtools-mcp@latest", "--autoConnect", "--viewport=1440x900"]
}
}
}Restart Cursor. Ở panel Chat bạn sẽ thấy dòng chrome-devtools · 29 tools — đó là tín hiệu xanh.
3. Claude Code
Một dòng CLI (chỉ MCP):
claude mcp add chrome-devtools --scope user npx chrome-devtools-mcp@latestPlugin đầy đủ (MCP + Skills):
/plugin marketplace add ChromeDevTools/chrome-devtools-mcp
/plugin install chrome-devtools-mcpRestart Claude Code, chạy /skills để kiểm tra skills đã load. Bản plugin kèm các skill hướng dẫn agent dùng đúng tool — đáng cài nếu bạn muốn độ chính xác cao hơn cấu hình MCP trần.
4. Gemini CLI
# Project-wide — MCP only
gemini mcp add chrome-devtools npx chrome-devtools-mcp@latest
# Toàn máy
gemini mcp add -s user chrome-devtools npx chrome-devtools-mcp@latest
# Hoặc cài dạng extension (MCP + Skills + tự cập nhật)
gemini extensions install --auto-update \
https://github.com/ChromeDevTools/chrome-devtools-mcp5. Copilot CLI (GitHub CLI agent)
copilot
/mcp addNhập:
- Server name:
chrome-devtools - Server Type:
[1] Local - Command:
npx -y chrome-devtools-mcp@latest
Lưu bằng Ctrl+S.
6. Codex CLI (bao gồm Windows 11)
codex mcp add chrome-devtools -- npx chrome-devtools-mcp@latestTrên Windows 11, sửa .codex/config.toml để Codex tìm đúng Chrome và tăng timeout khởi động:
[mcp_servers.chrome-devtools]
command = "cmd"
args = ["/c", "npx", "-y", "chrome-devtools-mcp@latest"]
env = { SystemRoot = "C:\\Windows", PROGRAMFILES = "C:\\Program Files" }
startup_timeout_ms = 20_000 --autoConnect: kết nối Chrome đã đăng nhập
Đây là chế độ tôi khuyên cho công việc hàng ngày — agent dùng đúng session bạn đang mở: cookie, đăng nhập SSO, extension, tab đang debug. Không phải restart, không phải login lại.
Tóm tắt ba bước: (1) bật chrome://inspect/#remote-debugging trong Chrome M144+, (2) thêm --autoConnect vào args của MCP client, (3) chạy prompt khởi động và bấm Allow trong dialog.
--autoConnect gắn với profile mặc định của Chrome đang chạy. Nếu bạn đa-profile, hãy chắc profile chứa session bạn cần là profile được mở đầu tiên. Agent sẽ thấy mọi window của profile đó — đừng để mở Gmail cá nhân khi đang dùng agent cho khách hàng.
Chi tiết ba bước và cấu hình JSON cho --autoConnect
Bước 1. Trong Chrome (M144+), mở chrome://inspect/#remote-debugging → bật Allow incoming debugging connections. Chrome sẽ ghi token vào user data dir của profile hiện tại.
Bước 2. Thêm --autoConnect vào args. Ví dụ cho Gemini CLI:
{
"mcpServers": {
"chrome-devtools": {
"command": "npx",
"args": ["chrome-devtools-mcp@latest", "--autoConnect"]
}
}
}Nếu stable chưa có M144, thêm --channel=beta (hoặc canary) và đảm bảo Chrome Beta/Canary đã chạy:
{
"mcpServers": {
"chrome-devtools": {
"command": "npx",
"args": ["chrome-devtools-mcp@latest", "--autoConnect", "--channel=beta"]
}
}
}Bước 3. Chạy prompt đầu tiên:
Check the performance of https://developers.chrome.comChrome sẽ hiện dialog xin phép — bấm Allow. Từ lúc này agent có thể đọc Network, chạy Lighthouse, và evaluate_script ngay trong tab của bạn.
Khi nào dùng --browser-url thay vì --autoConnect (sandbox, WSL, Docker, VM)
Những môi trường không mở được dialog quyền — chạy Chrome thủ công với cổng debug:
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome \
--remote-debugging-port=9222 \
--user-data-dir=/tmp/chrome-profile-stableRồi cấu hình client:
{
"mcpServers": {
"chrome-devtools": {
"command": "npx",
"args": [
"chrome-devtools-mcp@latest",
"--browser-url=http://127.0.0.1:9222"
]
}
}
}Chrome yêu cầu --user-data-dir riêng khi bật --remote-debugging-port — đừng dùng profile cá nhân, bất kỳ app nào trên máy đều có thể kết nối vào cổng đó.
29 tool chia theo nhóm
Biết tool nào có sẵn giúp bạn viết prompt gọn hơn và agent chọn đúng.
| Nhóm | Tool tiêu biểu | Use case |
|---|---|---|
| Input (9) | click, fill_form, hover, press_key, upload_file | Reproduce user flow |
| Navigation (6) | navigate_page, new_page, wait_for, list_pages | Điều hướng SPA |
| Emulation (2) | emulate (device, network, CPU), resize_page | Test 3G, iPhone, reduced-motion |
| Performance (4) | performance_start_trace, performance_analyze_insight, take_memory_snapshot | Core Web Vitals, heap growth |
| Network (2) | list_network_requests, get_network_request | Lọc CORS, payload, timing |
| Debugging (6) | lighthouse_audit, evaluate_script, list_console_messages, take_screenshot, take_snapshot | Audit, console, DOM tree |
Cần tiết kiệm context? Dùng --slim — chỉ 3 tool navigate_page, evaluate_script, take_screenshot.
Prompt mẫu đã dùng thật
Lighthouse audit có hướng dẫn
Đừng chỉ nói “chạy Lighthouse”. Hãy đưa ngưỡng và yêu cầu kế hoạch:
Truy cập http://localhost:3000/pricing. Emulate 4G throttling + Moto G4.
Chạy lighthouse_audit với các category performance, accessibility, seo.
Nếu LCP > 2.5s hoặc CLS > 0.1, mở performance_start_trace, reload trang,
stop trace, rồi dùng performance_analyze_insight để trả về top 3 nguyên
nhân. Đề xuất fix cụ thể kèm file/line trong repo hiện tại, không sửa code.
Prompt này buộc agent lập plan trước, và không edit code trong vòng đầu — bạn review insight trước khi cho sửa.
Debug CORS (ví dụ cổ điển)
Mở https://app.local/dashboard. Đợi mạng idle. Dùng list_network_requests
lọc status >= 400 hoặc failed, chỉ domain api.local.
Với request lỗi đầu tiên, gọi get_network_request để đọc request & response
headers đầy đủ. Đối chiếu Access-Control-Allow-Origin với Origin, kiểm tra
preflight OPTIONS có trả 204 không, và xem có thiếu Allow-Credentials khi
client gửi credentials: 'include' không. Tóm tắt root cause trong 3 gạch
đầu dòng và đề xuất patch ở server middleware — không sửa code.
Ba điểm hay gặp mà agent sẽ bỏ sót nếu không được gợi ý: (1) preflight thiếu Access-Control-Allow-Methods, (2) Allow-Origin: * không tương thích credentials: 'include', (3) proxy (Nginx/Cloudflare) strip header ở layer khác.
Reproduce bug form + console trace
navigate_page tới /checkout. fill_form với {email:"[email protected]", card:"4242..."},
click "Place order". wait_for text "Order confirmed" hoặc timeout 10s.
Nếu timeout: list_console_messages (level error, warning),
list_network_requests (status >= 400), take_screenshot viewport.
Trả về bundle: console log + failing request + screenshot + giả thuyết
nguyên nhân.
Performance regression giữa hai commit
Emulate Slow 4G. Trace 2 lần: trước và sau khi checkout commit abc123.
So sánh LCP, TBT, JS bundle size từ network. Báo delta và flag nếu
TBT tăng > 100ms.
Checklist xác minh hoạt động
Sau khi dán JSON, chạy lần lượt:
-
npx chrome-devtools-mcp@<pinned-version> --helpchạy được (Node ≥ 20.19; dùng phiên bản cụ thể đã review, không dùng@latesttrên máy công ty) - Restart client — thấy
chrome-devtoolstrong tool picker - Prompt khởi động: “Check the performance of https://developers.chrome.com” → Chrome tự mở
- Dialog
chrome://inspecthiện khi dùng--autoConnect— bấm Allow - Agent trả về Lighthouse scores, không phải “tôi không thể truy cập trình duyệt”
-
list_network_requeststrả về > 0 request cho trang public -
take_screenshottạo file PNG (kiểm tra attachments trong chat) - Nếu lỗi
ECONNREFUSEDvới--browser-url: Chrome đang chạy cổng đúng?curl http://127.0.0.1:9222/json/versionphải trả JSON - Nếu
--autoConnectkhông kết nối được: Chrome version ≥ 144 (chrome://version)? Đã bật Allow trongchrome://inspect? - Log debug: thêm
--logFile=/tmp/cdp-mcp.logvàDEBUG=*khi báo bug
Trên macOS, nếu Chrome khởi động chậm và Codex/Cursor timeout, tăng startup_timeout_ms trong config (mặc định 10s, thử 20–30s). Lần đầu npx cũng tốn 5–15s để fetch package về ~/.npm/_npx.
Bảo mật: đừng bỏ qua phần này
Chrome DevTools MCP phơi toàn bộ nội dung trình duyệt cho MCP client. Agent đọc được DOM, cookie, localStorage, network payload. Một số hệ quả thực tế:
- Không đăng nhập tài khoản cá nhân vào profile bạn dùng với agent. Dùng profile công việc riêng, hoặc
--isolated. - Redact headers nhạy cảm:
--redactNetworkHeadersche Authorization, Cookie, Set-Cookie trước khi gửi về client. --remote-debugging-portlà public local port: mọi process trên máy đều connect được. Đừng bật khi đang browse bank.- Tắt telemetry nếu cần:
--no-usage-statisticshoặc envCHROME_DEVTOOLS_MCP_NO_USAGE_STATISTICS=1. CI tự động tắt nếuCIenv được set. - Pin version trong CI:
[email protected]thay vì@latestđể tránh supply-chain surprise. Tham khảo OWASP MCP Top 10 về tool description poisoning.
Hướng dẫn dùng trong doanh nghiệp (enterprise guardrails)
Nếu tổ chức của bạn qua security review cho Chrome DevTools MCP, thường sẽ có một bộ điều kiện bắt buộc đi kèm. Bản dưới đây gom những ràng buộc hay gặp nhất — khớp với phần trên nhưng cụ thể và cứng hơn.
Cấu hình bắt buộc (tắt telemetry, pin version)
Thay thế cấu hình mặc định @latest trong các ví dụ phía trên bằng bản này khi chạy trên máy công ty:
{
"mcpServers": {
"chrome-devtools": {
"command": "npx",
"args": [
"chrome-devtools-mcp@<pinned-version>",
"--no-usage-statistics",
"--no-performance-crux"
]
}
}
}
Hai cờ --no-usage-statistics và --no-performance-crux tắt hai kênh gửi dữ liệu riêng biệt về Google: chỉ số sử dụng tool, và URL trang trong performance trace gửi đến CrUX API. Không có chúng, cả usage metadata lẫn URL nội bộ đều có thể rò ra.
Điều kiện sử dụng
- Chỉ máy dev cá nhân. Không chạy trên shared host, bastion, remote dev workspace, hay CI/CD. Tức là bỏ luôn ý tưởng nhúng vào pipeline ở phần productivity — giữ nó chạy tay trên laptop.
- Chỉ non-production. Dùng cho local dev và testing; không trỏ agent vào URL production, API production, hay tài khoản khách hàng thật.
- Tắt telemetry: luôn có
--no-usage-statisticsvà--no-performance-crux. - Profile Chrome biệt lập. Mặc định server dùng
~/.cache/chrome-devtools-mcp/chrome-profile— không đụng vào Chrome cá nhân. Cần cô lập sâu hơn thì thêm--isolated(profile tạm, tự xoá sau phiên). Tránh--autoConnectvới profile chứa credentials production. - Pin version, chạy
npm audit. Không dùng@latest. Ghim về version cụ thể đã review, và chạynpm audittrước khi nâng. - Giữ prompt xin phép trong Claude Code. Mutating action (
click,fill,navigate_page,evaluate_script, …) phải hỏi approval trước khi chạy. Read-only (list_pages,get_console_message,list_network_requests) có thể auto-approve. Không tắt permission prompt.
Nếu tổ chức của bạn chưa có security review chính thức, coi sáu điều trên như baseline tối thiểu trước khi cho agent đụng bất kỳ codebase nào khác laptop cá nhân của bạn. Đặc biệt: điều 1 (không CI) mâu thuẫn có chủ ý với “Performance budget enforcement trong CI” ở section tiếp theo — đó là workflow cá nhân tôi dùng, không phải khuyến nghị cho repo chung của công ty.
Tăng productivity — từ workflow của tôi
Một số cách tôi dùng Chrome DevTools MCP để rút ngắn thời gian xử lý công việc, sau vài tuần dùng thật:
1. PR review “visual-first”. Thay vì pull branch về máy, tôi bảo agent mở preview URL (Vercel/Netlify), chạy Lighthouse trên 3 trang chính, so sánh với baseline trên main. Agent trả về regression report — thường phát hiện bundle tăng 40KB trước khi con người nhận ra.
2. Debug flaky E2E. Test Playwright fail ngắt quãng? Bảo agent mở URL staging, replay đúng flow trong test đó, capture console + network, đối chiếu với CI log. Tỷ lệ tìm ra root cause (race condition, third-party timeout, cookie khác domain) cao hơn hẳn so với đọc trace file thô.
3. Migration audit. Migrate từ Webpack sang Vite, hoặc upgrade framework major. Snapshot performance trên 10 URL quan trọng trước migrate, chạy lại sau, diff metrics. Agent tự viết bảng so sánh.
4. Bug reproduction “hands-free”. Khách hàng báo lỗi với mô tả mơ hồ? Thả URL + step vào chat, agent reproduce, capture screenshot + console, tạo issue có đủ ngữ cảnh. Tôi rút thời gian từ “20 phút lăn tăn mở DevTools” xuống 3 phút.
5. Accessibility sweep. Chạy lighthouse_audit với category accessibility + take_snapshot DOM, yêu cầu agent list các violation WCAG A/AA kèm CSS selector. Dùng làm backlog cho sprint a11y.
6. Performance budget enforcement trong CI. Kết hợp --headless --isolated trong pipeline, fail build nếu LCP > budget. Rẻ hơn đăng ký SaaS Lighthouse CI và tích hợp với agent review PR cùng lúc.
Con số thật từ tuần trước: 1 PR regression LCP 400ms bị bắt trước merge; 2 bug CORS fix trung bình 5 phút thay vì 25; 1 flaky test thành deterministic sau khi agent chỉ ra race condition ở navigator.serviceWorker.ready. Không phải magic — chỉ là agent cuối cùng thấy được cái nó đang sửa.
Bảy pattern ứng dụng thực tế (tham chiếu rộng hơn)
Sáu workflow phía trên là của riêng tôi. Chrome Developers liệt kê thêm một bộ pattern chuẩn mà các team đã áp dụng thành công — đáng ghi vào backlog khi bạn tìm điểm đưa MCP vào quy trình mới:
| Pattern | Agent làm gì | Tool chính |
|---|---|---|
| Automated bug fixing | Thấy lỗi runtime trực tiếp, sửa, rồi test lại ngay trong tab đã reproduce — không dựa vào mô tả gián tiếp | list_console_messages, evaluate_script, navigate_page |
| Persistent styling | Đưa CSS tinker trong DevTools inspector trở lại source code — giải quyết cảnh “chỉnh xong refresh là mất” | take_snapshot, evaluate_script, editor |
| Performance optimization | Phân tích site performance với real data, khớp Core Web Vitals với nguyên nhân cụ thể | performance_start_trace, performance_analyze_insight, lighthouse_audit |
| Automated UI/UX testing | Kiểm chứng tính năng chạy đúng kỳ vọng qua flow thật, không giả lập | fill_form, click, wait_for, take_screenshot |
| Visual verification | Nhìn layout thật, bắt visual bug (overflow, dark-mode contrast, responsive break) — không chỉ đọc HTML | take_screenshot, emulate |
| Security scanning | Scan vulnerability với full context của network + DOM — XSS sink, mixed content, cookie flag thiếu | list_network_requests, get_network_request, take_snapshot |
| Reverse engineering | Inspect traffic real-time của site bên ngoài để tự động sinh API client hoặc SDK wrapper | list_network_requests, get_network_request, evaluate_script |
Hai pattern ít được nói tới mà cá nhân tôi thấy thú vị: persistent styling — agent lấy giá trị hex, spacing, radius bạn tweak trong DevTools rồi tự commit vào đúng @theme hoặc token file trong source — và reverse engineering để viết client SDK, đặc biệt hữu ích khi tích hợp SaaS chỉ có portal UI mà không public API docs.
Nguồn: Chrome for Developers — Chrome DevTools MCP for your AI agent và Let your Coding Agent debug your browser session.
Kết: cho agent đôi mắt, giữ cho mình tay lái
Chrome DevTools MCP không thay thế kỹ năng debug của bạn. Nó xóa khoảng trễ giữa “agent đoán” và “agent kiểm chứng”. Cài một lần, đặt hai cờ --autoConnect với --viewport, viết prompt buộc agent plan-rồi-mới-fix — và mỗi ngày bạn lấy lại vài mươi phút vốn rót vào F12 + reload + nheo mắt vào Network panel.
Tool tham khảo, prompt mẫu, checklist — tất cả ở trên. Phần khó nhất còn lại: xoá thói quen viết prompt kiểu “fix CORS” và thay bằng prompt có ngữ cảnh cụ thể. Agent càng thấy rõ, bạn càng ít phải kèm.