Рецепты MCP
Рецепты MCP
Шесть готовых к вставке промптов, которые можно запустить в любом клиенте с поддержкой MCP (Claude Desktop, Claude Code, Cursor, Windsurf, VS Code) после установки MCP-сервера FourA.
Каждый рецепт использует foura_auto (умный вариант по умолчанию) или один или несколько низкоуровневых foura_single, foura_proxy, foura_browser для стандартной задачи парсинга. Есть два способа их использования:
- Вызов встроенного промпта, каждый MCP-клиент отображает предоставляемые сервером промпты в виде slash-команды или панели
/prompts. Выберите промпт, заполните аргументы, запустите. Сервер MCP возвращает шаблонный процесс, LLM выполняет его с правильными инструментами. - Копирование текста ниже в ваш собственный чат. Тот же эффект, но менее заметно.
MCP-сервер поставляет их как нативные промпты: smart_fetch, scrape_product_page, extract_article, monitor_pricing, check_endpoint_health, bulk_fetch_urls.
Примечание о больших страницах (v0.2.0+): по умолчанию тела ответов возвращаются inline в
structuredContentнезависимо от размера, это работает в любом клиенте MCP, включая Claude Desktop. Если вы используете клиент с поддержкой MCPresources/readИ хотите сэкономить токены на больших страницах, передайтеoffload_large: trueв вызове инструмента. Ответы >= 50 КБ тогда приходят какresource_link, которые ваш клиент загружает по запросу. Встроенные промпты ниже предполагают значение по умолчанию (inline).
Открытый исходный код на GitHub; в npm как @fouradata/mcp.
Умное извлечение (авто): начните здесь
Самый простой рецепт: передайте 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)
Ручной промпт:
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)
Ручной промпт:
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, captcha 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?)
Ручной промпт:
Use foura_proxy with maxTries:5 and unblocker:true 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
Для проверки аптайма и валидации API endpoint.
Встроенный: check_endpoint_health(url, expected_text?)
Ручной промпт:
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 (from the total_time field)
- 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}
Когда этот рецепт подходит: внешний мониторинг аптайма, дымовой тест деплоя, watchdog для стороннего API.
5. Параллельный запрос списка URL
Для пакетных заданий, где нужны метаданные множества URL без загрузки их тела.
Встроенный: bulk_fetch_urls(urls)
Ручной промпт:
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, captcha 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. Выбор и повторное использование выхода для конкретной страны
Используйте это, когда целевой сервер должен видеть запрос из определенного набора стран, включая 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.
Когда это правильный подход: региональный контент, лицензированные рынки, геозависимое ценообразование или любой рабочий процесс, который требует проверенной видимой для целевого ресурса страны, а затем повторно использует выбранный выходной узел.
7. Защищенная страница: сначала proxy, затем браузер, если нужен JavaScript
Используйте ограниченную попытку через proxy с валидацией контента, когда прямой запрос возвращает страницу блокировки. Если проверенный ответ успешен, но для нужного контента все еще требуется JavaScript, повторно используйте этот точный идентификатор proxy в браузере. Наличие видимого поставщика защиты не гарантирует успех любого из методов.
Ручной промпт:
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. По умолчанию запрос представляется последней версией Google Chrome; некоторые цели принимают другой браузер или платформу.
Ручной промпт:
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 block 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.
Когда стоит использовать этот рецепт: серверный рендер целевого ресурса, который фильтрует по клиенту, а не по исходящему адресу. Изменение представленного браузера ничего не стоит, и это стоит попробовать до ротации proxy.
Советы, применимые ко всем вариантам
- Не уверены, какой инструмент выбрать? Используйте foura_auto. Он сам выберет метод и обработает эскалацию. Выбирайте конкретный инструмент только тогда, когда вам нужен явный контроль.
- Начните с
foura_single, если достаточно обычного HTTP. Переходите кfoura_proxy, если прямой request заблокирован, и кfoura_browser, если для получения нужного контента требуется JavaScript. - Браузероподобные request headers включены по умолчанию (
unblocker). Сохраняйте валидацию контента, чтобы страница блокировки не считалась успешным ответом, и изменяйте представленный браузер с помощьюbrowser,osилиversion, если целевой ресурс отклоняет вариант по умолчанию. - Правила валидации экономят повторные попытки. Установите
validate.data.fail:["captcha", "blocked"], чтобы очевидно заблокированный response считался ошибкой и вызывал повторную попытку или эскалацию proxy, а не обрабатывался как успех. - Область действия страны является строгой. Результат
no_eligible_proxyне является разрешением на повторную попытку безexitCountries; сохраните это требование или спросите пользователя перед его изменением. - Большие тела ответа по умолчанию передаются inline (v0.2.0+). Передайте
offload_large: trueдля переключения наresource_link+resources/readна клиентах, поддерживающих эти возможности.
Нужен рецепт, которого здесь нет?
Напишите на support@foura.ai, описав ваш случай. Сервер MCP поставляет новые промпты с той же частотой, что и релизы REST API.