أصبح بروتوكول سياق النموذج (Model Context Protocol - MCP) عديم الحالة (stateless) للتو، وهذا التغيير يتيح للمطورين تشغيل خوادم MCP صغيرة على الفئة المجانية من Cloudflare Workers، بشرط أن يظل كل طلب ضمن حد وحدة المعالجة المركزية (CPU) البالغ 10 مللي ثانية الخاص بالمنصة.

لماذا يهم هذا التحول

مهدت خطوتان أخيرتان الطريق لهذا الأمر. أولاً، تخلص جوهر MCP من تصميمه القائم على الجلسات (session-based) وأصبح يعمل الآن بدون عمليات مصافحة (handshakes)؛ حيث يمكن لأي نسخة من الكود معالجة أي طلب. ثانياً، قامت Cloudflare بإيقاف فئة McpAgent وتوصي الآن باستخدام معالجات الطلبات العادية (plain request handlers) للخوادم الجديدة. معاً، يقضي هذان التغييران على الحاجة إلى Durable Objects أو أي وسيلة تخزين أخرى ذات حالة (stateful storage)، والتي كانت العائق الرئيسي لتشغيل MCP على الخطة المجانية.

ما الذي يمكن للفئة المجانية فعله حقاً

قمنا ببناء خادم MCP للقراءة فقط يقوم بتقديم ملفات Markdown من موقع ثابت. يطبق الخادم أداتين — list_articles و get_article — باستخدام جملة switch بسيطة لتوجيه الأساليب (methods). لا توجد حسابات ثقيلة، مجرد جلب أصول ثابتة (static assets).

يختلف حساب وحدة المعالجة المركزية (CPU) في Cloudflare عن إجمالي وقت الاستجابة. يحسب وقت وحدة المعالجة المركزية فقط الدورات المستغرقة في تنفيذ JavaScript الخاص بك؛ بينما يتم استبعاد الوقت المستغرق في انتظار مكالمات الشبكة أو قراءة القرص. هذا التمييز مهم لأن الفئة المجانية تضع حداً أقصى لوحدة المعالجة المركزية عند 10 مللي ثانية لكل طلب، بينما يمكن أن يكون إجمالي زمن الاستجابة (latency) أعلى من ذلك.

كانت قياساتنا على الفئة المجانية كالتالي:

  • server/discover: 0-1 مللي ثانية (CPU)
  • tools/list: 0 مللي ثانية (CPU)
  • get_article (أكبر ملف): 1-2 مللي ثانية (CPU)

حتى أكبر مقال استخدم جزءاً ضئيلاً من ميزانية الـ 10 مللي ثانية. البطء الظاهري في جانب العميل نتج عن انتظار قراءة الملف، وليس عن تنفيذ الكود.

أين تكمن المشكلة في هذا الحد

تشير البيانات إلى نمط واضح:

  • أدوات تقديم البيانات (عمليات القراءة البسيطة، القوائم) تظل بأمان تحت الحد المسموح به.
  • الأدوات كثيفة الحوسبة (التحليل، التصيير، التجزئة، أو أي عمل خوارزمي) يمكن أن تستنفد ميزانية الـ 10 مللي ثانية بسرعة.

إذا كانت الأداة تحتاج إلى معالجة أكثر من مجرد عمليات بسيطة، فسيتعين على المطورين الانتقال إلى خطة Workers المدفوعة. ترفع الخطة التي تكلفتها 5 دولارات الحد إلى 30 ثانية لكل طلب.

من المستفيد، ومن عليه مراقبة الوقت

المواقع الصغيرة التي تستضيف بالفعل ملفات Markdown أو خلاصات RSS يمكنها عرض نقطة نهاية MCP (MCP endpoint) عبر مسار جديد واحد والبقاء على الخطة المجانية. وهذا يعني تكاليف تشغيل أقل وأجزاء متحركة أقل للهواة، أو مواقع التوثيق، أو المدونات ذات الزيارات المنخفضة.

إذا كانت الأداة تحتاج إلى معالجة أكثر من مجرد عمليات بسيطة، فسيتعين على المطورين الانتقال إلى خطة Workers المدفوعة.

ما الذي يجب اختباره قبل الإطلاق

  • قم بتحليل أداء أداتك (Profile): قم بتشغيل بضعة طلبات تمثيلية وتحقق من مقياس وحدة المعالجة المركزية في لوحة تحكم Cloudflare.
  • افصل المسارات الثابتة والديناميكية: أبقِ تقديم الملفات الثابتة على الفئة المجانية، وقم بتوجيه المكالمات كثيفة الحوسبة إلى عامل (worker) مدفوع أو خلفية (backend) أخرى.
  • انتبه لزمن الاستجابة الخفي: لا تُحتسب فترات انتظار الشبكة ضمن وحدة المعالجة المركزية، لكنها لا تزال تؤثر على تجربة المستخدم. فكر في استخدام التخزين المؤقت عند الحافة (edge caching) للملفات التي تقدمها.

وجهة نظر مغايرة: الخطة المجانية ليست بلا حدود

بينما يزيل جوهر البروتوكول عديم الحالة الحاجة إلى Durable Objects، يظل حد الـ 10 مللي ثانية سقفاً صلباً. المطورون الذين يقللون من تقدير تكلفة حتى عمليات التحليل المتواضعة (مثل تحويل Markdown إلى HTML) قد يصطدمون بالحد بشكل غير متوقع. تناسب الفئة المجانية سيناريوهات "التقديم كما هي" (serve-as-is)، وليس إنشاء المحتوى أثناء التشغيل (on-the-fly).

ما الخطوة التالية لـ MCP على Cloudflare

إذا كان موقعك يحتوي بالفعل على محتواه في حاوية ثابتة (static bucket)، فإن إضافة نقطة نهاية MCP قد تكون ببساطة بضعة أسطر من الكود ومسار واحد. يتوافق البروتوكول الآن مع احتياجات الخوادم الصغيرة — نقطة نهاية HTTP بسيطة يمكن استضافتها مجاناً، طالما بقيت تحت سقف الـ 10 مللي ثانية لوحدة المعالجة المركزية.