Skip to main content
Glama
microsoft

Playwright MCP Server

Official
by microsoft

극작가 MCP

Playwright를 사용하여 브라우저 자동화 기능을 제공하는 모델 컨텍스트 프로토콜(MCP) 서버입니다. 이 서버를 사용하면 LLM이 구조화된 접근성 스냅샷을 통해 웹 페이지와 상호 작용할 수 있으므로 스크린샷이나 시각적으로 조정된 모델이 필요하지 않습니다.

주요 특징

  • 빠르고 가볍습니다 . 픽셀 기반 입력 방식이 아닌 Playwright의 접근성 트리를 사용합니다.

  • LLM 친화적입니다 . 비전 모델이 필요 없으며, 구조화된 데이터만을 기반으로 운영됩니다.

  • 결정론적 도구 적용 . 스크린샷 기반 접근 방식에서 흔히 발생하는 모호성을 방지합니다.

요구 사항

  • Node.js 18 이상

  • VS Code, Cursor, Windsurf, Claude Desktop 또는 기타 MCP 클라이언트

시작하기

먼저 클라이언트와 함께 Playwright MCP 서버를 설치하세요. 일반적인 구성은 다음과 같습니다.

지엑스피1

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 에이전트와 함께 사용할 수 있습니다.

Cursor Settings -> MCP -> Add new MCP Server 로 이동합니다. 원하는 이름을 입력하고, npx @playwright/mcp 명령어와 함께 command 유형을 사용합니다. ' Edit 클릭하여 구성을 확인하거나 명령어와 같은 인수를 추가할 수도 있습니다.

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

Windsuff MCP 설명서를 따르세요. 다음 구성을 사용하세요.

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

MCP 설치 가이드를 따르고 다음 구성을 사용하세요.

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

구성

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

> npx @playwright/mcp@latest --help
  --allowed-origins <origins>  semicolon-separated list of origins to allow the
                               browser to request. Default is to allow all.
  --blocked-origins <origins>  semicolon-separated list of origins to block the
                               browser from requesting. Blocklist is evaluated
                               before allowlist. If used without the allowlist,
                               requests not matching the blocklist are still
                               allowed.
  --block-service-workers      block service workers
  --browser <browser>          browser or chrome channel to use, possible
                               values: chrome, firefox, webkit, msedge.
  --caps <caps>                comma-separated list of capabilities to enable,
                               possible values: tabs, pdf, history, wait, files,
                               install. Default is all.
  --cdp-endpoint <endpoint>    CDP endpoint to connect to.
  --config <path>              path to the configuration file.
  --device <device>            device to emulate, for example: "iPhone 15"
  --executable-path <path>     path to the browser executable.
  --headless                   run browser in headless mode, headed by default
  --host <host>                host to bind server to. Default is localhost. Use
                               0.0.0.0 to bind to all interfaces.
  --ignore-https-errors        ignore https errors
  --isolated                   keep the browser profile in memory, do not save
                               it to disk.
  --no-image-responses         do not send image responses to the client.
  --no-sandbox                 disable the sandbox for all process types that
                               are normally sandboxed.
  --output-dir <path>          path to the directory for output files.
  --port <port>                port to listen on for SSE transport.
  --proxy-bypass <bypass>      comma-separated domains to bypass proxy, for
                               example ".com,chromium.org,.domain.com"
  --proxy-server <proxy>       specify proxy server, for example
                               "http://myproxy:3128" or "socks5://myproxy:8080"
  --save-trace                 Whether to save the Playwright Trace of the
                               session into the output directory.
  --storage-state <path>       path to the storage state file for isolated
                               sessions.
  --user-agent <ua string>     specify user agent string
  --user-data-dir <path>       path to the user data directory. If not
                               specified, a temporary directory will be created.
  --viewport-size <size>       specify browser viewport size in pixels, for
                               example "1280, 720"
  --vision                     Run server that uses screenshots (Aria snapshots
                               are used by default)

사용자 프로필

일반 브라우저(기본값)처럼 지속적인 프로필로 Playwright MCP를 실행하거나 테스트 세션을 위한 격리된 컨텍스트에서 실행할 수 있습니다.

영구 프로필

모든 로그인 정보는 영구 프로필에 저장되며, 오프라인 상태를 해제하려면 세션 간에 삭제할 수 있습니다. 영구 프로필은 다음 위치에 있으며, --user-data-dir 인수를 사용하여 재정의할 수 있습니다.

# Windows
%USERPROFILE%\AppData\Local\ms-playwright\mcp-{channel}-profile

# macOS
- ~/Library/Caches/ms-playwright/mcp-{channel}-profile

# Linux
- ~/.cache/ms-playwright/mcp-{channel}-profile

외딴

격리 모드에서는 각 세션이 격리된 프로필에서 시작됩니다. MCP에 브라우저를 닫도록 요청할 때마다 세션이 닫히고 해당 세션의 모든 저장소 상태가 손실됩니다. 구성의 contextOptions 또는 --storage-state 인수를 통해 브라우저에 초기 저장소 상태를 제공할 수 있습니다. 저장소 상태에 대한 자세한 내용은 여기를 참조하세요.

{
  "mcpServers": {
    "playwright": {
      "command": "npx",
      "args": [
        "@playwright/mcp@latest",
        "--isolated",
        "--storage-state={path/to/storage.json}
      ]
    }
  }
}

구성 파일

Playwright MCP 서버는 JSON 구성 파일을 사용하여 구성할 수 있습니다. --config 명령줄 옵션을 사용하여 구성 파일을 지정할 수 있습니다.

npx @playwright/mcp@latest --config path/to/config.json
{
  // Browser configuration
  browser?: {
    // Browser type to use (chromium, firefox, or webkit)
    browserName?: 'chromium' | 'firefox' | 'webkit';

    // Keep the browser profile in memory, do not save it to disk.
    isolated?: boolean;

    // Path to user data directory for browser profile persistence
    userDataDir?: string;

    // Browser launch options (see Playwright docs)
    // @see https://playwright.dev/docs/api/class-browsertype#browser-type-launch
    launchOptions?: {
      channel?: string;        // Browser channel (e.g. 'chrome')
      headless?: boolean;      // Run in headless mode
      executablePath?: string; // Path to browser executable
      // ... other Playwright launch options
    };

    // Browser context options
    // @see https://playwright.dev/docs/api/class-browser#browser-new-context
    contextOptions?: {
      viewport?: { width: number, height: number };
      // ... other Playwright context options
    };

    // CDP endpoint for connecting to existing browser
    cdpEndpoint?: string;

    // Remote Playwright server endpoint
    remoteEndpoint?: string;
  },

  // Server configuration
  server?: {
    port?: number;  // Port to listen on
    host?: string;  // Host to bind to (default: localhost)
  },

  // List of enabled capabilities
  capabilities?: Array<
    'core' |    // Core browser automation
    'tabs' |    // Tab management
    'pdf' |     // PDF generation
    'history' | // Browser history
    'wait' |    // Wait utilities
    'files' |   // File handling
    'install' | // Browser installation
    'testing'   // Testing
  >;

  // Enable vision mode (screenshots instead of accessibility snapshots)
  vision?: boolean;

  // Directory for output files
  outputDir?: string;

  // Network configuration
  network?: {
    // List of origins to allow the browser to request. Default is to allow all. Origins matching both `allowedOrigins` and `blockedOrigins` will be blocked.
    allowedOrigins?: string[];

    // List of origins to block the browser to request. Origins matching both `allowedOrigins` and `blockedOrigins` will be blocked.
    blockedOrigins?: string[];
  };
 
  /**
   * Do not send image responses to the client.
   */
  noImageResponses?: boolean;
}

독립형 MCP 서버

디스플레이가 없는 시스템이나 IDE의 작업자 프로세스에서 헤더 브라우저를 실행하는 경우 DISPLAY가 있는 환경에서 MCP 서버를 실행하고 --port 플래그를 전달하여 SSE 전송을 활성화합니다.

npx @playwright/mcp@latest --port 8931

그런 다음 MCP 클라이언트 구성에서 url SSE 엔드포인트로 설정합니다.

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

참고: Docker 구현은 현재 헤드리스 크로미엄만 지원합니다.

{
  "mcpServers": {
    "playwright": {
      "command": "docker",
      "args": ["run", "-i", "--rm", "--init", "--pull=always", "mcr.microsoft.com/playwright/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);

  // ...
});

도구

도구는 두 가지 모드로 제공됩니다.

  1. 스냅샷 모드 (기본값): 더 나은 성능과 안정성을 위해 접근성 스냅샷을 사용합니다.

  2. 비전 모드 : 시각적 기반 상호작용을 위해 스크린샷을 사용합니다.

Vision Mode를 사용하려면 서버를 시작할 때 --vision 플래그를 추가하세요.

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

제공된 스크린샷을 기준으로, 비전 모드는 XY 좌표 공간을 사용하여 요소와 상호 작용할 수 있는 컴퓨터 사용 모델에서 가장 잘 작동합니다.

  • 브라우저 스냅샷

    • 제목: 페이지 스냅샷

    • 설명: 현재 페이지의 접근성 스냅샷을 캡처합니다. 스크린샷보다 낫습니다.

    • 매개변수: 없음

    • 읽기 전용: true

  • 브라우저 클릭

    • 제목: 클릭

    • 설명: 웹 페이지를 클릭합니다.

    • 매개변수:

      • element (문자열): 요소와 상호 작용할 수 있는 권한을 얻는 데 사용되는 사람이 읽을 수 있는 요소 설명

      • ref (문자열): 페이지 스냅샷의 정확한 대상 요소 참조

    • 읽기 전용: false

  • 브라우저 드래그

    • 제목: 드래그 마우스

    • 설명: 두 요소 사이에서 드래그 앤 드롭을 수행합니다.

    • 매개변수:

      • startElement (문자열): 요소와 상호 작용할 수 있는 권한을 얻는 데 사용되는 사람이 읽을 수 있는 소스 요소 설명

      • startRef (문자열): 페이지 스냅샷의 정확한 소스 요소 참조

      • endElement (문자열): 요소와 상호 작용할 수 있는 권한을 얻는 데 사용되는 사람이 읽을 수 있는 대상 요소 설명

      • endRef (문자열): 페이지 스냅샷의 정확한 대상 요소 참조

    • 읽기 전용: false

  • 브라우저_호버

    • 제목: 마우스를 올려주세요

    • 설명: 페이지의 요소 위에 마우스를 올려 놓으세요

    • 매개변수:

      • element (문자열): 요소와 상호 작용할 수 있는 권한을 얻는 데 사용되는 사람이 읽을 수 있는 요소 설명

      • ref (문자열): 페이지 스냅샷의 정확한 대상 요소 참조

    • 읽기 전용: true

  • 브라우저_유형

    • 제목: 텍스트 입력

    • 설명: 편집 가능한 요소에 텍스트를 입력합니다.

    • 매개변수:

      • element (문자열): 요소와 상호 작용할 수 있는 권한을 얻는 데 사용되는 사람이 읽을 수 있는 요소 설명

      • ref (문자열): 페이지 스냅샷의 정확한 대상 요소 참조

      • text (문자열): 요소에 입력할 텍스트

      • submit (부울, 선택 사항): 입력한 텍스트를 제출할지 여부(제출 후 Enter 키 누름)

      • slowly (부울, 선택 사항): 한 번에 한 글자씩 입력할지 여부입니다. 페이지에서 키 핸들러를 트리거하는 데 유용합니다. 기본적으로 전체 텍스트가 한 번에 채워집니다.

    • 읽기 전용: false

  • 브라우저 선택 옵션

    • 제목: 옵션 선택

    • 설명: 드롭다운에서 옵션을 선택하세요

    • 매개변수:

      • element (문자열): 요소와 상호 작용할 수 있는 권한을 얻는 데 사용되는 사람이 읽을 수 있는 요소 설명

      • ref (문자열): 페이지 스냅샷의 정확한 대상 요소 참조

      • values (배열): 드롭다운에서 선택할 값의 배열입니다. 단일 값 또는 여러 값일 수 있습니다.

    • 읽기 전용: false

  • 브라우저_누르기_키

    • 제목: 키를 누르세요

    • 설명: 키보드의 키를 누르세요

    • 매개변수:

      • key (문자열): 누르려는 키의 이름 또는 생성할 문자(예: ArrowLeft``a

    • 읽기 전용: false

  • 브라우저 대기

    • 제목 : 기다리다

    • 설명: 텍스트가 나타나거나 사라지거나 지정된 시간이 지날 때까지 기다립니다.

    • 매개변수:

      • time (숫자, 선택 사항): 대기 시간(초)

      • text (문자열, 선택 사항): 기다릴 텍스트

      • textGone (문자열, 선택 사항): 사라질 때까지 기다릴 텍스트

    • 읽기 전용: true

  • 브라우저 파일 업로드

    • 제목: 파일 업로드

    • 설명: 하나 또는 여러 개의 파일을 업로드합니다.

    • 매개변수:

      • paths (배열): 업로드할 파일의 절대 경로입니다. 단일 파일 또는 여러 파일일 수 있습니다.

    • 읽기 전용: false

  • 브라우저_핸들_대화 상자

    • 제목: 대화 처리

    • 설명: 대화 처리

    • 매개변수:

      • accept (boolean): 대화를 수락할지 여부.

      • promptText (문자열, 선택 사항): 프롬프트 대화 상자의 경우 프롬프트의 텍스트입니다.

    • 읽기 전용: false

  • 브라우저 탐색

    • 제목: URL로 이동

    • 설명: URL로 이동합니다

    • 매개변수:

      • url (문자열): 이동할 URL

    • 읽기 전용: false

  • 브라우저_뒤로_탐색

    • 제목: 돌아가기

    • 설명: 이전 페이지로 돌아가기

    • 매개변수: 없음

    • 읽기 전용: true

  • 브라우저_탐색_포워드

    • 제목: 앞으로 나아가세요

    • 설명: 다음 페이지로 이동합니다.

    • 매개변수: 없음

    • 읽기 전용: true

  • 브라우저_스크린샷_찍기

    • 제목: 스크린샷 찍기

    • 설명: 현재 페이지의 스크린샷을 찍습니다. 스크린샷을 기반으로 다른 작업을 수행할 수 없으므로, 작업에는 browser_snapshot을 사용하세요.

    • 매개변수:

      • raw (부울, 선택 사항): 압축하지 않고 PNG 형식으로 반환할지 여부입니다. 기본값은 false이며, JPEG 이미지를 반환합니다.

      • filename (문자열, 선택 사항): 스크린샷을 저장할 파일 이름입니다. 지정하지 않으면 기본값은 page-{timestamp}.{png|jpeg} .

      • element (문자열, 선택 사항): 사람이 읽을 수 있는 요소 설명으로, 요소의 스크린샷 권한을 얻는 데 사용됩니다. 제공하지 않으면 뷰포트의 스크린샷이 촬영됩니다. element가 제공된 경우 ref도 함께 제공해야 합니다.

      • ref (문자열, 선택 사항): 페이지 스냅샷의 정확한 대상 요소 참조입니다. 지정하지 않으면 뷰포트의 스크린샷이 생성됩니다. ref가 지정되면 요소도 지정해야 합니다.

    • 읽기 전용: true

  • 브라우저_PDF_저장

    • 제목: PDF로 저장

    • 설명: 페이지를 PDF로 저장

    • 매개변수:

      • filename (문자열, 선택 사항): PDF를 저장할 파일 이름입니다. 지정하지 않으면 기본값은 page-{timestamp}.pdf 입니다.

    • 읽기 전용: true

  • 브라우저 네트워크 요청

    • 제목: 네트워크 요청 목록

    • 설명: 페이지를 로드한 이후 모든 네트워크 요청을 반환합니다.

    • 매개변수: 없음

    • 읽기 전용: true

  • 브라우저 콘솔 메시지

    • 제목: 콘솔 메시지 받기

    • 설명: 모든 콘솔 메시지를 반환합니다.

    • 매개변수: 없음

    • 읽기 전용: true

  • 브라우저 설치

    • 제목 : config에 지정된 브라우저 설치

    • 설명: 설정에 지정된 브라우저를 설치합니다. 브라우저가 설치되지 않았다는 오류가 발생하면 이 메서드를 호출합니다.

    • 매개변수: 없음

    • 읽기 전용: false

  • 브라우저 닫기

    • 제목: 브라우저 닫기

    • 설명: 페이지를 닫습니다

    • 매개변수: 없음

    • 읽기 전용: true

  • 브라우저 크기 조정

    • 제목: 브라우저 창 크기 조정

    • 설명: 브라우저 창 크기 조정

    • 매개변수:

      • width (숫자): 브라우저 창의 너비

      • height (숫자): 브라우저 창의 높이

    • 읽기 전용: true

  • 브라우저 탭 목록

    • 제목: 목록 탭

    • 설명: 브라우저 탭 나열

    • 매개변수: 없음

    • 읽기 전용: true

  • 브라우저_탭_새로 만들기

    • 제목: 새 탭 열기

    • 설명: 새 탭을 엽니다

    • 매개변수:

      • url (문자열, 선택 사항): 새 탭에서 이동할 URL입니다. 지정하지 않으면 새 탭이 비어 있게 됩니다.

    • 읽기 전용: true

  • 브라우저_탭_선택

    • 제목: 탭 선택

    • 설명: 인덱스로 탭 선택

    • 매개변수:

      • index (숫자): 선택할 탭의 인덱스

    • 읽기 전용: true

  • 브라우저_탭_닫기

    • 제목: 탭 닫기

    • 설명: 탭 닫기

    • 매개변수:

      • index (숫자, 선택 사항): 닫을 탭의 인덱스입니다. 지정하지 않으면 현재 탭을 닫습니다.

    • 읽기 전용: false

  • 브라우저_생성_플레이라이트_테스트

    • 제목: 극작가 테스트 생성

    • 설명: 주어진 시나리오에 대한 극작가 테스트 생성

    • 매개변수:

      • name (문자열): 테스트의 이름

      • description (문자열): 테스트에 대한 설명

      • steps (배열): 테스트의 단계

    • 읽기 전용: true

  • 브라우저 화면 캡처

    • 제목: 스크린샷 찍기

    • 설명: 현재 페이지의 스크린샷을 찍습니다.

    • 매개변수: 없음

    • 읽기 전용: true

  • 브라우저 화면 마우스 이동

    • 제목: 마우스 이동

    • 설명: 마우스를 주어진 위치로 이동합니다.

    • 매개변수:

      • element (문자열): 요소와 상호 작용할 수 있는 권한을 얻는 데 사용되는 사람이 읽을 수 있는 요소 설명

      • x (숫자): X 좌표

      • y (숫자): Y 좌표

    • 읽기 전용: true

  • 브라우저 화면 클릭

    • 제목: 클릭

    • 설명: 마우스 왼쪽 버튼을 클릭하세요

    • 매개변수:

      • element (문자열): 요소와 상호 작용할 수 있는 권한을 얻는 데 사용되는 사람이 읽을 수 있는 요소 설명

      • x (숫자): X 좌표

      • y (숫자): Y 좌표

    • 읽기 전용: false

  • 브라우저 화면 드래그

    • 제목: 드래그 마우스

    • 설명: 마우스 왼쪽 버튼 드래그

    • 매개변수:

      • element (문자열): 요소와 상호 작용할 수 있는 권한을 얻는 데 사용되는 사람이 읽을 수 있는 요소 설명

      • startX (숫자): 시작 X 좌표

      • startY (숫자): 시작 Y 좌표

      • endX (숫자): 끝 X 좌표

      • endY (숫자): 끝 Y 좌표

    • 읽기 전용: false

  • 브라우저_화면_유형

    • 제목: 텍스트 입력

    • 설명: 텍스트를 입력하세요

    • 매개변수:

      • text (문자열): 요소에 입력할 텍스트

      • submit (부울, 선택 사항): 입력한 텍스트를 제출할지 여부(제출 후 Enter 키 누름)

    • 읽기 전용: false

  • 브라우저_누르기_키

    • 제목: 키를 누르세요

    • 설명: 키보드의 키를 누르세요

    • 매개변수:

      • key (문자열): 누르려는 키의 이름 또는 생성할 문자(예: ArrowLeft``a

    • 읽기 전용: false

  • 브라우저 대기

    • 제목 : 기다리다

    • 설명: 텍스트가 나타나거나 사라지거나 지정된 시간이 지날 때까지 기다립니다.

    • 매개변수:

      • time (숫자, 선택 사항): 대기 시간(초)

      • text (문자열, 선택 사항): 기다릴 텍스트

      • textGone (문자열, 선택 사항): 사라질 때까지 기다릴 텍스트

    • 읽기 전용: true

  • 브라우저 파일 업로드

    • 제목: 파일 업로드

    • 설명: 하나 또는 여러 개의 파일을 업로드합니다.

    • 매개변수:

      • paths (배열): 업로드할 파일의 절대 경로입니다. 단일 파일 또는 여러 파일일 수 있습니다.

    • 읽기 전용: false

  • 브라우저_핸들_대화 상자

    • 제목: 대화 처리

    • 설명: 대화 처리

    • 매개변수:

      • accept (boolean): 대화를 수락할지 여부.

      • promptText (문자열, 선택 사항): 프롬프트 대화 상자의 경우 프롬프트의 텍스트입니다.

    • 읽기 전용: false

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/microsoft/playwright-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server