SlimAtlas AI
功能特性
浏览器自动化:导航、点击、输入、填写表单以及执行 JavaScript
默认轻量:内存占用约为 Chromium 的 1/5,快照体积比原始 HTML 小约 25 倍
页面快照:生成紧凑的 YAML 无障碍树快照,带有唯一节点 ID,便于精确定位元素
针对 LLM 优化的上下文:快照仅保留语义核心内容,大幅降低上下文占用,让您能在相同的窗口内处理更多页面和更长的会话
可配置的回退浏览器:双层模型——优先使用轻量浏览器,仅在默认浏览器被检测为机器人、崩溃或超时时,才升级到 有头 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 次),全部在 Docker 中运行。
测试设置:每个服务作为 MCP 服务器运行在自己的 Docker 容器中。基准测试工具通过 langchain-mcp-adapters 测量每次工具调用的延迟(导航 + 快照),并通过 Docker stats API 捕获容器内存。快照令牌数按约 4 字符/令牌估算(与原始 HTML 基线采用相同方法)。
指标(中位数) | SlimAtlas | Playwright 无头 | Playwright 有头 |
导航 + 快照(毫秒) | 1,383 | 1,116 | 687 |
容器内存(MB) | 124 | 635 | 815 |
快照令牌数 | 414 | 940 | 1,843 |
SlimAtlas 以导航速度换取显著更低的内存占用。Chrome 在页面加载方面更快,但内存占用高出 5–6 倍,每个快照产生的令牌数多出 2–4 倍——这两项正是代理大规模运行时的主要成本。
结果
安装
需要 Bun ≥1.1。
# Install dependencies
bun install浏览器二进制文件会在首次运行时自动下载。
回退浏览器:第 1 层始终是轻量浏览器。第 2 层由 FALLBACK_BROWSER 决定——可选值为 headful(有头 Chrome)、browserbase(云浏览器)、browserless(云浏览器)或 none(默认,无回退)。当默认浏览器崩溃、超时或被检测为机器人时,会话会切换到配置的回退浏览器。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=8080SlimAtlas 暴露一个单一的 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:headfulXvfb 会在第一个需要升级到有头 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。
回退浏览器
| 第 2 层浏览器 | 说明 |
| — | 仅使用轻量浏览器;错误如实传递 |
| 有头 Chrome | 在 macOS 上显示真实窗口;在无头 Linux 上需要 |
| Browserbase 云 | 需要 |
使用 SKIP_LIGHTPANDA_DOMAINS 跳过已知高难度域名的默认浏览器(逗号分隔,支持子域名匹配)。匹配的主机将直接在回退浏览器上启动。需要 FALLBACK_BROWSER != none(否则该列表将被忽略并发出警告)。
速率限制
为您的代理提供礼貌、防检测的节奏控制。RateLimiter 在服务器范围内对您列出的域名强制执行 browser_navigate 调用之间的最小延迟,并支持可选的随机抖动,使调用节奏不是固定的、可被指纹识别的间隔。限流桶按主机维度在所有会话之间共享(因为目标站点看到的是您的 IP,而不是您的会话),模式支持通配符:
模式 | 匹配范围 | 限流桶 |
| 所有主机 | 每个主机独立限流 |
| 仅子域名( | 所有匹配的子域名共享一个限流桶 |
|
| 主域名 + 子域名共享一个限流桶 |
默认禁用。通过设置非空域名列表且非零延迟来启用:
# 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"})可用工具
Tool | Description | Value |
| 使用可配置的等待策略导航到 URL | 所有 Web 交互的入口点。支持 |
| 获取带有唯一节点 ID 的 YAML 可访问性树 | 结构化的页面表示,非常适合 LLM 理解。节点 ID 可实现点击/输入的精确目标定位 |
| 按 ID 查看特定节点内容(文本或图像) | 无需完整重读页面即可检查单个元素。以 base64 形式返回图像,用于视觉验证 |
| 按节点 ID 或 CSS 选择器点击元素 | 建议使用(来自快照的)节点 ID 而非 CSS 选择器,以提高可靠性和简单性 |
| 向元素输入文本,可设置按键延迟 | 模拟人类输入。用于搜索框、表单和文本输入 |
| 立即用值填充输入元素 | 对于表单字段,比 |
| 在浏览器历史记录中向后导航 | 对于多步骤工作流和纠正导航错误至关重要 |
| 在浏览器历史记录中向前导航 | 与 |
| 重新加载当前页面 | 刷新动态内容或从过期的页面状态中恢复 |
| 获取当前页面的 URL 和标题 | 快速验证导航成功和当前上下文的简便方法 |
| 关闭浏览器会话并释放资源 | 对清理很重要。会话会在超时后自动关闭,但建议显式关闭 |
运行测试
# Run all tests
bun test
# Run tests in watch mode
bun test --watch要求
Bun ≥1.1
Linux 或 macOS(自动下载)或 Chrome/Chromium(备用)
许可证
MIT
This server cannot be deployed
Maintenance
Related MCP Connectors
MCP server for Mint — AI-powered QA that runs your app in a real browser on every PR.
Live browser debugging for AI assistants — DOM, console, network via MCP.
MCP server for visual regression testing: triage a PR's UI diffs from your coding agent.
MCP server for Firecrawl — web search, scraping, and biomedical/arXiv paper search.
Related MCP Servers
- AlicenseAqualityCmaintenanceMCP server for browser automation that lets LLMs interact with web pages through structured accessibility snapshots, bypassing the need for screenshots.236,403,349 npmApache 2.0
- AlicenseAqualityDmaintenanceA Playwright-powered MCP server for browser automation using ARIA snapshots and element refs, enabling LLMs to control Chrome/Edge without CSS selectors.416 npmMIT
- AlicenseNot gradedqualityAmaintenanceAn MCP server that lets LLM agents control all Chrome browser tabs via accessibility snapshots, element references, and a virtual cursor, supporting operations like click, type, navigate, screenshot, and video recording.MIT
- FlicenseNot gradedqualityCmaintenanceAn MCP server that provides browser automation using Playwright, enabling LLMs to interact with web pages through structured accessibility snapshots.-