وصفات MCP

وصفات MCP

خمسة مطالبات جاهزة للنسخ واللصق يمكنك تشغيلها داخل أي عميل متوافق مع MCP (مثل Claude Desktop و Claude Code و Cursor و Windsurf و VS Code) بعد تثبيت خادم FourA MCP.

تُنظم كل وصفة أداة واحدة أو أكثر من الأدوات التالية: foura_single أو foura_proxy أو foura_browser لإنجاز مهمة كشط شائعة. هناك طريقتان لاستخدامها:

  1. استدعاء المطالبة المدمجة، يعرض كل عميل MCP المطالبات المقدمة من الخادم كأمر شرطة مائلة (slash command) أو في لوحة /prompts. اختر المطالبة، واملأ الوسائط، ثم شغّلها. يعيد خادم MCP سير العمل المقولب، ويقوم نموذج اللغة الكبير (LLM) بتنفيذه باستخدام الأدوات المناسبة.
  2. نسخ النص أدناه إلى الدردشة الخاصة بك. يؤدي هذا إلى نفس النتيجة، ولكنه أقل سهولة في الاكتشاف.

يشحن خادم MCP هذه المطالبات كمطالبات أصلية: scrape_product_page و extract_article و monitor_pricing و check_endpoint_health و bulk_fetch_urls.

ملاحظة بشأن الصفحات الكبيرة (الإصدار v0.2.0+): بشكل افتراضي، تعود نصوص الاستجابة (response bodies) مضمنة في structuredContent بغض النظر عن حجمها، ويعمل هذا في كل عميل MCP بما في ذلك Claude Desktop. إذا كنت تستخدم عميلاً يدعم ميزة resources/read في بروتوكول MCP وتريد توفير الرموز (tokens) في الصفحات الكبيرة، فمرر offload_large: true في استدعاء الأداة. ستأتي الاستجابات التي تساوي أو تزيد عن 50 كيلوبايت كـ resource_link يجلبها عميلك عند الطلب. تفترض المطالبات المدمجة أدناه الوضع الافتراضي (المضمن).

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. 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. التحقق من سلامة Endpoint

مخصص لفحوصات وقت التشغيل (uptime) والتحقق من صحة 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}

متى تكون هذه الوصفة مناسبة: مراقب خارجي لوقت التشغيل، أو اختبار فحص أولي للنشر (deploy smoke test)، أو مراقب لواجهات برمجة التطبيقات الخارجية (third-party API watchdog).

5. جلب قائمة من عناوين URL بالتوازي

مخصص للمهام الدفعية (batch jobs) حيث تريد الحصول على بيانات وصفية (metadata) حول العديد من عناوين 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.

متى تكون هذه الوصفة مناسبة: فحص إمكانية الوصول لخريطة الموقع، أو تدقيق الروابط المعطلة (link-rot)، أو التحقق من "أي من عناوين URL الخمسين هذه للمنتجات لا يزال موجوداً".

6. تثبيت عنوان IP للـ proxy عبر استدعاءات متعددة (عبر الأدوات)

عندما تحتاج إلى أن تبدو الاستدعاءات المتتالية وكأنها قادمة من نفس العميل، على سبيل المثال، كشط تدفق إتمام الشراء متعدد الخطوات، أو جلب أصول JS لصفحة بعد تصييرها (rendering)، اختر proxy واحدًا يعمل وأعد استخدام معرفه (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.

متى تكون هذه الوصفة مناسبة: كشط الصفحات التي ترتبط فيها حالة الجلسة (session state) بعنوان IP، أو جلب الموارد الفرعية لـ CSS/JS بعد التصيير، أو اختبار A/B لكيفية سلوك الموقع من بلد معين، أو أي تدفق متعدد الاستدعاءات حيث تريد مخرجاً (egress) يمكن التنبؤ به.

7. سلسلة تحديات WAF (الفئة الأولى: Vercel / Cloudflare / Akamai)

النمط النموذجي للمواقع التي تقع خلف تحدي WAF من الفئة الأولى، مثل Vercel Security Checkpoint أو Cloudflare 'Just a moment' أو Akamai Bot Manager. عادةً ما يؤدي استدعاء foura_browser مباشرةً ضد هذه الأهداف إلى التقاط صفحة التحدي بدلاً من المحتوى الذي يظهر بعد التحدي، حيث يتم التقاط اللقطة (snapshot) قبل اكتمال إعادة التحميل المؤجلة للتحدي. قم بحل ذلك عبر foura_proxy أولاً (والذي يتجاوز التحدي من خلال تجربة العديد من عناوين IP للخروج حتى ينجح أحدها)، ثم اربط معرف الـ proxy المسترجع بـ 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>"
  })

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 الحالة 429 مع وجود الـ header ‏x-vercel-mitigated: challenge أو cf-mitigated: challenge
  • يطابق عنوان النص (Body title) العبارات التالية: Vercel Security Checkpoint / Just a moment / Attention Required / We're verifying your browser
  • يلتقط foura_browser مباشرةً ملف HTML صغير للتحدي بدلاً من المحتوى الحقيقي

متى تكون هذه الوصفة مناسبة: تطبيقات الصفحة الواحدة (SPAs) المستضافة على Vercel/Netlify خلف جدار حماية Vercel WAF (مثل iqair.com والعديد من مواقع التسويق المصيرة باستخدام React)، والمتاجر المحمية بواسطة Cloudflare أثناء فترات وضع الهجوم (attack-mode)، ومواقع التجزئة ذات حركة المرور العالية المحمية بواسطة Akamai.

نصائح تنطبق على جميع الوصفات السبع

  • ابدأ بـ foura_single. إنها الأداة الأسرع (من 200 مللي ثانية إلى ثانيتين) وتعمل مع غالبية المواقع العامة. انتقل إلى foura_proxy عند مواجهة الخطأ 403 أو captcha، وإلى foura_browser عند فقدان محتوى JavaScript.
  • خيار unblocker:true غير مكلف. يضيف هذا الخيار عناوين متصفح (headers) واقعية على مستوى الشبكة، مما يسمح بمرور طلبك عبر المواقع التي تفرض قيوداً بناءً على فحص الـ User-Agent أو accept-encoding.
  • قواعد التحقق توفر محاولات الإعادة. اضبط validate.data.fail:["captcha", "blocked"] بحيث تُعتبر الاستجابة المحظورة بوضوح فشلاً وتؤدي إلى بدء محاولة الإعادة أو الانتقال إلى الـ proxy، بدلاً من تحليلها كاستجابة ناجحة.
  • النصوص الكبيرة تكون مضمنة بشكل افتراضي (الإصدار v0.2.0+). مرر offload_large: true في أي استدعاء للأداة للتحول إلى resource_link + resources/read لتوفير الرموز (tokens) في الصفحات الكبيرة، ويكون هذا مفيداً فقط في العملاء الذين يدعمون resources/read (لا يدعم Claude Desktop ذلك حالياً).

هل تريد وصفة غير موجودة هنا؟

أرسل بريداً إلكترونياً إلى support@foura.ai مع توضيح حالة الاستخدام الخاصة بك. يشحن خادم MCP مطالبات جديدة بنفس وتيرة إصدارات REST API.

آخر تحديث: 1 يوليو 2026