Skip to main content
Glama
NikkeTryHard

fast-webfetch-mcp

by NikkeTryHard

fast-webfetch-mcp

MCP-сервер для получения веб-страниц, который рендерит страницы с помощью настоящего браузера, запущенного на вашей машине, а затем передаёт модели чистый Markdown вместо счёта за токены за 2 МБ JavaScript.

Здесь получение данных ничего не стоит: никаких API-ключей, никакой оплаты за страницу. А когда сайт заявляет, что блокирует вас, это часто просто скрипт обнаружения headless-браузера, который настоящий Chromium обходит без труда.

Как это работает

Две небольшие программы, одна задача:

MCP client (agent)
   │  JSON-RPC over stdio
   ▼
src/index.ts          Bun + MCP SDK — tool schemas, budgets, rendering
   │  spawns per request
   ▼
crawl4ai_worker.py    Python + Crawl4AI — headless Chromium, markdown extraction
   │
   ▼
The actual internet

TypeScript-сервер отвечает за политику: таймауты, разрешения на конкурентность, усечение вывода, опциональную суммаризацию на базе Gemini. Python-воркер отвечает за механику: жизненный цикл браузера, рендеринг, повторы. Ни один не знает работу другого, а контракт между ними — один JSON-документ на stdout.

Related MCP server: crawler-mcp

Установка

Требования: Bun, Python 3.12+ и не зависящее от GPU количество терпения на первую загрузку браузера.

git clone <this repo> ~/.local/share/mcp/fast-webfetch-mcp   # or anywhere
cd ~/.local/share/mcp/fast-webfetch-mcp
bun install
uv venv .venv --python 3.12 && uv pip install --python .venv/bin/python crawl4ai

Проверьте, что браузерная часть работает:

FAST_WEBFETCH_SMOKE_URL=https://example.com bun run src/index.ts

Вы должны увидеть Markdown для примера домена. Если вместо этого вы видите стек-трейс о браузерах Playwright, запустите crawl4ai-setup из виртуального окружения и попробуйте снова — он установит нужную сборку Chromium для вас.

Подключите его к своему агенту

{
  "mcpServers": {
    "fast-webfetch": {
      "type": "stdio",
      "command": "/usr/bin/mullvad-exclude",
      "args": ["/home/you/.bun/bin/bun", "run", "/path/to/fast-webfetch-mcp/src/index.ts"],
      "env": { "PATH": "/home/you/.bun/bin:/usr/bin:/bin" }
    }
  }
}

Обёртка mullvad-exclude необязательна; она просто позволяет трафику обходить VPN, чтобы сайты видели ваш реальный IP. Обычный "command": "bun" работает точно так же.

Инструменты

fast_fetch — один URL в Markdown

Аргумент

Тип

По умолчанию

Примечания

url

string

обязательно

prompt

string

Если задан, то обоснованный ответ вместо полной страницы

max_length

number

40,000

Усечение середины сохраняет начало и конец

full_content

boolean

false

Поднять лимит до 100 000 символов

timeout_ms

number

25,000

Жёсткий предел, включая рендеринг браузера

options

object

Параметры рендеринга для конкретного вызова, см. ниже

fast_fetch_raw — один URL в сырой HTML

Те же аргументы, кроме prompt. Используйте его, когда Markdown теряет то, что вам нужно: таблицы, data- атрибуты, мета-теги, точную разметку.

Объект options

Все три инструмента принимают необязательный объект options для сайтов, которым нужно больше, чем просто загрузка и захват:

{
  "url": "https://example.com/feed",
  "options": { "full_page": true, "wait_seconds": 1.5, "drop_overlays": true }
}

Ключ

Тип

Эффект

full_page

boolean

Прокручивает всю страницу перед извлечением — захватывает контент с ленивой загрузкой и бесконечной прокруткой. Медленнее; на бесконечных лентах прокручивается до таймаута

wait_seconds

number

Задержка перед захватом, например 1.5 для страниц, которые гидратируются поздно

iframes

boolean

Включает содержимое iframe в результат

drop_overlays

boolean

Удаляет баннеры cookie и модальные окна перед извлечением

Ошибочно набранные ключи молча отбрасываются, а не передаются дальше — полезная нагрузка options становится флагами CrawlerRunConfig на стороне Python.

fast_fetch_multiple — до 15 URL за один пакет

Аргумент

Тип

По умолчанию

Примечания

urls

string[]

обязательно

1–15 абсолютных http(s) URL

max_length

number

40,000

На каждый URL

full_content

boolean

false

На каждый URL

timeout_ms

number

25,000

Весь пакет, общий

options

object

Те же параметры, применяются к каждому URL

Каждый URL возвращается как отдельный раздел с заголовком метаданных (url, status, elapsed_ms, truncated). Один медленный сайт не может голодать остальные — он просто получает ошибку таймаута для конкретного элемента, пока его товарищи по пакету успешно завершаются.

Конфигурация

Всё необязательно, всё через переменные окружения.

Параметры сервера

Переменная

По умолчанию

Назначение

FAST_WEBFETCH_MAX_LENGTH

40000

Лимит символов на страницу по умолчанию

FAST_WEBFETCH_HARD_MAX_LENGTH

100000

Потолок для full_content

FAST_WEBFETCH_TIMEOUT_MS

25000

Таймаут получения по умолчанию

FAST_WEBFETCH_MULTIPLE_CONCURRENCY

12

Параллельные слоты браузера (макс. 32)

FAST_WEBFETCH_DISABLE_SUMMARY

не задано

1 полностью убирает поддержку prompt

FAST_WEBFETCH_PYTHON

<repo>/.venv/bin/python

Интерпретатор воркера

FAST_WEBFETCH_WORKER

<repo>/crawl4ai_worker.py

Путь к воркеру

GEMINI_API_KEY / GEMINI_API_KEY_FILE

Нужен только для суммаризации через prompt

Параметры браузера

Переменная

По умолчанию

Назначение

CRAWL4AI_STEALTH

вкл (1)

Патчи против обнаружения: флаг webdriver, плагины, WebGL vendor, Chrome API. Установите 0 для отключения

CRAWL4AI_PROXY_URL

выкл

Прокси для исходящего трафика

CRAWL4AI_WAIT_UNTIL

domcontentloaded

Стратегия ожидания Playwright

CRAWL4AI_SCAN_FULL_PAGE

выкл

Прокрутка перед извлечением — также доступно для каждого вызова как options.full_page

CRAWL4AI_DELAY_SECONDS

0

Время ожидания перед захватом HTML — также доступно для каждого вызова как options.wait_seconds

Поведение, о котором стоит знать

Сайты с большим количеством JS часто возвращают пустую оболочку при стратегии ожидания по умолчанию. Когда приходит 200 без содержимого, воркер повторяет попытку один раз с networkidle в том же бюджете таймаута — в худшем случае вы ждёте один раз, а не два. Ошибки соединения и HTTP-ошибки, тем временем, остаются с одной попыткой: повторение попытки для мёртвого хоста — это просто более медленный способ потерпеть неудачу.

fast_fetch и fast_fetch_multiple используют один и тот же пул из 12 слотов браузера, поэтому большой пакет не может голодать одновременный одиночный запрос. Спрос сверх пула ставится в очередь; пакет, запрашивающий больше слотов, чем существует, получает то, что свободно.

Наконец, max_length существует потому, что окно контекста вашего агента — это бюджет, а не свалка.

Когда что-то ломается, вы получаете путь к логу

Сбои делятся на две категории: нестабильность интернета (таймауты, медленные сайты, ошибки дедлайна для отдельных элементов пакета) и реальная поломка инструмента (воркер не запускается, воркер упал, переполнение stdout, неразбираемый вывод). Только вторая категория записывает лог — первая просто получает честный тег ошибки.

Сбой на стороне инструмента заканчивается так:

log: /path/to/fast-webfetch-mcp/logs/2026-08-22T09-02-06-780Z-fast_fetch.json

Внутри: инструмент, точные аргументы, входные данные воркера и полная запись сбоя (этап, код выхода, сигнал, хвост stderr) — достаточно для воспроизведения запроса дословно:

FAST_WEBFETCH_INPUT='{"url":"https://example.com","max_length":40000}' \
  .venv/bin/python crawl4ai_worker.py

Перенаправьте с помощью FAST_WEBFETCH_LOGS_DIR.

Оставаясь в пределах 30 секунд

Агентские обвязки обычно убивают вызовы MCP примерно на 30-й секунде, поэтому этот сервер считает 28 секунд жёсткой стеной. Каждый инструмент отвечает до неё: готовые результаты, если получение удалось, в противном случае структурированные ошибки по элементам, указывающие, какой этап съел время. Пакет, исчерпавший бюджет, всё равно возвращает завершённые элементы.

Устранение неполадок

Симптом

Вероятная причина и исправление

Crawl4AI worker missing

Репозиторий перемещён; проверьте, что FAST_WEBFETCH_WORKER указывает на crawl4ai_worker.py

Crawl4AI python missing

.venv отсутствует или неверный интерпретатор; установите FAST_WEBFETCH_PYTHON

Всё истекает по таймауту на одном сайте

Сайт действительно медленный или враждебный; попробуйте CRAWL4AI_STEALTH=1

Batch deadline exceeded для некоторых элементов

Ожидаемо: общий бюджет 25 секунд, отстающие получают ошибки по элементам

Пустой Markdown на SPA

Должно самовосстанавливаться через повтор; если нет, увеличьте CRAWL4AI_DELAY_SECONDS

Разработка

bun install
bun test            # 18 tests, no network needed
bun run typecheck   # tsc --noEmit, strict + noUncheckedIndexedAccess

Python-воркер можно запускать напрямую, что является самым быстрым способом отладить поведение получения без слоя MCP:

FAST_WEBFETCH_INPUT='{"url":"https://example.com","max_length":500}' \
  .venv/bin/python crawl4ai_worker.py

См. также

  • ddg-search — естественный фронтенд: ищет, затем передаёт URL результатов этому серверу

  • Crawl4AI — движок обхода под капотом

  • Model Context Protocol — сетевой протокол

Лицензия

MIT.

A
license - permissive license
Not graded
quality - not tested
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

  • A
    license
    A
    quality
    B
    maintenance
    MCP server that lets Claude Code fetch web content using real Chrome browsers. Renders JavaScript-heavy pages, handles bot mitigation, and runs up to 14 parallel browsers locally with zero API keys. Makes outbound HTTP requests only to URLs the user explicitly asks Claude to fetch.
    2
    14
    91
    MIT
  • F
    license
    A
    quality
    C
    maintenance
    Web-crawler MCP server that fetches web pages with static parsing or headless browser fallback, enabling Claude to fetch, extract links, crawl sites, and select content via CSS selectors.
    4
  • A
    license
    A
    quality
    C
    maintenance
    An MCP server that enables AI assistants to fetch web content in multiple formats (HTML, JSON, text, Markdown) with intelligent content extraction, chunk management, and browser automation support.
    5
    52
    15
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    An open-source web retrieval MCP server that fetches, crawls, and searches the web, returning clean markdown for AI agents. It integrates with Claude MCP, LangChain, and other frameworks for agentic web access.
    1
    MIT

View all related MCP servers

Related MCP Connectors

  • Zenrows MCP server — Fetch, Extract, Batch, and Browser Sessions for AI coding assistants

  • Firecrawl MCP — wraps the Firecrawl API (firecrawl.dev) for web

  • SEO MCP server: crawl your site, find AI-visibility gaps, and ship the fix from your coding agent.

View all MCP Connectors

Latest Blog Posts

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/NikkeTryHard/fast-webfetch-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server