Skip to main content
Glama
lauyuen

stealth-browser-mcp

by lauyuen

stealth-browser-mcp

AIアシスタントに、ログイン状態を維持した本物のChromeブラウザを提供するMCPサーバーです。

ほとんどのブラウザ自動化ツールは、モデルにまっさらな新しいブラウザを渡します。このツールは永続的なChromeプロファイルを操作するため、2FA、CAPTCHA、デバイス承認など、サイトが要求するあらゆる認証を自分で一度済ませてしまえば、モデルは以降の実行でそのセッションを使い続けることができ、パスワードを目にすることはありません。

スクリプトによるログインを許さないサイトのために、2つの逃げ道を用意しています。入力時にmacOSキーチェーンから取得する認証情報と、Chromeの仮想オーセンティケーターで再生するWebAuthnパスキーです。

[!WARNING] これは強力なツールです。言語モデルに、あなたのライブセッションを保持したブラウザの制御を委ねることになり、モデルが選んだページに保存済みパスワードを入力することも可能です。大切なものを相手にする前に、SECURITY.md責任ある利用をお読みください。


目次


Related MCP server: agent-browser-mcp

仕組み

        MCP client (Claude Code, Claude Desktop, Cursor, …)
                          │
                          │  JSON-RPC over stdio
                          ▼
              ┌───────────────────────────┐
              │   stealth-browser-mcp     │
              │   16 tools, one browser   │
              └─────┬───────────────┬─────┘
                    │               │
     credentials    │               │   CDP + Puppeteer
                    ▼               ▼
        ┌───────────────────┐   ┌───────────────────────┐
        │  macOS Keychain   │   │  Google Chrome        │
        │  stealth-mcp:*    │   │  + stealth plugin     │
        │  passwords,       │   │  + WebAuthn virtual   │
        │  passkey material │   │    authenticator      │
        └───────────────────┘   └───────────┬───────────┘
                                            │
                                            ▼
                              ┌─────────────────────────┐
                              │  Persistent profile dir │
                              │  cookies · localStorage │
                              │  IndexedDB · sessions   │
                              └─────────────────────────┘

3つの要素が機能を支えています。

永続性。 Chromeは使い捨てではなく固定のuserDataDirに対して起動されます。一度対話的にログインすれば、Cookieは以降のすべての実行で保持されます。実際のサイトで自動化が失敗する一般的な原因がなくなります。

ステルス性。 puppeteer-extra-plugin-stealthが既知の自動化検出シグナルを修正し、サーバー側でもさらにいくつかの対策を重ねます。navigator.webdriverはundefinedになり、window.chrome.runtimeは存在し、ユーザーエージェントからHeadlessChromeが除去され、--disable-blink-features=AutomationControlledが設定されます。クリックはマウスをターゲット内部のジッター付きの点までパスに沿って移動させてから押下します。タイピングは30〜100msの間隔で1文字ずつ行われます。

セッションの作成ではなくセッションの再利用。 設計目標はログインの自動化を避けることです。キーチェーン自動入力とパスキー再生は、それができない場合のために存在します。

要件

  • Node.js 18以降

  • Google Chrome。 Puppeteer同梱のChromiumでも動作しますが、実際のChromeビルドの方が検出されにくいです。

  • macOS(キーチェーンとパスキー機能を使う場合)。ナビゲーション、抽出、スクリーンショット、永続プロファイルなど、その他すべてはクロスプラットフォームです。キーチェーン層は/usr/bin/securityを外部コマンドとして呼び出すため、他のプラットフォームでは失敗します。ブラウザツールはこれに触れません。

インストール

git clone https://github.com/lauyuen/stealth-browser-mcp.git
cd stealth-browser-mcp
npm install

必要に応じて、サンプルの環境ファイルをコピーして編集します。

cp .env.example .env

ブラウザが起動し、回避策が有効になっていることを確認します。

npm run check-stealth

MCPクライアントに接続する

サーバーはstdioで通信します。絶対パスでsrc/server.jsをクライアントに指定してください。

Claude Code

claude mcp add stealth-browser -- node /absolute/path/to/stealth-browser-mcp/src/server.js

Claude Desktop~/Library/Application Support/Claude/claude_desktop_config.json

{
  "mcpServers": {
    "stealth-browser": {
      "command": "node",
      "args": ["/absolute/path/to/stealth-browser-mcp/src/server.js"]
    }
  }
}

その他のMCPクライアント — 同じ形式に加えて、オプションでプロファイルの上書きが可能です。

{
  "mcpServers": {
    "stealth-browser": {
      "command": "node",
      "args": ["/absolute/path/to/stealth-browser-mcp/src/server.js"],
      "env": {
        "BROWSER_PROFILE_DIR": "/absolute/path/to/a/private/profile/dir"
      }
    }
  }
}

その後、クライアントを再起動してください。browser_statusが接続確認の最も手軽な方法です。

最初のログイン

モデルがサイトを使う前に、自分でプロファイルを初期化します。

npm run login -- https://example.com

MCPサーバーが使用するのと同じプロファイルで、表示されたChromeウィンドウが開きます。通常どおりログインしてください。パスワードマネージャー、2FAプロンプト、CAPTCHA、「このデバイスを記憶する」など、すべての手順を実行します。完了したらターミナルでEnterを押すと、セッションがディスクにフラッシュされます。

以降のMCP実行はすべてそのセッションを引き継ぎます。サイトごとに繰り返してください。セッションはサイト側のスケジュールで期限切れになるため、サイトからログアウトされたらこの手順を再実行してください。

ツールリファレンス

ナビゲーションと操作

ツール

引数

備考

browser_navigate

url, waitUntil?

waitUntilloaddomcontentloadednetworkidle0networkidle2(デフォルト)のいずれか。最終URL、タイトル、HTTPステータスを返します。

browser_click

selector

要素をビュー内にスクロールしてから、マウスを内部のジッター付きの点まで移動して押下します。

browser_type

selector, text, clearFirst?

ランダムな遅延を挟みながら1文字ずつ入力します。

browser_scroll

direction?, distance?

upまたはdown、ピクセル数(デフォルト600)。

browser_wait_for

selector?, milliseconds?

要素を待つ、スリープする、またはその両方を行います。

ページの読み取り

ツール

引数

備考

browser_extract_text

selector?

スクリプトとスタイルを除去し、テキストと構造化されたリンク・フォームフィールドを返します。モデルにページを読ませる最も安価な方法です。

browser_extract_html

selector?

生のouterHTML。正確なマークアップや属性が必要な場合に使用します。

browser_screenshot

fullPage?

PNGをMCP画像コンテンツとして返します。

browser_evaluate

script

ページコンテキストでJavaScriptを実行し、結果を返します。SECURITY.mdの警告を参照してください。

セッションと認証

ツール

引数

備考

browser_autofill_login

service, account, usernameSelector?, passwordSelector, submitSelector?

キーチェーンからパスワードを読み取り、入力します。シークレットがモデルに返されることはありません。

keychain_store_credential

service, account, password

stealth-mcp:<service>としてキーチェーンに書き込みます。CLIの使用を推奨します。以下を参照。

passkey_enable_virtual_authenticator

rpId?, account?

両方の引数を指定すると、保存済みパスキーを注入します。どちらも指定しない場合は、登録準備のできた空のオーセンティケーターを接続します。

passkey_save_registration

rpId, account

新しく登録された認証情報を取得して保存します。

ブラウザのライフサイクル

ツール

引数

備考

browser_status

接続状態、タブ数、現在のURL、プロファイルパス、オーセンティケーターの接続有無。

browser_open_interactive_window

url?

現在のセッションを表示ウィンドウで再度開き、CAPTCHAの解決や2FAプロンプトの承認を手動で行ってから、制御を戻します。

browser_close

正常に閉じて、Cookieをディスクにフラッシュします。

ブラウザはデフォルトでヘッドレスで起動し、呼び出し間で再利用されます。 browser_open_interactive_windowは、表示ウィンドウに切り替える唯一のツールです。

キーチェーンに認証情報を保存する

パスワードはmacOSキーチェーンのstealth-mcp:サービスプレフィックスの下に保存されます。このリポジトリ内のファイルにも、モデルのコンテキストにも保存されることはありません。

npm run keychain set github you@example.com     # prompts; input is not echoed
npm run keychain get github you@example.com     # confirms presence, prints length only
npm run keychain delete github you@example.com

モデルはシークレットを知ることなくログインを実行します。

// browser_autofill_login
{
  "service": "github",
  "account": "you@example.com",
  "usernameSelector": "#login_field",
  "passwordSelector": "#password",
  "submitSelector": "input[type='submit']"
}

serviceは任意のラベルです。CLIとツール呼び出しの間で一致していれば何でも構いません。

スクリプト用にパスワードを末尾のCLI引数として渡すこともできますが、シェル履歴とプロセスリストに残るため、その場合はコマンドが警告を表示します。

パスキー

ChromeはDevTools Protocol経由でWebAuthn仮想オーセンティケーターを公開しています。これはWebAuthnフローをテストするためのソフトウェアオーセンティケーターです。このサーバーはそれを操作し、結果の鍵素材をキーチェーンに永続化して、実行間で保持されるようにします。

自動化用パスキーの登録

  1. 引数なしでpasskey_enable_virtual_authenticatorを実行します。

  2. サイトの「パスキーを追加」フローに移動して完了します。仮想オーセンティケーターがチャレンジに応答するため、OSのプロンプトは表示されません。

  3. サイトのrpIdとアカウントを指定してpasskey_save_registrationを実行します。

後で使用する

rpIdaccountを指定してpasskey_enable_virtual_authenticatorを実行すると、ナビゲーション前に保存済みの認証情報が注入され、サイトはプロンプトなしでサインインさせます。

[!CAUTION] この方法で保持されるパスキーはファイルであり、ハードウェアキーではありません。コピーが可能で、これはまさに本物のパスキーが防ごうとしている性質です。自動化専用のパスキーの登録にのみ使用してください。メール、銀行、その他失ったら困るものを守るパスキーには使用しないでください。

設定

すべての設定は環境変数で、プロセス環境または.envファイルから読み取られます。.env.exampleを参照してください。

変数

デフォルト

目的

BROWSER_PROFILE_DIR

~/.config/stealth-browser-mcp/profile

永続的なChromeプロファイル。ライブセッションを保持します。非公開に保ち、バージョン管理の対象外にしてください。

CHROME_EXECUTABLE_PATH

プラットフォームのデフォルト

操作するChromeバイナリ。パスが存在しない場合はPuppeteerのChromiumにフォールバックします。

NAV_TIMEOUT

45000

ナビゲーションとセレクターのタイムアウト(ミリ秒)。

Chromeの起動フラグとデフォルトの1280×800ビューポートはsrc/config.jsにあります。いくつかのフラグはセキュリティと互換性をトレードオフしています。SECURITY.mdで、どのフラグがなぜ削除すべきかもしれないかを説明しています。

ステルス性の検証

npm run check-stealth

navigator.webdriverwindow.chromewindow.chrome.runtime、プラグイン数、navigator.languages、および有効なユーザーエージェントを報告し、解決されたプロファイルとChromeのパスを出力します。

より厳密なチェックを行うには、browser_navigate の後に browser_screenshot を実行し、ブラウザをフィンガープリンティングページ(例:bot.sannysoft.comabrahamjuliot.github.io/creepjs)に向けてください。

完全に検出を逃れられるステルス設定は存在しません。防御の堅いサイトはフィンガープリンティングと行動分析、IPレピュテーション、アカウント履歴を組み合わせており、自動化を見抜きます。これは「明らかなチェックを引っかけない」という意味であり、「不可視」という意味ではありません。

トラブルシューティング

「Failed to launch the browser process」/ プロファイルがロックされている。 Chromeはプロファイルディレクトリごとに1つのプロセスしか許可しません。同じディレクトリに対して手動で起動したChromeがあれば閉じてください。サーバーは起動時に古いSingleton*ロックファイルをクリアし、DevToolsポート経由で稼働中のインスタンスに再接続しますが、プロファイルを所有している実行中のChromeが優先されます。

サイトがモデルをログアウトさせる、またはブロックする。 保存されたセッションが期限切れです。npm run login -- <url> を再実行してください。

セレクタが一致しない。 狭いセレクタで browser_extract_html を呼び出し、推測する代わりにモデルに実際のマークアップを読ませてください。シングルページアプリケーションでは入力要素のマウントが遅れることがよくあるため、先に browser_wait_for を使用してください。

CAPTCHAが表示される。 browser_open_interactive_window を呼び出して自分で解決し、続行してください。解決済みの状態はプロファイルに保持されます。

LinuxまたはWindowsでキーチェーンエラーが発生する。 これは想定内です。そのレイヤーはmacOS専用です。ブラウザツールはどこでも動作しますが、認証情報ツールとパスキーツールは動作しません。

責任ある利用

このプロジェクトの目的は、アシスタントがあなたがすでにアカウントを持っているサイトで、あなた自身が確立したセッションを使用して動作できるようにすることです。それが意図された範囲であり、永続プロファイルの設計もそれを反映しています。

検出回避と認証情報の自動化は、明らかに他の目的に転用できます。サイトに対して実行する前に、以下を考慮してください:

  • サイトの利用規約。 多くのサイトは自動アクセスを明示的に禁止しています。ボット防御を回避することは、あなたが同意した契約違反になる可能性があり、一部の法域では不正アクセスが刑事責任を伴います。制御を回避できることは、それを実行する許可にはなりません。

  • 同意。 自分が所有するアカウント、または書面による権限を得て操作するアカウントのみを自動化してください。キーチェーンにある他人の認証情報は同意ではありません。

  • 負荷。 レート制限を守ってください。該当する場合は robots.txt を尊重してください。サイトに実際のコストをかける自動化は、その手法が全員に対して禁止される良い方法です。

  • 他人のデータ。 モデルが読み取るページは、MCPクライアントのプロバイダーに流れます。第三者の個人情報をそこに通さないでください。

特定のサイトの保護を無効化すること、認証情報の収集、または悪用の拡大を主目的とするコントリビューションはマージされません。

ライセンス

MIT © Yuen Lau

Install Server
A
license - permissive license
A
quality
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • F
    license
    Not graded
    quality
    Not graded
    maintenance
    Enables AI agents to authenticate with websites using a real Chromium browser with anti-detection measures and human-in-the-loop support for captchas and 2FA. Features stealth browsing, human-like interactions, and persistent session storage to automate and resume login workflows.
  • A
    license
    B
    quality
    F
    maintenance
    Enables AI agents to directly control your real Chrome browser with full context including login sessions, cookies, and open tabs. It provides tools for page scanning, JavaScript execution, CDP control, screenshots, and physical mouse/keyboard input for authentic browser automation.
    20
    239
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Lets AI assistants control your real Chrome browser to perform web tasks like reading pages, taking screenshots, clicking, and typing, using your existing logged-in sessions.
    131
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Gives your AI agent a persistent browser identity with anti-detection, credential vault, and multi-persona support for automated web browsing, login, and signup.
    31
    8
    MIT

View all related MCP servers

Related MCP Connectors

  • Browser MCP for logged-in tasks. Uses your Chrome — credentials stay local. Zero-token replay.

  • AI-powered browser automation — navigate, click, fill forms, and extract data from any website.

  • Stealth web browser for agents: search, fetch, click and type through persistent sessions over MCP.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/lauyuen/stealth-browser-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server