playwright-mcp by darraghh1/my-claude-setup
npx skills add https://github.com/darraghh1/my-claude-setup --skill playwright-mcp您是使用 Playwright MCP 服务器进行实时浏览器交互的专家。此技能教您通过直接控制浏览器来导航页面、检查元素、填写表单和调试 Web 用户界面。
MCP 工具是直接工具调用——就像 Read、Grep 或 Bash 一样。它们不是 CLI 命令。
正确——直接调用工具:
Tool: mcp__playwright__browser_navigate
Parameters: { "url": "http://localhost:3010" }
错误——不要使用 shell 命令:
Bash: claude mcp call playwright browser_navigate ... # 这不起作用
所有 Playwright MCP 工具都使用 mcp__playwright__ 前缀。
返回一个包含每个交互元素 值的无障碍功能树。在点击、输入或悬停之前,您进行快照——所有交互工具都需要 值。
广告位招租
在这里展示您的产品或服务
触达数万 AI 开发者,精准高效
browser_snapshotrefref| 工具 | 输出大小 | 备注 |
|---|---|---|
browser_snapshot | 中到大型 | 完整的无障碍功能树——随页面复杂度增加 |
browser_take_screenshot | 大型 | Base64 图像——谨慎使用 |
browser_console_messages | 可变 | 在日志繁多的应用上可能非常大 |
browser_network_requests | 可变 | 在 API 密集的页面上可能非常大 |
browser_navigate | 小型 | 仅返回页面标题 |
browser_click | 小型 | 点击后返回快照 |
browser_type | 小型 | 输入后返回快照 |
要理解页面结构,优先使用 browser_snapshot 而非 browser_take_screenshot。截图仅用于视觉验证。
触发条件: 用户说“打开这个页面”、“页面上有什么?”、“检查用户界面”、“检查布局”
导航到页面:
browser_navigate({ url: "http://localhost:3010/home/team-slug/settings" })
获取页面结构(在交互前始终执行此操作):
browser_snapshot → 包含所有元素 ref 值的无障碍功能树
分析快照: 通过 ref 值识别交互元素(按钮、链接、输入框)。向用户报告页面结构。
| 需求 | 使用 |
|---|---|
| 理解页面结构,查找元素 | browser_snapshot(结构化,包含 ref 值) |
| 视觉外观、布局错误、CSS 问题 | browser_take_screenshot(视觉图像) |
| 结构和外观都需要 | 先快照,如需视觉检查再截图 |
触发条件: 用户说“填写表单”、“提交登录”、“在字段中输入”、“选择一个选项”
快照以查找表单字段:
browser_snapshot → 识别输入框的 ref 及其标签
填写字段(根据复杂度选择):
browser_type({ ref: "input-ref", text: "value" })browser_fill_form({ fields: [{ ref: "ref1", value: "val1" }, { ref: "ref2", value: "val2" }] })browser_select_option({ ref: "select-ref", values: ["option-value"] })提交表单:
browser_click({ ref: "submit-button-ref" })
验证结果:
browser_snapshot → 检查成功消息、错误状态或导航
browser_fill_form 比多次调用 browser_type 更快browser_press_key({ key: "Enter" }) 作为点击提交的替代方案browser_wait_for({ text: "Success" }) 然后快照触发条件: 用户说“调试页面”、“检查错误”、“发生了哪些 API 调用?”、“为什么它不工作?”
导航到问题页面:
browser_navigate({ url: "..." })
并行运行这些(它们是独立的):
browser_console_messages → JavaScript 错误、警告、日志
browser_network_requests → API 调用、失败的请求、状态码
对页面进行快照:
browser_snapshot → 当前用户界面状态、错误消息、加载状态
进一步调查:
browser_evaluate({ expression: "document.querySelectorAll('.error').length" }) → 运行自定义 JavaScript
触发条件: 用户说“完成整个流程”、“测试注册过程”、“逐步完成向导”
导航到起始页面:
browser_navigate({ url: "..." })
对于每个步骤:
browser_snapshot → 查找下一个操作
browser_click({ ref: "..." }) 或 browser_type({ ref: "...", text: "..." })
browser_wait_for({ text: "expected content" }) → 如果页面异步加载
如果出现对话框,处理它们:
browser_handle_dialog({ accept: true }) → 确认/警告/提示
如果需要返回:
browser_navigate_back
| 工具 | 目的 | 参数 |
|---|---|---|
browser_navigate | 跳转到 URL | url(必需) |
browser_navigate_back | 后退 | 无 |
browser_wait_for | 等待文本或时间 | text 或 timeout(毫秒) |
browser_tabs | 列出/切换标签页 | 无或 index 用于切换 |
| 工具 | 目的 | 参数 |
|---|---|---|
browser_snapshot | 包含 ref 的无障碍功能树 | 无 |
browser_take_screenshot | 视觉截图 | 无 |
browser_console_messages | JavaScript 控制台输出 | 无 |
browser_network_requests | 网络活动 | 无 |
| 工具 | 目的 | 参数 |
|---|---|---|
browser_click | 点击元素 | ref(来自快照) |
browser_type | 输入文本 | ref, text |
browser_fill_form | 填写多个字段 | fields 数组,包含 { ref, value } |
browser_select_option | 选择下拉菜单 | ref, values 数组 |
browser_hover | 悬停元素 | ref |
browser_drag | 拖放 | startRef, endRef |
browser_press_key | 键盘输入 | key(例如 "Enter"、"Tab") |
browser_file_upload | 上传文件 | ref, paths 数组 |
browser_handle_dialog | 确认/关闭对话框 | accept 布尔值 |
| 工具 | 目的 | 参数 |
|---|---|---|
browser_evaluate | 运行 JavaScript | expression |
browser_resize | 调整视口大小 | width, height |
browser_close | 关闭页面 | 无 |
browser_install | 安装浏览器 | 无 |
browser_run_code | 运行 Playwright 代码 | code 字符串 |
Playwright MCP 服务器管理其自己的浏览器实例。如果工具失败:
browser_install 以确保浏览器二进制文件可用browser_navigate 到一个简单的 URL——这可能会初始化浏览器包含异步内容的页面可能尚未渲染:
browser_wait_for({ text: "expected content" })browser_wait_for({ timeout: 2000 }) 进行基于时间的等待MCP 浏览器无法访问需要网络隧道的代理或内部域名。对于本地 Supabase,请直接使用 http://127.0.0.1:54321。
复杂的页面会产生庞大的无障碍功能树。如果输出过大:
browser_evaluate 查询特定元素每周安装量
30
仓库
GitHub 星标数
39
首次出现
2026年2月19日
安全审计
安装于
opencode27
github-copilot27
codex27
kimi-cli27
gemini-cli27
amp27
You are an expert at using the Playwright MCP server for live browser interaction. This skill teaches you to navigate pages, inspect elements, fill forms, and debug web UIs through direct browser control.
MCP tools are direct tool calls — exactly like Read, Grep, or Bash. They are NOT CLI commands.
CORRECT — call the tool directly:
Tool: mcp__playwright__browser_navigate
Parameters: { "url": "http://localhost:3010" }
WRONG — do NOT shell out:
Bash: claude mcp call playwright browser_navigate ... # This does not work
All Playwright MCP tools use the mcp__playwright__ prefix.
browser_snapshot returns an accessibility tree with ref values for every interactive element. You must snapshot before clicking, typing, or hovering — the ref values are required for all interaction tools.
| Tool | Output Size | Notes |
|---|---|---|
browser_snapshot | Medium-Large | Full accessibility tree — scales with page complexity |
browser_take_screenshot | Large | Base64 image — use sparingly |
browser_console_messages | Variable | Can be very large on noisy apps |
browser_network_requests | Variable | Can be very large on API-heavy pages |
browser_navigate |
Prefer browser_snapshot over browser_take_screenshot for understanding page structure. Screenshots are for visual verification only.
Trigger: User says "open this page", "what's on the page?", "inspect the UI", "check the layout"
Navigate to the page:
browser_navigate({ url: "http://localhost:3010/home/team-slug/settings" })
Get page structure (always do this before interacting):
browser_snapshot → accessibility tree with ref values for all elements
Analyze the snapshot: Identify interactive elements (buttons, links, inputs) by their ref values. Report page structure to user.
| Need | Use |
|---|---|
| Understand page structure, find elements | browser_snapshot (structured, has ref values) |
| Visual appearance, layout bugs, CSS issues | browser_take_screenshot (visual image) |
| Both structure and appearance | Snapshot first, then screenshot if visual check needed |
Trigger: User says "fill out the form", "submit the login", "type in the field", "select an option"
Snapshot to find form fields:
browser_snapshot → identify input refs and their labels
Fill fields (choose based on complexity):
browser_type({ ref: "input-ref", text: "value" })browser_fill_form({ fields: [{ ref: "ref1", value: "val1" }, { ref: "ref2", value: "val2" }] })browser_select_option({ ref: "select-ref", values: ["option-value"] })Submit the form:
browser_click({ ref: "submit-button-ref" })
Verify result:
browser_snapshot → check for success message, error states, or navigation
browser_fill_form is faster than multiple browser_type calls for multi-field formsbrowser_press_key({ key: "Enter" }) as alternative to clicking submitbrowser_wait_for({ text: "Success" }) then snapshotTrigger: User says "debug the page", "check for errors", "what API calls are happening?", "why isn't it working?"
Navigate to the problematic page:
browser_navigate({ url: "..." })
Run these in parallel (they are independent):
browser_console_messages → JavaScript errors, warnings, logs
browser_network_requests → API calls, failed requests, status codes
Snapshot the page:
browser_snapshot → current UI state, error messages, loading states
Investigate further:
browser_evaluate({ expression: "document.querySelectorAll('.error').length" }) → run custom JS
Trigger: User says "go through the flow", "test the signup process", "walk through the wizard"
Navigate to starting page:
browser_navigate({ url: "..." })
For each step:
browser_snapshot → find the next action
browser_click({ ref: "..." }) or browser_type({ ref: "...", text: "..." })
browser_wait_for({ text: "expected content" }) → if page loads async
Handle dialogs if they appear:
browser_handle_dialog({ accept: true }) → confirm/alert/prompt
Go back if needed:
browser_navigate_back
| Tool | Purpose | Parameters |
|---|---|---|
browser_navigate | Go to URL | url (required) |
browser_navigate_back | Go back | None |
browser_wait_for | Wait for text or time | text or timeout (ms) |
browser_tabs |
| Tool | Purpose | Parameters |
|---|---|---|
browser_snapshot | Accessibility tree with refs | None |
browser_take_screenshot | Visual screenshot | None |
browser_console_messages | JS console output | None |
browser_network_requests | Network activity | None |
| Tool | Purpose | Parameters |
|---|---|---|
browser_click | Click element | ref (from snapshot) |
browser_type | Type text | ref, text |
browser_fill_form | Fill multiple fields | fields array of |
| Tool | Purpose | Parameters |
|---|---|---|
browser_evaluate | Run JavaScript | expression |
browser_resize | Resize viewport | width, height |
browser_close | Close page | None |
browser_install |
The Playwright MCP server manages its own browser instance. If tools fail:
browser_install to ensure the browser binary is availablebrowser_navigate to a simple URL — this may initialize the browserPages with async content may not have rendered yet:
browser_wait_for({ text: "expected content" }) before snapshotbrowser_wait_for({ timeout: 2000 }) for time-based waitingThe MCP browser cannot reach proxied or internal domains that require network tunnels. Use http://127.0.0.1:54321 directly for local Supabase.
Complex pages produce large accessibility trees. If output is too large:
browser_evaluate to query specific elements insteadWeekly Installs
30
Repository
GitHub Stars
39
First Seen
Feb 19, 2026
Security Audits
Gen Agent Trust HubFailSocketPassSnykFail
Installed on
opencode27
github-copilot27
codex27
kimi-cli27
gemini-cli27
amp27
GitHub Actions 官方文档查询助手 - 精准解答 CI/CD 工作流问题
45,200 周安装
| Small |
| Returns page title only |
browser_click | Small | Returns snapshot after click |
browser_type | Small | Returns snapshot after typing |
| List/switch tabs |
None or index to switch |
{ ref, value }browser_select_option | Select dropdown | ref, values array |
browser_hover | Hover element | ref |
browser_drag | Drag and drop | startRef, endRef |
browser_press_key | Keyboard input | key (e.g., "Enter", "Tab") |
browser_file_upload | Upload file | ref, paths array |
browser_handle_dialog | Confirm/dismiss dialog | accept boolean |
| Install browser |
| None |
browser_run_code | Run Playwright code | code string |