Skip to main content
Glama
NikkeTryHard

fast-webfetch-mcp

by NikkeTryHard

fast-webfetch-mcp

Un servidor MCP de captura web que renderiza páginas con un navegador real que se ejecuta en tu propia máquina y luego entrega al modelo Markdown limpio en lugar de una factura de tokens por 2 MB de JavaScript.

Capturar aquí no cuesta nada: sin claves de API, sin precios por página. Y cuando un sitio afirma bloquearte, a menudo es solo un script de detección de headless que un Chromium real atraviesa sin problema.

Cómo funciona

Dos programas pequeños, un solo trabajo:

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

El servidor TypeScript controla la política: tiempos de espera, permisos de concurrencia, truncamiento de salida, resumen opcional impulsado por Gemini. El worker Python controla la mecánica: ciclo de vida del navegador, renderizado, reintentos. Ninguno conoce el trabajo del otro, y el contrato entre ellos es un documento JSON en stdout.

Related MCP server: crawler-mcp

Instalación

Requisitos: Bun, Python 3.12+ y una cantidad de paciencia independiente de la GPU para la primera descarga del navegador.

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

Verifica que el lado del navegador funciona:

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

Deberías ver Markdown para el dominio de ejemplo. Si en su lugar ves un stack trace sobre los navegadores de Playwright, ejecuta crawl4ai-setup desde el venv e inténtalo de nuevo: instala la compilación correcta de Chromium para ti.

Conéctalo a tu agente

{
  "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" }
    }
  }
}

El envoltorio mullvad-exclude es opcional; solo permite que el tráfico de captura evite una VPN para que los sitios vean tu IP real. Un simple "command": "bun" funciona de manera idéntica.

Herramientas

fast_fetch — una URL a Markdown

Argumento

Tipo

Predeterminado

Notas

url

string

requerido

prompt

string

Si se establece, una respuesta fundamentada en lugar de la página completa

max_length

number

40,000

El truncamiento medio conserva cabeza y cola

full_content

boolean

false

Eleva el límite a 100,000 caracteres

timeout_ms

number

25,000

Límite máximo, incluye el renderizado del navegador

options

object

Ajustes de renderizado por llamada, ver más abajo

fast_fetch_raw — una URL a HTML crudo

Mismos argumentos menos prompt. Úsalo cuando Markdown pierde lo que necesitas: tablas, atributos data-, metaetiquetas, marcado exacto.

El objeto options

Las tres herramientas aceptan un objeto options opcional para sitios que necesitan más que una simple carga y captura:

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

Clave

Tipo

Efecto

full_page

boolean

Desplaza toda la página antes de la extracción: captura contenido de carga diferida y scroll infinito. Más lento; en feeds interminables se desplaza hasta el tiempo de espera

wait_seconds

number

Retraso de asentamiento antes de la captura, p. ej. 1.5 para páginas que hidratan tarde

iframes

boolean

Incluye el contenido de iframes en el resultado

drop_overlays

boolean

Elimina banners de cookies y modales antes de la extracción

Las claves mal escritas se descartan silenciosamente en lugar de pasarse: la carga útil de opciones se convierte en banderas de CrawlerRunConfig en el lado de Python.

fast_fetch_multiple — hasta 15 URLs en un lote

Argumento

Tipo

Predeterminado

Notas

urls

string[]

requerido

1–15 URLs absolutas http(s)

max_length

number

40,000

Por URL

full_content

boolean

false

Por URL

timeout_ms

number

25,000

Lote completo, compartido

options

object

Mismos ajustes, aplicados a cada URL

Cada URL regresa como su propia sección con un encabezado de metadatos (url, status, elapsed_ms, truncated). Un sitio lento no puede privar a los demás: solo recibe un error de tiempo de espera por elemento mientras sus compañeros de lote tienen éxito.

Configuración

Todo opcional, todas variables de entorno.

Ajustes del servidor

Variable

Predeterminado

Propósito

FAST_WEBFETCH_MAX_LENGTH

40000

Límite de caracteres por página predeterminado

FAST_WEBFETCH_HARD_MAX_LENGTH

100000

Tope para full_content

FAST_WEBFETCH_TIMEOUT_MS

25000

Tiempo de espera de captura predeterminado

FAST_WEBFETCH_MULTIPLE_CONCURRENCY

12

Ranuras de navegador en paralelo (máx. 32)

FAST_WEBFETCH_DISABLE_SUMMARY

sin establecer

1 elimina el soporte de prompt por completo

FAST_WEBFETCH_PYTHON

<repo>/.venv/bin/python

Intérprete del worker

FAST_WEBFETCH_WORKER

<repo>/crawl4ai_worker.py

Ruta del worker

GEMINI_API_KEY / GEMINI_API_KEY_FILE

Solo necesario para el resumen con prompt

Ajustes del navegador

Variable

Predeterminado

Propósito

CRAWL4AI_STEALTH

activado (1)

Parches de detección anti-headless: bandera de webdriver, plugins, proveedor de WebGL, APIs de Chrome. Establece 0 para desactivar

CRAWL4AI_PROXY_URL

desactivado

Proxy para el tráfico de salida

CRAWL4AI_WAIT_UNTIL

domcontentloaded

Estrategia de espera de Playwright

CRAWL4AI_SCAN_FULL_PAGE

desactivado

Desplazar antes de la extracción: también disponible por llamada como options.full_page

CRAWL4AI_DELAY_SECONDS

0

Tiempo de asentamiento antes de la captura de HTML: también por llamada como options.wait_seconds

Comportamiento que vale la pena conocer

Los sitios con mucho JavaScript a menudo devuelven una cáscara vacía bajo la estrategia de espera predeterminada. Cuando llega un 200 sin contenido, el worker reintenta una vez con networkidle, dentro del mismo presupuesto de tiempo: en el peor caso esperas una vez, no dos. Los fallos de conexión y los errores HTTP, mientras tanto, permanecen con un solo intento: reintentar un host muerto es solo una forma más lenta de fallar.

fast_fetch y fast_fetch_multiple se alimentan del mismo grupo de 12 ranuras de navegador, por lo que un lote grande no puede privar a una captura única concurrente. La demanda más allá del grupo se pone en cola; un lote que pide más ranuras de las que existen obtiene lo que está libre.

Finalmente, max_length existe porque la ventana de contexto de tu agente es un presupuesto, no un vertedero.

Cuando algo se rompe, obtienes una ruta de registro

Los fallos se clasifican en dos montones: que internet sea inestable (tiempos de espera, sitios lentos, errores de plazo por elemento en lotes) y que la herramienta realmente se rompa (el worker no se inicia, el worker se bloquea, desbordamiento de stdout, salida no analizable). Solo el segundo montón escribe un registro: el primero solo recibe una etiqueta de error honesta.

Un fallo del lado de la herramienta termina con:

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

Dentro: la herramienta, argumentos exactos, entrada del worker y el registro completo del fallo (etapa, código de salida, señal, cola de stderr), suficiente para reproducir la solicitud textualmente:

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

Redirige con FAST_WEBFETCH_LOGS_DIR.

Mantenerse por debajo de 30 segundos

Los entornos de agentes tienden a matar las llamadas MCP alrededor de la marca de 30 segundos, por lo que este servidor trata 28s como el muro duro. Cada herramienta responde antes: resultados terminados si la captura llegó a buen puerto, de lo contrario errores estructurados por elemento que indican qué etapa consumió el tiempo. Un lote que se queda sin presupuesto aún devuelve los elementos que terminaron.

Solución de problemas

Síntoma

Causa probable y solución

Crawl4AI worker missing

El repositorio se movió; verifica que FAST_WEBFETCH_WORKER apunte a crawl4ai_worker.py

Crawl4AI python missing

Falta .venv o intérprete incorrecto; establece FAST_WEBFETCH_PYTHON

Todo agota el tiempo en un sitio

El sitio es genuinamente lento u hostil; prueba CRAWL4AI_STEALTH=1

Batch deadline exceeded en algunos elementos

Esperado: presupuesto compartido de 25s, los rezagados reciben errores por elemento

Markdown vacío en SPAs

Debería auto-repararse mediante reintento; si no, aumenta CRAWL4AI_DELAY_SECONDS

Desarrollo

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

El worker Python se puede ejecutar directamente, que es la forma más rápida de depurar el comportamiento de captura sin la capa MCP:

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

Ver también

Licencia

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