DrissionPage MCP について
DrissionPage MCP は、DrissionPage を基盤とするローカル動作の MCP サーバーで、Codex や Claude Code などの MCP クライアントから利用します。ブラウザ操作を型付きの原子的なツールとして公開し、サイト固有の手順はクライアントまたは任意の Skill に任せる構成です。
主な機能
- 0169 個の型付きブラウザツール
- 02DOM セレクターと座標による操作
- 03direct と natural の 2 種類のポインター移動
- 04タブ管理とファイルのアップロード・ダウンロード
- 05ページのスクリーンショット、スナップショット、PDF・MHTML 出力
活用シーン
- 01コーディングエージェントへのWebページ閲覧とスクリーンショット機能の提供
- 02座標指定によるキャンバスや地図上の操作
- 03許可された環境でのフォーム入力と Web テスト
MCP 対応
本プロジェクトは、ブラウザのナビゲーション、要素操作、ページ観察、スクリーンショットなどを MCP クライアントに公開する MCP サーバーです。クライアントは Codex 向け TOML または MCP 向け JSON の設定で接続します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
69掲載時のツール一覧 · 2 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| url | string | はい | 移動先の URL |
| new_tab | boolean | いいえ | 現在のタブではなく、新しいブラウザータブで URL を開きます。 |
| observe | boolean | いいえ | ページ変更前後の簡潔な概要を返します。 |
詳細
DrissionPage MCP サーバー
DrissionPage を基盤とする、Codex、Claude Code、MCP クライアント向けのプロフェッショナルなブラウザー自動化です。
DrissionPage は、Chromium/CDP の直接制御と requests スタイルの HTTP セッションサポートを中心に構築された Python のウェブ自動化ライブラリです。このサーバーは、ブラウザー関連の機能を、型付きのアトミックな MCP ツールとして公開します。
**インタラクティブな Browser Lab を開く**と、範囲を限定した自然なポインター移動やドラッグ操作を再生し、観測可能な状態を確認できます。
🖱️ 自然なポインター移動によるアトミックなブラウザー制御
DrissionPage MCP 0.8.8 は、69 種類の型付きブラウザー機能を公開します。 MCP サーバーは、正確な低レベルの観測と操作を提供します。クライアントまたはオプションのスキルが、それらの機能をサイト、コンポーネントライブラリ、チャレンジ、または業務ワークフローに合わせて組み合わせます。
何をするかはモデルが決定し、MCP は要求されたブラウザー操作を正確に実行します。
Screenshot / page observation
↓
Multimodal model identifies viewport coordinates
↓
page_click_xy(x=442, y=369, profile="natural")
↓
24-step eased cubic path → exact target → press → release
↓
Observe and verify the resulting page state
主な操作上の保証
- 範囲を限定した 2 つのプロファイル:
directは指定位置へ正確に 1 回移動します。naturalは、再現可能な 8~14ms 間隔と正確な最終到達位置を備えた、決定論的な 24 ステップのイーズ付き三次曲線パスを生成します。 - 隠れたランダム性なし:開始位置、目標位置、プロファイルが同じであれば、同じパスが生成されます。ジッター、オーバーシュート、検出回避ロジックはありません。ポインター位置は状態を保持するため、同じ呼び出しを繰り返すと、前回の終点から開始する場合があります。
- 明示的なシーケンス:クリックは、選択した移動プロファイル、呼び出し側が指定する任意の遅延、押下、解放の順で実行されます。ドラッグでは、選択したパスと順序付きウェイポイントに沿って、押下状態を維持します。
- 失敗時も安全な入力:押下後に実行が失敗した場合、押されたポインターボタンは解放されます。
- 最新のブラウザー情報:セレクターを使用したドラッグ操作の直前に、セレクターのジオメトリが解決されます。
- 型付きの結果:出力には、実行された座標、ボタン、ステップ数、明示的な遅延メタデータが含まれます。
信頼できるセレクターがある場合は、構造化 DOM ターゲットを使用してください。キャンバスのコントロール、エディター、マップ、チャートなど、視覚情報のみを利用できる画面では、座標、natural モーション、明示的なドラッグ用ウェイポイントを使用してください。コンポーネント固有のターゲット検出、チャレンジの観測、複数回のクリック操作、ログイン手順、その他の業務ポリシーは、クライアントまたはオプションのスキルで扱います。
{
"x": 442,
"y": 369,
"profile": "natural",
"button": "left",
"element": "visually identified control"
}
許可されたブラウザー自動化、テスト、アクセシビリティ関連のワークフロー、技術調査を目的として設計されています。コア機能は、チャレンジ固有またはサイト固有のワークフローを提供しません。
🧭 クライアント設定ナビゲーション
- アトミックなブラウザー操作
- インストールとスクリーンショットの手順
- Codex CLI/IDE クイックセットアップ
- Codex CLI/IDE 統合例
- スキルと再利用可能な手順
- Claude Code のセットアップ
- Cursor のセットアップ
- Claude Desktop のセットアップ
- トラブルシューティング
🚀 DrissionPage MCP とは?
DrissionPage MCP Server は、DrissionPage のブラウザー自動化ツールを Codex CLI/IDE、Claude Code、Claude Desktop、その他の MCP クライアントで使えるようにする、ローカルの Model Context Protocol(MCP)サーバーです。
スタンドアロンサーバーは、69 個の型付きツール、0 個の MCP プロンプト、1 個の静的な任意の Skills カタログリソースを公開します。バージョン 0.8.8 では、このレジストリを安定させたまま、相関付けされたネットワークリスナーの世代、明示的なパケットカーソル、タイムアウトの証拠、キャンセルからの復旧、タブ所有のクリーンアップを追加しています。すべてのツールはデフォルトで読み込まれ、機能プロファイルやオプトインの full モードはありません。モデルはこれらのアトミックな機能を組み合わせます。一方、再利用可能なチャレンジやサイトの手順は、任意の Skills として配布物の外部に置かれています。ブラウザーの実行には DrissionPage を使用しています。
🌟 DrissionPage MCP を選ぶ理由
- 構造を優先し、ビジョンにも対応:利用可能な場合は DOM 構造を使用し、視覚的な操作が適している場合はマルチモーダル座標を使用します
- 決定論的:LLM に適したセレクターを実現するため、CSS/XPath を正規化して要素を確実に選択します
- 自然なポインター操作:同じアトミックツールから、正確な直接移動と、上限を設けた決定論的な 24 ステップのイージング軌道を利用できます
- 高速かつ軽量:DrissionPage の効率的なエンジンを基盤とし、オーバーヘッドを最小限に抑えています
- 型安全:すべてのツールに完全な型ヒントと Pydantic による検証を備えています
- オープンソースに適した設計:保守しやすい貢献を支援する互換性に関する注記、トラブルシューティング、CI チェックが含まれています
- 簡単に統合可能:シンプルな
pip installと、Codex TOML または MCP JSON の設定だけで導入できます
✅ 品質と実環境での検証
DrissionPage MCP は、厳格な回帰テストスイートとブラウザーを使ったシナリオチェックによって支えられています。
- 厳格な自動テスト:ユニット、プロトコル、スキーマスナップショット、レスポンス契約、リソース、リリースメタデータ、セキュリティポリシー、ブラウザー統合、カバレッジの各チェックを CI で実行します。
- カバレッジ 95% の下限:CI では現在の 95% カバレッジしきい値を適用し、カバレッジレポートをアップロードします。
- 実ブラウザーでの検証:Chrome/Chromium を使った統合テストで、クライアントに公開されるものと同じ MCP ツールを実行します。
- ドキュメント境界の検証:ブラウザーテストにより、クロスオリジン OOPIF の読み取りと、JavaScript による境界突破のフォールバックなしで DrissionPage が公開する閉じた Shadow DOM の検索が可能であることを確認します。
- チャレンジ画面の検証:ローカルのフィクスチャで、通常、非表示、ビューポート外、遅延表示、CSS 3D のクロスオリジンウィジェットを検証します。また、公式の Turnstile ダミーキーを使って、トークンを保持せずに、表示、非表示、成功、失敗、強制的な対話型コールバックを検証します。
- シナリオ検証:プレイグラウンドの MCP Lab では、公開デモサイトに依存せず、現実的なフォーム、コマースページ、ソーシャルフィード、タイムライン、動的な待機、iframe のケース、復旧経路を検証します。
⚡ 最初の成功までの手順
# Install or update Codex CLI (macOS/Linux)
curl -fsSL https://chatgpt.com/codex/install.sh | sh
# Install from PyPI
python -m pip install -U "drissionpage-mcp>=0.8.8"
# Verify package and environment
drissionpage-mcp --version
drissionpage-mcp doctor
公式インストーラーは、既存の Codex CLI インストールも更新します。Windows と Codex デスクトップアプリについては、Codex CLI とアプリの公式ドキュメントを参照してください。
次に、以下の Codex または MCP クライアント設定を追加し、クライアントを再起動してください。
📦 Codex CLI/IDE でのセットアップ(30 秒)
Codex は config.toml を通じてローカルの stdio MCP サーバーをサポートしており、CLI と IDE 拡張機能は同じ MCP 設定を共有します。
-
Codex の設定を編集します:
- ユーザーレベル:
~/.codex/config.toml - プロジェクトレベル:信頼済みプロジェクト内の
.codex/config.toml
- ユーザーレベル:
-
次の設定を追加します:
[mcp_servers.drissionpage] command = "drissionpage-mcp" startup_timeout_sec = 20 tool_timeout_sec = 60 -
Codex を再起動します。TUI では
/mcpを実行し、シェルからはcodex mcp listを実行します。
Claude Code、Claude Desktop、その他の JSON ベースの MCP クライアントについては、統合例をご覧ください。
🎯 クイック例
移動とスクリーンショット
"Visit https://example.com and take a screenshot for me"
検索と抽出
"Go to Wikipedia, search for Python, and get the first paragraph"
フォームの自動化
"Fill out the form at https://httpbin.org/forms/post and submit it"
データのスクレイピング
"Get the top 10 news headlines from news.ycombinator.com"
🛠️ 型付きブラウザツール 69 種
タブを対象とする 63 個のツールは、すべて省略可能な tab_id を受け付けます。省略すると、呼び出し開始時に現在の MCP タブを一度取得します。明示的に対象を指定するには、MCP またはネイティブ DrissionPage のタブ ID を渡します。タブを対象とする操作が成功すると、解決された MCP tab_id が結果として返されます。独立したタブは並行して実行できますが、同一タブ上の操作は順番に実行されます。
🌐 ナビゲーション(5 ツール)
page_navigate- 任意の URL に移動します。既存のtab_idを対象にするか、new_tab=trueと省略可能なbackground、new_window、またはnew_contextを組み合わせます。observeは変更の概要を返しますpage_navigate_with_http_auth- 認証情報を返すことなく、専用の破棄可能な Chromium コンテキストで、スコープが限定された HTTP 認証チャレンジを通じて移動しますpage_go_back- ブラウザーの履歴を戻りますpage_go_forward- ブラウザーの履歴を進みますpage_refresh- 現在のページを再読み込みします
🗂️ タブ操作(3 ツール)
tab_list- 安定した MCP タブ ID とともに、開いているブラウザータブを一覧表示しますtab_switch-tab_listが返したタブに切り替えますtab_close- 新しい処理を拒否し、実行中の操作が完了するのを待ってから、ブラウザー全体を閉じずに 1 つのタブを閉じます
🎯 要素の操作と抽出(16 ツール)
element_find- CSS セレクターまたは XPath で 1 つの要素を検索します。h1のようなセレクターは CSS として扱われますelement_find_all- テキスト、属性、おすすめのセレクターとともに、件数を制限して繰り返し要素を抽出しますelement_click- 左クリック、右クリック、中クリック、およびシングルクリック/ダブルクリックを組み合わせて、任意の要素をクリックしますelement_click_and_download- セレクター、座標、またはキーボード操作のいずれか 1 つを、DP_MCP_DOWNLOAD_ROOT内の整合性が検証された成果物 1 つに関連付けますelement_type- 要素にテキストを入力しますelement_upload_file-element_upload_file(paths=[...])を使用して、DP_MCP_UPLOAD_ROOT内のファイルをinput[type=file]にアップロードしますelement_click_and_upload- Chromium のファイル選択ダイアログを待機し、その起動要素をクリックして、OS のファイル選択ダイアログを使わずに許可されたファイルを挿入し、インターセプトを解除しますelement_scroll_into_view- 操作前に要素をビューポート内に表示しますelement_hover- 要素にホバーして、メニューやツールチップの状態を表示しますelement_select- 値、テキスト、またはインデックスでオプションを選択しますelement_check- チェックボックスまたはラジオボタンをオン/オフにしますelement_get_text- 要素またはページのテキストを取得しますelement_get_attribute- HTML 属性を取得しますelement_get_property- 入力値など、ライブ DOM プロパティを取得しますelement_get_html- 要素またはページの HTML を取得しますelement_state_get- 1 つの要素について、ライブ DrissionPage 状態フラグとドキュメント/ビューポートのジオメトリを読み取ります
📸 ページ操作(18 個のツール)
page_screenshot- ページ全体またはビューポートのスクリーンショットをインラインでキャプチャしますpage_screenshot_save-DP_MCP_SCREENSHOT_ROOT内にスクリーンショットを保存しますpage_export_artifact- SHA-256 と受領証の証拠を含む、管理対象の PDF または MHTML アーティファクトをDP_MCP_ARTIFACT_ROOT内に生成しますpage_snapshot- 見出し、リンク、ボタン、入力欄、フォーム、セレクターの推奨を含む、範囲を限定したページ概要を返しますpage_accessibility_snapshot- 明示的に要求されない限りフィールド値をマスキングしたうえで、ページまたは指定範囲の要素に対する、範囲を限定した Chromium アクセシビリティツリーを返しますpage_observe- URL、タイトル、件数、表示テキストのサンプル、アクティブ要素、直近のコンソール概要を含む、簡潔なページフィンガープリントを返しますpage_evaluate- 現在のページで範囲を限定した JavaScript を実行し、JSON セーフな結果を返しますpage_scroll- 相対スクロールにはpage_scroll(pixels=...)を使用します。または、絶対位置を指定するにはx/yを渡しますkeyboard_press- 結果に入力内容を表示せずに、アクティブな要素またはページにキーを送信しますpage_resize- ブラウザーウィンドウのサイズを調整しますpage_pointer_move-directまたは範囲を限定した決定論的なnaturalの動きで、正確なビューポート CSS 座標に移動しますpage_pointer_drag- 選択したプロファイルを使って、最大 6 つの任意の順序付き経由点を通る、失敗時に安全な座標ドラッグを 1 回実行しますpage_pointer_drag_element- ドラッグの直前に始点と終点の位置情報を解決します。トップドキュメントまたは同一オリジンの iframe 1 つ内での CSS/XPath に加え、ネストされたオープン Shadow DOM ホストを経由する CSS パスをサポートしますpage_click_xy-directまたはnaturalの動きで移動し、必要に応じて明示的な遅延を待ってから、正確な対象位置で押下して離しますpage_close- ブラウザーを閉じますpage_get_url- 現在の URL を取得しますpage_dialog_observe- 保留中のネイティブな alert、confirm、または prompt を処理せずに待機して調べますpage_dialog_respond- 保留中の alert、confirm、または prompt 1 つに対して、page_dialog_respond(action="accept")(または"dismiss")を使用します
🧱 フレーム/Shadow DOM(5 個のツール)
frame_list- グローバルなフレーム状態を変更せずに iframe/フレームのコンテキストを一覧表示しますframe_snapshot- 範囲を限定した概要データを使って iframe 1 つを調べるには、frame_snapshot(frame_selector="...")またはframe_indexを使用しますframe_find- 選択した iframe 内で要素を検索しますshadow_find- テスト済みのクローズドルートを含め、現在サポートされている DrissionPage ランタイムによって公開された Shadow Root 内で要素 1 つを検索しますshadow_find_all- DrissionPage が公開する Shadow Root から繰り返し要素を抽出します
🌍 ブラウザー環境(6 個のツール)
browser_headers_set- 追加のリクエストヘッダーを置き換え、値をマスキングした名前を返します。空のオブジェクトを指定するとクリアしますbrowser_user_agent_set- ユーザーエージェントと任意のプラットフォームを上書きし、設定後と変更前の両方のユーザーエージェントを返しますbrowser_cache_clear- Cookie、localStorage、sessionStorage を保持したまま HTTP キャッシュをクリアしますbrowser_permission_get- OS のプロンプトを開かずに、現在のドキュメントのオリジンに対するブラウザー権限を 1 つ照会しますbrowser_permission_set- 正確なオリジン/現在の Chromium コンテキストに対して、browser_permission_set(setting="granted")(または"denied"/"prompt")を使用しますbrowser_permissions_reset- 現在の Chromium コンテキストの権限の上書きをリセットします
🍪 Cookie とストレージ(7 個のツール)
browser_cookies_get- 値をデフォルトでマスキングして、正規化された Cookie を読み取りますbrowser_cookies_set- 1 回の呼び出しで最大 100 個の Cookie を設定し、値をマスキングした設定済みメタデータを返しますbrowser_cookies_delete- 任意の URL/ドメイン/パスの範囲を指定して、名前を指定した Cookie を 1 つ削除しますbrowser_cookies_clear- すべてのブラウザー Cookie をクリアしますstorage_get- 値をinclude_values=trueにしない限りマスキングして、localStorage/sessionStorage をキーごと、またはマップとして読み取りますstorage_set- 値を表示せずに、localStorage/sessionStorage の項目を 1 つ設定しますstorage_clear- 1 つのストレージキー、またはストレージ領域全体をクリアします
🧪 デバッグ/可観測性(1 ツール)
page_console_logs- レベルによるフィルタリング、カーソルページネーション、上限指定に対応した、件数を制限したブラウザーコンソールメッセージの読み取り
⏱️ 待機操作(4 ツール)
wait_for_element- 要素が表示されるまで待機します(タイムアウトあり)wait_for_url-wait_for_url(url_pattern="...")を使用し、現在の URL に指定したテキストが含まれるまで待機しますwait_until-wait_until(condition="text_contains", value="...")または、ドキュメントに記載された別の条件と値の組み合わせを使用しますwait_time- 実行を遅延させます
🌐 ネットワーク制御と監視(4 ツール)
network_listen_start- DrissionPage を通じて、件数を制限した HTTP/XHR/Fetch の監視を開始しますnetwork_listen_wait- 必要に応じてヘッダーを編集したり、本文の抜粋を取得したりしながら、件数を制限したパケットメタデータを待ちますnetwork_listen_stop- 監視を停止し、必要に応じてキューに入ったパケットを消去しますnetwork_blocked_urls_set-network_blocked_urls_set(urls=[...])を使用して、ブロックする URL パターンを置き換えます。空のリストを指定すると、ブロック対象が解除されます
🧩 オプションのスキルの検出
- リソース:
drissionpage://skills/catalog - プロンプト:なし
- リポジトリの例:
cross-origin-iframe-probe、turnstile-testing、xiaohongshu-content-research - エントリーポイント:
skills/<skill-name>/SKILL.md。カタログスキーマ v2 には、Skill/MCP のバージョン、必要なツール、フィクスチャ、固定されたv0.8.4のソースリビジョン、検証状況、SHA-256 が含まれます - スキルは MCP ホスト向けの Markdown 手順書です。Python モジュールではなく、サーバーによって実行されることもありません。また、wheel/sdist パッケージには含まれません。
ソースチェックアウトを python playground/validate_skills.py --json で検証します。
固定カタログリリースは、
[email protected]
から python install.py install --client codex --json または
python install.py install --client claude --json でインストールします。
📖 スキルと再利用可能な手順
MCP コアは、アトミックなブラウザー操作を公開します。スキルは、サーバーの外部で再利用およびレビュー可能な手順を提供します。
| サンプルスキル | 実証する内容 | 停止条件 |
|---|---|---|
cross-origin-iframe-probe | フレームの検出、クロスオリジンの診断、座標によるフォールバック、外部からの検証 | クロスオリジン iframe の内部 DOM は読み取れません |
turnstile-testing | Cloudflare テスト用フィクスチャ、許可された本番環境のチャレンジ操作、座標のジオメトリ、親ページの確認 | ドキュメントに記載されたサポートマトリックスを使用し、結果のページ状態を検証します |
xiaohongshu-content-research | 件数を制限した読み取り専用のノート調査と、決定論的な social-notes フィクスチャ | robots、ログイン、CAPTCHA、安全ページ、またはレート制限が発生したら停止します |
新しい手順を公開する前に、スキルガイドをすべてお読みください。
スキルでは、既存の型付きツールを使用し、新しい証拠を収集して事後条件を検証し、シークレットを編集し、未サポートのケースを明記する必要があります。新しい MCP ツールを追加したり、サーバーのナビゲーションおよび安全ポリシーを上書きしたりすることはありません。複数タブを扱うスキルでは、変更される現在のタブ状態に依存せず、返された MCP tab_id を後続のタブスコープ付き呼び出しに渡してください。
📚 ドキュメント
| ガイド | 説明 |
|---|---|
| README.md | インストール、ツール、アーキテクチャ |
| docs/compatibility.md | 対応する Python、DrissionPage、MCP、ブラウザーのバージョン |
| docs/tool-contract.md | 公開されている MCP ツール名、入力、アノテーション、レスポンス形式 |
| docs/troubleshooting.md | Doctor コマンド、ブラウザーの起動、クライアント設定の修正 |
| CHANGELOG.md | リリースノート |
🏗️ アーキテクチャ
クリーンでモジュール化された設計で構築されています。
DrissionMCP/
├── drissionpage_mcp/
│ ├── cli.py # Process entry point
│ ├── server.py # MCP transport and request routing
│ ├── context.py # Browser and tab lifecycle facade
│ ├── runtime.py # Operation keys, receipts, artifacts, and capability state
│ ├── tool_outputs.py # Typed public result contracts
│ ├── browser/ # Focused DrissionPage capabilities and page scripts
│ └── tools/ # 69 typed MCP tool definitions and thin adapters
├── tests/ # Unit tests
└── playground/ # MCP Lab business-scenario playground
主な原則:
- ✅ すべてのツールに型安全な Pydantic モデルを使用
- ✅ 全体を通して Async/await を使用
- ✅ 関心事を明確に分離
- ✅ 包括的なエラー処理
- ✅ 中核となるツールの登録/応答動作を対象とした、ユニットテストおよびプロトコルテストのカバレッジ
🔧 設定
Codex CLI / IDE(推奨)
[mcp_servers.drissionpage]
command = "drissionpage-mcp"
startup_timeout_sec = 20
tool_timeout_sec = 60
# Optional browser/runtime environment variables:
# [mcp_servers.drissionpage.env]
# CHROME_PATH = "/custom/path/to/chrome"
# DP_HEADLESS = "1"
Codex CLI を使って追加することもできます。
codex mcp add drissionpage -- drissionpage-mcp
Codex/Cursor/Claude Desktop を GUI から起動し、シェルの
PATH や仮想環境が認識されない場合は、Python 実行ファイルの絶対パスを使用してください。
[mcp_servers.drissionpage]
command = "/absolute/path/to/python"
args = ["-m", "drissionpage_mcp.cli"]
startup_timeout_sec = 20
tool_timeout_sec = 60
JSON MCP クライアント
{
"mcpServers": {
"drissionpage": {
"command": "drissionpage-mcp"
}
}
}
JSON の詳細設定
{
"mcpServers": {
"drissionpage": {
"command": "drissionpage-mcp",
"args": ["--log-level", "DEBUG"],
"env": {
"CHROME_PATH": "/custom/path/to/chrome"
}
}
}
}
GUI クライアント向けの Python 絶対パスを使った代替設定:
{
"mcpServers": {
"drissionpage": {
"command": "/absolute/path/to/python",
"args": ["-m", "drissionpage_mcp.cli"],
"env": {
"CHROME_PATH": "/custom/path/to/chrome",
"DP_HEADLESS": "1"
}
}
}
}
📋 必要条件
- Python 3.10 以降(3.11 以降を推奨)
- Chrome または Chromium ブラウザー
- MCP 互換クライアント:Codex CLI/IDE、Claude Code、Claude Desktop、Cursor、VS Code など
🧪 テスト
インストールの確認
# Environment diagnostics; add --launch-browser for a browser startup check
drissionpage-mcp doctor
drissionpage-mcp doctor --launch-browser
# Source checkout tests
python -m pip install -e ".[dev]"
python -m pytest tests/
# Coverage report (CI enforces the current 95% floor and uploads coverage.xml)
python -m pytest tests/ --cov=drissionpage_mcp --cov-report=term-missing --cov-report=xml
# Browser-backed MCP Lab scenario checks
DP_HEADLESS=1 python playground/run_mcp_lab.py --all --json
GitHub Actions では、lint、ユニットテスト、プロトコルテスト、パッケージ、ブラウザー統合、カバレッジの各ジョブを実行します。Codecov は codecov.yml と CI ワークフローで設定されています。
試してみる
# No-browser MCP registry check
python playground/run_mcp_lab.py --case registry
# Local deterministic site check
python playground/run_mcp_lab.py --case site
# Browser-backed form inspection scenario
DP_HEADLESS=1 python playground/run_mcp_lab.py --case form-inspect
🚀 ユースケース
✅ 自動テスト - Web アプリケーションをテストします
✅ データスクレイピング - Web サイトから構造化データを抽出します
✅ フォームの自動化 - フォームに入力して送信します
✅ モニタリング - 更新や変更を確認します
✅ スクリーンショットによる検証 - ページの状態を取得して検証します
✅ コンテンツ分析 - Web コンテンツをプログラムで分析します
🐛 トラブルシューティング
ツールが読み込まれない場合
drissionpage-mcp --version
インストール済みパッケージのバージョンが出力されます。例:drissionpage-mcp 0.8.8。
drissionpage-mcp doctor では、mcp_supported と
mcp_server_wiring の両方が ok と報告される必要があります。パッケージのバージョンが出力されるだけでは、MCP クライアントがサーバーを初期化できることの証明にはなりません。
ブラウザーに問題がある場合
# Check browser installation
which google-chrome # Linux
which chromium # macOS
Codex/MCP クライアントがサーバーを検出できない場合
- Codex:
codex mcp listを実行します。TUI では/mcpを実行します - JSON クライアント:設定ファイルのパスと JSON の構文を確認します
- 変更後は Codex または MCP クライアントを再起動します
- ログを確認します:
drissionpage-mcp --log-level DEBUG
詳しいトラブルシューティングについては、docs/troubleshooting.md をご覧ください。
📊 プロジェクトの状況
| コンポーネント | 状況 |
|---|---|
| コア機能 | ✅ 完了 |
| テスト | ✅ 厳格なユニット/プロトコル/スキーマのチェックと、ブラウザーを使用したシナリオ |
| ドキュメント | ✅ セットアップ、互換性、トラブルシューティング、公開ツールの仕様 |
| パッケージ | ✅ PyPI メタデータとビルドチェック |
| 状況 | 🟡 ベータ版。実際のブラウザー動作は、ローカルの Chrome/Chromium および対象サイトに依存します |
バージョン:0.8.8 | ライセンス:Apache 2.0 | メンテナンス状況:✅ 継続中
🗺️ ロードマップ
現在(v0.8.8)
- 69 個のアトミックなナビゲーション、タブ/フレーム/シャドウ、アクセシビリティ、観測、操作、ブラウザー環境、ネットワーク、Cookie/ストレージ、待機、コンソールの各ツールをデフォルトですべて読み込みます
- stdio MCP サーバー統合
- ローカルセットアップの Doctor 診断
- 安定した JSON ミラー、
structuredContent、およびツールごとに型定義された MCPoutputSchema - よくある障害に対する、
error.details.hints内の構造化された復旧ヒント -
DIALOG_PENDING/DIALOG_NOT_FOUNDの復旧機能を備えたサニタイズ済みブラウザー障害と、有限でない JavaScript 値に対する厳密な標準準拠 JSON - リンクの多いページでもコントロールやフォームが表示される、バランスの取れた
page_snapshot出力 - アトミックな入力、選択、チェック、クリック、キーボード、アップロード、待機、状態読み取りの各ツールにより、ライブラリー固有の分岐を設けずにネイティブコントロールとフレームワーク駆動のウィジェットに対応
- 63 個のタブスコープツールで安定したオプションの
tab_idターゲティング、タブごとのアクション直列化、タブ間の並列処理、および処理完了を待つクローズ/クリーンアップのセマンティクス -
tab_list、tab_switch、tab_close、およびpage_navigate(new_tab=true, background=..., new_window=..., new_context=...)によるタブ管理 - タブ所有のネットワークリスナートークン、パケットカーソル、タイムアウトの証跡、キャンセルセーフなパケット復旧、および決定的なクローズ時クリーンアップ
-
page_observe、page_evaluate、wait_until、およびナビゲーション、クリック、入力時に任意で指定できるobserve=trueによる変更を備えた、観測可能なアクション -
page_console_logs、page_observe内のコンソール概要、およびobserve=trueによるコンソール変更フィールドを備えた、コンソールの可観測性 - フォーム、コンポーネントライブラリー、チャレンジ、利便性向上の各ワークフローは MCP コアの対象外です
- クロスオリジン iframe、許可済み Turnstile フィクスチャ、Xiaohongshu に似た範囲限定の調査に関するリポジトリーの Skills サンプルは、静的カタログから検索でき、wheel/sdist パッケージから除外されます
- 機能検出に基づく
page_dialog_respond、追加されたダブルクリック/コンテキストクリックの動作、および安全なArtifactRefメタデータを備えた、セレクター/座標/キーボードによるダウンロードの関連付け - 機密情報を含む Web Storage の値には
include_values=trueが必要です。キーボードおよびキーボードによるダウンロードの結果には、秘匿化されたメタデータのみが表示されます - タブごとのダウンロードトリガーロック、共有期限、クリーンアップ/再実行の保証、および失敗時に処理を止める 250ms の遅延ミッションガード
- ワークロードごとに 10 回の分離実行を行い、機械可読な証跡を記録し、副作用の重複がゼロの、再現可能な W01-W08 公開ツールベンチマーク
- HTTP/XHR/Fetch の観測に対応する
network_listen_start、network_listen_wait、network_listen_stopを備えたネットワークリスナーのベータ版 - URL、認証情報、ヘッダー、Cookie、ネットワーク本文、エラー、受信記録、テキストミラーに対する公開レスポンスの秘匿化。リスナーの待機は、無関係なブラウザーアクションから分離されます
- ヘッダー、ユーザーエージェント、ブロック対象 URL の書き込み結果を秘匿化し、Cookie と Web Storage を保持するキャッシュのみのクリアに対応した、ブラウザーのみのリクエスト環境制御
-
page_pointer_move、page_pointer_drag、page_click_xyに対応するdirectプロファイルと、決定的で範囲を限定したnaturalプロファイル。正確な終点と、失敗時も安全なリリースを備えています - キャンバス、マップ、範囲選択、ビジュアルエディターでの 1 回の押下継続型マルチセグメントジェスチャーに対応する、オプションで範囲を限定した
page_pointer_drag.waypoints - DrissionPage 4.x 向けの、ファイルアップロード、スクロール、ホバー、選択/チェック、キーボード、iframe、シャドウ DOM、Cookie、ストレージの各ツール
- ブラウザー Cookie の純粋な設定/取得/削除/クリアフロー。成功した結果に秘匿化済みの値を含むメタデータが保持される、範囲を限定した一括書き込みを含みます
- サポート対象のブラウザーマトリックスで、ネイティブ DrissionPage 入力を介して入力を制御された状態で置換し、検証する 10 サイクル
-
frame_*を介したクロスオリジン OOPIF 読み取りと、DrissionPage を介したshadow_*によるクローズド Shadow DOM の検索。より限定的なポインターターゲティングについては別途記載されています - フレーム境界/ドキュメントアクセスの分類に加え、本番のチャレンジワークフロー向けに、外側の表示領域、トップレベルビューポート座標、スクロール受信記録、座標による操作可能性の証跡を提供
- ローカルのチャレンジサーフェスおよびオプトインの公式 Turnstile テストキーに対応したベンチマーク。親ページの事後条件、スクリーンショット、トークンセーフな証跡を備えています
- 要素の読み取り、アクション、待機、アップロード、クリックとダウンロードの関連付けで、後方互換性のある文字列または構造化セレクター/アクセシビリティターゲットに対応。順序付きフレームを先に解決し、次に順序付き Shadow DOM ホストを解決します
- 自律的な検索・操作・検証ループに対応する、範囲を限定したアクセシビリティスナップショット、処理を行わないネイティブダイアログの観測、ライブ要素の状態/ジオメトリー
- ブラウザー権限の観測/設定/リセット、管理された PDF/MHTML アーティファクト、自動ファイル選択ダイアログのインターセプト、および破棄可能な Chromium コンテキストで分離された、認証情報を秘匿化する HTTP 認証
- Chrome サンドボックスはデフォルトで有効です。
DP_NO_SANDBOX=1は、制限付きコンテナー/root 環境専用です - 公開結果に、保持されるアクション履歴、生成されたコードスニペット、絶対パスのスクリーンショットは含まれません
- ナビゲーションおよびスクリーンショットパスに対する、オプトインのローカル安全ポリシー
- リポジトリーのサンプルメタデータを含むオプションの Skills カタログリソースを 1 つ提供し、プロンプトはゼロです。Skills、評価、互換性、トラブルシューティングのドキュメントも含まれます
- PyPI での配布
- 公式 MCP Registry のパッケージメタデータと、タグによって公開を制御するワークフロー
📖 統合例
Codex CLI / IDE
[mcp_servers.drissionpage]
command = "drissionpage-mcp"
startup_timeout_sec = 20
tool_timeout_sec = 60
次のコマンドで確認します。
codex mcp list
Claude Code
{
"mcpServers": {
"drissionpage": {
"command": "drissionpage-mcp"
}
}
}
設定ファイル:~/.config/claude-code/mcp_settings.json(macOS/Linux)または
%APPDATA%\claude-code\mcp_settings.json(Windows)。
Cursor
{
"mcpServers": {
"drissionpage": {
"command": "drissionpage-mcp"
}
}
}
設定ファイル:~/.cursor/mcp.json(グローバル)または .cursor/mcp.json(プロジェクト)。Cursor Settings → Tools & MCPs → New MCP Server から追加することもできます。
Claude Desktop
{
"mcpServers": {
"drissionpage": {
"command": "drissionpage-mcp"
}
}
}
接続すると、ツールが自動的に読み込まれます。
🤝 コントリビューション
コントリビューションを歓迎します!
- リポジトリをフォークします
- 機能ブランチを作成します
- 対象を絞って変更します
- 関連するチェックを実行します
- プルリクエストを送信します
セットアップ、検証、互換性に関する要件については、CONTRIBUTING.md をご覧ください。
🔒 セキュリティ
- お使いの環境でローカルに実行されます
- 認証済みセッション、Cookie、ダウンロード、ページコンテンツにアクセスできる場合があるローカルブラウザーを使用します
- ローカルマシンからアクセスできるあらゆるサイトを開いて操作できます
- 外部 API の認証情報は不要です
ベストプラクティス:
- 機密性の高いワークフローには専用のブラウザープロファイルを使用してください
- 認証済みシステムや本番システムでの操作を許可する前に、MCP クライアントのプロンプトを確認してください
- ウェブサイトの利用規約、robots.txt、レート制限を遵守してください
- 報告方法と安全な使用方法については、SECURITY.md をご覧ください
📄 ライセンス
Apache License 2.0 のもとでライセンスされています。詳細は LICENSE をご覧ください。
📈 統計
🌟 応援する
このプロジェクトが役に立った場合は、ぜひご協力ください。
- ⭐ GitHub でスターを付ける
- 📤 周囲の方に共有する
- 💬 フィードバックや提案を送る
- 🐛 改善に役立つ問題を報告する
Wukunyun が ❤️ を込めて作成
ワークフローを自動化する準備はできましたか? 今すぐインストール:python -m pip install -U drissionpage-mcp
🆕 最新バージョン:v0.8.8
2026-09-08 にリリースされました。このリリースでは、69 個のツールからなるレジストリを維持しながら、ネットワークリスナーのライフタイムを明示し、復旧可能にしました。
network_listen_startは、リスナーの世代ごとに、新しいlistener_token、ライフサイクル状態、パケットカーソル、起動タイミングを返します。network_listen_waitはトークンを受け取り、累積消費量、単調増加するパケットインデックス、経過時間、明示的なタイムアウト状態、残りのタイムアウト時間を報告します。network_listen_stopは古いトークンをLISTENER_NOT_FOUNDで拒否し、同じタブ上の置き換え後のリスナーを古いタスクが停止するのを防ぎます。- 待機がキャンセルされても、DrissionPage によってすでに取り出されたパケットは保持されます。また、タブを閉じる際には、ネイティブの終了処理の前にベストエフォートでリスナーの停止とキューのクリーンアップが行われます。
- 実際の Chromium テストでは、タブごとにリスナーを分離し、アクティブなドライバーやキューを残さずに開始・停止を 100 サイクル実行します。公開インターフェースは引き続き 69 個のツール、0 個のプロンプト、1 個の Skills カタログリソースです。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。
