Hai protocol thống trị lĩnh vực điều khiển trình duyệt bằng AI: CDP (Chrome DevTools Protocol) và MCP (Model Context Protocol). Chúng giải quyết vấn đề khác nhau ở các tầng khác nhau, nhưng lập trình viên xây dựng browser agent thường nhầm lẫn giữa hai hoặc chọn sai cho trường hợp sử dụng. Bài viết này phân tích từng protocol làm gì, khi nào dùng cái nào và cách chúng phối hợp trong kiến trúc agent production.
TL;DR: CDP cho agent quyền điều khiển trực tiếp, cấp thấp đối với trình duyệt qua kết nối WebSocket. MCP cho LLM các công cụ trình duyệt cấp cao qua giao diện tool-use chuẩn. CDP là động cơ; MCP là vô-lăng. Hầu hết AI agent production cần cả hai: MCP để LLM quyết định hành động, CDP bên dưới để trình duyệt thực sự hoạt động. Clawbrowser hỗ trợ cả hai nguyên bản.
Lưu ý: "CDP" trong bài này là Chrome DevTools Protocol, chuẩn điều khiển trình duyệt.
CDP và MCP thực sự là gì
CDP: Chrome DevTools Protocol
CDP là protocol dựa trên WebSocket để điều khiển trình duyệt Chromium bằng code. Google xây dựng nó cho Chrome DevTools (công cụ kiểm tra bạn mở bằng F12), nhưng nó trở thành chuẩn cho automation trình duyệt. Playwright, Puppeteer và mọi thư viện automation lớn đều dùng CDP bên trong.
Khi bạn gọi page.goto() trong Playwright, một lệnh CDP được gửi qua WebSocket tới trình duyệt. CDP cho bạn quyền điều khiển chi tiết: điều hướng trang, chạy JavaScript, chặn request mạng, thao tác cookies và chụp screenshot.
# CDP: your code controls the browser directly
from playwright.async_api import async_playwright
async with async_playwright() as p:
browser = await p.chromium.connect_over_cdp("http://127.0.0.1:9222")Để tìm hiểu sâu về CDP, xem Trình duyệt CDP cho AI agent: hướng dẫn cho nhà phát triển.
MCP: Model Context Protocol
MCP là protocol chuẩn hóa cách LLM kết nối với công cụ bên ngoài. Thay vì viết định nghĩa function-call riêng cho từng công cụ, LLM khám phá các công cụ có sẵn qua MCP server và gọi chúng bằng giao diện chuẩn.
Để điều khiển trình duyệt, MCP server đưa ra các hành động như navigate, click, type, screenshot và extract dưới dạng tool mà LLM có thể gọi. LLM quyết định gọi tool nào dựa trên nhiệm vụ. Không cần code Playwright, không CSS selectors, không định nghĩa tool tùy chỉnh trong agent.
{
"mcpServers": {
"clawbrowser": {
"command": "clawctl",
"args": ["mcp", "serve"]Thêm cấu hình đó vào Claude Code, Cursor, Gemini CLI hoặc bất kỳ agent tương thích MCP nào. LLM có ngay các công cụ trình duyệt.
Vì sao hay bị nhầm
Cả hai protocol đều kết nối AI agent với trình duyệt. Cả hai đều dùng từ "protocol". Cả hai đều xuất hiện trong cùng các cuộc thảo luận về hạ tầng AI agent. Nhưng chúng hoạt động ở tầng khác nhau:
- CDP là protocol tầng trình duyệt. Nó giao tiếp với Chromium.
- MCP là protocol tầng ứng dụng. Nó giao tiếp với LLM.
MCP browser server dùng CDP bên trong để điều khiển trình duyệt. Chúng không phải lựa chọn thay thế. Chúng là các tầng trong cùng một kiến trúc.
So sánh song song
| CDP (Chrome DevTools Protocol) | MCP (Model Context Protocol) | |
|---|---|---|
| Phát triển bởi | Google (nhóm Chrome) | Anthropic |
| Loại protocol | Điều khiển trình duyệt (WebSocket) | Sử dụng công cụ (stdio/SSE) |
| Ai gọi | Code của bạn (Playwright, Puppeteer, WebSocket thô) | LLM (Claude, GPT, Gemini) |
| Mức điều khiển | Thấp: DOM, mạng, chạy JavaScript, cookies | Cao: navigate, click, type, screenshot, extract |
| Thiết lập | Kết nối tới debugging port của trình duyệt | Cấu hình MCP server trong agent |
| Linh hoạt | Toàn phần: mọi thứ trình duyệt làm được | Giới hạn bởi tool mà server đưa ra |
| Tốc độ mỗi hành động | Mili giây (không có inference) | 0.5-3 giây (LLM quyết định mỗi bước) |
| Xử lý lỗi | Code xử lý lỗi | LLM suy luận về lỗi |
| Chống phát hiện | Không tích hợp (phụ thuộc trình duyệt) | Không tích hợp (phụ thuộc trình duyệt) |
| Phù hợp nhất cho | Automation theo kịch bản, điều khiển chi tiết, phát triển framework | Duyệt web do LLM dẫn dắt, tác vụ mở, tạo prototype nhanh |
Không protocol nào xử lý chống phát hiện. Đó là vấn đề tầng trình duyệt, không phải vấn đề protocol. Chrome thường kết nối qua CDP hoặc qua MCP server đều rò rỉ cùng tín hiệu automation. Chống phát hiện cần giải pháp tầng engine như Clawbrowser: fingerprint được quản lý trên hơn 20 bề mặt, proxy routing tích hợp và triệt tiêu tín hiệu CDP ở tầng mã nguồn Chromium.
Khi nào dùng CDP
Dùng CDP khi bạn cần điều khiển trình duyệt chính xác bằng code và biết trước các bước cần làm.
Tình huống CDP chiến thắng:
- Thu thập dữ liệu có cấu trúc. Bạn biết selectors nào cần nhắm, dữ liệu nào cần trích xuất và cách xử lý pagination. Code chạy cùng các bước mỗi lần.
- Chặn request mạng. Bạn cần chặn tài nguyên, thay đổi request headers, bắt response API hoặc inject JavaScript trước khi trang tải.
- Điều kiện chờ phức tạp. Bạn cần chờ DOM element cụ thể, trạng thái network idle hoặc thay đổi biến JavaScript trước khi hành động.
- Automation yêu cầu hiệu năng cao. Lệnh CDP chạy trong mili giây. Không có độ trễ inference LLM cho mỗi hành động. Công việc thu thập 50 bước mất vài giây qua CDP sẽ mất vài phút nếu LLM suy luận từng bước.
- Phát triển framework. Bạn đang xây dựng agent framework, môi trường test hoặc thư viện automation cho người khác dùng.
# CDP: full control, full responsibility
await page.wait_for_selector("#login-form")
await page.fill("#email", "[email protected]")
await page.fill("#password", credentials)
await page.click("#submit")Đánh đổi: bạn viết và bảo trì toàn bộ code kết nối trình duyệt. Mỗi selector, mỗi điều kiện chờ, mỗi bộ xử lý lỗi. Khi cấu trúc trang đích thay đổi, code của bạn hỏng.
Khi nào dùng MCP
Dùng MCP khi LLM cần quyết định bước tiếp theo dựa trên những gì nó thấy trên trang.
Tình huống MCP chiến thắng:
- Duyệt web mở. "Tìm trang giá và trích xuất chi tiết gói." Agent điều hướng, đọc trang và quyết định click mà không cần selectors cố định.
- Quy trình nhiều bước cần phán đoán. "Đăng nhập, kiểm tra có hóa đơn mới không, tải về nếu số tiền trên 500 đô." LLM xử lý logic điều kiện bằng cách đọc nội dung trang ở mỗi bước.
- Tạo prototype nhanh. Bạn muốn browser agent trong năm phút mà không viết code Playwright. Thêm cấu hình MCP, mô tả tác vụ, xong.
- Người dùng không phải lập trình viên. Người vận hành agent mô tả tác vụ bằng ngôn ngữ tự nhiên. Không cần code.
- Môi trường agent-native. Claude Code, Cursor và Gemini CLI đã nói MCP sẵn. Thêm trình duyệt chỉ cần một khối cấu hình.
# MCP: the LLM decides what to do
User prompt: "Go to example.com and tell me the page title"
LLM calls: navigate(url="https://example.com")
LLM calls: screenshot()Đánh đổi: ít chính xác hơn. LLM có thể click sai element, thực hiện bước thừa hoặc đọc sai nội dung trang. Mỗi hành động mang theo độ trễ inference LLM. Bạn không thể chặn request mạng hay inject JavaScript qua các MCP browser tool chuẩn.
Khi nào dùng cả hai
Đây là nơi hầu hết AI agent production kết thúc. MCP quản lý giao diện LLM-tới-agent. CDP quản lý giao diện agent-tới-trình duyệt. MCP server nằm giữa, chuyển đổi lệnh gọi tool cấp cao thành lệnh trình duyệt cấp thấp.
LLM ← MCP → MCP Server ← CDP → Browser
(clawctl) (Clawbrowser)LLM gửi lệnh gọi MCP tool ("đi tới URL này," "click nút đăng nhập"). MCP server chuyển đổi thành lệnh CDP và gửi tới trình duyệt. Kết quả chảy ngược lên chuỗi.
Vì sao tầng trình duyệt quan trọng
Hầu hết MCP browser server kết nối tới Chrome thường qua CDP. Trình duyệt không có quản lý fingerprint, không proxy routing, không chống phát hiện. Agent chạy được trên site demo nhưng bị chặn trên website production đằng sau Cloudflare, DataDome hoặc Akamai.
MCP server tích hợp của Clawbrowser kết nối tới engine Chromium của chính nó. Khi LLM gọi navigate, MCP server gửi lệnh CDP tới trình duyệt đã có sẵn fingerprint được quản lý, proxy routing theo địa lý và triệt tiêu tín hiệu CDP ở tầng engine. Không cần plugin stealth, không middleware proxy, không code xoay fingerprint.
Đường MCP (do LLM dẫn dắt, không code kết nối):
{
"mcpServers": {
"clawbrowser": {
"command": "clawctl",
"args": ["mcp", "serve"]Đường CDP (theo kịch bản, toàn quyền điều khiển):
browser = await playwright.chromium.connect_over_cdp(
"http://127.0.0.1:9222"
)Cả hai đường đều kết nối tới cùng Clawbrowser instance với cùng fingerprints, proxy routing và chống phát hiện. Chọn giao diện phù hợp với trường hợp sử dụng. Dùng cả hai trong cùng dự án khi các phần khác nhau của quy trình cần mức điều khiển khác nhau.
Hướng dẫn từng bước xây agent với cả hai protocol tại Cách xây dựng AI agent duyệt web.
Khung quyết định
| Câu hỏi | CDP | MCP |
|---|---|---|
| Bạn biết trước các bước chính xác? | Có | Dùng CDP |
| LLM nên quyết định click gì? | Dùng MCP | Có |
| Bạn cần chặn request mạng? | Có | Không có |
| Bạn cần tốc độ hành động dưới một giây? | Có | Không (độ trễ LLM) |
| Bạn xây cho người không phải lập trình viên? | Không | Có |
| Bạn dùng Claude Code hoặc Cursor? | Có sẵn | Tích hợp gốc |
| Bạn muốn không viết code trình duyệt? | Không | Có |
Nếu bạn trả lời "có" ở cả hai bên, dùng cả hai: MCP cho phần LLM dẫn dắt, CDP cho phần cần chính xác. Clawbrowser xử lý tầng trình duyệt cho cả hai protocol.
FAQ
Tôi có thể chuyển giữa CDP và MCP mà không đổi trình duyệt không?
Có, nếu trình duyệt hỗ trợ cả hai. Clawbrowser mở CDP endpoint trên mọi profile và đi kèm MCP server tích hợp. Kết nối Playwright tới CDP endpoint cho automation theo kịch bản và dùng MCP server cho duyệt web do LLM dẫn dắt, cả hai trên cùng profile với cùng fingerprints và sessions. Xem Cách kết nối Cursor với trình duyệt thật qua CDP để biết cả hai phương thức kết nối.
Protocol nào nhanh hơn?
CDP. Lệnh chạy trong mili giây vì không có LLM inference. MCP thêm 0.5-3 giây mỗi hành động vì LLM phải quyết định gọi tool nào và diễn giải kết quả. Công việc thu thập 50 bước qua CDP xong trong vài giây. Cùng công việc qua MCP mất vài phút. Dùng CDP cho automation hàng loạt khi bạn biết các bước. Dùng MCP cho tác vụ cần phán đoán ở mỗi bước.
WebDriver BiDi thì sao?
WebDriver BiDi là chuẩn W3C nhằm thay thế cả WebDriver (dùng bởi Selenium) và một phần CDP bằng protocol không phụ thuộc trình duyệt. Nó vẫn đang hoàn thiện. Playwright và Puppeteer vẫn dùng CDP bên trong. Khi WebDriver BiDi đạt mức áp dụng toàn diện, nó sẽ cạnh tranh với CDP ở tầng điều khiển trình duyệt, không phải với MCP ở tầng sử dụng công cụ. Khung quyết định CDP-MCP trong bài này vẫn đúng bất kể protocol trình duyệt cấp thấp nào thắng thế.
Tôi có cần anti-detect browser cho protocol nào không?
Có, nếu agent automation trên site có bảo vệ anti-bot. Cả CDP và MCP đều không có chống phát hiện. Chúng là protocol gửi lệnh tới trình duyệt. Nếu trình duyệt rò rỉ tín hiệu automation (navigator.webdriver, headless User-Agent, canvas hash chung), site chặn bất kể bạn dùng protocol nào. Xem Automation trình duyệt mà không bị chặn để hiểu mô hình phát hiện đầy đủ.
Bắt đầu xây dựng
Cài Clawbrowser từ clawbrowser.ai bằng cách dán lệnh cài đặt vào AI agent.
Đường MCP (do LLM dẫn dắt): thêm cấu hình MCP server của Clawbrowser vào agent và bắt đầu duyệt web bằng ngôn ngữ tự nhiên.
Đường CDP (theo kịch bản): kết nối Playwright hoặc Puppeteer tới CDP endpoint và viết code automation.
Cả hai: dùng MCP cho phần LLM suy luận cần làm gì. Dùng CDP cho phần cần điều khiển chính xác, nhanh và xác định. Cùng trình duyệt, cùng fingerprints, cùng sessions.
Đọc sâu về CDP tại Trình duyệt CDP cho AI agent: hướng dẫn cho nhà phát triển. Hướng dẫn xây dựng đầy đủ tại Cách xây dựng AI agent duyệt web.
Continue exploring
Ask AI how Clawbrowser helps
Đọc tiếp
Bài viết liên quan

Cách kết nối Cursor với trình duyệt thật qua CDP
Browser tích hợp của Cursor là một webview bị cô lập. Kết nối Cursor với Clawbrowser qua CDP để có profile bền, fingerprint được quản lý và proxy routing.
Đọc bài viết →
Clawbrowser vs Donut Browser: hoàn toàn miễn phí hay freemium
Clawbrowser vs Donut Browser: cả hai đều Chromium, open source, CDP + MCP. So sánh tính năng, bảng giá, ví dụ code và khi nào nên chọn từng anti-detect browser.
Đọc bài viết →