mcpField
S
Scout

Scout

本地服务
github.com/klarlabs-studio浏览器自动化149 周前更新

关于 Scout

Scout 是以 Go 编写的浏览器自动化工具,提供 CLI、MCP 服务、聊天界面和 Go 库,面向 Agent 与开发者。它通过 CDP 控制浏览器,并提供 DOM 差异提取、视觉辅助及录制回放等能力。

主要功能

  1. 01导航、点击、表单与标签页操作
  2. 02提取页面文本、表格和无障碍树
  3. 03DOM 差异与预算控制观察
  4. 04截图、PDF 与屏幕录制
  5. 05录制并回放操作剧本
  6. 06CLI、MCP 服务、聊天 UI 和 Go 库

适用场景

  1. 01让 Agent 浏览并操作网页
  2. 02提取网页正文或表格数据
  3. 03录制跨页面演示视频
  4. 04将浏览器自动化嵌入 Go 程序

MCP 相关

运行 `scout mcp serve` 可启动内置 MCP 服务,将浏览器导航、交互、提取、截图等工具提供给 MCP 客户端。工具带有只读等注解,可供客户端用于权限判断。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"klarlabs-studio-scout": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/klarlabs-studio/scout:1.15.3"
]
}
}
}
启动命令docker run -i --rm ghcr.io/klarlabs-studio/scout:1.15.3

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
ocighcr.io/klarlabs-studio/scout:1.15.3

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

Scout

Scout

浏览器自动化,一个二进制文件即可。 Playwright 的更简便替代方案——无需 Node、无需 Python、无需运行时。通过 Go、任意 shell、任意 AI Agent(内置 MCP 服务),或聊天界面来驱动真实浏览器。

Release License CI Go Reference Coverage Security (nox)

一个静态链接的 scout 二进制文件,提供 CLI、包含 87 个工具的 MCP 服务(让任何支持 MCP 的 Agent——Claude Desktop、Cursor、Cline 或自定义 Agent——都能使用浏览器)、对话式聊天界面,以及采用类似 Gin 中间件组合方式的 Go 库。同一引擎,四种使用方式。

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

与 Playwright 对比

ScoutPlaywright
安装一个约 15 MB 的二进制文件npm + 约 600 MB 的浏览器缓存
运行时依赖无(静态链接)始终需要 Node.js;Python/Java/.NET 以封装器形式提供
驱动方式Go、任意 shell、MCP、聊天界面优先支持 TS/JS;其他语言支持滞后
原生支持 AI Agent内置 scout mcp serve独立的 playwright-mcp 项目
感知 Token 的提取DOM 差异、提炼、观测预算(减少 50–80% 的 Token)未提供
操作手册记录并重放确定性的 JSON代码生成会产出需要维护的脚本
容器部署放入 scratch 或 distroless 即可需携带 Node 和浏览器二进制文件
CDP 访问直接使用 WebSocket,无抽象层通过 CDP 使用内部协议

快速开始

# 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 的 Agent 都能使用浏览器。无需安装第二个项目,无需 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,录制不会中断,因此多页面演示也能生成一段连续视频:

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 }

如果 PATH 中有 ffmpeg,结果将编码为 WebM(libvpx-vp9)或 MP4(libx264)。如果没有,scout 会返回原始 JPEG 帧目录和 ffmpeg concat 列表,供你离线编码。结果始终是文件路径,而不是 base64——不会占用大模型的令牌预算。

实际帧率:典型页面约为 10–15 FPS,最高限制为 30 FPS。实现方式是轮询 Page.captureScreenshot(在 --headless=new Chrome 下,CDP Page.startScreencast 事件会被静默丢弃)。

浏览器 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 服务端负责处理 Agent 工作循环:大模型决定调用哪些 scout 工具,执行这些工具,并将浏览器状态增量流式传回前端。支持通过 --base-url 使用任何兼容 OpenAI 的端点。

Agent 包(Go)

面向希望在程序中嵌入 scout 的调用方的高级 Go API。提供结构化输出、自动等待,并支持 goroutine 安全。大多数用户通过上文所述的 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(10 项补丁:webdriver、plugins、WebGL 等)
网络BlockResources、WaitNetworkIdle
实用工具ScreenshotOnError、SlowMotion、Viewport

CLI

CLI 有意设计为单次执行层:每条命令都会启动浏览器、导航、执行一次读取或诊断操作、打印结果,然后退出。 有状态的交互流程(点击→输入→提交、多标签页、实时 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)

安全

每次推送和 PR 都会通过 nox 运行漏洞扫描。扫描结果会上传至 GitHub 代码扫描,在 PR 中以内联注释标出,并与 .nox/baseline.json 进行比对,以阻止存在回归的合并。页眉中的状态徽章反映最新的主分支扫描结果。

nox 还用于替代 Dependabot 修复依赖问题——Nox Remediate 工作流每周运行一次(星期一 06:00 UTC),也可按需运行;它会根据最新的 OSV.dev 扫描结果执行 nox fix,并创建一个包含已验证升级项的 PR。

# Local scan
nox scan -severity-threshold high .

# Local fix
nox fix -input findings.json

许可证

MIT

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。