نقل بيانات 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/mcp_settings.json (عام) أو .bob/mcp.json (مشروع):

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

للتطبيق من جانب الـ server، راجع توثيق MCP SDK لـ StreamableHTTPClientTransport.

التوافق مع HTTP+SSE

يمكن للعملاء والـ servers الحفاظ على التوافق مع نقل HTTP+SSE المهجور.

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

نقل SSE (قديم)

يعمل نقل Server-Sent Events (SSE) على server بعيد ويتواصل عبر HTTP/HTTPS. للـ servers البعيدة الجديدة، استخدم نقل Streamable HTTP بدلاً من ذلك.

كيف يعمل نقل SSE

  1. يتصل Bob بنقطة نهاية SSE الخاصة بالـ server عبر طلب HTTP GET
  2. هذا يُنشئ اتصالاً دائماً يمكن فيه للـ server دفع الأحداث إلى Bob
  3. لتواصل العميل مع الـ server، يرسل Bob طلبات HTTP POST إلى نقطة نهاية منفصلة
  4. يحدث التواصل عبر قناتين:
    • تدفق الأحداث (GET): تحديثات من الـ server إلى العميل
    • نقطة نهاية الرسائل (POST): طلبات من العميل إلى الـ server
Client                             Server
  |                                  |
  |---- HTTP GET /events ----------->| (establish SSE connection)
  |<---- SSE event stream -----------| (persistent connection)
  |                                  |
  |---- HTTP POST /message --------->| (client request)
  |<---- SSE event with response ----| (server response)
  |                                  |

خصائص SSE

  • الوصول البعيد: يمكن استضافته على جهاز مختلف عن Bob
  • قابلية التوسع: يمكنه التعامل مع اتصالات عميل متعددة في وقت واحد
  • البروتوكول: يعمل عبر HTTP القياسية (لا حاجة لبروتوكولات خاصة)
  • الاستمرارية: يحافظ على اتصال دائم لرسائل الـ server إلى العميل
  • المصادقة: يمكنه استخدام آليات مصادقة HTTP القياسية

متى تستخدم SSE

نقل SSE مناسب لـ:

  • الوصول البعيد عبر الشبكات
  • سيناريوهات العملاء المتعددين
  • الخدمات العامة
  • الأدوات المركزية التي يحتاج إليها مستخدمون كثيرون
  • التكامل مع خدمات الويب

مثال تطبيق SSE

import express from 'express';

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

// Use SSE transport
const transport = new SSEServerTransport(server);
app.use('/mcp', transport.requestHandler());
app.listen(3000, () => {
  console.log('MCP server listening on port 3000');
});

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

الاختيار بين STDIO والنقل البعيد (Streamable HTTP أو SSE) يؤثر مباشرةً على كيفية نشر وإدارة MCP servers الخاصة بك.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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