mcpField
P
playwright-report-mcp

playwright-report-mcp

ローカル
github.com/hubertgajewski開発ツール02 日前に更新

playwright-report-mcp について

playwright-report-mcpは、テスト失敗の分析向けMCP サーバーです。Playwrightテストの実行や既存のJSONレポートの読み取りに対応し、失敗とエラー、添付ファイルを必要に応じて返します。ブラウザー操作用ではありません。

主な機能

  1. 01Playwrightテストスイートの実行
  2. 02テスト結果の構造化表示
  3. 03失敗テストとエラー詳細の抽出
  4. 04名前を指定したテスト添付ファイルの取得
  5. 05バックグラウンド実行の進捗確認

活用シーン

  1. 01完了済みCIテストの失敗分析
  2. 02テスト実行と失敗原因の確認
  3. 03失敗時のページ状態添付ファイルの確認

MCP 対応

MCPクライアントに、テスト実行、実行状態の確認、失敗テストの取得、添付ファイル内容の取得ツールを提供します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"hubertgajewski-playwright-report": {
"command": "npx",
"args": [
"-y",
"playwright-report-mcp"
],
"env": {
"PW_ALLOWED_DIRS": "<PW_ALLOWED_DIRS>",
"PW_RESULTS_FILE": "<PW_RESULTS_FILE>"
}
}
}
}
起動コマンドnpx -y playwright-report-mcp
設定が必要な環境変数
PW_ALLOWED_DIRSpath.delimiter-separated list of directories the per-call workingDirectory parameter may point at. Entries may be absolute or relative (resolved once against the server's launch cwd at startup). Defaults to '.' (authorizes only the launch directory).
PW_RESULTS_FILEAbsolute path override for the JSON reporter output file. Defaults to <workingDirectory>/test-results/results.json, computed per call.

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npmplaywright-report-mcp3.4.0

ツール

5

掲載時のツール一覧 · 3 週間前に更新

パラメーター型必須説明
envobjectいいえPlaywright 子プロセスの環境変数オーバーライドです。各キーは PW_ALLOWED_ENV に記載されている必要があります。危険な名前(NODE_*、NPM_CONFIG_*、PATH、プロキシ、シークレット)は常に拒否されます。値が get_run_status に表示されることはありません。
tagstringいいえタグフィルター。例:@smoke または @regression
specstringいいえSpec ファイルのパス。例:tests/navigation.spec.ts
waitbooleanいいえ返す前に完了を待ちます。デフォルトは true です。false に設定するとバックグラウンドで実行し、get_run_status で状態をポーリングします。
traceenumいいえPlaywright のトレースモードを強制し、playwright.config.ts を上書きします。on | off | on-first-retry | on-all-retries | retain-on-failure | retain-on-first-failure | retain-on-failure-and-retries
headedbooleanいいえブラウザーウィンドウを表示して実行します。省略するか false に設定すると、playwright.config.ts の設定が維持されます。Playwright に --no-headed フラグはないため、設定で headed が有効な場合、false にしてもヘッドレスモードにはなりません。
browserenumいいえChromium | Firefox | Webkit | Mobile Chrome | Mobile Safari
retriesintegerいいえ不安定なテストの最大再試行回数です。0 にすると再試行を無効にします。
timeoutintegerいいえテスト実行全体のタイムアウト(ミリ秒)です。デフォルトは 300000 です。
workersintegerいいえ並列ワーカー数(正の整数)です。
maxFailuresintegerいいえこの回数の失敗に達した時点で実行を停止します。
updateSnapshotsenumいいえスナップショットのベースラインを更新します。Playwright のデフォルトは "missing" です。"changed" は差異のあるスナップショットと欠落しているスナップショットを更新します。all | changed | missing | none
workingDirectorystringいいえPlaywright プロジェクトディレクトリです。絶対パス、または MCP サーバーの起動ディレクトリからの相対パスを指定します。デフォルトは "." です。PW_ALLOWED_DIRS 配下である必要があります。

詳細

Playwright Report MCP

Playwright テストを実行し、構造化された結果、失敗したテストの詳細、添付ファイルの内容を読み取る MCP(Model Context Protocol)サーバーです。テスト失敗の分析を行う AI エージェント向けに設計されています。

ライセンス:MIT Node.js:22+


目次


概要

Playwright Report MCP は、AI エージェントに Playwright テスト結果への、構造化されトークン効率の高いアクセスを提供します。テストスイートを実行し、JSON レポーターの出力を読み取り、エージェントが必要とする情報、つまり失敗したテスト、エラーの内容、関連する添付ファイルの内容を正確に提示します。

対象外の機能

ブラウザーを操作する Playwright MCP サーバーは数多くあります。ページの移動、要素のクリック、フォームへの入力、スクリーンショットの撮影などを行います。Playwright Report MCP はそのようなサーバーではありません。

ブラウザー自動化 MCPPlaywright Report MCP
例microsoft/playwright-mcp, executeautomation/mcp-playwrightこのプロジェクト
目的AI エージェントがブラウザーを操作できるようにするAI エージェントがテスト結果を読み取れるようにする
テストを実行するいいえはい
成功/失敗を返すいいえはい
エラーメッセージを提示するいいえはい
添付ファイルの内容を読むいいえはい

背景

既存の方法の問題点

デフォルトのレポーター(list/dot) — Playwright のデフォルトレポーターは、人が読みやすい出力を標準出力に表示します。簡潔ですが、添付ファイルのパスや再試行の内訳、構造化データがなく、情報が失われます。

HTML レポーター(report.html)— 自己完結型の SPA バンドルです(通常 2~50 MB)。テキストとして機械可読ではなく、どの LLM のコンテキストウィンドウも超過します。

results.json を直接読む方法 — 利用できますが、小規模なテストスイートでも完全な JSON レポートは 10,000~20,000 トークンになります。テストが失敗した場合、その大半は不要な成功テストのメタデータです。

Playwright Report MCP のアプローチ
  • results.json を失敗したテストのみに絞り込みます
  • エージェントがすぐに操作に利用できる、型付きの構造化 JSON を返します
  • 個々の添付ファイルを名前で公開し、エージェントが必要なものだけを取得できるようにします
  • CI パイプライン、人間、エージェント自身など、誰が生成した結果でも扱えます
トークンコストの比較(20 件のテストスイートで 1 件のテストが失敗した場合)

入力トークン数は、Claude のトークン化(JSON とテキストが混在するコンテンツでは、トークンあたり約 3~4 文字)に基づく概算です。

必要なものMCP なし — 方法トークン数(MCP なし)MCP あり — ツール呼び出しトークン数(MCP あり)削減量
エラーメッセージのみ — 実行中npx playwright testを実行し、標準出力を読む(list/dot)~500–1,200run_tests + get_failed_tests~300–500~2 倍
エラーメッセージのみ — 既存の結果results.json全体を読む~12,500–23,000get_failed_tests~300–500~25~45 倍
+ 失敗時のページ状態+ error-contextファイルを読む~15,000–26,000+ get_test_attachment('error-context')~2,800–3,500~4~7 倍
+ カスタムテキスト添付ファイル¹+ 添付ファイルを読む~16,200–28,500+ get_test_attachment ×2~3,300–5,500~4~5 倍
+ ページ全体の HTML スナップショット²+ スナップショットファイルを読む~41,000–103,000+ get_test_attachment~33,300–85,500~1.2 倍

¹ カスタムテキスト添付ファイル — たとえば、独自のフィクスチャでtestInfo.attach()を使って追加する AI による診断(約 500~2,000 トークン)やコンソールログ(約 200~500 トークン)です。

² ページ全体の HTML スナップショット — 失敗時にレンダリング済みページの HTML 全体を添付するカスタムフィクスチャです。大きなページでは、それだけで 30,000~80,000 トークンに達することがあり、MCP を使うかどうかに関係なくコストの大部分を占めます。

主なポイント:

  • 実行中は標準出力(list/dot)が簡潔ですが、エージェントが添付ファイルの内容を確認する手段がなく、詳細な分析には進めません。
  • results.jsonを直接読む場合、失敗したテストが 1 件だけでも約 12,500~23,000 トークンかかります。その大半は、エージェントが必要としない成功したテストのメタデータです。
  • MCP による最大の効果は中段の項目にあります。既存の結果からエラーメッセージとページ状態を取得する場合、トークンコストを約 4~45 分の 1にできます。
  • ページ全体の HTML スナップショットは、どちらの場合もコストの大部分を占めます。これを省略してerror-contextを使うことが、最も効果の大きい最適化です。
CI の失敗分析

主な用途は、CI パイプラインでテストを実行し、エージェントが後から結果を確認して失敗を診断することです。get_failed_testsは、実行を開始したのが誰であってもresults.jsonを読み込みます。再実行は不要です。


クイックスタート

1. npx でインストールする(推奨)

クローンやビルドの手順は不要です。npx がサーバーを自動的にダウンロードして実行します。

{
  "mcpServers": {
    "playwright-report-mcp": {
      "command": "npx",
      "args": ["-y", "playwright-report-mcp"],
      "type": "stdio"
    }
  }
}

または、ソースからビルドします。

git clone https://github.com/hubertgajewski/playwright-report-mcp.git
cd playwright-report-mcp
npm install && npm run build

2. Playwright プロジェクトに JSON レポーターを追加する

// playwright.config.ts
reporter: [
  ['json', { outputFile: 'test-results/results.json' }],
  ['html'], // keep any existing reporters
],

3. .mcp.jsonに登録する

{
  "mcpServers": {
    "playwright-report-mcp": {
      "command": "npx",
      "args": ["-y", "playwright-report-mcp"],
      "type": "stdio"
    }
  }
}

4. AI エージェントに依頼する

Playwright テストを実行して、何が失敗したか教えてください。


互換性

**Claude Code(CLI)**でテスト済みです。Claude Desktop、Cursor、Cline、Windsurf、Continue.dev など、stdio トランスポートをサポートする MCP 互換クライアントで動作するはずですが、これらでは検証されていません。

stdio サーバーは、1 つのエントリーポイントで MCP プロトコルの新旧両方の世代をサポートします。

  • モダン: プロトコルリビジョン2026-07-28。バージョンネゴシエーションを使うクライアント(たとえばversionNegotiation: { mode: "auto" })によって選択されます。
  • レガシー: 2025 年のリビジョンをサポートします。従来のinitializeハンドシェイクを使うクライアントによって選択されます。これは MCP クライアント SDK の既定の動作です。

最初のやり取りで、接続が存続する間に使う世代が決まります。サポートされていないリビジョンを指定したクライアントには、明示的なネゴシエーションエラーが返されます。サーバーが別の世代へ黙って切り替えることはありません。


ツール

プロジェクトスコープのツールでは、オプションの workingDirectory パラメーターを指定できます。詳しくは[マルチワークツリーのサポート](#multi-worktree-support)を参照してください。get_run_status は、wait: false を指定した run_tests の runId、または workingDirectory を使った最新の追跡対象の実行の検索を利用できます。

run_tests

Playwright テストスイートを実行し、合格・不合格の結果を構造化して返します。

入力型説明
workingDirectorystring(任意)Playwright プロジェクトのディレクトリです。絶対パス、または MCP サーバーの起動ディレクトリからの相対パスを指定します。デフォルトは "." です。PW_ALLOWED_DIRS の配下である必要があります。複数の worktree のサポートを参照してください。
specstring(任意)プロジェクトディレクトリからの相対パスで指定する仕様ファイルのパスです。例:tests/login.spec.ts。プロジェクトディレクトリの範囲内に収める必要があります。
browserenum(任意)Chromium、Firefox、Webkit、Mobile Chrome、Mobile Safari
tagstring(任意)タグフィルターです。例:@smoke
timeoutinteger(任意)テスト実行全体のタイムアウト(ミリ秒)です。デフォルトは 300000(5 分)です。長いテストスイートでは大きい値を、すぐに失敗させたい場合は小さい値を指定してください。このタイムアウトによって実行が停止された場合、ツールは一般的なゼロ以外の終了コードではなく、明示的なエラーを返します。
waitboolean(任意)返答する前に完了を待つかどうかを指定します。デフォルトは true です。false に設定すると、バックグラウンドで実行を開始し、get_run_status で状態を確認します。
updateSnapshotsenum(任意)スナップショットのベースラインを更新します。all、changed、missing、none のいずれかを指定します。Playwright のデフォルトは missing です。changed は、差異のあるものと欠落しているものを更新します。既存のベースラインを変更しない場合は省略してください。
headedboolean(任意)ブラウザーウィンドウを表示して実行します。省略するか false に設定すると、playwright.config.ts の設定をそのまま使用します。Playwright には --no-headed フラグがないため、設定で headed が有効になっている場合、false にしてもヘッドレス実行にはなりません。
workersinteger(任意)並列ワーカー数です。正の整数のみ指定できます。"50%" 形式の文字列にはまだ対応していません。
retriesinteger(任意)不安定なテストの最大再試行回数です。0 を指定すると再試行を明示的に無効にします。プロジェクトの設定を使用する場合は省略してください。
maxFailuresinteger(任意)指定した回数の失敗が発生した時点で実行を停止します。正の整数を指定してください。
envobject(任意)Playwright の子プロセスの環境変数にマージする、文字列から文字列へのマップです。各キーは PW_ALLOWED_ENV に記載されている必要があります。危険な名前やシークレットの名前は常に拒否されます。環境変数のオーバーライドを参照してください。
traceenum(任意)playwright.config.ts の設定を上書きして、Playwright のトレースモードを強制します。on、off、on-first-retry、on-all-retries、retain-on-failure、retain-on-first-failure、retain-on-failure-and-retries のいずれかを指定します。
返される内容:終了コード、実行統計、プロジェクトごとのステータス、所要時間、エラーを含む全テストの概要です。

wait が false の場合、runId、プロセスメタデータ、簡潔な数値の進捗状況、現在の results.json のステータスをすぐに返します。その runId を指定して get_run_status を呼び出し、state が completed、failed、または timedOut になるまでポーリングしてください。サーバーは stdout から [528/662] などの Playwright の進捗マーカーを解析し、raw stdout/stderr のテキストを破棄するため、ポーリングを繰り返してもトークン効率が保たれます。サーバーは、作業ディレクトリごとに追跡中の実行を 1 つまでとし、追跡中の実行数には全体の上限を設け、最近終了した実行の履歴を一定数だけ保持するため、非常に古い runId は期限切れになることがあります。

get_run_status

wait: false を指定して run_tests で開始した、非ブロッキング実行の現在のステータスを返します。

入力型説明
runIdstring (optional)run_tests wait=false が返す実行識別子です。指定すると、追跡中の特定の実行が選択されます。
workingDirectorystring (optional)runId を省略した場合、そのディレクトリで最後に追跡された実行を返します。一致するものがない場合は idle を返します。runId と併せて指定する場合、その実行のディレクトリと一致する必要があります。

両方のフィールドを省略すると、workingDirectory は "." がデフォルトになります。解決されたディレクトリで追跡中の実行がない場合、読み取り可能であれば、results.json のメタデータと最後に解析された統計情報に加えて state: "idle" を返します。この MCP サーバーを通じて開始されていない外部の npx playwright test コマンドについて、プロセスのスキャンは行いません。

返される内容:実行状態、追跡フラグ、pid、タイムスタンプ、経過時間、タイムアウト、コマンドメタデータ(executable、args、cwd)、任意の envKeys(上書きした名前のみ。値は含まれません)、progress: { current, total }、終了コード、シグナル、該当する場合は起動/タイムアウトエラー、results.json のパス/存在の有無/mtime/サイズ/最新性、および実行開始後にレポートが更新されている場合は解析済みレポート統計情報です。進捗がまだ表示されていない場合、current と total は null になります。終了した実行について読み取り可能な最終統計情報がある場合、進捗には算出された完了合計が設定されます。

get_failed_tests

最後の実行で失敗したテストを、エラーメッセージと添付ファイルのパスとともに返します。テストは再実行せず、既存の results.json を読み取ります。

入力型説明
workingDirectorystring (optional)複数の worktree のサポートを参照してください。デフォルトは "." です。

返される内容:失敗したテストの数、タイトル、ファイルパス、プロジェクトごとのステータス、エラーメッセージ、添付ファイルのパスです。

get_test_attachment

前回の実行で、指定したテストに添付された名前付きテキストファイルの内容を読み込みます。

入力型説明
workingDirectorystring (省略可)複数のワークツリーのサポートを参照してください。デフォルトは "." です。
testTitlestringレポートに表示されているテストの正確なタイトル
attachmentNamestring添付ファイル名。例:error-context、ai-diagnosis、page-html

戻り値:添付ファイルの内容をテキストとして返します。バイナリの添付ファイルと 1 MB を超えるファイルはエラーとして拒否されます。results.json に記録された添付ファイルのパスが、.. または別の場所を指す絶対パスによって workingDirectory の外に出る場合、そのパスは拒否されます。

list_tests

テストを実行せずに、すべてのテストとその spec ファイルおよびタグを一覧表示します。

入力型説明
workingDirectorystring (省略可)複数のワークツリーのサポートを参照してください。デフォルトは "." です。
tagstring (省略可)タグで絞り込みます。例:@smoke
envobject (省略可)run_tests と同じ、許可リストに登録された子プロセス環境変数のマップです。環境変数の上書きを参照してください。

添付ファイル

Playwright は、失敗したテストにファイルを自動的に添付します。get_test_attachment を使うと、名前を指定してテキスト形式の添付ファイルを読み込めます。

添付ファイル名ソースすべてのプロジェクトに存在
error-contextPlaywright の組み込み機能 — 失敗時点の YAML アクセシビリティツリーのスナップショットはい
screenshotPlaywright の組み込み機能 — PNG スクリーンショット(バイナリ形式のため読み取り不可)はい
videoPlaywright の組み込み機能 — WebM 動画(バイナリ形式のため読み取り不可)はい
カスタム添付ファイルフィクスチャ内で testInfo.attach() を使って追加しますプロジェクトによります

カスタムフィクスチャのないプロジェクトでは、error-context 添付ファイルが最も便利です。セットアップ不要で、失敗した瞬間のページを意味的かつ構造化された形式で確認できます。


インストール

npx 経由(推奨) — クイックスタートに記載されている npx 設定を使用します。ローカルへのインストールは不要です。

ソースからのインストール:

git clone https://github.com/hubertgajewski/playwright-report-mcp.git
cd playwright-report-mcp
npm install
npm run build

設定

プロジェクトのルートにある .mcp.json に追加します。

{
  "mcpServers": {
    "playwright-report-mcp": {
      "command": "npx",
      "args": ["-y", "playwright-report-mcp"],
      "type": "stdio"
    }
  }
}
環境変数
変数デフォルト説明
PW_ALLOWED_DIRS"."(起動ディレクトリのみを許可します)workingDirectory パラメーターが指定できるディレクトリを、path.delimiter で区切ったリストです。エントリーには絶対パスまたは相対パスを指定できます(起動時に起動時の cwd を基準に一度だけ解決されます)。
PW_ALLOWED_ENV未設定(env ツール引数は無効です)run_tests と list_tests が上書きできる環境変数名を、カンマで区切ったリストです。未設定または空の場合、env 引数はすべて拒否され、プロセスは起動されません。環境変数の上書きを参照してください。
PW_RESULTS_FILE<workingDirectory>/test-results/results.jsonJSON レポーターの出力ファイルの絶対パスです。設定すると、すべての呼び出しで呼び出しごとのデフォルト値より優先されます。

playwright.config.ts がデフォルト以外の場所にレポートを書き込む場合は、PW_RESULTS_FILE を設定してください。複数のワークツリーを使用する構成では、各 workingDirectory に独自の test-results/results.json が作成されるよう、未設定のままにしてください。

複数のワークツリーのサポート

run_tests、list_tests、get_failed_tests、get_test_attachment はすべて、省略可能な workingDirectory パラメーターを受け取ります。絶対パス、または MCP サーバーの起動ディレクトリからの相対パスを指定できます。get_run_status も runId を省略した場合は workingDirectory を受け取ります。runId が指定されている場合、workingDirectory も指定すると、その実行について記録されたディレクトリと一致する必要があります。これにより、再起動せずに、1 つの長時間稼働する MCP セッションから複数の git ワークツリーにまたがってテストを実行できます。

Playwright の設定は playwright test の起動時に実行される Node モジュールであるため、サーバーは許可リストを使ってこのパラメーターを制限します。workingDirectory に PW_ALLOWED_DIRS の範囲外のディレクトリを指定した呼び出しは、構造化されたエラーを受け取り、子プロセスは起動されません。

デフォルト(ワークツリーなし)。 PW_ALLOWED_DIRS は未設定のままにしてください。許可リストは "."、つまり起動ディレクトリのみになります。デフォルトの workingDirectory(同じく ".")も起動ディレクトリとして解決されます。設定は不要です。

兄弟ワークツリー。 .mcp.json で PW_ALLOWED_DIRS=".." を設定すると、起動ディレクトリのすべての兄弟ディレクトリが許可されます。相対パスのエントリーは起動時に起動時の cwd を基準に解決されるため、絶対パスを埋め込まずに、すべてのコントリビューターが同じ .mcp.json を使用できます。

{
  "mcpServers": {
    "playwright-report-mcp": {
      "command": "npx",
      "args": ["-y", "playwright-report-mcp"],
      "env": { "PW_ALLOWED_DIRS": ".." },
      "type": "stdio"
    }
  }
}

その後、呼び出しで任意の兄弟ワークツリーを指定します。

{
  "name": "run_tests",
  "arguments": { "workingDirectory": "../my-app-feat-auth" },
}

複数のプロジェクト。 各プロジェクトから MCP クライアントを起動してデフォルトの許可リストを使用するか、PW_ALLOWED_DIRS に共有親ディレクトリを設定し、呼び出しごとに workingDirectory を渡してください。許可リストのチェックはパスのセグメント境界で行われるため、/src/my-app を許可するエントリーが /src/my-app-evil を許可することはありません。

破壊的変更(2.x → next): PW_DIR 環境変数は削除されました。Playwright プロジェクト内から MCP クライアントを起動する(設定不要で、デフォルトの workingDirectory: "." が機能します)か、呼び出しごとに workingDirectory を渡し、それに応じて PW_ALLOWED_DIRS を設定してください。

環境の上書き

run_tests と list_tests は、省略可能な env マップを受け取り、Playwright を起動する前に MCP プロセスの環境へマージします。これにより、子プロセスには起動時の環境変数と親プロセスの環境変数に加えて、オペレーターが許可リストに登録した上書き値が渡されます。既存の変数を上書きせずに dotenv を読み込む Playwright 設定では、ツールから指定された値が保持されます。

env 引数は、オペレーターが .mcp.json で PW_ALLOWED_ENV を設定するまで無効です。これは PW_ALLOWED_DIRS と同じ封じ込めモデルです。人間がモデルに許可する操作の範囲を広げ、モデルがその範囲を独自に広げることはできません。

ハード拒否リストは許可リストより常に優先されます(比較では大文字と小文字を区別しません)。

  • 接頭辞 NODE_、LD_、DYLD_、NPM_CONFIG_(子プロセスは npx で起動され、npx は環境変数から npm の設定を読み取ります)
  • PATH、HOME、DOTENV_CONFIG_PATH
  • プロキシ変数 HTTP_PROXY、HTTPS_PROXY、ALL_PROXY、NO_PROXY、FTP_PROXY
  • PASSWORD、SECRET、TOKEN、API_KEY、ACCESS_KEY、CREDENTIAL、PRIVATE_KEY、AUTH_SOCK、AUTH_CONFIG のいずれかに一致する名前

キーは POSIX 名(^[A-Z_][A-Z0-9_]*$)である必要があります。値には NUL を含められず、最大 256 文字です。1 回の呼び出しで指定できるエントリーは最大 16 件です。ENV の値にはさらに ^[A-Za-z0-9._-]+$ という制限があり、POSIX シェルの起動ファイルパスとして使用できないようになっています(ENV=/tmp/evil.sh は拒否されます)。

シークレット(基本認証、パスワード、API キー)は、プロジェクトの .env または MCP の起動時環境変数に保持してください。ツール引数として渡すことはありません。get_run_status は上書きする名前を envKeys として一覧表示できますが、上書きする値は決して出力しません。envFile ツール引数はありません。

対象環境名(ENV=staging):

{
  "mcpServers": {
    "playwright-report-mcp": {
      "command": "npx",
      "args": ["-y", "playwright-report-mcp"],
      "env": {
        "PW_ALLOWED_DIRS": "..",
        "PW_ALLOWED_ENV": "ENV"
      },
      "type": "stdio"
    }
  }
}
{
  "workingDirectory": "playwright/typescript",
  "env": { "ENV": "staging" }
}

その他のプロジェクト切り替え用変数(TEST_ENV または BASE_URL):

{
  "mcpServers": {
    "playwright-report-mcp": {
      "command": "npx",
      "args": ["-y", "playwright-report-mcp"],
      "env": { "PW_ALLOWED_ENV": "TEST_ENV,BASE_URL" },
      "type": "stdio"
    }
  }
}
{ "env": { "TEST_ENV": "qa" } }
{ "env": { "BASE_URL": "https://stage.example.com" } }

要件

  • Node.js 22 以降
  • @playwright/test 1.40 以降
  • Playwright プロジェクトで JSON レポーターを設定していること

Playwright のデフォルトレポーター(ローカルでは list、CI では dot)は標準出力にのみ書き込みます。実行後に読み取れるファイルは生成されません。すでに使用しているレポーターに加えて、JSON レポーターを追加してください。

// playwright.config.ts
reporter: [
  ['json', { outputFile: 'test-results/results.json' }],
  ['html'],  // keep any existing reporters
  ['list'],
],

トラブルシューティング

No results.json found — run tests first

JSON レポーターが設定されていないか、別のパスに書き込まれています。playwright.config.ts に ['json', { outputFile: 'test-results/results.json' }] があることを確認してください。

list_tests parsed 0 tests from non-empty output

お使いの Playwright バージョンでは、--list の出力形式が変更されている可能性があります。Playwright のバージョンと標準出力の生データを添えて、課題を報告してください。

Attachment "..." is binary and cannot be returned as text

screenshot と video の添付ファイルはバイナリファイルです。get_failed_tests で添付ファイルのパスを取得し、必要に応じて直接開いてください。

Attachment "..." is too large to return inline

添付ファイルが 1 MB を超えています。get_failed_tests が返すパスからファイルを直接読み取ってください。


開発

npm test          # run tests once
npm run test:watch  # watch mode

ランタイムコードは src/ にあり、dist/ にコンパイルされます。テストには Vitest を使用しており、ヘルパーの重点的なユニットテストに加えて、InMemoryTransport を使った MCP ツールの統合テストも含まれます。通常のテストスイートの実行に、ビルド手順や Playwright のインストールは必要ありません。

リリースの作成

リリースは v* タグをプッシュすると作成されます。.github/workflows/release.yml がタグを検出し、タグが3つすべてのバージョンフィールドと一致することを確認してから、npm ci + npm run build + npm test を実行します。また、.github/release.yml に従って分類された自動生成ノート(機能/バグ修正/ドキュメント/依存関係/その他の変更)を含む GitHub Release を作成し、npm に公開します。続いて .github/workflows/publish-mcp.yml が workflow_run を介して Release の実行に連動し、server.json を MCP レジストリに公開します。main へのマージでは公開は実行されません。

バージョンは3か所に記載されており、タグをプッシュする前に3か所すべての値がタグと一致している必要があります。

  • package.json → version
  • server.json → トップレベルの version
  • server.json → packages[0].version

3か所すべてを1つの PR で更新し、リリースを作成する前に main にマージしてください。タグがこれらの値のいずれかと一致しない場合、release.yml は実行に失敗します。

手順:

# After the version-bump PR has merged to main:
git checkout main && git pull
git tag v1.0.5
git push origin v1.0.5
# → release.yml fires: verifies tag, builds, tests, creates GitHub Release, publishes to npm
# → publish-mcp.yml chains off Release and publishes server.json to the MCP registry

フロー:

  1. 3つすべてのバージョンフィールドを更新するバージョン更新 PR を作成します。これを main にマージします。
  2. バージョン更新のコミットに v<version> タグを付け、そのタグをプッシュします。
  3. release.yml がタグとバージョンの一致を確認し、npm ci を実行します。さらに、そのバージョンがすでに npm に公開されていないことを確認し、npm run build + npm test を実行して GitHub Release を作成した後、npm publish --access public --provenance で公開します。
  4. publish-mcp.yml は Release の workflow_run によって起動され、バージョンフィールドを再確認し、そのバージョンが MCP レジストリにまだ登録されていないことを確認してから、server.json を registry.modelcontextprotocol.io に公開します。

リポジトリシークレットは不要です。 npm と MCP レジストリはどちらも GitHub OIDC(npm の信頼されたパブリッシャー)を使用して認証します。npm の信頼されたパブリッシャーは、npmjs.com のパッケージの Settings → Publishing access → Trusted Publisher セクションで設定します。NPM_TOKEN シークレットは存在せず、必要もありません。

公開に失敗した場合の復旧: npm は既存のバージョンの再公開を拒否し、公開から72時間を過ぎると公開取り消しも制限します。何らかの理由で公開に失敗した場合は、新しい PR でパッチバージョンを次の番号に上げ、新しいリリースを作成してください。失敗したリリースを再実行しようとしないでください。


コントリビューション

バグ報告、プルリクエスト、開発環境のセットアップ、コミット規約については、CONTRIBUTING.md を参照してください。


ライセンス

MIT — Copyright (c) Hubert Gajewski

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。