الإعداد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 القديمة

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

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

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

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

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

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

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

نقل SSE (قديم)

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

كيف يعمل نقل SSE

  1. يتصل Bob بنقطة SSE endpoint للخادم عبر طلب HTTP GET
  2. يُنشئ هذا اتصالًا دائمًا يمكن فيه للخادم دفع الأحداث إلى Bob
  3. للتواصل من العميل إلى الخادم، يُرسل Bob طلبات HTTP POST إلى نقطة منفصلة
  4. يتم التواصل عبر قناتين:
    • تدفق الأحداث (GET): تحديثات من الخادم إلى العميل
    • نقطة الرسائل (POST): طلبات من العميل إلى الخادم
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 القياسي (لا حاجة لبروتوكولات خاصة)
  • الاستمرارية: يحافظ على اتصال دائم لرسائل من الخادم إلى العميل
  • المصادقة: يمكنه استخدام آليات مصادقة 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 وإدارتها.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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