OpenCode 能通過項目設定里的本機 MCP 服務使用 Playwright。先做一個只讀任務,打開網頁並核對頁面標題。列表顯示 connected 證明 MCP 握手成功。模型仍要生成正確的調用和參數,Playwright 也需要啓動瀏覽器並訪問目標。
本次實測是 OpenCode 1.18.16 與 Playwright MCP 0.0.84。本文使用 1.x 的設定格式。OpenCode V2 文件把服務器名稱放在 mcp.servers 下。複製設定前先運行 opencode --version。
註冊本機 Playwright MCP 服務
在項目根目錄新增或編輯 opencode.json。如果已有 mcp 對象,把 playwright 加進去,保留其他設定。OpenCode 1.x MCP 指南定義了命令數組、啓用狀態及超時時間。
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"playwright": {
"type": "local",
"command": [
"npx", "-y", "@playwright/mcp@0.0.84",
"--browser", "firefox", "--headless", "--isolated"
],
"enabled": true,
"timeout": 45000
}
}
}使用與 MCP 服務內 Playwright 版本匹配的 Firefox。測試用 npm 包的 Playwright 版本是 1.65.0-alpha-2026-10-30,可安裝對應的 Firefox:
npx -y --package playwright@1.65.0-alpha-2026-10-30 playwright install firefox
opencode mcp list如果使用單獨的瀏覽器快取,讓 MCP 子進程也能讀到該快取。隔離實測中我們直接指定了匹配的瀏覽器可執行檔案。升級時注意包版本和瀏覽器修訂版本對應。舊工具留下的瀏覽器即使名字相同,也可能使用不同通訊協定。
在項目根目錄運行 opencode mcp list,再開一個新工作階段查看瀏覽器工具。OpenCode 會合併多個來源的設定。排障時用空項目與獨立設定與資料目錄,減少舊條目干擾。覆蓋順序見 OpenCode 設定文件。
做一次只讀導航
用有可見答案的公開網頁,例如不用登入的 Selenium 測試表單。
只用 playwright_browser_navigate 打開以下地址:
{"url":"https://www.selenium.dev/selenium/web/web-form.html"}
參數只有一個 url,值是字串網址。
從返回結果讀出頁面標題。
不要點選、輸入、提交或調用其他工具。檢查軌跡中的工具名、參數對象和返回的頁面標題。實測中 OpenCode 1.x 把 playwright 的導航工具顯示成 playwright_browser_navigate。獨立 MCP 客戶端看到的是服務器的 browser_navigate。微軟 Playwright MCP 倉庫說明瞭無障礙快照和瀏覽器選項。
比較模型時,保持網址、提示、MCP 服務和瀏覽器一致。用當前提供者適配器支持結構化工具調用的模型。我們在臨時項目按 OpenAI 兼容提供者設定連接本機 Ollama。沒有使用外部模型賬戶。即使最終回答為空或 CLI 退出碼為 0,也要看結構化事件里的實際調用。
兩個模型實際發出了什麼
第一次運行用了舊快取里的 Firefox。兩個模型都傳了目標網址,但導航失敗。獨立 MCP 客戶端傳入同一個有效值,也收到 Firefox 通訊協定錯誤。改用匹配的 Firefox 158(修訂版本 1569)後,獨立探針讀到 Web form。在這個環境傳入數字 url 會收到輸入驗證錯誤。
之後在匹配的環境里開新工作階段,把同一個明確的 JSON 參數對象交給兩個模型。工具回應和最終輸出分別紀錄。
| 本機模型 | 導航調用 | 工具回應 | 最終輸出 |
|---|---|---|---|
qwen3:0.6b | 精確的字串網址 | Web form | 未復述標題 |
qwen3.5:0.8b | 精確的字串網址 | Web form | 無包含標題的文字事件 |
第二個模型還額外調用了兩次快照,超過了只調用一次的要求。先前在匹配版本上用自然語言描述參數,兩組都沒有準確復現網址。把完整 JSON 寫出後,兩組在本次運行裡導航成功。這只是兩種本機模型的小樣本。獨立客戶端發現了 25 個工具,覈實 browser_navigate.url 是字串,然後關閉瀏覽器。測試沒有提交表單。

定位最先失敗的一層
| 你看到什麼 | 先查哪裡 | 下一步 |
|---|---|---|
opencode mcp list 中沒有服務或連線失敗 | 項目設定及 MCP 進程 | 核對版本、工作目錄、命令數組、可執行檔案和超時 |
| 已連線,但模型只返回文字,沒有工具事件 | 模型、提供者或當前工具列表 | 查看 Agent 可用工具,再用另一個支持工具調用的模型做同一單步請求 |
| 參數鍵名或值類型不符 | 工具輸入 schema | 用 tools/list 對照實際參數對象 |
| 參數正確,模型和獨立探針都失敗 | 瀏覽器啓動、通訊協定或網絡 | 核對瀏覽器修訂版本,用匹配版本重跑同一公開網址 |
| 回應已包含正確標題,最終回答沒寫出來 | 模型讀取結果 | 以工具回應為證據,要求模型只返回答案 |
一份 MCP 參數故障報告里,檔案系統服務需要 path,收到的是 filePath,適合用來理解 schema 層的錯誤。另一條 OpenCode 瀏覽器討論說瀏覽器操作表現不穩定,但沒有隔離其設定變量。排障時先核對自己工作階段中的工具名、請求和回應。
這個例子使用乾淨的瀏覽器上下文。任務確實需要登入態時,參考連接現有瀏覽器。其他連接見 Playwright 瀏覽器自動化、Claude Code 設定 Playwright MCP、Codex 設定 Playwright MCP和開源編碼 Agent。如果還在判斷是否需要打開分頁,可以看網路搜尋與瀏覽器控制及瀏覽器 Agent 工作原理。也可以下載 Tabbit,用同一個公開標題任務對照另一條連線。
常見問題
OpenCode 能使用 Playwright MCP 嗎?
可以。在 OpenCode 1.x 的項目 opencode.json 里把本機服務寫進 mcp,然後在該項目運行 opencode mcp list。使用 V2 時按它的獨立格式設定。
換模型後瀏覽器工具還能用嗎?
MCP 設定可以保持不變。讓兩個模型做同一項小任務,檢查是否都發出符合 schema 的調用並正確讀取結果。
為什麼顯示 connected,導航卻失敗?
服務可以在啓動瀏覽器前完成 MCP 握手。檢查工具回應中的瀏覽器啓動、可執行檔案、通訊協定和網絡錯誤。
browser_navigate 要傳什麼參數?
本次驗證的 Playwright MCP 版本聲明 url 為字串。可以用 tools/list 核對,再使用客戶端實際顯示的工具名。
這個設定能接管現有瀏覽器分頁嗎?
示例啓動隔離瀏覽器。如果任務確實需要已打開的分頁或登入狀態,要另外設定連線方式。