mcpField
P
PLAYWRIGHT-MCP

PLAYWRIGHT-MCP

github.com/microsoft聊天应用38.8k6 天前更新

关于 PLAYWRIGHT-MCP

Playwright MCP 是一个 MCP 服务,借助 Playwright 为 LLM 提供浏览器自动化与网页抓取能力。它基于无障碍树(accessibility snapshot)而非截图进行操作,无需视觉模型,适合需要结构化页面信息的场景。

主要功能

  1. 01基于无障碍树的页面快照
  2. 02无需视觉模型即可操作页面
  3. 03确定性的工具调用方式
  4. 04支持多种浏览器与配置选项

适用场景

  1. 01让 LLM 驱动浏览器完成网页交互
  2. 02网页数据抓取与信息提取
  3. 03探索式自动化与自愈测试

详细介绍

Playwright MCP

一个使用 Playwright 提供浏览器自动化功能的模型上下文协议(MCP)服务。该服务通过结构化的无障碍快照,让大模型能够与网页交互,无需使用屏幕截图或针对视觉任务调优的模型。

Playwright MCP 与 Playwright CLI 的对比

此软件包为 Playwright 提供 MCP 接口。如果你使用的是编码 Agent,可以考虑改用 CLI+SKILLS。

  • CLI:现代编码 Agent越来越倾向于使用通过 SKILL 暴露的基于 CLI 的工作流,而非 MCP,因为调用 CLI 更节省 Token:它们无需将大型工具架构和冗长的无障碍树加载到模型上下文中,让 Agent 能够通过简洁、专用的命令执行操作。对于必须在有限的上下文窗口内兼顾浏览器自动化、大型代码库、测试和推理的高吞吐量编码 Agent,CLI + SKILLs 因而更为合适。
    了解更多:带 SKILLS 的 Playwright CLI。

  • MCP:对于需要持久状态、深入检查能力,以及针对页面结构进行迭代推理的特定 Agent 循环,MCP 仍然很有价值,例如探索式自动化、自愈测试,或长时间运行的自主工作流。在这些场景中,保持连续的浏览器上下文比关注 Token 成本更重要。

主要功能
  • 快速且轻量。使用 Playwright 的无障碍树,而非基于像素的输入。
  • 适合大模型使用。无需视觉模型,完全基于结构化数据运行。
  • 确定性的工具应用。避免基于屏幕截图的方法常见的歧义。
要求
  • Node.js 18 或更高版本
  • VS Code、Cursor、Windsurf、Claude Desktop、Goose、Grok、Junie 或任何其他 MCP 客户端
开始使用

首先,使用你的客户端安装 Playwright MCP 服务。

标准配置适用于大多数工具:

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

在 VS Code 中安装 在 VS Code Insiders 中安装

Amp

通过 Amp VS Code 扩展的设置界面添加,或更新 settings.json 文件:

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

Amp CLI 设置:

使用以下 amp mcp add 命令添加

amp mcp add playwright -- npx @playwright/mcp@latest
Antigravity

通过 Antigravity 设置添加,或更新配置文件:

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

使用 Claude Code CLI 添加 Playwright MCP 服务:

claude mcp add playwright npx @playwright/mcp@latest
Claude Desktop

按照 MCP 安装指南操作,并使用上面的标准配置。

Cline

按照配置 MCP 服务一节中的说明操作。

示例:本地设置

将以下内容添加到你的 cline_mcp_settings.json 文件中:

{
  "mcpServers": {
    "playwright": {
      "type": "stdio",
      "command": "npx",
      "timeout": 30,
      "args": [
        "-y",
        "@playwright/mcp@latest"
      ],
      "disabled": false
    }
  }
}
Codex

使用 Codex CLI 添加 Playwright MCP 服务:

codex mcp add playwright npx "@playwright/mcp@latest"

或者,创建或编辑配置文件 ~/.codex/config.toml 并添加:

[mcp_servers.playwright]
command = "npx"
args = ["@playwright/mcp@latest"]

如需了解更多信息,请参阅 Codex MCP 文档。

Copilot

使用 Copilot CLI 以交互方式添加 Playwright MCP 服务:

/mcp add

或者,创建或编辑配置文件 ~/.copilot/mcp-config.json 并添加:

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

如需了解更多信息,请参阅 Copilot CLI 文档。

Cursor
点击按钮进行安装:

在 Cursor 中安装

或手动安装:

前往 Cursor Settings -> MCP -> Add new MCP Server。名称可按需设置,类型选择 command,命令填写 npx @playwright/mcp@latest。你也可以点击 Edit 验证配置或添加类似参数的命令。

Factory

使用 Factory CLI 添加 Playwright MCP 服务:

droid mcp add playwright "npx @playwright/mcp@latest"

或者,在 Factory droid 中输入 /mcp,打开用于管理 MCP 服务的交互式界面。

如需了解更多信息,请参阅 Factory MCP 文档。

Gemini CLI

按照 MCP 安装指南操作,并使用上面的标准配置。

Goose #### 点击按钮进行安装:

在 Goose 中安装

或手动安装:

前往 Advanced settings -> Extensions -> Add custom extension。名称可按需填写,类型选择 STDIO,并将 command 设置为 npx @playwright/mcp。点击“Add Extension”。

Grok

使用 Grok CLI 添加 Playwright MCP 服务:

grok mcp add playwright -- npx @playwright/mcp@latest

或者,创建或编辑配置文件 ~/.grok/config.toml 并添加:

[mcp_servers.playwright]
command = "npx"
args = ["@playwright/mcp@latest"]

更多信息,请参阅 Grok MCP 文档。

Junie

在 Junie CLI 中添加 Playwright MCP 服务:

  1. 输入 /mcp
  2. 按 Ctrl+A 添加新的 MCP 服务
  3. 从列表中选择 Playwright

或者,添加到 .junie/mcp/mcp.json:

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

更多信息,请参阅 Junie MCP 配置文档。

Kiro

添加到 Kiro

请遵循 MCP 服务文档。例如,在 .kiro/settings/mcp.json 中:

{
  "mcpServers": {
    "playwright": {
      "command": "npx",
      "args": [
        "@playwright/mcp@latest"
      ]
    }
  }
}
LM Studio
点击按钮进行安装:

将 MCP 服务 playwright 添加到 LM Studio

或手动安装:

前往右侧边栏中的 Program -> Install -> Edit mcp.json。使用上面的标准配置。

opencode

请遵循 MCP 服务文档。例如,在 ~/.config/opencode/opencode.json 中:

{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "playwright": {
      "type": "local",
      "command": [
        "npx",
        "@playwright/mcp@latest"
      ],
      "enabled": true
    }
  }
}

Qodo Gen

在 VSCode 或 IntelliJ 中打开 Qodo Gen 聊天面板 → Connect more tools → + Add new MCP → 粘贴上面的标准配置。

点击 Save。

VS Code
点击按钮进行安装:

在 VS Code 中安装 在 VS Code Insiders 中安装

或手动安装:

按照 MCP 安装指南操作,并使用上述标准配置。你也可以使用 VS Code CLI 安装 Playwright MCP 服务:

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

安装后,即可在 VS Code 中将 Playwright MCP 服务与 GitHub Copilot Agent 搭配使用。

Warp

前往 Settings -> AI -> Manage MCP Servers -> + Add,以添加 MCP 服务。使用上述标准配置。

或者,在 Warp 提示词中使用斜杠命令 /add-mcp,并粘贴上述标准配置:

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

按照 Windsurf MCP 文档操作。使用上述标准配置。

配置

Playwright MCP 服务支持以下参数。可将它们作为 "args" 列表的一部分,添加到上述 JSON 配置中:

Option描述
--allowed-hosts <hosts...>以逗号分隔的主机列表,指定此服务允许从哪些主机提供服务。默认为服务绑定的主机。传入 '*' 可禁用主机检查。
环境变量 PLAYWRIGHT_MCP_ALLOWED_HOSTS
--allowed-origins 以分号分隔的可信来源列表,允许浏览器请求这些来源。默认允许所有来源。重要:不作为安全边界,且不影响重定向。
环境变量 PLAYWRIGHT_MCP_ALLOWED_ORIGINS
--allow-unrestricted-file-access允许访问工作区根目录之外的文件。也允许不受限制地访问 file:// URL。默认情况下,文件系统访问仅限于工作区根目录(如果未配置根目录,则为当前工作目录),且会阻止导航到 file:// URL。
环境变量 PLAYWRIGHT_MCP_ALLOW_UNRESTRICTED_FILE_ACCESS
--blocked-origins 以分号分隔的来源列表,阻止浏览器请求这些来源。先评估阻止列表,再评估允许列表。如果不与允许列表一起使用,则仍允许不匹配阻止列表的请求。重要:不作为安全边界,且不影响重定向。
环境变量 PLAYWRIGHT_MCP_BLOCKED_ORIGINS
--block-service-workers阻止 Service Worker
环境变量 PLAYWRIGHT_MCP_BLOCK_SERVICE_WORKERS
--browser 要使用的浏览器或 Chrome 通道,可选值:chrome、firefox、webkit、msedge。
环境变量 PLAYWRIGHT_MCP_BROWSER
--caps 以逗号分隔的要启用的附加功能列表,可选值:vision、pdf、devtools。
环境变量 PLAYWRIGHT_MCP_CAPS
--cdp-endpoint 要连接的 CDP 端点。
环境变量 PLAYWRIGHT_MCP_CDP_ENDPOINT
--cdp-header <headers...>连接请求要发送的 CDP 标头,可指定多个。
环境变量 PLAYWRIGHT_MCP_CDP_HEADERS
--cdp-timeout 连接 CDP 端点的超时时间,单位为毫秒,默认为 30000ms
环境变量 PLAYWRIGHT_MCP_CDP_TIMEOUT
--codegen 指定代码生成所用的语言,可选值:"typescript"、"python"、"java"、"csharp"、"none"。默认为 "typescript"。
环境变量 PLAYWRIGHT_MCP_CODEGEN
--config 配置文件的路径。
环境变量 PLAYWRIGHT_MCP_CONFIG
--console-level 要返回的控制台消息级别:"error"、"warning"、"info"、"debug"。每个级别都包含严重程度更高的消息。
环境变量 PLAYWRIGHT_MCP_CONSOLE_LEVEL
--device 要模拟的设备,例如:"iPhone 15"
环境变量 PLAYWRIGHT_MCP_DEVICE
--mobile模拟通用移动设备(Chromium 使用 Pixel 10,WebKit 使用 iPhone 17)。移动页面通常更轻量,可节省令牌。不能与 --device 一起使用。
环境变量 PLAYWRIGHT_MCP_MOBILE
--executable-path 浏览器可执行文件的路径。
环境变量 PLAYWRIGHT_MCP_EXECUTABLE_PATH
--extension连接到正在运行的浏览器实例(仅限 Edge/Chrome)。需要安装 "Playwright Extension"。
环境变量 PLAYWRIGHT_MCP_EXTENSION
--endpoint 要连接的已绑定浏览器端点。
环境变量 PLAYWRIGHT_MCP_ENDPOINT
--file-paths 工具结果中文件路径的呈现方式:"relative"(相对于工作区根目录)或 "absolute"。默认为 "relative"。
环境变量 PLAYWRIGHT_MCP_FILE_PATHS
--grant-permissions <permissions...>授予浏览器上下文的权限列表,例如 "geolocation"、"clipboard-read"、"clipboard-write"。
环境变量 PLAYWRIGHT_MCP_GRANT_PERMISSIONS
--headless以无头模式运行浏览器,默认以有头模式运行
环境变量 PLAYWRIGHT_MCP_HEADLESS
--host 服务要绑定的主机。默认为 localhost。使用 0.0.0.0 可绑定到所有网络接口。
环境变量 PLAYWRIGHT_MCP_HOST
--idle-timeout 在指定毫秒数内没有完成的工具调用后关闭浏览器;下一次工具调用会重新启动浏览器。无头浏览器默认为一小时,有头浏览器永不超时,设为 0 可禁用。
环境变量 PLAYWRIGHT_MCP_IDLE_TIMEOUT
--ignore-https-errors忽略 HTTPS 错误
环境变量 PLAYWRIGHT_MCP_IGNORE_HTTPS_ERRORS
--init-page <path...>要在 Playwright 页面对象上执行的 TypeScript 文件路径
环境变量 PLAYWRIGHT_MCP_INIT_PAGE
--init-script <path...>要作为初始化脚本添加的 JavaScript 文件路径。该脚本会在每个页面中、任何页面脚本运行之前执行。可指定多次。
环境变量 PLAYWRIGHT_MCP_INIT_SCRIPT
--isolated将浏览器配置文件保留在内存中,不保存到磁盘。
环境变量 PLAYWRIGHT_MCP_ISOLATED
--image-responses 是否向客户端发送图像响应。可选值为 "allow"、"omit" 或 "only"。使用 "only" 时,包含图像的响应仅由图像部分组成,不含文本部分。默认为 "allow"。
环境变量 PLAYWRIGHT_MCP_IMAGE_RESPONSES
--no-sandbox为通常启用沙箱的所有进程类型禁用沙箱。
环境变量 PLAYWRIGHT_MCP_NO_SANDBOX
--no-webmcp不收集或公开页面通过 WebMCP API 注册的工具。
环境变量 PLAYWRIGHT_MCP_WEBMCP=false
--output-dir 自动命名的输出文件所在目录的路径,例如未显式指定文件名时截取的屏幕截图。显式命名的文件会解析为相对于工作区根目录的路径,不受此选项影响。
环境变量 PLAYWRIGHT_MCP_OUTPUT_DIR
--output-max-size 清理旧输出文件的阈值,单位为字节。
环境变量 PLAYWRIGHT_MCP_OUTPUT_MAX_SIZE
--port SSE 传输要监听的端口。
环境变量 PLAYWRIGHT_MCP_PORT
--profile-dir-name 使用 --extension 连接时,用户数据目录中的配置文件目录名称,例如 "Profile 1"。默认为安装了扩展程序的最近使用的配置文件。
环境变量 PLAYWRIGHT_MCP_PROFILE_DIR_NAME
--proxy-bypass 以逗号分隔的绕过代理的域名,例如 ".com,chromium.org,.domain.com"
环境变量 PLAYWRIGHT_MCP_PROXY_BYPASS
--proxy-server 指定代理服务,例如 "http://myproxy:3128" 或 "socks5://myproxy:8080"
环境变量 PLAYWRIGHT_MCP_PROXY_SERVER
--sandbox为通常未启用沙箱的所有进程类型启用沙箱。
环境变量 PLAYWRIGHT_MCP_SANDBOX
--save-session是否将 Playwright MCP 会话保存到输出目录。
环境变量 PLAYWRIGHT_MCP_SAVE_SESSION
--secrets dotenv 格式的机密信息文件路径
环境变量 PLAYWRIGHT_MCP_SECRETS_FILE
--shared-browser-context在所有已连接的 HTTP 客户端之间重复使用同一浏览器上下文。
环境变量 PLAYWRIGHT_MCP_SHARED_BROWSER_CONTEXT
--snapshot-boxes在快照中将每个元素的边界框包含为 [box=x,y,width,height]。坐标相对于视口,单位为 CSS 像素。
环境变量 PLAYWRIGHT_MCP_SNAPSHOT_BOXES
--snapshot-mode 为响应生成快照时指定使用的模式。可选值为 "full" 或 "none"。默认为 "full"。
环境变量 PLAYWRIGHT_MCP_SNAPSHOT_MODE
--storage-state 隔离会话的存储状态文件路径。
环境变量 PLAYWRIGHT_MCP_STORAGE_STATE
--test-id-attribute 指定测试 ID 使用的属性,默认为 "data-testid"
环境变量 PLAYWRIGHT_MCP_TEST_ID_ATTRIBUTE
--timeout-action 指定操作超时时间,单位为毫秒,默认为 5000ms
环境变量 PLAYWRIGHT_MCP_TIMEOUT_ACTION
--timeout-navigation 指定导航超时时间,单位为毫秒,默认为 60000ms
环境变量 PLAYWRIGHT_MCP_TIMEOUT_NAVIGATION
--timeout-settle 每次操作后等待触发的工作完成所需的时间,单位为毫秒,默认为 500ms
环境变量 PLAYWRIGHT_MCP_TIMEOUT_SETTLE
--user-agent 指定用户代理字符串
环境变量 PLAYWRIGHT_MCP_USER_AGENT
--user-data-dir 用户数据目录的路径。如果未指定,将创建临时目录。
环境变量 PLAYWRIGHT_MCP_USER_DATA_DIR
--viewport-size 指定浏览器视口的像素尺寸,例如 "1280x720"
环境变量 PLAYWRIGHT_MCP_VIEWPORT_SIZE
用户配置文件

你可以像使用普通浏览器一样,使用持久化配置文件运行 Playwright MCP;也可以在隔离的上下文中进行测试会话,或通过浏览器扩展连接到现有浏览器。

持久化配置文件

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

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

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

# Linux
- ~/.cache/ms-playwright/mcp-{channel}-{workspace-hash}

{workspace-hash} 根据 MCP 客户端的工作区根目录生成,因此不同项目会自动使用不同的配置文件。

重要

持久化配置文件一次只能由一个浏览器实例使用,因此,共享同一工作区的并发 MCP 客户端会发生冲突。若要并行运行多个客户端,请为每个额外客户端启动时添加 --isolated,或为其指定不同的 --user-data-dir。

隔离模式

在隔离模式下,每个会话都会在隔离配置文件中启动。每次你要求 MCP 关闭浏览器时, 会话都会关闭,且该会话的所有存储状态都会丢失。你可以通过配置的 contextOptions 或 --storage-state 参数为浏览器提供初始存储状态。详细了解存储 状态,请参阅此处。

{
  "mcpServers": {
    "playwright": {
      "command": "npx",
      "args": [
        "@playwright/mcp@latest",
        "--isolated",
        "--storage-state={path/to/storage.json}"
      ]
    }
  }
}

浏览器扩展

Playwright MCP Chrome 扩展允许你连接到现有浏览器标签页,并利用已登录的会话和浏览器状态。请参阅 microsoft/playwright › packages/extension,了解安装和设置说明。

初始状态

有多种方法可以为浏览器上下文或页面提供初始状态。

对于存储状态,你可以:

  • 使用 --user-data-dir 参数启动,并指定用户数据目录。这样会在不同会话之间保留所有浏览器数据。
  • 使用 --storage-state 参数启动,并指定存储状态文件。这样会将文件中的 Cookie 和本地存储加载到隔离的浏览器上下文中。

对于页面状态,你可以使用:

  • --init-page 指定一个 TypeScript 文件,该文件会在 Playwright 页面对象上执行。这样你就可以运行任意代码来设置页面。
// init-page.ts
export default async ({ page }) => {
  await page.context().grantPermissions(['geolocation']);
  await page.context().setGeolocation({ latitude: 37.7749, longitude: -122.4194 });
  await page.setViewportSize({ width: 1280, height: 720 });
};
  • --init-script 指定一个 JavaScript 文件,并将其作为初始化脚本添加。该脚本会在每个页面的其他脚本运行之前执行。 这适用于覆盖浏览器 API 或设置环境。
// init-script.js
window.isPlaywrightMCP = true;
配置文件

Playwright MCP 服务可以使用 JSON 配置文件进行配置。你可以使用 --config 命令行选项 指定配置文件:

npx @playwright/mcp@latest --config path/to/config.json
配置文件架构
{
  /**
   * The browser to use.
   */
  browser?: {
    /**
     * The type of browser to use.
     */
    browserName?: 'chromium' | 'firefox' | 'webkit';

    /**
     * Keep the browser profile in memory, do not save it to disk.
     */
    isolated?: boolean;

    /**
     * Path to a user data directory for browser profile persistence.
     * Temporary directory is created by default.
     */
    userDataDir?: string;

    /**
     * Launch options passed to
     * @see https://playwright.dev/docs/api/class-browsertype#browser-type-launch-persistent-context
     *
     * This is useful for settings options like `channel`, `headless`, `executablePath`, etc.
     */
    launchOptions?: playwright.LaunchOptions;

    /**
     * Context options for the browser context.
     *
     * This is useful for settings options like `viewport`.
     */
    contextOptions?: playwright.BrowserContextOptions;

    /**
     * Chrome DevTools Protocol endpoint to connect to an existing browser instance in case of Chromium family browsers.
     */
    cdpEndpoint?: string;

    /**
     * CDP headers to send with the connect request.
     */
    cdpHeaders?: Record<string, string>;

    /**
     * Timeout in milliseconds for connecting to CDP endpoint. Defaults to 30000 (30 seconds). Pass 0 to disable timeout.
     */
    cdpTimeout?: number;

    /**
     * Remote endpoint to connect to an existing Playwright server. May be a
     * WebSocket URL string, or a [ConnectOptions] object that mirrors the
     * `connectOptions` shape used by the test runner. When passed as an object,
     * `exposeNetwork`, `headers`, `slowMo`, and `timeout` are forwarded to the
     * underlying connect call.
     */
    remoteEndpoint?: string | playwright.ConnectOptions & { endpoint: string };

    /**
     * Paths to TypeScript files to add as initialization scripts for Playwright page.
     */
    initPage?: string[];

    /**
     * Paths to JavaScript files to add as initialization scripts.
     * The scripts will be evaluated in every page before any of the page's scripts.
     */
    initScript?: string[];
  },

  /**
   * Connect to a running browser instance (Edge/Chrome only). If specified, `browser`
   * config is ignored.
   * Requires the "Playwright Extension" to be installed.
   */
  extension?: boolean;

  server?: {
    /**
     * The port to listen on for SSE or MCP transport.
     */
    port?: number;

    /**
     * The host to bind the server to. Default is localhost. Use 0.0.0.0 to bind to all interfaces.
     */
    host?: string;

    /**
     * The hosts this server is allowed to serve from. Defaults to the host server is bound to.
     * This is not for CORS, but rather for the DNS rebinding protection.
     */
    allowedHosts?: string[];
  },

  /**
   * List of enabled tool capabilities. Possible values:
   *   - 'core': Core browser automation features.
   *   - 'pdf': PDF generation and manipulation.
   *   - 'vision': Coordinate-based interactions.
   *   - 'devtools': Developer tools features.
   */
  capabilities?: ToolCapability[];

  /**
   * Whether to save the Playwright session into the output directory.
   */
  saveSession?: boolean;

  /**
   * Whether to collect and expose the tools that a page registers through the
   * experimental WebMCP API. Enabled by default.
   */
  webmcp?: boolean;

  /**
   * Reuse the same browser context between all connected HTTP clients.
   */
  sharedBrowserContext?: boolean;

  /**
   * Secrets are used to replace matching plain text in the tool responses to prevent the LLM
   * from accidentally getting sensitive data. It is a convenience and not a security feature,
   * make sure to always examine information coming in and from the tool on the client.
   */
  secrets?: Record<string, string>;

  /**
   * The directory for automatically named output files, for example a screenshot taken without an
   * explicit file name. Files with an explicit name are resolved against the workspace root instead
   * and are not affected by this option.
   */
  outputDir?: string;

  /**
   * Threshold for evicting old output files, in bytes.
   */
  outputMaxSize?: number;

  console?: {
    /**
     * The level of console messages to return. Each level includes the messages of more severe levels. Defaults to "info".
     */
    level?: 'error' | 'warning' | 'info' | 'debug';
  },

  network?: {
    /**
     * List of origins to allow the browser to request. Default is to allow all. Origins matching both `allowedOrigins` and `blockedOrigins` will be blocked.
     *
     * Supported formats:
     * - Full origin: `https://example.com:8080` - matches only that origin
     * - Wildcard port: `http://localhost:*` - matches any port on localhost with http protocol
     */
    allowedOrigins?: string[];

    /**
     * List of origins to block the browser to request. Origins matching both `allowedOrigins` and `blockedOrigins` will be blocked.
     *
     * Supported formats:
     * - Full origin: `https://example.com:8080` - matches only that origin
     * - Wildcard port: `http://localhost:*` - matches any port on localhost with http protocol
     */
    blockedOrigins?: string[];
  };

  /**
   * Specify the attribute to use for test ids, defaults to "data-testid".
   */
  testIdAttribute?: string;

  timeouts?: {
    /*
     * Configures default action timeout: https://playwright.dev/docs/api/class-page#page-set-default-timeout. Defaults to 5000ms.
     */
    action?: number;

    /*
     * Configures default navigation timeout: https://playwright.dev/docs/api/class-page#page-set-default-navigation-timeout. Defaults to 60000ms.
     */
    navigation?: number;

    /**
     * Configures default expect timeout: https://playwright.dev/docs/test-timeouts#expect-timeout. Defaults to 5000ms.
     */
    expect?: number;

    /**
     * How long to wait after each action for triggered work (navigations, requests) to settle before responding. Defaults to 500ms.
     */
    settle?: number;

    /**
     * Close the browser after this many milliseconds without a tool call, and relaunch it on the next one.
     * Defaults to one hour for headless browsers Playwright launched, and to no timeout for headed or attached ones. Pass 0 to disable.
     * The CLI shuts the whole session down instead of relaunching.
     */
    idle?: number;
  };

  /**
   * Whether to send image responses to the client. Can be "allow", "omit", or "only". Defaults to "allow".
   * With "only", a response that carries an image consists of the image parts alone, without the text part.
   */
  imageResponses?: 'allow' | 'omit' | 'only';

  /**
   * How file paths are rendered in tool results. Can be "relative" to the workspace root or "absolute". Defaults to "relative".
   */
  filePaths?: 'relative' | 'absolute';

  snapshot?: {
    /**
     * When taking snapshots for responses, specifies the mode to use.
     */
    mode?: 'full' | 'none';

    /**
     * Whether to include each element's bounding box as [box=x,y,width,height] in snapshots.
     * Coordinates are viewport-relative, in CSS pixels (Element.getBoundingClientRect).
     */
    boxes?: boolean;
  };

  /**
   * allowUnrestrictedFileAccess acts as a guardrail to prevent the LLM from accidentally
   * wandering outside its intended workspace. It is a convenience defense to catch unintended
   * file access, not a secure boundary; a deliberate attempt to reach other directories can be
   * easily worked around, so always rely on client-level permissions for true security.
   */
  allowUnrestrictedFileAccess?: boolean;

  /**
   * Specify the language to use for code generation.
   */
  codegen?: 'typescript' | 'python' | 'java' | 'csharp' | 'none';
}
独立 MCP 服务

在没有显示器的系统上运行有头浏览器,或从 IDE 的工作进程中运行时, 请在具有 DISPLAY 的环境中运行 MCP 服务,并传入 --port 标志以启用 HTTP 传输。

npx @playwright/mcp@latest --port 8931

然后,在 MCP 客户端配置中,将 url 设置为 HTTP 端点:

{
  "mcpServers": {
    "playwright": {
      "url": "http://localhost:8931/mcp"
    }
  }
}

安全

Playwright MCP 不是安全边界。有关如何保护部署的指导,请参阅 MCP 安全最佳实践。

Docker

注意: Docker 实现目前仅支持无头 Chromium。

{
  "mcpServers": {
    "playwright": {
      "command": "docker",
      "args": ["run", "-i", "--rm", "--init", "--pull=always", "mcr.microsoft.com/playwright/mcp"]
    }
  }
}

或者,如果你更愿意将容器作为长时间运行的服务,而不是让 MCP 客户端启动它,请使用:

docker run -d -i --rm --init --pull=always \
  --entrypoint node \
  --name playwright \
  -p 8931:8931 \
  mcr.microsoft.com/playwright/mcp \
  /app/cli.js --headless --browser chromium --no-sandbox --port 8931 --host 0.0.0.0

服务将在主机端口 8931 上监听,任何 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);

  // ...
});
工具
核心自动化 - **browser_click** - Title: 点击 - Description: 在网页上执行点击操作 - Parameters: - `element` (string, optional): 用于获取与该元素交互权限的易读元素描述 - `target` (string): 页面快照中的精确目标元素引用,或唯一元素选择器 - `doubleClick` (boolean, optional): 是否执行双击而非单击 - `button` (string, optional): 要点击的按钮,默认为左键 - `modifiers` (array, optional): 要按下的修饰键 - Read-only: **false**
  • browser_close

    • Title: 关闭浏览器
    • Description: 关闭页面
    • Parameters: 无
    • Read-only: false
  • browser_console_messages

    • Title: 获取控制台消息
    • Description: 返回所有控制台消息
    • Parameters:
      • level (string): 要返回的控制台消息级别。每个级别都包含更严重级别的消息。默认为 "info"。
      • all (boolean, optional): 返回会话开始以来的所有控制台消息,而不仅是上次导航以来的消息。默认为 false。
      • filename (string, optional): 用于保存控制台消息的文件名。相对文件名会相对于工作区根目录解析。如果未提供,则以文本形式返回消息。
    • Read-only: true
  • browser_drag

    • Title: 拖动鼠标
    • Description: 在两个元素之间执行拖放操作
    • Parameters:
      • startElement (string, optional): 用于获取与该元素交互权限的易读源元素描述
      • startTarget (string): 页面快照中的精确目标元素引用,或唯一元素选择器
      • endElement (string, optional): 用于获取与该元素交互权限的易读目标元素描述
      • endTarget (string): 页面快照中的精确目标元素引用,或唯一元素选择器
    • Read-only: false
  • browser_drop

    • Title: 将文件或数据拖放到元素上
    • Description: 将文件或 MIME 类型的数据拖放到元素上,效果如同从页面外部拖入。必须至少提供 "paths" 或 "data" 其中之一。
    • Parameters:
      • element (string, optional): 用于获取与该元素交互权限的易读元素描述
      • target (string): 页面快照中的精确目标元素引用,或唯一元素选择器
      • paths (array, optional): 要拖放到元素上的文件的绝对路径。
      • data (object, optional): 要拖放的数据,格式为 MIME 类型到字符串值的映射(例如 {"text/plain": "hello", "text/uri-list": "https://example.com"})。
    • Read-only: false
  • browser_emulate_media

    • Title: 模拟媒体特性
    • Description: 模拟页面的 CSS 媒体特性,例如在浅色和深色配色方案之间切换。未指定的参数保持不变;null 会清除覆盖设置。
    • Parameters:
      • colorScheme (optional): 模拟 prefers-color-scheme 媒体特性
      • reducedMotion (optional): 模拟 prefers-reduced-motion 媒体特性
      • forcedColors (optional): 模拟 forced-colors 媒体特性
      • contrast (optional): 模拟 prefers-contrast 媒体特性
      • media (optional): 更改页面的 CSS 媒体类型
    • Read-only: false
  • browser_evaluate

    • 标题:执行 JavaScript
    • 描述:在页面或元素上执行 JavaScript 表达式
    • 参数:
      • element(字符串,可选):用于获取与元素交互权限的、人类可读的元素描述
      • target(字符串,可选):页面快照中的精确目标元素引用,或唯一元素选择器
      • function(字符串):() => { /* code / },或在提供 element 时使用 (element) => { / code */ }
      • filename(字符串,可选):用于保存结果的文件名。相对文件名相对于工作区根目录解析。如果未提供,则以文本形式返回结果。
    • 只读:否
  • browser_file_upload

    • 标题:上传文件
    • 描述:上传一个或多个文件
    • 参数:
      • paths(数组,可选):要上传文件的绝对路径。可以是单个文件或多个文件。如果省略,则取消文件选择器。
    • 只读:否
  • browser_fill_form

    • 标题:填写表单
    • 描述:填写多个表单字段
    • 参数:
      • fields(数组):要填写的字段
    • 只读:否
  • browser_find

    • 标题:在页面快照中查找
    • 描述:在当前页面的无障碍快照中搜索文本或正则表达式。返回匹配的快照节点及其周围几行上下文(类似搜索摘要),每个节点都显示在树中的根路径下。如果只需定位元素及其引用,这种方式比捕获完整快照更省资源。
    • 参数:
      • text(字符串,可选):要在页面快照中搜索的纯文本(不区分大小写的子串匹配)。提供 text 或 regex 其中之一,不能同时提供。
      • regex(字符串,可选):要在页面快照中搜索的正则表达式。默认区分大小写;如需不区分大小写,可将模式写在斜杠中并添加标志,例如 "/error/i"。提供 text 或 regex 其中之一,不能同时提供。
      • filename(字符串,可选):将结果保存到文件,而不是在响应中返回。相对文件名相对于工作区根目录解析。
    • 只读:是
  • browser_handle_dialog

    • 标题:处理对话框
    • 描述:处理对话框
    • 参数:
      • accept(布尔值):是否接受对话框。
      • promptText(字符串,可选):如果是提示对话框,则填写提示文本。
    • 只读:否
  • browser_hover

    • 标题:悬停鼠标
    • 描述:将鼠标悬停在页面元素上
    • 参数:
      • element(字符串,可选):用于获取与元素交互权限的、人类可读的元素描述
      • target(字符串):页面快照中的精确目标元素引用,或唯一元素选择器
    • 只读:否
  • browser_navigate

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

    • 标题:返回
    • 描述:返回历史记录中的上一页
    • 参数:无
    • 只读:否
  • browser_network_request

    • 标题:显示网络请求详情
    • 描述:返回单个网络请求的完整详情(标头和正文);如果设置了 part,则只返回其中一个部分。使用 browser_network_requests 中显示的编号。
    • 参数:
      • index(整数):请求的从 1 开始的索引,如 browser_network_requests 中所示。
      • part(字符串,可选):仅返回此请求部分。省略则返回完整详情。
      • filename(字符串,可选):用于保存结果的文件名。相对文件名相对于工作区根目录解析。如果未提供,则以文本形式返回输出。
    • 只读:是
  • browser_network_requests

    • 标题:列出网络请求
    • 描述:返回页面加载后发出的网络请求编号列表。使用编号调用 browser_network_request 可获取完整详情。
    • 参数:
      • static (boolean):是否包含成功加载的静态资源,例如图片、字体、脚本等。默认为 false。
      • filter (string, optional):仅返回 URL 与此正则表达式匹配的请求(例如 "/api/.*user")。
      • filename (string, optional):保存网络请求的文件名。相对文件名相对于工作区根目录解析。如果未提供,则以文本形式返回请求。
    • 只读:true
  • browser_press_key

    • 标题:按下按键
    • 描述:按下键盘上的按键
    • 参数:
      • key (string):要按下的键的名称,或要生成的字符,例如 ArrowLeft 或 a
    • 只读:false
  • browser_resize

    • 标题:调整浏览器窗口大小
    • 描述:调整浏览器窗口大小
    • 参数:
      • width (number):浏览器窗口的宽度
      • height (number):浏览器窗口的高度
    • 只读:false
  • browser_run_code_unsafe

    • 标题:运行 Playwright 代码(不安全)
    • 描述:运行 Playwright 代码片段。不安全:会在 Playwright 服务进程中执行任意 JavaScript,效果等同于远程代码执行(RCE)。
    • 参数:
      • code (string, optional):包含要执行的 Playwright 代码的 JavaScript 函数。调用时会传入单个参数 page,可用于执行任何页面交互。例如:async (page) => { await page.getByRole('button', { name: 'Submit' }).click(); return await page.title(); }
      • filename (string, optional):从指定文件加载代码。相对文件名相对于工作区根目录解析。如果同时提供 code 和 filename,则忽略 code。
    • 只读:false
  • browser_select_option

    • 标题:选择选项
    • 描述:在下拉菜单中选择一个选项
    • 参数:
      • element (string, optional):用于请求与该元素交互的许可的易读元素描述
      • target (string):页面快照中的确切目标元素引用,或唯一的元素选择器
      • values (array):要在下拉菜单中选择的值数组。可以是单个值,也可以是多个值。
    • 只读:false
  • browser_snapshot

    • 标题:页面快照
    • 描述:捕获当前页面的无障碍快照;这比截图更合适
    • 参数:
      • target (string, optional):页面快照中的确切目标元素引用,或唯一的元素选择器
      • filename (string, optional):将快照保存到文件,而不是在响应中返回。相对文件名相对于工作区根目录解析。
      • depth (number, optional):限制快照树的深度
      • boxes (boolean, optional):在快照中包含每个元素的边界框,格式为 [box=x,y,width,height]。坐标相对于视口,单位为 CSS 像素(Element.getBoundingClientRect)
    • 只读:true
  • browser_take_screenshot

    • 标题:截取屏幕截图
    • 描述:截取当前页面的屏幕截图。你无法根据屏幕截图执行操作;如需执行操作,请使用 browser_snapshot。
    • 参数:
      • element (string, optional):用于获取与该元素交互权限的易读元素描述
      • target (string, optional):页面快照中的精确目标元素引用,或唯一元素选择器
      • type (string, optional):屏幕截图的图像格式。如果未设置,则根据文件名扩展名推断;否则使用 png。
      • filename (string, optional):用于保存屏幕截图的文件名。相对文件名相对于工作区根目录解析。如果未指定,屏幕截图将以 page-{timestamp}.{png|jpeg|webp} 的名称保存到输出目录。
      • fullPage (boolean, optional):为 true 时,截取整个可滚动页面,而不是当前可见视口。不能与元素屏幕截图同时使用。
      • scale (string):图像分辨率比例。“css”会生成 CSS 像素大小的屏幕截图(尺寸较小,在不同设备上保持一致)。“device”会使用设备像素生成高分辨率屏幕截图(尺寸较大,并考虑设备像素比)。默认值为 css。
    • 只读:是
  • browser_type

    • 标题:输入文本
    • 描述:在可编辑元素中输入文本
    • 参数:
      • element (string, optional):用于获取与该元素交互权限的易读元素描述
      • target (string):页面快照中的精确目标元素引用,或唯一元素选择器
      • text (string):要输入到元素中的文本
      • submit (boolean, optional):是否提交输入的文本(之后按 Enter)
      • slowly (boolean, optional):是否逐个字符输入。适用于触发页面中的按键处理程序。默认情况下,整个文本会一次性填入。
    • 只读:否
  • browser_wait_for

    • 标题:等待
    • 描述:等待文本出现或消失,或等待指定时长
    • 参数:
      • time (number, optional):等待时间(秒),最长 30 秒
      • text (string, optional):等待其出现的文本
      • textGone (string, optional):等待其消失的文本
    • 只读:否
标签页管理
  • browser_tabs
    • 标题:管理标签页
    • 描述:列出、新建、关闭或选择浏览器标签页。
    • 参数:
      • action (string):要执行的操作
      • index (number, optional):用于关闭或选择的标签页索引。关闭时若省略,则关闭当前标签页。
      • url (string, optional):要在新标签页中打开的网址,仅用于新建操作。
    • 只读:否
浏览器安装
配置(通过 --caps=config 选择启用)
  • browser_get_config
    • 标题:获取配置
    • 描述:获取合并 CLI 选项、环境变量和配置文件后的最终解析配置。
    • 参数:无
    • 只读:是
网络(通过 --caps=network 选择启用)
  • browser_network_state_set

    • 标题:设置网络状态
    • 描述:将浏览器网络状态设为在线或离线。离线时,所有网络请求都会失败。
    • 参数:
      • state (string):设为 "offline" 可模拟离线模式,设为 "online" 可恢复网络连接
    • 只读:否
  • browser_route

    • Title: 模拟网络请求
    • Description: 设置路由,以模拟与 URL 模式匹配的网络请求
    • Parameters:
      • pattern (string): 要匹配的 URL 模式(例如,"/api/users"、"/*.{png,jpg}")
      • status (number, optional): 要返回的 HTTP 状态码(默认值:200)
      • body (string, optional): 响应正文(文本或 JSON 字符串)
      • contentType (string, optional): Content-Type 标头(例如,"application/json"、"text/html")
      • headers (array, optional): 要添加的标头,格式为 "Name: Value"
      • removeHeaders (string, optional): 要从请求中移除的标头名称列表,以逗号分隔
    • Read-only: false
  • browser_route_list

    • Title: 列出网络路由
    • Description: 列出所有有效的网络路由
    • Parameters: None
    • Read-only: true
  • browser_unroute

    • Title: 移除网络路由
    • Description: 移除与模式匹配的网络路由(如果未指定模式,则移除所有路由)
    • Parameters:
      • pattern (string, optional): 要取消路由的 URL 模式(省略则移除所有路由)
    • Read-only: false
存储(通过 --caps=storage 选择启用)
  • browser_cookie_clear

    • Title: 清除 Cookie
    • Description: 清除所有 Cookie
    • Parameters: None
    • Read-only: false
  • browser_cookie_delete

    • Title: 删除 Cookie
    • Description: 删除指定的 Cookie
    • Parameters:
      • name (string): 要删除的 Cookie 名称
    • Read-only: false
  • browser_cookie_get

    • Title: 获取 Cookie
    • Description: 按名称获取指定的 Cookie
    • Parameters:
      • name (string): 要获取的 Cookie 名称
    • Read-only: true
  • browser_cookie_list

    • Title: 列出 Cookie
    • Description: 列出所有 Cookie(可按域名/路径筛选)
    • Parameters:
      • domain (string, optional): 按域名筛选 Cookie
      • path (string, optional): 按路径筛选 Cookie
    • Read-only: true
  • browser_cookie_set

    • Title: 设置 Cookie
    • Description: 设置 Cookie,可选指定标志(domain、path、expires、httpOnly、secure、sameSite)
    • Parameters:
      • name (string): Cookie 名称
      • value (string): Cookie 值
      • domain (string, optional): Cookie 域名
      • path (string, optional): Cookie 路径
      • expires (number, optional): Cookie 过期时间,以 Unix 时间戳表示
      • httpOnly (boolean, optional): Cookie 是否仅限 HTTP 访问
      • secure (boolean, optional): Cookie 是否为安全 Cookie
      • sameSite (string, optional): Cookie 的 SameSite 属性
    • Read-only: false
  • browser_localstorage_clear

    • Title: 清除 localStorage
    • Description: 清除所有 localStorage
    • Parameters: None
    • Read-only: false
  • browser_localstorage_delete

    • Title: 删除 localStorage 项
    • Description: 删除一个 localStorage 项
    • Parameters:
      • key (string): 要删除的键
    • Read-only: false
  • browser_localstorage_get

    • Title: 获取 localStorage 项
    • Description: 按键获取一个 localStorage 项
    • Parameters:
      • key (string): 要获取的键
    • Read-only: true
  • browser_localstorage_list

    • Title: 列出 localStorage
    • Description: 列出所有 localStorage 键值对
    • Parameters: None
    • Read-only: true
  • browser_localstorage_set

    • Title: 设置 localStorage 项
    • Description: 设置一个 localStorage 项
    • Parameters:
      • key (string): 要设置的键
      • value (string): 要设置的值
    • Read-only: false
  • browser_sessionstorage_clear

    • Title: 清除 sessionStorage
    • Description: 清除所有 sessionStorage
    • Parameters: None
    • Read-only: false
  • browser_sessionstorage_delete

    • Title: 删除 sessionStorage 项
    • Description: 删除一个 sessionStorage 项
    • Parameters:
      • key (string): 要删除的键
    • Read-only: false
  • browser_sessionstorage_get

    • 标题:获取 sessionStorage 项
    • 描述:通过键获取 sessionStorage 项
    • 参数:
      • key(string):要获取的键
    • 只读:true
  • browser_sessionstorage_list

    • 标题:列出 sessionStorage
    • 描述:列出所有 sessionStorage 键值对
    • 参数:无
    • 只读:true
  • browser_sessionstorage_set

    • 标题:设置 sessionStorage 项
    • 描述:设置 sessionStorage 项
    • 参数:
      • key(string):要设置的键
      • value(string):要设置的值
    • 只读:false
  • browser_set_storage_state

    • 标题:恢复存储状态
    • 描述:从文件恢复存储状态(Cookie、本地存储)。恢复前会清除现有的 Cookie 和本地存储。
    • 参数:
      • filename(string):要从中恢复存储状态的文件路径。相对文件名相对于工作区根目录解析。
    • 只读:false
  • browser_storage_state

    • 标题:保存存储状态
    • 描述:将存储状态(Cookie、本地存储)保存到文件,以便日后重复使用
    • 参数:
      • filename(string,可选):用于保存存储状态的文件名。相对文件名相对于工作区根目录解析。如果未指定,存储状态将保存到输出目录,文件名为 storage-state-{timestamp}.json。
    • 只读:true
DevTools(通过 --caps=devtools 选择启用)
  • browser_annotate

    • 标题:标注当前页面
    • 描述:以标注模式打开当前页面的 Playwright Dashboard,并等待用户绘制标注。返回带标注的屏幕截图、ARIA 快照和标注列表。
    • 参数:无
    • 只读:true
  • browser_hide_highlight

    • 标题:隐藏元素高亮
    • 描述:移除先前为该元素添加的高亮覆盖层。
    • 参数:
      • element(string,可选):添加高亮时使用的人类可读元素描述;必须与传递给 browser_highlight 的值一致。
      • target(string,可选):页面快照中的精确目标元素引用,或唯一元素选择器
    • 只读:true
  • browser_highlight

    • 标题:高亮元素
    • 描述:在页面元素周围显示持久的高亮覆盖层。
    • 参数:
      • element(string,可选):用于获取与该元素交互权限的人类可读元素描述
      • target(string):页面快照中的精确目标元素引用,或唯一元素选择器
      • style(string,可选):应用于高亮覆盖层的额外内联 CSS,例如“outline: 2px dashed red”。
    • 只读:true
  • browser_resume

    • 标题:继续已暂停的脚本执行
    • 描述:在脚本执行暂停后继续执行。将 step 设为 true 调用时,执行会在下一项操作前再次暂停。
    • 参数:
      • step(boolean,可选):为 true 时,执行会在下一项操作前再次暂停,以便逐步调试。
      • location(string,可选):在特定的 : 处暂停执行,例如“example.spec.ts:42”。
    • 只读:false
  • browser_start_recording

    • 标题:开始录制用户操作
    • 描述:开始将用户在浏览器中执行的操作录制为 Playwright 代码。用户想要手动演示某个流程时使用。用户表示完成后,调用 browser_stop_recording 获取录制的操作。
    • 参数:无
    • 只读:true
  • browser_start_tracing

    • 标题:开始跟踪
    • 描述:开始记录跟踪信息
    • 参数:无
    • 只读:true
- **browser_start_video** - Title:开始录制视频 - Description:开始录制视频 - Parameters: - `filename`(字符串,可选):保存视频的文件名。相对文件名将相对于工作区根目录解析。如果未指定,视频将保存到输出目录,文件名为 `video-{timestamp}.webm`。 - `size`(对象,可选):视频尺寸 - `fps`(数字,可选):视频帧率,单位为帧/秒,默认为 25 - `cursor`(布尔值,可选):渲染动画鼠标光标,使其移动到每个操作点。操作之间会间隔 800ms,为光标移动留出时间。 - Read-only:**true**
  • browser_stop_recording

    • Title:停止录制用户操作
    • Description:停止通过 browser_start_recording 开始的录制,并以 Playwright 代码形式返回录制的操作。
    • Parameters:无
    • Read-only:true
  • browser_stop_tracing

    • Title:停止跟踪
    • Description:停止跟踪录制
    • Parameters:无
    • Read-only:true
  • browser_stop_video

    • Title:停止录制视频
    • Description:停止录制视频
    • Parameters:无
    • Read-only:true
  • browser_video_chapter

    • Title:视频章节
    • Description:在视频录制中添加章节标记。显示带有模糊背景的全屏章节卡片。
    • Parameters:
      • title(字符串):章节标题
      • description(字符串,可选):章节描述
      • duration(数字,可选):章节卡片的显示时长,单位为毫秒
    • Read-only:true
  • browser_video_hide_actions

    • Title:隐藏操作叠加层
    • Description:停止标注在页面上执行的操作。
    • Parameters:无
    • Read-only:true
  • browser_video_show_actions

    • Title:显示操作叠加层
    • Description:通过标注说明后续在页面上执行的操作,标注中会显示操作名称;设置样式后,还会标出操作点并高亮目标元素。适用于录制视频或投屏。
    • Parameters:
      • duration(数字,可选):每条操作标注在屏幕上的显示时长,单位为毫秒。默认为 500。
      • position(字符串,可选):操作标题相对于页面的放置位置。默认为右上角。
      • cursor(字符串,可选):指针操作的光标装饰。"pointer"(默认)会为鼠标指针添加动画,使其从上一个操作点移动到下一个操作点;"none" 会禁用光标装饰。
      • style(对象,可选):操作装饰的样式。
    • Read-only:true
基于坐标(通过 --caps=vision 选择启用)
  • browser_mouse_click_xy

    • Title:单击
    • Description:在指定位置单击鼠标按键
    • Parameters:
      • x(数字):X 坐标
      • y(数字):Y 坐标
      • button(字符串,可选):要单击的按键,默认为左键
      • clickCount(数字,可选):单击次数,默认为 1
      • delay(数字,可选):鼠标按下到抬起之间的等待时间,单位为毫秒,默认为 0
    • Read-only:false
  • browser_mouse_down

    • Title:按下鼠标
    • Description:按下鼠标
    • Parameters:
      • button(字符串,可选):要按下的按键,默认为左键
    • Read-only:false
  • browser_mouse_drag_xy

    • Title:拖动鼠标
    • Description:将鼠标左键拖动到指定位置
    • Parameters:
      • startX(数字):起始 X 坐标
      • startY(数字):起始 Y 坐标
      • endX(数字):结束 X 坐标
      • endY(数字):结束 Y 坐标
    • Read-only:false
  • browser_mouse_move_xy

    • Title:移动鼠标
    • Description:将鼠标移动到指定位置
    • Parameters:
      • x(数字):X 坐标
      • y(数字):Y 坐标
    • Read-only:false
  • browser_mouse_up

    • 标题:按下鼠标按键
    • 描述:按下鼠标按键
    • 参数:
      • button (string, optional):要按下的按键,默认为左键
    • 只读:false
  • browser_mouse_wheel

    • 标题:滚动鼠标滚轮
    • 描述:滚动鼠标滚轮
    • 参数:
      • deltaX (number):X 轴偏移量
      • deltaY (number):Y 轴偏移量
    • 只读:false
生成 PDF(通过 --caps=pdf 选择启用)
  • browser_pdf_save
    • 标题:另存为 PDF
    • 描述:将页面另存为 PDF
    • 参数:
      • filename (string, optional):要保存 PDF 的文件名。相对文件名将相对于工作区根目录解析。如果未指定,PDF 将保存到输出目录,文件名为 page-{timestamp}.pdf。
    • 只读:true
测试断言(通过 --caps=testing 选择启用)
  • browser_generate_locator

    • 标题:为元素创建定位器
    • 描述:为给定元素生成定位器,以便在测试中使用
    • 参数:
      • element (string, optional):对元素的易读描述,用于获取与该元素交互的权限
      • target (string):页面快照中该元素的确切引用,或唯一的元素选择器
    • 只读:true
  • browser_verify_element_visible

    • 标题:验证元素可见
    • 描述:验证元素在页面上可见
    • 参数:
      • role (string):元素的 ROLE。可在快照中找到,格式如下:- {ROLE} "Accessible Name":
      • accessibleName (string):元素的 ACCESSIBLE_NAME。可在快照中找到,格式如下:- role "{ACCESSIBLE_NAME}"
    • 只读:false
  • browser_verify_list_visible

    • 标题:验证列表可见
    • 描述:验证列表在页面上可见
    • 参数:
      • element (string):对列表的易读描述
      • target (string):指向该列表的确切目标元素引用
      • items (array):要验证的项目
    • 只读:false
  • browser_verify_text_visible

    • 标题:验证文本可见
    • 描述:验证文本在页面上可见。如果可行,优先使用 browser_verify_element_visible。
    • 参数:
      • text (string):要验证的 TEXT。可在快照中找到,格式如下:- role "Accessible Name": {TEXT} 或 - text: {TEXT}
    • 只读:false
  • browser_verify_value

    • 标题:验证值
    • 描述:验证元素值
    • 参数:
      • type (string):元素类型
      • element (string):对元素的易读描述
      • target (string):页面快照中该元素的确切引用
      • value (string):要验证的值。对于复选框,请使用 "true" 或 "false"。
    • 只读:false

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。