MCP 레시피
MCP 레시피
FourA MCP server를 설치한 후, MCP 호환 클라이언트(Claude Desktop, Claude Code, Cursor, Windsurf, VS Code) 내부에서 바로 복사하여 실행할 수 있는 5가지 프롬프트입니다.
각 레시피는 일반적인 스크래핑 작업을 위해 foura_single, foura_proxy, foura_browser 중 하나 이상을 조정합니다. 이를 사용하는 두 가지 방법은 다음과 같습니다.
- 내장 프롬프트 호출 (모든 MCP 클라이언트는 서버가 제공하는 프롬프트를 슬래시 명령어나
/prompts패널로 표시합니다). 프롬프트를 선택하고 인수를 채운 뒤 실행하십시오. MCP 서버가 템플릿화된 워크플로우를 반환하면, LLM이 적절한 도구를 사용하여 이를 실행합니다. - 아래의 텍스트를 복사하여 자체 채팅에 붙여넣으십시오. 효과는 동일하지만 검색성은 떨어집니다.
MCP 서버는 이를 scrape_product_page, extract_article, monitor_pricing, check_endpoint_health, bulk_fetch_urls와 같은 네이티브 프롬프트로 제공합니다.
대용량 페이지 관련 참고 사항(v0.2.0+): 기본적으로 response body는 크기에 관계없이
structuredContent내에 인라인으로 반환됩니다. 이는 Claude Desktop을 포함한 모든 MCP 클라이언트에서 작동합니다. MCPresources/read를 지원하는 클라이언트를 사용 중이고 대용량 페이지에서 토큰을 절약하고 싶다면, 도구 호출 시offload_large: true를 전달하십시오. 그러면 50 KB 이상의 response는 클라이언트가 필요할 때 가져오는resource_link로 제공됩니다. 아래의 내장 프롬프트는 기본값(인라인)을 가정합니다.
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. Most news and blog sites are server-rendered, so HTTP is fastest (200ms-2s).
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. 엔드포인트 헬스 체크
업타임 프로브 및 API 엔드포인트 검증용입니다.
내장 프롬프트: 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. 여러 호출에 걸쳐 프록시 IP 고정 (도구 간 연동)
연속된 호출이 동일한 클라이언트에서 오는 것처럼 보여야 할 때, 예를 들어 다단계 결제 흐름을 스크래핑하거나, 페이지 렌더링 후 JS 에셋을 가져오는 경우, 작동하는 프록시 하나를 선택하여 해당 ID를 재사용하십시오.
수동 프롬프트:
First, call foura_proxy with maxTries:5 and a quick probe URL (httpbin.org/ip is fine) to find a working proxy. Capture the returned `proxy` ID (looks like "4DZ3VE").
Then for every follow-up call:
- HTTP request: foura_single with the SAME `proxy` value — same exit IP, you preserve any IP-based session.
- Rendered page: foura_browser with the SAME `proxy` value — the browser exits through the same pool IP.
If a specific proxy ID starts failing mid-workflow, call foura_proxy again with ignoreProxies:["<failed_id>"] to get a fresh one.
이 레시피가 적합한 경우: 세션 상태가 IP에 종속된 페이지 스크래핑, 렌더링 후 CSS/JS 하위 리소스 페치, 특정 국가에서 사이트가 어떻게 작동하는지 A/B 테스트, 또는 예측 가능한 송신(egress)이 필요한 모든 다중 호출 흐름.
7. WAF 챌린지 체인 (티어 1: Vercel / Cloudflare / Akamai)
Vercel Security Checkpoint, Cloudflare 'Just a moment', Akamai Bot Manager 등 티어 1 WAF 챌린지 뒤에 있는 사이트를 위한 표준 패턴입니다. 이러한 대상을 상대로 foura_browser를 직접 호출하면 일반적으로 챌린지 이후의 콘텐츠가 아닌 챌린지 페이지가 캡처됩니다. 챌린지의 지연된 리로드가 완료되기 전에 스냅샷이 실행되기 때문입니다. 먼저 foura_proxy를 통해 해결한 다음(통과할 때까지 여러 출구 IP를 시도하여 챌린지를 해제함), 반환된 proxy ID를 foura_browser로 연결하십시오.
수동 프롬프트:
Step 1 — find an exit IP that clears the challenge:
foura_proxy({
maxTries: 30, // tier-1 WAFs typically need this range
request: { method: "GET", url: "<TARGET_URL>", unblocker: true }
})
On success the response carries `proxy: "<BASE36_ID>"`. Capture it.
Step 2 — render the post-challenge page through the same IP:
foura_browser({
url: "<TARGET_URL>",
proxy: "<BASE36_ID>" // reuse the cleared exit
})
If foura_proxy still fails after 30 attempts with the same block,
the gate is likely a country / ASN allowlist (country-licensed
bookmakers, government sites). Rotation will never help — pivot
strategy (different data source, partner agreement, etc.).
이 레시피를 사용해야 하는 트리거:
foura_single이x-vercel-mitigated: challenge또는cf-mitigated: challenge헤더와 함께 상태 코드 429를 반환할 때- 본문 제목이
Vercel Security Checkpoint/Just a moment/Attention Required/We're verifying your browser와 일치할 때 foura_browser가 실제 콘텐츠 대신 작은 챌린지 HTML을 직접 캡처할 때
이 레시피가 적합한 경우: Vercel/Netlify 뒤에 있는 Vercel WAF 호스팅 SPA(iqair.com, 다수의 React 렌더링 마케팅 사이트), 공격 모드 기간 중의 Cloudflare 보호 상점, Akamai 보호 고트래픽 리테일 사이트.
7가지 레시피 모두에 적용되는 팁
- foura_single로 시작하십시오. 가장 빠른 도구(200ms-2s)이며 대부분의 공개 사이트에서 작동합니다. 403/captcha 발생 시 foura_proxy로, JavaScript 콘텐츠가 누락된 경우 foura_browser로 에스컬레이션하십시오.
unblocker:true는 저렴합니다. 네트워크 레벨에서 실제 브라우저와 유사한 헤더를 추가하므로, User-Agent 또는 accept-encoding 스니핑으로 차단하는 사이트도 요청을 통과시킵니다.- 검증 규칙은 재시도를 줄여줍니다.
validate.data.fail:["captcha", "blocked"]를 설정하면 명백히 차단된 응답이 성공으로 파싱되지 않고 실패로 처리되어 재시도 및 프록시 에스컬레이션을 트리거합니다. - 대용량 본문은 기본적으로 인라인으로 반환됩니다(v0.2.0+). 도구 호출 시
offload_large: true를 전달하면resource_link+resources/read방식으로 전환되어 대용량 페이지에서 토큰을 절약할 수 있습니다. 이는resources/read를 지원하는 클라이언트에서만 유용합니다(Claude Desktop은 현재 지원하지 않음).
여기에 없는 레시피를 원하시나요?
사용 사례를 작성하여 support@foura.ai로 이메일을 보내주십시오. MCP 서버는 REST API 릴리스와 동일한 주기로 새로운 프롬프트를 출시합니다.