نقل بيانات MCP server

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

نظرة عامة

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

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

نقل STDIO

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

كيف يعمل نقل STDIO

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

خصائص STDIO

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

متى تستخدم STDIO

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

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

مثال تطبيق 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 server البعيد، ويحل محل نقل HTTP+SSE القديم. يعمل عبر HTTP/HTTPS ويسمح بتطبيقات server أكثر مرونة.

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

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

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

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

خصائص Streamable HTTP

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

متى تستخدم Streamable HTTP

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

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

مثال تطبيق Streamable HTTP

التهيئة في ~/.bob/settings/mcp.json (عام) أو .bob/mcp.json (مشروع):

{
  "mcpServers": {
    "StreamableHTTPMCPName": {
      "httpURL": "http://localhost:8080/mcp"
    }
  }
}

للتطبيق من جانب الـ server، راجع توثيق 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 servers الخاصة بك.

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

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

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

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

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

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

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

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

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

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

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

  • العمل على server مركزي
  • الاتصال بقواعد البيانات ببيانات اعتماد من جانب الـ server
  • التوفر المستمر لمستخدمين متعددين
  • الحاجة إلى تهيئة أمان شبكة مناسبة
  • النشر باستخدام تقنيات containers أو cloud

الأنماط الهجينة

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

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

مقارنة طرق النقل

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

تهيئة طرق النقل في Bob Shell

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

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