Skip to main content
Glama

特徴

  • ブラウザ自動化: ナビゲーション、クリック、タイピング、フォーム入力、JavaScriptの評価

  • デフォルトで軽量: Chromium比でメモリ約5分の1、生のHTML比でスナップショット約25分の1

  • ページスナップショット: 一意のノードIDを持つコンパクトなYAMLアクセシビリティツリースナップショットを取得し、要素を正確にターゲット指定可能

  • LLM最適化コンテキスト: スナップショットは意味的に必須の要素のみに削減され、コンテキスト使用量を最小限に抑えるため、同じウィンドウ内でより多くのページとより長いセッションを処理可能

  • 設定可能なフォールバックブラウザ: 2段階モデル — まず軽量ブラウザを使用し、デフォルトがボット検出された場合、クラッシュした場合、またはタイムアウトした場合にのみ、ヘッドフルChrome、Browserless、Browserbaseのクラウドブラウザにエスカレーション

  • レート制限: 検知を回避。ワイルドカードパターン(*、*.reddit.com)を使用して特定ドメインへのリクエスト間に設定可能な最小遅延を強制し、オプションのジッターも追加可能。エージェントがサイトを過剰に叩いてボット防御を発動させることなく、ペースを調整

  • プロキシサポート: 単一のPROXY_SERVER設定で全リクエストをHTTPプロキシ経由でルーティング — 両方のブラウザレイヤーに自動適用されるため、実際のIPがターゲットに触れることはありません。インライン基本認証(http://user:pass@host:port)に対応

  • 堅牢なセッション管理: セッションごとのシリアライズ、オプションのセッション上限(MAX_SESSIONS)、セッション途中のクラッシュリカバリ(履歴リプレイ付き)、グレースフルシャットダウン

  • セッション管理: 一意のセッションIDを使用して複数の操作にわたってセッションを再利用

  • クロスプラットフォーム: LinuxとmacOSで動作し、必要に応じて設定可能な実ブラウザフォールバックを提供

Related MCP server: opencode-browser-control

ベンチマーク

SlimAtlasは、slim-atlas-benchを使用してPlaywright MCP(ヘッドレスおよびヘッドフルChromium)とベンチマーク比較されました — 5カテゴリ×25の実在サイト、各3回実行(合計225回)、すべてlocalhost上のDockerで実行。

セットアップ: 各サービスは独自のDockerコンテナ内でMCPサーバーとして実行されます。ベンチマークハーネスは、langchain-mcp-adaptersを介してツール呼び出しごとのレイテンシ(ナビゲート+スナップショット)を測定し、Docker stats APIを介してコンテナRAMを取得します。スナップショットのトークン数は約4文字/トークンで推定されます(生のHTMLベースラインと同じ方法論)。

メトリクス(中央値)

SlimAtlas

Playwright Headless

Playwright Headful

ナビゲート+スナップショット(ms)

1,383

1,116

687

コンテナRAM(MB)

124

635

815

スナップショットトークン

414

940

1,843

SlimAtlasはナビゲーション速度と引き換えに、リソース使用量を大幅に削減します。Chromiumはページ読み込みが高速ですが、5〜6倍のRAMを使用し、スナップショットあたり2〜4倍のトークンを生成します — これはエージェントワークフローを大規模に運用する際に支配的な2つのコストです。

結果

インストール

Bun ≥1.1が必要です。

# Install dependencies
bun install

ブラウザバイナリは初回実行時に自動的にダウンロードされます。

フォールバックブラウザ: レベル1は常に軽量ブラウザです。レベル2はFALLBACK_BROWSER — headful(ヘッドフルChrome)、browserbase(クラウド)、browserless(クラウド)、またはnone(デフォルト、フォールバックなし)のいずれか。デフォルトがクラッシュ、タイムアウト、またはボット検出された場合、セッションは設定されたフォールバックに1回だけ切り替わります。ChromeはPuppeteerにバンドルされています。Browserbase/BrowserlessにはAPI認証情報が必要です(下記参照)。

使用方法

MCPサーバーの実行

# Standalone HTTP server (default)
bun run src/index.ts --port=8080

# Remote, authenticated
MCP_AUTH_TOKEN=s3cret bun run src/index.ts --host=0.0.0.0 --port=8080

SlimAtlasは単一のStreamable HTTP /mcpエンドポイントを公開します。各クライアントはmcp-session-idヘッダーを介して独自のセッションを取得します。MAX_SESSIONSは同時実行数を制限します。MCPクライアントを以下のように設定します:

{
  "mcpServers": {
    "slimatlas": {
      "url": "http://localhost:8080/mcp",
      "transport": "http"
    }
  }
}

認証付き:

{
  "mcpServers": {
    "slimatlas": {
      "url": "http://your-host:8080/mcp",
      "transport": "http",
      "headers": { "Authorization": "Bearer s3cret" }
    }
  }
}

ヒント: リモート公開には--host=0.0.0.0を使用しますが、その場合は必ずMCP_AUTH_TOKENを設定してください。サーバーはプレーンHTTPのみを話します — フロントにTLS終端(Caddy/nginx)を配置しない限り、Bearerトークンはネットワーク上を平文で流れます。

Docker

イメージにはビルド時にLightpandaバイナリがバンドルされているため、コンテナは自己完結型で起動し、再ダウンロードは発生しません:

docker build -t slimatlas .
docker run -p 8080:8080 -e MCP_AUTH_TOKEN=s3cret slimatlas
# -> http://localhost:8080/mcp

再現性のあるビルドのためにLightpandaリリースを固定します(任意のlightpanda-io/browserタグ — デフォルトはnightly):

docker build --build-arg LIGHTPANDA_VERSION=0.3.3 -t slimatlas:0.3.3 .

マルチアーキテクチャは自動的に処理されます — ビルドはuname -mを介してコンテナのアーキテクチャを検出します(x86_64 → lightpanda-x86_64-linux、aarch64 → lightpanda-aarch64-linux)。そのため、バイナリは常にビルド対象のプラットフォームと一致します。

Apple Silicon(MシリーズMac): ネイティブでビルド/実行するには--platform linux/arm64を渡してください。これがないと、Docker Desktopはamd64をデフォルトにし、Rosettaでコンテナを実行する可能性があり、Lightpandaバイナリの起動に失敗します(rosetta error: failed to open elf …)。

docker build --platform linux/arm64 --build-arg FALLBACK_BROWSER=headful -t slimatlas .
docker run --platform linux/arm64 --name slimatlas -p 8080:8080 -e MCP_AUTH_TOKEN=s3cret -e LIGHTPANDA_POOL_SIZE=10 -e CHROME_POOL_SIZE=10 slimatlas

ヘッドフルフォールバックバリアント。 デフォルトのイメージはLightpandaのみを実行します(FALLBACK_BROWSER=none)。ヘッドフルChromeフォールバックを有効にする場合(実行時にFALLBACK_BROWSER=headfulを設定する場合にのみ必要)、ヘッドフルバリアントをビルドしてください — Chromeランタイムライブラリ+Xvfb(約150MB)が追加され、FALLBACK_BROWSER=headfulがプリセットされます:

docker build --build-arg LIGHTPANDA_VERSION=0.3.3 FALLBACK_BROWSER=headful -t slimatlas:headful .
docker run -p 8080:8080 -e MCP_AUTH_TOKEN=s3cret slimatlas:headful

Xvfbは、ヘッドフルChromeにエスカレーションする最初のセッションでコンテナ内で遅延起動されます — エントリポイントや手動のxvfb-runは不要です。

Stdioモード

サーバーをサブプロセスとして起動するMCPクライアント(ローカル、シングルクライアント)向けに、stdioトランスポートを使用します:

bun run src/index.ts
{
  "mcpServers": {
    "slimatlas": {
      "command": "bun",
      "args": ["run", "path/to/mcp/src/index.ts"]
    }
  }
}

設定

MCPクライアント設定に追加:

{
  "mcpServers": {
    "slimatlas": {
      "command": "bun",
      "args": ["run", "path/to/mcp/src/index.ts"]
    }
  }
}

ヒント: FALLBACK_BROWSER=noneを設定すると、軽量ブラウザのみを使用し、エラーを正直に伝播させます。headfulまたはbrowserbaseを使用すると、実ブラウザのフォールバックを有効にできます。

すべての環境変数とCLIフラグについてはdocs/configs.mdを参照してください。

フォールバックブラウザ

FALLBACK_BROWSER

レベル2ブラウザ

備考

none(デフォルト)

—

軽量ブラウザのみ。エラーは正直に伝播

headful

ヘッドフルChrome

macOSでは実ウィンドウ。ヘッドレスLinuxではxvfbが必要

browserbase

Browserbaseクラウド

BROWSERBASE_API_KEY + BROWSERBASE_PROJECT_IDが必要

既知の難しいドメインではデフォルトブラウザをスキップするには、SKIP_LIGHTPANDA_DOMAINS(カンマ区切り、サブドメイン認識)を使用します。一致したホストはフォールバックブラウザで直接起動します。FALLBACK_BROWSER != noneが必要です(それ以外の場合はリストは警告付きで無視されます)。

レート制限

エージェントのための丁寧で検知回避的なペーシング。RateLimiterは、リストしたドメインへのbrowser_navigate呼び出し間にサーバー全体の最小遅延を強制し、オプションのランダムジッターを追加して、間隔が固定された指紋化可能なものにならないようにします。バケットはすべてのセッションにわたってホストごとにキー設定されます(ターゲットサイトが見るのはセッションではなくIPだからです)。パターンはワイルドカードをサポートします:

パターン

一致対象

バケット

*

すべてのホスト

各ホストが独立してスロットルされる

*.reddit.com

サブドメインのみ(www.reddit.com、old.reddit.com) — reddit.comは除く

一致するすべてのサブドメインが1つのバケットを共有

g2.com

g2.com + そのサブドメイン

エイペックス+サブドメインが1つのバケットを共有

デフォルトでは無効。空でないドメインリストかつゼロ以外の遅延で有効化:

# Via CLI flags
bun run src/index.ts --rate-limit-domains=*.reddit.com,g2.com --rate-limit-min-delay-ms=2000 --rate-limit-jitter-ms=1500

# Or via environment / .env
RATE_LIMIT_DOMAINS=*.reddit.com,g2.com
RATE_LIMIT_MIN_DELAY_MS=2000
RATE_LIMIT_JITTER_MS=1500

プロキシ

実際のIPをターゲットから守ります。単一のPROXY_SERVERを設定するだけで、SlimAtlasは両方のブラウザレイヤーからのすべてのHTTPトラフィックをプロキシ経由でルーティングします — ブラウザごとの配線は不要です:

  • 軽量ブラウザ(レベル1) — ネイティブの--http-proxyフラグを介して転送。

  • Chromeフォールバック(レベル2) — 起動時に--proxy-serverを介して適用。

# Via CLI flag
bun run src/index.ts --proxy-server=http://host:8080

# Or via environment / .env
PROXY_SERVER=http://user:pass@host:8080

インライン基本認証(http://user:pass@host:port)は軽量ブラウザレイヤーでサポートされています。IP許可リスト型プロキシ(認証情報なし)の場合は、両レイヤーでそのまま機能します。(page.authenticateによるページごとのChrome認証はロードマップに含まれています。)

CLIフラグ

すべての環境変数は、小文字のCLIフラグとして--flag=value形式でも渡せます。CLIフラグは環境変数を上書きします。不明なフラグがあるとサーバーは起動時に終了します。完全なリストはdocs/configs.mdを参照してください。

bun run src/index.ts --fallback-browser=headful --lightpanda-pool-size=3 --skip-lightpanda-domains=g2.com --navigate-timeout=60000

MCPクライアントからフラグを使用するには、args配列に追加します:

{
  "mcpServers": {
    "slimatlas": {
      "command": "bun",
      "args": [
        "run",
        "path/to/mcp/src/index.ts",
        "--fallback-browser=headful",
        "--skip-lightpanda-domains=g2.com,linkedin.com",
        "--chrome-pool-size=3"
      ]
    }
  }
}

使用ワークフロー

# Example: Navigate, snapshot, and interact with a page

# 1. Navigate to a URL (creates a new session automatically)
result = mcp.call("browser_navigate", {"url": "https://example.com"})
# Returns: session_id: abc1, result: Navigated to https://example.com. Title: Example Domain

# 2. Take a snapshot to see the page structure
snapshot = mcp.call("browser_snapshot", {"session_id": "abc1"})
# Returns YAML with node IDs like: 0: {type: div, children: ...}

# 3. Click a node by ID (from the snapshot)
mcp.call("browser_click", {"session_id": "abc1", "nodeId": 2})

# 4. Type into a search box
mcp.call("browser_type", {"session_id": "abc1", "nodeId": 5, "text": "search query"})

# 5. Close the session when done
mcp.call("browser_close", {"session_id": "abc1"})

利用可能なツール

ツール

説明

値

browser_navigate

設定可能な待機戦略で URL に移動します

すべての Web 操作のエントリポイントです。load、domcontentloaded、networkidle0、networkidle2 をサポートします

browser_snapshot

一意のノード ID を持つ YAML アクセシビリティツリーを取得します

LLM の理解に適した構造化ページ表現です。ノード ID により、クリックや入力の正確なターゲット指定が可能です

browser_view_node

ID で特定のノードの内容を表示します(テキストまたは画像)

ページ全体を再読み込みせずに個々の要素を検査します。画像は base64 で返され、視覚的な検証が可能です

browser_click

ノード ID または CSS セレクタで要素をクリックします

信頼性と簡潔さの点で、CSS セレクタよりも(スナップショットからの)ノード ID が推奨されます

browser_type

要素にテキストを入力します(キーストロークの遅延を設定可能)

人間の入力をシミュレートします。検索ボックス、フォーム、テキスト入力に使用します

browser_fill

入力要素に値を即座に入力します

フォームフィールドでは browser_type より高速です。入力前に既存の値をクリアします

browser_go_back

ブラウザ履歴を戻ります

複数ステップのワークフローやナビゲーションの誤りを修正するために不可欠です

browser_go_forward

ブラウザ履歴を進みます

双方向ナビゲーションのために browser_go_back を補完します

browser_reload

現在のページを再読み込みします

動的コンテンツを更新したり、古いページ状態から回復します

browser_get_page_info

現在のページの URL とタイトルを取得します

ナビゲーションの成功と現在のコンテキストを確認する簡単な方法です

browser_close

ブラウザセッションを閉じてリソースを解放します

クリーンアップに重要です。セッションはタイムアウトで自動的に閉じますが、明示的に閉じることを推奨します

テストの実行

# Run all tests
bun test

# Run tests in watch mode
bun test --watch

要件

  • Bun ≥1.1

  • Linux または macOS(自動ダウンロード)または Chrome/Chromium(フォールバック)

ライセンス

MIT

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers