browser-search-mcp: веб-поиск для ИИ-агентов через настоящий браузер, одной командой
MCP-сервер от AI Platforms: npx browser-search-mcp — и всё готово. Chromium-поиск по Google, Bing, Yahoo и DuckDuckGo, извлечение страниц через Playwright + trafilatura, deep research по нескольким запросам. Без API-ключей, с fallback и дедупликацией результатов.
Зачем агенту браузерный поиск, а не API-ключ
У многих LLM-клиентов либо нет доступа к сети, либо есть только один внешний search API, либо нужно заранее заводить ключи и конфиги. Для агентных сценариев этого недостаточно.
Когда агент исследует вопрос, ему нужно: быстро найти релевантные источники, сравнить выдачу нескольких поисковиков, убедиться что сниппет не устарел, и прочитать страницу целиком, когда это необходимо. Один search API не даёт такой гибкости. А ручная настройка Python, Playwright и Chromium — это часы работы.
browser-search-mcp решает это одной командой. npx browser-search-mcp — и у агента появляется MCP-эндпоинт с браузерным поиском, извлечением страниц и deep research. Пакет сам создаст Python venv, поставит зависимости и скачает Chromium.
Пакет доступен на npm: browser-search-mcp.
Ключевое отличие от поисковых API: модель ищет через реальные страницы выдачи, как человек в браузере, а не через JSON-ответ вендорского search endpoint. Это даёт: fallback между движками, дедупликацию ссылок, и тот же DOM, который видит пользователь.
Что даёт browser-search-mcp агенту
Мультидвижковый поиск
Google, Bing, Yahoo, DuckDuckGo. Режим auto пробует движки по очереди и добирает уникальные ссылки до нужного количества.
Извлечение страниц
extract_webpage для одной страницы, extract_webpages до 20 URL одновременно. Chromium + trafilatura/BeautifulSoup — читаемый текст.
Deep research за один раунд
Модель формулирует 1–10 запросов, сервер выполняет их и возвращает сгруппированные результаты — полноценный исследовательский цикл.
Одна команда — весь runtime
npx browser-search-mcp. Node-лаунчер создаёт изолированный Python venv, ставит зависимости, скачивает Chromium через Playwright.
Локально и приватно
Запросы и результаты проходят через вашу машину. Нет API-ключей, нет hosted search credentials. Идеально для локальных LLM.
Два протокола MCP + HTTP API
Streamable HTTP MCP (:8892/mcp), stdio режим (--stdio), плюс plain HTTP API (:8891) с Swagger UI для прямых вызовов.
Как устроен сервер: архитектура и трафик
Node.js лаунчер и Python runtime
Пакет npm — это только лаунчер. Он проверяет наличие Python 3.10+, создаёт ~/.browser-search-mcp с изолированным venv, устанавливает зависимости и запускает две службы:
- FastAPI search gateway на
127.0.0.1:8891— принимает поисковые запросы, запускает Chromium через Playwright, парсит DOM выдачи и возвращает title/URL/snippet. - Streamable HTTP MCP server на
127.0.0.1:8892/mcp— принимает MCP-запросы от клиента и проксирует их в search gateway.
Трафик поиска
MCP client ── Streamable HTTP ──► MCP server (:8892/mcp)
│
▼
Search API (:8891)
│
┌────────────────────┴────────────────────┐
▼ ▼
Chromium search pages Page fetch + extraction
Google / Bing / Yahoo / DDG Playwright + trafilatura
Chromium запускается в headless-режиме. DOM поисковой выдачи парсится в структурированные записи. Извлечение страниц использует Chromium для загрузки и trafilatura/BeautifulSoup для получения читаемого текста.
Конфигурация
Всё настраивается переменными окружения:
| Переменная | По умолчанию | Назначение |
|---|---|---|
| BROWSER_SEARCH_MCP_HOME | ~/.browser-search-mcp | Директория runtime |
| API_PORT | 8891 | Порт search gateway |
| MCP_PORT | 8892 | Порт MCP |
| SEARCH_API_TIMEOUT | 300 | Таймаут MCP → search API, сек |
Два режима MCP
Для HTTP-клиентов (Claude Desktop, llama.cpp Web UI, Codex):
http://127.0.0.1:8892/mcp
Для stdio-клиентов (локальный OpenCode):
{
"mcp": {
"browser-search-mcp": {
"type": "local",
"command": ["npx", "-y", "browser-search-mcp", "--stdio"],
"enabled": true,
"timeout": 1800000
}
}
}
Практический рабочий цикл агента с browser-search-mcp
Типовая последовательность: 1) web_search с точным запросом и engine=auto — первичное сканирование сниппетов; 2) при скудных результатах — повторный web_search с другим движком; 3) extract_webpage для официальной документации или ключевого источника; 4) финальный ответ с опорой на извлечённый текст. Для сложных тем — deep_research с 3–10 запросами за один раунд.
Инструменты и что они умеют
web_search
Один поисковый запрос — titles, URLs, snippets. Может сразу извлечь контент верхних результатов. Модель выбирает движок.
deep_research
Раунд исследования по 1–10 запросам. Сервер выполняет их все, группирует результаты — готовый материал для анализа.
extract_webpage
Извлечение читаемого текста одной страницы. URL известен — сервер загружает через Chromium и отдаёт чистый текст.
extract_webpages
Пакетное извлечение до 20 URL одновременно. Для сравнения источников, проверки фактов, сбора данных.
Дедупликация результатов
При engine=auto движки пробуются по очереди, уникальные ссылки накапливаются — без повторов.
Plain HTTP API
Прямой доступ к /api/search, /api/extract, /api/health, /api/tools, Swagger UI на /docs — для интеграций без MCP.
Сценарии и практическая польза
Агент-исследователь
Самый сильный сценарий. Агент получает задачу «сделай ресерч архитектур MCP-серверов», вызывает deep_research с запросами по разным углам темы, получает сгруппированные результаты из нескольких движков, затем extract_webpage для самых сильных источников — и выдаёт заключение, подкреплённое фактами.
Агент-верификатор
Модель отвечает на вопрос, но сомневается в факте. web_search с engine=auto, проверка нескольких источников, extract_webpage официальной документации — и ответ либо подтверждён, либо скорректирован.
On-premise LLM с выходом в интернет
Локальная модель в закрытом контуре (LM Studio, llama.cpp, Ollama) получает окно в интернет через этот сервер. Сама модель не знает сети. MCP-сервер на той же машине предоставляет поиск как инструмент.
Plain HTTP для кастомных интеграций
Если MCP-клиент не нужен, сервер отдаёт обычный HTTP API:
# Поиск
curl -X POST http://127.0.0.1:8891/api/search \
-H "Content-Type: application/json" \
-d '{"query":"vLLM vs SGLang benchmarking 2026","num_results":5,"engine":"auto"}'
# Извлечение страницы
curl -X POST http://127.0.0.1:8891/api/extract \
-H "Content-Type: application/json" \
-d '{"url":"https://docs.vllm.ai/en/latest/","max_length":4000}'
А также GET /api/search/simple?q=...&n=3&engine=duckduckgo, GET /api/tools (OpenAI-стиль), GET /api/tools/openrouter, и GET /docs для Swagger.
Совместимость с клиентами
Сервер работает со всеми MCP-клиентами, поддерживающими Streamable HTTP: Claude Desktop, Codex, Kilo, Cursor, llama.cpp Web UI. Для stdio-only клиентов — флаг --stdio.
Почему это важно для AI Platforms
Для нас этот проект — ещё один кирпичик в агентной экосистеме. ssh-chat-mcp даёт агенту руки на сервере. browser-search-mcp даёт агенту глаза в интернете. Вместе с приватной LLM и RAG это образует полноценный агентный стек, работающий из закрытого контура.
Инструменты сервера
| Инструмент | Что делает | Ключевые параметры |
|---|---|---|
| web_search | Один поисковый запрос | query, engine (auto/google/bing/yahoo/duckduckgo), num_results, extract_content, language |
| deep_research | Исследовательский раунд | queries (1–10), engine, num_results_per_query, language |
| extract_webpage | Извлечение одной страницы | url, max_length (по умолчанию 4000) |
| extract_webpages | Пакетное извлечение до 20 URL | urls, max_length (по умолчанию 12000) |
Строим агентную экосистему под ваш контур
browser-search-mcp, ssh-chat-mcp и другие наши MCP-инструменты — часть агентного стека AI Platforms. Если вам нужен ИИ-агент с поиском, доступом к серверам, RAG и приватной LLM — опишите задачу. Предложим архитектуру и план пилота.