Skip to main content
chrome-devtools-mcp 讓 AI agent 能直接控制執行中的 Chrome 實例,近期版本也加入了擴充功能工具(installlistreloadtriggeruninstall,以及 service worker 日誌)。Extension.js 的 MCP server(@extension.dev/mcp)涵蓋了相同的擴充功能能力,但具備感知建置與跨瀏覽器的能力。 兩者是互補關係,並非競爭。同時執行兩者:讓 chrome-devtools-mcp 負責驅動 Chrome 本身,並讓 Extension.js 負責一切與你專案相關的事 — 建置、熱重載、產生的 manifest、儲存空間、各 context 的日誌,以及在 Firefox、Edge、Safari 上的相同工作流程。

何時用哪個

一個實用的判斷準則:如果任務牽涉到你的專案(原始碼、建置、manifest、重新載入),用 Extension.js。如果任務牽涉到瀏覽器本身(頁面、網路、效能),用 chrome-devtools-mcp。

安裝兩個 server

Extension.js 的工具都以 extension_* 命名空間隔離,因此絕不會與 chrome-devtools-mcp 工具衝突。熟悉其中一個的 agent,能直接轉移使用另一個。
chrome-devtools-mcp 的擴充功能工具(--categoryExtensions)目前需要 pipe 連線。在 Chrome 149 之前,擴充功能分類無法透過 WebSocket 端點 (browserUrl / wsEndpoint)連線到已執行的瀏覽器。Extension.js 會連到它為 你的開發 session 啟動的瀏覽器,因此它的擴充功能工具現在就可以使用。

能力對照

每個 chrome-devtools-mcp 的擴充功能動詞,都在 Extension.js 中有對應項目,並附上完整的建置平台。

動作 / 指令觸發如何運作 — 以及它的唯一注意事項

chrome-devtools-mcp 透過點擊真實的工具列按鈕觸發動作,這需要可見視窗與真正的使用者手勢。Extension.js 採取不同的做法:它在建置時擷取擴充功能的 chrome.action.onClicked(以及 chrome.commands.onCommand)監聽器,並在需要時重播它們。這讓觸發可以寫成腳本且可重現 — 這是 agentic 測試最自然的模式 — 而且由於它只觸及 addListener,所以同時支援 Chromium 與 Firefox(兩者皆已驗證)。同一份 background.service_worker 原始碼也能在 Firefox 上運作 — Extension.js 會在 Firefox 目標中將它轉換成 background.scripts event page,因為 Firefox 不執行 service worker 形式的背景程式。
重播會在沒有使用者手勢的情況下呼叫你的處理函式。真正的工具列點擊會授予暫時的 activeTab 權限,並能滿足需要手勢的 API(chrome.permissions.request、互動式的 identity.getAuthToken);重播則不會。所以依賴 activeTab 的處理函式 (例如在作用中分頁上的 chrome.scripting.executeScriptcaptureVisibleTab) 的行為會與真實點擊不同。結果會包含 gesture: false,而當 manifest 宣告了 activeTab 時還會附帶 warning。當你需要真實點擊的還原度時,請使用 chrome-devtools-mcp 的 trigger_extension_action(見下)。

需要真正帶手勢的點擊?使用 chrome-devtools-mcp

兩者是互補關係,並非競爭:
  • extension_opensurface: "action" — 日常路徑。重播處理函式、跨瀏覽器、無頭、無手勢(不會授予 activeTab)。絕大多數的處理函式測試都應使用它。
  • chrome-devtools-mcp 的 trigger_extension_action — 透過 Puppeteer(經由支援的 pipe transport)進行 真實 的動作呼叫,因此會像使用者點擊一樣授予 activeTab。僅限 Chromium。只有當你的處理函式真的依賴手勢時才需要。
由於本頁已建議同時執行兩個 server,就讓 chrome-devtools-mcp 負責真實帶手勢的瀏覽器驅動,並讓 Extension.js 負責感知建置、跨瀏覽器的重播 — 不需要重複實作。 參見 重新載入與 HMR

設計上即安全

重播包裝只會注入到你的開發建置中 — agent bridge 綁定在一個只在 extension dev/preview 期間存在的控制連接埠上,並不會加入正式建置。addListener 的包裝會透明地委派給原始實作,因此你的擴充功能不論有沒有 bridge,行為都完全一致。

下一步