🚀 Playwright MCP
Playwright MCP 是一個模型上下文協議(MCP)服務器,它藉助 Playwright 提供瀏覽器自動化功能。該服務器使大語言模型(LLMs)能夠通過結構化的無障礙快照與網頁進行交互,無需依賴截圖或經過視覺調整的模型。
✨ 主要特性
- 快速輕量:使用 Playwright 的無障礙樹,而非基於像素的輸入。
- 對大語言模型友好:無需視覺模型,僅基於結構化數據運行。
- 工具應用具有確定性:避免了基於截圖方法常見的歧義問題。
📦 安裝指南
環境要求
- Node.js 18 或更高版本
- VS Code、Cursor、Windsurf、Claude Desktop、Goose 或其他 MCP 客戶端
安裝步驟
通用安裝配置
首先,將 Playwright MCP 服務器與你的客戶端一起安裝。典型的配置如下:
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": [
"@playwright/mcp@latest"
]
}
}
}
你可以點擊以下鏈接進行安裝:
在 VS Code 中安裝
你也可以使用 VS Code CLI 安裝 Playwright MCP 服務器:
code --add-mcp '{"name":"playwright","command":"npx","args":["@playwright/mcp@latest"]}'
安裝完成後,Playwright MCP 服務器將可在 VS Code 中與你的 GitHub Copilot 代理一起使用。
在 Cursor 中安裝
點擊按鈕安裝:

手動安裝:
前往 Cursor Settings -> MCP -> Add new MCP Server。自定義名稱,使用 command 類型並輸入命令 npx @playwright/mcp。你還可以通過點擊 Edit 驗證配置或添加命令參數。
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": [
"@playwright/mcp@latest"
]
}
}
}
在 Windsurf 中安裝
遵循 Windsurf MCP 文檔 進行安裝,使用以下配置:
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": [
"@playwright/mcp@latest"
]
}
}
}
在 Claude Desktop 中安裝
遵循 MCP 安裝 指南,使用以下配置:
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": [
"@playwright/mcp@latest"
]
}
}
}
在 Claude Code 中安裝
使用 Claude Code CLI 添加 Playwright MCP 服務器:
claude mcp add playwright npx @playwright/mcp@latest
在 Goose 中安裝
點擊按鈕安裝:

手動安裝:
前往 Advanced settings -> Extensions -> Add custom extension。自定義名稱,選擇 STDIO 類型,並將 command 設置為 npx @playwright/mcp。點擊 "Add Extension"。
在 Qodo Gen 中安裝
在 VSCode 或 IntelliJ 中打開 Qodo Gen 聊天面板 → 連接更多工具 → + 添加新的 MCP → 粘貼以下配置:
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": [
"@playwright/mcp@latest"
]
}
}
}
點擊 Save。
在 Gemini CLI 中安裝
遵循 MCP 安裝 指南,使用以下配置:
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": [
"@playwright/mcp@latest"
]
}
}
}
🔧 技術細節
配置參數
Playwright MCP 服務器支持以下參數,你可以在上述 JSON 配置的 "args" 列表中提供這些參數:
> npx @playwright/mcp@latest --help
--allowed-origins <origins> 允許瀏覽器請求的源列表,用分號分隔。默認允許所有源。
--blocked-origins <origins> 阻止瀏覽器請求的源列表,用分號分隔。阻止列表在允許列表之前評估。如果僅使用阻止列表,不匹配阻止列表的請求仍然允許。
--block-service-workers 阻止服務工作者
--browser <browser> 要使用的瀏覽器或 Chrome 通道,可能的值:chrome、firefox、webkit、msedge。
--browser-agent <endpoint> 使用瀏覽器代理(實驗性)。
--caps <caps> 要啟用的功能列表,用逗號分隔,可能的值:tabs、pdf、history、wait、files、install。默認啟用所有功能。
--cdp-endpoint <endpoint> 要連接的 CDP 端點。
--config <path> 配置文件的路徑。
--device <device> 要模擬的設備,例如:"iPhone 15"
--executable-path <path> 瀏覽器可執行文件的路徑。
--headless 以無頭模式運行瀏覽器,默認以有頭模式運行
--host <host> 服務器綁定的主機。默認是 localhost。使用 0.0.0.0 綁定所有接口。
--ignore-https-errors 忽略 HTTPS 錯誤
--isolated 將瀏覽器配置文件保存在內存中,不保存到磁盤。
--image-responses <mode> 是否向客戶端發送圖像響應。可以是 "allow"、"omit" 或 "auto"。默認為 "auto",如果客戶端可以顯示圖像則發送。
--no-sandbox 禁用所有通常需要沙盒的進程類型的沙盒。
--output-dir <path> 輸出文件的目錄路徑。
--port <port> SSE 傳輸監聽的端口。
--proxy-bypass <bypass> 繞過代理的域名列表,用逗號分隔,例如 ".com,chromium.org,.domain.com"
--proxy-server <proxy> 指定代理服務器,例如 "http://myproxy:3128" 或 "socks5://myproxy:8080"
--save-trace 是否將會話的 Playwright 跟蹤保存到輸出目錄。
--storage-state <path> 隔離會話的存儲狀態文件的路徑。
--user-agent <ua string> 指定用戶代理字符串
--user-data-dir <path> 用戶數據目錄的路徑。如果未指定,將創建一個臨時目錄。
--viewport-size <size> 指定瀏覽器視口大小(像素),例如 "1280, 720"
--vision 運行使用截圖的服務器(默認使用無障礙快照)
用戶配置文件
你可以像使用常規瀏覽器一樣,使用持久配置文件運行 Playwright MCP(默認方式),也可以在測試會話中使用隔離上下文運行。
持久配置文件
所有登錄信息將存儲在持久配置文件中,如果你想清除離線狀態,可以在會話之間刪除該文件。持久配置文件位於以下位置,你可以使用 --user-data-dir 參數覆蓋默認位置:
%USERPROFILE%\AppData\Local\ms-playwright\mcp-{channel}-profile
- ~/Library/Caches/ms-playwright/mcp-{channel}-profile
- ~/.cache/ms-playwright/mcp-{channel}-profile
隔離模式
在隔離模式下,每個會話都在隔離的配置文件中啟動。每次你要求 MCP 關閉瀏覽器時,會話將關閉,並且該會話的所有存儲狀態將丟失。你可以通過配置的 contextOptions 或 --storage-state 參數為瀏覽器提供初始存儲狀態。瞭解更多關於存儲狀態的信息 點擊這裡。
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": [
"@playwright/mcp@latest",
"--isolated",
"--storage-state={path/to/storage.json}"
]
}
}
}
配置文件
Playwright MCP 服務器可以使用 JSON 配置文件進行配置。你可以使用 --config 命令行選項指定配置文件:
npx @playwright/mcp@latest --config path/to/config.json
配置文件架構
{
browser?: {
browserName?: 'chromium' | 'firefox' | 'webkit';
isolated?: boolean;
userDataDir?: string;
launchOptions?: {
channel?: string;
headless?: boolean;
executablePath?: string;
};
contextOptions?: {
viewport?: { width: number, height: number };
};
cdpEndpoint?: string;
remoteEndpoint?: string;
},
server?: {
port?: number;
host?: string;
},
capabilities?: Array<
'core' |
'tabs' |
'pdf' |
'history' |
'wait' |
'files' |
'install' |
'testing'
>;
vision?: boolean;
outputDir?: string;
network?: {
allowedOrigins?: string[];
blockedOrigins?: string[];
};
imageResponses?: 'allow' | 'omit' | 'auto';
}
獨立 MCP 服務器
當在沒有顯示器的系統上或從 IDE 的工作進程中運行有頭瀏覽器時,在具有 DISPLAY 的環境中運行 MCP 服務器,並傳遞 --port 標誌以啟用 SSE 傳輸。
npx @playwright/mcp@latest --port 8931
然後在 MCP 客戶端配置中,將 url 設置為 SSE 端點:
{
"mcpServers": {
"playwright": {
"url": "http://localhost:8931/sse"
}
}
}
Docker
注意: 目前 Docker 實現僅支持無頭 Chromium。
{
"mcpServers": {
"playwright": {
"command": "docker",
"args": ["run", "-i", "--rm", "--init", "--pull=always", "mcr.microsoft.com/playwright/mcp"]
}
}
}
你也可以自己構建 Docker 鏡像:
docker build -t mcr.microsoft.com/playwright/mcp .
編程式使用
import http from 'http';
import { createConnection } from '@playwright/mcp';
import { SSEServerTransport } from '@modelcontextprotocol/sdk/server/sse.js';
http.createServer(async (req, res) => {
const connection = await createConnection({ browser: { launchOptions: { headless: true } } });
const transport = new SSEServerTransport('/messages', res);
await connection.sever.connect(transport);
});
💻 使用示例
工具模式
工具以兩種模式提供:
- 快照模式(默認):使用無障礙快照以獲得更好的性能和可靠性。
- 視覺模式:使用截圖進行基於視覺的交互。
若要使用視覺模式,在啟動服務器時添加 --vision 標誌:
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": [
"@playwright/mcp@latest",
"--vision"
]
}
}
}
視覺模式最適用於能夠基於提供的截圖,使用 X Y 座標空間與元素進行交互的計算機使用模型。
工具列表
交互工具
交互
-
browser_snapshot
- 標題:頁面快照
- 描述:捕獲當前頁面的無障礙快照,這比截圖更好
- 參數:無
- 只讀:是
-
browser_click
- 標題:點擊
- 描述:在網頁上執行點擊操作
- 參數:
element (string):用於獲取與元素交互權限的人類可讀元素描述
ref (string):頁面快照中確切的目標元素引用
doubleClick (boolean, 可選):是否執行雙擊而不是單擊
- 只讀:否
-
browser_drag
- 標題:拖動鼠標
- 描述:在兩個元素之間執行拖放操作
- 參數:
startElement (string):用於獲取與源元素交互權限的人類可讀元素描述
startRef (string):頁面快照中確切的源元素引用
endElement (string):用於獲取與目標元素交互權限的人類可讀元素描述
endRef (string):頁面快照中確切的目標元素引用
- 只讀:否
-
browser_hover
- 標題:懸停鼠標
- 描述:在頁面上懸停在元素上
- 參數:
element (string):用於獲取與元素交互權限的人類可讀元素描述
ref (string):頁面快照中確切的目標元素引用
- 只讀:是
-
browser_type
- 標題:輸入文本
- 描述:在可編輯元素中輸入文本
- 參數:
element (string):用於獲取與元素交互權限的人類可讀元素描述
ref (string):頁面快照中確切的目標元素引用
text (string):要輸入到元素中的文本
submit (boolean, 可選):是否提交輸入的文本(之後按 Enter 鍵)
slowly (boolean, 可選):是否一次輸入一個字符。對於觸發頁面中的按鍵處理程序很有用。默認情況下,整個文本一次性填充。
- 只讀:否
-
browser_select_option
- 標題:選擇選項
- 描述:在下拉列表中選擇一個選項
- 參數:
element (string):用於獲取與元素交互權限的人類可讀元素描述
ref (string):頁面快照中確切的目標元素引用
values (array):要在下拉列表中選擇的值數組。可以是單個值或多個值。
- 只讀:否
-
browser_press_key
- 標題:按下按鍵
- 描述:按下鍵盤上的按鍵
- 參數:
key (string):要按下的按鍵名稱或要生成的字符,例如 ArrowLeft 或 a
- 只讀:否
-
browser_wait_for
- 標題:等待
- 描述:等待文本出現或消失,或等待指定時間過去
- 參數:
time (number, 可選):等待的時間(秒)
text (string, 可選):要等待出現的文本
textGone (string, 可選):要等待消失的文本
- 只讀:是
-
browser_file_upload
- 標題:上傳文件
- 描述:上傳一個或多個文件
- 參數:
paths (array):要上傳文件的絕對路徑。可以是單個文件或多個文件。
- 只讀:否
-
browser_handle_dialog
- 標題:處理對話框
- 描述:處理對話框
- 參數:
accept (boolean):是否接受對話框。
promptText (string, 可選):如果是提示對話框,提示的文本。
- 只讀:否
導航工具
導航
-
browser_navigate
- 標題:導航到 URL
- 描述:導航到指定的 URL
- 參數:
- 只讀:否
-
browser_navigate_back
-
browser_navigate_forward
- 標題:前進
- 描述:前進到下一頁
- 參數:無
- 只讀:是
資源工具
資源
-
browser_take_screenshot
- 標題:截圖
- 描述:拍攝當前頁面的截圖。你不能基於截圖執行操作,使用 browser_snapshot 進行操作。
- 參數:
raw (boolean, 可選):是否返回未壓縮的圖像(PNG 格式)。默認為 false,返回 JPEG 圖像。
filename (string, 可選):保存截圖的文件名。如果未指定,默認為 page-{timestamp}.{png|jpeg}。
element (string, 可選):用於獲取對元素進行截圖權限的人類可讀元素描述。如果未提供,將對視口進行截圖。如果提供了 element,則必須提供 ref。
ref (string, 可選):頁面快照中確切的目標元素引用。如果未提供,將對視口進行截圖。如果提供了 ref,則必須提供 element。
- 只讀:是
-
browser_pdf_save
- 標題:保存為 PDF
- 描述:將頁面保存為 PDF
- 參數:
filename (string, 可選):保存 PDF 的文件名。如果未指定,默認為 page-{timestamp}.pdf。
- 只讀:是
-
browser_network_requests
- 標題:列出網絡請求
- 描述:返回自頁面加載以來的所有網絡請求
- 參數:無
- 只讀:是
-
browser_console_messages
- 標題:獲取控制檯消息
- 描述:返回所有控制檯消息
- 參數:無
- 只讀:是
實用工具
實用工具
-
browser_install
- 標題:安裝配置中指定的瀏覽器
- 描述:安裝配置中指定的瀏覽器。如果出現瀏覽器未安裝的錯誤,請調用此工具。
- 參數:無
- 只讀:否
-
browser_close
- 標題:關閉瀏覽器
- 描述:關閉頁面
- 參數:無
- 只讀:是
-
browser_resize
- 標題:調整瀏覽器窗口大小
- 描述:調整瀏覽器窗口的大小
- 參數:
width (number):瀏覽器窗口的寬度
height (number):瀏覽器窗口的高度
- 只讀:是
標籤工具
標籤
-
browser_tab_list
- 標題:列出標籤
- 描述:列出瀏覽器標籤
- 參數:無
- 只讀:是
-
browser_tab_new
- 標題:打開新標籤
- 描述:打開一個新標籤
- 參數:
url (string, 可選):在新標籤中導航到的 URL。如果未提供,新標籤將為空。
- 只讀:是
-
browser_tab_select
- 標題:選擇標籤
- 描述:按索引選擇標籤
- 參數:
- 只讀:是
-
browser_tab_close
- 標題:關閉標籤
- 描述:關閉指定的標籤
- 參數:
index (number, 可選):要關閉的標籤的索引。如果未提供,關閉當前標籤。
- 只讀:否
測試工具
測試
- browser_generate_playwright_test
- 標題:生成 Playwright 測試
- 描述:為給定的場景生成 Playwright 測試
- 參數:
name (string):測試的名稱
description (string):測試的描述
steps (array):測試的步驟
- 只讀:是
視覺模式工具
視覺模式