MCP Recipes

Các công thức MCP

Sáu prompt sẵn sàng để dán mà bạn có thể chạy trong bất kỳ client nào tương thích với MCP (Claude Desktop, Claude Code, Cursor, Windsurf, VS Code) sau khi cài đặt FourA MCP server.

Mỗi công thức sử dụng foura_auto (mặc định thông minh) hoặc một hay nhiều công cụ cấp thấp hơn foura_single, foura_proxy, foura_browser cho một công việc scraping phổ biến. Hai cách để sử dụng chúng:

  1. Gọi prompt tích hợp sẵn, mọi MCP client đều hiển thị các prompt do server cung cấp dưới dạng lệnh gạch chéo hoặc bảng /prompts. Chọn prompt, điền các tham số, chạy. MCP server trả về luồng công việc theo template; LLM thực thi nó với các công cụ phù hợp.
  2. Sao chép đoạn văn bên dưới vào khung chat của riêng bạn. Cùng một hiệu quả, nhưng khó khám phá hơn.

MCP server đi kèm các prompt gốc sau: smart_fetch, scrape_product_page, extract_article, monitor_pricing, check_endpoint_health, bulk_fetch_urls.

Lưu ý về các trang lớn (v0.2.0+): theo mặc định, các nội dung response được trả về nội tuyến trong structuredContent bất kể kích thước, điều này hoạt động trong mọi MCP client bao gồm Claude Desktop. Nếu bạn đang dùng một client hỗ trợ MCP resources/read VÀ bạn muốn tiết kiệm token trên các trang lớn, hãy truyền offload_large: true trong lệnh gọi công cụ. Các response >= 50 KB sau đó sẽ được trả về dưới dạng resource_link mà client của bạn sẽ tải theo yêu cầu. Các prompt tích hợp sẵn bên dưới giả định theo mặc định (nội tuyến).

Nguồn mở trên GitHub; trên npm với tên @fouradata/mcp.

Smart fetch (tự động): bắt đầu tại đây

Công thức đơn giản nhất: cung cấp một URL cho foura_auto và để nó thực hiện các lần thử giới hạn qua các phương thức request khả dụng. Sử dụng nó bất cứ khi nào bạn muốn lấy nội dung và không cần tự chọn công cụ đầu tiên.

Tích hợp sẵn: smart_fetch(url, must_contain?, extract?)

Prompt thủ công:

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.

Khi nào nên sử dụng công thức này: lần thử đầu tiên mà FourA nên chọn phương pháp, đặc biệt khi việc xác thực nội dung có thể phân biệt trang thực với trang bị chặn.

1. Trích xuất dữ liệu trang sản phẩm

Dành cho các trang chi tiết sản phẩm thương mại điện tử, bao gồm các trang web single-page-app và các trang nằm sau thử thách anti-bot.

Tích hợp sẵn: scrape_product_page(url)

Prompt thủ công:

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": "..."}

Khi nào nên dùng công thức này: agent so sánh giá, công cụ thông báo có hàng lại, bảng tính phân tích cạnh tranh.

2. Trích xuất bài viết

Dành cho các bài báo, bài đăng blog, tài liệu kỹ thuật, hoặc bất cứ trang nào bạn muốn lấy văn bản sạch để đọc, loại bỏ thanh điều hướng, quảng cáo và các phần thừa ở footer.

Tích hợp sẵn: extract_article(url)

Prompt thủ công:

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": "..."}

Khi nào đây là công thức phù hợp: một công cụ tóm tắt nghiên cứu, một RSS cho một trang web, một bản tin tóm tắt hàng ngày.

3. Theo dõi giá

Dành cho các trang định giá và ưu đãi sản phẩm, với tùy chọn so sánh với một mức giá mục tiêu.

Tích hợp sẵn: monitor_pricing(url, target_price?)

Lời nhắc thủ công:

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"}

Khi nào công thức này phù hợp: một agent cảnh báo tiết kiệm, công cụ theo dõi giá vé du lịch, công cụ theo dõi giá của đối thủ cạnh tranh B2B.

4. Kiểm tra tình trạng endpoint

Dành cho việc kiểm tra uptime và xác thực API endpoint.

Tích hợp sẵn: check_endpoint_health(url, expected_text?)

Prompt thủ công:

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}

Khi nào đây là phương pháp phù hợp: trình giám sát uptime bên ngoài, bài kiểm tra deploy smoke, trình theo dõi API của bên thứ ba.

5. Lấy danh sách các URL song song

Dành cho các batch job khi bạn muốn lấy metadata của nhiều URL mà không cần đính kèm phần body của chúng.

Được tích hợp sẵn: bulk_fetch_urls(urls)

Prompt thủ công:

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.

Khi đây là phương pháp phù hợp: quét khả năng truy cập sitemap, kiểm toán link-rot, kiểm tra "URL nào trong số 50 URL sản phẩm này vẫn tồn tại".

6. Chọn và tái sử dụng một exit theo quốc gia

Sử dụng cách này khi mục tiêu phải thấy request từ một trong một tập hợp các quốc gia cụ thể, bao gồm các trang JavaScript nơi việc lựa chọn proxy phải diễn ra trước khi trình duyệt render.

Prompt thủ công:

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.

Khi nào đây là phương pháp phù hợp: nội dung theo vùng, thị trường được cấp phép, định giá theo địa lý hoặc bất kỳ quy trình làm việc nào cần một quốc gia hiển thị với đích đến được xác minh và sau đó tái sử dụng exit đã chọn.

7. Trang được bảo vệ: proxy trước, trình duyệt khi cần JavaScript

Sử dụng một nỗ lực proxy có giới hạn với việc xác thực nội dung khi một request trực tiếp trả về một trang bị chặn. Nếu response được xác thực thành công nhưng nội dung mong muốn vẫn cần JavaScript, hãy tái sử dụng chính xác ID proxy đó trong trình duyệt. Một nhà cung cấp bảo vệ hiển thị không phải là sự đảm bảo rằng bất kỳ phương pháp nào cũng sẽ thành công.

Lời nhắc thủ công:

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.

Khi nào nên dùng công thức này: một mục tiêu được bảo vệ nơi HTTP có thể chọn một lối ra hoạt động nhưng nội dung cuối cùng yêu cầu kết xuất JavaScript.

8. Bị chặn trên một trang tĩnh: thay đổi trình duyệt bạn cung cấp

Sử dụng cách này khi một mục tiêu tĩnh trả về trang chặn hoặc trang thử thách và JavaScript không phải là vấn đề. Mặc định, request sẽ cung cấp Google Chrome mới nhất; một số mục tiêu chấp nhận trình duyệt hoặc nền tảng khác.

Lời nhắc thủ công:

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.

Khi nào đây là công thức phù hợp: một mục tiêu server-rendered lọc dựa trên client mà nó thấy thay vì địa chỉ đầu ra. Việc thay đổi trình duyệt được trình bày không tốn thêm chi phí và đáng để thử trước khi thực hiện xoay vòng proxy.

Các mẹo áp dụng cho tất cả

  • Không chắc nên dùng công cụ nào? Sử dụng foura_auto. Công cụ này sẽ chọn phương thức và xử lý việc chuyển cấp cho bạn. Chỉ sử dụng một công cụ cụ thể khi bạn muốn kiểm soát rõ ràng.
  • Bắt đầu với foura_single khi HTTP thuần túy là đủ. Chuyển cấp sang foura_proxy khi request trực tiếp bị chặn và sang foura_browser khi nội dung mong muốn cần JavaScript.
  • Các request header giống trình duyệt được bật theo mặc định (unblocker). Giữ nguyên quy trình xác thực nội dung để trang bị chặn không được tính là thành công, và thay đổi trình duyệt được trình bày bằng browser, os, hoặc version khi mục tiêu từ chối mặc định.
  • Các quy tắc xác thực giúp tiết kiệm số lần thử lại. Thiết lập validate.data.fail:["captcha", "blocked"] để một response bị chặn rõ ràng được tính là thất bại và kích hoạt thử lại/chuyển cấp proxy, thay vì được phân tích cú pháp như một thành công.
  • Phạm vi quốc gia rất nghiêm ngặt. Kết quả no_eligible_proxy không cho phép thử lại mà không có exitCountries; hãy giữ nguyên yêu cầu này hoặc hỏi người dùng trước khi thay đổi.
  • Các phần body lớn được đặt inline theo mặc định (v0.2.0+). Truyền offload_large: true để chuyển sang resource_link + resources/read trên các client hỗ trợ những khả năng đó.

Muốn một công thức không có ở đây?

Gửi email cho support@foura.ai cùng với use case của bạn. MCP server sẽ cung cấp các prompt mới cùng nhịp độ với các bản phát hành REST API.

Cập nhật: 6 tháng 8, 2026