Recetas de MCP

MCP Recipes

Nueve prompts listos para pegar que puedes ejecutar dentro de cualquier cliente compatible con MCP (Claude Desktop, Claude Code, Cursor, Windsurf, VS Code) tras instalar el servidor MCP de FourA.

Cada recipe utiliza foura_auto (el valor predeterminado inteligente) o uno o más de los endpoints de nivel inferior foura_single, foura_proxy, foura_browser para una tarea común de scraping. Hay dos formas de usarlos:

  1. Invocar el prompt integrado: cada cliente MCP muestra los prompts proporcionados por el servidor como un comando de barra inclinada (slash command) o un panel /prompts. Elige el prompt, completa los argumentos y ejecuta. El servidor MCP devuelve el flujo de trabajo en plantilla; el LLM lo ejecuta con las herramientas adecuadas.
  2. Copiar el texto a continuación en tu propio chat. Mismo efecto, pero menos detectable.

El servidor MCP incluye estos prompts nativos: smart_fetch, scrape_product_page, extract_article, monitor_pricing, check_endpoint_health, bulk_fetch_urls.

Nota sobre páginas grandes (v0.2.0+): por defecto, los cuerpos de respuesta se devuelven en línea en structuredContent sin importar el tamaño, lo que funciona en todos los clientes MCP, incluido Claude Desktop. Si usas un cliente compatible con MCP resources/read Y buscas ahorrar tokens en páginas grandes, pasa offload_large: true en la llamada a la herramienta. Las respuestas >= 50 KB se entregarán como un resource_link que tu cliente recupera bajo demanda. Los prompts integrados a continuación asumen el comportamiento por defecto (en línea).

Código abierto en GitHub; en npm como @fouradata/mcp.

Smart fetch (auto): empieza aquí

La recipe más sencilla: pasa una URL a foura_auto y deja que realice intentos acotados a través de los métodos de request disponibles. Úsala siempre que quieras el contenido y no necesites elegir tú mismo la primera herramienta.

Integrado: smart_fetch(url, must_contain?, extract?)

Prompt manual:

Fetch <URL> using foura_auto.

Pass validate.data.accept:["<a string the real page must contain>"] so only the real page counts as success. Auto makes bounded attempts and returns an error if none satisfies the validation.

For a plain follow-up, call foura_single with session.proxy as proxy, session.cookies serialized as a Cookie header, and session.userAgent as a User-Agent header. For JavaScript, pass the session values to the matching foura_browser fields.

Return the content, or extract the requested fields as JSON.

Cuándo usar esta receta: en un primer intento donde FourA deba elegir el método, especialmente cuando la validación de contenido pueda distinguir una página real de una página de rechazo.

1. Extraer una página de producto

Para páginas de detalle de producto de e-commerce, incluyendo sitios single-page-app y páginas con verificación de sitio.

Integrado: scrape_product_page(url)

Prompt manual:

Fetch the product page at <URL> using foura_browser - most product pages are single-page apps and need JavaScript to render.

From the response body extract:
- product title
- price (with currency)
- primary product image URL (absolute, not relative)
- availability / stock status
- product SKU or ID if visible

Return as JSON: {"title": "...", "price": 0, "currency": "USD", "image_url": "...", "in_stock": true, "sku": "..."}

Cuándo es la receta adecuada: un agente de comparación de precios, un notificador de reposición de stock, una hoja de cálculo para análisis competitivo.

2. Extraer un artículo

Para artículos de noticias, publicaciones de blog, documentación técnica o cualquier contenido donde quieras texto de lectura limpio sin elementos de navegación, anuncios ni ruido en el pie de página.

Integrado: extract_article(url)

Prompt manual:

Fetch <URL> using foura_single with unblocker:true. Use plain HTTP first when the article is present in the server-rendered response.

If foura_single returns a 403, a verification page, or empty content, retry the same URL with foura_proxy (maxTries:3) - it routes through a rotating proxy pool.

From the response, extract:
- headline (the main H1, not the page title bar)
- author byline (may be inside .author, [rel=author], itemprop)
- publication date (look for <time>, .published, or JSON-LD)
- main article body (strip navigation, ads, related-content, footer, comments)
- canonical URL (rel=canonical or og:url)

Return as JSON: {"title": "...", "author": "...", "date_published": "ISO8601", "body": "...", "canonical_url": "..."}

Cuándo es la receta adecuada: un sintetizador de investigación, un RSS de un solo sitio, un resumen diario de noticias.

3. Monitorizar un precio

Para páginas de precios y ofertas de productos, con comparación opcional contra un precio objetivo.

Integrado: monitor_pricing(url, target_price?)

Prompt manual:

Use foura_proxy with maxTries:5 to fetch <URL>. Pricing pages often have aggressive bot detection, so go through the proxy pool from the start.

Extract the current price (look for visible $/€/£ amounts, JSON-LD Offer schema, [itemprop=price]).

If a target price is provided, compare: report whether current is below/at/above target and the absolute difference.

Return as JSON: {"url": "...", "current_price": 0.00, "currency": "USD", "target_price": 0, "difference": 0, "status": "below|at|above"}

Cuándo es la receta adecuada: un agente de alertas de ahorro, un monitor de tarifas de viaje, un rastreador de precios de la competencia B2B.

4. Comprobar el estado del endpoint

Para sondeos de disponibilidad y validación de endpoints de API.

Integrado: check_endpoint_health(url, expected_text?)

Prompt manual:

Use foura_single with GET on <URL>, timeout_ms:5000, and validate.status.accept:[200]. If an expected substring is provided, also set validate.data.accept:["<EXPECTED>"] so the request only counts as success when the body contains it.

Report:
- reachable (true if any response came back, false on connection error/timeout)
- status_code (HTTP code from target)
- total_time_ms (the total_time field is in seconds: multiply by 1000)
- validation_passed (true if status + body validation conditions were met)

Return as JSON: {"url": "...", "reachable": true, "status_code": 200, "total_time_ms": 0, "validation_passed": true}

Cuándo es la receta adecuada: un monitor de uptime externo, una prueba de humo de despliegue, un watchdog de API de terceros.

5. Obtener una lista de URLs en paralelo

Para tareas por lotes en las que deseas metadatos sobre muchas URLs sin incluir sus cuerpos en línea.

Integrado: bulk_fetch_urls(urls)

Prompt manual:

Parse the following comma-separated URLs and fetch each one concurrently using foura_single (unblocker:true).

URLs: <COMMA_SEPARATED>

For any URL that returns 403, a verification page, or empty body - retry that single URL with foura_proxy (maxTries:3).

Return a JSON array, one entry per URL in input order:
[{"url": "...", "status": 200, "success": true, "body_size_bytes": 0, "via": "single|proxy", "error": null}, ...]

Do NOT inline full response bodies in the output - only metadata. If you need body content, call foura_single individually after this report.

Cuándo es la receta adecuada: un rastreo de accesibilidad de sitemap, una auditoría de enlaces rotos, una comprobación de "cuál de estas 50 URL de productos sigue existiendo".

6. Elige y reutiliza una salida delimitada por país

Usa esto cuando el destino deba ver la request desde uno de un conjunto específico de países, incluidas las páginas con JavaScript donde la selección del proxy debe ocurrir antes del renderizado del navegador.

Prompt manual:

First call foura_proxy for the actual target:
{
  "maxTries": 5,
  "exitCountries": ["FR", "GB"],
  "request": { "method": "GET", "url": "<TARGET_URL>" }
}

Treat exitCountries as a strict allowlist. On success, verify that exitCountry is FR or GB and capture the returned proxy ID.

If the page then needs JavaScript, call foura_browser with the returned proxy ID in foura_browser.proxy. Do not start a new proxy selection, because that may choose a different exit.

If foura_proxy returns no_eligible_proxy, preserve the requested country scope and retry later. Change or widen the list only after the user explicitly changes the requirement. Never retry silently without exitCountries.

Cuándo es la receta adecuada: contenido regional, mercados con licencias, precios geoespecíficos o cualquier flujo de trabajo que requiera un país visible para el objetivo verificado y luego reutilice la salida seleccionada. La delimitación por país está incluida a partir del plan Startup; en otros planes, foura_proxy devuelve plan_limit_feature, lo cual ningún reintento soluciona.

7. Página protegida: proxy primero, navegador cuando se necesite JavaScript

Utiliza un intento delimitado mediante proxy con validación de contenido cuando una request directa devuelva una página de rechazo. Si la response validada tiene éxito pero el contenido deseado aún requiere JavaScript, reutiliza ese ID de proxy exacto en el navegador. La presencia visible de un proveedor de protección no garantiza que ningún método funcione.

Prompt manual:

Step 1 - call foura_proxy for <TARGET_URL>. Put a string unique to the real page in request.validate.data.accept. If the user supplied an allowed country list, pass it as exitCountries; do not guess country codes.

Step 2 - if the response passes validation and JavaScript is still required, call foura_browser with the returned proxy ID in the proxy field.

Do not call foura_proxy again after a successful selection, because the new call may choose a different exit. If the bounded attempt fails, report the failure honestly instead of claiming support for the target's protection vendor.

Cuándo es la receta adecuada: un objetivo protegido donde HTTP puede seleccionar una salida funcional pero el contenido final requiere renderizado de JavaScript.

8. Bloqueado en una página estática: cambia el navegador que presentas

Usa esto cuando un objetivo estático devuelve una página de bloqueo o challenge y JavaScript no es el problema. La request presenta el último Google Chrome por defecto; algunos objetivos aceptan un navegador o plataforma diferente.

Prompt manual:

Step 1 - call foura_single for <TARGET_URL> with request validation: put a string unique to the real page in validate.data.accept.

Step 2 - if the response is a refusal page, or defense comes back with solved false, call foura_single again with a different presented browser, for example {"browser": "Firefox"} or {"browser": "Chrome", "os": "Android"}. Keep the same validation.

If the tool answers that the combination does not exist, pick one from the list it returns. Do not retry the same impossible combination, and do not assume another browser was used instead: the request was refused, not substituted.

Step 3 - if changing the presented browser does not help, escalate to foura_proxy for a different exit, and to foura_browser only when the content genuinely needs JavaScript.

Cuándo es la receta adecuada: un objetivo renderizado en el servidor que filtra según el cliente que ve en lugar de la dirección de salida. Cambiar el navegador presentado no tiene costo adicional y vale la pena intentarlo antes de la rotación de proxies.

Consejos aplicables a todas

  • ¿No sabes qué herramienta usar? Usa foura_auto. Elige el método y gestiona el escalado por ti. Recurre a una herramienta específica solo cuando quieras un control explícito.
  • Empieza con foura_single cuando HTTP simple sea suficiente. Escala a foura_proxy cuando la solicitud directa esté bloqueada y a foura_browser cuando el contenido deseado requiera JavaScript.
  • Los encabezados de solicitud similares a los de un navegador están activados por defecto (unblocker). Mantén la validación de contenido activa para que una página de bloqueo no cuente como éxito, y cambia el navegador presentado con browser, os o version cuando un objetivo rechace el predeterminado.
  • Las reglas de validación ahorran reintentos. Configura validate.data.fail:["captcha", "blocked"] para que una respuesta bloqueada de forma evidente cuente como fallo y active el reintento o el escalado de proxies, en lugar de interpretarse como éxito.
  • El alcance por país es estricto. Un resultado no_eligible_proxy no autoriza a reintentar sin exitCountries; conserva el requisito o consulta al usuario antes de cambiarlo.
  • Los cuerpos grandes van en línea por defecto (v0.2.0+). Pasa offload_large: true para cambiar a resource_link + resources/read en clientes compatibles con esas capacidades.

¿Buscas una receta que no está aquí?

Envía un correo a support@foura.ai con el caso de uso. El servidor MCP publica nuevos prompts con la misma frecuencia que los lanzamientos de la API REST.

Actualizado: 27 de septiembre de 2026