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