Рецепты MCP
Рецепты MCP
Девять готовых к использованию промптов, которые можно запускать в любом MCP-совместимом клиенте (Claude Desktop, Claude Code, Cursor, Windsurf, VS Code) после установки FourA MCP server.
Каждый рецепт использует foura_auto (умный выбор по умолчанию) или один или несколько низкоуровневых инструментов foura_single, foura_proxy, foura_browser для стандартных задач скрапинга. Два способа использования:
- Вызов встроенного промпта (каждый MCP-клиент отображает промпты сервера через слэш-команду или панель
/prompts). Выберите промпт, укажите аргументы и запустите. MCP-сервер вернет шаблонный рабочий процесс, а LLM выполнит его с нужными инструментами. - Копирование текста ниже прямо в ваш чат. Результат тот же, но менее удобно для быстрого вызова.
MCP-сервер предоставляет следующие нативные промпты: smart_fetch, scrape_product_page, extract_article, monitor_pricing, check_endpoint_health, bulk_fetch_urls.
Примечание по большим страницам (v0.2.0+): по умолчанию тела ответов возвращаются встроенными в
structuredContentнезависимо от размера, что работает во всех MCP-клиентах, включая Claude Desktop. Если ваш клиент поддерживает MCPresources/readИ вам требуется экономия токенов на больших страницах, передайтеoffload_large: trueпри вызове инструмента. Ответы размером >= 50 КБ будут возвращаться какresource_link, которые клиент запрашивает по требованию. Встроенные промпты ниже предполагают стандартное поведение (встроенные данные).
Открытый исходный код на GitHub; доступен в npm как @fouradata/mcp.
Smart fetch (auto): начните отсюда
Самый простой рецепт: передайте URL в foura_auto и позвольте ему выполнить ограниченное число попыток через доступные методы запросов. Используйте его всегда, когда нужно получить контент и нет необходимости выбирать первый инструмент вручную.
Встроенный: smart_fetch(url, must_contain?, extract?)
Промпт для ручного ввода:
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.
Когда использовать этот рецепт: первая попытка, когда FourA должен сам выбрать метод, особенно если валидация контента позволяет отличить настоящую страницу от страницы с отказом.
1. Скрейпинг страницы товара
Для страниц с описанием товаров в e-commerce, включая сайты single-page app и страницы с проверкой сайта.
Встроенный: scrape_product_page(url)
Пользовательский prompt:
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": "..."}
Когда подходит этот сценарий: агент сравнения цен, уведомления о поступлении товара, таблица конкурентного анализа.
2. Извлечение статьи
Для новостных статей, постов в блогах, технической документации и любых материалов, где нужен чистый текст без навигации, рекламы и шума в футере.
Встроенный вариант: extract_article(url)
Ручной prompt:
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": "..."}
Когда подходит этот сценарий: суммаризация исследований, персональный RSS конкретного сайта, ежедневный дайджест новостей.
3. Отслеживание цены
Для страниц с ценами и товарных предложений, с возможностью сравнения с целевой ценой.
Встроенный: monitor_pricing(url, target_price?)
Пользовательский prompt:
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"}
Когда этот рецепт подходит: агент оповещений об экономии, отслеживание цен на поездки, мониторинг цен конкурентов в B2B.
4. Проверка состояния endpoint
Для проверок доступности (uptime probes) и валидации API endpoint.
Встроенный: check_endpoint_health(url, expected_text?)
Ручной prompt:
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}
Когда этот рецепт подходит: внешний мониторинг аптайма, smoke-тест деплоя, watchdog для стороннего API.
5. Fetch a list of URLs in parallel
Для пакетных задач, когда нужны метаданные множества URL без включения их тел ответов.
Встроенный: bulk_fetch_urls(urls)
Пользовательский prompt:
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.
Когда подходит этот рецепт: проверка доступности sitemap, аудит неработающих ссылок, проверка в стиле "какие из этих 50 URL товаров все еще существуют".
6. Выбор и повторное использование выхода с привязкой к стране
Используйте этот вариант, когда целевой ресурс должен видеть request из определенного списка стран, включая JavaScript-страницы, где выбор proxy должен происходить до рендеринга в браузере.
Ручной prompt:
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.
Когда подходит этот рецепт: региональный контент, лицензированные рынки, геозависимые цены или любой рабочий процесс, где требуется проверенная видимая целевому сервису страна с последующим повторным использованием выбранной точки выхода. Выбор страны доступен начиная с тарифа Startup; на других тарифах foura_proxy возвращает plan_limit_feature, что не исправляется повторными попытками.
7. Защищенная страница: сначала proxy, затем браузер, если нужен JavaScript
Используйте ограниченную попытку через proxy с валидацией контента, когда прямой request возвращает страницу отказа. Если валидированный response успешен, но для нужного контента все еще требуется JavaScript, используйте этот же proxy ID в браузере. Наличие видимого провайдера защиты не гарантирует успех любого из методов.
Ручной prompt:
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.
Когда подходит этот рецепт: защищенная цель, где HTTP может выбрать рабочий выходной узел, но для итогового контента требуется JavaScript-рендеринг.
8. Блокировка на статической странице: измените представляемый браузер
Используйте этот вариант, когда статическая цель возвращает страницу блокировки или проверки, и проблема не в JavaScript. По умолчанию request представляет актуальный Google Chrome; некоторые цели принимают другой браузер или платформу.
Ручной prompt:
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.
Когда подходит этот рецепт: серверный рендеринг цели, которая фильтрует трафик по характеристикам клиента, а не по выходному IP-адресу. Смена эмулируемого браузера не требует дополнительных затрат, и ее стоит попробовать перед ротацией proxy.
Советы для всех сценариев
- Не уверены, какой инструмент выбрать? Используйте foura_auto. Он сам выберет метод и выполнит эскалацию. Переходите к конкретному инструменту, только если нужен явный контроль.
- Начинайте с
foura_single, если достаточно обычного HTTP. Переходите наfoura_proxyпри блокировке прямого запроса и наfoura_browser, если для получения контента требуется JavaScript. - Браузерные заголовки запросов включены по умолчанию (
unblocker). Сохраняйте валидацию контента, чтобы страница с отказом в доступе не считалась успешным ответом, и меняйте эмулируемый браузер черезbrowser,osилиversion, если цель отклоняет вариант по умолчанию. - Правила валидации экономят попытки запросов. Настройте
validate.data.fail:["captcha", "blocked"], чтобы явно заблокированный ответ считался ошибкой и запускал повтор или эскалацию proxy, а не обрабатывался как успешный. - Географическая привязка к стране строгая. Результат
no_eligible_proxyне дает разрешения повторять запрос безexitCountries; сохраняйте это требование или уточняйте у пользователя перед изменением. - Большие тела ответов передаются inline по умолчанию (v0.2.0+). Передайте
offload_large: true, чтобы переключиться наresource_link+resources/readна клиентах с поддержкой этих возможностей.
Нужен рецепт, которого здесь нет?
Отправьте описание вашего сценария на support@foura.ai. MCP-сервер получает новые prompt с той же периодичностью, что и релизы REST API.