mcpField
S
Scout

Scout

ローカル
github.com/felixgeelhaarブラウザ自動化149 週間前に更新

Scout について

Scout は Go 製のブラウザー自動化プロジェクトで、単一バイナリに CLI、MCP サーバー、チャット UI、Go ライブラリを備えています。MCP ツールは CDP 経由で、ページ操作、抽出、診断、録画に対応します。

主な機能

  1. 01ブラウザーページの移動と操作
  2. 02テキスト、表、ページ構造の抽出
  3. 03スクリーンショット撮影とセッション録画
  4. 04ネットワーク動作と診断情報の確認
  5. 05CLI または Go によるブラウザー自動化

活用シーン

  1. 01エージェントの複数手順のブラウザー操作を自動化
  2. 02ウェブページから構造化情報を抽出
  3. 03複数ページにまたがる操作手順を録画

MCP 対応

組み込み MCP サーバーは `scout mcp serve` で起動し、ブラウザーの移動、操作、抽出、キャプチャ、録画、診断ツールを公開します。複数の操作にわたってブラウザーセッションを維持します。

設定

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

mcp.json · 共通設定
{
"mcpServers": {
"felixgeelhaar-scout": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/felixgeelhaar/scout:1.10.0"
]
}
}
}
起動コマンドdocker run -i --rm ghcr.io/felixgeelhaar/scout:1.10.0

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

パッケージ
ocighcr.io/felixgeelhaar/scout:1.10.0

ツール

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

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

詳細

Scout

Scout

バイナリ1つでブラウザーを自動化。 Playwrightをよりシンプルにした代替ツールです。NodeもPythonもランタイムも不要。Go、任意のシェル、あらゆるAIエージェント(MCP サーバーを内蔵)、またはチャットUIから実際のブラウザーを操作できます。

リリース ライセンス CI Go リファレンス カバレッジ セキュリティ(nox)

静的リンクされた単一のscoutバイナリで、CLI、87個のツールを備えたMCP サーバー(MCP 対応エージェントなら、Claude Desktop、Cursor、Cline、カスタムエージェントなど、どれでもブラウザーを利用できます)、対話型チャットUI、Ginのようなミドルウェア合成が可能なGoライブラリを利用できます。同じエンジンに、4つのアクセス方法を用意しています。

brew install --cask klarlabs-studio/tap/scout-mcp

Playwrightとの比較

ScoutPlaywright
インストール約15 MBのバイナリ1つnpmと約600 MBのブラウザーキャッシュ
ランタイム依存関係なし(静的)常にNode.jsが必要。Python/Java/.NETはラッパーとして利用
操作方法Go、任意のシェル、MCP、チャットUITS/JSを第一級でサポート。他は遅れています
AIエージェント対応組み込みのscout mcp serve別プロジェクトのplaywright-mcp
トークンを考慮した抽出DOM差分、蒸留、観察予算(トークンを50~80%削減)非対応
アクションプレイブック決定論的なJSONを記録して再生コード生成で、自分で保守するスクリプトを作成
コンテナーへのデプロイscratchまたはdistrolessに配置Nodeとブラウザーバイナリを同梱
CDPアクセス抽象化なしの直接WebSocketCDP経由の内部プロトコル

クイックスタート

# CLI — visible browser, one-shot commands
scout observe https://example.com          # structured page snapshot
scout markdown https://news.ycombinator.com # page as compact markdown
scout screenshot https://github.com         # save screenshot
scout extract https://example.com h1        # extract element text
scout frameworks https://react.dev          # detect React, Vue, etc.

# MCP Server — give AI agents browser superpowers
claude mcp add scout -- scout mcp serve

# Browser UI — conversational browser automation
scout ui serve --provider=ollama --model=mistral
cd ui && npm install && npm run dev  # open http://localhost:3000

インストール

# Homebrew
brew install --cask klarlabs-studio/tap/scout-mcp

# Direct binary
curl -fsSL https://raw.githubusercontent.com/klarlabs-studio/scout/main/install.sh | bash

# Go
go install go.klarlabs.de/scout/cmd/scout@latest

# As a library
go get go.klarlabs.de/scout

MCP サーバー — 77個のツール

scout mcp serveを実行すれば、MCP 対応エージェントでブラウザーを利用できます。別のプロジェクトをインストールする必要も、NodeランタイムやPythonインタープリターも不要です。バイナリがそのままサーバーになります。任意のMCP クライアントで設定できます。

claude mcp add scout -- scout mcp serve           # Claude Code
{"mcpServers": {"scout": {"command": "scout", "args": ["mcp", "serve"]}}}
ツールのカテゴリ
カテゴリツール
ナビゲーションnavigate、observe、observe_diff、observe_with_budget
操作click、click_label、click_text、type、hover、double_click、right_click、select_option、scroll_to、scroll_by、focus、drag_drop、dispatch_event
フォームfill_form、fill_form_semantic(チェックボックス/ラジオボタン+状態のエコー)、discover_form
抽出extract、extract_all、extract_table、auto_extract、scroll_and_collect、markdown、readable_text、accessibility_tree
キャプチャscreenshot、annotated_screenshot、pdf
ネットワークenable_network_capture、network_requests
タブopen_tab、switch_tab、close_tab、list_tabs
フレームワークwait_spa、detect_frameworks、component_state、app_state
再生start_recording、stop_recording、save_playbook、replay_playbook
動画start_screen_recording、stop_screen_recording
スマートヘルパーcheck_readiness、suggest_selectors、session_history
ビジョンhybrid_observe、find_by_coordinates
一括処理execute_batch
iframeswitch_to_frame、switch_to_main_frame
トレースstart_trace、stop_trace
Cookiecookies_list、cookies_clear、cookies_set、dismiss_cookies
診断detect_dialog、detect_auth_wall、console_errors(ネットワークの4xx/5xxを含む)、failed_requests、compare_tabs、upload_file
ユーティリティhas_element、wait_for、configure、set_viewport、web_vitals、select_by_prompt

すべてのツールには、スマートな自動承認のための MCP アノテーション(ReadOnly、OpenWorld、ClosedWorld、Idempotent)が付与されています。observe、extract、screenshot などの読み取り専用ツールは、許可を求めずに実行されます。

ランタイム設定

再起動せずにヘッドレスブラウザーと表示ブラウザーを切り替え、ローカル開発ワークフロー(ループバック、プライベート IP)を有効にできます。

Agent: configure(headless: false)                        → browser window appears
Agent: navigate("https://...")                           → watch it work
Agent: configure(headless: true)                         → back to headless
Agent: configure(allow_private_ips: true)                → unlock localhost / 192.168.* / 10.*
Agent: navigate("http://127.0.0.1:4173/")                → drive your local dev server

MCP サーバーは、信頼できる環境で一度だけ切り替える設定として、起動時に SCOUT_ALLOW_PRIVATE_IPS=1 も読み取ります。

画面録画(動画)

アクティブなページを動画として録画します。CDP のみを使用し、ヘッドレスでも動作します。Playwright は不要です。録画中に navigate、open_tab、switch_tab を呼び出しても録画は継続するため、複数ページにまたがるデモも1本の連続したクリップになります。

Agent: start_screen_recording({ width: 1280, height: 800, fps: 15, format: "webm" })
Agent: navigate("https://example.com")
Agent: click("#cta")
Agent: navigate("https://example.com/dashboard")   # recording continues across pages
Agent: stop_screen_recording()
       → { path: "/tmp/scout-rec-XXX.webm", format: "webm", encoder: "ffmpeg",
           frame_count: N, duration_ms: N }

ffmpeg が PATH にある場合、結果は WebM(libvpx-vp9)または MP4(libx264)にエンコードされます。ない場合、scout は JPEG の生フレームディレクトリと ffmpeg の連結リストを返すため、オフラインでエンコードできます。結果は常にファイルパスであり、base64 ではありません。LLM のトークン予算を消費することもありません。

実際の FPS は一般的なページで約10~15、上限は30です。実装では Page.captureScreenshot をポーリングします(CDP の Page.startScreencast イベントは --headless=new の Chrome では通知されずに破棄されます)。

ブラウザー UI

会話形式のブラウザー自動化インターフェースです。自然言語を入力すると、ブラウザーがリアルタイムで応答する様子を確認できます。

# Start the AG-UI server (Go backend)
scout ui serve --provider=ollama --model=mistral    # local, no API key
scout ui serve --provider=claude                     # needs ANTHROPIC_API_KEY
scout ui serve --provider=openai --model=gpt-4o     # needs OPENAI_API_KEY
scout ui serve --provider=groq --base-url=https://api.groq.com/openai --model=llama-3.3-70b-versatile

# Start the Vue frontend
cd ui && npm install && npm run dev                  # http://localhost:3000

UI は SSE 経由で AG-UI プロトコルイベントをストリーミングします。

  • Markdown 表示とクイックアクションのピルを備えたチャットパネル
  • スクリーンショットのストリーミングと URL バーを備えたライブブラウザービューポート
  • ツール呼び出しをリアルタイムで表示するアクティビティタイムライン
  • ストリーミング中に処理をキャンセルする停止ボタン

Go サーバーはエージェントのループを処理します。LLM が呼び出す scout ツールを決定し、実行して、ブラウザー状態の差分をフロントエンドにストリーミングで返します。--base-url を介して、OpenAI 互換の任意のエンドポイントをサポートします。

エージェントパッケージ(Go)

scout をプログラムに組み込みたい呼び出し元向けの、高レベルな Go API です。構造化出力、自動待機、ゴルーチンセーフに対応しています。ほとんどのユーザーは、上記の CLI または MCP サーバーを通じて scout を利用します。このセクションでは Go ライブラリを使う方法を説明します。

session, _ := agent.NewSession(agent.SessionConfig{Headless: true})
defer session.Close()

// Navigate and observe
session.Navigate("https://example.com")
obs, _ := session.Observe()               // links, inputs, buttons, text + action costs

// DOM diff — only what changed (saves 50-80% tokens)
session.Click("#submit")
_, diff, _ := session.ObserveDiff()
// diff.Classification: "modal_appeared"
// diff.Summary: "Modal/dialog appeared: Login required"

// Semantic form filling — no CSS selectors
session.FillFormSemantic(map[string]string{
    "Email": "user-example", "Password": "secret",
})

// Visual grounding — click by number, not selector
result, _ := session.AnnotatedScreenshot()  // numbered labels on elements
session.ClickLabel(7)                        // click element [7]

// Multi-tab coordination
session.OpenTab("pricing", "https://example.com/pricing")
session.SwitchTab("default")

// Framework detection (19 frameworks)
frameworks, _ := session.DetectedFrameworks() // ["react", "nextjs"]
state, _ := session.ComponentState("#app")    // read React/Vue state

// Network capture — read API responses directly
session.EnableNetworkCapture("/api/")
captured := session.CapturedRequests("/api/users")

// Action replay — record once, replay without LLM
session.StartRecordingPlaybook("login-flow")
// ... do stuff ...
pb, _ := session.StopRecordingPlaybook()
agent.SavePlaybook(pb, "login.json")
// Later: session.ReplayPlaybook(pb)  // 100x cheaper

// Persistent profiles
session.SaveProfile("session.json")   // cookies + localStorage
session.LoadProfile("session.json")

// Content distillation (5 levels)
session.Markdown()          // ~2-8KB compact markdown
session.ReadableText()      // ~1-4KB main content only
session.AccessibilityTree() // ~1-4KB semantic tree
session.ObserveWithBudget(500) // fit in ~500 tokens

コアライブラリ(Go)

ミドルウェアの合成に対応した、Gin に似た Engine/Context/Group/HandlerFunc です。最も低レベルな Go API です。タスクのライフサイクル、名前付きグループ、ミドルウェアチェーンを完全に制御したい場合に使用してください。

engine := browse.Default(browse.WithHeadless(true))
engine.MustLaunch()
defer engine.Close()

engine.Use(middleware.Stealth())
engine.Use(middleware.Retry(middleware.RetryConfig{MaxAttempts: 3}))
engine.Use(middleware.Timeout(30 * time.Second))

admin := engine.Group("admin", middleware.BasicAuth("admin", "secret"))
admin.Task("export", func(c *browse.Context) {
    c.MustNavigate("https://app.example.com/admin")
    table, _ := c.ExtractTable("#users")
    c.Set("data", table)
})

engine.RunGroup("admin")
ミドルウェア
カテゴリミドルウェア
レジリエンスRetry、Timeout、CircuitBreaker、RateLimit、Bulkhead
認証BearerAuth、BasicAuth、CookieAuth、HeaderAuth
検出回避Stealth(webdriver、plugins、WebGL など、10 個のパッチ)
ネットワークBlockResources、WaitNetworkIdle
ユーティリティScreenshotOnError、SlowMotion、Viewport

CLI

CLI は意図的にワンショット向けの階層として設計されています。各コマンドはブラウザーを起動し、ページに移動して、読み取りまたは診断のアクションを 1 つ実行し、結果を出力して終了します。 状態を保持する対話型のフロー(クリック→入力→送信、複数タブ、Cookie やネットワークのリアルタイム操作)は、アクション間でセッションを維持する MCP サーバー(scout mcp serve)とチャット UI(scout ui serve)で実行します。

CLI はデフォルトでブラウザーを表示します(非表示にするには --headless を指定します)。

scout navigate <url>                  # page info as JSON
scout observe <url>                   # structured observation
scout markdown <url>                  # compact markdown
scout readable <url>                  # main readable content (boilerplate stripped)
scout accessibility <url>             # semantic accessibility tree
scout screenshot <url> [--output f]   # save screenshot
scout pdf <url> [--output f]          # save PDF
scout extract <url> <selector>        # extract text
scout table <url> <selector>          # extract a table as structured rows
scout auto-extract <url>              # auto-detect dominant data pattern
scout eval <url> <expression>         # run JavaScript
scout form discover <url>             # discover form fields
scout frameworks <url>                # detect frameworks
scout app-state <url>                 # global app/store state (JSON)
scout aria <url>                      # ARIA violation report (JSON)
scout vitals <url>                    # Core Web Vitals (JSON)
scout console <url>                   # console errors + network 4xx/5xx (JSON)
scout dialog <url>                    # detect visible modal/dialog (JSON)
scout auth-wall <url>                 # detect login/auth wall (JSON)
scout cookies <url>                   # list cookies (values redacted)
scout watch <url> [--interval=5s]     # live-watch page changes
scout pipe <command> [selector]       # batch process URLs from stdin
scout record <url> [--output f]       # interactive recording → playbook
scout mcp serve                       # start MCP server
scout ui serve [flags]                # start chat UI
scout version                         # print version

アーキテクチャ

scout/
├── browse.go, engine.go, context.go   # Gin-like API
├── page.go, selection.go              # CDP page & element interaction
├── recorder.go                        # Action playbook recording (Navigate/Click/Type → JSON)
├── middleware/                        # stealth, resilience, auth, network
├── agent/                             # AI agent API (50+ methods)
│   ├── session.go                     # Session lifecycle, Navigate, Click, Type
│   ├── observe.go, diff.go            # Observe, ObserveDiff, cost estimation
│   ├── content.go                     # Markdown, ReadableText, AccessibilityTree
│   ├── form.go                        # DiscoverForm, FillFormSemantic, MatchFormField
│   ├── annotate.go                    # AnnotatedScreenshot, ClickLabel
│   ├── network.go                     # EnableNetworkCapture, CapturedRequests
│   ├── spa.go                         # DetectedFrameworks, ComponentState, GetAppState
│   ├── tabs.go                        # OpenTab, SwitchTab, CloseTab, ListTabs
│   ├── playbook.go                    # StartRecording, ReplayPlaybook, SavePlaybook
│   ├── interact.go                    # Hover, DragDrop, SelectOption, ScrollTo
│   ├── profile.go                     # CaptureProfile, ApplyProfile, SaveProfile
│   ├── selector.go                    # Playwright :text() selector translation
│   ├── budget.go                      # ObserveWithBudget, EstimateTokens
│   ├── nlselect.go                    # SelectByPrompt, fuzzy NL element matching
│   ├── batch.go                       # ExecuteBatch, sequential multi-action
│   ├── vision.go                      # HybridObserve, FindByCoordinates
│   ├── trace.go                       # StartTrace, StopTrace, action tracing
│   ├── screencast.go                  # StartScreenRecording / StopScreenRecording — video via captureScreenshot polling + ffmpeg encode
│   ├── iframe.go                      # SwitchToFrame, SwitchToMainFrame
│   └── vitals.go                      # WebVitals (LCP/CLS/INP)
├── internal/cdp/                      # WebSocket CDP client (context-aware)
├── internal/launcher/                 # Chrome process management
├── cmd/scout/                         # CLI + MCP server (87 tools)
└── docs/                              # Landing page (GitHub Pages)

セキュリティ

脆弱性スキャンは nox を使用して、すべてのプッシュと PR で実行されます。検出結果は GitHub code scanning にアップロードされ、PR 上にインラインで注釈が付けられ、.nox/baseline.json と照合されます。そのため、リグレッションがあるとマージがブロックされます。ヘッダーのステータスバッジには、最新の main ブランチのスキャン結果が反映されます。

nox は Dependabot の代わりに依存関係の修正も行います。Nox Remediate ワークフローは毎週(月曜日 06:00 UTC)およびオンデマンドで実行され、新たに取得した OSV.dev の検出結果に対して nox fix を実行し、検証済みのアップグレードを 1 件の PR にまとめて作成します。

# Local scan
nox scan -severity-threshold high .

# Local fix
nox fix -input findings.json

ライセンス

MIT

コメント

MCP は初めてですか?

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

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