원클릭으로
playwriter-mcp
ONLY apply when user EXPLICITLY mentions "Playwriter". Default browser automation is ms-playwright-mcp.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
ONLY apply when user EXPLICITLY mentions "Playwriter". Default browser automation is ms-playwright-mcp.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Provides coding style rules for Python and PowerShell. Apply when writing, editing, reviewing, or debugging code.
Apply when conducting deep research on technologies, APIs, frameworks, or other software development topics requiring systematic investigation
Apply when doing planning for long-running tasks in sessions on top level
Apply when committing code, writing commit messages, or configuring .gitignore
Apply when working with GitHub repositories, issues, PRs, or authentication
Apply when interacting with Google services (Gmail, Calendar, Drive, Tasks) via gogcli CLI
| name | playwriter-mcp |
| description | ONLY apply when user EXPLICITLY mentions "Playwriter". Default browser automation is ms-playwright-mcp. |
ACTIVATION: Only use when user explicitly says "Playwriter". Default browser MCP is ms-playwright-mcp by Microsoft.
Rules and usage for Playwriter - Chrome extension + CLI/MCP for real browser automation.
Core
Workflows
Reference
Use Playwriter when:
Use Playwright MCP when:
User wants to...
snapshot({ page })getCDPSession, createDebugger, breakpointsstartRecording / stopRecordingTechnical tasks...
snapshot({ page }) or screenshotWithAccessibilityLabels({ page })page.screenshot({ path: '...', type: 'jpeg' })page.locator('aria-ref=e5').click()state.varName = ...page.on('response', ...)startRecording / stopRecording-e to prevent bash interpretationbrowser.close() - it closes YOUR Chromestate.varName to persist data between calls1500 for simple ops, 3000 for screenshots.waitForSelector instead.waitUntil: 'load' never fires on SharePoint/dynamic sites. Use { waitUntil: 'domcontentloaded' }.# 1. Install CLI
npm i -g playwriter
# 2. Create session
playwriter session new # outputs ID (e.g., 1)
# 3. Navigate
playwriter -s 1 -e 'await page.goto("https://example.com")'
# 4. Get accessibility snapshot
playwriter -s 1 -e 'console.log(await snapshot({ page }))'
# 5. Click element by ref
playwriter -s 1 -e 'await page.locator("aria-ref=e5").click()'
playwriter session new # Create sandbox, get ID
playwriter session list # Show sessions + state keys
playwriter session reset <id> # Fix connection issues
playwriter -s <id> -e '<code>' # Run Playwright code in session
Variables in scope: page, context, state, require
playwriter -s 1 -e 'await page.goto("https://example.com")'
playwriter -s 1 -e 'await page.screenshot({ path: "screenshot.png" })'
playwriter -s 1 -e 'await screenshotWithAccessibilityLabels({ page })'
# Returns screenshot with Vimium-style labels (aria-ref=e1, e2, etc.)
playwriter -s 1 -e 'await page.locator("aria-ref=e5").click()'
playwriter -s 1 -e "state.users = await page.$$eval('.user', els => els.map(e => e.textContent))"
playwriter -s 1 -e "console.log(state.users)"
playwriter -s 1 -e 'state.myPage = await context.newPage(); await state.myPage.goto("https://example.com")'
playwriter -s 1 -e "state.requests = []; page.on('response', r => { if (r.url().includes('/api/')) state.requests.push(r.url()) })"
playwriter -s 1 -e "await Promise.all([page.waitForResponse(r => r.url().includes('/api/')), page.click('button')])"
playwriter -s 1 -e "console.log(state.requests)"
# Basic screenshot
playwriter -s 1 -e 'await page.screenshot({ path: "screenshot.png" })'
# Full page
playwriter -s 1 -e 'await page.screenshot({ path: "full.png", fullPage: true })'
# JPEG (smaller)
playwriter -s 1 -e 'await page.screenshot({ path: "shot.jpg", type: "jpeg", quality: 80 })'
Vimium-style labels for AI element identification:
playwriter -s 1 -e 'await screenshotWithAccessibilityLabels({ page })'
playwriter -s 1 -e 'await page.locator("aria-ref=e5").click()'
Color coding:
playwriter -s 1 -e 'console.log(await snapshot({ page }))'
# Returns accessibility tree with aria-ref selectors
# Start recording
playwriter -s 1 -e 'await startRecording({ page, outputPath: "./recording.mp4", frameRate: 30 })'
# Navigate, interact...
playwriter -s 1 -e 'await page.click("a")'
# Stop and save
playwriter -s 1 -e 'await stopRecording({ page })'
Recording survives page navigation (uses chrome.tabCapture).
Skill-based (recommended):
npx -y skills add remorses/playwriter
Direct MCP config:
{
"mcpServers": {
"playwriter": {
"command": "npx",
"args": ["playwriter@latest"]
}
}
}
playwriter logfile # Shows path to ~/.playwriter/relay-server.log
Restart Chrome (known Chrome bug in chrome.debugger API).
playwriter session reset <id>playwriter session reset <id>
localhost:19988 only (any local process can connect; use --token for auth)See SETUP.md for installation details.