استضافة MCP على Cloudflare: Code Mode وServer Portals والإعداد
انشر خادم MCP بعيدًا على Cloudflare Workers باستخدام McpAgent وOAuth، وقلّص سياق الأدوات باستخدام نمط البحث والتنفيذ في Code Mode، ثم اجمع خوادمك خلف MCP Server Portal مع سياسات الوصول في Zero Trust وتصفية الأدوات وسجلات الوصول.
يعمل خادم Model Context Protocol (MCP) الخاص بك بسلاسة على حاسوبك المحمول. ثم يطلب زميلك الرابط، ويحتاج محرر ثانٍ إليه على جهاز آخر، ويسأل أحدهم من فريق الأمان من يحق له استدعاء أي أداة. العملية المحلية لا تستطيع الإجابة عن أي من هذه الأسئلة. تقدّم لك Cloudflare ثلاثة عناصر لهذه المرحلة: Workers لاستضافة الخادم، وCode Mode لتقليص ما يحتاج النموذج إلى قراءته، وMCP Server Portals لوضع كل خادم خلف باب واحد خاضع للتحكم. فيما يلي ستجد كل عنصر بالترتيب، مع الأوامر والإعدادات والمزالق المهمة، حتى تنتقل من مجلد فارغ إلى إعداد خاضع للحوكمة دون تخمين.
لماذا تستضيف MCP على Cloudflare
الخوادم المحلية تصل إلى سقف
خادم stdio هو عملية فرعية لعميل واحد على جهاز واحد. هذا يناسب مشروع عطلة نهاية أسبوع. يتوقف عن العمل حين يظهر شخص ثانٍ: يثبّت كل فرد نسخته الخاصة، وتبقى الأسرار في ملفات إعداد محلية، ولا يستطيع أحد معرفة الأدوات التي يجري استدعاؤها. الخادم البعيد يقلب الوضع في كل واحدة من هذه المشكلات. تحصل على رابط واحد، ونشر واحد، ومكان واحد لقراءة السجلات.
يبقى الخيار المحلي أفضل في حالة واحدة: أداة تتعامل مع ملفات على جهاز شخص واحد، مثل مجلد ملاحظات خاص. الاستضافة البعيدة مخصصة للأدوات التي يشترك فيها عدة أشخاص أو عدة وكلاء.
ما الذي تقدمه Workers
تشغّل Workers كودك على شبكة Cloudflare للحافة، قريبًا ممن يستدعيه. وبالنسبة لـMCP تحديدًا، توفر Cloudflare ثلاثة مكونات أساسية:
McpAgent، وهي فئة في Agents SDK تتولى طبقة النقل البعيدة. يقدّم SDK بروتوكول Streamable HTTP نيابةً عنك.
workers-oauth-provider، وهي مكتبة موفّر OAuth 2.1 تغلّف Worker الخاص بك وتضيف التفويض إلى نقاط نهايته، بما فيها نقاط MCP.
mcp-remote، وهو محوّل يتيح للعملاء الذين يتحدثون stdio فقط الاتصال بخادم بعيد.
الحاجة
خادم stdio محلي
خادم بعيد على Workers
من يمكنه استخدامه
جهاز واحد
أي شخص لديه الرابط وتسجيل دخول
التحديث
إعادة التثبيت على كل جهاز
wrangler deploy واحد
الأسرار
ملفات إعداد محلية
أسرار Worker
حالة كل جلسة
ذاكرة العملية
Durable Objects
الرؤية
لا يوجد شيء مدمج
سجلات وصول Portal
💡 تذكير: البعيد لا يعني العام. تعامل مع الرابط كواجهة API مكشوفة للإنترنت منذ النشر الأول.
انشر أول خادم بعيد لك
البدء من القالب
تحافظ Cloudflare على قالب لخادم بلا تسجيل دخول، وهو أسرع طريقة لرؤية الأجزاء المتحركة:
npm create cloudflare@latest -- my-mcp-server --template=cloudflare/ai/demos/remote-mcp-authless
cd my-mcp-server
npm start
يستمع خادمك الآن محليًا على http://localhost:8788/mcp. لا يلزم تثبيت أي شيء آخر.
كتابة فئة McpAgent
قلب المشروع فئة تمتد من McpAgent. تسجّل الأدوات داخل init()، تمامًا كما تفعل مع SDK TypeScript الرسمي:
import { McpAgent } from "agents/mcp";
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { z } from "zod";
export class MyMCP extends McpAgent {
server = new McpServer({ name: "math", version: "1.0.0" });
async init() {
this.server.tool("add", { a: z.number(), b: z.number() }, async ({ a, b }) => ({
content: [{ type: "text", text: String(a + b) }],
}));
}
}
export default MyMCP.serve("/mcp");
هذه الفئة هي أيضًا Durable Object، ولهذا يعلن ملف إعداد المشروع عن ربط وترحيل خاص بها. تمنح Durable Objects كل جلسة MCP حالتها الخاصة دون قاعدة بيانات من جانبك. إذا كانت أدواتك تعيد نتائج خالصة فقط، فلن تحتاج إلى لمس هذه الحالة أبدًا. لكن بمجرد أن تتبّع سلة تسوق أو مسودة أو محادثة طويلة، ستكون سعيدًا بوجودها.
الاختبار والنشر
شغّل MCP Inspector في طرفية ثانية ووجّهه إلى الرابط المحلي:
npx @modelcontextprotocol/inspector@latest
استدعِ أداتك من واجهته الويب. عندما تعمل كما ينبغي، انشر:
npx wrangler@latest deploy
يصبح خادمك بعد ذلك متاحًا على https://my-mcp-server.<your-account>.workers.dev/mcp. العملاء الذين يتحدثون stdio فقط، مثل Claude Desktop، يتصلون عبر المحوّل:
سجّل تطبيقي OAuth على GitHub، واحدًا للتطوير المحلي وآخر للإنتاج، حتى لا يصل سر تطوير مُسرَّب إلى بيئة الإنتاج أبدًا.
خزّن بيانات الاعتماد كأسرار Worker باستخدام npx wrangler secret put GITHUB_CLIENT_ID وnpx wrangler secret put GITHUB_CLIENT_SECRET، إضافةً إلى سر تشفير ملفات تعريف الارتباط المذكور في README القالب.
أنشئ مخزن الجلسات باستخدام npx wrangler kv namespace create "OAUTH_KV".
الصق معرّف النطاق (namespace ID) المُعاد في wrangler.jsonc، ثم انشر.
تحت الغطاء، يغلّف workers-oauth-provider Worker الخاص بك، فتتلقى أدواتك تفاصيل المستخدم بعد مصادقتها كمعامل. لا تكتب فحوص الرموز بيديك، وهذه هي الفكرة كلها.
💡 نصيحة: GitHub خيار واحد فقط. يمكن لمكتبة الموفّر نفسها أن تقف أمام أي موفّر هوية OAuth، وهذا مهم حين تخطط لوضع الخادم خلف Portal.
كيف يخفّض Code Mode تكلفة التوكنات
قوائم الأدوات الطويلة تستهلك السياق
كل تعريف أداة تعرضه هو نص يجب أن يقرأه النموذج قبل أن يفعل أي شيء مفيد. هذا قابل للإدارة مع عشر أدوات، لكنه ينهار مع منصة كاملة. تفيد Cloudflare بأن عرض واجهة API الخاصة بها، التي تضم أكثر من 2,500 نقطة نهاية، كأدوات MCP عادية سيستهلك أكثر من 1.17 مليون توكن. مع Code Mode، يتسع النطاق نفسه في نحو 1,000 توكن.
هناك تكلفة ثانية تحظى باهتمام أقل. في حلقة استدعاء الأدوات المعتادة، تعود كل نتيجة وسيطة عبر النموذج. إذا احتاجت الخطوة الثانية إلى مخرجات الخطوة الأولى، يقرؤها النموذج ويعيد صياغتها ثم يرسلها إلى الأمام. يتيح Code Mode للنموذج أن يكتب برنامجًا قصيرًا بدلًا من ذلك. تعمل الاستدعاءات المترابطة داخل الصندوق المعزول، وتبقى البيانات الوسيطة هناك، ولا يعود إلى المحادثة إلا الجواب النهائي. جولات ذهاب وإياب أقل تعني نصًا أقل لقراءته، وفرصًا أقل لنسخ قيمة بشكل خاطئ.
البحث والتنفيذ عمليًا
يعرض نمط API الكبير، openApiMcpServer()، أداتين فقط:
search يشغّل كودًا كتبه النموذج على مستند OpenAPI داخل صندوق معزول، ويعيد فقط العمليات أو المعاملات أو المخططات التي تحتاجها المهمة.
execute يشغّل كودًا كتبه النموذج مع دالة طلب موثّقة يوفرها Worker الخاص بك.
كما تقول الوثائق، لا يدخل سياق النموذج إلا المجموعة المُعادة. يطرح النموذج سؤالًا ضيقًا، ويحصل على جواب ضيق، ثم يتصرف.
تخيّل طلبًا مثل اعرض سجلات DNS لنطاقي. يكتب النموذج أولًا مقطعًا صغيرًا لـsearch يصفّي مسارات OpenAPI إلى عمليات DNS، فيعود بعدد قليل من التطابقات بدلًا من الآلاف. ثم يكتب مقطعًا لـexecute يستدعي العملية الصحيحة عبر دالة الطلب الخاصة بك ويعيد الحقول التي يحتاجها فقط. جولتان قصيرتان تحلان محل قائمة أدوات بحجم دليل الهاتف.
لبناء ذلك، تحتاج إلى مشروع Workers، ومستند OpenAPI 3.x، وطريقة يُنفَّذ بها توثيق الطلبات من جانب الخادم.
الصندوق المعزول يحتوي الكود
يعمل الكود الذي يكتبه النموذج داخل Worker معزول، والوصول الصادر المباشر إلى الشبكة محجوب افتراضيًا. لا يستطيع الكود المُولَّد الوصول إلى العالم الخارجي إلا عبر أدوات MCP في المصدر الأصلي أو عبر دالة الطلب التي توفرها. هذا افتراض قوي، لكنه لا يقوم بالتفويض عنك:
طبّق الصلاحيات داخل معالجات أدواتك أو دالة الطلب قبل حدوث أي أثر جانبي.
لا تضع بيانات الاعتماد أبدًا في نتائج الأدوات أو في مستند OpenAPI.
اعتبر دالة الطلب المكان الوحيد الذي يمكن أن يسبب فيه طلب سيئ ضررًا فعليًا.
اختر النمط المناسب
codeMcpServer()
openApiMcpServer()
الاستخدام الأمثل
تغليف خادم MCP موجود بمجموعة أدوات يمكن إدارتها
كتالوجات API الكبيرة
ما يراه النموذج
أداة code واحدة تضم تعريفات TypeScript لكل عملية في المصدر الأصلي
أداتان: search و execute
طريقة تنفيذ الاستدعاءات
عبر مساحة أسماء codemode، بحيث تتركب الاستدعاءات المترابطة داخل الصندوق المعزول
عمليات محددة تُستدعى عبر دالة طلب يوفرها المضيف
تكلفة السياق
تنمو مع عدد أدوات المصدر الأصلي
محدودة، لأن النتائج التي تعود فقط هي نتائج search
💡 قاعدة عامة: غلّف ما لديك بالفعل باستخدام codeMcpServer(). استخدم openApiMcpServer() حين تكون قائمة أدواتك كتالوجًا لا صندوق أدوات.
إعداد MCP Server Portal
أُطلقت MCP Server Portals في بيتا مفتوحة في أغسطس 2025 ضمن Cloudflare One. الفكرة بسيطة: توجيه كل طلب MCP عبر نقطة نهاية Portal واحدة، وتطبيق سياسات Zero Trust هناك، وتسجيل كل شيء.
تحقق من المتطلبات أولًا
قبل أن تفتح لوحة التحكم، تأكد من ثلاثة أمور:
لديك نطاق Cloudflare نشط، بإعداد كامل أو جزئي (CNAME).
موفّر هوية مُعدّ في Cloudflare Zero Trust.
خوادمك متاحة عبر HTTP. لا تُدعم خوادم stdio فقط ما لم تغلّفها. يتسع Portal لما يصل إلى 80 خادمًا.
أضف الخوادم، ثم أنشئ Portal
في لوحة التحكم، انتقل إلى Zero Trust > Access controls > MCP Portals وافتح تبويب MCP servers.
اختر Add MCP server. أدخل اسمًا، ومعرّف Server ID مخصصًا اختياريًا، والرابط الكامل للخادم عبر HTTP، وسياسات Access التي تقرر من يراه.
بالنسبة للخوادم التي تفعّل OAuth، استخدم Dynamic Client Registration التلقائي (موصى به) أو أدخل بيانات الاعتماد يدويًا. أضف رابط الاستدعاء (callback URL) للوحة التحكم إلى قائمة السماح لدى موفّر OAuth.
عُد إلى صفحة MCP Portals واختر Add MCP server portal. حدّد اسمًا، ونطاقًا مخصصًا مع نطاق فرعي اختياري، والخوادم المراد إرفاقها، وسياسات الوصول للمستخدمين.
صِل العملاء بـhttps://<subdomain>.<domain>/mcp.
لا يظهر الخادم في Portal إلا للأشخاص الذين يطابقون سياسة Allow. قد تتغير تسميات القوائم أثناء وجود الميزة في البيتا، فثق بلوحة التحكم الحالية أكثر من أي لقطة شاشة.
قلّص الأدوات واضبط المصادقة
داخل إعدادات Portal يمكنك إيقاف المفتاح بجانب أي أداة أو أمر نصي تريد إخفاءه. يعرض كل خادم عدد Tools authorized حتى ترى حجم ما عرضته. بعض الضوابط الجديرة بالمعرفة:
Require user auth يحدد ما إذا كان الناس يسجلون الدخول ببياناتهم الخاصة، أم أن بيانات اعتماد المسؤول هي التي تتولى الوصول.
Namespacing يعرض الأدوات بصيغة {server_id}_{tool_name}، فيمكن لخادمين أن يملكا كلاهما أداة search دون تعارض.
Aliases يعيد تسمية الأدوات والموجّهات على مستوى Portal أو الخادم.
Code Mode يمكن تشغيله على مستوى Portal لتقليل استهلاك التوكنات.
Gateway routing يمكن أن يضيف فحص DLP اختياريًا للبيانات الحساسة.
اقرأ سجلات الوصول
تسجّل سجلات Portal الوقت والحالة واسم الخادم والقدرة والمدة، لكل Portal أو لكل خادم. ويمكن تصديرها عبر Logpush إلى تخزين خارجي أو إلى SIEM. وفي طرح الفريق، هنا تجيب عن السؤال الذي طرحه فريق الأمان في الفقرة الأولى: من استدعى ماذا، ومتى.
ترتيب طرح يحافظ على صغر المفاجآت:
انشر خادمًا واحدًا مع OAuth واختبره في Inspector.
أضفه إلى Portal بسياسة Allow لمجموعة تجريبية فقط.
أوقف أي أداة لا تحتاجها المجموعة التجريبية.
راجع السجلات بعد بضعة أيام بحثًا عن مستدعين غير متوقعين أو استدعاءات فاشلة.
وسّع السياسة، ثم أرفق الخادم التالي.
أخطاء تكلّف ساعات
مشاركة رابط workers.dev بلا تسجيل دخول. يعمل، وهذا بالضبط هو الخطر. أضف OAuth قبل أن يرى أي شخص خارج جهازك العنوان.
سياسة Allow فارغة. المستخدمون الذين يسجلون الدخول إلى Portal ويرون "No allowed servers available, check your Zero Trust Policies" يفتقرون غالبًا إلى سياسة Allow مطابقة على Portal أو على الخادم.
نسيان رابط الاستدعاء. خوادم OAuth لا تتصل حتى يُضاف رابط الاستدعاء للوحة التحكم إلى قائمة السماح لدى موفّرك.
وضع بيانات الاعتماد في مكان يستطيع النموذج قراءته. مع Code Mode، يكون أي شيء في نتيجة أداة أو في مستند OpenAPI مرئيًا للكود الذي كتبه النموذج.
توقع stdio داخل Portal. غلّف الخادم خلف HTTP أولًا، أو استضفه على Workers.
تجاهل Inspector. قد تعمل أداة في محررك ومع ذلك تفشل على الرابط المنشور. اختبر نقطة نهاية /mcp الحية قبل أن تضيفها إلى Portal.
💡 اختبار سريع: افتح Portal كمستخدم ليس في سياسة Allow الخاصة بك. إذا رأيت أي خادم، فسياستك خاطئة.
قرنه بنماذج PicassoIA
اختر نموذجًا للعميل
أي عميل يستدعي خادمك يحتاج نموذجًا قادرًا خلفه. هذه نماذج اللغة من PicassoIA تستحق الاختبار مع أدواتك:
وهي مفيدة أيضًا قبل أن تنشر أي شيء: اطلب من أحدها كتابة أوصاف الأدوات، أو كتابة TypeScript الذي ستغذي به Code Mode، أو مراجعة مستند OpenAPI الخاص بك بحثًا عن عمليات تفضّل ألا تعرضها.
أضف أدوات الصور إلى خادمك
يستطيع Worker استدعاء أي HTTP API، لذلك تستطيع أداة MCP استدعاء واجهة PicassoIA. يقع PicassoIA API على العنوان https://api.picassoia.com/v1، ويقبل رمز توثيق Bearer يبدأ بالقيمة pia_sk_، ويتبع نمط Replicate، فيُنشئ POST /v1/models/{owner}/{name}/predictions مهمة ويقرأ GET /v1/predictions/{id} حالتها. المهام غير متزامنة، ويمكن للحساب تشغيل حتى 5 تنبؤات في وقت واحد.
يتطابق هذا الشكل بدقة مع أداتين: واحدة تبدأ عملية توليد وتعيد معرّفًا، وأخرى تستعلم عن النتيجة. خزّن الرمز باستخدام npx wrangler secret put PICASSOIA_API_TOKEN، ولا تطبعه أبدًا في نتيجة أداة. وإذا فضّلت ألا تبني شيئًا، تقدم PicassoIA أيضًا اتصال MCP الخاص بها، والذي يمنح عميلك نماذج الصور والفيديو نفسها مباشرة.
جرّبه على PicassoIA اليوم
أصبح أمامك المسار كاملًا: Worker يقدم MCP، وOAuth أمامه، وCode Mode للحفاظ على السياق صغيرًا، وPortal لحوكمة كل ذلك. أسرع مكافأة أن تجعل الخادم يفعل شيئًا مرئيًا.
افتح Seedream 5 Pro أو GPT Image 2 أو FLUX 2 Pro واكتب أمرًا نصيًا للصورة التي تتمنى أن يكون مشروعك الأخير قد احتواها. ثم ادفعها أبعد باستخدام Seedance 2.0 أو Veo 3.1 Fast وحوّل الصورة الثابتة إلى حركة. جرّب الإضاءة والعدسة والزاوية حتى تبدو النتيجة كتصوير حقيقي.