Playwright E2E MCP について
Playwright E2E MCPは、Playwrightテストの診断と修正を行うMCPサーバー兼エージェントスキルです。失敗時の情報を調べ、テストを再実行して修正を検証し、CIレポートや履歴、不安定なテストも分析します。
主な機能
- 01Playwrightテストの実行と失敗診断
- 02CIレポート、トレース、失敗時の状態確認
- 03再実行による修正検証と失敗時の復元
- 04不安定なテストと実行履歴の分析
- 05テスト監査と不具合を導入したコミットの特定
- 06アクセシビリティとWeb Vitalsの検査
活用シーン
- 01トレースからテスト失敗やアプリの問題を診断
- 02ロケーターを修正し、再実行で変更を確認
- 03CI失敗の調査やリグレッションコミットの特定
- 04不安定なテストの検出とテスト変更の確認
MCP 対応
MCPサーバー兼エージェントスキルとして、対応クライアントにPlaywrightテストの実行、診断、修正、監査ツールを提供します。複数のMCPクライアントにローカル設定でき、READMEにはリモート専用クライアント向けのStreamable HTTPブリッジも記載されています。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
playwright-e2e-mcp
AI エージェントのためのテストドクター。
Playwright テストが失敗したら、AI が原因を突き止め、修正し、修正が機能することを証明します。
⭐ デバッグにかかる時間を節約できたら、スターを付けて、ほかの Playwright ユーザーにも見つけてもらいましょう。
はじめに · ツール · ツールリファレンス · GitHub Action · 設定 · 変更履歴 · コントリビューション
MCP サーバーであり、エージェントスキルでもあるこのツールは、AI アシスタント (Claude、Cursor、VS Code Copilot、Gemini、Codex)に、テストランナー、 失敗の原因を突き止めるツール、そして修正後に自分で確認する修正ツールを含む、Playwright のフルツールキットを提供します。ほかのツールでは、AI がブラウザーを操作できます。このツールなら、テストスイートを成功した状態に保てます。
❌ 導入しない場合 / ✅ 導入した場合
導入しない場合、エージェントは Timeout 5000ms exceeded waiting for getByTestId('checkout') を確認して、新しいセレクターを推測し、テストを編集して、うまくいくことを期待します。あるいは、実際のバグを残したままテストを「修正」します。
導入した場合、エージェントはテスト失敗時のページを読み取り、そのページ上で一意であると検証されたロケーターに置き換え、テストを再実行し、成功した場合にのみ編集を維持します。ボタンが本当になくなっている場合は、アプリのバグだと知らせます。
run-test ──────┐
load-report ───┴─▶ get-failure ──▶ suggest-fix (apply + re-run) ──▶ green
(CI job report) │ └─ refuses when the element is really gone (app bug)
└─ DOM at failure, failed requests, console errors
every run ──▶ analyze-history (flaky / broken / slow / which commit broke it)
test code ──▶ audit-tests (flake risks, ranked by history, verified rewrites)
red at HEAD ─▶ bisect-failure (runs it across git history, names the breaking commit)
主な機能
- 修正は推測ではなく、検証済みです。 修正を採用する前に毎回テストを再実行し、テストがまだ失敗する場合は元に戻します。
- 誠実です。 テストを通すために、実際のバグを覆い隠すことはありません。
- CI の失敗にも対応します。 CI ジョブのレポートとトレースを読み込み、同じ診断と修正を得られます。
- 根拠のある不安定性の診断。 不安定なテストの名前、原因が競合状態、共有状態、テスト順序のどれなのか、再現用のシードを示します。
- 軽量です。
coreツールセットでは、壊れたロケーターの特定と修正にかかったトークン数は約 5,500 で、Playwright MCP とシェルの組み合わせでは約 7,900 でした。19 個すべてのツールを読み込むと、各リクエストに定義が約 16k トークン追加されるため、使用するプロファイルだけを読み込んでください(ベンチマーク)。 - 無料のオープンソースです。 MIT ライセンスで、アカウント、API キー、テレメトリーは不要です。すべてのツールが無料です。任意の有料 Pro プランでは、ホスト型 CI 履歴が追加されます。
🚀 この MCP だけができること
ほとんどのテスト用 MCP では、AI がブラウザーを操作できます。Microsoft の Playwright MCP、Chrome DevTools MCP、ExecuteAutomation の mcp-playwright、Selenium MCP などがあり、ページ上の操作には最適です。しかし、2026 年 10 月時点で、以下のことができるものはありません。この MCP ならできます。
| 機能 | 得られるもの |
|---|---|
| 🛡️ チェック項目を減らす「修正」を防止 | check-test-change は変更後のテストを変更前のテストと比較し、アサーションの削除、テストのスキップ、.only の追加によってテストが成功するようにした修正をブロックします。また、より弱いマッチャー、長時間の固定待機、強制クリック、エラーの握りつぶしには警告します。同じチェックは CI でも guard として実行されます |
| 🧊 担当者と期限を設定した隔離 | quarantine は不安定なテストを実行・報告し続けながら、その失敗がビルドを妨げないようにします。修正担当者、理由、再びビルドを妨げるようになる日付も記録します |
| 🎯 テストを壊したコミットを特定 | bisect-failure は一時的なワークツリーで Git 履歴をさかのぼってテストを実行し、チェックアウトには触れずに、差分と失敗内容を添えて最初の問題コミットを特定します |
| 🧪 テストコードの不安定性リスクを監査 | audit-tests は長時間の固定待機、1 回限りのアサーション、await の不足、壊れやすいセレクターを見つけます。テストが実際にどれほど不安定だったかに基づいて優先順位を付け、安全な書き換えを適用してテストを再実行し、その効果を検証します |
| ✅ 修正の効果を自ら証明 | suggest-fix は失敗時の DOM 上で一意だと検証されたロケーターに置き換え、テストを再実行します。まだ失敗する場合は元に戻します。実際のアプリのバグを覆い隠すパッチは拒否します |
| 🔬 根拠を伴う不安定なテストの判定 | diagnose-flaky はリトライを無効にしてテストを繰り返し実行し、競合状態、共有状態、テスト順序のどれが原因かを判定します。依存するテストの名前と、問題を再現するシードも示します |
| 📈 すべての実行履歴を記録 | analyze-history は不安定、退行、失敗したテストに優先順位を付け、原因ごとに失敗をグループ化し、実行時間の長いテストを追跡して、それぞれが問題を起こし始めたコミットを特定します |
| 🏗️ CI の失敗をローカルで診断 | load-report は CI ジョブのレポートとトレース(シャード化されたものも含む)を読み込み、CI で発生した失敗にも同じ診断と検証済みの修正を適用できます |
| 💬 プルリクエストでワンクリック修正 | GitHub Action が CI で各修正を検証し、レビュー担当者がワンクリックで適用できる提案された変更として投稿します |
| ♿⚡ テストを返す監査 | アクセシビリティ(axe-core)と Web Vitals の監査では、各問題について検証済みのロケーターと、すぐに使える回帰テストまたは予算テストを返します |
ブラウザー MCP を置き換えるのではなく、併用できます。ブラウザー MCP がページを操作し、この MCP がテストスイートを成功した状態に保ちます。
質問できること
| AI への質問… | AI の動作 | |
|---|---|---|
| 🏃 | 「テストを実行して」 | テストスイートを実行し、失敗ごとにファイル、行、原因、修正のヒントを報告します。30 件のテストを失敗させている根本原因が 1 つなら、問題は 1 つとして表示されます。 |
| 🔍 | 「なぜ失敗したの?」 | Playwright のトレースを読み取ります。失敗した瞬間のページ、失敗したリクエスト、コンソールエラーを確認するため、推測に頼りません。 |
| 🛠️ | 「修正して」 | ページ上で一意だと確認されたロケーターに置き換え、テストを再実行します。それでも失敗する場合は、編集を元に戻します。ボタンが本当に存在しない場合は、隠さずアプリのバグだと伝えます。 |
| 🎲 | 「このテストは不安定?」 | さまざまな方法(繰り返し、単独、ランダムな順序)で再実行し、不安定さの原因となるテストとシードを正確に特定します。 |
| 📈 | 「最近、何が壊れてる?」 | ローカルの実行履歴を保存し、不安定なテスト、新たに壊れたテスト、常に壊れているテストを分類します。最も遅いテスト、日ごとの安定性、各テストが失敗するようになったコミットも表示します。 |
| ☁️ | 「CI が失敗したのはなぜ?」 | CI ジョブのレポートを読み込み(またはシャード化された blob レポートを統合し)、パスをチェックアウト先に対応付けて、ダウンロードしたアーティファクトからトレースを見つけます。CI の失敗でも、同じ診断と修正が使えます。 |
| ✍️ | 「このフローのテストを書いて」 | まず実際のページで手順をたどり、フローの遷移先(URL とアクセシビリティスナップショット)をアサーションで確認するテスト仕様を書き、合格することを確かめるために一度実行します。 |
| ♿ | 「このページのアクセシビリティを確認して」 | axe-core(WCAG 2.2 AA)を実行し、すぐに貼り付けられるロケーターと回帰テストを添えて、問題をそれぞれ報告します。 |
| ⚡ | 「このページが遅いのはなぜ?」 | デスクトップまたはスロットリングされたスマートフォンで Web Vitals(LCP、CLS、INP、TBT)を測定し、遅い要素と位置がずれる要素を特定して、予算テストを提示します。 |
| 🧪 | 「エラー状態を表示して」 | API の応答(500、空のリスト、遅い呼び出しなど)をモックし、AI が到達しにくい状態を調査、監査、測定できるようにします。 |
| 🔑 | 「ログインしてセッションを保存して」 | 一度ログインし(パスワードは環境変数から取得し、TOTP シークレットから認証コードを生成)、セッションが機能することを確認して、テストやページツールで使えるよう保存します。セッションの有効期限が切れるまでは再利用します。パスワードがチャットを経由することはありません。 |
| 🛡️ | 「その修正、ごまかしてない?」 | 変更されたテストを git と比較し、アサーションの削除やテストのスキップによって合格する修正を阻止します。 |
| 🧊 | 「この不安定なテストを隔離して」 | テストの実行と報告を続けながら、担当者と有効期限を設定して、ビルドの失敗を防ぎます。 |
| 🔐 | 「ログイン後のページをテストして」 | 保存済みセッション、ヘッダー、クリック/入力手順を使って、Chromium、Firefox、WebKit でログイン後のページを操作できます。また、HAR ファイルからネットワーク通信を記録または再生できます。 |
| 🤖 | 「CI で実行して」 | GitHub Action と ci コマンドが、診断結果、不安定性の判定、修正差分を PR に投稿します。 |
要件
- Node.js 22 以降
@playwright/testを使用し、ブラウザーをインストール済みのプロジェクト(npx playwright install chromium)- Claude Code、Claude Desktop、Cursor、VS Code、Windsurf、Codex、Gemini CLI、またはその他の MCP クライアント
はじめに
最速の方法: プロジェクトのルートで次を実行します。見つかったすべてのクライアント設定(Claude Code、Cursor、VS Code、Gemini CLI、Codex)にサーバーを追加し、エージェントスキルをインストールします。他のサーバーには手を加えません。
npx -y playwright-e2e-mcp init # --client all | cursor,vscode … · --dry-run
npx -y playwright-e2e-mcp doctor # checks Node, Playwright, browsers and client setup
エージェントにインストールを任せる方法もあります。 次の内容を任意のコーディングエージェントに貼り付けてください。
https://raw.githubusercontent.com/xsignon-secure/E2E/main/llms-install.md の手順に従って、playwright-e2e-mcp サーバーとスキルをインストールしてください。
標準設定は、ほとんどのクライアントで使用できます。
{
"mcpServers": {
"playwright-e2e": {
"command": "npx",
"args": ["-y", "playwright-e2e-mcp"]
}
}
}
サーバーは、作業ディレクトリをプロジェクトのルートとして使用します。クライアントが別の場所(ホームディレクトリなど)でサーバーを起動する場合は、"env": { "PW_MCP_PROJECT_ROOT": "/path/to/your/project" } を追加してください。
Claude Code
プラグインとしてサーバーとスキルをインストールする場合:
/plugin marketplace add xsignon-secure/E2E
/plugin install playwright-e2e-mcp@xsignon-secure
サーバーのみをインストールする場合:
claude mcp add playwright-e2e -- npx -y playwright-e2e-mcp
Claude Desktop
[latest release](https://github.com/xsignon-secure/E2E/releases/latest)から`.mcpb`拡張機能をダウンロードし、 ダブルクリックします。依存関係は同梱されているため、Nodeのセットアップは不要です。インストール時に **project root**を尋ねられます。ホームディレクトリではなく、プロジェクトフォルダーを選択してください。標準設定をclaude_desktop_config.jsonに追加することもできます。
Cursor
Install in Cursorをクリックするか、
Settings → MCP → Add new MCP serverに移動して、標準設定を貼り付けます。1つの
プロジェクトだけで使用する場合は、.cursor/mcp.jsonに記述します。
VS Code / GitHub Copilot
上のInstall in VS Codeボタンをクリックするか、次を実行します。
code --add-mcp '{"name":"playwright-e2e","command":"npx","args":["-y","playwright-e2e-mcp"]}'
Codex
codex mcp add playwright-e2e -- npx -y playwright-e2e-mcp
リトライを含むPlaywrightの実行は、Codexのデフォルトの60秒のツールタイムアウトを超えることがあります。~/.codex/config.tomlで
タイムアウトを延長してください。
[mcp_servers.playwright-e2e]
command = "npx"
args = ["-y", "playwright-e2e-mcp"]
startup_timeout_sec = 60
tool_timeout_sec = 600
Gemini CLI / Qwen Code
サーバーとスキルを拡張機能として追加します。
gemini extensions install https://github.com/xsignon-secure/E2E
または、標準設定を.gemini/settings.jsonに貼り付けます(Qwen Codeの場合は.qwen/settings.json)。
Windsurf、Cline、Zedなどのクライアント
標準設定をクライアントのMCP設定ファイルに追加します(Clineの場合はMCP Servers → Configure)。
Zedなど、コマンドを指定するクライアントでは、引数-y playwright-e2e-mcpを付けてnpxを実行します。
Freebuff / Codebuff
標準設定を記述したmcp.jsonを、プロジェクトの.agents/フォルダーに置きます。このリポジトリには
.agents/mcp.jsonが含まれているため、チェックアウトを開くと、ワークスペース全体で
サーバーが接続されます。Freebuffでは初回実行時に、リポジトリの.agents/を信頼するよう求められます。
ChatGPTなどのリモート専用クライアント
一部のクライアントは、リモートHTTPSサーバーのみを受け付けます。このリポジトリには、Vercelで無料でホストできるStreamable HTTPブリッジが含まれており、 claude.aiコネクター用のOAuthサインインにも対応しています。ホスト型エンドポイントをご覧ください。Vercelでは、ページツール(ページの検査、セレクターの確認、 アクセシビリティとWeb Vitalsの監査)は、公開URLを対象に同梱されたChromiumで実行されます。 自分のテストの実行や修正にはプロジェクトが必要なため、その場合はローカルインストールを使用してください。
その他のインストール方法
| 方法 | 手順 |
|---|---|
| 任意のエージェントでスキルのみを使用 | npx skills add xsignon-secure/E2E |
| MCP Registry | io.github.xsignon-secure/E2E (掲載ページ)。レジストリ対応クライアントはここから見つけられます |
| GitHubから直接インストール(npm不要) | npx -y github:xsignon-secure/E2E#v0.7.0(リリースタグを固定) |
| リリースのtarball | npm install -D https://github.com/xsignon-secure/E2E/releases/download/v0.7.0/playwright-e2e-mcp-0.7.0.tgz |
| Docker | docker run -i --rm -v "$PWD:/work" ghcr.io/xsignon-secure/playwright-e2e-mcp(各リリースで公開。詳細は開発を参照) |
| ローカルのチェックアウト | "command": "node", "args": ["/path/to/E2E/dist/index.js"] |
最初のプロンプト
クライアントを再起動してから、次のように依頼します。
Run my Playwright tests and fix whatever fails.
エージェントはテストスイートを実行し、失敗内容を読み取り、再実行して確認した修正案を提示するはずです。自分のテストを使わずに
セットアップを確認するには、このリポジトリのexamples/sample-test.spec.tsを実行するよう依頼してください。
0.7 の新機能
- 一度ログインすれば安全に利用できます:
save-loginは、環境変数から読み込んだシークレットを使ってサインインし(2FA コードを含む)、セッションを確認してstorageStateファイルとして保存します。セッションが有効な間は再利用します。 - 修正ガード:
check-test-changeとplaywright-e2e-mcp guardは、テストのチェックを減らすことで通過する「修正」(アサーションの削除、テストのスキップ、.only)をブロックします。 - 不安定なテストの隔離:
quarantineは、既知の不安定なテストが一定期間ビルドを失敗させないようにします。オーナーと理由を指定でき、その間もテストの実行とレポートは継続されます。
0.6 の新機能
- テストを壊したコミットを特定:
bisect-failureは一時的なワークツリーで Git の履歴をまたいでテストを実行し、最初に失敗したコミット、その変更内容、およびそこでの失敗内容を報告します。 - 不安定化リスクの監査:
audit-testsは、実際の不安定さに基づいて順位付けしながら、固定時間の待機、1 回限りのアサーション、awaitの不足、壊れやすいセレクターを検出し、安全な書き換えを適用して検証実行を行います。 - プルリクエストでワンクリック修正: GitHub Action が CI で各修正を検証し、提案された変更として投稿します。
doctor:npx playwright-e2e-mcp doctorは Node、Playwright、ブラウザー、クライアントの設定を確認します。- 構造化された結果: すべてのツールは Markdown とともに JSON を返し、出力スキーマを備えています。
- スマートフォン、タブレット、Chrome、Edge: すべてのページツールで
deviceプリセットとchannelを利用でき、Docker イメージはghcr.ioで公開されています。 - Node 22 以降が必須になりました。また、ホストされたエンドポイントではキーの推測が制限されています。
ツール
| ツール | 目的 |
|---|---|
run-test | Playwright テストを実行し、統計、失敗、診断、ヒントを返します。進捗を報告し、background: true を指定すると、長時間のテストスイート用に実行 ID を返します |
get-run-status | バックグラウンド実行の進捗または最終結果を確認します。完了を待つか、キャンセルできます |
get-failure | 1 件の失敗を詳細に分析します。スタック、期待値/実際の値、失敗時の DOM スナップショット(Playwright のトレースから取得)、失敗したリクエスト、コンソールエラー、次の手順を確認できます |
load-report | CI から実行結果を読み込みます。JSON レポート、またはシャーディングされた blob レポートのフォルダーを指定できます。CI のパスはチェックアウトに対応付けられ、展開されたアーティファクト内で見つかったトレースも利用できるため、get-failure、suggest-fix、diagnose-flaky が機能します。また、実行結果はコミット情報とともに履歴に追加されます |
suggest-fix | 失敗を修正します。ずれたロケーターは失敗時の DOM 上で一意であることが確認済みのロケーターに置き換えられ、曖昧なロケーター(strict mode 違反)には意図した一致要素の一意なロケーターが割り当てられ、変更された文言には新しい期待テキストが設定されます。apply: true を指定すると変更を適用してテストを再実行し、依然として失敗する場合は元に戻します |
inspect-page | URL をヘッドレスで開き(必要に応じてログイン後、手順を実行してから)、検証済みの Playwright ロケーター、CSS セレクター、表示状態、テキスト、コンソール出力を含む要素を返します。または、すぐに使える toMatchAriaSnapshot アサーションを備えたアクセシビリティスナップショットを返します |
list-tests | フィルターを適用して、利用可能なテスト(file、line、完全なタイトル、プロジェクト)を一覧表示します |
validate-selector | CSS セレクター、Playwright セレクター、またはロケーター式をライブページで検証し、有効性、一致数、一致要素ごとの、より堅牢で検証済みのロケーターを返します |
generate-e2e-test | 説明をもとに、プロジェクトの実際のセレクターとライブページで検証済みのロケーターを使って Playwright テストのひな形を作成します。または、ライブページで手順を追ってフローをたどり、合格を確認するために一度実行するテスト仕様を作成します |
compare-visual-state | ビジュアルリグレッションを確認します。変更前後のスクリーンショットを比較し、移動した対象と色の変化を報告します |
audit-accessibility | ページに対して axe-core を実行し(デフォルトは WCAG 2.2 AA)、ログイン後または手順の実行後に、違反を深刻度の高い順に、問題のある要素の検証済みロケーターとリグレッションチェックとともに返します |
audit-performance | ラボ環境のWeb Vitals(LCP、CLS、TBT、FCP、TTFB、手順実行中の INP)を測定します。スロットリングしたスマートフォンとしての測定や複数回実行の中央値の算出、評価または予算のチェック、LCP とレイアウトシフトする要素の検証済みロケーターによる特定、負荷の大きいリクエストとレンダリングをブロックするリクエストの一覧表示、予算テストの返却もできます |
diagnose-flaky | 失敗したテストをリトライを無効にして 2~10 回実行し、証拠に基づく判定(CONSISTENTLY FAILING、FLAKY、NOT REPRODUCING)を返します。並列実行やテスト順序に関するバグと競合状態を見分けます |
analyze-history | ローカルの実行履歴から不安定、リグレッション、破損したテストを順位付けし、原因別に失敗をグループ化して、実行時間の長いテストを一覧表示し、日ごとの安定性を示し、各テストが失敗し始めたコミットを特定します。または、1 つのテストのタイムラインを表示します |
audit-tests | テスト履歴をもとに、テストコードの不安定化リスク(長時間の固定待機、Web-first ではなく一度だけのアサーション、await の不足、.only、強制クリック、networkidle、要素ハンドル、レイアウトに依存するセレクター)を、テストの不安定さの度合いで順位付けして監査します。fix: true を指定すると、機械的に修正可能な箇所を書き換え、対象ファイルを再実行して、失敗した場合は元に戻します |
save-login | 一度ログインしてセッションを保存します(storageState)。{{env:E2E_PASSWORD}} と {{totp}}(環境内のシークレットから取得する認証アプリのコード)を使った手順、セッションが有効であることの確認、有効期限までの再利用に対応します。シークレットがチャットを経由することはありません |
check-test-change | 修復ガード:変更されたテストを Git と比較するか、提案された修正をファイルと比較し、アサーションの削除、テストのスキップや削除、.only があればブロックします。弱いマッチャー、長時間の固定待機、force: true、握りつぶされたエラー、タイムアウトやリトライの引き上げがあれば警告します |
quarantine | 担当者、理由、有効期限(デフォルトは 14 日)を指定して、不安定なテストを隔離します。テストは実行・報告され続けますが、エントリーの期限が切れるまでは、失敗しても run-test や ci は失敗しません。playwright-quarantine.json に保存されます |
bisect-failure | テストを破損させたコミットを特定します。正常なコミットと不良コミットの間で Git 履歴を二分探索し、一時的なワークツリーで各段階のテストを実行します(チェックアウトには影響しません)。最初の不良コミット、その変更内容、テストの失敗状況を報告します |
| 2 つのプロンプトが、クライアントでスラッシュコマンドとして表示できる主要なワークフローをまとめています。 | |
fix-failing-test と triage-flaky-tests です。 |
すべての引数と出力例は**ツールリファレンス**に記載されています。すべてのツールには
MCP ツールアノテーション(readOnlyHint、destructiveHint、…)が付いているため、クライアントは適切な安全性確認の
プロンプトを表示できます。
修正ループだけが必要ですか? --tools=core(または PW_MCP_TOOLS=core)を指定すると、7 つのツールが公開され、
ツール定義のコンテキストを約 4 分の 1 に削減できます。その他のプロファイル:triage、inspect、author。
一般的なワークフロー
run-test{ "testFiles": ["tests/checkout.spec.ts"] }を実行します。長時間かかるスイートの場合は{ "background": true }を指定し、完了するまでget-run-status{ "waitSeconds": 30 }を実行します。CI での 失敗の場合は、ジョブのアーティファクトをダウンロードし、代わりにload-report{ "report": "ci-artifacts/results.json" }を呼び出します。get-failure{ "index": 1 }で、コードフレーム、期待値と実際の値、失敗時の DOM スナップショット、失敗したネットワークリクエスト、ページのコンソールエラーを確認します。- ロケーターやテキストの変更には
suggest-fix{ "index": 1 }を実行します。差分を確認してから、{ "index": 1, "apply": true }を指定して書き込み、再実行で検証します。要素が見つからないと報告された場合は、 テストではなくアプリを修正します。 - 自動修正できない場合は、
inspect-page{ "url": "…", "view": "locators" }を実行します (適切な画面に移動するにはstorageStateまたはactionsを追加します)。その後、編集する前にvalidate-selectorで新しいロケーターを検証します。 - 失敗が断続的に発生しているように見える場合は、
diagnose-flaky{ "runs": 3 }で最新の証拠を集め、analyze-historyで以前の実行におけるテストの挙動を確認します ({ "view": "commits" }で問題が発生したコミットが分かります)。 - CSS またはコンポーネントの変更後は、
compare-visual-state{ "url": "…", "name": "checkout" }を実行します。 - 成功するまで、
run-test{ "lastFailed": true }で失敗したテストだけを再実行します。
新しいテストを書くには、inspect-page { "view": "locators" } でロケーターを探してから、
フローの description と steps を指定して generate-e2e-test を呼び出します。ライブページ上でステップを実行し、
テスト仕様を書き込んで一度実行します。ページの速度やアクセシビリティを確認するには、
audit-performance と audit-accessibility を使用します。
CI:GitHub Action と ci コマンド
同じ診断をエージェントなしで実行できます。playwright-e2e-mcp ci は
テストスイートを実行し(不安定なテストを失敗ではなく不安定として報告するため、一度自動再試行します)、
失敗に対する suggest-fix の差分案と不安定性の判定を任意で作成し、Markdown レポートを 1 つ、
標準出力、--output、および GITHUB_STEP_SUMMARY が設定されている場合は GitHub ジョブの
サマリーに出力します。終了コードは、成功が 0、テスト失敗が 1、実行自体の失敗が 2 です。
npx -y playwright-e2e-mcp ci --flaky-runs 3 --suggest 2 --output report.md
npx -y playwright-e2e-mcp ci --help
GitHub Action として使用すると、レポートをジョブのサマリーに追加し、実行が失敗した場合は PR コメントを 1 つ最新の状態に保ちます。プルリクエストでは、失敗した各テストを推奨修正で再実行し、 成功した修正を失敗行への変更提案として投稿します。レビュー担当者は提案をコミットボタンで適用できます (PR で変更された行のみが対象で、それ以外はレポートに残ります)。
permissions:
contents: read
pull-requests: write # for the PR comment and the suggested fixes
steps:
- uses: actions/checkout@v6
- uses: actions/setup-node@v6
with: { node-version: 24 }
- run: npm ci && npx playwright install --with-deps chromium
- uses: xsignon-secure/[email protected]
with:
flaky-runs: 3 # 0 skips the flaky verdict
suggest: 2 # suggest-fix diffs for the first 2 failures
# args: --browser chromium tests/checkout
アーティファクトのアップロードと、guard: true および Pro Cloud のコメントアウトされたオプションを含む、すぐにコピーして使える完全なワークフローが
examples/github-actions/playwright-e2e.yml にあります。
入力:project-root、args、flaky-runs、suggest、comment、review、
verify-fixes、guard、pro-key、pro-url、fail-on-failure、version、github-token。出力:exit-code、
report、guard。
隔離されたテスト(playwright-quarantine.json。詳細は quarantine を参照)もここで考慮されます。失敗したテストがすべて隔離され、期限切れでない場合、ci は終了コード 0 で終了し、レポートにそれらのテストを記載します。
CI での Heal guard。 guard: true を指定すると、まず PR で変更されたテストをベースブランチと照合し、
確認範囲を狭めることでテストを成功させていた場合はジョブを失敗させます。Action を使わない場合:
npx -y playwright-e2e-mcp guard --base origin/main # exit 1 on BLOCK; --strict fails on warnings too
設定
環境変数
| 環境変数 | デフォルト | 用途 |
|---|---|---|
PW_MCP_PROJECT_ROOT | server cwd | すべてのツールのデフォルトのプロジェクトルート |
PW_MCP_TOOLS | all | 公開するツールを、ツール名やプロファイルで指定します。カンマ区切りです(--tools= フラグと同じです)。プロファイル:core(run、status、failure、fix、flaky、heal guard、list)、triage(run、status、failure、CI report、flaky、history、test audit、bisect、quarantine、heal guard、list)、inspect(page、selector、accessibility、performance、visual、login)、author(list、page、selector、generate、run、login、heal guard)。19 個すべてのツール定義は、リクエストごとに約 16k トークンのコンテキストを消費します。core は約 5k です(PW_MCP_OUTPUT_SCHEMAS=0 の場合は、それぞれ 12k と 2.6k です) |
PW_MCP_OUTPUT_SCHEMAS | on | 0 にすると、コンテキストを節約するため、ツール一覧から出力スキーマを除外します。結果には引き続き structuredContent が含まれます(構造化された結果を参照) |
PW_MCP_STORAGE_STATE | — | ページツールで使用するデフォルトの storageState ファイル(プロジェクト内) |
PW_MCP_SHUFFLE_SEEDS | random | diagnose-flaky の order パスで使用する、カンマ区切りのシードです。診断で報告された順序を再現できます |
PW_MCP_LOGIN_ENV | — | save-login が {{env:NAME}} 経由で入力できる追加の環境変数です。カンマ区切りです。指定しない場合、使用できるのは E2E_*、TEST_*、PW_*、PLAYWRIGHT_*、LOGIN_* のみです |
PW_MCP_PRO_KEY / PW_MCP_PRO_URL | — | 任意の有料設定:Pro キーと Pro Cloud アドレスです。CI の実行結果は playwright-e2e-mcp upload(または Action の pro-key / pro-url 入力)でアップロードされ、analyze-history によってローカルの実行結果と統合されます。未設定(デフォルト)の場合、データが外部に送信されることはありません |
PW_MCP_HISTORY | on | 0 にすると、.playwright-e2e-mcp/history.jsonl への実行履歴の記録を停止します |
PW_MCP_ALLOWED_ROOTS | — | 呼び出し元が projectRoot として指定できる追加ディレクトリです(区切り文字は :、Windows では ;)。これらとデフォルトのルート以外は拒否されます |
PW_MCP_HTTP_TOKEN | — | HTTP ブリッジのみ:すべてのツールを利用可能にするベアラートークンです。16 文字以上、32 文字以上を推奨します(ホストされたエンドポイントを参照) |
PW_MCP_ALLOWED_HOSTS | トークンがない場合は localhost + Vercel のホスト名 | HTTP ブリッジのみ:カンマ区切りの Host 許可リストです。* を指定すると、すべてのホストを許可します |
PW_MCP_MAX_FAILED_AUTH | 20 | HTTP ブリッジのみ:クライアントアドレスごとに 15 分間に送信できる、不正なトークンまたはアクセスキーの数です。上限を超えると 429 が返されます |
PW_MCP_OAUTH_REDIRECT_HOSTS | 任意の https ホスト | HTTP ブリッジのみ:OAuth アプリのリダイレクト先として許可するホストのカンマ区切りリストです。例:claude.ai,chatgpt.com。.example.com はサブドメインも対象です。localhost は常に使用できます |
PW_MCP_TRUST_PROXY | off(Vercel では on) | HTTP ブリッジのみ:1 にすると、前段のリバースプロキシからの X-Real-IP / X-Forwarded-For を信頼します。これにより、サインイン制限はプロキシ単位ではなくクライアント単位で適用されます |
PW_MCP_PASSTHROUGH_ENV | — | HTTP ブリッジのみ:テスト実行に渡す追加変数のカンマ区切りリストです(例:BASE_URL) |
PW_MCP_MAX_CHILDREN | 4 | HTTP ブリッジのみ:同時に実行できるテスト実行とブラウザプローブの数です |
PW_MCP_BLOCK_PRIVATE_URLS | off(HTTP ブリッジでは on) | 1 にすると、URL ツールはループバック、プライベートネットワーク、クラウドメタデータのアドレスを拒否します。リダイレクト先とサブリソースも対象です |
PW_MCP_SERVERLESS_CHROMIUM | Vercel では on | 同梱のサーバーレス Chromium(@sparticuz/chromium、Linux x64、Node 22+)でページツールを起動します。0 にすると無効になり、1 にすると他の環境でも有効になります |
LOG_LEVEL / MCP_LOG_LEVEL | info | debug | info | warn | error | silent。両方が設定されている場合は LOG_LEVEL が優先されます |
LOG_FORMAT / MCP_LOG_FORMAT | text | text または json(ndjson も可)を指定すると、1 行ごとに構造化 JSON オブジェクトを出力します。ログ収集ツールですぐに取り込めます |
ログは常に stderr に出力されます。stdout は MCP プロトコル用に確保されています。認識されない値はデフォルトにフォールバックするため、LOG_LEVEL の入力ミスは info レベルでログを出力し、LOG_FORMAT の入力ミスはサーバーのログ出力を止めるのではなく、テキスト形式で出力します。LOG_FORMAT=json の場合、各行は単一のオブジェクト(time、level、message とコンテキスト)になります。 |
{"time":"2026-10-07T08:00:00.000Z","level":"info","message":"server ready","name":"playwright-e2e-mcp"}
ベンチマーク
bench/token-benchmark.mjs は、ストアフロントページのチェックアウトボタンのテスト ID を壊し、2 つの方法で修正します。このサーバーを使う方法(run-test → suggest-fix → 適用)と、Playwright MCP とシェルを使う方法(playwright test、browser_navigate + browser_snapshot、編集、再実行)です。最新の結果(全出力):
| ステップ | playwright-e2e-mcp(core ツール) | playwright-e2e-mcp(すべてのツール) | Playwright MCP + シェル |
|---|---|---|---|
| ツール定義(各リクエストで送信) | 4,826 | 16,121 | 5,225 |
| 失敗するテストを実行 | 244 | 244 | 323 |
| 要素を見つける/修正案を提示 | 232 | 232 | 2,286 |
| 適用+検証(再実行) | 230 | 230 | 34 |
| 修正 1 件の合計 | 5,532 | 16,827 | 7,868 |
トークン数は文字数 ÷ 4 です。作業そのもの(実行、診断、修正、検証)に必要なトークン数は、このサーバーでは約 700 ですが、Playwright MCP では約 2,600 です。ただし、ツール定義は各リクエストで送信されます。19 個すべてのツールを読み込むと、この削減分を上回るため、失敗するテストの修正だけを行う場合は PW_MCP_TOOLS=core(または別のプロファイル)を設定してください。Playwright MCP の方法は下限値です。エージェントがスナップショットから最初の試行で適切なロケーターを選ぶことを前提としており、このサーバーはここでそれを実行します。2026-10-28 に 0.7.0 と Playwright 1.64.1 で実行しました。npm run build && node bench/token-benchmark.mjs で再実行できます。
デモ
バンドルされている examples/sample-test.spec.ts に対して、npx -y playwright-e2e-mcp が stdio 経由で提供した、実際の run-test 呼び出し(実際の出力、編集なし):

無料のオープンソース
- MIT ライセンスです。 使用、変更、商用利用が可能で、料金はかからず、制限される機能もありません。オプションの Pro プランでは、ホスト型サービス(複数のマシンにまたがる CI 実行履歴)が追加されますが、ツールは追加されません。ここに記載されている機能に Pro プランは必要ありません。
- アカウント、API キー、登録は不要です。
npx -y playwright-e2e-mcp initだけでセットアップできます。 - テレメトリはありません。 外部への通信は行われません。Pro キーを設定してアップロードしない限り、テスト、トレース、実行履歴はお使いのマシンに保持されます。
- 依存関係はすべて無料です: MCP SDK(Apache-2.0)、zod(MIT)、axe-core(MPL-2.0)、およびプロジェクトにすでに含まれている Playwright(Apache-2.0)。
- セルフホストも無料です。 HTTP ブリッジは無料の Vercel アカウントにデプロイできます(ホスト型エンドポイントを参照)。
対応していないこと: 探索的なブラウジングセッションを段階的に操作するものではなく、VS Code 内で Playwright 独自の Test Agents に置き換わるものでもありません。対話的なブラウジングには Playwright MCP を、テストスイートの実行、診断、修正にはこのサーバーを使用してください。両者は併用できます。
その他のドキュメント
- ツールリファレンス:各引数、出力例、対応するエッジケース
- ホスト型エンドポイント:ChatGPT および claude.ai コネクター向けの HTTP ブリッジ
- セキュリティ:セキュリティモデルと脆弱性の報告方法
- 開発:ビルド、テスト、Docker、署名、リリース
- コントリビューション · 行動規範
ライセンス
MIT。このツールでデバッグにかかる時間を節約できたら、リポジトリに ⭐ を付けていただけると、ほかの Playwright ユーザーにも見つけてもらいやすくなります。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。