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