blowsh-mcp
blowsh-mcp
Сервер Model Context Protocol для терминального браузера с поддержкой JS на базе Browsh
Что такое blowsh-mcp?
blowsh-mcp — это сервер Model Context Protocol (MCP), который открывает возможности Browsh — полностью поддерживающего JavaScript терминального браузера — для любого AI-агента, IDE-агента или MCP-клиента. Этот проект позволяет вашему ИИ получать и отображать любые современные веб-страницы, в том числе требующие JavaScript, и получать результат в виде легко разбираемого обычного текста, HTML или Markdown.
Мнемоника: «blowsh» = MCP-сервер на базе Browsh.
Related MCP server: Crawlbase MCP
Ключевые возможности
Инструмент fetch_web: единый инструмент для извлечения читаемого обычного текста, HTML или Markdown (после полного рендеринга JS). Поддерживает извлечение по CSS
selector, ограничение выводаmax_charsи опросwait_msдля ожидания завершения JS.Инструмент search_web: поиск страниц через отрендеренную поисковую систему (DuckDuckGo HTML с запасным вариантом Bing) — ранжированные результаты с URL и сниппетами.
Инструмент extract_links: выводит список гиперссылок (текст + абсолютный URL) с любой JS-отрендеренной страницы для последующей навигации.
Инструмент fetch_web_batch: загрузка до 10 URL за один вызов с изоляцией ошибок по каждому URL.
Защита SSRF: отклоняет запросы к loopback, частным, link-local или зарезервированным адресам (с резолвингом DNS), защищая серверный браузер.
AI-оптимизированная документация инструментов: входные и выходные данные, а также иллюстрированные примеры использования, предназначенные для бесшовной автоматизации агентов. Инструменты генерируют структурированные ошибки с HTTP-статус кодами (
isErrorв ответах MCP).Надёжное управление Browsh: запускает Browsh один раз, поддерживает его работу, переиспользует лёгкий по RAM/CPU синглтон, корректно завершает работу при выходе.
Кэш рендеринга в памяти с TTL: повторные запросы обслуживаются мгновенно без повторного рендеринга.
Разработан для PaaS, облака, локальных AI-инструментов и IDE-агентов.
Ссылки
Browsh CLI Browser — Движок рендеринга.
Firefox — Требуется в качестве бэкенда для Browsh.
Model Context Protocol (MCP) Specification — Протокол взаимодействия агента и сервера.
Как это работает
AI/агент отправляет MCP-запрос:
fetch_web(один URL),search_web(запрос),extract_links(URL) илиfetch_web_batch(до 10 URL).blowsh-mcp запускает Browsh в режиме HTTP-сервера (при первом использовании) и переиспользует его для всех последующих вызовов.
blowsh-mcp запрашивает исходный вывод от Browsh, используя
X-Browsh-Raw-Mode: PLAIN(для текста),DOM(для HTML), или получает HTML и затем преобразует его в Markdown.Страница (после полного выполнения JS) возвращается как терминальный обычный текст, насыщенный HTML DOM или чистый Markdown — AI/агенты выбирают тип вывода в соответствии с дальнейшей обработкой.
Результаты кэшируются в памяти (TTL), поэтому повторные запросы выполняются мгновенно; каждый запрос проверяется на SSRF перед отправкой в браузер.
Быстрый старт (Docker — готовый образ)
Образ публикуется в GitHub Container Registry и автоматически пересобирается при каждом пуше в main через GitHub Actions — не требуется устанавливать Firefox/Browsh/html2markdown на хосте:
docker pull ghcr.io/mokhtarabadi/blowsh-mcp:latest
docker run --rm -i ghcr.io/mokhtarabadi/blowsh-mcp:latestФлаг
-iобязателен: MCP-сервер общается по JSON-RPC через stdin/stdout. Оставьте его интерактивным и передавайте запросы через конвейер или укажите ваш MCP-клиент на него (см. Конфигурация AI-клиента ниже).
Пример использования
Из Claude, Cursor или любого MCP-совместимого агента:
{
"tool": "search_web",
"params": { "query": "bitcoin price today", "max_results": 5 }
}
// → Ranked results with URLs + snippets → feed top URL to fetch_web
{
"tool": "fetch_web",
"params": { "url": "https://coindesk.com/price/bitcoin/", "type": "plain" }
}
// → Returns readable plain text (live price as text table, etc)
{
"tool": "fetch_web",
"params": { "url": "https://coindesk.com/price/bitcoin/", "type": "markdown", "selector": "main", "wait_ms": 3000 }
}
// → Markdown of <main> only, after JS settles ("# Bitcoin Price\n\n| Time | Price | ...")
{
"tool": "extract_links",
"params": { "url": "https://example.com", "limit": 20 }
}
// → [{"text": "Learn more", "url": "https://iana.org/domains/example"}, ...]
{
"tool": "fetch_web_batch",
"params": { "urls": ["https://a.com", "https://b.com"], "type": "markdown" }
}
// → Per-URL results; a failing page never fails the batchAI получает:
С
type: plain: чистый читаемый текст (таблицы, списки, основное содержимое; идеально для NLP/суммаризации или приёма в терминал).С
type: html: полная HTML-разметка после выполнения всего JavaScript. Используйте для разбора элементов, построения графа ссылок, сложного скрейпинга и т.д.С
type: markdown: чистая Markdown-версия — лучше всего подходит для контекстных блоков LLM, семантических конвейеров и AI-ориентированного потребления/рабочих процессов.Ошибки структурированы: MCP-ответы устанавливают
isError: trueс сообщениемFetchError, включающим HTTP-статус, когда он доступен.
Структура проекта
src/server.ts— MCP-сервер, предоставляющий инструменты.src/browshManager.ts— Запуск, мониторинг и завершение Browsh.src/tools/fetchWeb.ts— Реализация инструмента fetchWeb (plain, html, markdown; selector/max_chars/wait_ms).src/tools/searchWeb.ts— search_web (парсер DuckDuckGo HTML + запасной вариант Bing).src/tools/extractLinks.ts— extract_links (гиперссылки из отрендеренного DOM).src/tools/fetchWebBatch.ts— fetch_web_batch (несколько URL, изоляция ошибок по каждому URL).src/tools/html2markdownManager.ts— Обёртка для CLI html2markdown.src/ssrf.ts— Защита SSRF (блокирует частные/loopback/зарезервированные цели).src/cache.ts— Кэш рендеринга в памяти с TTL.src/extract.ts— Извлечение основного содержимого, вспомогательные функции для selector, усечение.src/errors.ts—FetchError+ форматирование сообщений.README.md— Этот файл.Dockerfile— Многоступенчатый контейнер (собирает TS, включает Firefox, Browsh, html2markdown)..github/workflows/docker-publish.yml— CI/CD: собирает и публикует образ в ghcr.io при пушах вmain/v*..env— Переопределения конфигурации. Все опции см. в.env.example.
Установка
Требования:
Node.js >= 20.18
Firefox установлен и доступен в PATH
Browsh CLI установлен и доступен в PATH
html2markdown CLI установлен и доступен в PATH
На Debian/Ubuntu установите с помощью:
wget -O /tmp/html2markdown.deb "https://github.com/JohannesKaufmann/html-to-markdown/releases/download/v2.5.2/html2markdown_2.5.2_linux_amd64.deb" sudo apt-get install -y /tmp/html2markdown.deb rm /tmp/html2markdown.debИли используйте готовый бинарный файл для вашей ОС со страницы релизов.
Предпочитаете Docker? Полностью пропустите установку на хосте — многоступенчатый образ включает Firefox, Browsh и html2markdown. Самый быстрый путь — опубликованный образ (
ghcr.io/mokhtarabadi/blowsh-mcp:latest, см. Быстрый старт); чтобы собрать его самостоятельно:docker build -t blowsh-mcp:latest . docker run --rm -i blowsh-mcp:latest
git clone https://github.com/mokhtarabadi/blowsh-mcp.git
cd blowsh-mcp
npm install
npm run buildЗапуск MCP-сервера
После сборки запустите сервер, используя:
node dist/server.jsЗамените dist/server.js на правильный путь, если вывод вашей сборки отличается.
При необходимости создайте файл .env для конфигурации. Например:
MCP_TRANSPORT=stdio
BROWSH_FIREFOX_PATH=/usr/bin/firefox-esr
HTML2MARKDOWN_PATH=html2markdown
CACHE_TTL_MS=300000
BROWSH_REQUEST_TIMEOUT_MS=30000
ALLOW_PRIVATE_URLS=false
NODE_ENV=productionBROWSH_FIREFOX_PATHпозволяет настроить исполняемый файл Firefox, используемый Browsh во время headless/HTTP-работы.HTML2MARKDOWN_PATHпозволяет указать свой путь к бинарному файлу html2markdown (по умолчанию:html2markdownв PATH).CACHE_TTL_MS,BROWSH_REQUEST_TIMEOUT_MSиALLOW_PRIVATE_URLSнастраивают соответственно кэш рендеринга, тайм-аут запроса и защиту SSRF.HTTP-порт/хост Browsh не настраиваются.
Документация проекта
Файл | Аудитория | Назначение |
| Агенты | Правила работы, ограничения, жизненный цикл задач |
| Все | Язык дизайна ответов/вывода MCP |
| Разработчики | Обзор системы, соединение компонентов |
| Разработчики | Схемы ввода/вывода инструментов и модель ошибок |
| Разработчики | Стандарт DateTime, рекомендации SOLID |
| Все | История версий (Keep a Changelog) |
| Команда | Файлы задач Kanban (backlog → archive) |
Этот README — пользовательская точка входа; правила для агентов находятся в AGENTS.md и обязательны к прочтению перед любой реализацией.
API инструментов
Имя | Параметры | AI Вариант использования/Описание |
fetch_web |
| Загружает одну страницу после JS-рендеринга как текст/HTML/Markdown. |
search_web |
| Выполняет поиск в Интернете (DuckDuckGo HTML + Bing, рендеринг параллельно) и возвращает |
extract_links |
| Возвращает все гиперссылки ( |
fetch_web_batch |
| Загружает до 10 URL за один вызов (с учётом кэша). Возвращает по каждому URL |
Возвращает
type: plain: терминальный, выполненный через JS читаемый текст (или строка ошибки).type: html: строка HTML-разметки после JS (или строка ошибки). Сselector— только HTML соответствующего элемента.type: markdown: преобразование основного содержимого или выбранного элемента в Markdown (или строка ошибки). Ссылки, заголовки, списки и структура страницы сохраняются для AI-ориентированного контекста.type: pdf: извлечённый обычный текст из PDF-документа (через pdftotext, лимит 20 МБ).Ошибки структурированы: MCP-ответ с
isError: trueи сообщениемFetchError, включающим HTTP-статус, когда он известен (никогда не бывает молчаливой пустой строки).
Переменные окружения
Задайте их через .env (загружается автоматически) или через окружение:
Переменная | По умолчанию | Описание |
|
| Бинарный файл Firefox, используемый Browsh (например, |
|
| Путь к бинарному файлу html2markdown. |
|
| Таймаут запроса на рендеринг (мс). |
|
| Максимальный размер PDF-файла в байтах для |
|
| Количество запросов, после которого процесс браузера перезапускается. |
|
| Время простоя в мс до завершения процесса браузера (10 мин). |
|
| TTL кэша рендеринга в памяти (мс). |
|
| Установите |
|
| Тип транспорта (реализован только |
|
| Среда Node.js. |
Выбор инструментов с помощью ИИ
Начните с
search_web: Чтобы обнаружить страницы, выполните запрос и выберите лучшие URL-адреса результатов; затем загрузите их.Используйте
fetch_webдля отдельных страниц:plain— когда нужен быстрый читаемый вывод для суммаризации/классификации;html— для разбора элементов, ссылок или таблиц;markdown— для удобных для LLM фрагментов контекста. Добавляйтеselector/max_chars/wait_ms, чтобы экономить токены и получать стабильный релевантный контент.Используйте
extract_linksперед глубоким обходом: Следуйте по навигации без лишних затрат, вместо загрузки полных DOM-деревьев.Используйте
fetch_web_batchдля нескольких источников: Один вызов вместо N обращений; сбои изолированы для каждого URL.
Обработка ошибок:
Инструменты выбрасывают FetchError, а MCP возвращает isError: true с практическим сообщением — недопустимые протоколы, блокировки SSRF, несовпадающие селекторы, коды состояния HTTP и ошибки рендеринга никогда не остаются незамеченными.
Протокол MCP: настройка ИИ-клиента
Перед настройкой вашего ИИ-клиента (Claude, Cursor и т.д.) необходимо
Установить зависимости:
npm installСобрать проект:
npm run buildЗапустить MCP-сервер из скомпилированного вывода:
node dist/server.js
Пример конфигурации для Claude Desktop или Cursor:
{
"mcpServers": {
"blowsh": {
"command": "node",
"args": ["dist/server.js"],
"env": {}
}
}
}Пример конфигурации для opencode (файл проекта opencode.json):
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"blowsh": {
"type": "local",
"command": ["docker", "run", "--rm", "-i", "ghcr.io/mokhtarabadi/blowsh-mcp:latest"],
"enabled": true,
"timeout": 120000
}
},
"permission": { "blowsh_*": "allow" }
}Docker-вариант не требует бинарных файлов на хосте; образ включает Firefox, Browsh и html2markdown. Перезапустите opencode после сохранения (конфигурация загружается один раз при запуске).
Плавное завершение работы
blowsh-mcp перехватывает SIGINT/SIGTERM и гарантирует чистое завершение Browsh — без осиротевших процессов браузера.
Безопасность и рекомендации
Сервер запускает Browsh локально и выполняет запросы через HTTP localhost.
Защита SSRF: По умолчанию
fetch_web/search_web/extract_links/fetch_web_batchотказываются от URL-адресов, которые разрешаются в loopback, частные, link-local или зарезервированные IP-диапазоны (проверяется через DNS). УстановитеALLOW_PRIVATE_URLS=true, чтобы отключить — не рекомендуется.Нет публичного доступа, если явно не настроен MCP HTTP/streamable сервер.
Никогда не открывайте порты в открытый веб без межсетевого экрана.
Используйте переменные окружения для секретов/конфигурации.
Расширение
Добавляйте новые инструменты в src/tools/, экспортируйте их в src/server.ts и документируйте.
ИИ-клиенты автоматически найдут docstrings.
Устранение неполадок
Если fetchPlain возвращает 404 или не удаётся отрендерить JS: проверьте, что Firefox и Browsh установлены и находятся в PATH.
Если Firefox не найден или не запускается, установите
BROWSH_FIREFOX_PATHв.env, указав полный путь до вашей установки Firefox.Порт/хост Browsh фиксированы — нет ни переменной окружения, ни параметра CLI для их изменения.
Для максимальной безопасности запускайте в контейнере.
Лицензия
MIT
Автор: Mohammad Reza Mokhtarabadi mmokhtarabadi@gmail.com
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Tools
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceA server that enables AI systems to browse, retrieve content from, and interact with web pages through the Model Context Protocol.1

Crawlbase MCPofficial
AlicenseAqualityDmaintenanceA Model Context Protocol server that enables AI agents to fetch live web content with JavaScript rendering, proxy rotation, and anti-bot evasion.93755MIT- AlicenseNot gradedqualityDmaintenanceEnables AI agents to automate web tasks such as browsing, clicking, typing, and taking screenshots via the Model Context Protocol.1MIT

Browseagent MCPofficial
AlicenseAqualityDmaintenanceEnables AI agents to control web browsers through the Model Context Protocol, supporting navigation, clicking, typing, and screenshots.12101MIT
Related MCP Connectors
Web scraping for AI agents. Converts URLs to clean, LLM-ready Markdown with anti-bot bypass.
Read a URL as clean markdown, screenshot a website, url to PDF. Web access for agents, no signup.
Read any web page as clean Markdown for AI agents: fetch, search, metadata, links. SSRF-safe.
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/mokhtarabadi/blowsh-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server