Skip to main content
Glama

Playwright MCP Server

Official
by microsoft

剧作家 MCP

一个使用Playwright提供浏览器自动化功能的模型上下文协议 (MCP) 服务器。该服务器使 LLM 能够通过结构化的可访问性快照与网页进行交互,而无需使用屏幕截图或视觉调整的模型。

主要特点

  • 快速且轻量。使用 Playwright 的可访问性树,而不是基于像素的输入。
  • 适合法学硕士 (LLM) 。无需视觉模型,纯粹基于结构化数据运行。
  • 确定性工具应用程序。避免了基于屏幕截图的方法中常见的歧义。

要求

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

入门

首先,在您的客户端上安装 Playwright MCP 服务器。典型的配置如下:

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

您还可以使用 VS Code CLI 安装 Playwright MCP 服务器:

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

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

前往Cursor Settings -> MCP -> Add new MCP Server 。根据个人喜好命名,使用command类型npx @playwright/mcp 。您也可以点击Edit来验证配置或添加命令参数。

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

按照 Windsuff MCP文档操作。使用以下配置:

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

按照 MCP 安装指南,使用以下配置:

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

配置

Playwright MCP 服务器支持以下参数。它们可以在上面的 JSON 配置中作为"args"列表的一部分提供:

> npx @playwright/mcp@latest --help --allowed-origins <origins> semicolon-separated list of origins to allow the browser to request. Default is to allow all. --blocked-origins <origins> semicolon-separated list of origins to block the browser from requesting. Blocklist is evaluated before allowlist. If used without the allowlist, requests not matching the blocklist are still allowed. --block-service-workers block service workers --browser <browser> browser or chrome channel to use, possible values: chrome, firefox, webkit, msedge. --caps <caps> comma-separated list of capabilities to enable, possible values: tabs, pdf, history, wait, files, install. Default is all. --cdp-endpoint <endpoint> CDP endpoint to connect to. --config <path> path to the configuration file. --device <device> device to emulate, for example: "iPhone 15" --executable-path <path> path to the browser executable. --headless run browser in headless mode, headed by default --host <host> host to bind server to. Default is localhost. Use 0.0.0.0 to bind to all interfaces. --ignore-https-errors ignore https errors --isolated keep the browser profile in memory, do not save it to disk. --no-image-responses do not send image responses to the client. --no-sandbox disable the sandbox for all process types that are normally sandboxed. --output-dir <path> path to the directory for output files. --port <port> port to listen on for SSE transport. --proxy-bypass <bypass> comma-separated domains to bypass proxy, for example ".com,chromium.org,.domain.com" --proxy-server <proxy> specify proxy server, for example "http://myproxy:3128" or "socks5://myproxy:8080" --save-trace Whether to save the Playwright Trace of the session into the output directory. --storage-state <path> path to the storage state file for isolated sessions. --user-agent <ua string> specify user agent string --user-data-dir <path> path to the user data directory. If not specified, a temporary directory will be created. --viewport-size <size> specify browser viewport size in pixels, for example "1280, 720" --vision Run server that uses screenshots (Aria snapshots are used by default)

用户个人资料

您可以像常规浏览器(默认)一样使用持久配置文件运行 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 configuration browser?: { // Browser type to use (chromium, firefox, or webkit) browserName?: 'chromium' | 'firefox' | 'webkit'; // Keep the browser profile in memory, do not save it to disk. isolated?: boolean; // Path to user data directory for browser profile persistence userDataDir?: string; // Browser launch options (see Playwright docs) // @see https://playwright.dev/docs/api/class-browsertype#browser-type-launch launchOptions?: { channel?: string; // Browser channel (e.g. 'chrome') headless?: boolean; // Run in headless mode executablePath?: string; // Path to browser executable // ... other Playwright launch options }; // Browser context options // @see https://playwright.dev/docs/api/class-browser#browser-new-context contextOptions?: { viewport?: { width: number, height: number }; // ... other Playwright context options }; // CDP endpoint for connecting to existing browser cdpEndpoint?: string; // Remote Playwright server endpoint remoteEndpoint?: string; }, // Server configuration server?: { port?: number; // Port to listen on host?: string; // Host to bind to (default: localhost) }, // List of enabled capabilities capabilities?: Array< 'core' | // Core browser automation 'tabs' | // Tab management 'pdf' | // PDF generation 'history' | // Browser history 'wait' | // Wait utilities 'files' | // File handling 'install' | // Browser installation 'testing' // Testing >; // Enable vision mode (screenshots instead of accessibility snapshots) vision?: boolean; // Directory for output files outputDir?: string; // Network configuration network?: { // List of origins to allow the browser to request. Default is to allow all. Origins matching both `allowedOrigins` and `blockedOrigins` will be blocked. allowedOrigins?: string[]; // List of origins to block the browser to request. Origins matching both `allowedOrigins` and `blockedOrigins` will be blocked. blockedOrigins?: string[]; }; /** * Do not send image responses to the client. */ 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 实现目前仅支持无头 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) => { // ... // Creates a headless Playwright MCP server with SSE transport const connection = await createConnection({ browser: { launchOptions: { headless: true } } }); const transport = new SSEServerTransport('/messages', res); await connection.connect(transport); // ... });

工具

该工具有两种模式:

  1. 快照模式(默认):使用可访问性快照来获得更好的性能和可靠性
  2. 视觉模式:使用屏幕截图进行基于视觉的交互

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

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

根据提供的屏幕截图,视觉模式最适合能够使用 XY 坐标空间与元素交互的计算机使用模型。

  • browser_snapshot
    • 标题:页面快照
    • 描述:捕获当前页面的可访问性快照,这比屏幕截图更好
    • 参数:无
    • 只读: true
  • browser_click
    • 标题:点击
    • 描述:执行网页上的点击操作
    • 参数:
      • element (字符串):用于获取与元素交互的权限的人类可读的元素描述
      • ref (字符串):来自页面快照的精确目标元素引用
    • 只读: false
  • browser_drag
    • 标题:拖动鼠标
    • 描述:在两个元素之间执行拖放操作
    • 参数:
      • startElement (字符串):用于获取与元素交互权限的人类可读的源元素描述
      • startRef (字符串):来自页面快照的精确源元素引用
      • endElement (字符串):用于获取与元素交互的权限的人类可读的目标元素描述
      • endRef (字符串):来自页面快照的精确目标元素引用
    • 只读: false
  • browser_hover
    • 标题:鼠标悬停
    • 描述:将鼠标悬停在页面上的元素上
    • 参数:
      • element (字符串):用于获取与元素交互的权限的人类可读的元素描述
      • ref (字符串):来自页面快照的精确目标元素引用
    • 只读: true
  • 浏览器类型
    • 标题:输入文本
    • 描述:在可编辑元素中输入文本
    • 参数:
      • element (字符串):用于获取与元素交互的权限的人类可读的元素描述
      • ref (字符串):来自页面快照的精确目标元素引用
      • text (字符串):输入到元素中的文本
      • submit (布尔值,可选):是否提交输入的文本(按 Enter 键后)
      • slowly (布尔值,可选):是否一次输入一个字符。用于触发页面中的按键处理程序。默认情况下,整个文本会一次性填充。
    • 只读: false
  • browser_select_option
    • 标题:选择选项
    • 描述:在下拉菜单中选择一个选项
    • 参数:
      • element (字符串):用于获取与元素交互的权限的人类可读的元素描述
      • ref (字符串):来自页面快照的精确目标元素引用
      • values (数组):下拉菜单中要选择的值的数组。可以是单个值,也可以是多个值。
    • 只读: false
  • browser_press_key
    • 标题:按下一个键
    • 描述:按下键盘上的一个键
    • 参数:
      • key (字符串):要按下的键的名称或要生成的字符,例如ArrowLeft``a
    • 只读: 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,则必须同时提供元素。
    • 只读: true
  • browser_pdf_save
    • 标题:另存为 PDF
    • 描述:将页面保存为 PDF
    • 参数:
      • filename (字符串,可选):保存 PDF 文件的文件名。若未指定,则默认为page-{timestamp}.pdf
    • 只读: true
  • browser_network_requests
    • 标题:列出网络请求
    • 描述:返回自加载页面以来的所有网络请求
    • 参数:无
    • 只读: true
  • browser_console_messages
    • 标题:获取控制台消息
    • 描述:返回所有控制台消息
    • 参数:无
    • 只读: true
  • 浏览器安装
    • 标题:安装配置中指定的浏览器
    • 描述:安装配置中指定的浏览器。如果出现浏览器未安装的错误,请调用此函数。
    • 参数:无
    • 只读: 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
  • 浏览器屏幕类型
    • 标题:输入文本
    • 描述:输入文本
    • 参数:
      • text (字符串):输入到元素中的文本
      • submit (布尔值,可选):是否提交输入的文本(按 Enter 键后)
    • 只读: false
  • browser_press_key
    • 标题:按下一个键
    • 描述:按下键盘上的一个键
    • 参数:
      • key (字符串):要按下的键的名称或要生成的字符,例如ArrowLeft``a
    • 只读: false
  • browser_wait_for
    • 标题:等待
    • 描述:等待文本出现或消失或等待指定的时间过去
    • 参数:
      • time (数字,可选):等待的时间(秒)
      • text (字符串,可选):等待的文本
      • textGone (字符串,可选):等待消失的文本
    • 只读: true
  • browser_file_upload
    • 标题:上传文件
    • 描述:上传一个或多个文件
    • 参数:
      • paths (数组):要上传的文件的绝对路径。可以是单个文件,也可以是多个文件。
    • 只读: false
  • browser_handle_dialog
    • 标题:处理对话
    • 描述:处理对话
    • 参数:
      • accept (布尔值):是否接受对话。
      • promptText (字符串,可选):提示对话框中的提示文本。
    • 只读: false
Install Server
A
security – no known vulnerabilities
A
license - permissive license
A
quality - confirmed to work

local-only server

The server can only run on the client's local machine because it depends on local resources.

模型上下文协议服务器使 LLM 能够通过结构化的可访问性快照与网页交互,而无需视觉模型或屏幕截图。

  1. 主要特点
    1. 要求
      1. 入门
        1. 配置
          1. 用户个人资料
            1. 配置文件
              1. 独立 MCP 服务器
                1. 工具

                  Related MCP Servers

                  • -
                    security
                    A
                    license
                    -
                    quality
                    A Model Context Protocol server that allows LLMs to interact with web content through standardized tools, currently supporting web scraping functionality.
                    Last updated -
                    Python
                    MIT License
                    • Linux
                    • Apple
                  • -
                    security
                    F
                    license
                    -
                    quality
                    A Model Context Protocol server that enables LLMs to fetch and process web content in multiple formats (HTML, JSON, Markdown, text) with automatic format detection.
                    Last updated -
                    TypeScript
                    • Apple
                  • A
                    security
                    A
                    license
                    A
                    quality
                    A Model Context Protocol server that enables LLMs to interact with web pages, take screenshots, generate test code, scrape web pages, and execute JavaScript in a real browser environment.
                    Last updated -
                    29
                    10
                    1
                    TypeScript
                    MIT License
                  • A
                    security
                    A
                    license
                    A
                    quality
                    A Model Context Protocol server that provides browser automation capabilities using Playwright, enabling LLMs to interact with web pages through structured accessibility snapshots without requiring screenshots or vision models.
                    Last updated -
                    21
                    70,036
                    TypeScript
                    Apache 2.0
                    • Apple
                    • Linux

                  View all related MCP servers

                  MCP directory API

                  We provide all the information about MCP servers via our MCP API.

                  curl -X GET 'https://glama.ai/api/mcp/v1/servers/microsoft/playwright-mcp'

                  If you have feedback or need assistance with the MCP directory API, please join our Discord server