SlimAtlas AI
Возможности
Автоматизация браузера: навигация, клики, ввод текста, заполнение форм и выполнение JavaScript
Лёгкость по умолчанию: ~в 5 раз меньше памяти, чем Chromium, ~в 25 раз меньше снимков, чем сырой HTML
Снимки страниц: компактные YAML-снимки дерева доступности с уникальными ID узлов для точного нацеливания на элементы
Оптимизированный под LLM контекст: снимки урезаны до семантически необходимого, что сохраняет крошечный расход контекста — вы можете уместить больше страниц и более длинные сессии в то же окно
Настраиваемый резервный браузер: двухуровневая модель — сначала лёгкий браузер, затем переход на headful Chrome, Browserless или Browserbase облачные браузеры только когда браузер по умолчанию обнаружен как бот, падает или истекает по таймауту.
Ограничение частоты запросов: оставайтесь незаметными. Принудительная настраиваемая минимальная задержка между запросами к определённым доменам с шаблонами подстановки (
*,*.reddit.com) плюс опциональный джиттер, чтобы ваш агент работал в своём темпе, а не долбил сайт и не срабатывал его защиту от ботов.Поддержка прокси: маршрутизация каждого запроса через HTTP-прокси одной настройкой
PROXY_SERVER— применяется автоматически к обоим браузерным уровням, так что ваш реальный IP никогда не касается цели. Поддерживается встроенная базовая аутентификация (http://user:pass@host:port).Надёжное управление сессиями: посессионная сериализация, опциональный лимит сессий (
MAX_SESSIONS), восстановление после сбоя в середине сессии с повторным воспроизведением истории и корректное завершение работы.Управление сессиями: повторное использование сессий для нескольких операций с уникальными ID сессий
Кроссплатформенность: работает на Linux и macOS, с настраиваемым резервным реальным браузером при необходимости
Related MCP server: opencode-browser-control
Бенчмарк
SlimAtlas был протестирован против Playwright MCP (headless и headful Chromium) с использованием slim-atlas-bench — 25 реальных сайтов в 5 категориях, по 3 прогона каждый (всего 225), всё запускалось в Docker на localhost.
Настройка: каждый сервис работает как MCP-сервер в собственном Docker-контейнере. Тестовый стенд измеряет задержку на вызов инструмента (навигация + снимок) через langchain-mcp-adapters и фиксирует RAM контейнера через Docker stats API. Снимки оцениваются в токенах при ~4 символа/токен (та же методология, что и для базовой линии сырого HTML).
Метрика (медиана) | SlimAtlas | Playwright Headless | Playwright Headful |
Навигация + снимок (мс) | 1,383 | 1,116 | 687 |
RAM контейнера (МБ) | 124 | 635 | 815 |
Токены снимка | 414 | 940 | 1,843 |
SlimAtlas обменивает скорость навигации на радикально меньшее потребление ресурсов. Chromium быстрее загружает страницы, но использует в 5–6 раз больше RAM и производит в 2–4 раза больше токенов на снимок — две затраты, которые доминируют в масштабе в агентных рабочих процессах.
Результаты
Установка
Требуется Bun ≥1.1.
# Install dependencies
bun installБинарник браузера загружается автоматически при первом запуске.
Резервный браузер: уровень 1 — всегда лёгкий браузер. Уровень 2 — FALLBACK_BROWSER — одно из значений: headful (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 (Mac на M-чипах): передайте
--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
Вариант с headful-резервом. Образ по умолчанию запускает только Lightpanda (FALLBACK_BROWSER=none). Чтобы включить резерв headful Chrome (нужен только если вы устанавливаете FALLBACK_BROWSER=headful во время выполнения), соберите headful-вариант — он добавляет библиотеки времени выполнения Chrome + Xvfb (~150МБ) и предустанавливает 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 запускается лениво внутри контейнера при первой сессии, которая переходит на headful Chrome — никакого entrypoint или ручного 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, чтобы включить резерв реального браузера.
См. docs/configs.md для всех переменных окружения и CLI-флагов.
Резервный браузер
| Браузер уровня 2 | Примечания |
| — | Только лёгкий браузер; ошибки распространяются честно |
| Headful Chrome | Реальное окно на macOS; требует |
| Browserbase cloud | Требует |
Пропустите браузер по умолчанию для заведомо сложных доменов с помощью SKIP_LIGHTPANDA_DOMAINS (через запятую, с учётом поддоменов). Совпавшие хосты стартуют сразу на резервном браузере. Требует FALLBACK_BROWSER != none (иначе список игнорируется с предупреждением).
Ограничение частоты запросов
Вежливый, антидетекционный темп для вашего агента. RateLimiter обеспечивает серверную минимальную задержку между вызовами browser_navigate к перечисленным вами доменам, с опциональным случайным джиттером, чтобы ритм не был фиксированным, идентифицируемым интервалом. Вёдра ключуются по хосту для всех сессий (потому что целевой сайт видит ваш IP, а не ваши сессии), и шаблоны поддерживают подстановочные символы:
Шаблон | Совпадения | Ведро |
| Каждый хост | Каждый хост ограничивается независимо |
| Только поддомены ( | Все совпавшие поддомены делят одно ведро |
|
| Apex + поддомены делят одно ведро |
Отключено по умолчанию. Включите непустым списком доменов и ненулевой задержкой:
# 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-allowlist (без учётных данных) всё просто работает на обоих уровнях. (Постраничная аутентификация Chrome через page.authenticate — в планах.)
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 | Описание | Значение |
| Переход на URL с настраиваемой стратегией ожидания | Точка входа для всех веб-взаимодействий. Поддерживает |
| Получить YAML-дерево доступности с уникальными ID узлов | Структурированное представление страницы, идеальное для понимания 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 installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseAqualityCmaintenanceMCP server for browser automation that lets LLMs interact with web pages through structured accessibility snapshots, bypassing the need for screenshots.235,808,831Apache 2.0
- AlicenseAqualityCmaintenanceA Playwright-powered MCP server for browser automation using ARIA snapshots and element refs, enabling LLMs to control Chrome/Edge without CSS selectors.422MIT
- 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.
Related MCP Connectors
Live browser debugging for AI assistants — DOM, console, network via MCP.
Screenshot, diff, audit and sitemap-capture any web page — 5 MCP tools for AI agents.
MCP server for AI dialogue using various LLM models via AceDataCloud
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/hasindu-madushan/slim-atlas-ai'
If you have feedback or need assistance with the MCP directory API, please join our Discord server