使用说明
Playwright MCP Server (Koa + TypeScript)
這是一個以 Koa + TypeScript + Playwright 實作的 MCP server 範本,提供最小可用的瀏覽器工具組。
架構
src/transport/:HTTP 傳輸層(POST /mcp,JSON-RPC 封包處理)src/mcp/:MCP method dispatcher(initialize、tools/list、tools/call)src/mcp/tools/:工具註冊與輸入驗證(Zod)src/playwright/:Playwright browser/context/page 生命週期管理src/domain/sessions/:session metadata 與 TTL 清理src/shared/:logger / error modelsrc/config/:環境設定
MVP Tools
browser_new_sessionbrowser_navigatebrowser_screenshotbrowser_close_session
Additional Tools
browser_clickbrowser_filldom_query_textbrowser_evaluatebrowser_wait_forbrowser_pressframe_query_textframe_click
browser_screenshot 參數
sessionId:必填fullPage:可選(預設為false,回傳下載路徑)
browser_navigate 參數
sessionId:必填url:必填waitUntil:可選,支援domcontentloaded | load | networkidle | committimeoutMs:可選,預設30000
快速開始
npm install
npx playwright install chromium
npm run dev
預設啟動位址:http://localhost:3000/mcp
Screenshot 下載位址:http://localhost:3000/mcp/screenshot/{fileId}
VS Code MCP(stdio 代理轉發)
若你的 VS Code MCP 客戶端只支援 stdio,可使用本專案內建代理:
- 啟動 HTTP MCP server
npm run dev - 另開一個 terminal 啟動 stdio 代理
npm run proxy:dev - VS Code 讀取
.vscode/mcp.json(已提供範本)後,即可透過 stdio 使用工具。
代理設定檔:/.vscode/mcp.json
MCP_HTTP_URL預設http://localhost:3000/mcpMCP_PROXY_TIMEOUT_MS預設30000
測試範例
- VS Code REST Client:
examples/mcp.http- 依序執行
initialize→tools/list→browser_new_session - 把回傳的
sessionId填到@sessionId,再執行 navigate/screenshot/close
- 依序執行
- PowerShell smoke test:
examples/smoke-test.ps1- 先啟動 server(
npm run dev) - 另一個 terminal 執行:
./examples/smoke-test.ps1 - 成功後會在
examples/產生smoke-shot.png - 或直接執行:
npm run smoke
- 先啟動 server(
環境變數
PORT:服務埠號(預設3000)PLAYWRIGHT_HEADLESS:false可開啟有頭模式(預設 headless)ALLOWED_HOSTS:允許的網域清單(逗號分隔,例如example.com,docs.example.com)SESSION_TTL_MS:閒置 session 清理時間(預設 15 分鐘)SCREENSHOT_TTL_MS:screenshot 暫存清理時間(預設 15 分鐘)SCREENSHOT_DIR:screenshot 暫存目錄(預設screenshots)PUBLIC_BASE_URL:screenshot 下載 URL base(預設http://localhost:{PORT})
可參考 /.env.example 建立你自己的設定。
PowerShell 臨時設定範例:
$env:PLAYWRIGHT_HEADLESS="false"
npm run dev
安全預設
- 僅允許
http/https - 預設封鎖
localhost、127.0.0.1 - 可透過
ALLOWED_HOSTS啟用 allowlist