وسائل نقل خادم MCP
يدعم MCP آليات نقل للتواصل بين Bob وخوادم MCP.
نظرة عامة
يوفر MCP ثلاثة خيارات نقل، كل منها مناسب لسيناريوهات نشر مختلفة:
- نقل STDIO (خوادم محلية)
- نقل Streamable HTTP (المعيار الحديث للخوادم البعيدة)
- نقل SSE (خيار بعيد قديم)
لكل وسيلة نقل خصائص ومزايا وحالات استخدام مميزة.
نقل STDIO
يعمل نقل STDIO محليًا على جهازك ويتواصل عبر تدفقات الإدخال/الإخراج القياسية.
كيف يعمل نقل STDIO
- يُطلق Bob خادم MCP كعملية فرعية
- يتم التواصل عبر تدفقات العملية: Bob يكتب إلى STDIN للخادم، والخادم يرد عبر STDOUT
- كل رسالة محدودة بحرف سطر جديد
- الرسائل مُنسَّقة كـ 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
- يوفر الخادم نقطة HTTP endpoint واحدة (MCP endpoint) تدعم طريقتي POST وGET
- يُرسل Bob الطلبات إلى هذه المحطة باستخدام HTTP POST
- يعالج الخادم الطلب ويُرسل الرد
- اختياريًا، يمكن للخادم استخدام 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
- يتصل Bob بنقطة SSE endpoint للخادم عبر طلب HTTP GET
- يُنشئ هذا اتصالًا دائمًا يمكن فيه للخادم دفع الأحداث إلى Bob
- للتواصل من العميل إلى الخادم، يُرسل Bob طلبات HTTP POST إلى نقطة منفصلة
- يتم التواصل عبر قناتين:
- تدفق الأحداث (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) على خوادم بعيدة والوصول إليها عبر الشبكة:
- التثبيت: يُثبَّت مرة واحدة على خادم، ويصله مستخدمون كثيرون
- التوزيع: نشر واحد يخدم عملاء متعددين
- التحديثات: التحديثات المركزية تؤثر على جميع المستخدمين فورًا
- الموارد: يستخدم موارد الخادم، لا موارد الجهاز المحلي
- التحكم في الوصول: يُدار عبر أنظمة المصادقة والتفويض
- التكامل: تكامل أكثر تعقيدًا مع الموارد الخاصة بالمستخدم
- التنفيذ: يعمل كخدمة مستقلة (غالبًا بشكل مستمر)
- التبعيات: تُدار على الخادم، لا على أجهزة المستخدمين
مثال على حالة استخدام:
أداة استعلام قاعدة البيانات باستخدام النقل البعيد ستقوم بما يلي:
- تعمل على خادم مركزي
- تتصل بقواعد البيانات ببيانات اعتماد من جانب الخادم
- تكون متاحة باستمرار لمستخدمين متعددين
- تتطلب إعداد أمان شبكة مناسب
- تُنشر باستخدام تقنيات الحاويات أو السحابة
الأساليب الهجينة
تستفيد بعض السيناريوهات من نهج هجين:
- STDIO مع وصول للشبكة: خادم STDIO محلي يعمل كوسيط للخدمات البعيدة
- بعيد مع أوامر محلية: خادم بعيد يمكنه تشغيل عمليات على جهاز العميل عبر callbacks
- نمط البوابة: خوادم STDIO للعمليات المحلية تتصل بخوادم بعيدة للوظائف المتخصصة
مقارنة وسائل النقل
| الاعتبار | STDIO | Streamable HTTP / SSE |
|---|---|---|
| الموقع | الجهاز المحلي فقط | محلي أو بعيد |
| العملاء | عميل واحد | عملاء متعددون |
| الأداء | زمن استجابة أقل | زمن استجابة أعلى (حمل الشبكة) |
| تعقيد الإعداد | أبسط | أكثر تعقيدًا (يتطلب خادم HTTP) |
| الأمان | آمن بطبيعته | يتطلب إجراءات أمان صريحة |
| الوصول للشبكة | غير مطلوب | مطلوب |
| قابلية التوسع | محدودة بالجهاز المحلي | يمكن التوزيع عبر الشبكة |
| النشر | تثبيت لكل مستخدم | تثبيت مركزي |
| التحديثات | تحديثات موزّعة | تحديثات مركزية |
| استخدام الموارد | يستخدم موارد العميل | يستخدم موارد الخادم |
| التبعيات | تبعيات من جانب العميل | تبعيات من جانب الخادم |
إعداد وسائل النقل في Bob
للاطلاع على معلومات تفصيلية حول إعداد وسائل النقل في Bob، بما في ذلك أمثلة الإعداد، راجع MCP في Bob.