الإعدادMCP

وسائل نقل خادم MCP

يدعم MCP آليات نقل للتواصل بين Bob وخوادم MCP.

نظرة عامة

يوفر MCP ثلاثة خيارات نقل، كل منها مناسب لسيناريوهات نشر مختلفة:

لكل وسيلة نقل خصائص ومزايا وحالات استخدام مميزة.

نقل STDIO

يعمل نقل STDIO محليًا على جهازك ويتواصل عبر تدفقات الإدخال/الإخراج القياسية.

كيف يعمل نقل STDIO

  1. يُطلق Bob خادم MCP كعملية فرعية
  2. يتم التواصل عبر تدفقات العملية: Bob يكتب إلى STDIN للخادم، والخادم يرد عبر STDOUT
  3. كل رسالة محدودة بحرف سطر جديد
  4. الرسائل مُنسَّقة كـ JSON-RPC 2.0
Client                    Server
  |                         |
  |---- JSON message ------>| (via STDIN)
  |                         | (processes request)
  |<---- JSON message ------| (via STDOUT)
  |                         |

خصائص STDIO

  • المحلية: يعمل على نفس الجهاز الذي يعمل عليه Bob
  • الأداء: زمن استجابة منخفض جدًا وحمل خفيف (بدون مكدس شبكة)
  • البساطة: تواصل مباشر بين العمليات دون إعداد شبكة
  • العلاقة: علاقة واحد-لواحد بين العميل والخادم
  • الأمان: أكثر أمانًا بطبيعته دون تعرض للشبكة

متى تستخدم STDIO

نقل STDIO مثالي لـ:

  • التكاملات المحلية والأدوات التي تعمل على نفس الجهاز
  • العمليات الحساسة أمنيًا
  • متطلبات زمن الاستجابة المنخفض
  • سيناريوهات العميل الواحد (نسخة Bob واحدة لكل خادم)
  • أدوات سطر الأوامر أو إضافات بيئة التطوير

مثال على تنفيذ STDIO


const server = new Server({name: 'local-server', version: '1.0.0'});
// Register tools...

// Use STDIO transport
const transport = new StdioServerTransport(server);
transport.listen();

نقل Streamable HTTP

نقل Streamable HTTP هو المعيار الحديث للتواصل مع خوادم MCP البعيدة، ويحل محل نقل HTTP+SSE القديم. يعمل عبر HTTP/HTTPS ويتيح تطبيقات خادم أكثر مرونة.

كيف يعمل نقل Streamable HTTP

  1. يوفر الخادم نقطة HTTP endpoint واحدة (MCP endpoint) تدعم طريقتي POST وGET
  2. يُرسل Bob الطلبات إلى هذه المحطة باستخدام HTTP POST
  3. يعالج الخادم الطلب ويُرسل الرد
  4. اختياريًا، يمكن للخادم استخدام Server-Sent Events (SSE) عبر نفس الاتصال لبثّ رسائل أو إشعارات متعددة إلى Bob

هذا يتيح تفاعلات طلب-استجابة أساسية وكذلك بثًا وتواصلًا بدءًا من الخادم أكثر تقدمًا.

Client                             Server
  |                                  |
  |---- HTTP POST /mcp_endpoint ---->| (client request)
  |                                  | (processes request)
  |<--- HTTP Response / SSE Stream --| (server response / stream)
  |                                  |

خصائص Streamable HTTP

  • المعيار الحديث: الطريقة المفضّلة لتطبيقات خوادم MCP البعيدة الجديدة
  • الوصول البعيد: يمكن استضافته على جهاز مختلف عن Bob
  • قابلية التوسع: يمكنه التعامل مع اتصالات عملاء متعددة في آنٍ واحد
  • البروتوكول: يعمل عبر HTTP/HTTPS القياسي
  • المرونة: يدعم طلب-استجابة بسيط والبث المتقدم
  • نقطة واحدة: يستخدم مسار URL واحد لجميع اتصالات MCP
  • المصادقة: يمكنه استخدام آليات مصادقة HTTP القياسية
  • التوافق مع الإصدارات السابقة: يمكن للخوادم الحفاظ على التوافق مع عملاء HTTP+SSE الأقدم

متى تستخدم Streamable HTTP

نقل Streamable HTTP مثالي لـ:

  • جميع تطوير خوادم MCP البعيدة الجديدة
  • الخوادم التي تتطلب تواصلًا قويًا وقابلًا للتوسع ومرنًا
  • التكاملات التي قد تتضمن بيانات مبثوثة أو إشعارات مُرسَلة من الخادم
  • الخدمات العامة أو الأدوات المركزية
  • استبدال تطبيقات نقل SSE القديمة

التفاوض على البروتوكول

عندما يتصل Bob بخادم Streamable HTTP، يستخدم الخيار protocolNegotiation لتحديد كيفية الاتفاق على إصدار البروتوكول. القيمة الافتراضية لخوادم HTTP هي "auto".

القيمةالوصف
"auto"يرسل Bob فحصًا باستخدام server/discover قبل initialize للتفاوض على أعلى إصدار بروتوكول يدعمه الطرفان. الافتراضي لخوادم HTTP.
"legacy"يتخطى Bob الفحص ويتصل مباشرةً باستخدام مصافحة initialize، وهي متوافقة مع جميع خوادم MCP.
{ "pin": "<version>" }يتصل Bob باستخدام إصدار بروتوكول محدد (على سبيل المثال، { "pin": "2024-11-05" }).

إذا انتهت مهلة خادم HTTP مع الرسالة MCP connection timed out after 10000ms، فقد لا يستجيب الخادم للفحص server/discover. اضبط "protocolNegotiation": "legacy" لتخطي الفحص:

{
  "mcpServers": {
    "my-server": {
      "url": "https://your-server-url.com/mcp",
      "protocolNegotiation": "legacy"
    }
  }
}

لمزيد من التفاصيل، راجع التفاوض على البروتوكول في "استخدام MCP في Bob".

مثال على تنفيذ Streamable HTTP

الإعداد في settings.json:

{
  "mcpServers": {
    "StreamableHTTPMCPName": {
      "type": "streamable-http",
      "url": "http://localhost:8080/mcp"
    }
  }
}

للتنفيذ من جانب الخادم، راجع توثيق MCP SDK لـ StreamableHTTPClientTransport.

التوافق مع الإصدارات السابقة لـ HTTP+SSE

لا يرجع عميل MCP في Bob إلى نقل HTTP+SSE. التوجيهات التالية موجّهة لـ مؤلفي الخوادم الذين يريدون إبقاء خادم Streamable HTTP الخاص بهم متاحًا للعملاء الأقدم الذين لا يدعمون Streamable HTTP بعد.

يجب على الخوادم التي تحتاج إلى دعم العملاء الأقدم الاستمرار في استضافة نقطتي SSE (/events) وPOST (/message) من النقل القديم إلى جانب نقطة MCP الجديدة المحددة لنقل Streamable HTTP.

نقل SSE (تمت إزالته)

لم يعد عميل MCP في Bob يدعم نقل HTTP+SSE المستقل (مواصفة MCP 2024-11-05). لا يمكن للخوادم التي تستخدم نقل HTTP+SSE فقط الاتصال بـ Bob.

ملاحظة:

لا يزال SSE كقناة استجابة ضمن اتصال Streamable HTTP مدعومًا. يمكن لـ Bob استقبال تدفقات SSE من خادم Streamable HTTP. ما تمت إزالته هو فقط نقل HTTP+SSE المستقل (ذو نقطتَي /events و/message المنفصلتين).

الانتقال من نقل SSE

إذا كان لديك خادم موجود يستخدم نقل HTTP+SSE، انقله إلى نقل Streamable HTTP أو نقل STDIO:

  • Streamable HTTP: اعرض نقطة MCP واحدة تقبل طلبات HTTP POST. هذا هو المسار الموصى به للخوادم البعيدة. راجع نقل Streamable HTTP.
  • STDIO: إذا كان الخادم يعمل محليًا على نفس جهاز Bob، حوّله إلى خادم STDIO. راجع نقل STDIO.

اعتبارات النشر

يؤثر الاختيار بين STDIO ونقل Streamable HTTP مباشرةً على كيفية نشر خوادم MCP وإدارتها.

STDIO: النشر المحلي

تعمل خوادم STDIO محليًا على نفس الجهاز الذي يعمل عليه Bob:

  • التثبيت: يجب تثبيت الملف التنفيذي للخادم على جهاز كل مستخدم
  • التوزيع: تحتاج إلى توفير حزم تثبيت لأنظمة تشغيل مختلفة
  • التحديثات: يجب تحديث كل نسخة بشكل منفصل
  • الموارد: يستخدم موارد الجهاز المحلي من CPU وذاكرة وقرص
  • التحكم في الوصول: يعتمد على صلاحيات نظام ملفات الجهاز المحلي
  • التكامل: تكامل سهل مع موارد النظام المحلية (ملفات، عمليات)
  • التنفيذ: يبدأ ويتوقف مع Bob (دورة حياة العملية الفرعية)
  • التبعيات: يجب تثبيت أي تبعيات على جهاز المستخدم

مثال على حالة استخدام:

أداة بحث الملفات المحلية باستخدام STDIO ستقوم بما يلي:

  • تعمل على جهاز المستخدم
  • لها وصول مباشر لنظام الملفات المحلي
  • تبدأ عند الحاجة إليها من قِبَل Bob
  • لا تتطلب إعداد شبكة
  • يجب تثبيتها إلى جانب Bob أو عبر مدير الحزم

بعيد: النشر المُستضاف

يمكن نشر الخوادم البعيدة (Streamable HTTP) على خوادم بعيدة والوصول إليها عبر الشبكة:

  • التثبيت: يُثبَّت مرة واحدة على خادم، ويصله مستخدمون كثيرون
  • التوزيع: نشر واحد يخدم عملاء متعددين
  • التحديثات: التحديثات المركزية تؤثر على جميع المستخدمين فورًا
  • الموارد: يستخدم موارد الخادم، لا موارد الجهاز المحلي
  • التحكم في الوصول: يُدار عبر أنظمة المصادقة والتفويض
  • التكامل: تكامل أكثر تعقيدًا مع الموارد الخاصة بالمستخدم
  • التنفيذ: يعمل كخدمة مستقلة (غالبًا بشكل مستمر)
  • التبعيات: تُدار على الخادم، لا على أجهزة المستخدمين

مثال على حالة استخدام:

أداة استعلام قاعدة البيانات باستخدام النقل البعيد ستقوم بما يلي:

  • تعمل على خادم مركزي
  • تتصل بقواعد البيانات ببيانات اعتماد من جانب الخادم
  • تكون متاحة باستمرار لمستخدمين متعددين
  • تتطلب إعداد أمان شبكة مناسب
  • تُنشر باستخدام تقنيات الحاويات أو السحابة

الأساليب الهجينة

تستفيد بعض السيناريوهات من نهج هجين:

  1. STDIO مع وصول للشبكة: خادم STDIO محلي يعمل كوسيط للخدمات البعيدة
  2. بعيد مع أوامر محلية: خادم بعيد يمكنه تشغيل عمليات على جهاز العميل عبر callbacks
  3. نمط البوابة: خوادم STDIO للعمليات المحلية تتصل بخوادم بعيدة للوظائف المتخصصة

مقارنة وسائل النقل

الاعتبارSTDIOStreamable HTTP
الموقعالجهاز المحلي فقطمحلي أو بعيد
العملاءعميل واحدعملاء متعددون
الأداءزمن استجابة أقلزمن استجابة أعلى (حمل الشبكة)
تعقيد الإعدادأبسطأكثر تعقيدًا (يتطلب خادم HTTP)
الأمانآمن بطبيعتهيتطلب إجراءات أمان صريحة
الوصول للشبكةغير مطلوبمطلوب
قابلية التوسعمحدودة بالجهاز المحلييمكن التوزيع عبر الشبكة
النشرتثبيت لكل مستخدمتثبيت مركزي
التحديثاتتحديثات موزّعةتحديثات مركزية
استخدام الموارديستخدم موارد العميليستخدم موارد الخادم
التبعياتتبعيات من جانب العميلتبعيات من جانب الخادم

إعداد وسائل النقل في Bob

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

ما رأيك في هذا الموضوع؟