返回 MCP 目录
public公开dns本地运行

playwright-mcp

Playwright MCP是一个基于Playwright的浏览器自动化服务器,通过结构化可访问性快照与网页交互,无需依赖视觉模型或截图,提供轻量级、高效的网页操作能力。

article

README

🚀 Playwright MCP

Playwright MCP 是一个模型上下文协议(MCP)服务器,它借助 Playwright 提供浏览器自动化功能。该服务器使大语言模型(LLMs)能够通过结构化的无障碍快照与网页进行交互,无需使用截图或视觉调整模型。

✨ 主要特性

  • 快速轻量:使用 Playwright 的无障碍树,而非基于像素的输入。
  • 对大语言模型友好:无需视觉模型,完全基于结构化数据运行。
  • 工具应用具有确定性:避免了基于截图方法常见的歧义问题。

📦 安装指南

环境要求

  • Node.js 18 或更高版本
  • VS Code、Cursor、Windsurf、Claude Desktop 或其他 MCP 客户端

安装步骤

首先,将 Playwright MCP 服务器与你的客户端一起安装。典型的配置如下:

{
  "mcpServers": {
    "playwright": {
      "command": "npx",
      "args": [
        "@playwright/mcp@latest"
      ]
    }
  }
}

在 VS Code 中安装

你也可以使用 VS Code 命令行界面(CLI)安装 Playwright MCP 服务器:

# 对于 VS Code
code --add-mcp '{"name":"playwright","command":"npx","args":["@playwright/mcp@latest"]}'

安装完成后,Playwright MCP 服务器将可在 VS Code 中与你的 GitHub Copilot 代理一起使用。

在 Cursor 中安装

前往 Cursor 设置 -> MCP -> 添加新的 MCP 服务器。你可以自行命名,使用 命令 类型并输入命令 npx @playwright/mcp。你还可以通过点击 编辑 来验证配置或添加命令参数。

{
  "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"
      ]
    }
  }
}

📚 详细文档

配置参数

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。
  --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                     运行使用截图的服务器(默认使用 Aria 快照)

用户配置文件

你可以使用持久配置文件(如常规浏览器,默认设置)运行 Playwright MCP,也可以在测试会话中使用隔离上下文运行。

持久配置文件

所有登录信息将存储在持久配置文件中,如果你想清除离线状态,可以在会话之间删除该文件。持久配置文件位于以下位置,你可以使用 --user-data-dir 参数覆盖它:

# Windows
%USERPROFILE%\AppData\Local\ms-playwright\mcp-{channel}-profile

# macOS
- ~/Library/Caches/ms-playwright/mcp-{channel}-profile

# Linux
- ~/.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?: {
    // 要使用的浏览器类型(chromium、firefox 或 webkit)
    browserName?: 'chromium' | 'firefox' | 'webkit';

    // 将浏览器配置文件保存在内存中,不保存到磁盘。
    isolated?: boolean;

    // 用于浏览器配置文件持久化的用户数据目录路径
    userDataDir?: string;

    // 浏览器启动选项(请参阅 Playwright 文档)
    // @see https://playwright.dev/docs/api/class-browsertype#browser-type-launch
    launchOptions?: {
      channel?: string;        // 浏览器通道(例如 'chrome')
      headless?: boolean;      // 以无头模式运行
      executablePath?: string; // 浏览器可执行文件的路径
      // ... 其他 Playwright 启动选项
    };

    // 浏览器上下文选项
    // @see https://playwright.dev/docs/api/class-browser#browser-new-context
    contextOptions?: {
      viewport?: { width: number, height: number };
      // ... 其他 Playwright 上下文选项
    };

    // 用于连接现有浏览器的 CDP 端点
    cdpEndpoint?: string;

    // 远程 Playwright 服务器端点
    remoteEndpoint?: string;
  },

  // 服务器配置
  server?: {
    port?: number;  // 监听的端口
    host?: string;  // 绑定的主机(默认:localhost)
  },

  // 启用的功能列表
  capabilities?: Array<
    'core' |    // 核心浏览器自动化
    'tabs' |    // 标签管理
    'pdf' |     // PDF 生成
    'history' | // 浏览器历史记录
    'wait' |    // 等待实用工具
    'files' |   // 文件处理
    'install' | // 浏览器安装
    'testing'   // 测试
  >;

  // 启用视觉模式(使用截图代替无障碍快照)
  vision?: boolean;

  // 输出文件的目录
  outputDir?: string;

  // 网络配置
  network?: {
    // 允许浏览器请求的源列表。默认允许所有源。同时匹配 `allowedOrigins` 和 `blockedOrigins` 的源将被阻止。
    allowedOrigins?: string[];

    // 阻止浏览器请求的源列表。同时匹配 `allowedOrigins` 和 `blockedOrigins` 的源将被阻止。
    blockedOrigins?: string[];
  };
 
  /**
   * 不向客户端发送图像响应。
   */
  noImageResponses?: boolean;
}

独立 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) => {
  // ...

  // 创建一个带有 SSE 传输的无头 Playwright MCP 服务器
  const connection = await createConnection({ browser: { launchOptions: { headless: true } } });
  const transport = new SSEServerTransport('/messages', res);
  await connection.connect(transport);

  // ...
});

工具使用

工具提供两种模式:

  1. 快照模式(默认):使用无障碍快照以获得更好的性能和可靠性
  2. 视觉模式:使用截图进行基于视觉的交互

要使用视觉模式,在启动服务器时添加 --vision 标志:

{
  "mcpServers": {
    "playwright": {
      "command": "npx",
      "args": [
        "@playwright/mcp@latest",
        "--vision"
      ]
    }
  }
}

视觉模式最适合与能够基于提供的截图在 X Y 坐标空间中与元素进行交互的计算机使用模型配合使用。

交互工具
  • browser_snapshot

    • 标题:页面快照
    • 描述:捕获当前页面的无障碍快照,这比截图更好
    • 参数:无
    • 只读:true
  • browser_click

    • 标题:点击
    • 描述:在网页上执行点击操作
    • 参数:
      • element (字符串):用于获取与元素交互权限的人类可读元素描述
      • ref (字符串):页面快照中确切的目标元素引用
    • 只读:false
  • browser_drag

    • 标题:拖动鼠标
    • 描述:在两个元素之间执行拖放操作
    • 参数:
      • startElement (字符串):用于获取与源元素交互权限的人类可读元素描述
      • startRef (字符串):页面快照中确切的源元素引用
      • endElement (字符串):用于获取与目标元素交互权限的人类可读元素描述
      • endRef (字符串):页面快照中确切的目标元素引用
    • 只读:false
  • browser_hover

    • 标题:悬停鼠标
    • 描述:在页面上悬停在元素上
    • 参数:
      • element (字符串):用于获取与元素交互权限的人类可读元素描述
      • ref (字符串):页面快照中确切的目标元素引用
    • 只读:true
  • browser_type

    • 标题:输入文本
    • 描述:在可编辑元素中输入文本
    • 参数:
      • element (字符串):用于获取与元素交互权限的人类可读元素描述
      • ref (字符串):页面快照中确切的目标元素引用
      • text (字符串):要输入到元素中的文本
      • submit (布尔值,可选):是否提交输入的文本(之后按 Enter 键)
      • slowly (布尔值,可选):是否逐个字符输入。这对于触发页面中的按键处理程序很有用。默认情况下,整个文本会一次性填充。
    • 只读:false
  • browser_select_option

    • 标题:选择选项
    • 描述:在下拉列表中选择一个选项
    • 参数:
      • element (字符串):用于获取与元素交互权限的人类可读元素描述
      • ref (字符串):页面快照中确切的目标元素引用
      • values (数组):要在下拉列表中选择的值数组。可以是单个值或多个值。
    • 只读:false
  • browser_press_key

    • 标题:按下按键
    • 描述:在键盘上按下一个按键
    • 参数:
      • key (字符串):要按下的按键名称或要生成的字符,例如 ArrowLefta
    • 只读:false
  • browser_wait_for

    • 标题:等待
    • 描述:等待文本出现或消失,或等待指定的时间过去
    • 参数:
      • time (数字,可选):等待的时间(以秒为单位)
      • text (字符串,可选):要等待出现的文本
      • textGone (字符串,可选):要等待消失的文本
    • 只读:true
  • browser_file_upload

    • 标题:上传文件
    • 描述:上传一个或多个文件
    • 参数:
      • paths (数组):要上传的文件的绝对路径。可以是单个文件或多个文件。
    • 只读:false
  • browser_handle_dialog

    • 标题:处理对话框
    • 描述:处理对话框
    • 参数:
      • accept (布尔值):是否接受对话框。
      • promptText (字符串,可选):在提示对话框的情况下,提示的文本。
    • 只读:false
导航工具
  • browser_navigate

    • 标题:导航到 URL
    • 描述:导航到指定的 URL
    • 参数:
      • url (字符串):要导航到的 URL
    • 只读:false
  • browser_navigate_back

    • 标题:后退
    • 描述:返回上一页
    • 参数:无
    • 只读:true
  • browser_navigate_forward

    • 标题:前进
    • 描述:前进到下一页
    • 参数:无
    • 只读:true
资源工具
  • browser_take_screenshot

    • 标题:截图
    • 描述:对当前页面进行截图。你不能基于截图执行操作,请使用 browser_snapshot 进行操作。
    • 参数:
      • raw (布尔值,可选):是否返回未压缩的图像(PNG 格式)。默认是 false,返回 JPEG 图像。
      • filename (字符串,可选):保存截图的文件名。如果未指定,默认是 page-{timestamp}.{png|jpeg}
      • element (字符串,可选):用于获取对元素进行截图权限的人类可读元素描述。如果未提供,将对视口进行截图。如果提供了 element,则必须同时提供 ref。
      • ref (字符串,可选):页面快照中确切的目标元素引用。如果未提供,将对视口进行截图。如果提供了 ref,则必须同时提供 element。
    • 只读:true
  • browser_pdf_save

    • 标题:保存为 PDF
    • 描述:将页面保存为 PDF
    • 参数:
      • filename (字符串,可选):保存 PDF 的文件名。如果未指定,默认是 page-{timestamp}.pdf
    • 只读:true
  • browser_network_requests

    • 标题:列出网络请求
    • 描述:返回自页面加载以来的所有网络请求
    • 参数:无
    • 只读:true
  • browser_console_messages

    • 标题:获取控制台消息
    • 描述:返回所有控制台消息
    • 参数:无
    • 只读:true
实用工具
  • browser_install

    • 标题:安装浏览器
    • 描述:安装配置中指定的浏览器。如果你遇到浏览器未安装的错误,请调用此工具。
    • 参数:无
    • 只读:false
  • browser_close

    • 标题:关闭浏览器
    • 描述:关闭页面
    • 参数:无
    • 只读:true
  • browser_resize

    • 标题:调整浏览器窗口大小
    • 描述:调整浏览器窗口的大小
    • 参数:
      • width (数字):浏览器窗口的宽度
      • height (数字):浏览器窗口的高度
    • 只读:true
标签工具
  • browser_tab_list

    • 标题:列出标签
    • 描述:列出浏览器的标签
    • 参数:无
    • 只读:true
  • browser_tab_new

    • 标题:打开新标签
    • 描述:打开一个新标签
    • 参数:
      • url (字符串,可选):在新标签中要导航到的 URL。如果未提供,新标签将是空白的。
    • 只读:true
  • browser_tab_select

    • 标题:选择标签
    • 描述:按索引选择标签
    • 参数:
      • index (数字):要选择的标签的索引
    • 只读:true
  • browser_tab_close

    • 标题:关闭标签
    • 描述:关闭指定的标签
    • 参数:
      • index (数字,可选):要关闭的标签的索引。如果未提供,将关闭当前标签。
    • 只读:false
测试工具
  • browser_generate_playwright_test
    • 标题:生成 Playwright 测试
    • 描述:为给定的场景生成 Playwright 测试
    • 参数:
      • name (字符串):测试的名称
      • description (字符串):测试的描述
      • steps (数组):测试的步骤
    • 只读:true
视觉模式工具
  • browser_screen_capture

    • 标题:截图
    • 描述:对当前页面进行截图
    • 参数:无
    • 只读:true
  • browser_screen_move_mouse

    • 标题:移动鼠标
    • 描述:将鼠标移动到指定位置
    • 参数:
      • element (字符串):用于获取与元素交互权限的人类可读元素描述
      • x (数字):X 坐标
      • y (数字):Y 坐标
    • 只读:true
  • browser_screen_click

    • 标题:点击
    • 描述:点击鼠标左键
    • 参数:
      • element (字符串):用于获取与元素交互权限的人类可读元素描述
      • x (数字):X 坐标
      • y (数字):Y 坐标
    • 只读:false
  • browser_screen_drag

    • 标题:拖动鼠标
    • 描述:拖动鼠标左键
    • 参数:
      • element (字符串):用于获取与元素交互权限的人类可读元素描述
      • startX (数字):起始 X 坐标
      • startY (数字):起始 Y 坐标
      • endX (数字):结束 X 坐标
      • endY (数字):结束 Y 坐标
    • 只读:false
  • browser_screen_type

    • 标题:输入文本
    • 描述:输入文本
    • 参数:
      • text (字符串):要输入的文本
      • submit (布尔值,可选):是否提交输入的文本(之后按 Enter 键)
    • 只读:false
  • browser_press_key

    • 标题:按下按键
    • 描述:在键盘上按下一个按键
    • 参数:
      • key (字符串):要按下的按键名称或要生成的字符,例如 ArrowLefta
    • 只读:false
  • browser_wait_for

    • 标题:等待
    • 描述:等待文本出现或消失,或等待指定的时间过去
    • 参数:
      • time (数字,可选):等待的时间(以秒为单位)
      • text (字符串,可选):要等待出现的文本
      • textGone (字符串,可选):要等待消失的文本
    • 只读:true
  • browser_file_upload

    • 标题:上传文件
    • 描述:上传一个或多个文件
    • 参数:
      • paths (数组):要上传的文件的绝对路径。可以是单个文件或多个文件。
    • 只读:false
  • browser_handle_dialog

    • 标题:处理对话框
    • 描述:处理对话框
    • 参数:
      • accept (布尔值):是否接受对话框。
      • promptText (字符串,可选):在提示对话框的情况下,提示的文本。
    • 只读:false
help

运行方式说明

cloud

托管运行

托管运行通常表示这个 MCP Server 由服务方环境承载,用户一般按页面提供的连接方式或授权流程接入,不需要在本地长期启动一个 MCP 进程

  1. 打开服务方连接页
  2. 完成授权或复制端点
  3. 在 MCP 客户端中连接
terminal

本地运行 / 其它方式

本地运行通常需要用户在自己的电脑或服务器上安装依赖,把 server_config 复制到 MCP 客户端,并按 env_schema 补齐环境变量、密钥或其它配置

  1. 复制 server_config
  2. 安装所需依赖
  3. 补齐环境变量后重启客户端