Playwright MCP Claude Code 配置教程:一步步上手
一条命令在 Claude Code 中配置 Playwright MCP,然后调整 headless、browser、isolated 和 caps 等参数,试用示例提示词,并解决最常见的报错。
一行命令安装
要在 Claude Code 中使用 Playwright MCP,运行 claude mcp add playwright npx @playwright/mcp@latest,启动 claude,然后在 /mcp 中确认 playwright 显示为已连接。从此以后,Claude 就能通过微软官方的 Playwright MCP 服务器打开真实浏览器,点击、输入、读取页面并截图。
这条命令直接来自 Playwright MCP README。本文剩下的部分讲的是跑通之后马上会遇到的选择:装在哪个作用域、有头还是无头、持久化还是隔离的浏览器配置文件、额外能力,以及浏览器启动不了时怎么办。
Playwright MCP 到底做了什么
Playwright MCP 把浏览器自动化封装成 MCP 工具,比如 browser_navigate、browser_click、browser_type、browser_fill_form、browser_snapshot 和 browser_take_screenshot。它不把截图发给模型,而是返回无障碍快照(accessibility snapshot):一棵结构化的页面元素树,带有 Claude 可以点击或填写的引用。因此它速度快,比基于视觉的方案更省,而且对操作哪个元素是确定的。
在 Claude Code 中的典型用法:
- 检查刚写好的功能在浏览器里是否真的能用。
- 按工单描述一步步复现 UI 缺陷。
- 先探索网站,再为它编写 Playwright 测试。
- 填写表单,或从依赖 JavaScript 的页面中提取数据。
前置条件
- Node.js 18 或更高版本(README 中写明的要求)。用
node --version检查。 - 已安装并登录 Claude Code。
- 一个 Playwright 能驱动的浏览器。可以用
--browser选择chrome、firefox、webkit或msedge。
第 1 步:添加服务器
最快:local 作用域
claude mcp add playwright npx @playwright/mcp@latest
这会把服务器保存到默认的 local 作用域,只对你在当前项目中可用。
所有项目可用:user 作用域
claude mcp add --scope user playwright -- npx @playwright/mcp@latest
给 Playwright MCP 本身传参数时,一定要把启动命令放在 -- 之后,这样 Claude Code 就不会把 --headless 之类的参数当成自己的选项。
与团队共享:project 作用域
claude mcp add --scope project playwright -- npx @playwright/mcp@latest
这会在项目根目录写入一个可以提交的 .mcp.json:
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": ["@playwright/mcp@latest"]
}
}
}
队友第一次在仓库中运行 claude 时会被要求批准该服务器。作用域和批准机制的整体说明,见我们的 Claude Code MCP 指南。
第 2 步:验证连接
claude mcp list
你应该看到 playwright 显示 ✔ Connected。在会话中,/mcp 会显示同样的状态以及工具列表。如果显示 ✘ Failed to connect,直接跳到下面的故障排查表。
第 3 步:运行第一个提示词
第一次使用时要明确点名工具,否则 Claude 可能会改用 shell 写一个 Playwright 脚本去跑:
Use the playwright MCP to open https://mcp.so, search for "github",
and tell me the first three results.
浏览器窗口会弹出来(服务器默认是有头模式),你可以看着 Claude 操作页面。除非你已允许,Claude Code 在使用每个新工具前都会请求权限。
常用参数
所有参数都写在启动命令的包名之后,或写进 .mcp.json 的 args 数组。每个参数也都有对应的 PLAYWRIGHT_MCP_* 环境变量。
| 参数 | 作用 | 适用场景 |
|---|---|---|
--headless | 无窗口运行浏览器(默认有头) | SSH 会话、CI,或不想弹窗时 |
--browser | 选择 chrome、firefox、webkit 或 msedge | 跨浏览器检查,或没装 Chrome 时 |
--isolated | 配置文件只保存在内存中,不写入磁盘 | 干净的测试会话、并行运行多个客户端 |
--storage-state | 从文件加载 Cookie 和本地存储到隔离会话 | 不用持久化配置文件也能以登录状态开始 |
--user-data-dir | 使用指定的配置文件目录 | 把登录状态保存在一个已知位置 |
--caps | 启用额外工具组:vision、pdf、devtools | 坐标点击、保存 PDF、追踪和录屏 |
--device | 模拟设备,比如 "iPhone 15" | 检查移动端布局 |
--viewport-size | 设置视口,比如 1280x720 | 截图尺寸保持一致 |
--output-dir | 自动命名文件(如截图)的保存位置 | 别让产物堆在仓库根目录 |
--allowed-origins | 用分号分隔的、允许浏览器请求的源列表 | 减少误访问(不是安全边界) |
--extension | 通过 Playwright 扩展连接你正在运行的 Chrome 或 Edge | 复用你真实的已登录标签页 |
无头、隔离的 Firefox 配置如下:
claude mcp add playwright -- npx @playwright/mcp@latest \
--headless --browser firefox --isolated
在 .mcp.json 中写法相同,这里还启用了 PDF 和 vision 工具:
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": [
"@playwright/mcp@latest",
"--headless",
"--isolated",
"--caps=vision,pdf"
]
}
}
}
能力详解
- vision 增加基于坐标的鼠标工具,适合 canvas 应用,或在无障碍树中显示不佳的元素。
- pdf 增加
browser_pdf_save。 - devtools 增加追踪、录屏和元素高亮。
README 还列出了网络模拟、Cookie 与存储、配置以及测试断言等可选工具组。只启用你需要的:每多一个工具,Claude 就要多考虑一份定义。
配置文件与登录
Playwright MCP 默认使用持久化配置文件,所以登录状态会跨会话保留。配置文件按项目分别存储:
- macOS:
~/Library/Caches/ms-playwright/mcp-后接浏览器渠道和工作区哈希 - Linux:
~/.cache/ms-playwright/mcp-后接浏览器渠道和工作区哈希 - Windows:
%USERPROFILE%\AppData\Local\ms-playwright\mcp-后接浏览器渠道和工作区哈希
删除该文件夹即可退出所有登录。一个持久化配置文件同一时间只能被一个浏览器使用,所以如果你在同一个项目的两个终端里运行 Claude Code,第二个要加 --isolated 或使用不同的 --user-data-dir。
如果任务需要用你真实的账号,--extension 模式会连接你自己 Chrome 或 Edge 中的标签页,而不是另开浏览器。请慎重使用:Claude 在浏览器里能做的任何事,都是以你的身份做的。在让 Agent 操作已登录的生产账号之前,先读一读 MCP 安全最佳实践。
好用的示例提示词
- 「Use playwright mcp to open http://localhost:3000,用测试邮箱注册,告诉我欢迎页是否能正常加载且没有控制台错误。」
- 「打开定价页,分别以 1280x720 和 iPhone 视口截图,列出布局差异。」
- 「在浏览器中按这份缺陷报告一步步复现,停在第一个失败的步骤。」
- 「先探索结账流程,再在 tests/checkout.spec.ts 中写一个覆盖正常路径的 Playwright 测试。」
- 「用示例数据填写联系表单并提交,报告网络响应。」
故障排查
| 现象 | 可能原因 | 解决方法 |
|---|---|---|
添加后立刻 ✘ Failed to connect | Node.js 低于 18,或 npx 不在 PATH 中 | 升级 Node,并在终端运行 npx @playwright/mcp@latest --help |
| 浏览器启动失败,提示未安装 | 所选浏览器缺失 | 安装它,例如 npx playwright install chrome,或用 --browser 换一个 |
| 首次启动超时 | 首次 npx 下载较慢 | 用 MCP_TIMEOUT=60000 claude 启动,或先运行一次 npx @playwright/mcp@latest --help 预热缓存 |
| 报错说配置文件已被占用 | 两个客户端共用一个持久化配置文件 | 加上 --isolated 或单独的 --user-data-dir |
| 在远程机器或 CI 上没反应 | 有头浏览器没有显示器 | 加上 --headless |
| Claude 写脚本而不是用浏览器 | 它没有选择 MCP 工具 | 在提示词中写明「use the playwright MCP」 |
| 大页面出现输出过大警告 | 页面快照太大 | 调大 MAX_MCP_OUTPUT_TOKENS,或让 Claude 只关注某个区域 |
想确切看到服务器暴露了哪些工具、返回了什么,可以把它连到 MCP Inspector。
改用 Docker 运行
README 还提供了容器镜像,目前只支持无头 Chromium:
{
"mcpServers": {
"playwright": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"--init",
"--pull=always",
"mcr.microsoft.com/playwright/mcp"
]
}
}
}
如果你已经通过网关统一管理服务器,参见 Docker MCP Gateway 配置。
Playwright MCP 与 Playwright CLI
Playwright 团队坦言,编码 Agent 有时用 Playwright CLI 加 skills 效果更好,因为简短的 CLI 调用避免了把大量工具定义和无障碍树塞进上下文。当 Claude 需要保持浏览器打开、一步步推理页面结构时,比如探索式测试或自愈测试,MCP 仍然更合适。在 Claude Code 中,工具搜索本来就会把用不到的工具定义挡在上下文之外,所以交互式浏览器任务默认用 MCP 没问题;长时间、高频率的批量运行可以考虑 CLI。
如果你只需要一个更简单的无头抓取工具,Puppeteer MCP 服务器也是一个选择,但 Playwright MCP 是微软官方的跨浏览器方案。
下一步
Playwright MCP 跑通后,可以搭配能形成闭环的服务器:用问题跟踪工具读取缺陷报告,或用 GitHub MCP 服务器提交带修复和新测试的 PR。更多服务器可以浏览 MCP 服务器目录,或阅读完整的 Claude Code MCP 指南来管理你添加的一切。
常见问题
如何在 Claude Code 中安装 Playwright MCP?
- 在终端运行 'claude mcp add playwright npx @playwright/mcp@latest',启动 Claude Code,并在 /mcp 中确认 playwright 服务器显示为已连接。需要 Node.js 18 或更高版本。
如何在 Claude Code 中以无头模式运行 Playwright MCP?
- 在包名后加上 --headless 参数,例如 'claude mcp add playwright -- npx @playwright/mcp@latest --headless'。浏览器默认是有头模式。
Playwright MCP 会在会话之间保留登录状态吗?
- 会。它默认使用按项目存储的持久化浏览器配置文件,所以重启后登录状态仍在。想每次都用全新的内存配置文件,用 --isolated;想加载已保存的 Cookie,用 --storage-state。
为什么 Claude 写了 Playwright 脚本,而不是直接用浏览器?
- Claude 有时会选择 shell 而不是 MCP 工具。在提示词里写明「use the playwright MCP」,并在 /mcp 中确认服务器已连接。