Skip to content

Integrasi Agen MCP

MCP Server Sa2web menyediakan browser jarak jauh sebagai alat MCP standar untuk Claude Code, Claude Desktop, Cursor, Windsurf, VS Code Copilot, Cline, Roo Code, opencode, Gemini CLI, Zed, Hermes Agent, dan OpenClaw.

Proyek MCP bersifat open source di sa2web/sa2web-mcp dan dipublikasikan di npm sebagai @sa2web/mcp.

Untuk penggunaan langsung dari terminal, lihat CLI Browser Jarak Jauh.

Situs target ditampilkan di dalam iframe#rbi-frame dan dikendalikan server melalui Playwright.

Instalasi

Instal Node.js 18 atau yang lebih baru, lalu instal paket npm secara global:

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

Ini menyediakan sa2, sa2-browser, dan entri MCP sa2-mcp di PATH.

Untuk pengembangan dari source, clone repository publik lalu build:

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

Konfigurasi klien

Setelah instalasi global, gunakan sa2-mcp secara langsung:

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"
      }
    }
  }
}

Jika klien tidak dapat menemukan perintah global, gunakan path penuh ke sa2-mcp atau node /absolute/path/to/sa2web-mcp/dist/server.js dari build source.

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 memakai field root servers, opencode memakai mcp, dan Zed memakai context_servers. Tambahkan ke mcp_servers dalam ~/.hermes/config.yaml untuk Hermes Agent, atau ke mcp.servers pada konfigurasi Gateway untuk OpenClaw. Mulai ulang klien dan pastikan sa2_help tersedia.

Kredensial

Jangan simpan clientSecret asli dalam Git atau dokumentasi. Segera rotasi kredensial yang pernah terekspos.

Variabel utama

VariabelDefaultKegunaan
SA2_LOGIN_URLtidak adaURL login wajib; origin browser jarak jauh diturunkan dari URL ini
SA2_AUTO_LOGIN_BEFORE_NAVIGATEtrueLogin otomatis sebelum membuka target
SA2_HEADLESSfalseMenjalankan Playwright tanpa antarmuka
SA2_BROWSERchromiumchromium, firefox, atau webkit
SA2_IGNORE_HTTPS_ERRORStrueMengabaikan error sertifikat HTTPS; set false untuk mewajibkan sertifikat valid
SA2_RBI_FRAME_CONTENT_WAIT_MS15000Waktu tunggu konten iframe
SA2_NAVIGATION_TIMEOUT_MS45000Timeout navigasi
SA2_ACTION_TIMEOUT_MS15000Timeout aksi
SA2_LOG_STDERRtrueMenulis log ke stderr dan menyisakan stdout untuk MCP
SA2_LOG_FILEtidak adaFile log opsional

Jangan gunakan variabel lama SA2_REMOTE_BROWSER_PREFIX atau SA2_REMOTE_BROWSER_BASE_URL.

Alur yang disarankan

text
sa2_help
  -> sa2_list_available_targets    # hanya untuk SaaS, workspace, atau situs internal
  -> sa2_open_target
  -> browser_snapshot / browser_extract_text
  -> browser_click / browser_type / browser_press / browser_wait

URL publik:

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

Target tersimpan:

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

Setelah halaman terbuka, utamakan browser_snapshot dan berikan ref=eN hasilnya ke alat interaksi. id=tN dan context=[tN] hanya referensi teks dalam snapshot, bukan selector CSS atau ref yang dapat dioperasikan.

Referensi lengkap alat

Semua alat yang terdaftar pada Server saat ini dijelaskan di bawah. Parameter adalah isi objek MCP arguments.

AlatKegunaan, parameter utama, dan hasil
sa2_helpTanpa parameter. Mengembalikan alur yang disarankan, contoh, dan daftar alat kompatibilitas.
sa2_list_available_targetsMendaftar proxy, SaaS, akun workspace, dan situs internal dengan targetId stabil.
sa2_open_targetNavigasi utama: type=cloud + url, atau targetId/type + id/name; mendukung surf, waitUntil.
browser_open_loginMembuka SA2_LOGIN_URL; waitUntil opsional. Untuk diagnosis login.
browser_navigateNavigasi URL kompatibel: url wajib; surf, waitUntil opsional.
browser_navigate_backMundur melalui toolbar luar. Ambil snapshot baru.
browser_navigate_forwardMaju melalui toolbar luar.
browser_reloadMemuat ulang melalui toolbar; refs lama tidak berlaku.
browser_list_proxiesMengembalikan free-browse, proxy, dan options termasuk direct.
browser_list_saas_sitesMengembalikan kategori SaaS dan daftar sites datar.
browser_enter_saas_siteMembuka SaaS berdasarkan id atau name; waitUntil opsional.
browser_list_workspacesMengembalikan data workspace dan target tingkat akun.
browser_enter_workspaceMembuka akun berdasarkan accountId, atau siteId + username.
browser_list_inner_sitesMengembalikan situs internal yang dapat diakses.
browser_enter_inner_siteMembuka situs internal berdasarkan id atau name.
browser_snapshotfilter CSS nyata opsional. Mengembalikan snapshot semantik; gunakan ref=eN, bukan id=tN, untuk aksi.
browser_extract_textselector CSS nyata opsional. Mengembalikan teks terlihat dari pohon iframe.
browser_clickKlik berdasarkan ref, selector, role/name, text, atau koordinat x/y.
browser_typetext wajib; target dengan ref/selector/role, mendukung append, pressEnter.
browser_presskey wajib, misalnya Enter, Escape, Control+A.
browser_press_keyAlias kompatibel browser_press dengan parameter sama.
browser_waitMenunggu selector, text, urlIncludes, atau ms (default 1000).
browser_scrollMenggulir root/elemen dengan by, to, intoView; tanpa argumen turun 600 px.
browser_hoverHover elemen berdasarkan ref, selector, role/name, atau teks.
browser_dragDrag dari startRef/startSelector ke endRef/endSelector.
browser_fill_formMengisi array fields berisi locator dan value wajib secara berurutan.
browser_select_optionMenemukan select dengan ref/selector, memilih memakai values, value, label, atau index.
browser_checkMencentang checkbox/radio berdasarkan ref, selector, role/name, atau teks.
browser_uncheckMenghapus centang checkbox; radio tidak didukung.
browser_file_uploadMengunggah path/paths yang dapat dibaca Server melalui file input.
browser_pasteMenempel text, html, rtf, dan/atau file ke target atau elemen fokus.
browser_handle_dialogMenerima/menolak alert, confirm, prompt; accept default true, tersedia promptText, timeoutMs.
browser_resizeMemerlukan width, height positif; mengubah desktop atau ukuran emulasi aktif.
browser_list_devicesTanpa parameter dan tidak membuka halaman. Mendaftar Desktop serta perangkat Playwright dengan viewport, screen, DPR, touch/mobile, browser.
browser_toggle_deviceMengubah emulasi tanpa membuat ulang context. Menerima enabled, device, ukuran, DPR, touch, UA, orientation, reload; mengembalikan state, observed, targetObserved, warnings.
browser_screenshotMengembalikan PNG; default fullPage adalah false.
browser_take_screenshotAlias screenshot; default fullPage adalah true.
browser_evaluateMenjalankan expression dan arg opsional di iframe, mengembalikan JSON.
browser_run_codeMenjalankan code async dengan page, rootFrame, helpers. Hanya kode tepercaya.
browser_closeMenutup browser/context dan menghapus refs, login, dialog, CDP, status perangkat.

Beralih perangkat

Panggil browser_list_devices lebih dahulu, lalu misalnya browser_toggle_device dengan { "device": "Pixel 7", "orientation": "portrait" }. Cookie dan login dipertahankan. Gunakan reload: true agar permintaan berikutnya memakai UA baru dan { "device": "Desktop" } untuk memulihkan viewport desktop sebelumnya.

Chromium memakai CDP untuk viewport, screen, DPR, touch, orientation, dan UA. Firefox/WebKit hanya dapat mengubah viewport secara dinamis dan melaporkan batasan melalui warnings. observed mengukur shell luar, targetObserved mengukur iframe target. Ambil snapshot baru setelah setiap perubahan.

Keamanan dan pemecahan masalah

Dapatkan konfirmasi eksplisit pengguna sebelum menerbitkan, mengirim, menghapus, membeli, memberi otorisasi, mentransfer uang, atau mengirim pesan.

  • Alat tidak muncul: periksa build dan path absolut node serta dist/server.js, lalu mulai ulang klien.
  • Login gagal: periksa SA2_LOGIN_URL, kredensial, dan status akun.
  • Hanya toolbar yang terlihat: panggil browser_wait atau tambah waktu tunggu iframe.
  • Elemen tidak ditemukan: ambil snapshot baru dan gunakan ref=eN terbaru.

Sa2web 1.0.0