Playwright Mcp logo

Playwright Mcp

Community
Hainrixz
playwright-mcp

Live browser interaction via Playwright MCP — navigate pages, click buttons, fill forms, take screenshots.

Overview

PublisherHainrixz
Repositoryeditor-pro-max
Skill nameplaywright-mcp
Stars
276
Forks
125
Bundled files
Instructions only
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • Self-contained

    Everything the model needs lives in the instructions — no extra files to sync.

  • Open source

    Published by Hainrixz on GitHub. Read the source before you install it.

Installation

Install the Playwright Mcp AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/Hainrixz/editor-pro-max/tree/main/.agents/skills/playwright-mcp
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/Hainrixz/editor-pro-max.git /tmp/editor-pro-max
mkdir -p .claude/skills
cp -r /tmp/editor-pro-max/.agents/skills/playwright-mcp .claude/skills/playwright-mcp
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Playwright Mcp in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Playwright Mcp on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Playwright Mcp is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

Playwright MCP Browser Automation

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.

Critical: These Are Direct Tool Calls

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.

Critical: Always Snapshot Before Interacting

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.

Critical: Output Size Awareness

ToolOutput SizeNotes
browser_snapshotMedium-LargeFull accessibility tree — scales with page complexity
browser_take_screenshotLargeBase64 image — use sparingly
browser_console_messagesVariableCan be very large on noisy apps
browser_network_requestsVariableCan be very large on API-heavy pages
browser_navigateSmallReturns page title only
browser_clickSmallReturns snapshot after click
browser_typeSmallReturns snapshot after typing

Prefer browser_snapshot over browser_take_screenshot for understanding page structure. Screenshots are for visual verification only.

Workflow 1: Navigate & Inspect

Trigger: User says "open this page", "what's on the page?", "inspect the UI", "check the layout"

Steps

  1. Navigate to the page:

    browser_navigate({ url: "http://localhost:3010/home/team-slug/settings" })
  2. Get page structure (always do this before interacting):

    browser_snapshot → accessibility tree with ref values for all elements
  3. Analyze the snapshot: Identify interactive elements (buttons, links, inputs) by their ref values. Report page structure to user.

Decision: Snapshot vs Screenshot

NeedUse
Understand page structure, find elementsbrowser_snapshot (structured, has ref values)
Visual appearance, layout bugs, CSS issuesbrowser_take_screenshot (visual image)
Both structure and appearanceSnapshot first, then screenshot if visual check needed

Workflow 2: Form Interaction

Trigger: User says "fill out the form", "submit the login", "type in the field", "select an option"

Steps

  1. Snapshot to find form fields:

    browser_snapshot → identify input refs and their labels
  2. Fill fields (choose based on complexity):

    • Single field: browser_type({ ref: "input-ref", text: "value" })
    • Multiple fields: browser_fill_form({ fields: [{ ref: "ref1", value: "val1" }, { ref: "ref2", value: "val2" }] })
    • Dropdown: browser_select_option({ ref: "select-ref", values: ["option-value"] })
  3. Submit the form:

    browser_click({ ref: "submit-button-ref" })
  4. Verify result:

    browser_snapshot → check for success message, error states, or navigation

Key Patterns

  • browser_fill_form is faster than multiple browser_type calls for multi-field forms
  • Use browser_press_key({ key: "Enter" }) as alternative to clicking submit
  • After submission, wait if needed: browser_wait_for({ text: "Success" }) then snapshot

Workflow 3: Debug Investigation

Trigger: User says "debug the page", "check for errors", "what API calls are happening?", "why isn't it working?"

Steps

  1. Navigate to the problematic page:

    browser_navigate({ url: "..." })
  2. Run these in parallel (they are independent):

    browser_console_messages → JavaScript errors, warnings, logs
    browser_network_requests → API calls, failed requests, status codes
  3. Snapshot the page:

    browser_snapshot → current UI state, error messages, loading states
  4. Investigate further:

    browser_evaluate({ expression: "document.querySelectorAll('.error').length" }) → run custom JS

Workflow 4: Multi-Step Navigation

Trigger: User says "go through the flow", "test the signup process", "walk through the wizard"

Steps

  1. Navigate to starting page:

    browser_navigate({ url: "..." })
  2. 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
  3. Handle dialogs if they appear:

    browser_handle_dialog({ accept: true }) → confirm/alert/prompt
  4. Go back if needed:

    browser_navigate_back

Tool Reference

Navigation

ToolPurposeParameters
browser_navigateGo to URLurl (required)
browser_navigate_backGo backNone
browser_wait_forWait for text or timetext or timeout (ms)
browser_tabsList/switch tabsNone or index to switch

Inspection

ToolPurposeParameters
browser_snapshotAccessibility tree with refsNone
browser_take_screenshotVisual screenshotNone
browser_console_messagesJS console outputNone
browser_network_requestsNetwork activityNone

Interaction

ToolPurposeParameters
browser_clickClick elementref (from snapshot)
browser_typeType textref, text
browser_fill_formFill multiple fieldsfields array of { ref, value }
browser_select_optionSelect dropdownref, values array
browser_hoverHover elementref
browser_dragDrag and dropstartRef, endRef
browser_press_keyKeyboard inputkey (e.g., "Enter", "Tab")
browser_file_uploadUpload fileref, paths array
browser_handle_dialogConfirm/dismiss dialogaccept boolean

Advanced

ToolPurposeParameters
browser_evaluateRun JavaScriptexpression
browser_resizeResize viewportwidth, height
browser_closeClose pageNone
browser_installInstall browserNone
browser_run_codeRun Playwright codecode string

Troubleshooting

"No browser running" or Connection Errors

The Playwright MCP server manages its own browser instance. If tools fail:

  1. Try browser_install to ensure the browser binary is available
  2. Try browser_navigate to a simple URL — this may initialize the browser

Elements Not Found After Navigation

Pages with async content may not have rendered yet:

  1. Use browser_wait_for({ text: "expected content" }) before snapshot
  2. Use browser_wait_for({ timeout: 2000 }) for time-based waiting

Proxied or Internal Domains

The MCP browser cannot reach proxied or internal domains that require network tunnels. Use http://127.0.0.1:54321 directly for local Supabase.

Snapshot Returns Very Large Output

Complex pages produce large accessibility trees. If output is too large:

  1. Navigate to a specific sub-page rather than the full app
  2. Use browser_evaluate to query specific elements instead

Frequently asked questions

What does the Playwright Mcp AI skill do?

Live browser interaction via Playwright MCP — navigate pages, click buttons, fill forms, take screenshots.

Why use Playwright Mcp on TypingMind?

Because you install it once and use it with any model. Playwright Mcp is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Playwright Mcp in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/Hainrixz/editor-pro-max/tree/main/.agents/skills/playwright-mcp. TypingMind reads its SKILL.md and installs it as a skill you can enable per chat.

Which AI models can use Playwright Mcp?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Playwright Mcp?

As many as you like. As long as a model supports skills, you can use Playwright Mcp with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Playwright Mcp AI skill free?

It is published on GitHub by Hainrixz. Check the repository for licensing terms. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇