SmartFetch
SmartFetch V1.8 — Descubribilidad de MCP
SmartFetch toma una URL web pública y devuelve texto limpio listo para agentes, Markdown, enlaces, metadatos y el método de recuperación utilizado. Primero intenta una recuperación HTTP económica y recurre a un navegador Chromium real cuando es necesario.
Cambios en V1.8
La herramienta de MCP de pago
fetch_webpageahora declara metadatos oficiales de x402 Bazaar para el descubrimiento por parte de agentes sin cambiar su comportamiento de ejecución ni de pago.El
server.jsonraíz anuncia el endpoint existente/mcpStreamable HTTP como un servidor exclusivamente remoto para el Registro Oficial de MCP.No se realiza ninguna publicación en el Registro, despliegue, cambio de variables de Railway ni pago con esta actualización del repositorio.
Todo el comportamiento de pago HTTP, Bazaar y MCP nativo de V1.7 permanece sin cambios:
Base Sepolia sigue siendo la red x402 predeterminada y continúa usando
https://x402.org/facilitatorsin credenciales CDP.La mainnet de Base puede usar el facilitador CDP autenticado de Coinbase cuando se selecciona explícitamente.
El arranque en mainnet requiere ambas credenciales de CDP y se bloquea (fail closed) ante credenciales no válidas o falta de soporte del facilitador.
/metadistingue los modos de pago de testnet y mainnet habilitados.cdp-sdk, FastAPI, Uvicorn y x402 están fijados exactamente para que las actualizaciones de infraestructura sean explícitas.
El motor de recuperación, el comportamiento de extracción/navegador, las protecciones SSRF, los límites de solicitudes, la limitación de frecuencia y los controles de concurrencia no cambian.
Related MCP server: SteadyFetch
API
GET /health
Devuelve el estado/versión del servicio.
GET /meta
Descripción del servicio legible por máquina.
POST /fetch
{
"url": "https://example.com/article",
"max_chars": 20000,
"force_browser": false
}max_chars es opcional (mínimo 1.000; predeterminado 20.000; máximo 50.000).
Campos de ejemplo de la respuesta:
{
"success": true,
"requested_url": "https://example.com/article",
"final_url": "https://example.com/article",
"status_code": 200,
"render_method": "http",
"title": "…",
"content": "…",
"markdown": "…",
"links": [],
"word_count": 1000,
"content_hash": "…",
"truncated": false,
"elapsed_ms": 350,
"request_id": "…",
"service_version": "1.8.0"
}Cuando la protección de pago x402 está habilitada, el encabezado PAYMENT-REQUIRED para POST /fetch incluye una declaración Bazaar con el contrato de entrada url, max_chars y force_browser, además de una respuesta exitosa representativa. /, /health y /meta siguen siendo gratuitos y no anuncian metadatos Bazaar.
MCP
Los clientes MCP remotos se conectan a /mcp mediante Streamable HTTP. El servidor expone exactamente una herramienta:
fetch_webpage
url: required string
max_chars: optional integer (default 20000, minimum 1000, maximum 50000)
force_browser: optional boolean (default false)La herramienta lee, obtiene, hace scraping o extrae páginas web públicas para agentes y devuelve el texto, Markdown, enlaces y metadatos de recuperación existentes de SmartFetch. Usa la misma validación SSRF, ejecutor, tiempo de espera de solicitud, límite de concurrencia, límite de salida, recuperación HTTP y respaldo de navegador que POST /fetch; no realiza una solicitud HTTP de vuelta a la API pública.
Cuando x402 está habilitado, una llamada tools/call no pagada devuelve el desafío de pago x402 nativo de MCP. Un pago válido se verifica antes de la recuperación y se liquida una vez tras la ejecución exitosa de la herramienta. La red, el beneficiario público y el precio provienen de X402_NETWORK, X402_PAY_TO y X402_PRICE. No se acepta ni se requiere ninguna clave privada de vendedor ni secreto de cartera.
El desafío de pago MCP no pagado incluye una declaración Bazaar para fetch_webpage con transporte streamable-http, el contrato de entrada existente y una salida representativa de SmartFetch. Su recurso de pago sigue siendo mcp://tool/fetch_webpage. El recurso HTTP Bazaar existente para POST /fetch es independiente y no cambia.
El server.json raíz describe el endpoint remoto público en https://smartfetch-production-ea53.up.railway.app/mcp. La publicación en el Registro es una acción de operador autenticada separada; agregar el manifiesto no publica ni despliega el servicio.
Ejecutar localmente
python -m pip install -r requirements.txt
python -m smartfetch.serverLuego:
curl http://127.0.0.1:8787/health
curl -X POST http://127.0.0.1:8787/fetch \
-H 'Content-Type: application/json' \
-d '{"url":"https://example.com"}'Los usuarios de Windows pueden ejecutar setup_windows.bat y luego start_windows.bat.
Con X402_ENABLED sin establecer o en false, el arranque no requiere ajustes de pago y /fetch sigue siendo gratuito para pruebas locales y remotas.
Modos de pago x402
El pago permanece deshabilitado a menos que se habilite explícitamente. Base Sepolia es la opción predeterminada y solo requiere la dirección pública receptora:
X402_ENABLED=true
X402_PAY_TO=0xYOUR_PUBLIC_RECEIVING_ADDRESS
X402_PRICE=$0.005
X402_NETWORK=eip155:84532X402_PRICE y X402_NETWORK usan los valores mostrados cuando se omiten. El precio predeterminado sigue siendo $0.005.
La mainnet de Base debe seleccionarse explícitamente y usa el facilitador CDP autenticado de Coinbase:
X402_ENABLED=true
X402_PAY_TO=0xYOUR_PUBLIC_RECEIVING_ADDRESS
X402_PRICE=$0.005
X402_NETWORK=eip155:8453
CDP_API_KEY_ID=YOUR_CDP_API_KEY_ID
CDP_API_KEY_SECRET=YOUR_CDP_API_KEY_SECRETLa mainnet requiere ambas credenciales CDP. Las credenciales ausentes, no válidas o inutilizables, los pagos exactos no admitidos en la mainnet de Base o cualquier fallo de inicialización del facilitador/middleware abortan el arranque. SmartFetch nunca recurre al acceso gratuito ni al facilitador de testnet cuando se selecciona mainnet. Cualquier red distinta de Base Sepolia y la mainnet de Base es rechazada.
Solo POST /fetch está protegido. /health, / y /meta siempre permanecen gratuitos. Las respuestas /meta habilitadas informan x402-enabled-testnet o x402-enabled-mainnet sin exponer valores de configuración.
SmartFetch usa X402_PAY_TO como dirección pública receptora y no necesita CDP_WALLET_SECRET. Nunca proporcione una clave privada de vendedor de MetaMask ni una frase de recuperación: SmartFetch no requiere, lee, acepta, registra ni almacena ninguna de las dos.
Validación local
python tests/security_smoke.py
python tests/api_local_smoke.pyapi_local_smoke.py habilita intencionadamente el acceso a la red privada solo dentro del proceso de prueba para poder usar una fixture de localhost.
Contenedor
docker build -t smartfetch:v1.8 .
docker run --rm -p 8787:8787 smartfetch:v1.8El contenedor instala Chromium automáticamente.
Despliegue público
Este paquete está listo para Docker. Railway puede desplegar el Dockerfile y railway.json incluidos; cualquier host Docker que proporcione HTTPS saliente y suficiente RAM para un proceso de Chromium también debería funcionar.
Variables de entorno iniciales recomendadas:
MAX_CONCURRENT_BROWSERS=1
MAX_CONCURRENT_FETCHES=4
DEFAULT_MAX_OUTPUT_CHARS=20000
MAX_OUTPUT_CHARS=50000
FETCH_TIMEOUT_SECONDS=12
BROWSER_TIMEOUT_SECONDS=15
TOTAL_REQUEST_TIMEOUT_SECONDS=25
RATE_LIMIT_PER_MINUTE=30
RATE_LIMIT_BURST=10
X402_ENABLED=falseNo establezca ALLOW_PRIVATE_NETWORK=1 en producción.
Nota importante sobre SSRF en el despliegue
La validación de URL a nivel de aplicación está incluida, pero el renderizado del navegador puede ejecutar subrecursos de la página. Para un despliegue público de pago, el contenedor del navegador debe aislarse adicionalmente mediante una política de salida de host/red de los metadatos de la nube y de las redes privadas RFC1918. Reforzaremos esto de nuevo antes de eliminar el límite de frecuencia temporal y antes del lanzamiento de x402.
Probar el despliegue público
En Windows, ejecute test_remote_windows.bat, pegue la URL pública y cargue tests/remote_20_results.json.
O bien:
python tests/remote_20.py https://YOUR-PUBLIC-URLNuestro umbral de despliegue sigue siendo mínimo 18/20, incluidas las cinco solicitudes forzadas de navegador.
Estado del lanzamiento de pago
V1.8 conserva la configuración de pago existente de Base Sepolia y de la mainnet de Base. Este cambio del repositorio no publica por sí mismo en el Registro MCP, no despliega el servicio ni modifica las variables de Railway. La red de pago activa está controlada por X402_NETWORK: eip155:84532 para Base Sepolia o eip155:8453 para la mainnet de Base.
This server cannot be installed
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
- AlicenseAqualityBmaintenanceEnables AI agents to read web pages reliably, returning clean markdown content, hyperlinks, and metadata without navigation or ad noise.314MIT
- AlicenseNot gradedqualityDmaintenanceProvides AI agents with reliable web fetching capabilities, handling retries, caching, and anti-bot bypass automatically.MIT
- AlicenseAqualityCmaintenanceEnables AI agents to fetch any web page as clean markdown or screenshot it, turning URLs into LLM-ready context.211MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to fetch and extract clean, readable content from web pages, and search within pages for specific queries, without needing a full browser.1MIT
Related MCP Connectors
Web intelligence for AI agents: fetch, render, extract, research. x402 micropayments, no API keys.
The web capability layer for AI agents: render, extract, DNS, SSL, WHOIS & more via x402.
Read a URL as clean markdown, screenshot a website, url to PDF. Web access for agents, no signup.
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/Friezaaaa/smartfetch'
If you have feedback or need assistance with the MCP directory API, please join our Discord server