Playwright MCP

공식

공식 Playwright MCP 서버로, Claude, Cursor 및 기타 AI 에이전트에서 브라우저 자동화, 페이지 검사, 스크린샷 및 웹 상호작용을 지원합니다.

Playwright MCP(으)로 무엇을 할 수 있나요?

  • 접근성 스냅샷을 통한 브라우저 자동화 — AI가 구조화된 접근성 데이터를 사용하여 페이지를 탐색하고 요소와 상호작용하도록 요청하세요. 스크린샷이 필요 없습니다.
  • 지속적인 브라우징 세션 — 영구 프로필로 대화 간 로그인 상태를 유지하거나, 깨끗한 테스트를 위해 격리된 세션을 사용하세요.
  • 다중 브라우저 지원 — Chromium, Firefox 또는 WebKit에서 작업을 자동화하고, 헤드리스 모드 및 기기 에뮬레이션 옵션을 제공합니다.
  • 사용자 지정 브라우저 구성 — 테스트 요구에 맞게 뷰포트 크기, 사용자 에이전트, 프록시 설정 및 권한을 구성하세요.
  • 브라우저 확장 프로그램 통합 — 기존 Chrome 또는 Edge 브라우저에 연결하여 현재 탭과 로그인된 세션을 활용하세요.

문서

Playwright MCP

Playwright를 사용하여 브라우저 자동화 기능을 제공하는 Model Context Protocol(MCP) 서버입니다. 이 서버는 구조화된 접근성 스냅샷을 통해 LLM이 웹 페이지와 상호작용할 수 있게 하여, 스크린샷이나 시각적 튜닝 모델이 필요 없습니다.

Playwright MCP와 Playwright CLI 비교

이 패키지는 Playwright에 대한 MCP 인터페이스를 제공합니다. 코딩 에이전트를 사용 중이라면 CLI+SKILLS를 사용하는 것이 더 유리할 수 있습니다.

  • CLI: 최신 코딩 에이전트는 MCP보다 SKILL로 노출되는 CLI 기반 워크플로우를 점점 더 선호합니다. CLI 호출은 토큰 효율이 더 높아, 큰 도구 스키마와 장황한 접근성 트리를 모델 컨텍스트에 로드하지 않아도 되며, 에이전트가 간결하고 목적에 맞는 명령을 통해 작업할 수 있기 때문입니다. 따라서 CLI + SKILLs는 제한된 컨텍스트 창 내에서 브라우저 자동화와 대규모 코드베이스, 테스트, 추론을 균형 있게 처리해야 하는 고처리량 코딩 에이전트에 더 적합합니다.
    Playwright CLI with SKILLs에 대해 자세히 알아보기.

  • MCP: MCP는 지속적인 상태, 풍부한 내부 검사, 페이지 구조에 대한 반복적 추론의 이점을 활용하는 특수 에이전트 루프에 여전히 유용합니다. 예를 들어 탐색적 자동화, 자가 치유 테스트, 또는 지속적인 브라우저 컨텍스트 유지가 토큰 비용 우려보다 중요한 장기 실행 자율 워크플로우와 같은 경우입니다.

주요 기능

  • 빠르고 가벼움. 픽셀 기반 입력이 아닌 Playwright의 접근성 트리를 사용합니다.
  • LLM 친화적. 비전 모델이 필요 없으며, 구조화된 데이터로만 작동합니다.
  • 결정적 도구 적용. 스크린샷 기반 접근 방식에서 흔한 모호성을 피합니다.

요구 사항

  • Node.js 18 이상
  • VS Code, Cursor, Windsurf, Claude Desktop, Goose, Grok, Junie 또는 기타 MCP 클라이언트

시작하기

먼저 클라이언트에 Playwright MCP 서버를 설치합니다.

표준 구성은 대부분의 도구에서 작동합니다:

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

Install in VS Code Install in 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

버튼을 클릭하여 설치:

Install in 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 서버를 관리하는 대화형 UI를 엽니다.

자세한 내용은 Factory MCP 문서를 참조하세요.

Gemini CLI

MCP 설치 가이드를 따르고 위의 표준 구성을 사용합니다.

Goose

버튼을 클릭하여 설치:

Install in 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

Add to Kiro

MCP 서버 문서를 따릅니다. 예를 들어 .kiro/settings/mcp.json에서:

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

버튼을 클릭하여 설치:

Add MCP Server playwright to 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

버튼을 클릭하여 설치:

Install in VS Code Install in VS Code Insiders

또는 수동으로 설치:

MCP 설치 가이드를 따르고 위의 표준 구성을 사용합니다. VS Code CLI를 사용하여 Playwright MCP 서버를 설치할 수도 있습니다:

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

설치 후 Playwright MCP 서버는 VS Code에서 GitHub Copilot 에이전트와 함께 사용할 수 있습니다.

Warp

Settings -> AI -> Manage MCP Servers -> + Add로 이동하여 MCP 서버를 추가합니다. 위의 표준 구성을 사용합니다.

또는 Warp 프롬프트에서 슬래시 명령 /add-mcp을 사용하고 위의 표준 구성을 붙여넣습니다:

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

Windsurf MCP 문서를 따릅니다. 위의 표준 구성을 사용합니다.

구성

Playwright MCP 서버는 다음 인수를 지원합니다. 위의 JSON 구성에서 "args" 목록의 일부로 제공할 수 있습니다:

옵션설명
--allowed-hosts <hosts...>이 서버가 서빙을 허용하는 호스트의 쉼표로 구분된 목록입니다. 기본값은 서버가 바인딩된 호스트입니다. 호스트 검사를 비활성화하려면 '*'를 전달하세요.
env PLAYWRIGHT_MCP_ALLOWED_HOSTS
--allowed-origins 브라우저가 요청을 허용하는 신뢰할 수 있는 출처의 세미콜론으로 구분된 목록입니다. 기본값은 모두 허용입니다. 중요: 보안 경계 역할을 하지 않으며 리디렉션에 영향을 주지 않습니다.
env PLAYWRIGHT_MCP_ALLOWED_ORIGINS
--allow-unrestricted-file-access작업 공간 루트 외부의 파일에 대한 액세스를 허용합니다. 또한 file:// URL에 대한 무제한 액세스를 허용합니다. 기본적으로 파일 시스템 액세스는 작업 공간 루트 디렉터리(또는 루트가 구성되지 않은 경우 cwd)로만 제한되며, file:// URL로의 탐색은 차단됩니다.
env PLAYWRIGHT_MCP_ALLOW_UNRESTRICTED_FILE_ACCESS
--blocked-origins 브라우저가 요청을 차단할 출처의 세미콜론으로 구분된 목록입니다. 차단 목록은 허용 목록보다 먼저 평가됩니다. 허용 목록 없이 사용하면 차단 목록과 일치하지 않는 요청도 여전히 허용됩니다. 중요: 보안 경계 역할을 하지 않으며 리디렉션에 영향을 주지 않습니다.
env PLAYWRIGHT_MCP_BLOCKED_ORIGINS
--block-service-workers서비스 워커 차단
env PLAYWRIGHT_MCP_BLOCK_SERVICE_WORKERS
--browser 사용할 브라우저 또는 chrome 채널입니다. 가능한 값: chrome, firefox, webkit, msedge.
env PLAYWRIGHT_MCP_BROWSER
--caps 활성화할 추가 기능의 쉼표로 구분된 목록입니다. 가능한 값: vision, pdf, devtools.
env PLAYWRIGHT_MCP_CAPS
--cdp-endpoint 연결할 CDP 엔드포인트입니다.
env PLAYWRIGHT_MCP_CDP_ENDPOINT
--cdp-header <headers...>연결 요청과 함께 보낼 CDP 헤더입니다. 여러 개를 지정할 수 있습니다.
env PLAYWRIGHT_MCP_CDP_HEADERS
--cdp-timeout CDP 엔드포인트 연결을 위한 타임아웃(밀리초)입니다. 기본값은 30000ms입니다.
env PLAYWRIGHT_MCP_CDP_TIMEOUT
--codegen 코드 생성을 위해 사용할 언어를 지정합니다. 가능한 값: "typescript", "python", "java", "csharp", "none". 기본값은 "typescript"입니다.
env PLAYWRIGHT_MCP_CODEGEN
--config 구성 파일의 경로입니다.
env PLAYWRIGHT_MCP_CONFIG
--console-level 반환할 콘솔 메시지의 수준: "error", "warning", "info", "debug". 각 수준에는 더 심각한 수준의 메시지가 포함됩니다.
env PLAYWRIGHT_MCP_CONSOLE_LEVEL
--device 에뮬레이션할 장치입니다. 예: "iPhone 15"
env PLAYWRIGHT_MCP_DEVICE
--mobile일반적인 모바일 장치를 에뮬레이션합니다(Chromium의 경우 Pixel 10, WebKit의 경우 iPhone 17). 모바일 페이지는 일반적으로 더 가벼워서 토큰을 절약합니다. --device와 함께 사용할 수 없습니다.
env PLAYWRIGHT_MCP_MOBILE
--executable-path 브라우저 실행 파일의 경로입니다.
env PLAYWRIGHT_MCP_EXECUTABLE_PATH
--extension실행 중인 브라우저 인스턴스에 연결합니다(Edge/Chrome만 해당). "Playwright Extension"이 설치되어 있어야 합니다.
env PLAYWRIGHT_MCP_EXTENSION
--endpoint 연결할 바인딩된 브라우저 엔드포인트입니다.
env PLAYWRIGHT_MCP_ENDPOINT
--file-paths 도구 결과에서 파일 경로가 렌더링되는 방식입니다. 작업 공간 루트에 "relative" 또는 "absolute"입니다. 기본값은 "relative"입니다.
env PLAYWRIGHT_MCP_FILE_PATHS
--grant-permissions <permissions...>브라우저 컨텍스트에 부여할 권한 목록입니다. 예: "geolocation", "clipboard-read", "clipboard-write".
env PLAYWRIGHT_MCP_GRANT_PERMISSIONS
--headless헤드리스 모드로 브라우저를 실행합니다. 기본값은 헤드풀입니다.
env PLAYWRIGHT_MCP_HEADLESS
--host 서버를 바인딩할 호스트입니다. 기본값은 localhost입니다. 모든 인터페이스에 바인딩하려면 0.0.0.0을 사용하세요.
env PLAYWRIGHT_MCP_HOST
--idle-timeout 완료된 도구 호출 없이 이 밀리초가 지나면 브라우저를 닫습니다. 다음 도구 호출 시 다시 시작됩니다. 기본값은 헤드리스 브라우저의 경우 1시간, 헤드풀 브라우저의 경우 없음이며, 0이면 비활성화됩니다.
env PLAYWRIGHT_MCP_IDLE_TIMEOUT
--ignore-https-errorshttps 오류 무시
env PLAYWRIGHT_MCP_IGNORE_HTTPS_ERRORS
--init-page <path...>Playwright 페이지 객체에서 평가할 TypeScript 파일의 경로입니다.
env PLAYWRIGHT_MCP_INIT_PAGE
--init-script <path...>초기화 스크립트로 추가할 JavaScript 파일의 경로입니다. 이 스크립트는 페이지의 모든 스크립트보다 먼저 모든 페이지에서 평가됩니다. 여러 번 지정할 수 있습니다.
env PLAYWRIGHT_MCP_INIT_SCRIPT
--isolated브라우저 프로필을 메모리에 유지하고 디스크에 저장하지 않습니다.
env PLAYWRIGHT_MCP_ISOLATED
--image-responses 이미지 응답을 클라이언트에 보낼지 여부입니다. "allow", "omit" 또는 "only"일 수 있습니다. "only"를 사용하면 이미지를 포함하는 응답은 텍스트 부분 없이 이미지 부분만으로 구성됩니다. 기본값은 "allow"입니다.
env PLAYWRIGHT_MCP_IMAGE_RESPONSES
--no-sandbox일반적으로 샌드박스 처리되는 모든 프로세스 유형에 대해 샌드박스를 비활성화합니다.
env PLAYWRIGHT_MCP_NO_SANDBOX
--no-webmcp페이지가 WebMCP API를 통해 등록하는 도구를 수집하거나 노출하지 않습니다.
env PLAYWRIGHT_MCP_WEBMCP=false
--output-dir 자동으로 이름이 지정된 출력 파일(예: 명시적 파일 이름 없이 찍은 스크린샷)을 위한 디렉터리 경로입니다. 명시적 이름이 있는 파일은 대신 작업 공간 루트를 기준으로 해석되며 이 옵션의 영향을 받지 않습니다.
env PLAYWRIGHT_MCP_OUTPUT_DIR
--output-max-size 오래된 출력 파일을 제거하기 위한 임계값(바이트)입니다.
env PLAYWRIGHT_MCP_OUTPUT_MAX_SIZE
--port SSE 전송을 위해 수신 대기할 포트입니다.
env PLAYWRIGHT_MCP_PORT
--profile-dir-name --extension으로 연결할 사용자 데이터 디렉터리의 프로필 디렉터리 이름입니다. 예: "Profile 1". 기본값은 확장 프로그램이 설치된 마지막으로 사용된 프로필입니다.
env PLAYWRIGHT_MCP_PROFILE_DIR_NAME
--proxy-bypass 프록시를 우회할 쉼표로 구분된 도메인입니다. 예: ".com,chromium.org,.domain.com"
env PLAYWRIGHT_MCP_PROXY_BYPASS
--proxy-server 프록시 서버를 지정합니다. 예: "http://myproxy:3128" 또는 "socks5://myproxy:8080"
env PLAYWRIGHT_MCP_PROXY_SERVER
--sandbox일반적으로 샌드박스 처리되지 않는 모든 프로세스 유형에 대해 샌드박스를 활성화합니다.
env PLAYWRIGHT_MCP_SANDBOX
--save-sessionPlaywright MCP 세션을 출력 디렉터리에 저장할지 여부입니다.
env PLAYWRIGHT_MCP_SAVE_SESSION
--secrets dotenv 형식의 비밀을 포함하는 파일 경로입니다.
env PLAYWRIGHT_MCP_SECRETS_FILE
--shared-browser-context연결된 모든 HTTP 클라이언트 간에 동일한 브라우저 컨텍스트를 재사용합니다.
env PLAYWRIGHT_MCP_SHARED_BROWSER_CONTEXT
--snapshot-boxes각 요소의 경계 상자를 스냅샷에 [box=x,y,width,height]로 포함합니다. 좌표는 뷰포트 기준이며 CSS 픽셀 단위입니다.
env PLAYWRIGHT_MCP_SNAPSHOT_BOXES
--snapshot-mode 응답용 스냅샷을 찍을 때 사용할 모드를 지정합니다. "full" 또는 "none"일 수 있습니다. 기본값은 "full"입니다.
env PLAYWRIGHT_MCP_SNAPSHOT_MODE
--storage-state 격리된 세션을 위한 저장 상태 파일의 경로입니다.
env PLAYWRIGHT_MCP_STORAGE_STATE
--test-id-attribute 테스트 ID에 사용할 속성을 지정합니다. 기본값은 "data-testid"입니다.
env PLAYWRIGHT_MCP_TEST_ID_ATTRIBUTE
--timeout-action 작업 타임아웃을 밀리초 단위로 지정합니다. 기본값은 5000ms입니다.
env PLAYWRIGHT_MCP_TIMEOUT_ACTION
--timeout-navigation 탐색 타임아웃을 밀리초 단위로 지정합니다. 기본값은 60000ms입니다.
env PLAYWRIGHT_MCP_TIMEOUT_NAVIGATION
--timeout-settle 각 작업 후 트리거된 작업이 안정될 때까지 대기할 시간(밀리초)입니다. 기본값은 500ms입니다.
env PLAYWRIGHT_MCP_TIMEOUT_SETTLE
--user-agent 사용자 에이전트 문자열을 지정합니다.
env PLAYWRIGHT_MCP_USER_AGENT
--user-data-dir 사용자 데이터 디렉터리의 경로입니다. 지정하지 않으면 임시 디렉터리가 생성됩니다.
env PLAYWRIGHT_MCP_USER_DATA_DIR
--viewport-size 브라우저 뷰포트 크기를 픽셀 단위로 지정합니다. 예: "1280x720"
env 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 클라이언트의 작업 공간 루트에서 파생되므로 다른 프로젝트는 자동으로 별도의 프로필을 얻습니다.

[!IMPORTANT] 영구 프로필은 한 번에 하나의 브라우저 인스턴스에서만 사용할 수 있으므로 동일한 작업 공간을 공유하는 동시 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 인수를 사용하여 저장 상태 파일로 시작합니다. 이렇게 하면 파일의 쿠키와 로컬 저장소가 격리된 브라우저 컨텍스트에 로드됩니다.

페이지 상태의 경우 다음을 사용할 수 있습니다:

  • --init-page는 Playwright 페이지 객체에서 평가될 TypeScript 파일을 가리킵니다. 이를 통해 임의의 코드를 실행하여 페이지를 설정할 수 있습니다.
// 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 서버를 실행하고 HTTP 전송을 활성화하려면 --port 플래그를 전달하세요.

npx @playwright/mcp@latest --port 8931

그런 다음 MCP 클라이언트 구성에서 url를 HTTP 엔드포인트로 설정하세요:

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

보안

Playwright MCP는 보안 경계가 아닙니다. 배포 환경 보안에 대한 지침은 MCP 보안 모범 사례를 참조하세요.

Docker

참고: 현재 Docker 구현은 headless 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
    • 제목: 클릭
    • 설명: 웹 페이지에서 클릭을 수행합니다
    • 매개변수:
      • element (문자열, 선택): 요소와 상호작용하기 위한 권한을 얻는 데 사용되는 사람이 읽을 수 있는 요소 설명
      • target (문자열): 페이지 스냅샷의 정확한 대상 요소 참조 또는 고유한 요소 선택자
      • doubleClick (부울, 선택): 단일 클릭 대신 더블 클릭을 수행할지 여부
      • button (문자열, 선택): 클릭할 버튼, 기본값은 왼쪽
      • modifiers (배열, 선택): 누를 보조 키
    • 읽기 전용: false
  • browser_close
    • 제목: 브라우저 닫기
    • 설명: 페이지를 닫습니다
    • 매개변수: 없음
    • 읽기 전용: false
  • browser_console_messages
    • 제목: 콘솔 메시지 가져오기
    • 설명: 모든 콘솔 메시지를 반환합니다
    • 매개변수:
      • level (문자열): 반환할 콘솔 메시지의 수준. 각 수준은 더 심각한 수준의 메시지를 포함합니다. 기본값은 "info"입니다.
      • all (부울, 선택): 마지막 탐색 이후가 아닌 세션 시작 이후의 모든 콘솔 메시지를 반환할지 여부. 기본값은 false입니다.
      • filename (문자열, 선택): 콘솔 메시지를 저장할 파일 이름. 상대 파일 이름은 작업 영역 루트를 기준으로 확인됩니다. 제공되지 않으면 메시지가 텍스트로 반환됩니다.
    • 읽기 전용: true
  • browser_drag
    • 제목: 마우스 드래그
    • 설명: 두 요소 사이에서 드래그 앤 드롭을 수행합니다
    • 매개변수:
      • startElement (문자열, 선택): 요소와 상호작용하기 위한 권한을 얻는 데 사용되는 사람이 읽을 수 있는 소스 요소 설명
      • startTarget (문자열): 페이지 스냅샷의 정확한 대상 요소 참조 또는 고유한 요소 선택자
      • endElement (문자열, 선택): 요소와 상호작용하기 위한 권한을 얻는 데 사용되는 사람이 읽을 수 있는 대상 요소 설명
      • endTarget (문자열): 페이지 스냅샷의 정확한 대상 요소 참조 또는 고유한 요소 선택자
    • 읽기 전용: false
  • browser_drop
    • 제목: 요소에 파일 또는 데이터 드롭
    • 설명: 페이지 외부에서 끌어온 것처럼 요소에 파일 또는 MIME 유형 데이터를 드롭합니다. "paths" 또는 "data" 중 하나 이상을 제공해야 합니다.
    • 매개변수:
      • element (문자열, 선택): 요소와 상호작용하기 위한 권한을 얻는 데 사용되는 사람이 읽을 수 있는 요소 설명
      • target (문자열): 페이지 스냅샷의 정확한 대상 요소 참조 또는 고유한 요소 선택자
      • paths (배열, 선택): 요소에 드롭할 파일의 절대 경로.
      • data (객체, 선택): MIME 유형을 문자열 값에 매핑한 데이터 드롭 (예: {"text/plain": "hello", "text/uri-list": "https://example.com"}).
    • 읽기 전용: false
  • browser_emulate_media
    • 제목: 미디어 기능 에뮬레이션
    • 설명: 페이지의 CSS 미디어 기능을 에뮬레이션합니다. 예를 들어 밝은 색 구성표와 어두운 색 구성표 사이를 전환합니다. 생략된 매개변수는 변경되지 않으며, null은 재정의를 지웁니다.
    • 매개변수:
      • colorScheme (선택): prefers-color-scheme 미디어 기능을 에뮬레이션합니다
      • reducedMotion (선택): prefers-reduced-motion 미디어 기능을 에뮬레이션합니다
      • forcedColors (선택): forced-colors 미디어 기능을 에뮬레이션합니다
      • contrast (선택): prefers-contrast 미디어 기능을 에뮬레이션합니다
      • media (선택): 페이지의 CSS 미디어 유형을 변경합니다
    • 읽기 전용: false
  • browser_evaluate
    • 제목: JavaScript 평가
    • 설명: 페이지 또는 요소에서 JavaScript 표현식을 평가합니다
    • 매개변수:
      • element (문자열, 선택): 요소와 상호작용하기 위한 권한을 얻는 데 사용되는 사람이 읽을 수 있는 요소 설명
      • target (문자열, 선택): 페이지 스냅샷의 정확한 대상 요소 참조 또는 고유한 요소 선택자
      • function (문자열): () => { /* 코드 / } 또는 요소가 제공된 경우 (element) => { / 코드 */ }
      • filename (문자열, 선택): 결과를 저장할 파일 이름. 상대 파일 이름은 작업 영역 루트를 기준으로 확인됩니다. 제공되지 않으면 결과가 텍스트로 반환됩니다.
    • 읽기 전용: false
  • browser_file_upload
    • 제목: 파일 업로드
    • 설명: 하나 또는 여러 파일을 업로드합니다
    • 매개변수:
      • paths (배열, 선택): 업로드할 파일의 절대 경로. 단일 파일 또는 여러 파일일 수 있습니다. 생략하면 파일 선택기가 취소됩니다.
    • 읽기 전용: false
  • browser_fill_form
    • 제목: 양식 채우기
    • 설명: 여러 양식 필드를 채웁니다
    • 매개변수:
      • fields (배열): 채울 필드
    • 읽기 전용: false
  • browser_find
    • 제목: 페이지 스냅샷에서 찾기
    • 설명: 현재 페이지의 접근성 스냅샷에서 텍스트 또는 정규식을 검색합니다. 각 노드가 트리 루트에서의 경로 아래에 표시되는 주변 컨텍스트(검색 스니펫과 같은) 몇 줄과 함께 일치하는 스냅샷 노드를 반환합니다. 요소와 해당 ref만 찾으면 되는 경우 전체 스냅샷을 캡처하는 것보다 저렴합니다.
    • 매개변수:
      • text (문자열, 선택): 페이지 스냅샷에서 검색할 일반 텍스트(대소문자 구분 없는 부분 문자열 일치). 텍스트 또는 정규식 중 하나만 제공하세요.
      • regex (문자열, 선택): 페이지 스냅샷에서 검색할 정규식. 기본적으로 대소문자를 구분합니다. 플래그를 추가하려면 패턴을 슬래시로 감싸세요. 예: 대소문자 구분 없는 "/error/i". 텍스트 또는 정규식 중 하나만 제공하세요.
      • filename (문자열, 선택): 응답에서 반환하는 대신 결과를 파일에 저장합니다. 상대 파일 이름은 작업 영역 루트를 기준으로 확인됩니다.
    • 읽기 전용: true
  • browser_handle_dialog
    • 제목: 대화상자 처리
    • 설명: 대화상자를 처리합니다
    • 매개변수:
      • accept (부울): 대화상자를 수락할지 여부.
      • promptText (문자열, 선택): 프롬프트 대화상자의 경우 프롬프트 텍스트.
    • 읽기 전용: false
  • browser_hover
    • 제목: 마우스 호버
    • 설명: 페이지의 요소 위에 마우스를 올립니다
    • 매개변수:
      • element (문자열, 선택): 요소와 상호작용하기 위한 권한을 얻는 데 사용되는 사람이 읽을 수 있는 요소 설명
      • target (문자열): 페이지 스냅샷의 정확한 대상 요소 참조 또는 고유한 요소 선택자
    • 읽기 전용: false
  • browser_navigate
    • 제목: URL로 이동
    • 설명: URL로 이동합니다
    • 매개변수:
      • url (문자열): 이동할 URL
    • 읽기 전용: false
  • browser_navigate_back
    • 제목: 뒤로 가기
    • 설명: 기록의 이전 페이지로 돌아갑니다
    • 매개변수: 없음
    • 읽기 전용: false
  • browser_network_request
    • 제목: 네트워크 요청 세부 정보 표시
    • 설명: 단일 네트워크 요청의 전체 세부 정보(헤더 및 본문)를 반환하거나, part가 설정된 경우 단일 부분을 반환합니다. browser_network_requests의 번호를 사용하세요.
    • 매개변수:
      • index (정수): browser_network_requests에 의해 출력된 요청의 1부터 시작하는 인덱스.
      • part (문자열, 선택): 요청의 이 부분만 반환합니다. 전체 세부 정보를 반환하려면 생략하세요.
      • filename (문자열, 선택): 결과를 저장할 파일 이름. 상대 파일 이름은 작업 영역 루트를 기준으로 확인됩니다. 제공되지 않으면 출력이 텍스트로 반환됩니다.
    • 읽기 전용: true
  • browser_network_requests
    • 제목: 네트워크 요청 목록
    • 설명: 페이지 로드 이후 네트워크 요청의 번호가 매겨진 목록을 반환합니다. 전체 세부 정보를 얻으려면 browser_network_request를 번호와 함께 사용하세요.
    • 매개변수:
      • static (부울): 이미지, 글꼴, 스크립트 등 성공적인 정적 리소스를 포함할지 여부. 기본값은 false입니다.
      • filter (문자열, 선택): URL이 이 정규식과 일치하는 요청만 반환합니다 (예: "/api/.*user").
      • filename (문자열, 선택): 네트워크 요청을 저장할 파일 이름. 상대 파일 이름은 작업 영역 루트를 기준으로 확인됩니다. 제공되지 않으면 요청이 텍스트로 반환됩니다.
    • 읽기 전용: true
  • browser_press_key
    • 제목: 키 누르기
    • 설명: 키보드에서 키를 누릅니다
    • 매개변수:
      • key (문자열): 누를 키의 이름 또는 생성할 문자 (예: ArrowLeft 또는 a)
    • 읽기 전용: false
  • browser_resize
    • 제목: 브라우저 창 크기 조정
    • 설명: 브라우저 창 크기를 조정합니다
    • 매개변수:
      • width (숫자): 브라우저 창의 너비
      • height (숫자): 브라우저 창의 높이
    • 읽기 전용: false
  • browser_run_code_unsafe
    • 제목: Playwright 코드 실행 (안전하지 않음)
    • 설명: Playwright 코드 스니펫을 실행합니다. 안전하지 않음: Playwright 서버 프로세스에서 임의의 JavaScript를 실행하며 RCE와 동일합니다.
    • 매개변수:
      • code (문자열, 선택): 실행할 Playwright 코드가 포함된 JavaScript 함수. 단일 인수 page로 호출되며, 페이지 상호작용에 사용할 수 있습니다. 예: async (page) => { await page.getByRole('button', { name: 'Submit' }).click(); return await page.title(); }
      • filename (문자열, 선택): 지정된 파일에서 코드를 로드합니다. 상대 파일 이름은 작업 영역 루트를 기준으로 확인됩니다. 코드와 파일 이름이 모두 제공되면 코드는 무시됩니다.
    • 읽기 전용: false
  • browser_select_option
    • 제목: 옵션 선택
    • 설명: 드롭다운에서 옵션을 선택합니다
    • 매개변수:
      • element (문자열, 선택): 요소와 상호작용하기 위한 권한을 얻는 데 사용되는 사람이 읽을 수 있는 요소 설명
      • target (문자열): 페이지 스냅샷의 정확한 대상 요소 참조 또는 고유한 요소 선택자
      • values (배열): 드롭다운에서 선택할 값의 배열. 단일 값 또는 여러 값일 수 있습니다.
    • 읽기 전용: false
  • browser_snapshot
    • Title: 페이지 스냅샷
    • Description: 현재 페이지의 접근성 스냅샷을 캡처합니다. 스크린샷보다 더 유용합니다.
    • Parameters:
      • target (string, optional): 페이지 스냅샷의 정확한 대상 요소 참조 또는 고유한 요소 선택자
      • filename (string, optional): 응답으로 반환하는 대신 스냅샷을 파일로 저장합니다. 상대 파일 이름은 작업 영역 루트를 기준으로 확인됩니다.
      • depth (number, optional): 스냅샷 트리의 깊이 제한
      • boxes (boolean, optional): 각 요소의 경계 상자를 스냅샷에 [box=x,y,width,height]로 포함합니다. 좌표는 뷰포트 기준이며 CSS 픽셀 단위입니다 (Element.getBoundingClientRect).
    • Read-only: true
  • browser_take_screenshot
    • Title: 스크린샷 찍기
    • Description: 현재 페이지의 스크린샷을 찍습니다. 스크린샷을 기반으로 작업을 수행할 수 없으므로 작업에는 browser_snapshot을 사용하세요.
    • Parameters:
      • 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입니다.
    • Read-only: true
  • browser_type
    • Title: 텍스트 입력
    • Description: 편집 가능한 요소에 텍스트를 입력합니다
    • Parameters:
      • element (string, optional): 요소와 상호 작용하기 위한 권한을 얻는 데 사용되는 사람이 읽을 수 있는 요소 설명
      • target (string): 페이지 스냅샷의 정확한 대상 요소 참조 또는 고유한 요소 선택자
      • text (string): 요소에 입력할 텍스트
      • submit (boolean, optional): 입력한 텍스트를 제출할지 여부(입력 후 Enter 누르기)
      • slowly (boolean, optional): 한 번에 한 문자씩 입력할지 여부. 페이지의 키 핸들러를 트리거하는 데 유용합니다. 기본적으로 전체 텍스트가 한 번에 채워집니다.
    • Read-only: false
  • browser_wait_for
    • Title: 대기
    • Description: 텍스트가 나타나거나 사라지거나 지정된 시간이 경과할 때까지 대기합니다
    • Parameters:
      • time (number, optional): 대기할 시간(초), 최대 30초
      • text (string, optional): 대기할 텍스트
      • textGone (string, optional): 사라질 때까지 대기할 텍스트
    • Read-only: false
탭 관리
  • browser_tabs
    • Title: 탭 관리
    • Description: 브라우저 탭을 나열, 생성, 닫기 또는 선택합니다.
    • Parameters:
      • action (string): 수행할 작업
      • index (number, optional): 탭 인덱스. 닫기/선택에 사용됩니다. 닫기에서 생략하면 현재 탭이 닫힙니다.
      • url (string, optional): 새 탭에서 이동할 URL. 새 탭 생성에 사용됩니다.
    • Read-only: false
브라우저 설치
구성(--caps=config로 옵트인)
  • browser_get_config
    • Title: 구성 가져오기
    • Description: CLI 옵션, 환경 변수 및 구성 파일을 병합한 후 최종 확인된 구성을 가져옵니다.
    • Parameters: 없음
    • Read-only: true
네트워크(--caps=network로 옵트인)
  • browser_network_state_set
    • Title: 네트워크 상태 설정
    • Description: 브라우저 네트워크 상태를 온라인 또는 오프라인으로 설정합니다. 오프라인일 때 모든 네트워크 요청이 실패합니다.
    • Parameters:
      • state (string): 오프라인 모드를 시뮬레이션하려면 "offline"으로, 네트워크 연결을 복원하려면 "online"으로 설정합니다
    • Read-only: false
  • 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: 없음
    • Read-only: true
  • browser_unroute
    • Title: 네트워크 경로 제거
    • Description: 패턴과 일치하는 네트워크 경로를 제거합니다(패턴을 지정하지 않으면 모든 경로 제거)
    • Parameters:
      • pattern (string, optional): 제거할 URL 패턴(모든 경로를 제거하려면 생략)
    • Read-only: false
저장소(--caps=storage로 옵트인)
  • browser_cookie_clear
    • Title: 쿠키 지우기
    • Description: 모든 쿠키를 지웁니다
    • Parameters: 없음
    • Read-only: false
  • browser_cookie_delete
    • Title: 쿠키 삭제
    • Description: 특정 쿠키를 삭제합니다
    • Parameters:
      • name (string): 삭제할 쿠키 이름
    • Read-only: false
  • browser_cookie_get
    • Title: 쿠키 가져오기
    • Description: 이름으로 특정 쿠키를 가져옵니다
    • Parameters:
      • name (string): 가져올 쿠키 이름
    • Read-only: true
  • browser_cookie_list
    • Title: 쿠키 목록
    • Description: 모든 쿠키를 나열합니다(선택적으로 도메인/경로로 필터링)
    • Parameters:
      • domain (string, optional): 도메인별로 쿠키 필터링
      • path (string, optional): 경로별로 쿠키 필터링
    • Read-only: true
  • browser_cookie_set
    • Title: 쿠키 설정
    • Description: 선택적 플래그(도메인, 경로, 만료, httpOnly, secure, sameSite)로 쿠키를 설정합니다
    • Parameters:
      • name (string): 쿠키 이름
      • value (string): 쿠키 값
      • domain (string, optional): 쿠키 도메인
      • path (string, optional): 쿠키 경로
      • expires (number, optional): Unix 타임스탬프로 표시된 쿠키 만료
      • httpOnly (boolean, optional): 쿠키가 HTTP 전용인지 여부
      • secure (boolean, optional): 쿠키가 보안 쿠키인지 여부
      • sameSite (string, optional): 쿠키 SameSite 속성
    • Read-only: false
  • browser_localstorage_clear
    • Title: localStorage 지우기
    • Description: 모든 localStorage를 지웁니다
    • Parameters: 없음
    • 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: 없음
    • 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: 없음
    • Read-only: false
  • browser_sessionstorage_delete
    • Title: sessionStorage 항목 삭제
    • Description: sessionStorage 항목을 삭제합니다
    • Parameters:
      • key (string): 삭제할 키
    • Read-only: false
  • browser_sessionstorage_get
    • Title: sessionStorage 항목 가져오기
    • Description: 키로 sessionStorage 항목을 가져옵니다
    • Parameters:
      • key (string): 가져올 키
    • Read-only: true
  • browser_sessionstorage_list
    • Title: sessionStorage 목록
    • Description: 모든 sessionStorage 키-값 쌍을 나열합니다
    • Parameters: 없음
    • Read-only: true
  • browser_sessionstorage_set
    • Title: sessionStorage 항목 설정
    • Description: sessionStorage 항목을 설정합니다
    • Parameters:
      • key (string): 설정할 키
      • value (string): 설정할 값
    • Read-only: false
  • browser_set_storage_state
    • Title: 저장소 상태 복원
    • Description: 파일에서 저장소 상태(쿠키, 로컬 저장소)를 복원합니다. 복원하기 전에 기존 쿠키와 로컬 저장소를 지웁니다.
    • Parameters:
      • filename (string): 복원할 저장소 상태 파일의 경로. 상대 파일 이름은 작업 영역 루트를 기준으로 확인됩니다.
    • Read-only: false
  • browser_storage_state
    • Title: 저장소 상태 저장
    • Description: 나중에 재사용할 수 있도록 저장소 상태(쿠키, 로컬 저장소)를 파일에 저장합니다
    • Parameters:
      • filename (string, optional): 저장소 상태를 저장할 파일 이름. 상대 파일 이름은 작업 영역 루트를 기준으로 확인됩니다. 지정하지 않으면 저장소 상태는 storage-state-{timestamp}.json로 출력 디렉터리에 저장됩니다.
    • Read-only: true
DevTools(--caps=devtools로 옵트인)
  • browser_annotate
    • Title: 현재 페이지에 주석 달기
    • Description: 현재 페이지에 대해 주석 모드로 Playwright Dashboard를 열고 사용자가 주석을 그릴 때까지 기다립니다. 주석이 달린 스크린샷, ARIA 스냅샷 및 주석 목록을 반환합니다.
    • Parameters: 없음
    • Read-only: true
  • browser_hide_highlight
    • Title: 요소 하이라이트 숨기기
    • Description: 이전에 요소에 추가된 하이라이트 오버레이를 제거합니다.
    • Parameters:
      • element (string, optional): 하이라이트를 추가할 때 사용된 사람이 읽을 수 있는 요소 설명; browser_highlight에 전달된 값과 일치해야 합니다.
      • target (string, optional): 페이지 스냅샷의 정확한 대상 요소 참조 또는 고유한 요소 선택자
    • Read-only: true
  • browser_highlight
    • 제목: 요소 강조
    • 설명: 페이지의 요소 주위에 지속적인 강조 오버레이를 표시합니다.
    • 매개변수:
      • element (문자열, 선택 사항): 요소와 상호 작용할 수 있는 권한을 얻는 데 사용되는 사람이 읽을 수 있는 요소 설명
      • target (문자열): 페이지 스냅샷의 정확한 대상 요소 참조 또는 고유한 요소 선택기
      • style (문자열, 선택 사항): 강조 오버레이에 적용되는 추가 인라인 CSS(예: "outline: 2px dashed red").
    • 읽기 전용: true
  • browser_resume
    • 제목: 일시 중지된 스크립트 실행 재개
    • 설명: 일시 중지된 후 스크립트 실행을 재개합니다. step이 true로 설정된 경우 다음 작업 전에 실행이 다시 일시 중지됩니다.
    • 매개변수:
      • step (부울, 선택 사항): true인 경우 다음 작업 전에 실행이 다시 일시 중지되어 단계별 디버깅이 가능합니다.
      • location (문자열, 선택 사항): 특정 :에서 실행을 일시 중지합니다(예: "example.spec.ts:42").
    • 읽기 전용: false
  • browser_start_recording
    • 제목: 사용자 작업 기록 시작
    • 설명: 사용자가 브라우저에서 수행하는 작업을 Playwright 코드로 기록하기 시작합니다. 사용자가 흐름을 수동으로 시연하려는 경우 사용합니다. 사용자가 완료했다고 말하면 browser_stop_recording을 호출하여 기록된 작업을 검색합니다.
    • 매개변수: 없음
    • 읽기 전용: true
  • browser_start_tracing
    • 제목: 추적 시작
    • 설명: 추적 기록 시작
    • 매개변수: 없음
    • 읽기 전용: true
  • browser_start_video
    • 제목: 비디오 시작
    • 설명: 비디오 녹화 시작
    • 매개변수:
      • filename (문자열, 선택 사항): 비디오를 저장할 파일 이름. 상대 파일 이름은 작업 영역 루트를 기준으로 확인됩니다. 지정하지 않으면 비디오는 video-{timestamp}.webm로 출력 디렉터리에 저장됩니다.
      • size (객체, 선택 사항): 비디오 크기
      • fps (숫자, 선택 사항): 초당 프레임 수의 비디오 프레임 속도, 기본값은 25
      • cursor (부울, 선택 사항): 각 작업 지점으로 이동하는 애니메이션 마우스 커서를 렌더링합니다. 커서가 이동할 시간을 확보하기 위해 작업을 800ms 간격으로 조정합니다.
    • 읽기 전용: true
  • browser_stop_recording
    • 제목: 사용자 작업 기록 중지
    • 설명: browser_start_recording으로 시작된 기록을 중지하고 기록된 작업을 Playwright 코드로 반환합니다.
    • 매개변수: 없음
    • 읽기 전용: true
  • browser_stop_tracing
    • 제목: 추적 중지
    • 설명: 추적 기록 중지
    • 매개변수: 없음
    • 읽기 전용: true
  • browser_stop_video
    • 제목: 비디오 중지
    • 설명: 비디오 녹화 중지
    • 매개변수: 없음
    • 읽기 전용: true
  • browser_video_chapter
    • 제목: 비디오 챕터
    • 설명: 비디오 녹화에 챕터 마커를 추가합니다. 흐릿한 배경이 있는 전체 화면 챕터 카드를 표시합니다.
    • 매개변수:
      • title (문자열): 챕터 제목
      • description (문자열, 선택 사항): 챕터 설명
      • duration (숫자, 선택 사항): 챕터 카드를 표시할 시간(밀리초)
    • 읽기 전용: true
  • browser_video_hide_actions
    • 제목: 작업 오버레이 숨기기
    • 설명: 페이지에서 수행된 작업에 주석을 추가하는 것을 중지합니다.
    • 매개변수: 없음
    • 읽기 전용: true
  • browser_video_show_actions
    • 제목: 작업 오버레이 표시
    • 설명: 페이지에서 수행된 후속 작업에 작업 이름을 지정하고 스타일이 지정된 경우 작업 지점을 표시하고 대상 요소를 강조하는 콜아웃으로 주석을 추가합니다. 비디오 녹화 또는 화면 캐스팅 중에 유용합니다.
    • 매개변수:
      • duration (숫자, 선택 사항): 각 작업 주석이 화면에 표시되는 시간(밀리초). 기본값은 500입니다.
      • position (문자열, 선택 사항): 페이지를 기준으로 작업 제목을 배치할 위치. 기본값은 오른쪽 위입니다.
      • cursor (문자열, 선택 사항): 포인터 작업에 대한 커서 장식. "pointer"(기본값)는 이전 작업 지점에서 다음 작업 지점으로 마우스 포인터를 애니메이션합니다. "none"은 커서 장식을 비활성화합니다.
      • style (객체, 선택 사항): 작업 장식의 스타일.
    • 읽기 전용: true
좌표 기반(--caps=vision으로 옵트인)
  • browser_mouse_click_xy
    • 제목: 클릭
    • 설명: 지정된 위치에서 마우스 버튼 클릭
    • 매개변수:
      • x (숫자): X 좌표
      • y (숫자): Y 좌표
      • button (문자열, 선택 사항): 클릭할 버튼, 기본값은 왼쪽
      • clickCount (숫자, 선택 사항): 클릭 횟수, 기본값은 1
      • delay (숫자, 선택 사항): 마우스 다운과 마우스 업 사이의 대기 시간(밀리초), 기본값은 0
    • 읽기 전용: false
  • browser_mouse_down
    • 제목: 마우스 누르기
    • 설명: 마우스 누르기
    • 매개변수:
      • button (문자열, 선택 사항): 누를 버튼, 기본값은 왼쪽
    • 읽기 전용: false
  • browser_mouse_drag_xy
    • 제목: 마우스 드래그
    • 설명: 지정된 위치로 왼쪽 마우스 버튼 드래그
    • 매개변수:
      • startX (숫자): 시작 X 좌표
      • startY (숫자): 시작 Y 좌표
      • endX (숫자): 끝 X 좌표
      • endY (숫자): 끝 Y 좌표
    • 읽기 전용: false
  • browser_mouse_move_xy
    • 제목: 마우스 이동
    • 설명: 지정된 위치로 마우스 이동
    • 매개변수:
      • x (숫자): X 좌표
      • y (숫자): Y 좌표
    • 읽기 전용: false
  • browser_mouse_up
    • 제목: 마우스 놓기
    • 설명: 마우스 놓기
    • 매개변수:
      • button (문자열, 선택 사항): 놓을 버튼, 기본값은 왼쪽
    • 읽기 전용: false
  • browser_mouse_wheel
    • 제목: 마우스 휠 스크롤
    • 설명: 마우스 휠 스크롤
    • 매개변수:
      • deltaX (숫자): X 델타
      • deltaY (숫자): Y 델타
    • 읽기 전용: false
PDF 생성(--caps=pdf로 옵트인)
  • browser_pdf_save
    • 제목: PDF로 저장
    • 설명: 페이지를 PDF로 저장
    • 매개변수:
      • filename (문자열, 선택 사항): PDF를 저장할 파일 이름. 상대 파일 이름은 작업 영역 루트를 기준으로 확인됩니다. 지정하지 않으면 PDF는 page-{timestamp}.pdf로 출력 디렉터리에 저장됩니다.
    • 읽기 전용: true
테스트 어설션(--caps=testing으로 옵트인)
  • browser_generate_locator
    • 제목: 요소에 대한 로케이터 생성
    • 설명: 테스트에서 사용할 지정된 요소에 대한 로케이터 생성
    • 매개변수:
      • element (문자열, 선택 사항): 요소와 상호 작용할 수 있는 권한을 얻는 데 사용되는 사람이 읽을 수 있는 요소 설명
      • target (문자열): 페이지 스냅샷의 정확한 대상 요소 참조 또는 고유한 요소 선택기
    • 읽기 전용: true
  • browser_verify_element_visible
    • 제목: 요소 표시 확인
    • 설명: 요소가 페이지에 표시되는지 확인
    • 매개변수:
      • role (문자열): 요소의 ROLE. 스냅샷에서 다음과 같이 찾을 수 있습니다: - {ROLE} "Accessible Name":
      • accessibleName (문자열): 요소의 ACCESSIBLE_NAME. 스냅샷에서 다음과 같이 찾을 수 있습니다: - role "{ACCESSIBLE_NAME}"
    • 읽기 전용: false
  • browser_verify_list_visible
    • 제목: 목록 표시 확인
    • 설명: 목록이 페이지에 표시되는지 확인
    • 매개변수:
      • element (문자열): 사람이 읽을 수 있는 목록 설명
      • target (문자열): 목록을 가리키는 정확한 대상 요소 참조
      • items (배열): 확인할 항목
    • 읽기 전용: false
  • browser_verify_text_visible
    • 제목: 텍스트 표시 확인
    • 설명: 텍스트가 페이지에 표시되는지 확인합니다. 가능하면 browser_verify_element_visible을 선호합니다.
    • 매개변수:
      • text (문자열): 확인할 TEXT. 스냅샷에서 다음과 같이 찾을 수 있습니다: - role "Accessible Name": {TEXT} 또는 다음과 같이: - text: {TEXT}
    • 읽기 전용: false
  • browser_verify_value
    • 제목: 값 확인
    • 설명: 요소 값 확인
    • 매개변수:
      • type (문자열): 요소 유형
      • element (문자열): 사람이 읽을 수 있는 요소 설명
      • target (문자열): 페이지 스냅샷의 정확한 대상 요소 참조
      • value (문자열): 확인할 값. 체크박스의 경우 "true" 또는 "false"를 사용합니다.
    • 읽기 전용: false