تكامل MCP (وصول أدوات الذكاء الاصطناعي)¶
يتضمّن Turbo EA خادم MCP مدمجًا (Model Context Protocol) يتيح لأدوات الذكاء الاصطناعي — مثل Claude Desktop وGitHub Copilot وCursor وVS Code — الاستعلام عن بيانات هندسة المؤسسة لديك وتحديثها مباشرةً. ويمكن لأدوات الذكاء الاصطناعي أيضًا رفع المُخرجات (جداول البيانات، ومخططات BPMN، ومخططات DrawIO، والمستندات الحرّة) وتحويلها إلى بطاقات وعلاقات ومخططات تتلاءم مع النموذج الفوقي القائم. يصادق المستخدمون عبر مزوّد SSO الحالي لديك، وتحترم كل عملية أذوناتهم الفردية.
هذه الميزة اختيارية ولا تبدأ تلقائيًا. فهي تتطلب إعداد SSO، وتفعيل ملف MCP في Docker Compose، وقيام أحد المسؤولين بتشغيلها من واجهة الإعدادات.
كيف يعمل¶
AI Tool (Claude, Copilot, etc.)
│
│ MCP protocol (HTTP + SSE)
▼
Turbo EA MCP Server (:8001, internal)
│
│ OAuth 2.1 with PKCE
│ delegates to your SSO provider
▼
Turbo EA Backend (:8000)
│
│ Per-user RBAC
▼
PostgreSQL
- يضيف المستخدم عنوان URL لخادم MCP إلى أداة الذكاء الاصطناعي لديه.
- عند أول اتصال، تفتح أداة الذكاء الاصطناعي نافذة متصفح للمصادقة عبر SSO.
- بعد تسجيل الدخول، يصدر خادم MCP رمز وصول خاصًا به (مدعومًا بـ JWT الخاص بالمستخدم في Turbo EA).
- تستخدم أداة الذكاء الاصطناعي هذا الرمز لجميع الطلبات اللاحقة. ويجري تحديث الرموز تلقائيًا.
- يمرّ كل استعلام عبر نظام أذونات Turbo EA المعتاد — فلا يرى المستخدمون سوى البيانات التي يملكون صلاحية الوصول إليها.
المتطلبات المسبقة¶
قبل تفعيل MCP، يجب أن يتوفّر لديك:
- SSO مُعَدّ ويعمل — يفوّض MCP المصادقة إلى مزوّد SSO لديك (Microsoft Entra ID أو Google Workspace أو Okta أو OIDC عام). راجع دليل المصادقة والدخول الموحّد.
- HTTPS مع نطاق عام — يتطلب تدفّق OAuth عنوان URI ثابتًا لإعادة التوجيه. انشر النظام خلف وكيل عكسي يُنهي اتصال TLS (Caddy أو Traefik أو Cloudflare Tunnel، وما إلى ذلك).
الإعداد¶
الخطوة 1: تشغيل خدمة MCP¶
خادم MCP هو ملف اختياري في Docker Compose. أضف --profile mcp إلى أمر بدء التشغيل:
docker compose --profile mcp up --build -d
يؤدي هذا إلى تشغيل حاوية Python خفيفة (المنفذ 8001، داخلي فقط) إلى جانب الواجهة الخلفية والواجهة الأمامية. ويوجّه Nginx طلبات /mcp/ إليها تلقائيًا.
الخطوة 2: ضبط متغيرات البيئة¶
أضف هذه المتغيرات إلى ملف .env لديك:
TURBO_EA_PUBLIC_URL=https://your-domain.example.com
MCP_PUBLIC_URL=https://your-domain.example.com/mcp
| المتغير | القيمة الافتراضية | الوصف |
|---|---|---|
TURBO_EA_PUBLIC_URL |
http://localhost:8920 |
عنوان URL العام لمثيل Turbo EA لديك |
MCP_PUBLIC_URL |
http://localhost:8920/mcp |
عنوان URL العام لخادم MCP (يُستخدم في عناوين URI لإعادة توجيه OAuth) |
MCP_PORT |
8001 |
المنفذ الداخلي لحاوية MCP (نادرًا ما يحتاج إلى تغيير) |
الخطوة 3: إضافة عنوان URI لإعادة توجيه OAuth إلى تطبيق SSO لديك¶
في تسجيل التطبيق لدى مزوّد SSO الخاص بك (نفس التطبيق الذي أعددته لتسجيل الدخول إلى Turbo EA)، أضف عنوان URI التالي لإعادة التوجيه:
https://your-domain.example.com/mcp/oauth/callback
هذا ضروري لتدفّق OAuth الذي يصادق المستخدمين عند اتصالهم من أداة الذكاء الاصطناعي لديهم.
الخطوة 4: تفعيل MCP في إعدادات المسؤول¶
- انتقل إلى الإعدادات في منطقة الإدارة وحدّد علامة التبويب AI.
- مرّر إلى قسم MCP Integration (AI Tool Access).
- حرّك المفتاح إلى وضع التفعيل لـ MCP.
- ستعرض الواجهة عنوان URL لخادم MCP وتعليمات الإعداد لمشاركتها مع فريقك.
Warning
يكون المفتاح معطّلًا إذا لم يكن SSO مُعَدًّا. أعدّ SSO أولًا.
ربط أدوات الذكاء الاصطناعي¶
بمجرد تفعيل MCP، شارك عنوان URL لخادم MCP مع فريقك. ويضيفه كل مستخدم إلى أداة الذكاء الاصطناعي لديه:
Claude Desktop¶
- افتح Settings > Connectors > Add custom connector.
- أدخل عنوان URL لخادم MCP:
https://your-domain.example.com/mcp - انقر Connect — تُفتح نافذة متصفح لتسجيل الدخول عبر SSO.
- بعد المصادقة، يمكن لـ Claude الاستعلام عن بيانات هندسة المؤسسة لديك.
VS Code (GitHub Copilot / Cursor)¶
أضف ما يلي إلى ملف .vscode/mcp.json في مساحة العمل لديك:
{
"servers": {
"turbo-ea": {
"type": "http",
"url": "https://your-domain.example.com/mcp/mcp"
}
}
}
التكرار المزدوج لـ /mcp/mcp مقصود — فالأول /mcp/ هو مسار وكيل Nginx، والثاني هو نقطة نهاية بروتوكول MCP.
الاختبار المحلي (وضع stdio)¶
للتطوير أو الاختبار المحلي دون SSO/HTTPS، يمكنك تشغيل خادم MCP في وضع stdio — حيث يشغّله Claude Desktop مباشرةً كعملية محلية.
1. ثبّت حزمة خادم MCP:
pip install ./mcp-server
2. أضف ما يلي إلى ملف إعداد Claude Desktop (claude_desktop_config.json):
{
"mcpServers": {
"turbo-ea": {
"command": "python",
"args": ["-m", "turbo_ea_mcp", "--stdio"],
"env": {
"TURBO_EA_URL": "http://localhost:8000",
"TURBO_EA_EMAIL": "[email protected]",
"TURBO_EA_PASSWORD": "your-password"
}
}
}
}
في هذا الوضع، يصادق الخادم باستخدام البريد الإلكتروني/كلمة المرور ويحدّث الرمز تلقائيًا في الخلفية.
القدرات المتاحة¶
يعرض خادم MCP عدد 30 أداة موزّعة على مجموعتين: 25 أداة قراءة تستعلم عن بيانات هندسة المؤسسة، و5 أدوات كتابة تحوّل المُخرجات التي تحتفظ بها أداة الذكاء الاصطناعي في سياقها الخاص (جداول البيانات، وملفات BPMN XML، وملفات DrawIO XML، والمستندات، والصور) إلى بطاقات وعلاقات ومخططات.
أمان التشغيل التجريبي على عمليات الكتابة¶
تتخذ كل أداة كتابة القيمة الافتراضية dry_run=true. في هذا الوضع تُشغّل الواجهة الخلفية كل أداة تحقق ومُحلِّل مراجع، وتبني الخطة الكاملة، ثم تتراجع عن المعاملة فلا يُحفظ أي شيء. تُعيد أداة الذكاء الاصطناعي المعاينة إلى المستخدم؛ ولا ينبغي لها استدعاء الأداة مرة أخرى بـ dry_run=false للتنفيذ إلا بعد تأكيد صريح. يمنع هذا أي وكيل متحمّس من بثّ مئات البطاقات بهدوء استنادًا إلى جدول بيانات أُسيء تفسيره.
أدوات القراءة¶
يعرض الخادم 25 أداة قراءة موزّعة على ست مجموعات.
البطاقات والنموذج الفوقي
| الأداة | الوصف |
|---|---|
search_cards |
البحث في البطاقات وتصفيتها حسب النوع أو الحالة أو النص الحرّ |
get_card |
الحصول على التفاصيل الكاملة لبطاقة حسب UUID |
get_card_relations |
الحصول على جميع العلاقات المرتبطة ببطاقة |
get_card_hierarchy |
الحصول على أسلاف البطاقة وأبنائها |
list_card_types |
سرد جميع أنواع البطاقات في النموذج الفوقي |
get_relation_types |
سرد أنواع العلاقات، مع إمكانية التصفية حسب نوع البطاقة |
لوحات المعلومات
| الأداة | الوصف |
|---|---|
get_dashboard |
لوحة معلومات مؤشرات الأداء KPI (الأعداد، وجودة البيانات، والموافقات، والنشاط) |
get_landscape |
بطاقات من نوع واحد مجمّعة حسب نوع مرتبط |
GRC — سجل المخاطر
| الأداة | الوصف |
|---|---|
list_risks |
قائمة مخاطر هندسة المؤسسة مقسّمة إلى صفحات وقابلة للتصفية (TOGAF المرحلة G) |
get_risk |
تفاصيل مخاطرة واحدة مع البطاقات المرتبطة + مسار التدقيق |
get_risk_metrics |
مؤشرات الأداء KPI + مصفوفات الاحتمال × الأثر 4×4 الأولية/المتبقية |
get_card_risks |
جميع المخاطر المرتبطة حاليًا ببطاقة محددة |
GRC — الامتثال
| الأداة | الوصف |
|---|---|
list_compliance_findings |
نتائج الامتثال مجمّعة حسب اللائحة التنظيمية |
get_compliance_overview |
درجات الامتثال + مصفوفة الحالة لكل لائحة + بيانات وصفية لآخر فحص |
الحوكمة والتسليم
| الأداة | الوصف |
|---|---|
list_principles |
مبادئ هندسة المؤسسة المنشورة (البيان، والمبرّر، والتبعات) |
list_adrs |
سجلات قرارات البنية (ADR)، قابلة للتصفية حسب المبادرة/الحالة |
get_adr |
سجل ADR واحد مع الأقسام والبطاقات المرتبطة ومسار التوقيع |
list_soaws |
بيانات عمل البنية (SoAW) لمبادرة ما |
التقارير
| الأداة | الوصف |
|---|---|
get_portfolio_report |
بيانات مخطط الفقاعات لنوع بطاقة (الملاءمة الوظيفية × التقنية افتراضيًا) |
get_cost_treemap |
مخطط شجري لتكلفة البطاقات، مع إمكانية التجميع حسب نوع مرتبط |
get_capability_heatmap |
خريطة حرارية هرمية لقدرات الأعمال |
get_data_quality_report |
تفصيل اكتمال البيانات لكل نوع بطاقة |
سياق البطاقة
| الأداة | الوصف |
|---|---|
get_card_stakeholders |
المستخدمون والأدوار المُسندة إلى بطاقة |
get_card_comments |
التعليقات المتسلسلة على بطاقة |
get_card_documents |
روابط المستندات المرفقة ببطاقة |
تخضع جميع الأدوات لـ RBAC الخاص بالمستخدم المصادَق عليه — فيحصل المستخدم ذو صلاحية العرض فقط على قائمة فارغة (أو خطأ 403) للمناطق التي لا يمكنه رؤيتها؛ ولا يحتاج أي شيء على طبقة MCP إلى ضبط لكل أداة.
أدوات الكتابة — رفع المُخرجات¶
تتيح خمس أدوات لوكيل الذكاء الاصطناعي تحويل المُخرجات إلى بيانات هندسة مؤسسة منظّمة. يقرأ الوكيل الملف المصدر من سياقه الخاص (الرؤية متعددة الوسائط، المرفقات)، ويستخرج صفوفًا منظّمة، ويستدعي هذه الأدوات. ولا يحلّل خادم MCP نفسه الملفات قط — فهو يتوقّع مُدخلات منظّمة بالفعل.
| الأداة | الوصف |
|---|---|
create_cards_bulk |
إنشاء بطاقات كثيرة في استدعاء واحد (مثل صفوف جدول بيانات). يدعم مراجع الأب بالاسم ضمن الدفعة نفسها مع ترتيب طوبولوجي على جانب الخادم. |
resolve_card_refs |
التحقق المسبق من المراجع المستندة إلى الأسماء قبل الاستيراد المجمّع — مفيد لإظهار الآباء الملتبسين أو المفقودين للمستخدم. |
upsert_relations_bulk |
إنشاء أو حذف العلاقات بين البطاقات. يجري التحقق من المصدر/الهدف/النوع مقابل النموذج الفوقي. |
create_diagram |
إنشاء مخطط DrawIO حرّ مع روابط اختيارية إلى بطاقات قائمة. |
import_bpmn |
حفظ مخطط BPMN 2.0 XML مقابل بطاقة عملية أعمال قائمة. إذا لم تطابق أي بطاقة الاسم المُعطى، تُعيد الأداة خطأ card_not_found يوجّه الوكيل إلى create_cards_bulk — يُلزم هذا الوكيل بإنشاء البطاقة صراحةً بوصف ونوع فرعي وسمات أولًا، بدلًا من اختصار يُنتج بطاقة هزيلة. |
سير العمل النموذجي عندما يشارك المستخدم جدول بيانات مع وكيل الذكاء الاصطناعي:
- يستدعي الوكيل
list_card_typesوget_relation_typesلفهم النموذج الفوقي. - يحلّل الوكيل جدول البيانات (في سياقه الخاص، لا في MCP) ويبني قواميس صفوف.
- يستدعي الوكيل
create_cards_bulk(cards=…, dry_run=True)ويعرض المعاينة للمستخدم. - يؤكّد المستخدم؛ فيستدعي الوكيل مرة أخرى بـ
dry_run=Falseللتنفيذ. - إذا توفّرت أعمدة علاقات، يستدعي الوكيل عندئذٍ
upsert_relations_bulkبدورة التشغيل التجريبي/التأكيد نفسها.
ضوابط أدوات الكتابة¶
دفاع متعدد الطبقات فوق التشغيل التجريبي، حتى لا تتسبب أي زلّة من LLM في أضرار جسيمة:
- حدود قصوى لحجم كل استدعاء. تفرض أدوات كتابة MCP حدًّا أصغر بكثير من نقاط نهاية مستورد Excel الأساسية: 200 صف لـ
create_cards_bulk، و500 عملية لـupsert_relations_bulk. كبير بما يكفي لأي رفع مُخرج واقعي مفرد، وصغير بما يكفي ليظل بالإمكان فحص معاينة التشغيل التجريبي. - لا حذف للعلاقات افتراضيًا. ترفض
upsert_relations_bulkعملياتaction: "delete"— لإزالة العلاقات، استخدم الواجهة الإلكترونية حيث تُسجّل العملية تحت هوية المستخدم. يمكن للمشغّلين الاشتراك بضبطMCP_ALLOW_RELATION_DELETE=true. - مفتاح الإيقاف. يوقف
MCP_WRITES_ENABLED=falseجميع أدوات الكتابة الخمس دون إعادة نشر الشيفرة. وتظل أدوات القراءة الخمس والعشرون تعمل. - وسم مصدر التدقيق. يحمل كل طلب من خادم MCP إلى الواجهة الخلفية ترويسة
X-Turbo-EA-Origin: mcp. وتُوسَم الأحداث المنبثقة من تلك الطلبات بـorigin: "mcp"في حمولة سجل التدقيق، بحيث يمكن للمسؤولين تصفية عمليات الكتابة المدفوعة من MCP خارج المخطط الزمني تمييزًا لها عن إجراءات الواجهة الإلكترونية. - لا أدوات تدمير شامل. تتعمّد مجموعة الأدوات إغفال حذف البطاقات وأرشفتها وتحديثها المجمّع. وستتطلب إضافة أي أداة من هذا القبيل مراجعة تصميم صريحة.
متغيرات البيئة الأربعة الخاصة بالضوابط على حاوية MCP:
| المتغير | القيمة الافتراضية | الأثر |
|---|---|---|
MCP_WRITES_ENABLED |
true |
المفتاح الرئيسي لأدوات الكتابة. false ← MCP للقراءة فقط. |
MCP_MAX_CARDS_PER_CALL |
200 |
حد أقصى صارم لصفوف create_cards_bulk لكل طلب. |
MCP_MAX_RELATIONS_PER_CALL |
500 |
حد أقصى صارم لعمليات upsert_relations_bulk لكل طلب. |
MCP_ALLOW_RELATION_DELETE |
false |
عند true، تقبل upsert_relations_bulk عمليات action: "delete". |
الموارد¶
| URI | الوصف |
|---|---|
turbo-ea://types |
جميع أنواع البطاقات في النموذج الفوقي |
turbo-ea://relation-types |
جميع أنواع العلاقات |
turbo-ea://dashboard |
مؤشرات الأداء KPI للوحة المعلومات والإحصاءات الموجزة |
المطالبات الموجّهة¶
| المطالبة | الوصف |
|---|---|
analyze_landscape |
تحليل متعدد الخطوات: نظرة عامة على لوحة المعلومات، الأنواع، العلاقات |
find_card |
البحث عن بطاقة بالاسم، والحصول على التفاصيل والعلاقات |
explore_dependencies |
رسم خريطة لما تعتمد عليه البطاقة وما يعتمد عليها |
الأذونات¶
| الدور | الوصول |
|---|---|
| المسؤول | ضبط إعدادات MCP (إذن admin.mcp). قراءة + كتابة كاملة عبر MCP. |
| جميع المستخدمين المصادَق عليهم | وصول القراءة محكوم بـ RBAC الحالي لديهم. تتطلب أدوات الكتابة أذونات الواجهة الخلفية المطابقة — inventory.create (البطاقات)، وrelations.manage (العلاقات)، وdiagrams.manage (المخططات)، وbpm.edit (BPMN). |
يتحكم إذن admin.mcp فيمن يمكنه إدارة إعدادات MCP. وهو متاح لدور المسؤول فقط افتراضيًا. ويمكن منح الأدوار المخصصة هذا الإذن عبر صفحة إدارة الأدوار.
يتبع الوصول إلى البيانات عبر MCP — قراءةً أو كتابةً — نموذج RBAC نفسه الخاص بالواجهة الإلكترونية. فإن تعذّر على مستخدم إنشاء بطاقات في واجهة المخزون، تعذّر عليه إنشاؤها عبر MCP أيضًا؛ فلا توجد أذونات بيانات منفصلة خاصة بـ MCP.
الأمان¶
- مصادقة مفوّضة إلى SSO: يصادق المستخدمون عبر مزوّد SSO المؤسسي لديهم. ولا يرى خادم MCP كلمات المرور أو يخزّنها قط.
- OAuth 2.1 مع PKCE: يستخدم تدفّق المصادقة آلية Proof Key for Code Exchange (S256) لمنع اعتراض رمز التفويض.
- RBAC لكل مستخدم: يُشغّل كل استعلام عبر MCP — قراءةً أو كتابةً — بأذونات المستخدم المصادَق عليه. ولا توجد حسابات خدمة مشتركة.
- التشغيل التجريبي افتراضيًا على عمليات الكتابة: تتخذ أدوات الكتابة افتراضيًا معاينة تحقّق-وتراجع. ويجب على أداة الذكاء الاصطناعي أن تستدعي مرة أخرى صراحةً بـ
dry_run=falseقبل حفظ أي شيء، ويُدقَّق كل تغيير تحت هوية المستخدم. - لا تحليل للملفات في MCP: لا يقبل خادم MCP نفسه ملفات PDF أو Excel أو الصور أو غيرها من المُخرجات الثنائية. فأداة الذكاء الاصطناعي المُستدعِية تحلّلها في سياقها الخاص وترسل صفوفًا منظّمة. يبقي هذا سطح الهجوم ضيّقًا ويتجنّب تعريض الخادم لمدخلات ثنائية مشوّهة.
- تدوير الرموز: تنتهي صلاحية رموز الوصول بعد ساعة واحدة. وتدوم رموز التحديث 30 يومًا. ورموز التفويض أحادية الاستخدام وتنتهي صلاحيتها بعد 10 دقائق.
- منفذ داخلي فقط: تكشف حاوية MCP المنفذ 8001 على شبكة Docker الداخلية فقط. ويمرّ كل وصول خارجي عبر وكيل Nginx العكسي.
استكشاف الأخطاء وإصلاحها¶
| المشكلة | الحل |
|---|---|
| مفتاح MCP معطّل في الإعدادات | يجب إعداد SSO أولًا. انتقل إلى علامة التبويب Settings > Authentication وأعدّ مزوّد SSO. |
| ظهور "host not found" في سجلات Nginx | خدمة MCP لا تعمل. شغّلها بـ docker compose --profile mcp up -d. يعالج إعداد Nginx هذا بسلاسة (استجابة 502، دون تعطّل). |
| فشل ردّ نداء OAuth | تحقق من أنك أضفت https://your-domain.example.com/mcp/oauth/callback كعنوان URI لإعادة التوجيه في تسجيل تطبيق SSO لديك. |
| تعذّر اتصال أداة الذكاء الاصطناعي | تحقق من أن MCP_PUBLIC_URL يطابق العنوان القابل للوصول من جهاز المستخدم. وتأكد من عمل HTTPS. |
| حصول المستخدم على نتائج فارغة | يحترم MCP أذونات RBAC. فإن كان للمستخدم وصول مقيّد، فلن يرى سوى البطاقات التي يسمح بها دوره. |
| انقطاع الاتصال بعد ساعة واحدة | ينبغي لأداة الذكاء الاصطناعي معالجة تحديث الرمز تلقائيًا. وإن لم تفعل، أعد الاتصال. |