MCP 레시피
MCP 레시피
FourA MCP 서버를 설치한 후 모든 MCP 호환 클라이언트(Claude Desktop, Claude Code, Cursor, Windsurf, VS Code)에서 바로 실행할 수 있는 9가지 프롬프트입니다.
각 레시피는 일반적인 스크래핑 작업을 위해 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에 인라인으로 반환되며, 이는 Claude Desktop을 포함한 모든 MCP 클라이언트에서 작동합니다. MCPresources/read를 지원하는 클라이언트를 사용 중이고 대용량 페이지에서 토큰을 절약하려면 도구 호출 시offload_large: true을 전달하세요. 50KB 이상의 응답은 클라이언트가 필요 시 가져오는resource_link로 반환됩니다. 아래의 기본 제공 프롬프트는 기본값(인라인)을 전제로 합니다.
GitHub에서 오픈 소스로 제공되며, npm에서 @fouradata/mcp로 제공됩니다.
스마트 가져오기 (auto): 여기서 시작
가장 간단한 레시피: foura_auto에 URL을 전달하면 사용 가능한 요청 방법 전반에서 제한된 횟수로 시도합니다. 첫 번째 도구를 직접 선택할 필요 없이 콘텐츠만 가져오고 싶을 때 사용하세요.
기본 제공: 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. 상품 페이지 스크래핑
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, 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?)
수동 프롬프트:
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 상태 확인
가동 시간 프로브 및 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 (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}
적합한 사용 사례: 외부 가동 시간 모니터링, 배포 스모크 테스트, 서드파티 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, 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.
이 레시피가 적합한 경우: 사이트맵 접근성 검사, 끊어진 링크(link-rot) 감사, "이 50개 제품 URL 중 어떤 것이 여전히 존재하는지" 확인.
6. 국가 범위의 출구 노드 선택 및 재사용
브라우저 렌더링 전에 proxy 선택이 이루어져야 하는 JavaScript 페이지를 포함하여, 대상 사이트가 특정 국가 세트 중 한 곳에서 오는 request를 확인해야 할 때 이를 사용합니다.
수동 프롬프트:
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.
이 레시피가 적합한 경우: 지역별 콘텐츠, 라이선스 시장, 지역별 가격 책정, 또는 대상에 노출되는 국가를 검증한 후 선택된 exit를 재사용해야 하는 모든 워크플로. 국가 범위 지정은 Startup 플랜 이상부터 포함됩니다. 다른 플랜에서는 foura_proxy이 plan_limit_feature를 반환하며, 이는 재시도해도 해결되지 않습니다.
7. 보호된 페이지: proxy 우선, JavaScript가 필요한 경우 browser 사용
직접 request 시 거부 페이지가 반환되면 콘텐츠 검증과 함께 제한된 횟수의 proxy 시도를 사용하세요. 검증된 response가 성공했으나 원하는 콘텐츠에 여전히 JavaScript가 필요한 경우 browser에서 해당 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가 원인이 아닐 때 사용합니다. 요청은 기본적으로 최신 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 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 주소가 아닌 감지된 클라이언트를 기준으로 필터링하는 서버 렌더링 대상. 표시되는 브라우저를 변경하는 데는 추가 비용이 들지 않으며, 프록시 교체 전에 시도해 볼 가치가 있습니다.
모든 경우에 적용되는 팁
- 어떤 도구를 사용할지 확실하지 않나요? foura_auto를 사용하세요. 적절한 방식을 선택하고 에스컬레이션을 자동으로 처리합니다. 명시적인 제어가 필요할 때만 특정 도구를 선택하세요.
- 일반 HTTP로 충분하다면
foura_single부터 시작하세요. 직접 요청이 차단되면foura_proxy(으)로, 대상 콘텐츠에 JavaScript가 필요하면foura_browser(으)로 에스컬레이션하세요. - 브라우저 유사 요청 헤더는 기본적으로 활성화되어 있습니다(
unblocker). 거부 페이지가 성공으로 간주되지 않도록 콘텐츠 유효성 검사를 유지하고, 대상이 기본값을 거부할 때는browser,os또는version(으)로 표시되는 브라우저를 변경하세요. - 유효성 검사 규칙은 재시도를 줄여줍니다.
validate.data.fail:["captcha", "blocked"]을(를) 설정하여 명백히 차단된 응답이 성공으로 파싱되지 않고 실패로 처리되어 재시도/프록시 에스컬레이션을 트리거하도록 하세요. - 국가 범위는 엄격합니다.
no_eligible_proxy결과가 나왔다고 해서exitCountries없이 재시도해도 된다는 의미는 아닙니다. 요구사항을 유지하거나 변경하기 전에 사용자에게 문의하세요. - 대용량 본문은 기본적으로 인라인 처리됩니다(v0.2.0+). 해당 기능을 지원하는 클라이언트에서는
offload_large: true을(를) 전달하여resource_link+resources/read(으)로 전환하세요.
여기에 없는 레시피가 필요하신가요?
사용 사례를 적어 support@foura.ai(으)로 이메일을 보내주세요. MCP 서버는 REST API 릴리스와 동일한 주기로 새 프롬프트를 제공합니다.