Playwright MCPは、スクリーンショットではなくアクセシビリティツリーを介してブラウザを操作するMCPサーバーです。本記事はWEBMARKSの自環境への接続実行ではなく、公式リポジトリとドキュメントの記述確認(2026-07-29確認)に基づきます。接続手順とログイン画面・動的サイトでの動作範囲、ヘッドレス実行時のつまずきポイントを設計論として整理します。

01結論:Playwright MCPで自動操作できる範囲とできない範囲

WEBMARKSは本記事の執筆時点で、Playwright MCPを自社の本番業務へ接続していません。ここから先は、公式リポジトリと公式ドキュメントの記述に基づく設計論として書きます。実際に使ってどうだったかという体感は書きません。

結論を先に3点でまとめます。

  • 接続はローカルプロセス(stdio)で完結し、Claude CodeならPlaywright MCPをclaude mcp addのコマンド1本で登録できます
  • ログイン画面のフォーム操作そのものは、他の画面と同じ手順で動きます。ただし「認証済み状態を外から渡す」設計に沿う場合に限られ、2要素認証やCAPTCHAへの対応はREADMEに記述がありません
  • ヘッドレス実行では、既定の永続プロファイルやDocker実装の対応範囲が変わり、事前確認が要ります
項目設計上できること設計上の限界
基本操作クリック・入力・フォーム送信・タブ操作をアクセシビリティスナップショット越しに実行スクリーンショットは行動の根拠に使えないと明記されている
ログイン保存済みセッションの再利用、既存タブへの接続2要素認証・CAPTCHA通過の手順はREADMEに記述なし
動的サイト明示的な待機ツールでレンダリング完了を待つiframe・Shadow DOM内要素の取得範囲は未記述
ヘッドレス実行--headlessフラグで有効化、Dockerでも稼働Docker実装は「現時点でヘッドレスChromiumのみ対応」と明記
Playwright MCPの接続と操作は、誰が・いつ・どの順で動くのか Playwright MCPの接続と操作を、人(開発者)・Claude Code・Playwright MCPサーバー・ブラウザの4者で時間軸に沿って示す図。①claude mcp addで登録、②browser_navigate等のツール呼び出し、③アクセシビリティスナップショットの取得、④結果をClaude Codeへ返す、の順に上から下へ進む。--headlessや--capsの指定で有効になる機能が変わる分岐点を横に添え、本文の表にない「誰が・いつ・どの順で動くか」を示す。 TIMELINE 接続から応答までは誰が・いつ・どの順で動くか 人(開発者) Claude Code Playwright MCP ブラウザ ①claude mcp addで登録 ②browser_navigate等を呼び出し ③スナップショットを取得 ④結果をClaude Codeへ返す --headless/--capsの指定で 有効になる機能が切り替わる 登録→呼び出し→取得→返却の4手順を、--headless/--capsの指定が横から変える
Playwright MCPの接続と操作の流れを表す時系列シーケンス図

Playwright MCPは、Microsoftが公開するMCPサーバーです(出典: 公式リポジトリ microsoft/playwright-mcp)。土台になっているのは、E2Eテスト用フレームワークPlaywrightのブラウザ制御機能です。

大きな設計判断は、操作の根拠をスクリーンショットではなくアクセシビリティツリーに置いたことです。README自体が「LLMフレンドリーで、視覚モデルを必要とせず、構造化データのみで動作する」と説明しています(出典: 公式リポジトリ)。

02Playwrightの接続手順|3ステップで有効化する

Claude Codeへ接続する場合、公式ドキュメントが示すstdio型MCPサーバーの追加構文に沿います(出典: Claude Code公式MCPドキュメント)。

# 1. サーバーを登録する(自分専用のlocalスコープが既定)
claude mcp add --transport stdio playwright -- npx @playwright/mcp@latest

# 2. 接続状態を確認する
claude mcp list

チームで共有する場合は--scope projectを付け、.mcp.jsonへ書き出します。この考え方は『MCPの選び方|権限と提供元で見る判断軸5つ』で扱ったscope設計と同じです。project scopeのサーバーは、Claude Codeが起動時に「承認待ち」として一覧に出します。実行者ごとに1回は個別承認が要ります(出典: Claude Code公式MCPドキュメント)。

ステップ実行する操作確認方法
①登録claude mcp addでPlaywright MCPをstdio型として追加するAdded ...という完了行が出る
②承認project scopeの場合はclaudeを対話的に起動して承認するclaude mcp list✔ Connectedと表示する
③挙動確認--headless--capsなど必要なオプションを引数へ足すbrowser_snapshotを一度呼び、想定通りの要素が返るか見る

npxはパッケージを都度取得するため、初回実行時にネットワークアクセスが発生します。オフライン環境や社内プロキシ配下では、--proxy-server--proxy-bypassを事前に設定します(出典: 公式リポジトリ)。

03ログイン画面はPlaywrightでどこまで動くか|4つの認証パターン

フォーム操作そのものに、ログイン画面特有の制限はありません。browser_fill_formbrowser_typeは、ログインフォームも他のフォームと同じ手順で入力します。問題になるのは「その先に認証済みの状態をどう維持・再利用するか」です。

公式READMEは、認証状態の扱いを4パターンで説明しています(出典: 公式リポジトリ)。

パターン仕組み何が必要かリスク
永続プロファイル(既定)ヘッドあり実行時、ログイン情報を含む状態をOS標準のキャッシュ領域に保存し続ける特別な指定は不要(既定動作)端末を共有すると前回のログイン状態が残る
--storage-stateクッキー・localStorageを書き出したファイルを分離セッションへ読み込ませる事前に取得済みの状態ファイルファイルに機微なクッキー・ヘッダーが残る
--user-data-dirユーザーデータディレクトリを指定し、独自の永続プロファイルを使う保存先ディレクトリの用意ディレクトリの管理・権限設計が別途要る
Browser Extension既存のブラウザタブへ接続し、人がログイン済みのセッションをそのまま使う拡張機能の導入人の操作中のブラウザと状態を共有する

Playwright本体のドキュメントも、認証状態の保存ファイルについて明確に警告しています。「なりすましに使われかねない機微なクッキーやヘッダーを含む可能性がある」という文言です。そのうえで、リポジトリへのコミットを強く戒めています(出典: Playwright公式ドキュメント)。

WEBMARKSの社内ルールは、資料に記載されたIDとパスワードでのログインを禁止し、保存も禁止しています。この考え方は、Playwright MCPの認証状態ファイルにもそのまま当てはまります。状態ファイルはID・パスワードそのものではありませんが、それを使えば本人としてログインし直せる点で、実質的に機微な認証情報と同じ扱いが要ります。

ログイン画面でPlaywright MCPが動くかどうかは、何が揃えば決まるのか ログイン画面でPlaywright MCPが動くかどうかを判定する分岐図。起点は「認証済み状態を外から渡せるか」という問い。はいの場合は永続プロファイル・storage-state・user-data-dir・Browser Extensionのいずれかに該当し、操作を継続できる「動く」へ進む。いいえでIDとパスワードのみの場合は認証情報の管理が課題として残り、いいえで2要素認証やCAPTCHAが挟まる場合は公式ドキュメントに記述がなく要検証という行き先になる。 BRANCH ログイン画面はどの条件が揃えば動くか ログイン画面を操作する 認証済み状態を 外から渡せるか はい いいえ(フォームのみ) いいえ+2FA/CAPTCHA 認証済み状態を渡す方法 ①永続プロファイル ②storage-state ③user-data-dir ④Browser Extension IDとパスワードのみを 直接入力するだけ 2要素認証や CAPTCHAが挟まる 動く(操作を継続) 認証情報の管理が 課題として残る 公式ドキュメントに 記述なし・要検証 動くかどうかは認証済み状態を渡せるかで決まる。2FA/CAPTCHAは未検証のまま残る
ログイン画面でPlaywright MCPが動くかどうかを判定する分岐図

READMEには、2要素認証やCAPTCHAをPlaywright MCPがどう扱うかの記述がありません。一般に、ヘッドレスブラウザは自動化ツールとして検知されやすく、ボット判定の対象になりやすいことが知られています。ただしPlaywright MCP自身が検知回避の機能を持つとは、公式文書のどこにも書かれていません。

04動的サイトでPlaywrightがつまずく場面|レンダリング待ちと検知

JavaScriptで内容が後から差し込まれる動的サイトでも、Playwrightのアクセシビリティツリーを使う設計自体は有利に働きます。DOMの更新に追随するため、決まった座標の画像を待つスクリーンショット依存の自動化より、要素の出現を検知しやすい設計です。

とはいえ、待つ責任は呼び出す側に残ります。browser_wait_forはテキストの出現または時間経過を待つツールです。browser_snapshotは呼び出した瞬間の状態しか返しません(出典: 公式リポジトリ)。レンダリングの完了を待たずにbrowser_snapshotを呼べば、まだ描画されていない要素はそのまま欠落します。

デバッグに使えるツールも用意されています。browser_console_messagesはコンソールログを返します。browser_network_requestsは読み込んだページのネットワークリクエスト一覧を返します(出典: 公式リポジトリ)。想定した要素が取得できないとき、まずこの2つで描画やAPI呼び出しが終わっているかを切り分けられます。

iframe内やShadow DOM内の要素を、アクセシビリティスナップショットがどこまで拾うかについては、公式READMEに直接の記述がありません。ブラウザ自体のアクセシビリティツリー生成に依存する部分のため、対象サイトごとに確認が要る領域として、ここでは断定を避けます。

ネットワークリクエストのモック機能(browser_route)は既定では無効です。--caps=networkを指定したときだけ使えます(出典: 公式リポジトリ)。動的サイトを決まった条件で再現性高く扱いたい場合、この機能の追加検証が視野に入ります。

05権限を絞る接続設計|Playwrightのcapabilityとdenyリスト

公式READMEは、Playwright MCP自体について「セキュリティの境界ではない」と明記しています(出典: 公式リポジトリ)。ファイルアクセス制限のオプションについても「LLMがワークスペース外へさまよい出ることを防ぐ利便性の防御であり、安全な境界ではない」と説明されています。

とりわけ注意が要るのがPlaywright側のコード実行系ツールです。browser_run_code_unsafeは、Playwrightサーバーのプロセス内で任意のJavaScriptを実行します。README自身がこの機能を「RCE相当」と表現しています(出典: 公式リポジトリ)。

Claude Code側は、MCPサーバーのツールをmcp__サーバー名__ツール名という形式で権限ルールの対象にできます。『Claude Codeの権限設定|allow・ask・denyの配分と設定例』で扱った枠組みがそのまま使え、危険度の高いツールだけを狙ってdenyへ回せます。

{
  "permissions": {
    "deny": [
      "mcp__playwright__browser_run_code_unsafe",
      "mcp__playwright__browser_file_upload"
    ],
    "ask": [
      "mcp__playwright__browser_navigate"
    ]
  }
}

Playwrightの機能は既定ですべて開いているわけではありません。--capsのオプトイン方式で有効化する分類は7つあります(出典: 公式リポジトリ)。

  • ネットワーク:browser_routeによるリクエストのモック
  • ストレージ:クッキー・localStorage・sessionStorageの取得や書き換え
  • DevTools:トレース記録・録画・要素ハイライト
  • 座標クリック:vision指定によるマウス座標操作
  • PDF生成:browser_pdf_save
  • テストアサーション:browser_verify_element_visibleなどの検証系
  • 設定確認:browser_get_configで最終的な設定値を取得

使わない分類を有効化しないことも、Playwright MCPの権限を絞る接続設計の一部です。

機密情報の扱いをさらに絞りたい場合、--secretsオプションでdotenv形式の秘密情報ファイルを指定できます(出典: 公式リポジトリ)。機能自体は用意されていますが、機密の保存場所を社内のどこに置くかは、社内ルールに沿って別途決める必要があります。隔離設計の考え方は『機密をAIエージェントに渡さない|gitignoreとフォルダ構成』で扱っています。

06Playwright MCPで実際につまずく3つのヘッドレス関連ポイント

WEBMARKSはPlaywright MCPを未接続のため、ここは公式ドキュメントの仕様から読み取れる、事前に押さえておくべき3点です。

1. 既定の永続プロファイルは、ヘッドあり実行が前提になっている。 READMEは「すべてのログイン情報が保存される永続プロファイル、セッション間で削除可能」と説明しますが、これは--isolatedを付けない場合の話です。分離モードでは「セッションごとに独立したプロファイルを使い、閉じるとストレージは失われる」と明記されています(出典: 公式リポジトリ)。ヘッドレスCIで毎回まっさらな環境から動かしたいなら分離モードと相性が良く、前回のログイン状態を引き継ぎたいなら不向きです。

2. Docker実行はヘッドレスChromium限定。 公式リポジトリは「Dockerによる実装は、現時点でヘッドレスChromiumのみサポートする」と明記しています(出典: 公式リポジトリ)。FirefoxやWebKitでの検証をヘッドレスCIに組み込みたい場合、Docker以外の実行方式を検討する必要があります。

3. stdio接続は、切れても自動で再接続しない。 Claude Code公式ドキュメントによると、HTTP・SSEサーバーは切断時に最大5回まで自動再接続します。stdioサーバーはローカルプロセスのため、自動では再接続されないと明記されています(出典: Claude Code公式MCPドキュメント)。npx起動のPlaywright MCPは既定でstdio接続のため、プロセスが落ちても次の呼び出しまで気づけないことがあります。

症状設計上の原因対処
ヘッドレスCIでログイン状態が引き継がれない--isolatedはセッションを閉じるとストレージを破棄する--storage-stateで事前取得した状態を明示的に渡す
DockerでFirefox・WebKitが動かないDocker実装はヘッドレスChromiumのみ対応Docker以外のホスト実行に切り替える
途中でツール呼び出しが応答しなくなるstdio接続はサーバー切断を自動再接続しないclaude mcp listで接続状態を確認し、必要なら再登録する
ヘッドレス実行の起動方式によって、時間の経過とともに何が起きるのか ヘッドレス実行時のつまずきを、起動から実行までの時間軸で示す分岐図。Playwright MCPの起動後、①ヘッドあり(既定)で永続プロファイルによりログイン状態を維持する経路、②ヘッドレス+isolatedでストレージなしから始まる経路、③ヘッドレス+Dockerでheadless Chromium限定になる経路の3つに分かれる。いずれの経路でも、時間が経ってstdio接続が切れると「自動再接続なし・次回呼び出しまで気づけない」という共通の結果に至る。 TIMELINE 起動方式によって、時間が経つと何が起きるか (上から下へ時間が経過) Playwright MCPを起動する ①ヘッドあり(既定) 永続プロファイルで ログイン状態を維持 ②ヘッドレス+isolated ストレージなしから 開始する ③ヘッドレス+Docker Chromium限定で 実行される 途中でstdio接続が 切れた場合 自動再接続なし。 次回呼び出しまで気づけない 起動方式が違っても、stdio接続が切れれば同じ結果に行き着く
ヘッドレス実行時のつまずきポイントを、起動から実行までの時間軸で描いた分岐フロー図

07Playwright MCPを導入する前のチェックリスト

  • Playwright MCPの登録コマンド(claude mcp add --transport stdio)を確認した
  • localprojectuserのどのスコープで登録するかを決めた
  • --capsで有効化する分類を、使う機能だけに絞った
  • browser_run_code_unsafeなど危険度の高いツールをdenyリストへ入れた
  • ログイン状態の再利用方法(永続プロファイル・storage-state・user-data-dir・拡張機能)を1つ選んだ
  • storage-stateファイルをGit管理・共有フォルダから除外した
  • ヘッドレスで動かす場合、--isolatedの有無とDockerの対応ブラウザを確認した
  • stdio接続が切れても自動再接続しないことを前提に、失敗時の検知手段を用意した

08FAQ

Playwright MCPは無料で使えますか

Playwright MCP自体はオープンソースとして公開されており、npx @playwright/mcp@latestで取得できます。別途費用が生じるとしたら、接続先のクラウド実行環境やプロキシなど周辺インフラの分です。

Playwright MCPはヘッドレスとヘッドあり、どちらで動かすべきですか

用途で決まります。ログイン状態を目視しながら育てたい開発段階はヘッドあり、CIで毎回同じ条件から始めたい場合はヘッドレス+--isolatedが向きます。

ログインが必要なサイトを、Playwright MCPは完全に自動化できますか

フォーム入力自体は動きます。ただし2要素認証やCAPTCHAをどう突破するかは公式ドキュメントに記述がなく、現時点では断定できません。

Claude Code以外のツールからもPlaywright MCPは使えますか

使えます。公式リポジトリは、Claude Code以外にCline・Codex・Cursor・VS Codeなど複数のMCPクライアント向けに接続例を公開しています。

セキュリティ的に最も注意すべき機能は何ですか

browser_run_code_unsafeです。公式READMEはこの機能を「RCE相当」と表現しており、denyリストに入れる候補として最優先です。

WEBMARKSは今、Playwright MCPを接続していますか

接続していません。本記事は公式リポジトリとドキュメントの記述確認(2026-07-29)に基づく設計論であり、自環境での接続・実行の記録はありません。