🔌 بروتوكول سياق النموذج (MCP)

دليل خادم بروتوكول سياق النموذج (MCP)

ربط بيئات التطوير الذكية مثل Cursor و Claude Desktop والوكلاء الأذكياء مباشرة بالـ 114 تسليمة ومخططاتها المعيارية عبر بروتوكول JSON-RPC 2.0 stdio الموحد.

1. معمارية البروتوكول ومسار المصافحة (Handshake)

يُعد بروتوكول سياق النماذج (Model Context Protocol - MCP) المعيار الدولي المفتوح لربط مساعدي الذكاء الاصطناعي بمستودعات البيانات وأدوات التشغيل الخارجية. توفر منظومة تسليمات خادماً مستقلاً (tasleemat-mcp) يتواصل عبر مجاري الإدخال والإخراج القياسية (stdio) باستخدام رسائل JSON-RPC 2.0 الصارمة، مما يمنع تعارض المنافذ الشبكية ويتيح التشغيل في بيئات معزولة وآمنة تماماً.


sequenceDiagram
    autonumber
    actor User as المهندس / مدير المشروع
    participant Host as المساعد الذكي (Cursor / Claude)
    participant Server as خادم Tasleemat MCP (stdio)
    participant Engine as محرك تسليمات الأساسي

    Host->>Server: رسالة المصافحة "initialize"
    Server-->>Host: تأكيد الإمكانات وعرض الأدوات المتاحة
    Host->>Server: إشعار الاكتمال "notifications/initialized"
    User->>Host: "خصص لي تسليمات مشروع رشيق من المستوى 2"
    Host->>Server: استدعاء الأداة (name: "tasleemat_tailor_project", args: {tier: 2, pack: "agile"})
    Server->>Engine: get_tailoring_profile(tier=2, pack="agile")
    Engine-->>Server: قائمة بـ 34 تسليمة معتمدة
    Server-->>Host: نتيجة JSON-RPC (بيان التسليمات)
    Host->>User: "إليك قائمة التسليمات المعتمدة لمشروعك..."
        

2. إعدادات التكامل مع بيئات التطوير الذكية

أ. تطبيق Anthropic Claude Desktop

أضف المقطع التالي إلى ملف التكوين claude_desktop_config.json:

  • نظام macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • نظام Windows: %APPDATA%\Claude\claude_desktop_config.json
  • نظام Linux: ~/.config/Claude/claude_desktop_config.json
{
  "mcpServers": {
    "tasleemat": {
      "command": "tasleemat-mcp",
      "args": []
    }
  }
}

ب. بيئة Cursor الذكية

أنشئ ملف .cursor/mcp.json في المجلد الرئيسي للمشروع:

{
  "mcpServers": {
    "tasleemat": {
      "command": "python3",
      "args": ["-m", "tasleemat.mcp"]
    }
  }
}

ج. محررات VS Code (Cline و Continue.dev)

في إعدادات إضافة MCP داخل المحرر، أضف التكوين التالي مع تفعيل الموافقة التلقائية على الأدوات:

{
  "mcpServers": {
    "tasleemat": {
      "command": "tasleemat-mcp",
      "args": [],
      "disabled": false,
      "autoApprove": [
        "tasleemat_list_forms",
        "tasleemat_get_form",
        "tasleemat_get_schema",
        "tasleemat_validate",
        "tasleemat_tailor_project",
        "tasleemat_calculate_eva"
      ]
    }
  }
}

3. المرجع التفصيلي لأدوات MCP الست وحمولات البيانات

1. tasleemat_list_forms

استعراض التسليمات المتاحة مع تصفية محددة بالمرحلة، مستوى الحجم، أو اللغة.

// طلب العميل (Client Request)
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "tasleemat_list_forms",
    "arguments": {
      "phase": "03",
      "lang": "ar"
    }
  }
}

2. tasleemat_get_form

جلب أصول التسليمة: template (القالب)، guide (الدليل)، example (المثال)، schema (المخطط).

// طلب العميل
{
  "jsonrpc": "2.0",
  "id": 2,
  "method": "tools/call",
  "params": {
    "name": "tasleemat_get_form",
    "arguments": {
      "artifact_id": "PMO-03.01",
      "asset_type": "template",
      "lang": "ar"
    }
  }
}

3. tasleemat_get_schema

استرجاع مخطط JSON الكامل لتمكين نموذج الذكاء الاصطناعي من فهم قيود الحقول قبل الصياغة.

// طلب العميل
{
  "jsonrpc": "2.0",
  "id": 3,
  "method": "tools/call",
  "params": {
    "name": "tasleemat_get_schema",
    "arguments": {
      "artifact_id": "PMO-04.08.02"
    }
  }
}

4. tasleemat_validate

التحقق من بيانات JSON المصاغة مقابل المخطط وإرجاع مسار الخطأ بدقة إلى المساعد الذكي.

// طلب التحقق
{
  "jsonrpc": "2.0",
  "id": 4,
  "method": "tools/call",
  "params": {
    "name": "tasleemat_validate",
    "arguments": {
      "artifact_id": "PMO-03.01",
      "data": {
        "project_id": "PRJ-01",
        "project_name": "منصة التحول السحابي",
        "sponsor": "سارة الأحمد"
      },
      "mode": "strict"
    }
  }
}

5. tasleemat_tailor_project و 6. tasleemat_calculate_eva

أداة tasleemat_tailor_project لتخصيص التسليمات المطلوبة، وأداة tasleemat_calculate_eva لحساب مقاييس القيمة المكتسبة حتمياً لتسليمة PMO-06.05.

// طلب حساب مقاييس القيمة المكتسبة
{
  "jsonrpc": "2.0",
  "id": 6,
  "method": "tools/call",
  "params": {
    "name": "tasleemat_calculate_eva",
    "arguments": {
      "pv": 500000,
      "ev": 475000,
      "ac": 520000,
      "bac": 1200000
    }
  }
}

4. أدلة تطبيقية عملية (Tutorials)

الدليل 1: صياغة تسليمات المشاريع ذاتياً داخل نمط الوكيل في Cursor (Agent Mode)

بعد حفظ ملف التكوين .cursor/mcp.json، فعّل نمط Agent في Cursor وأرسل التوجيه التالي:

"نحن نبدأ مشروع منصة التحول الرقمي PRJ-CLOUD. باستخدام أدوات خادم Tasleemat MCP، اجلب قالب ومخطط ميثاق المشروع PMO-03.01، وصغ ميثاقاً مطابقاً للمواصفات استناداً لمذكرات الاجتماع في docs/notes.txt، مع التحقق من صحة بيانات JSON قبل إنشاء الملف النهائي."

سيقوم Cursor تلقائياً باستدعاء tasleemat_get_form، وفحص الشروط عبر tasleemat_get_schema، ثم استدعاء tasleemat_validate لتأكيد سلامة البيانات 100% وكتابة الملف النهائي.

الدليل 2: بناء عميل بايثون مخصص للتواصل مع خادم MCP

يمكن استدعاء أدوات خادم MCP من أي تطبيق بايثون خارجي عبر مجاري الإدخال والإخراج:

import subprocess
import json

def call_mcp_tool(tool_name: str, arguments: dict) -> dict:
    # استدعاء أدوات خادم تسليمات MCP عبر بروتوكول stdio JSON-RPC
    proc = subprocess.Popen(
        ["tasleemat-mcp"],
        stdin=subprocess.PIPE,
        stdout=subprocess.PIPE,
        stderr=subprocess.PIPE,
        text=True
    )
    
    # 1. إرسال مصافحة التهيئة
    init_req = {"jsonrpc": "2.0", "id": 1, "method": "initialize", "params": {"capabilities": {}}}
    proc.stdin.write(json.dumps(init_req) + "\n")
    proc.stdin.flush()
    proc.stdout.readline()  # قراءة رد التهيئة
    
    # 2. استدعاء الأداة المطلوبة
    call_req = {
        "jsonrpc": "2.0",
        "id": 2,
        "method": "tools/call",
        "params": {"name": tool_name, "arguments": arguments}
    }
    proc.stdin.write(json.dumps(call_req) + "\n")
    proc.stdin.flush()
    
    response_line = proc.stdout.readline()
    proc.terminate()
    return json.loads(response_line)

# تجربة تخصيص تسليمات المشروع:
result = call_mcp_tool("tasleemat_tailor_project", {"tier": 2, "pack": "agile"})
print("نتيجة التخصيص:", result)