MCP Recipes

Công thức MCP

Chín prompt sẵn sàng để dán mà bạn có thể chạy bên 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 tác vụ scraping phổ biến. Hai cách sử dụng:

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

MCP server cung cấp sẵn 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, response body được trả về trực tiếp (inline) trong structuredContent bất kể kích thước - điều này hoạt động trên mọi MCP client bao gồm Claude Desktop. Nếu bạn đang dùng client hỗ trợ MCP resources/read VÀ 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 tool. Các response >= 50 KB sau đó sẽ được trả về dưới dạng resource_link để client của bạn tìm nạp theo nhu cầu. Các prompt tích hợp sẵn bên dưới mặc định sử dụng chế độ inline.

Mã nguồn mở trên GitHub; trên npm dưới tên @fouradata/mcp.

Fetch thông minh (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ượt thử có giới hạn qua các phương thức request khả dụng. Sử dụng công thức này bất cứ khi nào bạn muốn lấy nội dung mà 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.

Trường hợp phù hợp với recipe này: lần thử đầu tiên mà FourA cần tự chọn phương thức, đặc biệt khi việc xác thực nội dung có thể phân biệt trang thực tế với trang từ chối truy cập.

1. Thu thập 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 single-page-app và các trang có bước kiểm tra bảo mật trang web.

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

Trường hợp phù hợp: agent so sánh giá, hệ thống thông báo có hàng trở lại, bảng tính phân tích đối thủ cạnh tranh.

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

Dành cho bài báo, bài đăng blog, tài liệu kỹ thuật, hoặc bất kỳ nội dung nào bạn cần văn bản đọc sạch sẽ, không chứa thanh điều hướng, quảng cáo và chân trang gây nhiễu.

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

Trường hợp phù hợp: tóm tắt nghiên cứu, tạo RSS cho một trang web, bản tin tổng hợp hàng ngày.

3. Theo dõi giá

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

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

Prompt thủ công:

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

Trường hợp phù hợp: agent cảnh báo tiết kiệm, công cụ theo dõi giá vé du lịch, trình theo dõi giá đối thủ B2B.

4. Kiểm tra endpoint health

Dành cho uptime probe 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 (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}

Trường hợp phù hợp: giám sát uptime bên ngoài, kiểm tra smoke test khi deploy, theo dõi API của bên thứ ba.

5. Fetch song song một danh sách URL

Dành cho các tác vụ hàng loạt khi bạn cần metadata của nhiều URL mà không cần lấy nội dung body.

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, 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.

Trường hợp nên dùng công thức này: quét khả năng truy cập sitemap, kiểm tra link hỏng (link-rot), hoặc kiểm tra "URL nào trong số 50 URL sản phẩm này còn tồn tại".

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

Sử dụng tùy chọn này khi mục tiêu yêu cầu request phải đến từ một trong các quốc gia cụ thể, bao gồm các trang JavaScript cần chọn proxy 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.

Trường hợp phù hợp để dùng: nội dung theo khu vực, thị trường được cấp phép, giá theo vị trí địa lý, hoặc bất kỳ quy trình nào cần một quốc gia hiển thị với mục tiêu đã được xác minh rồi tái sử dụng exit node đã chọn. Phạm vi theo quốc gia (Country scoping) được bao gồm từ gói Startup trở lên; trên các gói khác foura_proxy sẽ trả về plan_limit_feature, lỗi này không thể khắc phục bằng cách thử lại.

7. Protected page: proxy first, browser when JavaScript is needed

Sử dụng một lượt thử proxy có giới hạn kèm xác thực nội dung khi request trực tiếp trả về trang từ chối. Nếu response đã 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 proxy ID đó trong trình duyệt. Việc nhìn thấy một nhà cung cấp giải pháp bảo vệ không đảm bảo rằng mọi phương pháp đều sẽ thành công.

Manual prompt:

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 giải pháp này: mục tiêu được bảo vệ nơi HTTP có thể chọn một exit node hoạt động nhưng nội dung cuối cùng yêu cầu render bằng JavaScript.

8. Bị chặn trên trang tĩnh: thay đổi trình duyệt bạn giả lập

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

Prompt 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 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.

Khi nào nên dùng công thức này: một mục tiêu kết xuất phía máy chủ (server-rendered) lọc dựa trên client mà nó thấy thay vì địa chỉ IP thoát. Việc thay đổi trình duyệt đại diện không tốn thêm chi phí và rất đáng để thử trước khi thực hiện luân chuyển proxy.

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

  • Không chắc chắn nên dùng công cụ nào? Hãy dùng foura_auto. Công cụ này sẽ tự chọn phương thức và xử lý việc nâng cấp cho bạn. Chỉ 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 thông thường là đủ. Nâng cấp lên foura_proxy khi request trực tiếp bị chặn và lên foura_browser khi nội dung mong muốn cần JavaScript.
  • Header request dạng trình duyệt được bật mặc định (unblocker). Giữ nguyên quy tắc kiểm tra nội dung để trang từ chối không bị tính là thành công, đồng thời thay đổi trình duyệt đại diện bằng browser, os, hoặc version khi mục tiêu từ chối giá trị mặc định.
  • Các quy tắc kiểm tra giúp tiết kiệm lượt thử lại. Thiết lập validate.data.fail:["captcha", "blocked"] để một response rõ ràng bị chặn được tính là thất bại và kích hoạt thử lại/nâng cấp proxy, thay vì bị phân tích cú pháp như một kết quả thành công.
  • Phạm vi quốc gia rất nghiêm ngặt. Kết quả no_eligible_proxy không phải là sự 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.
  • Body lớn được để nội tuyến 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 tính năng đó.

Bạn cần một công thức không có ở đây?

Gửi email tới support@foura.ai kèm trường hợp sử dụng của bạn. MCP server phát hành các prompt mới theo cùng chu kỳ với các bản phát hành REST API.

Cập nhật: 27 tháng 9, 2026