🚀 Playwright MCP
Playwright を使用してブラウザ自動化機能を提供するモデルコンテキストプロトコル (MCP) サーバーです。このサーバーにより、LLMは構造化されたアクセシビリティスナップショットを介してウェブページと対話でき、スクリーンショットや視覚調整されたモデルを必要としません。
✨ 主な機能
- 高速かつ軽量:Playwrightのアクセシビリティツリーを使用し、ピクセルベースの入力を必要としません。
- LLMに適している:ビジョンモデルは必要なく、構造化データのみで動作します。
- 決定論的なツール適用:スクリーンショットベースのアプローチで一般的な曖昧さを回避します。
📦 インストール
必要条件
- Node.js 18 以上
- VS Code、Cursor、Windsurf、Claude Desktop、Goose またはその他の MCP クライアント
始めるには
まず、クライアントで Playwright MCP サーバーをインストールします。典型的な設定は次のようになります。
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": [
"@playwright/mcp@latest"
]
}
}
}
VS Code でのインストール
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 でのインストール
ボタンをクリックしてインストールする:
または手動でインストールする:
Cursor Settings -> MCP -> Add new MCP Server に移動します。好きな名前を付け、command タイプで npx @playwright/mcp を使用します。Edit をクリックして設定を確認またはコマンド引数を追加することもできます。
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": [
"@playwright/mcp@latest"
]
}
}
}
Windsurf でのインストール
Windsurf 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
Goose でのインストール
ボタンをクリックしてインストールする:
または手動でインストールする:
Advanced settings -> Extensions -> Add custom extension に移動します。好きな名前を付け、STDIO タイプを使用し、command を npx @playwright/mcp に設定します。「Add Extension」をクリックします。
Qodo Gen でのインストール
Qodo Gen チャットパネルを VSCode または IntelliJ で開きます -> 「Connect more tools」 -> 「+ Add new MCP」 -> 次の設定を貼り付けます。
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": [
"@playwright/mcp@latest"
]
}
}
}
「Save」をクリックします。
Gemini CLI でのインストール
MCP インストール ガイドに従って、次の設定を使用します。
{
"mcpServers": {
"playwright": {
"command": "npx",
"args": [
"@playwright/mcp@latest"
]
}
}
}
📚 詳細ドキュメント
設定
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 トレースを出力ディレクトリに保存するかどうか。
--storage-state <path> 分離されたセッションのストレージ状態ファイルへのパス。
--user-agent <ua string> ユーザーエージェント文字列を指定します。
--user-data-dir <path> ユーザーデータディレクトリへのパス。指定されない場合、一時ディレクトリが作成されます。
--viewport-size <size> ブラウザビューポートのサイズをピクセルで指定します。例: "1280, 720"
--vision スクリーンショットを使用するサーバーを実行します (デフォルトは Aria スナップショットを使用します)
ユーザープロファイル
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?: {
// 使用するブラウザタイプ (chromium、firefox、または webkit)
browserName?: 'chromium' | 'firefox' | 'webkit';
// ブラウザプロファイルをメモリ内に保持し、ディスクに保存しない
isolated?: boolean;
// ブラウザプロファイルの永続化のためのユーザーデータディレクトリへのパス
userDataDir?: string;
// ブラウザ起動オプション (Playwright ドキュメントを参照)
// @see https://playwright.dev/docs/api/class-browsertype#browser-type-launch
launchOptions?: {
channel?: string; // ブラウザチャネル (例: 'chrome')
headless?: boolean; // ヘッドレスモードで実行する
executablePath?: string; // ブラウザ実行ファイルへのパス
// ... その他の Playwright 起動オプション
};
// ブラウザコンテキストオプション
// @see https://playwright.dev/docs/api/class-browser#browser-new-context
contextOptions?: {
viewport?: { width: number, height: number };
// ... その他の Playwright コンテキストオプション
};
// 既存のブラウザに接続するための CDP エンドポイント
cdpEndpoint?: string;
// リモート Playwright サーバーエンドポイント
remoteEndpoint?: string;
},
// サーバー設定
server?: {
port?: number; // リッスンするポート
host?: string; // バインドするホスト (デフォルト: localhost)
},
// 有効にする機能のリスト
capabilities?: Array<
'core' | // コアブラウザ自動化
'tabs' | // タブ管理
'pdf' | // PDF 生成
'history' | // ブラウザ履歴
'wait' | // 待機ユーティリティ
'files' | // ファイル処理
'install' | // ブラウザインストール
'testing' // テスト
>;
// ビジョンモードを有効にする (アクセシビリティスナップショットの代わりにスクリーンショットを使用)
vision?: boolean;
// 出力ファイルのディレクトリ
outputDir?: string;
// ネットワーク設定
network?: {
// ブラウザがリクエストを許可するオリジンのリスト。デフォルトはすべて許可です。`allowedOrigins` と `blockedOrigins` の両方に一致するオリジンはブロックされます。
allowedOrigins?: string[];
// ブラウザがリクエストをブロックするオリジンのリスト。`allowedOrigins` と `blockedOrigins` の両方に一致するオリジンはブロックされます。
blockedOrigins?: string[];
};
/**
* クライアントに画像応答を送信するかどうか。"allow"、"omit"、または "auto" のいずれかにできます。
* デフォルトは "auto" で、Cursor クライアントの場合は画像を省略し、その他のクライアントの場合は送信します。
*/
imageResponses?: 'allow' | 'omit' | 'auto';
}
スタンドアロン 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) => {
// ...
// SSE トランスポートを使用してヘッドレス Playwright MCP サーバーを作成する
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"
]
}
}
}
ビジョンモードは、提供されたスクリーンショットに基づいて X Y 座標空間を使用して要素と対話できるコンピューターユースモデルで最適に動作します。
インタラクション
-
browser_snapshot
- タイトル: ページスナップショット
- 説明: 現在のページのアクセシビリティスナップショットをキャプチャします。これはスクリーンショットよりも優れています。
- パラメーター: なし
- 読み取り専用: true
-
browser_click
- タイトル: クリック
- 説明: ウェブページでクリックを実行します。
- パラメーター:
element(文字列): 要素との対話の許可を取得するために使用する人間が読める要素の説明ref(文字列): ページスナップショットからの正確なターゲット要素の参照doubleClick(ブール値、オプション): 単一クリックの代わりにダブルクリックを実行するかどうか
- 読み取り専用: 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 に移動します。
- パラメーター:
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 が提供される場合、要素も提供する必要があります。
- 読み取り専用: 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
ビジョンモード
-
browser_screen_capture
- タイトル: スクリーンショットを撮る
- 説明: 現在のページのスクリーンショットを撮ります。
- パラメーター: なし
- 読み取り専用: true
-
browser_screen_move_mouse
- タイトル: マウスを移動する
- 説明: マウスを指定された位置に移動します。
- パラメーター:
element(文字列): 要素との対話の許可を取得するために使用する人間が読める要素の説明x(数値): X 座標y(数値): Y 座標
- 読み取り専用: true
-
browser_screen_click
- タイトル: クリックする
- 説明: マウスの左ボタンをクリックします。
- パラメーター:
element(文字列): 要素との対話の許可を取得するために使用する人間が読める要素の説明x(数値): X 座標y(数値): Y 座標
- 読み取り専用: false
-
browser_screen_drag
- タイトル: マウスをドラッグする
- 説明: マウスの左ボタンをドラッグします。
- パラメーター:
element(文字列): 要素との対話の許可を取得するために使用する人間が読める要素の説明startX(数値): 開始 X 座標startY(数値): 開始 Y 座標endX(数値): 終了 X 座標endY(数値): 終了 Y 座標
- 読み取り専用: false
-
browser_screen_type
- タイトル: テキストを入力する
- 説明: テキストを入力します。
- パラメーター:
text(文字列): 要素に入力するテキストsubmit(ブール値、オプション): 入力したテキストを送信するかどうか (後に Enter キーを押す)
- 読み取り専用: 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







