mcpField
S
Safari MCP

Safari MCP

ローカル
github.com/achiya-automation生産性2251 日前に更新

Safari MCP について

Safari MCPは、使用中のログイン済みSafariをAIエージェントが自動操作するためのmacOS向けMCPサーバーです。ブラウザー操作ツールを提供し、Chromeやブラウザー自動化用依存関係なしでバックグラウンド実行できます。

主な機能

  1. 01ページ移動、クリック、フォーム入力
  2. 02スクリーンショットとアクセシビリティスナップショット
  3. 03ネットワークとストレージへのアクセス
  4. 04Safariのバックグラウンド操作
  5. 05セッションごとのタブ所有権
  6. 06stdioと共有HTTPトランスポート

活用シーン

  1. 01ログイン済みサイトでの作業を自動化
  2. 02操作前にページ構造を確認
  3. 03React、Vue、Angular、Svelteのフォーム入力
  4. 04タブ状態を分離して複数エージェントを実行

MCP 対応

stdioまたは共有HTTPデーモンを通じて、Safariブラウザー自動化ツールをMCPクライアントに公開します。セッションごとにタブの所有権を管理し、並行するクライアントの操作対象を分離します。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"achiya-automation-safari": {
"command": "npx",
"args": [
"-y",
"safari-mcp"
]
}
}
}
起動コマンドnpx -y safari-mcp

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npmsafari-mcp2.23.0

ツール

ツール一覧はまだ取得されていません

ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。

詳細

Safari MCP サーバー — macOS 上の AI エージェント向け、98 個のネイティブブラウザー自動化ツール

🦁 Safari MCP

コーディングエージェントのためのブラウザーです。

ログイン済みの実際の Safari — Chrome も、発熱も、ヘッドレスも不要です。

npm バージョン npm ダウンロード数 ライセンス:MIT macOS

VS Code にインストール · VS Code Insiders · Cursor にインストール

98 個のツール · Chrome/Puppeteer/Playwright は不要 · コマンドあたり約 5ms · Chrome より CPU 使用率を 60% 削減

クイックスタート · 98 個すべてのツール · 使用例 · Safari MCP を選ぶ理由 · アーキテクチャ · 変更履歴

Safari MCP のデモ

❌ Safari MCP がない場合

AI エージェントがブラウザーを使う必要がある場合、次のいずれかになります。

  • Playwright で Chromium を起動する — ログイン情報も Cookie もセッションもありません
  • Chrome DevTools MCP を使う — 2 つ目のブラウザーを動かしてファンをフル回転させます
  • ヘッドレススクレイパーに頼る — Cloudflare、reCAPTCHA、ボット検知によってブロックされます

✅ Safari MCP がある場合

AI が操作するのは、すでにログインしている Safariです — Gmail、GitHub、Ahrefs、Slack、銀行など。

ネイティブ WebKit。CPU 使用率を約 60% 削減。バックグラウンド動作。98 個のツール。npx コマンド 1 つ。macOS 専用です。

📰 freeCodeCamp に掲載: macOS で AI コーディングエージェントをブラウザーに接続する方法 · HackerNoon:React、Shadow DOM、CSP のリバースエンジニアリング

🍎 Apple が公式の Safari MCP をリリースしました — safaridriver --mcp は Safari Technology Preview 247(2026 年 7 月)で初登場し、Safari 27.0 以降の安定版にも搭載されています。これはデバッグ用に分離された自動化セッションを操作します。safari-mcp が操作するのは、すでにログインしている実際の Safariです — Cookie とセッションをそのまま使い、バックグラウンドで 98 個のツールを利用できます。詳しい比較は以下をご覧ください。


主な特長

  • 98 個のツール — ナビゲーション、クリック、フォーム、スクリーンショット、ネットワーク、ストレージ、アクセシビリティなど
  • 発熱ゼロ — Apple Silicon 上のネイティブ WebKit を使用し、Chrome より CPU 使用率を約 60% 削減
  • 実際のブラウザーを使用 — すべてのログイン情報、Cookie、セッションを保持します(Gmail、GitHub、Ahrefs など)
  • バックグラウンド動作 — Safari はバックグラウンドで動作し、ウィンドウを奪いません
  • ブラウザー依存関係なし — Puppeteer、Playwright、WebDriver、Chrome は不要
  • プロセスを維持 — 1 つの osascript プロセスを再利用します(コマンドあたり約 5ms、通常は約 80ms)
  • フレームワークに対応 — ネイティブセッターによる React、Vue、Angular、Svelte のフォーム入力

ユーザー自身の言葉

依頼して集めた推薦文ではありません。公開されているイシュートラッカーから引用し、それぞれ引用元のスレッドにリンクしています。

「通常のSafariプロファイルに対して、複数のPiセッション/サブエージェントを並行して実行しています。Cookieとログイン情報を共有するのは意図的です。」 — @maxim、実際のブラウザーに対して並行してエージェントを実行することについて

「このサーバーには意図的なタブ所有権モデルがあります……この点はコードで慎重に扱われており、デフォルトのケースでは適切な安全対策です。」 — @turner-moore、タブに触れないようガードが拒否する理由について

「パッケージから直接ローカルで検証しました。Safari MCP doctor 6/6。」 — @jrepp、フォーカスヘルパーのキュー整列のバグを見つけて修正した方


クイックスタート

前提条件
  • Safariが動作するバージョンのmacOS
  • Node.js 20+
  • Safari → 設定 → 詳細 → Webデベロッパー向けの機能を表示 ✓
  • Safari → 設定 → デベロッパー → Apple EventsからのJavaScriptを許可 ✓
インストール(コマンド1つ)
npx safari-mcp

これで完了です。グローバルインストールは不要です。または、恒久的にインストールするには:

npm install -g safari-mcp
MCPクライアントを設定する

すべてのクライアントでSafari MCPの実行方法は同じです。npx safari-mcpを使います。エディターを選択してください。

Claude Code
claude mcp add safari -- npx safari-mcp

または、~/.mcp.jsonを編集します。

{
  "mcpServers": {
    "safari": {
      "command": "npx",
      "args": ["safari-mcp"]
    }
  }
}
Claude Desktop

~/Library/Application Support/Claude/claude_desktop_config.jsonを編集します。

{
  "mcpServers": {
    "safari": {
      "command": "npx",
      "args": ["safari-mcp"]
    }
  }
}

保存後、Claude Desktopを再起動してください。

Cursor

ワンクリックでインストール:Cursorにインストール

または、プロジェクト内の.cursor/mcp.jsonを編集します。

{
  "mcpServers": {
    "safari": {
      "command": "npx",
      "args": ["safari-mcp"]
    }
  }
}
VS Code / VS Code Insiders

ワンクリックでインストール:VS Codeにインストール

または、.vscode/mcp.jsonを編集します。

{
  "servers": {
    "safari": {
      "type": "stdio",
      "command": "npx",
      "args": ["safari-mcp"]
    }
  }
}
Windsurf

プロジェクト内の.windsurf/mcp.json(またはグローバル設定の~/.codeium/windsurf/mcp_config.json)を編集します。

{
  "mcpServers": {
    "safari": {
      "command": "npx",
      "args": ["safari-mcp"]
    }
  }
}
Cline

VS CodeでClineを開き → MCPアイコンをクリック → MCP設定を編集 → 次を追加します。

{
  "mcpServers": {
    "safari": {
      "command": "npx",
      "args": ["safari-mcp"]
    }
  }
}
Continue

~/.continue/config.yaml(またはワークスペース内の.continue/config.yaml)を編集します。

mcpServers:
  - name: safari
    command: npx
    args:
      - safari-mcp
Goose

~/.config/goose/config.yamlを編集します。

extensions:
  safari:
    name: safari
    type: stdio
    cmd: npx
    args:
      - safari-mcp
    enabled: true
LM Studio

LM Studioを開き → 設定 → MCPサーバー → サーバーを追加:

  • 名前: safari
  • コマンド: npx
  • 引数: safari-mcp
Zed

Zedを開き → 設定 → 「Context Servers」を検索して追加します。

{
  "context_servers": {
    "safari": {
      "command": {
        "path": "npx",
        "args": ["safari-mcp"]
      }
    }
  }
}
別の方法:Homebrew
brew install achiya-automation/tap/safari-mcp
別の方法:ソースから
git clone https://github.com/achiya-automation/safari-mcp.git
cd safari-mcp && npm install

使用ワークフロー

Safari MCPを使うAIエージェントに推奨されるパターン:

1. safari_snapshot        → Get page state (accessibility tree)
2. safari_click/fill/...  → Interact with elements by ref
3. safari_snapshot        → Verify the result

要素のターゲティング — ツールでは複数のターゲティング方法を利用できます。

方法例最適な対象
CSSセレクター#login-btn、.submit一意の要素
表示テキスト"Sign In"、"Submit"ボタン、リンク
座標x: 100, y: 200Canvas、カスタムウィジェット
スナップショットのrefref: "e42"アクセシビリティツリー内の任意の要素

ヒント: まずsafari_snapshotを使って要素のrefを取得し、正確なターゲティングにはrefを使ってください。CSSセレクターより高速で信頼性も高くなります。


複数のエージェントを同時に実行する

複数のエージェントまたはサブエージェントが同時に1つの Safari を操作すると、アクティブなタブの制御を奪い合います。クライアントごとに1つのプロセスを実行するのではなく、共有 HTTP デーモンに接続すれば、この問題を回避できます。

SAFARI_MCP_HTTP=1 SAFARI_MCP_HTTP_PORT=9225 npx safari-mcp

次に、すべてのクライアントをそのデーモンに接続します。

{ "mcpServers": { "safari-mcp": { "type": "http", "url": "http://127.0.0.1:9225/mcp" } } }

1つのデーモンで複数のセッションを実行できます。各セッションは独自のタブ状態を持ちます。サーバーは MCP セッション ID を基に、activeTabIndex、所有権フラグ、固有のタブマーカーを管理するため、セッション A がセッション B のタブを読み取ったり操作したりすることは物理的に不可能です。

単に整然としているだけでなく、安全性を確保しているのは次の2つの性質です。

  • タブの識別にはインデックスではなくマーカーを使います。 各セッションは、開いたページに固有の ID を記録するため、ページ遷移後も、ユーザーがほかのタブの順序を入れ替えたり閉じたりした後も、所有権が維持されます。インデックスだけでは、気付かないうちに別のタブを操作してしまいます。

  • 安全側に倒して処理を停止します。 セッションのマーカーが付いたタブを再検出できない場合、手前にあるタブへ切り替えるのではなく、すべてのツールが処理を拒否します。手前のタブは、たいていあなたが使っているものだからです。

    Tab tracking lost — refusing to fall back to "current tab of window"
    (would target the user's active tab). Call safari_new_tab to reopen.
    

これにより、プロセス数も大幅に削減されます。17の同時セッションで約17個の node プロセスが必要だったところ、1個で済みます。

SAFARI_PROFILE は任意の設定です。設定しなければ、通常の Safari ウィンドウ、Cookie、ログイン状態を維持したままセッションが接続されます。詳しくは docs/http-transport-design.md をご覧ください。

永続デーモンよりも stdio(エージェントごとに1プロセス)を使いたい場合も、それで問題ありません。その場合、分離はプロセス境界そのものによって実現されます。ただし、クライアントが mcporter を介して複数のエージェントを多重化する場合は注意が必要です。mcporter は、どのトランスポートを選んでも、すべてのエージェントで1つの MCP クライアントをキャッシュします。そのため、サーバーは個別のセッションを認識できず、セッションごとの分離が機能しません。#76 をきっかけに @maxim が作成した pi 拡張機能の mcporter-lanes は、この問題を上流で解決します。各エージェントセッションに独自のデーモンディレクトリ、ひいては独自の safari-mcp を割り当て、アイドルタイムアウトによってプロセスが増え続けないようにします。


すでに開いているタブを操作する

デフォルトでは、サーバーは自分で開いたタブだけを操作します。自分が開いたタブを指定しても、操作を拒否します。

Tab safety: refusing "click" — current tab (https://mail.example.com/inbox) was not
opened by this MCP session. Use safari_new_tab or safari_switch_tab to target your own tab.

このデフォルト設定があるのは、初期バージョンがユーザーのタブをクリックして開いたり、閉じたりしていたためです。しかし、「今見ている記事を読んで」や「画面に表示されているフォームに入力して」といった操作は実際に必要です。また、ページを開き直すと、そのタブを使う価値を高めていたセッション状態が失われます。SAFARI_MCP_ALLOW_USER_TABS=1 を設定すると、明示的に safari_switch_tab を呼び出した場合、タブを拒否する代わりにセッションが引き継ぎます。それ以降、そのセッションは自分で開いたタブと同じようにそのタブを操作し、引き継いだことも通知します。

{ "tabIndex": 3, "safeUrl": "https://mail.example.com/inbox", "note": "(user tab, opted-in)" }

このフラグを設定しても、意図的に次の動作は変わりません。

  • 引き継ぎを許可しますが、ガードは解除しません。 引き継ぎを行うのは safari_switch_tab だけで、対象も指定したタブだけです。通常のクリックやページ遷移では、たまたま手前にあるタブへ切り替わることはありません。サーバーは、あなたが移動した先ではなく、あなたが指定したタブを操作します。
  • safari_close_tab は引き続き拒否されます。 閉じる操作だけは取り消せないため、引き継いだタブは操作できますが、破棄することはできません。閉じる場合は自分で操作してください。
  • 引き継ぎはセッション内に限られます。 共有の所有権ファイルには何も書き込まれないため、引き継ぎ状態は次のプロセスに漏れることなく、セッションの終了とともに解除されます。

safari_doctor にはフラグの状態が表示され、引き継いだタブに対するすべての操作で (user tab, opted-in) がログに記録されます。そのため、「なぜ自分のタブを操作したのか」という疑問にも、謎ではなく理由を確認できます。デフォルトではオフです。自分のブラウジングセッション内で作業させたいエージェントにのみ設定してください。#92 で設計されました。


環境変数

変数デフォルト機能
SAFARI_MCP_HTTPoffクライアントごとにプロセスを起動する代わりに、共有 HTTP デーモンを 1 つ実行します(上記を参照)。
SAFARI_MCP_HTTP_PORT9225デーモンのポートです。
SAFARI_PROFILEunsetセッションを名前付き Safari プロファイルに紐付けます。未設定の場合は、通常のウィンドウを使用します。
SAFARI_MCP_ALLOW_USER_TABSoffsafari_switch_tab が、すでに開いているタブを拒否せずに引き継げるようにします(下記を参照)。
MCP_MAX_TABS61 つのセッションで開いておけるタブの数です。さらに 1 つ開くと、そのセッションで最も古いタブが閉じられ、safari_new_tab がそのタブを evictedTab(そのレシート)に記録します。
SAFARI_MCP_RAISE_ON_NAVIGATEoffナビゲーション時に Safari を前面に表示し、フォーカスガードが以前のアプリを再び前面に戻すのを防ぎます。
SAFARI_MCP_SCREENSHOT_MAX_WIDTHunsetすべての safari_screenshot をこのピクセル幅に縮小します(Retina キャプチャはビューポートの 2 倍のサイズです)。呼び出しごとの maxWidth で上書きできます。
SAFARI_MCP_KEEPALIVE_TABoffプロファイルウィンドウで、デーモンが提供するページを 1 つ開いたままにし、コマンド間で Safari が拡張機能のワーカーを停止しないようにします。
SAFARI_MCP_OPEN_WINDOW_CMDunsetプロファイルウィンドウが表示されていない場合(再起動後など)に、プロファイル名を指定して実行するコマンドです。Safari にフォーカスを移さずにウィンドウを開く必要があります。

SAFARI_MCP_RAISE_ON_NAVIGATE=1 は、ページを表示することが主な目的のエージェント向けです。たとえば、「YouTube を開いて」と答える音声アシスタントや、デモを操作するエージェントです。それ以外ではオフにしてください。デフォルトでは Safari MCP はバックグラウンドで動作し、フォーカスを使用中のアプリに戻すため、別の場所で入力を続けながらエージェントにページを操作させることができます。


ツール(98 個)

クリックしてツール一覧を展開 — カテゴリ別
ナビゲーション(4 個)
ツール説明
safari_navigateURL に移動します(HTTPS へ自動変換し、読み込みを待機)
safari_go_back履歴を戻ります
safari_go_forward履歴を進みます
safari_reloadページを再読み込みします(ハード再読み込みは任意)
ページの読み取り(3 個)
ツール説明
safari_read_pageタイトル、URL、テキストコンテンツを取得します
safari_get_sourceHTML ソース全体を取得します
safari_navigate_and_read1 回の呼び出しで移動して読み取ります
クリックと操作(6 個)
ツール説明
safari_clickCSS セレクター、表示テキスト、または座標を指定してクリックします
safari_double_clickダブルクリックします(単語の選択など)
safari_right_click右クリックします(コンテキストメニュー)
safari_hover要素にカーソルを合わせます
safari_click_and_waitクリックして、ナビゲーションを待機します
safari_click_and_readクリック後、更新されたページを返します。往復を減らせます(React Router と全ページ読み込みに対応)
フォーム入力(11 個)
ツール説明
safari_fill入力欄に値を入力します(React/Vue/Angular に対応)
safari_clear_field入力欄をクリアします
safari_select_optionドロップダウンの選択肢を選びます
safari_fill_form複数のフィールドにまとめて入力します
safari_fill_and_submit1 回の呼び出しでフォームに入力して送信します
safari_type_text実際のキー入力を行います(JS ベースで、System Events は使用しません)
safari_press_key修飾キーを指定してキーを押します
safari_react_select_setReact fiber を介して react-select v5 の値を設定します — メニュー UI を回避します
safari_react_select_list_options開かずに react-select v5 のドロップダウンの選択肢を一覧表示します
safari_replace_editorコードエディター(Monaco、CodeMirror、Ace、ProseMirror)の全コンテンツを置き換えます
safari_verify_stateエディターのフレームワークレベルの状態が想定と一致することを確認します — 送信前に古い DOM を検出します
スクリーンショットと PDF(3 個)
ツール説明
safari_screenshotPNG 形式でスクリーンショットを撮影します(ビューポートまたはページ全体)
safari_screenshot_element特定の要素のスクリーンショットを撮影します
safari_save_pdfページを PDF としてエクスポートします
スクロール(3)
ツール説明
safari_scrollピクセル単位で上下にスクロールします
safari_scroll_to指定した位置までスクロールします
safari_scroll_to_element要素までスムーズにスクロールします
タブ管理(5)
ツール説明
safari_list_tabsすべてのタブを一覧表示します(インデックス、タイトル、URL)
safari_new_tab新しいタブを開きます(バックグラウンドで開き、フォーカスを奪いません)
safari_close_tabタブを閉じます
safari_switch_tabインデックスを指定してタブを切り替えます
safari_wait_for_new_tab新しいタブ(OAuth ポップアップなど)が開くのを待ち、自動的に切り替えます
待機(2)
ツール説明
safari_wait_for要素、テキスト、または URL の変更を待ちます
safari_wait指定したミリ秒数だけ待ちます
JavaScript(3)
ツール説明
safari_evaluate任意の JavaScript を実行し、結果を返します
safari_eval_fileファイルパスから読み込んだ JavaScript を実行します(巨大なインラインスクリプトを避けられます)
safari_list_framesタブ内のすべてのドキュメント(メインページと各 iframe)を、frameId、URL、テキストの長さとともに一覧表示します。クロスオリジン iframe 内で実行するには、safari_evaluate の frame に frameId を渡します
要素の検査(4)
ツール説明
safari_get_element要素の詳細(タグ、矩形、属性、表示状態)
safari_query_all一致するすべての要素を検索します
safari_get_computed_style計算済み CSS スタイル
safari_detect_formsフィールドセレクターを含むすべてのフォームを自動検出します
アクセシビリティ(2)
ツール説明
safari_accessibility_snapshotアクセシビリティツリー全体:ロール、ARIA、フォーカス可能な要素
safari_snapshotすべてのインタラクティブ要素に参照 ID を付けたアクセシビリティツリー。ページの状態を確認する推奨方法です
ドラッグ&ドロップ(1)
ツール説明
safari_drag要素間、または座標間でドラッグします
ファイル操作(2)
ツール説明
safari_upload_fileJS DataTransfer 経由でファイルをアップロードします(ファイルダイアログは不要です!)
safari_paste_image画像をエディターに貼り付けます(クリップボードに触れません!)
ダイアログとウィンドウ(2)
ツール説明
safari_handle_dialogアラート/確認/プロンプトを処理します
safari_resizeブラウザーウィンドウのサイズを変更します
デバイスエミュレーション(2)
ツール説明
safari_emulateデバイス(iPhone、iPad、Pixel、Galaxy)をエミュレートします
safari_reset_emulationデスクトップ設定にリセットします
Cookie とストレージ(11)
ツール説明
safari_get_cookiesすべての Cookie を取得します
safari_set_cookieすべてのオプションを指定して Cookie を設定します
safari_delete_cookies1 つまたはすべての Cookie を削除します
safari_local_storagelocalStorage を読み取ります
safari_set_local_storagelocalStorage に書き込みます
safari_delete_local_storagelocalStorage を削除/消去します
safari_session_storagesessionStorage を読み取ります
safari_set_session_storagesessionStorage に書き込みます
safari_delete_session_storagesessionStorage を削除/消去します
safari_export_storageすべてのストレージを JSON としてエクスポートします(セッションのバックアップ/復元)
safari_import_storageJSON からストレージの状態をインポートします
クリップボード(2)
ツール説明
safari_clipboard_readクリップボードのテキストを読み取ります
safari_clipboard_writeクリップボードにテキストを書き込みます
ネットワーク(6)
ツール説明
safari_networkPerformance API 経由でネットワークリクエストをすばやく実行します
safari_start_network_capture詳細なキャプチャを開始します(fetch + XHR)
safari_network_detailsキャプチャしたリクエストをヘッダー/タイミングとともに取得します
safari_clear_networkキャプチャしたリクエストを消去します
safari_mock_routeネットワークレスポンスをモックします(fetch/XHR をインターセプト)
safari_clear_mocksすべてのネットワークモックを削除します
コンソール(4)
ツール説明
safari_start_consoleコンソールメッセージの記録を開始します
safari_get_console記録されたすべてのメッセージを取得します
safari_clear_console記録されたメッセージを消去します
safari_console_filterレベル(log/warn/error)でフィルタリングします
パフォーマンス(2)
ツール説明
safari_performance_metricsナビゲーションのタイミング、Web Vitals、メモリ
safari_throttle_networkslow-3g/fast-3g/4g/offline をシミュレートします
データ抽出(4)
ツール説明
safari_extract_tablesテーブルを構造化 JSON として取得します
safari_extract_metaすべてのメタデータ:OG、Twitter、JSON-LD、canonical
safari_extract_images画像を寸法と読み込み情報とともに取得します
safari_extract_linksrel、外部リンク/nofollow の検出情報とともにリンクを取得します
高度な機能(7)
ツール説明
safari_override_geolocationブラウザーの位置情報を上書きします
safari_list_indexed_dbsIndexedDB データベースを一覧表示します
safari_get_indexed_dbIndexedDB レコードを読み取ります
safari_css_coverage未使用の CSS ルールを検出します
safari_analyze_page1 回の呼び出しでページ全体を分析します
safari_doctormacOS の権限とデーモンの連携(Apple Events、Accessibility、Screen Recording、codesign)を診断し、失敗ごとの修正方法を提示します
safari_reload_extension手動で切り替えずに Safari MCP Bridge 拡張機能をホットリロードします
自動化(1)
ツール説明
safari_run_script1 回の呼び出しで複数のアクションを実行します(バッチ処理)
ネイティブ入力 — CGEvent(4)
ツール説明
safari_native_clickOS レベルのマウスクリック(CGEvent、isTrusted: true) — safari_click がブロックされた場合(405/403)に WAF/ボット検出を回避します
safari_native_hoverOS レベルのカーソルホバー — ツールチップや難読化された UI で実際の :hover/mouseenter を発生させます
safari_native_type実際の貼り付け処理を通じてテキストを挿入します — ProseMirror/Slate/Draft.js がネイティブに処理するため、送信時に実データが送られます
safari_native_keyboardフォーカスを奪わずに、修飾キーを含むキー入力を OS レベルで Safari に送信します — React の信頼性チェック付きハンドラー(Discord/Slack の送信)にも届きます
iOS と WebKit の検証(4)
ツール説明
safari_inspect_viewportiOS Safari の <meta name=viewport> タグ(device-width、ズーム/WCAG、viewport-fit)を検証します
safari_safe_area_insetsセーフエリアのインセット値と viewport-fit/env() の使用状況をリアルタイムで読み取ります(ノッチ/Dynamic Island)
safari_check_pwaiOS の「ホーム画面に追加」/PWA 対応状況(apple-touch-icon、manifest、theme-color、スプラッシュ画面)を監査します
safari_webkit_compatCSS.supports() を使って、この Safari でページの CSS を確認します — 未対応のプロパティ、不足している -webkit- 接頭辞、既知の不具合を調べます

セキュリティ

Safari MCP は攻撃対象領域を最小限に抑え、Mac 上でローカルに動作します。

項目詳細
ネットワークリモート接続なし — すべての通信はローカル(stdio と localhost)です
権限macOS のシステム権限が必要です(スクリーンショットには Screen Recording が必要です)
データテレメトリや分析データはなく、データはどこにも送信されません
拡張機能ローカルのプロファイルブリッジ(localhost:9224/9228/9232/9236)とのみ通信し、Safari によって検証されます
コード完全なオープンソース(MIT)です — すべての行を監査できます

Safari MCP と代替ツールの比較

機能Safari MCPChrome DevTools MCPPlaywright MCP
CPU/発熱🟢 最小限🔴 高い🟡 中程度
ログイン情報✅ 使用可能✅ 使用可能❌ 使用不可
macOS ネイティブ✅ WebKit❌ Chromium❌ Chromium/WebKit
ブラウザーの依存関係なしChrome + デバッグポートPlaywright ランタイム
ツール98約30約25
ファイルのアップロードJS(ダイアログなし)CDPPlaywright API
画像の貼り付けJS(クリップボードなし)CDPPlaywright API
フォーカスの奪取❌ バックグラウンド❌ バックグラウンド❌ ヘッドレス
ネットワークのモック✅❌✅
Lighthouse❌✅❌
パフォーマンストレース❌✅❌

ヒント: 日常的なブラウジング作業(業務の95%)には Safari MCP を使い、Lighthouse/パフォーマンス監査にのみ Chrome DevTools MCP を使ってください。

Apple 公式 Safari MCP(safaridriver)との比較

2026年7月、Apple は safaridriver をベースにした公式 Safari MCP サーバーをリリースしました。最初に Safari Technology Preview 247 で公開され、その後、安定版 Safari 27.0 以降にも搭載されています。これはこのカテゴリの有効性を示す素晴らしい例ですが、別の用途向けに作られています。Apple のサーバーはデバッグ用に隔離された WebDriver 自動化セッションを操作しますが、safari-mcp は、すでにログインしている実際の Safariを操作します。

macOS 27.0 と Safari 27.0 では、safaridriver --help に --mcp が表示され、tools/list の応答には17項目が含まれます(2026-09-15 に確認)。Safari 26.5.2 には --mcp がありませんでした(2026-07-23 に確認)。お使いのマシンで safaridriver --help | grep mcp を実行して確認してください。

両方を実行しますか? Apple のセットアップガイドでは、サーバーを safari-mcp という名前で登録しています(claude mcp add safari-mcp -- /usr/bin/safaridriver --mcp)。これはこのパッケージと同じ名前です。クライアントがどちらか一方をもう一方で上書きしたり、どちらのサーバーが応答したのか分からなくなったりしないよう、claude mcp add safari-webdriver -- /usr/bin/safaridriver --mcp のように、どちらかに別の名前を付けてください。

🦁 safari-mcp (このリポジトリ)Apple safaridriver --mcp
実際のログイン情報/Cookie✅ 実際に使用している Safari⚠️ 隔離された自動化セッション — 自動入力やブラウジングアクティビティにはアクセスできません
実行環境✅ あらゆる Mac の安定版 Safari⚠️ Safari 27 以降、または Safari Technology Preview 247 以降
バックグラウンド(フォーカスを奪わない)✅ はい❌ 「自動化によって制御されています」というバナーが表示された専用ウィンドウ
ページから見た navigator.webdriver✅ false — 通常のタブ⚠️ true — すべての WebDriver セッションで必須
ツール9817
ストレージ(Cookie、localStorage、IndexedDB)✅ 10個のツール❌
ネットワークのモック+スロットリング✅ はい❌ 読み取り専用のネットワーク検査
デバイスのエミュレーション(iPhone、iPad)✅ はい⚠️ ビューポート+メディアタイプのみ
セットアップnpx safari-mcpSafari の「開発」設定で「リモートオートメーションと外部エージェントを許可」を有効にし、クライアントを safaridriver --mcp に接続します
Apple の公式サポート❌ コミュニティ(MIT)✅ Apple、WebDriver 標準

navigator.webdriver の項目について: WebDriver 標準では、リモート制御されるすべてのセッションが true を返す必要があるため、Apple のサーバーもそうなります。safari-mcp は通常のタブで JavaScript を評価するため、false を読み取ります(Safari 27.0、2026-09-17 に確認)。Web サイトが WebDriver の通信を拒否する場合、これが違いになります。これは検出回避機能ではありません。ブラウザーのそれ以外の情報は隠されず、実際のログイン情報を使用するため、すべてのページがあなたの正確な身元を把握していると考えてください。

Apple のサーバーが適している場合: Safari 27 以降での互換性デバッグのために、WebDriver 標準に準拠したクリーンルームのセッションが必要な場合です。それ以外すべての用途、つまり、すでにログインしているブラウザーをバックグラウンドで日常的に自動化する用途には、safari-mcp がまさにそのために作られています。

なぜ他の Safari MCP プロジェクトではなく、Safari MCP なのか?

「safari-mcp」と呼ばれるプロジェクトはいくつかあります。それぞれを比較してみましょう。

機能🦁 safari-mcp (このリポジトリ)lxman/safari-mcp-serverEpistates/MCPSafariHayoDev/safari-devtools-mcp
ツール98~1023~15
インストールnpx safari-mcp手動バイナリnpx
エンジンデュアル(拡張機能 + AppleScript)WebDriver拡張機能のみDevTools Protocol
実際の Safari ログイン情報を保持✅ はい⚠️ 限定的✅ はい❌ デバッグセッション
バックグラウンド動作(フォーカスを奪わない)✅ はい❌ いいえ⚠️ 場合による✅ はい
ストレージツール(Cookie、localStorage、IndexedDB)10002
データ抽出(テーブル、メタデータ、画像、リンク)4000
ネットワークのモック✅ はい❌ いいえ❌ いいえ❌ いいえ
デバイスのエミュレーション(iPhone、iPad、Pixel)✅ はい❌ いいえ❌ いいえ❌ いいえ
ファイルのアップロード(ダイアログなし)✅ JS DataTransfer❌ いいえ❌ いいえ❌ いいえ
画像の貼り付け(クリップボードに触れない)✅ はい❌ いいえ❌ いいえ❌ いいえ
PDF エクスポート✅ はい❌ いいえ❌ いいえ❌ いいえ
コンソールのキャプチャ4 ツール011
パフォーマンス指標 + Web Vitals✅ はい❌ いいえ❌ いいえ⚠️ 部分的
積極的なメンテナンス✅ 週に複数回リリース🟡 不定期🟡 低頻度🟡 低頻度
ライセンスMITMIT指定なしMIT
MCP Registry に登録✅❌❌✅
Awesome MCP に登録✅❌❌❌

要約 — インストールが最もスムーズで、ツールが最も充実し、積極的にメンテナンスされている完全版 Safari MCP をお探しなら、これが最適です。


アーキテクチャ

Safari MCP はデュアルエンジンアーキテクチャを採用しています。速度と高度な機能を優先して拡張機能を使用し、いつでも利用できるフォールバックとして AppleScript を備えています。

Claude/Cursor/AI Agent
        ↓ MCP Protocol (stdio)
   Safari MCP Server (Node.js)
        ↓                    ↓
   Extension (HTTP)     AppleScript + Swift daemon
   (~5-20ms/cmd)        (~5ms/cmd, always available)
        ↓                    ↓
   Content Script       do JavaScript in tab N
        ↓                    ↓
   Page DOM ←←←←←←←←←← Page DOM

主な設計上の判断:

  • 自動フォールバック付きのデュアルエンジン — 拡張機能を優先し、接続されていない場合は AppleScript がすべてをシームレスに処理します
  • 永続的な Swift ヘルパー — コマンドごとにプロセスを起動する代わりに、1 つのプロセスを長時間実行します(16 倍高速)
  • タブインデックスによる操作 — すべての JS はインデックスで指定した特定のタブ上で実行され、画面上のフォーカスを奪うことはありません
  • JS 優先のアプローチ — 入力、クリック、ファイルアップロードはすべて JavaScript イベントを使用します(System Events のキーボード競合を回避)
  • activate を使用しない — Safari が前面に表示されることはありません

Safari 拡張機能(任意)

Safari MCP 拡張機能は任意ですが、推奨されます。拡張機能がなくても、機能の約 80% は AppleScript のみで動作します。拡張機能を追加すると、AppleScript では実現できない機能を利用できます。

拡張機能で追加される機能
機能拡張機能ありAppleScript のみ
閉じた Shadow DOM(Reddit、Web Components)✅ 完全にアクセス可能❌ 表示不可
厳格な CSP を設定したサイト✅ MAIN world 経由で回避❌ ブロックされることが多い
React/Vue/Angular の状態操作✅ 高度(Fiber、ProseMirror)⚠️ 基本的
読み込み状態の検出(スピナー、スケルトン)✅ スマートに検出❌ なし
ダイアログ処理(alert/confirm)❌✅ AppleScript のみ
OS ネイティブレベルのクリック(CGEvent)❌✅ AppleScript のみ
PDF エクスポート❌✅ AppleScript のみ

拡張機能が必要なのはどんなときですか? 閉じた Shadow DOM を使用する最新の SPA(例:Reddit)、厳格な Content Security Policy を設定したサイト、またはフレームワークを多用するエディター(Draft.js、ProseMirror、Slate)を自動化する場合です。

拡張機能のインストール

この拡張機能を使用するには、Xcode(無料、macOS に付属)で一度ビルドする必要があります。

npm ユーザー向けの注意: xcode/ ディレクトリは npm パッケージに含まれていません。 GitHub リポジトリをクローンして、ソースからビルドしてください。

前提条件: Xcode(App Store からインストール — 無料)

# 1. Clone the repo (the npm package does not include the Xcode project)
git clone https://github.com/achiya-automation/safari-mcp.git
cd safari-mcp

# 2. Build a clean, Apple Development-signed app
# If needed, first choose your Team in Xcode → Signing & Capabilities.
xcodebuild -project "xcode/Safari MCP/Safari MCP.xcodeproj" \
  -scheme "Safari MCP (macOS)" -configuration Release \
  -allowProvisioningUpdates clean build

# 3. Locate the signed app
APP_PATH=$(find ~/Library/Developer/Xcode/DerivedData/Safari_MCP-*/Build/Products/Release -name "Safari MCP.app" -maxdepth 2 | head -1)

# 4. Re-sign safari-helper with the Apple Events entitlement
# (helps macOS surface the TCC Automation prompt reliably).
# Keep the stable identifier: macOS keys the Accessibility grant to it.
codesign --sign - --force --identifier com.achiya-automation.safari-mcp \
  --entitlements safari-helper.entitlements safari-helper

# 5. Open the app (needed once so Safari registers the extension)
open "$APP_PATH"

codesign --deep --sign - を使って Safari MCP.app をアドホック署名し直さないでください。 これにより、ラッパーと埋め込み拡張機能の Apple Development ID が置き換えられます。すると、現在の Safari は拡張機能を無効にしたり、削除済みとしてマークしたりすることがあります。以前のビルドにアドホック署名した場合は、上記の clean build コマンドをもう一度実行してください。

または、xcode/Safari MCP/Safari MCP.xcodeproj を Xcode で直接開き、「Signing & Capabilities」で Apple ID を選択して、「Run」をクリックしてください。ローカルで使用する場合は、無料の個人用 Apple Developer アカウントで十分です。

続いて Safari で次の操作を行います。

  1. Safari → 設定 → 詳細 → Web デベロッパ用の機能を表示を有効にする
  2. Safari → 設定 → デベロッパ → 署名されていない拡張機能を許可(Safari を再起動するたびに必要)
  3. Safari → 設定 → 機能拡張 → Safari MCP Bridgeを有効にする

拡張機能は、自身の Safari プロファイルと一致するプロファイルを宣言している最初のローカルブリッジに自動的に接続します。ブリッジのデフォルトのポートは 9224、9228、9232、9236 です。通常、単一プロファイルの設定では 9224 を使用します。

注意: 「署名されていない拡張機能を許可」の設定は、Safari を再起動するたびにリセットされます。再起動後は毎回、Safari → 設定 → デベロッパで再度有効にしてください。拡張機能自体はインストールされたままです。

ツールバーアイコンの状態:

  • ON — MCP サーバーに接続中
  • OFF — ポップアップから手動で無効化
  • (バッジなし) — サーバーが起動していません。自動的に再接続します

macOS の権限

Safari MCP では、次の権限を一度だけ許可する必要があります。

権限場所用途
Apple Events からの JavaScriptSafari → 設定 → デベロッパdo JavaScript に必要
オートメーション → Safariシステム設定 → プライバシーとセキュリティ → オートメーションAppleScript を利用するすべてのツールに必要
画面収録システム設定 → プライバシーとセキュリティ → 画面とシステムオーディオの収録拡張機能を使わない safari_screenshot と safari_save_pdf に必要
アクセシビリティ(safari-helper)システム設定 → プライバシーとセキュリティ → アクセシビリティ(macOS 27 では デバイス制御とデータアクセス という名称)safari_native_click、safari_native_keyboard、safari_native_hover、safari_save_pdf に必要
safari-helper にアクセシビリティ権限を付与する(safari_native_* に必要)

​safari_native_click、safari_native_keyboard、safari_native_hover ツールは、フォーカスを奪うことなく OS レベルの CGEvent イベントを Safari に注入します。これらのイベントを最前面でないウィンドウに送るには、基盤となるヘルパーバイナリを macOS のアクセシビリティで承認する必要があります。

  1. システム設定 → プライバシーとセキュリティ → アクセシビリティを開きます(macOS 27 では、このパネルの名称はデバイス制御とデータアクセスです)。
  2. + をクリックします(必要に応じてパスワードでロックを解除します)。
  3. ヘルパーバイナリに移動して追加します。
    • npm のグローバルインストール:$(npm root -g)/safari-mcp/safari-helper
    • npx /プロジェクトへのインストール:./node_modules/safari-mcp/safari-helper
    • ソースのクローンから:/path/to/safari-mcp/safari-helper
  4. その横の切り替えがONになっていることを確認します。

postinstall スクリプトは、ヘルパーに固定の識別子(com.achiya-automation.safari-mcp)で再署名するため、この権限は今後のアップグレード後も維持されます。この手順を行わない場合、ビルドごとにアドホック署名の識別子が変わるため、npm update のたびに承認が通知なく取り消されます。

safari_native_click が成功を報告するのにページが反応しない場合(isTrusted: true のクリックイベントが発生しない場合)、この承認がヘルパーに付与されていない可能性が最も高いです。safari_*(native_ なし)のツールには、この権限は必要ありません。

Automation → Safari の許可(IDE ユーザー向けの重要事項)

macOS の TCC では、Automation の許可は MCP サーバーを起動する 親プロセス に付与され、safari-mcp 自体には付与されません。そのため、Claude Code/Cursor/Windsurf を実行するアプリ(通常は Visual Studio Code または Terminal)に Automation → Safari の許可を付与する必要があります。

許可ダイアログが自動的に表示されない場合は、Automation の許可をすでに持っている Terminal から、このコマンドを一度実行してください。

osascript -e 'tell application "Safari" to get URL of current tab of window 1'

この呼び出しにより、Terminal アプリが Automation データベースに登録され、Safari の許可を求めるダイアログが表示されます。許可すると、その後は、どの子プロセスの呼び出し元チェーンからの MCP 呼び出しも機能します。


トラブルシューティング

問題対処方法
"AppleScript error"Safari → Settings → Developer で "Allow JavaScript from Apple Events" を有効にします
"Not authorized to send Apple events to Safari"IDE に Automation → Safari の許可を付与します(上記を参照)
npm update 後に "Not authorized" と表示される更新によってバイナリの cdhash が変わり、macOS が Automation の許可を黙って取り消します。上記の osascript のワンライナーを再実行して、許可を付与し直してください
safari_native_click は成功を報告するが、ページが反応しないSystem Settings → Privacy & Security → Accessibility に safari-helper を追加します(上記の アクセシビリティの許可 を参照)。ページのコンソールで {capture:true} を指定して click リスナーを設定し、確認してください。許可がないと、isTrusted: true のイベントは発火しません
スクリーンショットが空Terminal/VS Code に Screen & System Audio Recording の許可を付与します。safari-mcp を LaunchAgent として実行する場合は、node バイナリ自体に許可を付与してください(Homebrew の node をアップグレードするとパスが変わるため、アップグレード後に許可を付与し直してください)。safari_doctor で対象のバイナリを確認できます
"Allow unsigned extensions" を有効にしても拡張機能が表示されない(macOS 27)macOS 27.0 の既知の問題(183044008)です。この設定を有効にした状態で拡張機能アプリを再ビルドすると(拡張機能のインストール を参照)、表示されます
タブが見つからないsafari_list_tabs を呼び出してタブのインデックスを更新します
ヘブライ語キーボードの問題すべての文字入力に JS イベントを使用するため、キーボードレイアウトの影響を受けません
HTTPS がブロックされるsafari_navigate は HTTPS を自動的に先に試し、失敗した場合は HTTP にフォールバックします
Safari がフォーカスを奪う最新バージョンを使用していることを確認してください。newTab はアクティブなタブを復元します

よくある質問

Safari Technology Preview でも動作しますか?

いいえ。すべての AppleScript の処理で application "Safari" を対象とし、ネイティブヘルパーはバンドル ID com.apple.Safari を検索します。そのため、STP(com.apple.SafariTechnologyPreview)は別のアプリケーションであり、safari-mcp が対象にすることはありません。通常版の Safari で実行してください。

なお、STP 247 以降(または Safari 27 以降)が必要なのは、Apple 自身の safaridriver --mcp サーバーです。Safari MCP と代替手段 を参照してください。この 2 つに関連はありません。

プライベートタブ/シークレットタブを操作できますか?

サポート対象のモードではなく、テストもされていません。プライベートウインドウを開くツールはなく、Safari では各拡張機能を明示的に有効にしない限り、プライベートブラウズで拡張機能が無効になるため、拡張機能ブリッジと、Safari 拡張機能(任意) の「With Extension」列にあるすべての機能は、デフォルトで無効です。

別の ID を使いたい場合は、代わりに Safari の別の プロファイル を使用してください。プロファイルウインドウはここで正式にサポートされる機能です(複数のエージェントを同時に実行する を参照)。

Safari の複数のウインドウで動作しますか?

はい。タブの検索ではウインドウ 1 に限定せず、every window を対象にします。また、ウインドウが 2 つ開いている場合はインデックスだけでは区別できないため、タブはそのウインドウの (index, tabCount) の組み合わせで識別します。プロファイルウインドウは、Safari の ProfileName — Tab Title というウインドウ名で判別されます。

`safari_new_tab` が返す**レシート**が引き続き信頼できるハンドルです。以降のすべての呼び出しに渡せば、周囲でウィンドウがいくつ動いても、タブを直接指定できます。
対応している macOS のバージョンは?

Safari が動作する macOS であればどれでも対応しています。パッケージでは "os": ["darwin"] が宣言されており、最低 OS バージョンの指定はなく、コードにもバージョンによる制限はありません。必須要件は Node.js 20 以降です("engines": { "node": ">=20" })。

実際に OS の違いが関係するのは、次の 2 点です。

  • macOS 27では、アクセシビリティのパネル名がデバイス制御とデータアクセスに変更されています。許可の内容は同じで、名前だけが変わっています(macOS のアクセス許可を参照)。
  • Safari 26 および 27 では、いくつかのウェブプラットフォームの動作が変更されています。該当するツールはその変更に対応しており、ブロックされることはありません。
複数のインスタンスを同時に実行できますか?

はい。複数のエージェントを同時に実行するで説明しているとおりです。各セッションは独自のタブを所有し、所有権はタブのインデックスではなくセッションごとに追跡されます。そのため、あるエージェントが別のエージェントの所有するタブを操作したり閉じたりすることはできません。

1 つのプロセスが拡張機能ブリッジのポートを使用し、ほかのプロセスはそのプロセスを経由して接続します。ポートを使用しているプロセスが終了した場合は、ほかのプロセスがポートを引き継ぎます。

Safari を前面に表示しておく必要はありますか?

いいえ。safari_new_tab はバックグラウンドタブを開き、フォーカスを奪うことはありません。また、macOS によって復元時に暗黙のアクティブ化が強制される一部のコマンドは、実行後に元の最前面のアプリに戻ります。少し前に Safari で入力していた場合にフォーカスを維持するためのガードも備えています。

例外は、意図的にネイティブ操作を行うツールである safari_native_click、safari_native_keyboard、safari_native_hover です。これらは実際の OS イベントを送信するため、最前面のウィンドウに対して操作します。別の Safari タブで作業中は、これらを使用しないでください。

Safari の拡張機能とはどのように連携しますか?

既存の拡張機能は通常どおり動作します。safari-mcp は普段使用している Safari を操作するため、コンテンツブロッカーやパスワードマネージャーも、普段どおりに動作します。

safari-mcp には、オプションの独自拡張機能も付属しています。この拡張機能がなくても、ツールのおよそ 80% は AppleScript のみで動作します。拡張機能を追加すると、閉じたシャドウ DOM、厳格な CSP を使用するサイト、フレームワークの詳細な状態、読み込み状態の検出も利用できます。一方、ダイアログ処理、ネイティブクリック、PDF エクスポートは AppleScript のみで動作します。詳しくはSafari 拡張機能(オプション)を参照してください。

「Apple Events からの JavaScript を許可」が有効になっていない場合はどうなりますか?

JavaScript を評価する機能はすべて失敗します。safari_evaluate、safari_read_page、フォーム入力、データ抽出などが該当します。一方、タブを開いたり切り替えたりするなど、AppleScript のみを使う操作は引き続き動作します。「タブは開くのに何も読み取れない」という場合、通常はこれが原因です。

Safari → 設定 → 詳細 → Web デベロッパ向け機能を表示で有効にした後、Safari → 設定 → デベロッパ → Apple Events からの JavaScript を許可で有効にしてください。どちらも前提条件に記載されています。safari_doctor は残りの設定(Automation、ネイティブヘルパー、アクセシビリティ、画面収録)を確認し、修正方法のヒントでこの設定についても案内します。ただし、Apple Events の確認ではウィンドウの数しか調べず、Automation の許可だけで条件を満たすため、この設定が無効でもエラーにはなりません。

対応クライアント

Safari MCP は、MCP 対応のあらゆるクライアントで動作します。

クライアント状態
Claude Code✅ 毎日テスト済み
Claude Desktop✅ テスト済み
Cursor✅ テスト済み
Windsurf✅ 対応
VS Code + Continue✅ 対応

貢献

プルリクエストを歓迎します!セットアップ手順については、CONTRIBUTING.mdをご覧ください。

コードベースは2つのファイルで構成されています。

  • safari.js — Safari 自動化レイヤー(AppleScript + JavaScript)
  • index.js — ツール定義を含む MCP サーバー

スポンサー

Safari MCP は無料のオープンソースです。時間や CPU サイクルの節約に役立った場合は、開発へのご支援をご検討ください。

PayPal でスポンサーになる

ご支援は、以下に活用されます。

  • 🧪 macOS の各バージョンおよび Safari の各リリースでのテスト
  • 🛠️ 新しいツールと機能
  • 📖 ドキュメントとサンプル

最初のスポンサーになりましょう!


商用サポート

Safari MCP を製品やエージェントスタックに組み込む必要がありますか? Achiya Automation では、以下を提供しています。

  • 優先的なバグ修正と、ユースケースに合わせたカスタムツールの開発
  • 統合コンサルティング — Safari MCP を本番環境のエージェントシステム(Claude、Cursor、n8n、カスタムシステム)に組み込む支援
  • プライベートデプロイのサポート — マルチユーザーの Safari MCP、標準外の macOS 環境、CI/CD
  • MCP ベースの自動化を導入するエンジニアリングチーム向けのトレーニングワークショップ

Safari MCP の作者が開発しました。お問い合わせください →


Safari MCP でエージェントが実現できること

AI エージェントが Safari MCP を操作すると、ヘッドレスブラウザーでは実現できないことが可能になります。

  • 認証済みの実セッション — Gmail、GitHub、Ahrefs、Slack、銀行のダッシュボードにはすでにログインしています
  • フレームワークを考慮したフォーム入力 — safari_fill_and_submit は React/Vue/Angular のセッターをネイティブに呼び出すため、input イベントが発火したかを推測する必要はありません
  • バックグラウンドでの動作 — Mac を使い続けながら、エージェントを並行して動かせます
  • ワークフローごとに1回の MCP 呼び出し — safari_run_script は、ナビゲーション、クリック、抽出を1回のラウンドトリップにまとめます

このパターンはモデルを問わず有効です。人間がすでに信頼しているブラウザーを操作することで、ログイン状態、Cookie、拡張機能、ユーザー固有の環境を一度に引き継げます。


コミュニティ

npm の月間ダウンロード数は6,000件以上 — 開発者は Safari MCP を使って macOS 上で AI エージェントを構築しています。

  • GitHub Discussions — 質問したり、ユースケースを共有したりできます
  • Issues — バグ報告や機能リクエスト
  • Good First Issues — 貢献を始めましょう

エコシステム

Safari MCP と連携する、その他の macOS MCP サーバーです。

プロジェクト機能用途
mcp-server-macos-useOS レベルの macOS 自動化(アクセシビリティ、画面制御)Safari を超えたシステム全体の操作
chrome-devtools-mcpChrome DevTools ProtocolLighthouse の監査、Chrome 固有のパフォーマンストレース

Safari MCP と Chrome DevTools MCP を併用していますか?Safari は日常的なブラウジングの95%を(オーバーヘッドなしで)処理し、Chrome は Lighthouse や Chrome 固有のトレースが必要な残りの5%を処理します。


掲載先

Glama MCP Registry MCP Scoreboard CI


ライセンス

MIT — お好きなようにお使いください。


Achiya Automation が開発 — ビジネス向けの自動化と AI エージェント。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。