يشرح هذا الدليل كيفية ربط خوادم بروتوكول سياق النموذج (MCP) الخارجية بوكلاء الذكاء الاصطناعي في Discourse، مما يسمح باستخدام أي مزود أداة متوافق مع MCP مباشرة داخل بوت الذكاء الاصطناعي.
مستوى المستخدم المطلوب: المسؤول
ما هو “أضف بروتوكول سياق النموذج الخاص بك” (Bring Your Own MCP)؟
بروتوكول سياق النموذج هو معيار مفتوح (اقترحه Anthropic في الأصل) يسمح لوكلاء الذكاء الاصطناعي بالتواصل مع خوادم الأدوات الخارجية عبر واجهة HTTP/JSON-RPC قياسية. يقوم خادم MCP بعرض قائمة من “الأدوات” — وهي دوال ذات مدخلات محددة الأنواع — يمكن لنموذج اللغة الكبير (LLM) استدعاؤها لإنجاز المهام.
يعمل Discourse AI الآن كـ عميل MCP. يمكنك تسجيل أي خادم MCP عبر HTTPS في لوحة الإدارة، ويقوم Discourse باكتشاف الأدوات المتاحة فيه، لتصبح هذه الأدوات من العناصر الأساسية داخل أي وكيل ذكاء اصطناعي تختاره. لا حاجة لكتابة أي كود JavaScript؛ حيث يتم تعريف الأدوات بواسطة الخادم البعيد.
يختلف هذا عن أدوات السكربت المخصصة التي تتطلب كتابة كود JavaScript يعمل داخل Discourse. مع MCP، تقوم بإحضار خادم خارجي يعمل بالفعل.
ملخص
- تسجيل خادم MCP (عنوان URL + مصادقة اختيارية)
- يقوم Discourse باكتشاف أدوات الخادم وتخزينها مؤقتًا تلقائيًا
- تعيين الخادم لواحد أو أكثر من وكلاء الذكاء الاصطناعي
- تحديد الأدوات التي يمكن لكل وكيل استخدامها (اختياري)
- يتم استدعاء الأدوات بواسطة نموذج اللغة الكبير (LLM) أثناء التشغيل، ويتم توجيهها عبر Discourse إلى الخادم الخارجي
تسجيل خادم MCP
انتقل إلى:
الإدارة → الإضافات → Discourse AI → الأدوات → علامة التبويب خوادم MCP → خادم MCP جديد
املأ الحقول التالية:
| الحقل | الوصف |
|---|---|
| الاسم | تسمية مقروءة للبشر (تظهر في محرر الوكيل والسجلات) |
| الوصف | الغرض من هذا الخادم (مرجع للمسؤول) |
| عنوان URL | نقطة نهاية HTTPS الخاصة بخادم MCP — يجب أن يكون عنوان HTTPS عام، ولا يُسمح بعناوين IP خاصة |
| المصادقة | أحد الخيارات التالية: بدون مصادقة، مفاتيح المصادقة في الرأس، أو OAuth |
| مهلة الوقت (بالثواني) | المدة التي ينتظرها Discourse لكل طلب — الافتراضي 30، والحد الأقصى 300 |
| مفعل | تبديل لتعطيل الخادم مؤقتًا دون حذفه |
يجب أن تستخدم عناوين URL بروتوكول HTTPS. يتم حظر
localhostوالعناوين الخاصة حسب معيار RFC-1918 (يتم فرض حماية منع استغلال الخوادم SSRF من جانب الخادم).
خيارات المصادقة
بدون مصادقة
الخادم متاح للجمهور. لا يتم إرسال أي بيانات اعتماد.
مفاتيح المصادقة في الرأس (Header Credential)
يتم حقن قيمة سرية كرأس HTTP في كل طلب.
- قم أولاً بإنشاء مفتاح مصادقة تحت الإدارة → الذكاء الاصطناعي → مفاتيح المصادقة
- قم باختياره كـ مفتاح مصادقة في نموذج خادم MCP
- حدد اسم رأس المصادقة (الافتراضي:
Authorization) - حدد بادئة نظام المصادقة الاختيارية (الافتراضي:
Bearer)
سيكون رأس الطلب المرسَل إلى خادم MCP كالتالي:
Authorization: Bearer <قيمة-سرية>
يمكنك تغيير اسم الرأس ونظام المصادقة ليتناسب مع أي أسلوب مصادقة يتطلبه خادمك (على سبيل المثال، X-Api-Key: <قيمة> عن طريق ترك نظام المصادقة فارغًا).
OAuth
يطبق Discourse تدفق OAuth 2.0 + PKCE كاملًا كعميل MCP. يدعم هذا خوادم MCP التي تحمي أدواتها خلف OAuth.
خطوات الإعداد:
- اضبط المصادقة على
OAuth - اختر تسجيل العميل:
- مستند بيانات تعريف العميل (الافتراضي) — ينشر Discourse بيانات تعريف عميل OAuth الخاص به في
https://your-site.com/discourse-ai/mcp/oauth/client-metadata. إذا كان خادم MCP يدعم RFC 7591 لتسجيل العملاء ديناميكيًا، فسيقوم Discourse بالتسجيل تلقائيًا - بيانات اعتماد عميل يدوية — أدخل معرف عميل OAuth المسجل مسبقًا واختر مفتاح سري لعميل OAuth
- مستند بيانات تعريف العميل (الافتراضي) — ينشر Discourse بيانات تعريف عميل OAuth الخاص به في
- اضبط نطاقات OAuth (اختياري، مفصولة بمسافات)
- احفظ الخادم
- انقر على اتصال — سيقوم Discourse بإعادة توجيهك عبر صفحة التفويض الخاصة بمزود الخدمة
- بعد التفويض، ستعود إلى لوحة الإدارة وسيظهر الحالة متصل
خيارات OAuth المتقدمة (قم بتفعيل “إظهار الخيارات المتقدمة”):
| الخيار | الغرض |
|---|---|
| معلمات تفويض OAuth | كائن JSON يتم دمجه في طلب التفويض (مثل {"access_type":"offline"}) |
| معلمات الرمز المميز لـ OAuth | كائن JSON يتم دمجه في طلبات تبادل الرموز |
| يتطلب رمز تحديث | فشل الاتصال إذا لم يعيد المزود رمز تحديث |
يقوم Discourse بتحديث رموز الوصول تلقائيًا قبل انتهاء صلاحيتها ويعيد المحاولة في حال ظهور خطأ 401 إذا كان رمز التحديث متاحًا.
اختبار الاتصال
قبل تعيين خادم لوكيل، استخدم زر اختبار الاتصال في نموذج المحرر. يقوم هذا فورًا بتهيئة جلسة MCP، واستدعاء tools/list، ثم يعيد:
- إصدار البروتوكول المتفق عليه لـ MCP
- عدد الأدوات المكتشفة
- أسماء جميع الأدوات
إذا فشل الاختبار، يتم عرض رسالة الخطأ من الخادم (أو مؤشر المهلة) مباشرة.
كيف يكتشف Discourse الأدوات
يتبع Discourse مواصفات MCP 2025-03-26. تسلسل الاتصال هو:
Discourse → POST / { method: "initialize", params: { protocolVersion, capabilities, clientInfo } }
Server → { result: { protocolVersion, capabilities } } + رأس Mcp-Session-Id
Discourse → POST / { method: "notifications/initialized" } (اكتمال المصافحة للجلسة)
Discourse → POST / { method: "tools/list", session_id: … }
Server → { result: { tools: [ { name, description, inputSchema } … ] } }
يتم تخزين تعريفات الأدوات مؤقتًا لمدة ساعة واحدة لكل خادم. بعد انتهاء صلاحية التخزين المؤقت، تقوم مهمة في الخلفية بتحديثه بشكل شفاف. مفتاح التخزين المؤقت محدد لكل موقع/خادم، لذا فإن التثبيتات متعددة المواقع معزولة.
يمكنك أيضًا تشغيل التحديث يدويًا بالنقر على اختبار الاتصال — فهذا يجلب دائمًا البيانات الحية.
يتم تحديث حالة صحة الخادم (healthy / error) مع كل تحديث للتخزين المؤقت.
تعيين خوادم MCP لوكلاء الذكاء الاصطناعي
بمجرد تسجيل خادم، قم بتعيينه لوكيل:
- انتقل إلى الإدارة → الإضافات → Discourse AI → الوكلاء وقم بتحرير أو إنشاء وكيل
- انتقل لأسفل إلى قسم خوادم MCP (أسفل قسم الأدوات العادي)
- يعرض القائمة جميع خوادم MCP المفعلة مع عدد أدواتها وتكلفة الرموز التقديرية
- فعل الخادم — يصبح الآن متاحًا لذلك الوكيل
نصيحة: افتراضيًا، يتم جعل جميع الأدوات من خادم ما متاحة للوكيل. النص في اللغة المحلية يقول ذلك بوضوح: “تعرض خوادم MCP المختارة جميع أدواتها افتراضيًا. قم بتضييقها لكل وكيل لتقليل استخدام الرموز والتركيز على اختيار الأدوات.”
تحديد أدوات محددة لكل وكيل
زيادة عدد الأدوات المتاحة تزيد من تكلفة الرموز لكل رسالة (يتم إرسال تعريف كل أداة إلى النموذج في موجه النظام). للحفاظ على الأمور خفيفة:
- في محرر الوكيل، بجانب خادم MCP المعين، انقر على اختر الأدوات
- تظهر نافذة منبثقة كل الأداة التي يعرضها الخادم حاليًا، مع وصفها وقائمة المعاملات
- حدد فقط الأدوات التي يحتاجها هذا الوكيل
- انقر على حفظ — سيصبح الوكيل قادرًا الآن على رؤية المجموعة المحددة فقط
تخزن جدول الربط ai_agent_mcp_servers selected_tool_names كمصفوفة JSONB. المصفوفة الفارغة تعني “جميع الأدوات مفعلة”.
تسمية الأدوات وحل التعارضات
يجب أن تكون أسماء أدوات MCP فريدة داخل قائمة أدوات وكيل واحد (بما في ذلك الأدوات المدمجة في الوكيل وأدوات السكربت المخصصة). يتعامل Discourse مع التعارضات تلقائيًا:
- إذا كان خادمان مختلفان لـ MCP يعرضان أداة بنفس الاسم، يقوم Discourse بتسميتها بأسماء نطاق:
servername__toolname - إذا كانت أداة مدمجة في Discourse وأداة MCP تشتركان في نفس الاسم، يتم تسمية أداة MCP أيضًا بأسماء نطاق
- إذا استمرت التصادمات بعد التسمية، يتم إضافة بادئة رقمية (
_2،_3، …)
قد يختلف اسم الدالة function_name المستخدم في استدعاء نموذج اللغة الكبير (LLM) عن اسم الأداة الخام tool_name على خادم MCP. يتم التعامل مع هذا بشكل شفاف — حيث تقوم فئة أداة MCP دائمًا بتخزين tool_name_value الأصلي بشكل منفصل وتستخدمه عند استدعاء الخادم.
كيفية عمل استدعاءات الأدوات أثناء التشغيل
عندما يقرر نموذج اللغة الكبير (LLM) استخدام أداة MCP:
- إعادة استخدام الجلسة: يبحث Discourse عن معرف جلسة MCP مخزن مؤقتًا لهذا الخادم في سياق البوت الحالي (
context.mcp_state). يتم إنشاء الجلسات لكل سلسلة رد من البوت وإعادة استخدامها عبر استدعاءات الأدوات لنفس الخادم. - تهيئة إذا لزم الأمر: إذا لم توجد جلسة، يتم تشغيل مصافحة جديدة
initialize+notifications/initialized. - استدعاء:
POST /مع{ method: "tools/call", params: { name: tool_name, arguments: params } } - انتهاء صلاحية الجلسة: إذا عاد الخادم بـ
404(جلسة منتهية الصلاحية)، يعيد Discourse التهيئة تلقائيًا ويعيد المحاولة مرة واحدة. - تطبيع الاستجابة: يتم دمج عناصر محتوى MCP من النوع
text. يتم تسلسل عناصر غير النصية إلى JSON. يتم عرضstructuredContentبتنسيق JSON جميل. - نتيجة الخطأ: إذا عاد الخادم بـ
isError: true، يتلقى البوت رسالة خطأ بدلاً من نتيجة.
يمكن أن تكون استجابة الخادم JSON عاديًا أو تيار SSE — يتعامل Discourse مع كليهما.
عرض تكلفة الرموز
في محرر الوكيل، يعرض كل خادم MCP معين عددًا تقديريًا من الرموز. يتم حساب ذلك باستخدام مفسر الرموز OpenAI cl100k_base المطبق على التوقيع الكامل JSON لكل أداة (الاسم + الوصف + مخطط الإدخال). هذا تقدير — التكلفة الفعلية تعتمد على مفسر الرموز الخاص بنموذج اللغة الكبير (LLM).
يتم عرض تفصيل تكلفة الرموز لمساعدتك في اتخاذ قرارات مستنيرة بشأن أي خوادم وأدوات تعيين لوكيل معين.
استكشاف الأخطاء وإصلاحها
| العرض | ما يجب التحقق منه |
|---|---|
| فشل اختبار الاتصال مع مهلة | زد مهلة الوقت (بالثواني). الافتراضي 30. إذا كان الخادم بطيئًا في التهيئة، جرب 60–120. |
| نجح الاختبار ولكن الأدوات لا تظهر في الوكيل | تأكد من أن الخادم مفعل وأن الوكيل قد فعله في قسم خوادم MCP الخاص به. |
| حالة OAuth تظهر “تحتاج إلى انتباه” | يتم عرض آخر خطأ OAuth في نموذج المحرر. الأسباب الشائعة: انتهاء صلاحية رمز التحديث (انقر على إعادة الاتصال)، عاد الخادم بنطاقات غير متوقعة، أو عنوان URL لبيانات تعريف العميل غير متاح من خادمك. |
تبدو أسماء الأدوات مثل myserver__sometool |
طبيعي — كان هناك أداة أخرى (مدمجة أو من خادم آخر) بنفس الاسم. يرى نموذج اللغة الكبير (LLM) ويستخدم هذا الاسم المسمى تلقائيًا. |
| تظهر الصحة “خطأ” بعد فترة | لم تتمكن مهمة التحديث في الخلفية من الوصول إلى الخادم. تحقق من /logs في موقعك وتأكد من إمكانية الوصول إلى خادم MCP من مضيف Discourse. |
| توقفت الأدوات عن العمل في منتصف المحادثة | انتهاء صلاحية الجلسة. يعيد Discourse المحاولة تلقائيًا مرة واحدة لكل استدعاء أداة، ولكن إذا كان الخادم يعيد التشغيل باستمرار، فاقصر مدة صلاحية الجلسة الخاصة به أو تحقق من سجلات الخادم. |
للتصحيح الأعمق، قم بتمكين الوصول إلى سجلات المحادثات عبر ai_bot_debugging_allowed_groups وقم بفحص سجل المحادثة الكامل.
مرجع تقني
تفاصيل بروتوكول MCP
| الخاصية | القيمة |
|---|---|
| إصدار البروتوكول | 2025-03-26 |
| النقل | HTTP POST (JSON-RPC 2.0) |
| دعم SSE | نعم (لتيار استجابات tools/call) |
| إدارة الجلسة | رأس HTTP Mcp-Session-Id |
| الحد الأقصى لحجم استجابة الجسم | 5 ميجابايت |
| عميل User-Agent | Discourse AI MCP Client / <version> |
دعم مخطط JSON
يقوم Discourse بحل هياكل مخطط JSON التالية في تعريفات inputSchema للأداة قبل تمريرها إلى نموذج اللغة الكبير (LLM):
$ref— يتم حلها مقابل$defs/definitionsلمخطط الجذرallOf— يتم دمجها (يتم دمج الخصائص ومصفوفات المطلوبة بدمج الاتحاد)anyOf/oneOf— يتم استخدام النسخة الأولى غيرnull
ملفات المصدر ذات الصلة
plugins/discourse-ai/lib/mcp/client.rb— عميل HTTP لـ MCP (الجلسة، الاستدعاء، إعادة محاولة OAuth)plugins/discourse-ai/lib/mcp/tool_registry.rb— تخزين الأدوات مؤقتًا، وحل التعارضاتplugins/discourse-ai/lib/agents/tools/mcp.rb— فئة أداة تغلف استدعاءات MCP لتشغيل الوكيلplugins/discourse-ai/app/models/ai_mcp_server.rb— نموذج الخادم، إدارة رموز OAuthplugins/discourse-ai/app/models/ai_agent_mcp_server.rb— اختيار الأداة لكل وكيلplugins/discourse-ai/lib/mcp/oauth_flow.rb— تدفق OAuth 2.0 + PKCE
مواضيع ذات صلة
- بوت الذكاء الاصطناعي – أدوات مخصصة (قائمة على السكربت)
- دليل شخصية/وكيل Discourse AI
- Discourse MCP هنا! (Discourse كـ خادم MCP*)
ميزة Discourse كخادم MCP (discourse/discourse-mcp) هي المكمل لهذا: فهي تسمح لعملاء الذكاء الاصطناعي الخارجيين (Claude Code، Cursor، إلخ) بقراءة موقع Discourse الخاص بك وكتابته. هذا الدليل هو العكس — فهو يسمح لوكلاء الذكاء الاصطناعي في Discourse باستدعاء خوادم MCP الخارجية.