Scout

io.github.felixgeelhaar由 GitHub 帳號 felixgeelhaar 發布v1.10.0更新於 Nov 3, 2026

Browser automation MCP server with 84 tools. Pure CDP, DOM diffing, vision hybrid.

概覽

AI 產生的概覽

Scout 是單一執行檔二進位的瀏覽器自動化 MCP 伺服器,讓 AI 助理操作真實瀏覽器進行導覽、頁面觀察、表單填寫、內容擷取與錄影。

可以做什麼
  • 導覽頁面並取得結構化觀察結果、DOM 差異與受 token 預算限制的快照
  • 點擊、輸入、懸停、拖曳、選擇選項,並依語意或標籤填寫表單
  • 擷取文字、表格、Markdown、正文與無障礙樹,並截取螢幕截圖、標註截圖與 PDF
  • 管理分頁、iframe、Cookie 與網路擷取,偵測前端框架、應用狀態以及主控台與請求錯誤
  • 錄製與重播操作腳本、錄製頁面影片、批次執行動作與追蹤,並檢查 Web Vitals
適用情境
適合需要助理在使用者本機驅動真實瀏覽器的情境:讀取或擷取網頁、測試本機 Web 應用、填寫表單、截圖或錄影,以及不需 Node 或 Python 執行環境即可重播固定的自動化流程。
執行需求
以本機程序方式透過 scout mcp serve 指令啟動,需先安裝 scout 執行檔(Homebrew cask、安裝腳本或 go install)。工具會啟動 Chrome 相容瀏覽器。影片編碼可選用 PATH 中的 ffmpeg。未宣告任何 API 金鑰或環境變數;獨立的聊天介面可使用 ANTHROPIC_API_KEY 或 OPENAI_API_KEY 等供應商金鑰。
安裝前請注意
瀏覽器會操作真實網站,可能送出表單、點擊按鈕、設定 Cookie 與上傳檔案,因而改變遠端狀態。除非透過 configure(allow_private_ips) 或 SCOUT_ALLOW_PRIVATE_IPS 開啟,否則私有與回送位址會被封鎖。頁面內容、Cookie 與擷取到的網路請求會進入助理的上下文。選用的聊天介面會把頁面資料傳送給所設定的 LLM 供應商。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Scout,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

[Scout]

Scout

Browser automation, one binary. The simpler alternative to Playwright — no Node, no Python, no runtime. Drive a real browser from Go, any shell, any AI agent (built-in MCP server), or a chat UI.

[Release] [License] [CI] [Go Reference] [Coverage] [Security (nox)]

A single statically-linked scout binary gives you a CLI, an 87-tool MCP server (so any MCP-aware agent — Claude Desktop, Cursor, Cline, custom — has a browser), a conversational chat UI, and a Go library with Gin-like middleware composition. Same engine, four access points.

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

vs. Playwright

ScoutPlaywright
Installone ~15 MB binarynpm + ~600 MB browser cache
Runtime depnone (static)Node.js always; Python/Java/.NET as wrappers
Drive fromGo, any shell, MCP, chat UITS/JS first-class; others lag
AI-agent nativebuilt-in scout mcp serveseparate playwright-mcp project
Token-aware extractionDOM diff, distillation, observation budgets (50–80% fewer tokens)not provided
Action playbooksrecord & replay deterministic JSONcodegen produces a script you maintain
Container deploydrop into scratch or distrolesscarry Node + browser binaries
CDP accessdirect WebSocket, zero abstractioninternal protocol over CDP

Quick Start

bash
# CLI — visible browser, one-shot commandsscout observe https://example.com          # structured page snapshotscout markdown https://news.ycombinator.com # page as compact markdownscout screenshot https://github.com         # save screenshotscout extract https://example.com h1        # extract element textscout frameworks https://react.dev          # detect React, Vue, etc.
# MCP Server — give AI agents browser superpowersclaude mcp add scout -- scout mcp serve
# Browser UI — conversational browser automationscout ui serve --provider=ollama --model=mistralcd ui && npm install && npm run dev  # open http://localhost:3000

Install

bash
# Homebrewbrew install --cask klarlabs-studio/tap/scout-mcp
# Direct binarycurl -fsSL https://raw.githubusercontent.com/klarlabs-studio/scout/main/install.sh | bash
# Gogo install go.klarlabs.de/scout/cmd/scout@latest
# As a librarygo get go.klarlabs.de/scout

MCP Server — 77 Tools

Run scout mcp serve and any MCP-aware agent has a browser. No second project to install, no Node runtime, no Python interpreter — the binary is the server. Configure in any MCP client:

bash
claude mcp add scout -- scout mcp serve           # Claude Code
json
{"mcpServers": {"scout": {"command": "scout", "args": ["mcp", "serve"]}}}

Tool Categories

CategoryTools
Navigationnavigate, observe, observe_diff, observe_with_budget
Interactionclick, click_label, click_text, type, hover, double_click, right_click, select_option, scroll_to, scroll_by, focus, drag_drop, dispatch_event
Formsfill_form, fill_form_semantic (checkbox/radio + state echo), discover_form
Extractionextract, extract_all, extract_table, auto_extract, scroll_and_collect, markdown, readable_text, accessibility_tree
Capturescreenshot, annotated_screenshot, pdf
Networkenable_network_capture, network_requests
Tabsopen_tab, switch_tab, close_tab, list_tabs
Frameworkswait_spa, detect_frameworks, component_state, app_state
Playbackstart_recording, stop_recording, save_playbook, replay_playbook
Videostart_screen_recording, stop_screen_recording
Smart Helperscheck_readiness, suggest_selectors, session_history
Visionhybrid_observe, find_by_coordinates
Batchexecute_batch
Iframeswitch_to_frame, switch_to_main_frame
Tracestart_trace, stop_trace
Cookiescookies_list, cookies_clear, cookies_set, dismiss_cookies
Diagnosticsdetect_dialog, detect_auth_wall, console_errors (incl. network 4xx/5xx), failed_requests, compare_tabs, upload_file
Utilityhas_element, wait_for, configure, set_viewport, web_vitals, select_by_prompt

All tools have MCP annotations (ReadOnly, OpenWorld, ClosedWorld, Idempotent) for smart auto-approval. Read-only tools like observe, extract, and screenshot run without permission prompts.

Runtime Configuration

Switch between headless and visible browser without restarting, and opt into local-dev workflows (loopback, private IPs):

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

The MCP server also reads SCOUT_ALLOW_PRIVATE_IPS=1 at startup as a one-shot toggle for trusted environments.

Screen Recording (video)

Record the active page as a video. Pure CDP — works in headless, no Playwright needed. Recording survives navigate, open_tab, and switch_tab calls in between, so a multi-page demo lands as one continuous clip:

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 pagesAgent: stop_screen_recording()       → { path: "/tmp/scout-rec-XXX.webm", format: "webm", encoder: "ffmpeg",           frame_count: N, duration_ms: N }

If ffmpeg is on PATH, the result is encoded to WebM (libvpx-vp9) or MP4 (libx264). If not, scout returns the raw JPEG frames directory plus an ffmpeg concat list so you can encode offline. The result is always a file path, never base64 — never enters your LLM token budget.

Realistic FPS: ~10–15 on typical pages, capped at 30. Implementation polls Page.captureScreenshot (CDP Page.startScreencast events are silently dropped under --headless=new Chrome).

Browser UI

A conversational browser automation interface. Type natural language, watch the browser respond in real-time.

bash
# Start the AG-UI server (Go backend)scout ui serve --provider=ollama --model=mistral    # local, no API keyscout ui serve --provider=claude                     # needs ANTHROPIC_API_KEYscout ui serve --provider=openai --model=gpt-4o     # needs OPENAI_API_KEYscout ui serve --provider=groq --base-url=https://api.groq.com/openai --model=llama-3.3-70b-versatile
# Start the Vue frontendcd ui && npm install && npm run dev                  # http://localhost:3000

The UI streams AG-UI protocol events over SSE:

  • Chat panel with markdown rendering and quick-action pills
  • Live browser viewport with screenshot streaming and URL bar
  • Activity timeline showing tool calls in real-time
  • Stop button to cancel mid-stream

The Go server handles the agentic loop: LLM decides which scout tools to call, executes them, streams browser state deltas back to the frontend. Supports any OpenAI-compatible endpoint via --base-url.

Agent Package (Go)

High-level Go API for callers that want to embed scout in a program. Structured output, auto-wait, goroutine-safe. Most users reach scout through the CLI or MCP server above — this section is for the Go-library path.

go
session, _ := agent.NewSession(agent.SessionConfig{Headless: true})defer session.Close()
// Navigate and observesession.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 selectorssession.FillFormSemantic(map[string]string{    "Email": "user-example", "Password": "secret",})
// Visual grounding — click by number, not selectorresult, _ := session.AnnotatedScreenshot()  // numbered labels on elementssession.ClickLabel(7)                        // click element [7]
// Multi-tab coordinationsession.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 directlysession.EnableNetworkCapture("/api/")captured := session.CapturedRequests("/api/users")
// Action replay — record once, replay without LLMsession.StartRecordingPlaybook("login-flow")// ... do stuff ...pb, _ := session.StopRecordingPlaybook()agent.SavePlaybook(pb, "login.json")// Later: session.ReplayPlaybook(pb)  // 100x cheaper
// Persistent profilessession.SaveProfile("session.json")   // cookies + localStoragesession.LoadProfile("session.json")
// Content distillation (5 levels)session.Markdown()          // ~2-8KB compact markdownsession.ReadableText()      // ~1-4KB main content onlysession.AccessibilityTree() // ~1-4KB semantic treesession.ObserveWithBudget(500) // fit in ~500 tokens

Core Library (Go)

Gin-like Engine/Context/Group/HandlerFunc with middleware composition. The lowest-level Go API — use it when you want full control of task lifecycle, named groups, and middleware chains:

go
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")

Middleware

CategoryMiddleware
ResilienceRetry, Timeout, CircuitBreaker, RateLimit, Bulkhead
AuthBearerAuth, BasicAuth, CookieAuth, HeaderAuth
Anti-detectionStealth (10 patches: webdriver, plugins, WebGL, etc.)
NetworkBlockResources, WaitNetworkIdle
UtilitiesScreenshotOnError, SlowMotion, Viewport

CLI

The CLI is a deliberate one-shot tier: each command launches a browser, navigates, runs one read/diagnostic action, prints the result, and exits. Stateful interactive flows (click→type→submit, multi-tab, live cookie/network manipulation) live in the MCP server (scout mcp serve) and chat UI (scout ui serve), which keep a session alive across actions.

CLI defaults to visible browser (--headless to hide):

bash
scout navigate <url>                  # page info as JSONscout observe <url>                   # structured observationscout markdown <url>                  # compact markdownscout readable <url>                  # main readable content (boilerplate stripped)scout accessibility <url>             # semantic accessibility treescout screenshot <url> [--output f]   # save screenshotscout pdf <url> [--output f]          # save PDFscout extract <url> <selector>        # extract textscout table <url> <selector>          # extract a table as structured rowsscout auto-extract <url>              # auto-detect dominant data patternscout eval <url> <expression>         # run JavaScriptscout form discover <url>             # discover form fieldsscout frameworks <url>                # detect frameworksscout 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 changesscout pipe <command> [selector]       # batch process URLs from stdinscout record <url> [--output f]       # interactive recording → playbookscout mcp serve                       # start MCP serverscout ui serve [flags]                # start chat UIscout version                         # print version

Architecture

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)

Security

Vulnerability scanning runs on every push and PR via nox. Findings are uploaded to GitHub code scanning, annotated inline on PRs, and gated against .nox/baseline.json so regressions block merges. The status badge in the header reflects the latest main-branch scan.

nox also drives dependency remediation in place of Dependabot — the Nox Remediate workflow runs weekly (Monday 06:00 UTC) and on demand, executing nox fix against fresh OSV.dev findings and opening a single PR with the verified upgrades.

bash
# Local scannox scan -severity-threshold high .
# Local fixnox fix -input findings.json

License

MIT

來源:README.md,提交 f45eb04

工具

0
SourceWeft 尚未在沙箱中啟動過該軟體包,因此其工具未知。

版本歷史

1
  1. v1.10.0最新Sep 16, 2026

評分

已滿足適用檢查項的 50%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分