🚀 Playwright MCP
Playwright MCPは、Playwrightを使用してブラウザ自動化機能を提供するモデルコンテキストプロトコル(MCP)サーバーです。このサーバーにより、LLMは構造化されたアクセシビリティスナップショットを通じてウェブページと対話でき、スクリーンショットや視覚調整済みのモデルを必要としません。
✨ 主な機能
- 高速かつ軽量:Playwrightのアクセシビリティツリーを使用し、ピクセルベースの入力は必要ありません。
- LLMに適している:ビジョンモデルは必要なく、純粋に構造化データで動作します。
- 決定論的なツール適用:スクリーンショットベースのアプローチで一般的な曖昧さを回避します。
📦 インストール
必要条件
- Node.js 18以上
- VS Code、Cursor、Windsurf、Claude Desktopまたはその他のMCPクライアント
インストール手順
まず、クライアントでPlaywright MCPサーバーをインストールします。典型的な設定は次のようになります。
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": [
"@playwright/mcp@latest"
]
}
}
}
VS Codeでのインストール
VS Code CLIを使用してPlaywright MCPサーバーをインストールすることもできます。
code --add-mcp '{"name":"playwright","command":"npx","args":["@playwright/mcp@latest"]}'
インストール後、Playwright MCPサーバーはVS CodeのGitHub Copilotエージェントで使用できるようになります。
Cursorでのインストール
ボタンをクリックしてインストール:

または手動でインストール:
Cursor Settings -> MCP -> Add new MCP Serverに移動します。好きな名前を付け、commandタイプでnpx @playwright/mcpコマンドを使用します。Editをクリックして設定を確認したり、コマンド引数を追加したりすることもできます。
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": [
"@playwright/mcp@latest"
]
}
}
}
Windsurfでのインストール
Windsuff MCPのドキュメントに従ってください。次の設定を使用します。
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": [
"@playwright/mcp@latest"
]
}
}
}
Claude Desktopでのインストール
MCPインストールのガイドに従って、次の設定を使用します。
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": [
"@playwright/mcp@latest"
]
}
}
}
Claude Codeでのインストール
Claude Code CLIを使用してPlaywright MCPサーバーを追加します。
claude mcp add playwright npx @playwright/mcp@latest
Qodo Genでのインストール
VSCodeまたはIntelliJでQodo Genチャットパネルを開きます -> Connect more tools -> + Add new MCP -> 次の設定を貼り付けます。
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": [
"@playwright/mcp@latest"
]
}
}
}
Saveをクリックします。
📚 ドキュメント
設定
Playwright MCPサーバーは次の引数をサポートしています。これらは上記のJSON設定の"args"リストの一部として提供できます。
> npx @playwright/mcp@latest --help
--allowed-origins <origins> ブラウザがリクエストを許可するオリジンのセミコロン区切りのリスト。デフォルトはすべて許可。
--blocked-origins <origins> ブラウザがリクエストをブロックするオリジンのセミコロン区切りのリスト。ブロックリストは許可リストの前に評価されます。許可リストなしで使用する場合、ブロックリストに一致しないリクエストは依然として許可されます。
--block-service-workers サービスワーカーをブロックします。
--browser <browser> 使用するブラウザまたはChromeチャネル。可能な値: chrome, firefox, webkit, msedge。
--browser-agent <endpoint> ブラウザエージェントを使用します(実験的)。
--caps <caps> 有効にする機能のカンマ区切りのリスト。可能な値: tabs, pdf, history, wait, files, install。デフォルトはすべて。
--cdp-endpoint <endpoint> 接続するCDPエンドポイント。
--config <path> 設定ファイルへのパス。
--device <device> エミュレートするデバイス。例: "iPhone 15"
--executable-path <path> ブラウザ実行ファイルへのパス。
--headless ブラウザをヘッドレスモードで実行します。デフォルトはヘッド付き。
--host <host> サーバーをバインドするホスト。デフォルトはlocalhost。すべてのインターフェースにバインドするには0.0.0.0を使用します。
--ignore-https-errors HTTPSエラーを無視します。
--isolated ブラウザプロファイルをメモリ内に保持し、ディスクに保存しません。
--image-responses <mode> 画像レスポンスをクライアントに送信するかどうか。"allow", "omit", "auto"のいずれか。デフォルトは"auto"で、クライアントが表示できる場合は画像を送信します。
--no-sandbox 通常サンドボックス化されるすべてのプロセスタイプのサンドボックスを無効にします。
--output-dir <path> 出力ファイルのディレクトリへのパス。
--port <port> SSEトランスポートでリッスンするポート。
--proxy-bypass <bypass> プロキシをバイパスするドメインのカンマ区切りのリスト。例: ".com,chromium.org,.domain.com"
--proxy-server <proxy> プロキシサーバーを指定します。例: "http://myproxy:3128" または "socks5://myproxy:8080"
--save-trace セッションのPlaywright Traceを出力ディレクトリに保存するかどうか。
--storage-state <path> 分離されたセッションのストレージ状態ファイルへのパス。
--user-agent <ua string> ユーザーエージェント文字列を指定します。
--user-data-dir <path> ユーザーデータディレクトリへのパス。指定されない場合は、一時ディレクトリが作成されます。
--viewport-size <size> ブラウザビューポートのサイズをピクセルで指定します。例: "1280, 720"
--vision スクリーンショットを使用するサーバーを実行します(デフォルトはAriaスナップショットを使用)
ユーザープロファイル
Playwright MCPは、通常のブラウザのように永続的なプロファイルで実行することも(デフォルト)、テストセッション用の分離されたコンテキストで実行することもできます。
永続的なプロファイル
すべてのログイン情報は永続的なプロファイルに保存され、オフライン状態をクリアしたい場合はセッション間で削除できます。永続的なプロファイルは次の場所にあり、--user-data-dir引数で上書きできます。
%USERPROFILE%\AppData\Local\ms-playwright\mcp-{channel}-profile
- ~/Library/Caches/ms-playwright/mcp-{channel}-profile
- ~/.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?: {
browserName?: 'chromium' | 'firefox' | 'webkit';
isolated?: boolean;
userDataDir?: string;
launchOptions?: {
channel?: string;
headless?: boolean;
executablePath?: string;
};
contextOptions?: {
viewport?: { width: number, height: number };
};
cdpEndpoint?: string;
remoteEndpoint?: string;
},
server?: {
port?: number;
host?: string;
},
capabilities?: Array<
'core' |
'tabs' |
'pdf' |
'history' |
'wait' |
'files' |
'install' |
'testing'
>;
vision?: boolean;
outputDir?: string;
network?: {
allowedOrigins?: string[];
blockedOrigins?: string[];
};
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
注意: Docker実装は現時点ではヘッドレスChromiumのみをサポートしています。
{
"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) => {
const connection = await createConnection({ browser: { launchOptions: { headless: true } } });
const transport = new SSEServerTransport('/messages', res);
await connection.sever.connect(transport);
});
ツール
ツールは2つのモードで利用できます。
- スナップショットモード(デフォルト): アクセシビリティスナップショットを使用して、より高いパフォーマンスと信頼性を実現します。
- ビジョンモード: 視覚ベースの対話にスクリーンショットを使用します。
ビジョンモードを使用するには、サーバーを起動する際に--visionフラグを追加します。
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": [
"@playwright/mcp@latest",
"--vision"
]
}
}
}
ビジョンモードは、提供されたスクリーンショットに基づいてXY座標空間を使用して要素と対話できるコンピューター使用モデルで最適に動作します。
インタラクション
-
browser_snapshot
- タイトル: ページスナップショット
- 説明: 現在のページのアクセシビリティスナップショットをキャプチャします。これはスクリーンショットよりも優れています。
- パラメーター: なし
- 読み取り専用: true
-
browser_click
- タイトル: クリック
- 説明: ウェブページでクリック操作を実行します。
- パラメーター:
element (文字列): 要素との対話の許可を取得するために使用される人間が読める要素の説明
ref (文字列): ページスナップショットからの正確なターゲット要素の参照
- 読み取り専用: false
-
browser_drag
- タイトル: マウスドラッグ
- 説明: 2つの要素間でドラッグアンドドロップ操作を実行します。
- パラメーター:
startElement (文字列): 要素との対話の許可を取得するために使用される人間が読めるソース要素の説明
startRef (文字列): ページスナップショットからの正確なソース要素の参照
endElement (文字列): 要素との対話の許可を取得するために使用される人間が読めるターゲット要素の説明
endRef (文字列): ページスナップショットからの正確なターゲット要素の参照
- 読み取り専用: false
-
browser_hover
- タイトル: マウスホバー
- 説明: ページ上の要素にマウスをホバーさせます。
- パラメーター:
element (文字列): 要素との対話の許可を取得するために使用される人間が読める要素の説明
ref (文字列): ページスナップショットからの正確なターゲット要素の参照
- 読み取り専用: true
-
browser_type
- タイトル: テキスト入力
- 説明: 編集可能な要素にテキストを入力します。
- パラメーター:
element (文字列): 要素との対話の許可を取得するために使用される人間が読める要素の説明
ref (文字列): ページスナップショットからの正確なターゲット要素の参照
text (文字列): 要素に入力するテキスト
submit (ブール値, オプション): 入力したテキストを送信するかどうか(Enterキーを押す)
slowly (ブール値, オプション): 1文字ずつ入力するかどうか。ページ内のキーハンドラーをトリガーするのに便利です。デフォルトでは、テキスト全体が一度に入力されます。
- 読み取り専用: false
-
browser_select_option
- タイトル: オプション選択
- 説明: ドロップダウンでオプションを選択します。
- パラメーター:
element (文字列): 要素との対話の許可を取得するために使用される人間が読める要素の説明
ref (文字列): ページスナップショットからの正確なターゲット要素の参照
values (配列): ドロップダウンで選択する値の配列。単一の値または複数の値にすることができます。
- 読み取り専用: false
-
browser_press_key
- タイトル: キー押下
- 説明: キーボードのキーを押します。
- パラメーター:
key (文字列): 押すキーの名前または生成する文字。例: ArrowLeft または a
- 読み取り専用: false
-
browser_wait_for
- タイトル: 待機
- 説明: テキストの出現または消失、または指定された時間の経過を待ちます。
- パラメーター:
time (数値, オプション): 待機する時間(秒)
text (文字列, オプション): 待つテキスト
textGone (文字列, オプション): 消失するのを待つテキスト
- 読み取り専用: true
-
browser_file_upload
- タイトル: ファイルアップロード
- 説明: 1つまたは複数のファイルをアップロードします。
- パラメーター:
paths (配列): アップロードするファイルの絶対パス。単一のファイルまたは複数のファイルにすることができます。
- 読み取り専用: false
-
browser_handle_dialog
- タイトル: ダイアログの処理
- 説明: ダイアログを処理します。
- パラメーター:
accept (ブール値): ダイアログを受け入れるかどうか。
promptText (文字列, オプション): プロンプトダイアログの場合のプロンプトのテキスト。
- 読み取り専用: false
ナビゲーション
-
browser_navigate
- タイトル: URLへの移動
- 説明: 指定されたURLに移動します。
- パラメーター:
- 読み取り専用: false
-
browser_navigate_back
- タイトル: 前のページに戻る
- 説明: 前のページに戻ります。
- パラメーター: なし
- 読み取り専用: true
-
browser_navigate_forward
- タイトル: 次のページに進む
- 説明: 次のページに進みます。
- パラメーター: なし
- 読み取り専用: true
リソース
-
browser_take_screenshot
- タイトル: スクリーンショットの撮影
- 説明: 現在のページのスクリーンショットを撮影します。スクリーンショットに基づいてアクションを実行することはできません。アクションには
browser_snapshotを使用してください。
- パラメーター:
raw (ブール値, オプション): 圧縮せずに返すかどうか(PNG形式)。デフォルトはfalseで、JPEG画像を返します。
filename (文字列, オプション): スクリーンショットを保存するファイル名。指定されない場合は、page-{timestamp}.{png|jpeg}になります。
element (文字列, オプション): 要素のスクリーンショットを撮影する許可を取得するために使用される人間が読める要素の説明。指定されない場合は、ビューポートのスクリーンショットが撮影されます。要素が指定された場合は、refも指定する必要があります。
ref (文字列, オプション): ページスナップショットからの正確なターゲット要素の参照。指定されない場合は、ビューポートのスクリーンショットが撮影されます。refが指定された場合は、elementも指定する必要があります。
- 読み取り専用: true
-
browser_pdf_save
- タイトル: PDFとして保存
- 説明: ページをPDFとして保存します。
- パラメーター:
filename (文字列, オプション): PDFを保存するファイル名。指定されない場合は、page-{timestamp}.pdfになります。
- 読み取り専用: true
-
browser_network_requests
- タイトル: ネットワークリクエストの一覧表示
- 説明: ページの読み込み以来のすべてのネットワークリクエストを返します。
- パラメーター: なし
- 読み取り専用: true
-
browser_console_messages
- タイトル: コンソールメッセージの取得
- 説明: すべてのコンソールメッセージを返します。
- パラメーター: なし
- 読み取り専用: true
ユーティリティ
-
browser_install
- タイトル: 構成で指定されたブラウザのインストール
- 説明: 構成で指定されたブラウザをインストールします。ブラウザがインストールされていないというエラーが発生した場合は、これを呼び出してください。
- パラメーター: なし
- 読み取り専用: false
-
browser_close
- タイトル: ブラウザの閉じる
- 説明: ページを閉じます。
- パラメーター: なし
- 読み取り専用: true
-
browser_resize
- タイトル: ブラウザウィンドウのリサイズ
- 説明: ブラウザウィンドウのサイズを変更します。
- パラメーター:
width (数値): ブラウザウィンドウの幅
height (数値): ブラウザウィンドウの高さ
- 読み取り専用: true
タブ
-
browser_tab_list
- タイトル: タブの一覧表示
- 説明: ブラウザのタブを一覧表示します。
- パラメーター: なし
- 読み取り専用: true
-
browser_tab_new
- タイトル: 新しいタブの開く
- 説明: 新しいタブを開きます。
- パラメーター:
url (文字列, オプション): 新しいタブで移動するURL。指定されない場合は、新しいタブは空白になります。
- 読み取り専用: true
-
browser_tab_select
- タイトル: タブの選択
- 説明: インデックスでタブを選択します。
- パラメーター:
index (数値): 選択するタブのインデックス
- 読み取り専用: true
-
browser_tab_close
- タイトル: タブの閉じる
- 説明: タブを閉じます。
- パラメーター:
index (数値, オプション): 閉じるタブのインデックス。指定されない場合は、現在のタブが閉じられます。
- 読み取り専用: false
テスト
- browser_generate_playwright_test
- タイトル: Playwrightテストの生成
- 説明: 与えられたシナリオに対するPlaywrightテストを生成します。
- パラメーター:
name (文字列): テストの名前
description (文字列): テストの説明
steps (配列): テストの手順
- 読み取り専用: true
ビジョンモード