MCP 레시피

MCP Recipes

FourA MCP server를 설치한 후, MCP 호환 클라이언트(Claude Desktop, Claude Code, Cursor, Windsurf, VS Code)에서 실행할 수 있는 6가지 붙여넣기 가능한 프롬프트입니다.

각 레시피는 일반적인 스크래핑 작업을 위해 foura_auto (스마트 기본값) 또는 하나 이상의 하위 수준 foura_single, foura_proxy, foura_browser을 사용합니다. 두 가지 사용 방법이 있습니다:

  1. 내장 프롬프트 호출 - 모든 MCP 클라이언트는 서버가 제공하는 프롬프트를 슬래시 명령 또는 /prompts 패널로 표시합니다. 프롬프트를 선택하고 인수를 채운 후 실행합니다. MCP 서버는 템플릿화된 워크플로를 반환하며, LLM은 적절한 도구로 이를 실행합니다.
  2. 아래의 텍스트를 복사하여 직접 채팅에 붙여넣습니다. 동일한 효과가 있지만 검색 가능성은 낮습니다.

MCP 서버는 이를 기본 프롬프트로 제공합니다: smart_fetch, scrape_product_page, extract_article, monitor_pricing, check_endpoint_health, bulk_fetch_urls.

대용량 페이지에 대한 참고 사항 (v0.2.0+): 기본적으로 응답 본문은 크기에 관계없이 structuredContent에 인라인으로 반환되며, 이는 Claude Desktop을 포함한 모든 MCP 클라이언트에서 작동합니다. MCP resources/read를 지원하는 클라이언트를 사용 중이고 대용량 페이지에서 토큰을 절약하려면 도구 호출에 offload_large: true을 전달하십시오. 그러면 50 KB 이상의 응답은 클라이언트가 요청 시 가져오는 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. 제품 페이지 스크래핑

단일 페이지 애플리케이션(SPA) 사이트 및 안티 봇 챌린지 뒤에 있는 페이지를 포함한 이커머스 제품 상세 페이지용.

내장: 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}

이 방법이 적합한 경우: 외부 업타임 모니터, 배포 스모크 테스트, 서드파티 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.

이 방법이 적합한 경우: 사이트맵 도달 가능성 검사, 끊어진 링크 감사, "50개의 제품 URL 중 존재하는 항목" 확인.

6. 국가 지정 exit 선택 및 재사용

대상이 특정 국가 집합 중 하나에서 발생한 request를 보아야 할 때 사용합니다. 브라우저 렌더링 전에 proxy 선택이 이루어져야 하는 JavaScript 페이지가 포함됩니다.

수동 프롬프트:

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 ID를 재사용하십시오. 표시되는 보호 벤더가 있다고 해서 어떤 방법이든 성공한다는 보장은 없습니다.

수동 프롬프트:

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을 제시합니다. 일부 타겟은 다른 브라우저나 플랫폼을 허용합니다.

수동 프롬프트:

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를 사용하세요. 메서드를 선택하고 에스컬레이션을 처리합니다. 명시적인 제어가 필요할 때만 특정 도구를 선택하세요.
  • 일반 HTTP로 충분할 때는 foura_single로 시작하세요. 직접 request가 차단되면 foura_proxy로 에스컬레이션하고, 원하는 콘텐츠에 JavaScript가 필요하면 foura_browser으로 에스컬레이션하세요.
  • 브라우저와 유사한 request header는 기본적으로 켜져 있습니다 (unblocker). 차단 페이지가 성공으로 간주되지 않도록 콘텐츠 유효성 검사를 유지하고, 대상이 기본값을 거부하면 browser, os 또는 version을 사용하여 제시된 브라우저를 변경하세요.
  • 유효성 검사 규칙은 재시도를 줄여줍니다. 명백히 차단된 response가 성공으로 구문 분석되지 않고 실패로 간주되어 재시도/proxy 에스컬레이션을 트리거하도록 validate.data.fail:["captcha", "blocked"]을 설정하세요.
  • 국가 범위는 엄격합니다. no_eligible_proxy 결과가 exitCountries 없이 재시도할 수 있는 권한을 의미하지 않습니다. 요구 사항을 유지하거나 변경하기 전에 사용자에게 확인하세요.
  • 큰 본문은 기본적으로 인라인 처리됩니다 (v0.2.0+). 해당 기능을 지원하는 클라이언트에서 resource_link + resources/read으로 전환하려면 offload_large: true을 전달하세요.

여기에 없는 레시피를 원하시나요?

사용 사례를 support@foura.ai로 이메일을 보내주세요. MCP 서버는 REST API 릴리스와 동일한 주기로 새로운 프롬프트를 배포합니다.

최근 업데이트: 2026년 8월 6일