install、list、reload、trigger、uninstall,以及 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 形式的背景程式。
需要真正帶手勢的點擊?使用 chrome-devtools-mcp
兩者是互補關係,並非競爭:extension_open(surface: "action") — 日常路徑。重播處理函式、跨瀏覽器、無頭、無手勢(不會授予activeTab)。絕大多數的處理函式測試都應使用它。- chrome-devtools-mcp 的
trigger_extension_action— 透過 Puppeteer(經由支援的 pipe transport)進行 真實 的動作呼叫,因此會像使用者點擊一樣授予activeTab。僅限 Chromium。只有當你的處理函式真的依賴手勢時才需要。
設計上即安全
重播包裝只會注入到你的開發建置中 — agent bridge 綁定在一個只在extension dev/preview 期間存在的控制連接埠上,並不會加入正式建置。addListener 的包裝會透明地委派給原始實作,因此你的擴充功能不論有沒有 bridge,行為都完全一致。
下一步
- 把文件也接上你的助手:透過 MCP 與 llms.txt 進行 AI 存取。
- 將檢查接入 pipeline:CI 範本。
- 在所有瀏覽器發布同一份擴充功能:跨瀏覽器相容性。

