fix(devpod): launch playwright mcp via headless chromium wrapper (#999)#1000
Conversation
committed .mcp.json の playwright は headful 既定の npx 起動で、display の無い devpod では ブラウザ起動に失敗していた。--headless を足しても MCP バンドルの playwright-core が要求する 新しい chromium を cdn.playwright.dev から取得しようとし、egress allowlist で遮断され失敗する。 そこで tools/mcp/playwright-mcp.mjs を経由し、リポジトリの playwright がビルド時に導入済みの chromium を --executable-path で headless 起動する。devpod 内は追加 download 不要・ホストも 同じ解決で動作する単一 committable 設定になる。ホスト headful は既存 local-scope HTTP で opt-in。 Closes #999 Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
🤖 autopilot status
Linked issue #999. Maintained by autopilot (single writer); do not edit. |
|
🚀 Preview deployed: https://smalruby.jp/smalruby3-editor/topic/autopilot-999/ |
The README and wrapper JSDoc cited .claude/rules/scratch-gui/e2e-test.md for the --host/--allowed-hosts gotchas and the "ホストで headful" section, but those live in tools/host-playwright-mcp.sh's header and .devcontainer/README.md. Fix the cross-references so readers land on the accurate source. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
[Question] ドキュメントの相互参照が不正確だったので修正済み(commit 64f3651)。
読者を誤った出典に飛ばすため、参照先を実体のあるファイルに直しました(動作には影響なし・doc のみ)。 |
|
[FYI] シャットダウン時の子孫プロセス孤立とシグナル終了コードについて(対応不要と判断)。 ラッパーの挙動をコンテナ内で実測した結果、機能面は問題なし(SIGTERM で ~1s 以内に終了・ハングなし、
より堅牢にするなら |
|
[FYI]
|
|
🤖 敵対的レビュー完了。指摘 3 件(Must 0 / Question 1 / FYI 2)。Question はドキュメント参照の不正確さで自分で修正済み(commit 64f3651)。FYI 2 件はコメントのみ(対応不要と判断)。 コアの修正はコンテナ内で E2E 実測済み: ラッパーがビルド時導入済み chromium-1217 を解決し、 |
…lot-999 fix(devpod): launch playwright mcp via headless chromium wrapper (#999)
Summary
committed
.mcp.jsonのplaywrightMCP を devpod 内外どちらでも追加設定なしで headless動作する単一設定に修正する。実体は薄いラッパー
tools/mcp/playwright-mcp.mjs経由。根本原因(調査結果)
Issue の当初案
--browser chromium --headlessは devpod では動かないことを実測で確認:@playwright/mcp@latest(現在 0.0.78)がバンドルする playwright-core 1.62 はchromium-1232 を要求するが、コンテナには chromium-1217(リポジトリの playwright
1.59.1 がイメージビルド時 = firewall 適用前に導入した分)しか無い。
cdn.playwright.devから download されるが、devpod のegress allowlist が
cdn.playwright.devを遮断しているため失敗する(
curl https://cdn.playwright.dev/は接続不可を実測)。npx @playwright/mcp@latest [--headless]では「Please run npx playwright install」で停止しブラウザが起動しない。
修正
tools/mcp/playwright-mcp.mjsがrequire('playwright').chromium.executablePath()でビルド時に導入済みの chromium を解決し、
@playwright/mcpへ--executable-path <path> --headlessで渡す。--executable-pathを付けず MCP 既定挙動へフォールバック。検証(devpod コンテナ内で実施)
node --test tools/mcp/playwright-mcp.test.mjs→ 8 pass(TDD: RED→GREEN)。.mcp.jsonと同じnode tools/mcp/playwright-mcp.mjsで起動し、JSON-RPC で
initialize→browser_navigateを実行。chromium-1217 が headless 起動しページタイトルを読み戻せることを確認(追加 download なし)。
claude mcp list: project scope がnode tools/mcp/playwright-mcp.mjsとして認識されることを確認(設定が正しくパースされる)。
ドキュメント
headful opt-in 手順と本修正の背景を
.devcontainer/README.mdに追記した(既存の
tools/host-playwright-mcp.shの local-scope HTTP override を参照)。Related Issues
Closes #999