@iflow-mcp/sumyapp-playwright-parallel-mcp 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 sumyapp
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.ja.md ADDED
@@ -0,0 +1,405 @@
1
+ # playwright-parallel-mcp
2
+
3
+ [![CI](https://github.com/sumyapp/playwright-parallel-mcp/actions/workflows/ci.yml/badge.svg)](https://github.com/sumyapp/playwright-parallel-mcp/actions/workflows/ci.yml)
4
+ [![Coverage Status](https://coveralls.io/repos/github/sumyapp/playwright-parallel-mcp/badge.svg?branch=main)](https://coveralls.io/github/sumyapp/playwright-parallel-mcp?branch=main)
5
+ [![npm version](https://badge.fury.io/js/playwright-parallel-mcp.svg)](https://www.npmjs.com/package/playwright-parallel-mcp)
6
+
7
+ [English](README.md) | **[日本語](README.ja.md)** | [中文](README.zh.md)
8
+
9
+ 複数のAIエージェントが**独立したブラウザインスタンス**を並列で制御できるMCP(Model Context Protocol)サーバーです。
10
+
11
+ ## セキュリティ警告
12
+
13
+ > **このMCPサーバーは、信頼できない相手に公開されると悪用される可能性のある強力なブラウザ自動化機能を提供します。**
14
+
15
+ - **`run_script`**: ブラウザコンテキストで任意のJavaScriptを実行
16
+ - **`upload_file`**: ファイルアップロードのためファイルシステムにアクセス
17
+ - **`generate_pdf`** / **`add_init_script`**: (Fullモードのみ)追加のファイルシステムアクセスとスクリプト挿入機能
18
+
19
+ **信頼できないユーザーやAIエージェントにこのサーバーを公開しないでください。** 接続可能なすべてのクライアントを信頼できる、管理された環境でのみ使用してください。
20
+
21
+ ## 課題
22
+
23
+ 既存のブラウザ自動化MCPサーバー(Chrome DevTools MCP、Playwright MCP)は、すべてのセッションで単一のブラウザインスタンスを共有するため、複数のAIエージェントが同時に使用しようとすると競合が発生します。
24
+
25
+ ## 解決策
26
+
27
+ playwright-parallel-mcpは**各セッションに分離されたブラウザインスタンス**を作成し、真の並列ブラウザ自動化を実現します。
28
+
29
+ ## セッション分離保証
30
+
31
+ **各セッションは100%分離されています。** これはアーキテクチャレベルで保証され、包括的なテストで検証されています。
32
+
33
+ ### アーキテクチャ
34
+
35
+ ```
36
+ セッションA セッションB セッションC
37
+ │ │ │
38
+ ▼ ▼ ▼
39
+ ┌─────────┐ ┌─────────┐ ┌─────────┐
40
+ │ブラウザ │ │ブラウザ │ │ブラウザ │
41
+ │プロセス │ │プロセス │ │プロセス │
42
+ │ (OS) │ │ (OS) │ │ (OS) │
43
+ └────┬────┘ └────┬────┘ └────┬────┘
44
+ │ │ │
45
+ ▼ ▼ ▼
46
+ ┌─────────┐ ┌─────────┐ ┌─────────┐
47
+ │コンテキスト│ │コンテキスト│ │コンテキスト│
48
+ │(Cookie) │ │(Cookie) │ │(Cookie) │
49
+ └────┬────┘ └────┬────┘ └────┬────┘
50
+ │ │ │
51
+ ▼ ▼ ▼
52
+ ┌─────────┐ ┌─────────┐ ┌─────────┐
53
+ │ ページ │ │ ページ │ │ ページ │
54
+ │ (DOM) │ │ (DOM) │ │ (DOM) │
55
+ └─────────┘ └─────────┘ └─────────┘
56
+ ```
57
+
58
+ ### 分離されるリソース
59
+
60
+ | リソース | 分離? | 方法 |
61
+ |----------|-------|------|
62
+ | ブラウザプロセス | ✅ はい | セッションごとに独立したOSプロセス |
63
+ | Cookie | ✅ はい | 独立したBrowserContext |
64
+ | localStorage | ✅ はい | 独立したBrowserContext |
65
+ | sessionStorage | ✅ はい | 独立したBrowserContext |
66
+ | DOM | ✅ はい | 独立したPageインスタンス |
67
+ | ナビゲーション履歴 | ✅ はい | 独立したPageインスタンス |
68
+ | コンソールログ | ✅ はい | セッションごとに保存 |
69
+ | ネットワークログ | ✅ はい | セッションごとに保存 |
70
+
71
+ ### テストカバレッジ
72
+
73
+ セッション分離は**17の専用テスト**で検証されています:
74
+
75
+ - ブラウザプロセスの分離
76
+ - ナビゲーションの分離
77
+ - DOMの分離
78
+ - Cookieの分離
79
+ - localStorage/sessionStorageの分離
80
+ - コンソールログの分離
81
+ - ネットワークログの分離
82
+ - 並行操作の安全性
83
+ - セッションIDの一意性(UUID v4)
84
+
85
+ `pnpm test`を実行して分離保証を確認できます。
86
+
87
+ ## 特徴
88
+
89
+ - **並列セッション** - 各セッションが独自のブラウザインスタンスを持つ
90
+ - **複数ブラウザ対応** - Chromium、Firefox、WebKitをサポート
91
+ - **22種類のツール** - 必須のブラウザ自動化機能(Fullモードでは63種類)
92
+ - **低コンテキスト使用量** - 約14kトークン(@playwright/mcpと同等)
93
+ - **コンソールログ** - デバッグ用にコンソール出力をキャプチャ
94
+ - **ダイアログ処理** - alert、confirm、promptダイアログを処理
95
+ - **アクセシビリティスナップショット** - ARIAスナップショット形式(Playwright 1.49以降)
96
+ - **無料&ローカル** - クラウドサービス不要
97
+
98
+ ## インストール
99
+
100
+ ### Claude Codeで使用
101
+
102
+ MCP設定に追加:
103
+
104
+ ```json
105
+ {
106
+ "mcpServers": {
107
+ "playwright-parallel": {
108
+ "command": "npx",
109
+ "args": ["playwright-parallel-mcp"]
110
+ }
111
+ }
112
+ }
113
+ ```
114
+
115
+ ### npmで使用
116
+
117
+ ```bash
118
+ npm install -g playwright-parallel-mcp
119
+ playwright-parallel-mcp
120
+ ```
121
+
122
+ ## 利用可能なツール(22種類)
123
+
124
+ ### セッション管理(3ツール)
125
+ | ツール | 説明 |
126
+ |------|------|
127
+ | `create_session` | 新しい分離されたブラウザセッションを作成(chromium/firefox/webkit) |
128
+ | `close_session` | ブラウザセッションを閉じる |
129
+ | `list_sessions` | すべてのアクティブなセッションを一覧表示 |
130
+
131
+ ### ナビゲーション(4ツール)
132
+ | ツール | 説明 |
133
+ |------|------|
134
+ | `navigate` | URLに移動 |
135
+ | `go_back` | ブラウザ履歴を戻る |
136
+ | `reload` | 現在のページを再読み込み |
137
+ | `get_url` | 現在のURLとページタイトルを取得 |
138
+
139
+ ### ページ検査(2ツール)
140
+ | ツール | 説明 |
141
+ |------|------|
142
+ | `snapshot` | アクセシビリティツリーを取得(ARIAスナップショット形式) |
143
+ | `screenshot` | スクリーンショットを撮影(PNG/JPEG、フルページまたは要素) |
144
+
145
+ ### ユーザー操作(6ツール)
146
+ | ツール | 説明 |
147
+ |------|------|
148
+ | `click` | 要素をクリック(左/右/中央ボタン) |
149
+ | `fill` | フォーム入力にテキストを入力 |
150
+ | `type` | リアルなキー入力でテキストを入力 |
151
+ | `press_key` | キーボードキーを押す(例:Enter、Control+A) |
152
+ | `hover` | 要素にホバー |
153
+ | `select_option` | ドロップダウンから選択 |
154
+
155
+ ### その他のツール(7ツール)
156
+ | ツール | 説明 |
157
+ |------|------|
158
+ | `wait_for_timeout` | 指定時間待機 |
159
+ | `set_dialog_handler` | 自動ダイアログ処理を設定(承諾/却下) |
160
+ | `upload_file` | ファイル入力要素にファイルをアップロード |
161
+ | `drag_and_drop` | 要素をドラッグして別の要素にドロップ |
162
+ | `run_script` | ブラウザコンテキストでJavaScriptを実行 |
163
+ | `get_console_logs` | コンソールログを取得(log/info/warn/error/debug) |
164
+ | `set_viewport` | ビューポートサイズを変更 |
165
+
166
+ ## 使用例
167
+
168
+ ### 基本的なナビゲーション
169
+
170
+ ```
171
+ ユーザー: example.comを開いてスクリーンショットを撮って
172
+
173
+ Claude: ブラウザセッションを作成し、example.comに移動します。
174
+
175
+ [create_session] -> sessionId: "abc123"
176
+ [navigate sessionId="abc123" url="https://example.com"]
177
+ [screenshot sessionId="abc123"]
178
+ ```
179
+
180
+ ### 並列セッション
181
+
182
+ ```
183
+ ユーザー: 2つのウェブサイトのホームページを並べて比較して
184
+
185
+ Claude: 2つのブラウザセッションを並列で作成します。
186
+
187
+ [create_session] -> sessionId: "session-a"
188
+ [create_session] -> sessionId: "session-b"
189
+ [navigate sessionId="session-a" url="https://example.com"]
190
+ [navigate sessionId="session-b" url="https://google.com"]
191
+ [snapshot sessionId="session-a"]
192
+ [snapshot sessionId="session-b"]
193
+ ```
194
+
195
+ ### フォーム操作
196
+
197
+ ```
198
+ ユーザー: ログインフォームに入力して
199
+
200
+ Claude: フォームフィールドに入力して送信します。
201
+
202
+ [fill sessionId="abc123" selector="input[name='email']" value="user@example.com"]
203
+ [fill sessionId="abc123" selector="input[name='password']" value="***"]
204
+ [click sessionId="abc123" selector="button[type='submit']"]
205
+ ```
206
+
207
+ ### コンソールログ
208
+
209
+ ```
210
+ ユーザー: ページのコンソール出力をチェックして
211
+
212
+ Claude: コンソールログとエラーを確認します。
213
+
214
+ [get_console_logs sessionId="abc123" types=["error", "warn"]]
215
+ ```
216
+
217
+ ### ダイアログ処理
218
+
219
+ ```
220
+ ユーザー: 確認ダイアログを処理して
221
+
222
+ Claude: 自動ダイアログ処理を設定します。
223
+
224
+ [set_dialog_handler sessionId="abc123" autoRespond=true accept=true]
225
+ [click sessionId="abc123" selector="#delete-button"]
226
+ ```
227
+
228
+ ## ツールリファレンス
229
+
230
+ ### create_session
231
+
232
+ 新しい分離されたブラウザセッションを作成します。
233
+
234
+ **パラメータ:**
235
+ - `browser`(オプション): "chromium" | "firefox" | "webkit"(デフォルト: "chromium")
236
+ - `headless`(オプション): boolean(デフォルト: true)
237
+ - `viewport`(オプション): { width: number, height: number }
238
+
239
+ **戻り値:** `{ sessionId, browser, createdAt }`
240
+
241
+ ### navigate
242
+
243
+ URLに移動します。
244
+
245
+ **パラメータ:**
246
+ - `sessionId`: string
247
+ - `url`: string(有効なURL)
248
+ - `waitUntil`(オプション): "load" | "domcontentloaded" | "networkidle"(デフォルト: "load")
249
+
250
+ **戻り値:** `{ url, title, status }`
251
+
252
+ ### snapshot
253
+
254
+ ARIAスナップショット形式でアクセシビリティツリーを取得します。
255
+
256
+ **パラメータ:**
257
+ - `sessionId`: string
258
+
259
+ **戻り値:** YAML形式のアクセシビリティツリー
260
+
261
+ ### run_script
262
+
263
+ ブラウザコンテキストでJavaScriptを実行します。
264
+
265
+ **パラメータ:**
266
+ - `sessionId`: string
267
+ - `expression`: 評価するJavaScript式
268
+
269
+ **戻り値:** `{ success: boolean, result?: any, error?: string }`
270
+
271
+ ## 比較
272
+
273
+ | 機能 | Chrome DevTools MCP | Playwright MCP | **本プロジェクト** |
274
+ |------|---------------------|----------------|-------------------|
275
+ | 並列セッション | なし | なし | **あり** |
276
+ | セッション分離 | なし | なし | **あり(APIレベル)** |
277
+ | ツール数 | 約26 | 約22 | **22(Lite)/ 63(Full)** |
278
+ | コンテキストトークン | 約17k | 約14k | **約14k(Lite)/ 約40k(Full)** |
279
+ | コンソールログ | あり | あり | **あり** |
280
+ | ダイアログ処理 | あり | なし | **あり** |
281
+ | JavaScript実行 | あり | あり | **あり** |
282
+ | ファイルアップロード | なし | あり | **あり** |
283
+ | 料金 | 無料 | 無料 | **無料** |
284
+
285
+ ### コンテキストトークン使用量(実測値)
286
+
287
+ Claude Codeで MCP ツールとして読み込んだ際のトークン消費量(`/context` コマンド):
288
+
289
+ | MCPサーバー | ツール数 | 総トークン | 平均/ツール |
290
+ |------------|---------|-----------|------------|
291
+ | **playwright-parallel-mcp (Lite)** | 22 | 約14,000 | 640 |
292
+ | **playwright-parallel-mcp (Full)** | 63 | 40,343 | 640 |
293
+ | [@playwright/mcp](https://github.com/microsoft/playwright-mcp) | 22 | 14,534 | 661 |
294
+ | [chrome-devtools-mcp](https://github.com/ChromeDevTools/chrome-devtools-mcp) | 26 | 17,668 | 680 |
295
+
296
+ > **Liteモード(デフォルト)** は@playwright/mcpと同じツール数で同等のトークン使用量を提供しながら、並列実行のためのセッション分離を追加しています。
297
+
298
+ ## 環境変数
299
+
300
+ | 変数 | デフォルト値 | 説明 |
301
+ |------|-------------|------|
302
+ | `PLAYWRIGHT_PARALLEL_MODE` | `lite` | モード: `lite`(22ツール)または `full`(63ツール) |
303
+ | `MAX_SESSIONS` | 10 | 同時ブラウザセッションの最大数 |
304
+ | `SESSION_TIMEOUT_MS` | 3600000 | セッション非アクティブタイムアウト(1時間) |
305
+
306
+ ## 要件
307
+
308
+ - Node.js 20以上
309
+ - Playwrightブラウザ(自動インストール)
310
+
311
+ ## 開発
312
+
313
+ ```bash
314
+ git clone https://github.com/sumyapp/playwright-parallel-mcp
315
+ cd playwright-parallel-mcp
316
+ pnpm install
317
+ pnpm build
318
+ pnpm start
319
+ ```
320
+
321
+ ### テスト実行
322
+
323
+ ```bash
324
+ pnpm test
325
+ ```
326
+
327
+ ### プロジェクト構造
328
+
329
+ ```
330
+ src/
331
+ index.ts # MCPサーバーエントリポイント、全ツール定義
332
+ session-manager.ts # ブラウザセッションライフサイクル管理
333
+ ```
334
+
335
+ ## Fullモード
336
+
337
+ Fullモードは**`run_script`では代替できない**機能を提供し、特定のユースケースに不可欠です。
338
+
339
+ ### Fullモードを使用すべき場合
340
+
341
+ | ユースケース | 必要なツール | run_scriptで代替できない理由 |
342
+ |-------------|-------------|----------------------------|
343
+ | **API監視** | `get_network_logs` | ヘッダー、タイミング、ステータスコードを含むすべてのHTTPリクエスト/レスポンスをキャプチャ |
344
+ | **パフォーマンス分析** | `get_metrics` | Navigation Timing API、メモリ使用量、ペイントメトリクスへのアクセス |
345
+ | **PDFレポート生成** | `generate_pdf` | ページフォーマットオプション付きのブラウザレベルPDFレンダリング |
346
+ | **iframe自動化** | `frame_click`, `frame_fill` | JavaScriptからアクセスできないクロスオリジンiframeへのアクセス |
347
+ | **JSエラー検出** | `get_page_errors` | 失われる前にキャッチされない例外をキャプチャ |
348
+ | **アクセシビリティ監査** | `get_accessibility_tree` | コンプライアンステスト用の完全なARIAツリー構造 |
349
+
350
+ ### 例:ネットワークログを使用したAPIテスト
351
+
352
+ ```
353
+ ユーザー: ログインAPIをテストしてレスポンスを確認して
354
+
355
+ Claude: ログイン中のネットワークリクエストを監視します。
356
+
357
+ [get_network_logs sessionId="abc" resourceTypes=["fetch","xhr"]]
358
+ → キャプチャ: POST /api/login (200, 145ms, レスポンスボディあり)
359
+ ```
360
+
361
+ これが`run_script`では不可能な理由:
362
+ - Fetch/XHRのインターセプトはリクエスト前にセットアップが必要
363
+ - レスポンスボディは完了後にアクセス不可
364
+ - タイミング情報は失われる
365
+
366
+ ### 設定
367
+
368
+ ```json
369
+ {
370
+ "mcpServers": {
371
+ "playwright-parallel": {
372
+ "command": "npx",
373
+ "args": ["playwright-parallel-mcp"],
374
+ "env": {
375
+ "PLAYWRIGHT_PARALLEL_MODE": "full"
376
+ }
377
+ }
378
+ }
379
+ }
380
+ ```
381
+
382
+ ### 追加ツール(41ツール、約40kトークン)
383
+
384
+ <details>
385
+ <summary>クリックして全ツールリストを展開</summary>
386
+
387
+ - **ナビゲーション**: go_forward
388
+ - **ページ検査**: get_content, get_html
389
+ - **ユーザー操作**: check, uncheck
390
+ - **待機ツール**: wait_for_selector, wait_for_load_state, wait_for_url, wait_for_function
391
+ - **ダイアログ**: get_dialogs
392
+ - **要素状態**: get_element_state, get_attribute, get_bounding_box, count_elements, get_all_texts
393
+ - **スクロール**: scroll, scroll_into_view
394
+ - **マウス**: mouse_move, mouse_click, mouse_down, mouse_up, mouse_wheel
395
+ - **エミュレーション**: set_geolocation, set_offline, set_extra_http_headers
396
+ - **ストレージ/Cookie**: get_cookies, set_cookies, get_storage, set_storage
397
+ - **ネットワーク**: get_network_logs
398
+ - **PDF/フレーム**: generate_pdf, list_frames, frame_click, frame_fill, frame_get_content
399
+ - **デバッグ**: get_page_errors, clear_logs, expose_function, add_init_script, get_metrics, get_accessibility_tree
400
+
401
+ </details>
402
+
403
+ ## ライセンス
404
+
405
+ MIT