Scout

io.github.klarlabs-studio由 GitHub 帳號 klarlabs-studio 發布v1.15.3更新於 Oct 24, 2026

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

概覽

AI 產生的概覽

Scout 是單一二進位檔的瀏覽器自動化 MCP 伺服器,讓 AI 助理操作真實瀏覽器進行導覽、點擊、填表、擷取內容與截圖。

可以做什麼
  • 導覽頁面並取得結構化觀察結果,包含 DOM 差異與受 token 預算限制的快照
  • 點擊、輸入、懸停、拖曳、選擇選項,並以語意方式填寫表單
  • 擷取文字、表格、Markdown、正文內容與無障礙樹
  • 擷取截圖、標註截圖、PDF 以及螢幕錄影影片
  • 檢查網路請求、主控台錯誤、Cookie、分頁、iframe 與偵測到的前端框架
  • 錄製並重播確定性的操作腳本,執行批次操作與追蹤
適用情境
適合需要助理真正操作網站而不只是閱讀的情境:填寫表單、變更後檢查頁面、擷取結構化內容,或驅動本機開發伺服器。也適合不想安裝 Node.js 或 Playwright 卻需要瀏覽器控制的使用者。
執行需求
以本機程序方式執行,透過 scout mcp serve 指令啟動;清單以容器映像形式提供,README 另列出 Homebrew、直接下載二進位檔與 Go 安裝方式。需要本機有可用的 Chrome 瀏覽器。MCP 伺服器本身未宣告 API 金鑰;選用的聊天介面需要 ANTHROPIC_API_KEY 或 OPENAI_API_KEY 等供應商金鑰。
安裝前請注意
助理可以操作真實網站:點擊、輸入、送出表單、設定 Cookie 與上傳檔案,因此需要留意核准。私有位址與回送位址預設被封鎖,可透過 configure(allow_private_ips) 或 SCOUT_ALLOW_PRIVATE_IPS 解鎖,這會擴大瀏覽器可觸及的範圍。唯讀工具被標註為無需權限提示即可執行。螢幕錄影與追蹤會將檔案寫入磁碟。

安裝

在 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.15.3最新Sep 16, 2026

評分

已滿足適用檢查項的 50%

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

  • 近 30 天內可連通25 分

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

  • 已宣告認證方式10 分

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

  • 已列出工具15 分

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

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