Skip to content

MCP エージェント連携

Sa2web MCP Server は、リモートブラウザーを標準 MCP ツールとして Claude Code、Claude Desktop、Cursor、Windsurf、VS Code Copilot、Cline、Roo Code、opencode、Gemini CLI、Zed、Hermes Agent、OpenClaw などに提供します。

MCP プロジェクトは sa2web/sa2web-mcp で公開され、npm では @sa2web/mcp として配布されています。

ターミナルから直接操作する場合は、リモートブラウザー CLI を参照してください。

対象サイトは iframe#rbi-frame 内に表示され、Server が Playwright 経由で操作します。

インストール

Node.js 18 以降を用意し、npm パッケージをグローバルインストールします。

bash
npm install @sa2web/mcp -g
npx playwright install --with-deps

これで sa2sa2-browser、MCP Server 入口の sa2-mcp が利用できます。

ソース開発時は公開リポジトリを clone してビルドします。

bash
git clone https://github.com/sa2web/sa2web-mcp.git
cd sa2web-mcp
npm install
npx playwright install --with-deps
npm run build

クライアント設定

グローバルインストール後は sa2-mcp を直接指定します。

json
{
  "mcpServers": {
    "sa2-remote-browser": {
      "command": "sa2-mcp",
      "env": {
        "SA2_LOGIN_URL": "https://<APP_DOMAIN>/agent/login?clientId=...&clientSecret=...",
        "SA2_LOGIN_REDIRECT_PATH": "/app/login",
        "SA2_HEADLESS": "false",
        "SA2_IGNORE_HTTPS_ERRORS": "true"
      }
    }
  }
}

グローバルコマンドを解決できないクライアントでは、sa2-mcp のフルパス、またはソースビルドの /absolute/path/to/sa2web-mcp/dist/server.jsnode で指定してください。

json
{
  "mcpServers": {
    "sa2-remote-browser": {
      "command": "node",
      "args": ["/absolute/path/to/sa2web-mcp/dist/server.js"],
      "env": {
        "SA2_LOGIN_URL": "https://<APP_DOMAIN>/agent/login?clientId=...&clientSecret=...",
        "SA2_LOGIN_REDIRECT_PATH": "/app/login",
        "SA2_HEADLESS": "false",
        "SA2_IGNORE_HTTPS_ERRORS": "true"
      }
    }
  }
}

VS Code Copilot のルートフィールドは servers、opencode は mcp、Zed は context_servers です。Hermes Agent は ~/.hermes/config.yamlmcp_servers、OpenClaw は Gateway の mcp.servers に追加します。保存後にクライアントを再起動し、sa2_help が表示されることを確認します。

認証情報

実際の clientSecret を Git やドキュメントに保存しないでください。漏えいした認証情報は直ちに更新してください。

主な環境変数

変数デフォルト用途
SA2_LOGIN_URLなし必須のエージェントログイン URL。リモートブラウザー origin もここから推定
SA2_AUTO_LOGIN_BEFORE_NAVIGATEtrue対象を開く前に自動ログイン
SA2_HEADLESSfalsePlaywright のヘッドレス実行
SA2_BROWSERchromiumchromiumfirefoxwebkit
SA2_IGNORE_HTTPS_ERRORStrueHTTPS 証明書エラーを無視するかどうか。false にすると有効な証明書を要求
SA2_RBI_FRAME_CONTENT_WAIT_MS15000対象 iframe の待機時間
SA2_NAVIGATION_TIMEOUT_MS45000ナビゲーションのタイムアウト
SA2_ACTION_TIMEOUT_MS15000操作のタイムアウト
SA2_LOG_LEVELinfoログレベル
SA2_LOG_STDERRtruestdout を MCP 用に保ち、ログを stderr に出力
SA2_LOG_FILEなし任意のログファイル

旧変数 SA2_REMOTE_BROWSER_PREFIXSA2_REMOTE_BROWSER_BASE_URL は不要です。

推奨フロー

text
sa2_help
  -> sa2_list_available_targets    # SaaS、ワークスペース、内部サイトのみ
  -> sa2_open_target
  -> browser_snapshot / browser_extract_text
  -> browser_click / browser_type / browser_press / browser_wait

公開 URL:

json
{ "type": "cloud", "url": "https://example.com" }

保存済み対象は sa2_list_available_targets の ID を使用します。

json
{ "targetId": "workspace:123" }

ページを開いた後は browser_snapshot を優先し、返された ref=eN をクリックや入力に渡します。id=tNcontext=[tN] はスナップショット内のテキスト参照であり、CSS selector や操作可能な ref ではありません。

全ツールリファレンス

現在の Server に登録されている全ツールを示します。引数は MCP の arguments オブジェクトです。

ツール用途、主な引数、戻り値
sa2_help引数なし。推奨フロー、例、互換ツール一覧を返します。
sa2_list_available_targets引数なし。プロキシ、SaaS、ワークスペース、内部サイトと安定した targetId を返します。
sa2_open_target推奨ナビゲーション。公開 URL は type=cloudurl、保存済み対象は targetId または type と id/namesurfwaitUntil も指定可能です。
browser_open_loginSA2_LOGIN_URL を開きます。任意の waitUntil。ログイン診断用です。
browser_navigate互換用の公開 URL ナビゲーション。url 必須、surfwaitUntil は任意です。
browser_navigate_back引数なし。外側ツールバーで戻ります。後で snapshot を更新します。
browser_navigate_forward引数なし。外側ツールバーで進みます。
browser_reload引数なし。外側ツールバーで再読み込みし、古い refs を無効にします。
browser_list_proxies引数なし。free-browse 設定、プロキシ、direct を含む options を返します。
browser_list_saas_sites引数なし。SaaS カテゴリとフラットなサイト一覧を返します。
browser_enter_saas_siteid または name で SaaS を開き、任意の waitUntil と一致サイトを返します。
browser_list_workspaces引数なし。ワークスペースの生データとアカウント単位の一覧を返します。
browser_enter_workspaceaccountId、または siteId + username でアカウントを開きます。
browser_list_inner_sites引数なし。利用可能な内部サイトを返します。
browser_enter_inner_siteid または name で内部サイトを開きます。
browser_snapshot任意の実 CSS filter。iframe ツリーの意味スナップショットを返します。操作には ref=eN を使い、id=tN は使いません。
browser_extract_text任意の実 CSS selector。iframe ツリーの可視テキストを返します。
browser_clickrefselectorrole/nametext、または x/y でクリックします。
browser_typetext 必須。ref/selector/role で入力先を指定し、appendpressEnter を利用できます。
browser_presskey 必須。EnterEscapeControl+A などを送信します。
browser_press_keybrowser_press と同じ引数・動作の互換エイリアスです。
browser_waitselectortexturlIncludes、または ms(既定 1000)を待ちます。
browser_scrollroot または要素を by/to/intoView でスクロールします。引数なしでは下へ 600px。
browser_hoverref、selector、role/name、text で要素に hover します。
browser_dragstartRef/startSelector から endRef/endSelector へドラッグします。
browser_fill_formlocator と必須 value を持つ fields 配列を順に fill します。
browser_select_optionselect を ref/selector で指定し、valuesvaluelabelindex で選択します。
browser_checkref、selector、role/name、text で checkbox または radio をオンにします。
browser_uncheck同じ locator 形式で checkbox をオフにします。radio は対象外です。
browser_file_uploadfile input を ref/selector で指定し、Server が読める path/paths をアップロードします。
browser_pastetexthtmlrtfpath/paths を対象またはフォーカス要素へ貼り付けます。
browser_handle_dialogalert/confirm/prompt を処理します。accept は既定 true、promptTexttimeoutMs は任意です。
browser_resize正の widthheight が必須。通常 viewport または有効なデバイスモードの寸法を変更します。
browser_list_devices引数なし、ページも開きません。Desktop と全 Playwright デバイスの viewport、screen、DPR、touch/mobile、ブラウザー種別を返します。
browser_toggle_devicecontext を作り直さずデバイスを切替。enableddevice、寸法、DPR、touch、UA、orientationreload を受け取り、state、observedtargetObserved、warnings を返します。
browser_screenshotPNG を返します。fullPage の既定は false
browser_take_screenshot互換 screenshot。fullPage の既定は true
browser_evaluateiframe 内で expression と任意の arg を実行して JSON を返します。
browser_run_codePlaywright の pagerootFrame、helpers で非同期 code を実行します。信頼できるコードだけを使用します。
browser_close引数なし。browser/context と refs、ログイン、dialog、CDP、デバイス状態を消去します。

デバイス切替

まず browser_list_devices で正確なプリセット名を取得します。browser_toggle_device{ "device": "Pixel 7", "orientation": "portrait" } を渡すと、cookie とログイン状態を保ったまま切り替わります。新しい UA を後続リクエストに使う場合は reload: true にします。{ "device": "Desktop" } で元のデスクトップ viewport に戻ります。

Chromium は CDP で viewport、screen、DPR、touch、orientation、UA を動的に上書きします。Firefox/WebKit は viewport のみで、制限は warnings に返されます。外側の実測値は observed、対象 iframe の実測値は targetObserved です。切替後は snapshot を更新してください。

安全性とトラブルシューティング

公開、送信、削除、購入、承認、送金、メッセージ送信など外部に影響する操作は、実行前に必ずユーザーの明示的な確認を得てください。

  • ツールが表示されない: ビルドと node / dist/server.js の絶対パスを確認し、クライアントを再起動します。
  • ログインできない: SA2_LOGIN_URL、認証情報、アカウント状態を確認します。
  • ツールバーしか見えない: browser_wait を呼ぶか、iframe の待機時間を増やします。
  • 要素が見つからない: 最新の snapshot を取り、最新の ref=eN を使用します。

Sa2web 1.0.0