In Silico

AIエージェント

Playwright CLIとMCPの違い:コンテキストの消費と権限の境界

2026/9/24 (更新: 2026/10/11)

  • Playwright CLI
  • コーディングエージェント
  • ブラウザ自動化
  • Playwright MCP
  • MCP
  • Agent Skills
  • SKILL.md
  • tool search
  • code execution
  • agent-browser
  • アクセシビリティツリー
  • スナップショット
  • ツール定義
  • 段階的開示
  • シェルの許可
  • サンドボックス
  • allowed-tools
  • defer_loading
  • browser_find
  • browser_snapshot
  • トークン
  • README
  • シェル
  • スキーマ
  • Anthropic
  • Microsoft
  • Playwright
目次
背景・問い・要点
背景

コーディングエージェントにブラウザを触らせ、作った画面の動作確認や画面を通したテストを任せようとすると、最初の壁はツールの渡し方に現れる。エージェントがブラウザを操作するには、どんな操作ができるかの説明と、操作したあとのページの状態が要る。その両方を毎回エージェントのコンテキストへ入れる設計だと、接続した時点でツールの説明がコンテキストを埋め、操作のたびにページ全体の状態が積み上がる。

エージェントのコンテキストは有限で、本来はコードベースを読み、テストを書き、失敗の原因を推論するために使いたい。ブラウザのツールと画面の状態がその余地を奪うと、肝心の作業に回る分が減り、長い作業では途中でコンテキストが尽きる。往復のたびに同じ量を送るので、費用も作業の長さに比例して跳ねる。

この不便はツールの中身の善し悪しとは別の場所にある。ツールが正しく動いていても、渡し方がコンテキストを圧迫すれば、エージェントは自分の仕事に集中できない。

本稿は Playwright MCP と Playwright CLI を例に取る。押し込む側と取りに行く側の両方を Playwright チームが作っており、それぞれの README がその形にした理由を述べている。

問い

コーディングエージェントにツールを渡す経路は、ツールの説明と操作結果をコンテキストへ入れる設計から、どんな渡し方へ移りつつあるのか。

要点

エージェントにツールを渡す方法には、ツールの説明と操作結果をコンテキストへ押し込む形と、エージェントに必要な分だけ取りに行かせる形がある。設計は前者から後者へ動いている。 動かしているのは、エージェントのコンテキストが最も希少な資源になったことである。代償は、プロトコルが持っていたツールごとの区切り、すなわちツールごとのスキーマとホストがツールごとに挟む確認を失うことである。その分の守りは、シェルの外側にあるサンドボックスや承認で作り直す必要がある。

モデル・例示

ページを20回操作するエージェントのコンテキストの量

※ この節の数値は説明のための仮定で、測定値ではありません。

ブラウザを20回操作する作業を考える。ページ全体のアクセシビリティツリーは8,000トークン、操作のたびに返る短い応答は200トークンとする。

押し込む形では、操作のたびに短い応答にページ全体のツリーが付いてコンテキストへ入るので、20回で(200+8,000)×20=164,000トークンになる。取りに行く形では、応答は短い節とファイルへの参照だけで200×20=4,000トークン、そのうえでエージェントが5回だけ、ページの一部を1,000トークンずつ読みに行くとすると5,000トークンが足され、合わせて9,000トークンで済む。

ただし、作業が毎回ページ全体を見直す必要のあるものなら、取りに行く形でも20回とも8,000トークンを読みに行き、短い応答の分と合わせて164,000トークンと押し込む形に並び、節約は消える。取りに行く形がコンテキストを節約できるかは、エージェントが実際に要るのがページのどれだけかで決まる。

CLIとスキルが後から出荷され、READMEはコーディングエージェントにそちらを勧めた

Playwright チームは、MCP サーバーの次に CLI とスキルを出荷し、コーディングエージェントにはそちらを勧める文を README に置いた。CLI の README は「モダンなコーディングエージェントは、MCP よりも SKILL として公開された CLI ベースのワークフローを好むようになりつつある」と書き、理由を、大きなツールスキーマと冗長なアクセシビリティツリーをモデルのコンテキストへ読み込まずに済むトークン効率に置く1。README はこの文に続けて、CLI とスキルの組み合わせは、大きなコードベースとテストと限られたコンテキストでの推論をブラウザ自動化と両立させねばならないコーディングエージェントに向く、と書く1。同じ文は MCP 側の README にもある2。

Playwright MCP と Playwright CLI は土台を共有する。Playwright MCP は Microsoft の Playwright チームが2025年3月21日にリポジトリを作った MCP サーバーである。スターは2026年9月22日時点で37,440である2。Playwright CLI は同じ Playwright チームのコマンドラインツールである。リポジトリは旧 playwright-cli のもので、作成日は2020年6月である。npm の @playwright/cli は2026年1月26日に公開が始まった。2026年9月22日時点で直近の版は2026年9月18日の v0.1.21、スターは13,477である1。どちらも、Microsoft が2020年から保守するブラウザ自動化ライブラリ Playwright の上に載る。エージェント向けのブラウザ CLI を出しているのは Playwright チームだけではない。Vercel Labs の agent-browser は自らを「AI エージェント向けのブラウザ自動化 CLI」と名乗り、refs つきのアクセシビリティツリーを返す3。CLI をエージェントへ渡す形式の Agent Skills は、Anthropic が開発し、2025年12月18日に open standard として公開した。仕様のサイトは、増えつつあるエージェント製品がこの形式を採用したと書く4。

Playwright チームは MCP を捨てていない。CLI の README は、MCP が残る場所を「持続状態、豊かな内省、ページ構造に対する反復推論から利益を得る専門的なエージェントループ」と書き、探索的な自動化、自己修復するテスト、長時間の自律ワークフローを例に挙げる1。ブラウザのコンテキストを保ち続ける利益がトークン費用を上回る場面が MCP の居場所で、コーディングエージェントには CLI のほうが適する、という切り分けである。二つを分けたのは、同じアクセシビリティツリーをコンテキストへ入れる経路である。ツリーの中身も削られており、2026年7月9日の両者の版はどちらもスナップショットを簡潔にしてトークンを減らしたと書く12。

既定で全体を応答に付けるMCPと、ファイルへ書いて取りに行かせるCLIは、それぞれ何を狙ったか

README は Playwright MCP の狙いを、LLM に「構造化されたアクセシビリティスナップショット」を通じてウェブページを操作させることだと書く2。画面の絵ではなく構造を読ませる選択であり、そのおかげでツールの適用が決定的になり、スクリーンショットに基づく方式のあいまいさを避けられる2。本稿が見る弱みはその先にある。構造を渡す経路が、コンテキストへの押し込みになっている。--snapshot-mode は、応答にスナップショットを付けるかどうかを決める。値は “full” か “none”、既定は “full” で、操作のたびにページ全体のツリーが応答としてコンテキストへ入る2。ツール定義については、Anthropic の記事が「MCP クライアントの多くはツール定義を全件、前もって直接コンテキストへ読み込む」と書く5。README は既定を “full” にした理由を書いていない。

Playwright CLI が狙うのは、README の言葉で言えば「トークン効率が良い。ページのデータを LLM に押し込まない」ことである1。強みは、コンテキストに入る量をエージェントの側が決められることである。操作のたびにページ全体がコンテキストへ入る問題を解くために、各コマンドのあとの応答は、ページの URL と題、生成された Playwright コード、そしてスナップショットを書き出したファイルへのリンクという短い節からなり、ページ全体のツリーは応答に入らない16。深いツリーでコンテキストに入る量を抑えるために、snapshot --depth=N は深さを限って取る。README の注釈は「効率のためにスナップショットの深さを制限する」である1。特定の要素の下だけが要るときは snapshot <ref> がその範囲を取り、大きなスナップショットを丸ごと取る代わりに検索したいときは find <text> が合致した節を前後3行の文脈つきで返す1。弱みは、コンテキストの外に置いたものは、エージェントが取りに行くまで見えないことである。ページの状態を見落とすかどうかは、エージェントが深さや検索語を正しく選べるかにかかる。

CLI をエージェントへ渡す側のスキルも、同じ方向の機構を持つ。Agent Skills の仕様は「エージェントはスキルを段階的に読み込み、作業が求めるときにだけ詳細を取り込む」と書く4。読み込みは三段になっている。起動時には全スキルの名前と説明だけを読み込み、このメタデータは1本につき約100トークン。発動したときに SKILL.md の本文を読み込み、推奨は5,000トークン未満。資料は必要になったときだけ読む4。playwright-cli のスキルは、二段目にコマンドの使い方と応答の形を置き、テストの実行や録画などの手順は三段目の references/ 配下に分けて必要なときだけ読ませる6。

Anthropic が2025年11月4日に公開した記事は、「MCP クライアントの多くはツール定義を全件、前もって直接コンテキストへ読み込む」問題に対し、モデルがツールを呼び出すコードを書いて実行環境で走らせる解を示す。例として挙げる場面では150,000トークンが2,000トークンに減り、記事はこれを「98.7%の時間と費用の削減」と書く5。記事自身も「段階的開示」の節で、ツールをファイルシステム上のコードとして置けばモデルは定義を必要なときに読める、代わりに検索用のツールをサーバーへ足してもよい、と二つの経路を並べる5。本稿の見立てでは、Playwright CLI とスキルの組み合わせは、前者の経路をシェルとファイルシステムで実現したものに当たる。

ツールごとの型が、playwright-cliを任意の引数で呼ぶシェルの許可に置き換わり、境界の作り直しが残る

失うのはツールごとの区切りである。MCP ではツールごとに型付きのスキーマがあり、ホストはツールごとに確認を挟める。CLI とスキルでは、この区切りがシェルの許可に置き換わる。Agent Skills の仕様は allowed-tools を「実行を事前承認するツールの一覧」と定義し、実験的な項目で対応は実装により異なると注記する4。playwright-cli のスキルの frontmatter は allowed-tools: Bash(playwright-cli:*) Bash(npx playwright:*) Bash(npx --no-install playwright:*) と書く6。事前承認するのは playwright-cli と npx playwright を任意の引数で呼ぶシェルの許可で、ツールごとの型は無い。SKILL.md はこの範囲を選んだ理由を書いていない。ただし MCP 側の型も、それだけでは守りにならない。Playwright MCP の README は自らを「セキュリティ境界ではない」と書き、既定のツールに任意の JavaScript を走らせる browser_run_code_unsafe を置いて「RCE 相当」と注記する2。差は既定の許可の細かさにあり、Bash(playwright-cli:*) は run-code と eval も、ほかのコマンドと同じ一つの許可で事前承認する6。シェルの許可も細かく切れる。Claude Code の文書は Bash(git log *) が git log だけを許すと書き、確認を求める規則は事前承認より先に効く7。

この置き換えの負担は、Anthropic 自身が code execution について書く。「エージェントが生成したコードを走らせるには、適切なサンドボックス、資源制限、監視を備えた安全な実行環境が要る。こうした基盤の要件は、直接のツール呼び出しには無い運用負荷と安全上の考慮を加える」5。コンテキストから押し出したものは消えるのではなく、シェルの外側へ移る。

スキルの側の境界については、Li らが2026年4月3日に arXiv へ投稿した論文が、Agent Skills の構造そのものに由来する脅威を「データと命令の境界の欠如」「一回の承認で持続する信頼モデル」「マーケットプレイスの必須審査の欠如」の三つに挙げ、「漸進的な緩和だけでは対処できない」と結論する8。同じ論文は MCP との違いを、自然言語の命令担体、型付きインターフェース契約の欠如、一回の承認で持続する信頼モデルの三つに置き、MCP クライアントが課しうる操作ごとの確認が無いと書く8。論文が言う一回の承認はスキルを導入するときの承認である。導入時の一回の承認が以後の操作を覆うというその構図は、Bash(playwright-cli:*) という許可の形と重なる。ただし Claude Code では、スキルの allowed-tools の許可はそのスキルを呼んだターンだけ効き、次のメッセージで消える7。

代償がどれだけ続くかはここから読める。ツールごとの型付きスキーマをシェルの許可へ置き換えたのは設計上の選択である。サンドボックスと承認で境界を作り直す仕事は、この設計を使う限り残る。

MCP の側にも、既定を変えれば取りに行く機構はある。--snapshot-mode none を指定すれば応答へのスナップショットの押し込みは止まり、browser_snapshot は depth で深さを限り、target で要素の下だけを取り、filename で応答に返す代わりにファイルへ保存できる。browser_find は、要素とその ref を見つけるだけでよいときは「スナップショット全体を取るより安い」と自ら書く2。違いは機構の有無ではなく既定にあり、MCP は既定で応答にツリーを付け、CLI は既定でファイルへ書く。ツール定義のほうは、Playwright MCP が設定や DevTools などのツール群を --caps で足す opt-in にしている2。有効にしたツールの定義を前もって読み込まない設定は、後で見る tool search として API の側にあり、MCP サーバー丸ごとにも指定できる9。

tool searchとbrowser_findで、MCPの側も取りに行く方式へ寄った

MCP の側も取りに行く方向へ動いている。Playwright MCP 自身が browser_snapshot の filename を2025年12月11日の版で足し、作り手はその理由を「大きなスナップショットを inline にするのを避け、MCP の payload を小さく保つ」と書いた2。browser_find は2026年7月9日の版で足され、CLI の find と同じ日に同じ変更から出ている21。API の側では Anthropic の tool search が、ツールの数が増えると定義がコンテキストを埋め、選択の精度も落ちる問題を解くために、「ツール定義を全件、前もってコンテキストへ読み込む代わりに、Claude がツールのカタログを検索し、必要なツールだけを読み込む」と文書は書く9。機構は、前もって読み込まないツールに defer_loading: true を付けることである。文書は、ツールが10個以上あるときやツール定義が10kトークンを超えるときに使うよう勧める。5つのサーバーを束ねた典型的な構成ではツール定義が約55kトークンを占め、tool search がそれを「85パーセント超」減らして「3〜5個のツールだけ」を読み込むと書く9。code execution with MCP も同じ向きにある5。

方向は両側で一致している。残る差は既定の許可の細かさで、MCP はツールごとにホストの確認を挟め、playwright-cli のスキルはコマンド全体を一つのシェルの許可で事前承認する。API の側に tool search が用意され、クライアントの側にも同じ検索を自作できる以上、取りに行く方式は CLI 固有の優位ではない9。 必要なときに取りに行く形は、この二つのほかに、実行環境でコードを書かせてツールを呼び出す方式と、API の側でツール定義を遅延読込する方式にもある59。

出典9件
  1. Microsoft「Playwright CLI」README, GitHub, 2026年9月22日時点. https://github.com/microsoft/playwright-cli — コーディングエージェントにMCPよりCLIとスキルを勧め、応答はスナップショットのファイルへのリンクを返す。findは2026年7月9日のv0.1.16で追加。リポジトリは2020年6月作成の旧CLIのもの。https://github.com/microsoft/playwright-cli/releases/tag/v0.1.16https://www.npmjs.com/package/@playwright/cli?activeTab=versions ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8 ↩9 ↩10

  2. Microsoft「Playwright MCP」README, GitHub, 2026年9月22日時点. https://github.com/microsoft/playwright-mcp — —snapshot-modeの既定は”full”。2025年12月11日のv0.0.52でbrowser_snapshotにfilename、2026年7月9日のv0.0.78でbrowser_findを追加。https://github.com/microsoft/playwright-mcp/releases/tag/v0.0.52https://github.com/microsoft/playwright-mcp/releases/tag/v0.0.78 ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7 ↩8 ↩9 ↩10 ↩11

  3. Vercel Labs「agent-browser」README, GitHub, 2026年9月22日時点. https://github.com/vercel-labs/agent-browser — 「AIエージェント向けのブラウザ自動化CLI」と名乗り、snapshotはrefsつきのアクセシビリティツリーを返す。 ↩

  4. Agent Skills「Specification」agentskills.io, 2026年9月17日時点. https://agentskills.io/specification — スキルを三段(メタデータ約100トークン、本文5,000トークン未満を推奨、資料は必要時)で読み込み、allowed-toolsは実験的な欄。2025年12月18日にopen standardとして公開。https://www.anthropic.com/engineering/equipping-agents-for-the-real-world-with-agent-skillshttps://agentskills.io/ ↩ ↩2 ↩3 ↩4

  5. Anthropic「Code execution with MCP: Building more efficient agents」Anthropic Engineering, 2025. https://www.anthropic.com/engineering/code-execution-with-mcp — コード実行で150,000→2,000トークン(98.7%減)の例を示し、生成コードの実行にはサンドボックスと監視が要ると留保する。 ↩ ↩2 ↩3 ↩4 ↩5 ↩6

  6. Microsoft「skills/playwright-cli/SKILL.md」GitHub, 2026年10月3日時点. https://github.com/microsoft/playwright-cli/blob/main/skills/playwright-cli/SKILL.md — allowed-toolsでplaywright-cliとnpx playwrightを任意の引数で事前承認し(範囲の理由は書かない)、手順はreferences/配下へ分ける。 ↩ ↩2 ↩3 ↩4

  7. Anthropic「Configure permissions」Claude Code Docs, 2026年10月11日時点. https://code.claude.com/docs/en/permissions — Bashの規則はサブコマンドまで書けば範囲を絞れ、確認と拒否の規則は事前承認より先に効く。スキルのallowed-toolsは呼んだターンだけ有効。https://code.claude.com/docs/en/skills ↩ ↩2

  8. Z. Li ほか「Towards Secure Agent Skills: Architecture, Threat Taxonomy, and Security Analysis」arXiv:2604.02837, 2026. https://arxiv.org/abs/2604.02837 — 構造的脅威を挙げるVision Paper。中国科学院、被引用0件(2026年10月8日)。 ↩ ↩2

  9. Anthropic「Tool search tool」Claude Developer Platform, 2026年10月3日時点. https://platform.claude.com/docs/en/agents-and-tools/tool-use/tool-search-tool — defer_loadingで定義を前もって読まず検索で読み込む。10個以上か10kトークン超で推奨、約55kの例で85%超削減。MCPサーバー全体にも設定でき、自作もできる。 ↩ ↩2 ↩3 ↩4 ↩5

この記事はAIを使用して執筆されました。内容には誤りが含まれる可能性があります。事実や数字の出典は脚注から確かめられます。