Safari Devtools Mcp について
Safari DevTools MCP は、macOS 上で動作する Safari を調査、デバッグ、自動化するためのコーディングエージェント向け MCP サーバーです。WebDriver によるブラウザー制御に加え、ネットワーク、DOM、CSS、ストレージ、タブを調べられます。
主な機能
- 01コンソールとネットワークの調査
- 02安定した UID 付き DOM スナップショット
- 03CSS スタイルとストレージの管理
- 04Safari のタブとページの制御
- 05フォーム、キー、ポインターの自動操作
- 06iOS Safari の対応状況チェック
活用シーン
- 01ページエラーと通信応答の診断
- 02Safari を使ったページテストの自動化
- 03CSS とアクセシビリティ構造の調査
- 04モバイル Safari 互換性の確認
MCP 対応
stdio 経由で、Safari のデバッグ・自動化ツールとガイド付きプロンプトを MCP クライアントに公開します。クライアントから実行中の Safari セッションを調査、操作できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Safari DevTools MCP
safari-devtools-mcp を使うと、コーディングエージェント(Claude、Cursor、Copilot、Gemini など)が macOS 上で実行中の Safari ブラウザーを操作し、調査できます。Model-Context-Protocol(MCP)サーバーとして機能し、デバッグ、自動化、テストのために、AI コーディングアシスタントから Safari DevTools にアクセスできるようにします。
Chrome の開発者は、Google の chrome-devtools-mcp を使って、強力な AI デバッグ機能を利用できます。Safari の開発者にも同等のものが必要です。このプロジェクトは、同じツール名とパラメータースキーマを備えた同様のエクスペリエンスを Safari に提供するため、ブラウザー間を最小限の手間で切り替えられます。
変更履歴 | コントリビューション
注: このサーバーは、ブラウザーのコンテンツ(ページデータ、コンソールログ、ネットワークトラフィック)を MCP クライアントに公開します。セッション中は、機密性の高いウェブサイトの閲覧や認証情報の入力を避けてください。
safari-devtools-mcp を選ぶ理由
このプロジェクトでは、スクリプトだけでは実現できない機能に WebDriver を使用しています。
- ネットワークリクエスト/レスポンスボディの取得 — fetch と XHR の呼び出しを、完全なヘッダー、ペイロード、タイミング情報とともにインターセプトします
- アクセシビリティツリーによる DOM スナップショット — 壊れやすい CSS セレクターではなく、ページの再レンダリング後も維持される安定した要素 UID を使用します
- CSS の計算済みスタイルの調査 — 任意の要素から、任意の計算済みプロパティを読み取れます
- Cookie とストレージの管理 — Cookie、localStorage、sessionStorage の読み取り、書き込み、削除ができます
- 要素単位のスクリーンショット — ビューポート全体だけでなく、個々の要素をキャプチャできます
- セッションの自動復旧 — SafariDriver のセッションが終了したことを検知し、透過的に再接続します
主な機能
- ブラウザーデバッグ:コンソールログの取得、ネットワークリクエストの調査、JavaScript の評価を、スタックトレースやリクエスト/レスポンスの詳細情報とともに行えます。
- 信頼性の高い自動化:アクセシビリティツリーのスナップショットと安定した UID を使って、クリック、入力、フォームへの入力、ドラッグ&ドロップ、キーボードショートカットの実行ができます。
- macOS とのネイティブ連携:AppleScript を使って、複数のウィンドウにまたがる Safari タブの一覧表示、切り替え、操作を行えます
要件
- macOS(Safari と SafariDriver は Apple 専用です)
- Node.js 18 以降(22 以降を推奨)
- リモートオートメーションを有効にした Safari
Safari のセットアップ
- Safari > 設定 > 詳細を開き、**「Web開発者向けの機能を表示」**にチェックを入れます
- 開発メニュー > **「リモートオートメーションを許可」**にチェックを入れます
- SafariDriver を承認します:
sudo safaridriver --enable
はじめに
標準の MCP 設定:
{
"mcpServers": {
"safari-devtools": {
"command": "npx",
"args": ["-y", "safari-devtools-mcp@latest"]
}
}
}
Claude Code
claude mcp add safari-devtools -- npx -y safari-devtools-mcp@latest
または、上記の標準設定を使用して、プロジェクトの .mcp.json に追加します。
Claude Desktop
標準設定を ~/Library/Application Support/Claude/claude_desktop_config.json に追加します。
Cursor
Cursor の MCP 設定に標準設定を追加します。
VS Code
標準設定を .vscode/mcp.json に追加します。
Copilot CLI
copilot mcp add safari-devtools -- npx -y safari-devtools-mcp@latest
Gemini CLI
gemini mcp add safari-devtools -- npx -y safari-devtools-mcp@latest
または、標準設定を ~/.gemini/settings.json に追加します。
Gemini Code Assist
プロジェクトのルートにある .gemini/settings.json に標準設定を追加します。
JetBrains AI Assistant & Junie
プロジェクトのルートにある .junie/mcp.json に標準設定を追加します。
Raycast
Raycast で「Install MCP Server」を開き、次の内容を入力します:
- コマンド:
npx - 引数:
-y safari-devtools-mcp@latest
または、コマンドを開く前に上記の標準設定 JSON をコピーすると、Raycast がフォームに自動入力します。
Visual Studio
ソリューションのルートにある .vs/mcp.json に標準設定を追加します。
Warp
~/.warp/mcp.json にある Warp の MCP 設定ファイルに標準設定を追加します。
ソースからビルド
git clone https://github.com/HayoDev/safari-devtools-mcp.git
cd safari-devtools-mcp
npm install && npm run build
次に、ビルドしたエントリーポイントを MCP クライアントに指定します:
{
"mcpServers": {
"safari-devtools": {
"command": "node",
"args": [
"/path/to/safari-devtools-mcp/build/src/bin/safari-devtools-mcp.js"
]
}
}
}
最初のプロンプト
https://example.com に移動し、スナップショットを取得して、コンソールエラーを一覧表示してください。
スリムモード
ツールの説明を短くしてトークン使用量を削減するには、--slim を使用します。コンテキストが限られたモデルや長時間の会話で役立ちます:
{
"mcpServers": {
"safari-devtools": {
"command": "npx",
"args": ["-y", "safari-devtools-mcp@latest", "--slim"]
}
}
}
プロンプト(スキル)
このサーバーは、ガイド付きデバッグワークフローを MCP プロンプトとして提供します。プロンプトに対応したクライアント(例:Claude Desktop、Claude Code)では、名前を指定して呼び出せます:
| プロンプト | 説明 |
|---|---|
safari-devtools | はじめに — ツールの概要、推奨ワークフロー、Safari 固有の注意事項 |
a11y-debugging | アクセシビリティ監査 — a11y ツリーの検査、axe-core の注入、WCAG のチェック |
safari-specific-debugging | WebKit の特有の問題をデバッグ — CSS プレフィックス、JS 機能の不足、ITP/CORS の問題 |
performance-debugging | パフォーマンス分析 — Navigation Timing、Core Web Vitals、リソースのウォーターフォール |
ツール(45)
デバッグ
| ツール | 説明 |
|---|---|
list_console_messages | レベル(log、warn、error)で絞り込んでコンソールメッセージを一覧表示します |
get_console_message | スタックトレースと引数を含む詳細なメッセージを取得します |
clear_console | キャプチャしたすべてのコンソールメッセージを消去します |
list_network_requests | ネットワークリクエスト(Fetch、XHR、リソースの読み込み)を監視します |
get_network_request | ヘッダーと本文を含む、リクエストとレスポンスの詳細を取得します |
clear_network | キャプチャしたすべてのネットワークリクエストを消去します |
evaluate_script | ブラウザーのコンテキストで JavaScript を実行し、結果を返します |
take_screenshot | ページまたは特定の要素の PNG スクリーンショットを撮影します |
take_snapshot | 要素の指定に使える安定した UID を含む、DOM のアクセシビリティツリーのスナップショットを取得します |
ページコンテンツ
| ツール | 説明 |
|---|---|
get_page_content | ページタイトル、URL、表示されているテキストコンテンツを取得します |
get_html_source | ページの HTML ソース全体を取得します |
extract_links | テキスト、href、rel 属性を含むすべてのリンクを抽出します |
extract_meta | メタタグ(og:、twitter:、description など)を抽出します |
ナビゲーション
| ツール | 説明 |
|---|---|
list_pages | すべてのウィンドウで開いている Safari のタブを一覧表示します |
select_page | 特定のタブに切り替えます |
new_page | 新しいタブを開き、URL に移動します |
close_page | タブを閉じます |
navigate_page | URL への移動、戻る、進む、再読み込みを行います |
wait_for | ページに特定のテキストが表示されるまで待機します |
resize_page | ブラウザーウィンドウのサイズを変更します |
handle_dialog | ブラウザーのダイアログ(alert、confirm、prompt)を承認または閉じます |
スクロール
| ツール | 説明 |
|---|---|
scroll | 指定した量だけ、任意の方向にページをスクロールします |
scroll_to_element | UID で指定した要素が表示される位置までスクロールします |
CSS の検査
| ツール | 説明 |
|---|---|
get_computed_style | UID で指定した任意の要素の計算済み CSS スタイルを取得します |
Cookie とストレージ
| ツール | 説明 |
|---|---|
get_cookies | ブラウザーの Cookie を取得します。名前またはドメインで絞り込むこともできます |
set_cookie | 名前、値、および省略可能な属性を指定して Cookie を設定します |
delete_cookie | 名前を指定して Cookie を削除するか、すべての Cookie を削除します |
get_storage | localStorage または sessionStorage からデータを読み取ります |
set_storage | localStorage または sessionStorage にキーと値のペアを書き込みます |
delete_storage | localStorage/sessionStorage のキーを削除するか、すべてのエントリーを消去します |
入力の自動化
| ツール | 説明 |
|---|---|
click | スナップショット内の UID を指定して要素をクリックします |
click_at | 指定した x/y 座標をクリックします |
right_click | 要素を右クリックします(コンテキストメニュー) |
select_option | 値またはラベルを指定して、ドロップダウンから項目を選択します |
hover | 要素にカーソルを合わせます |
fill | 入力フィールドに入力するか、ドロップダウンから選択します |
fill_form | 複数のフォームフィールドに一度に入力します |
type_text | 現在フォーカスされている要素にテキストを入力します |
drag | 要素間または座標間でドラッグ&ドロップします |
press_key | キーまたはキーの組み合わせ(例:Meta+A、Enter)を押します |
upload_file | ファイル入力からファイルをアップロードします |
iOS Safari の検証
| ツール | 説明 |
|---|---|
inspect_viewport_meta | ビューポートのメタタグを解析し、iOS のベストプラクティス(幅、ズーム、viewport-fit)に照らして検証します |
get_safe_area_insets | CSS の safe-area-inset 値を読み取り、ノッチ付きデバイスにページが正しく対応しているか確認します |
check_ios_web_app_readiness | ホーム画面への追加/PWA 対応状況(apple-touch-icon、manifest、スプラッシュ画面、ステータスバー)を監査します |
check_webkit_compatibility | CSS.supports() を使って、実際の Safari セッションでページの CSS を確認します |
アーキテクチャ
MCP Client (Claude, Cursor, etc.)
| stdio (MCP protocol)
v
Safari DevTools MCP Server
|
v
+-------------------------------+
| SafariDriver |
| +-- Selenium WebDriver | <-- Browser automation
| +-- JS Injection | <-- Console/Network capture
| +-- AppleScript (osascript) | <-- Native tab management
+-------------------------------+
|
v
Safari Browser
既知の制限事項
- 単一セッション:Safari で同時に使用できる WebDriver セッションは 1 つのみです。複数のインスタンスを実行することはできません。
- macOS のみ:Safari と SafariDriver は Apple 専用のため、このサーバーは Linux や Windows では動作しません。
- ヘッドレスモード非対応:Safari はヘッドレス動作をサポートしていません。ブラウザーウィンドウを表示する必要があります。
- コンソールの注入前の欠落:キャプチャスクリプトの注入前に記録されたコンソールメッセージはキャプチャされません。
- ネットワークの注入前の欠落:注入前に行われたネットワークリクエストは、詳細が限定された状態(タイミングとサイズのみで、ヘッダーやステータスコードは含まれません)で Performance API 経由で補完されます。
- PNG のみ:Safari WebDriver がサポートするスクリーンショット形式は PNG のみです。JPEG と WebP は利用できません。ページ全体のキャプチャには対応していません。
- AppleScript の権限:タブ管理機能を使うには、
osascriptに対する macOS のアクセシビリティ権限が必要です。
クレジット
- chrome-devtools-mcp(Google/ChromeDevTools 提供)— 本プロジェクトが手本とし、インターフェース標準として採用したプロジェクトです。Chrome と Safari をシームレスに切り替えられるよう、ツール名とスキーマは意図的に互換性を持たせています。
- safari-mcp-server — Safari MCP 統合の先行事例として、開発中に参考にしました。
ライセンス
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。