الشرح: استخدام MCP مع الجلسات الديناميكية (بايثون)

مهم

خادم MCP المدار على المنصة للجلسات الديناميكية في مرحلة المعاينة. نسخة 2025-02-02-preview API وخصائصها mcpServerSettings قابلة للتغيير.

يوضح هذا الدرس كيفية إنشاء تجمع جلسات مع تمكين خادم MCP المدار من المنصة، والاتصال به، وتنفيذ كود بايثون عن بعد.

على عكس دروس خوادم MCP المستقلة، لا تكتب أو تنشر كود خادم MCP. توفر المنصة أدوات مدمجة لتجمع جلسات بايثون:

أداة ‏‏الوصف‬
launchShell ينشئ بيئة جديدة ويعيد environmentId
runPythonCodeInRemoteEnvironment ينفذ كود بايثون في بيئة موجودة
runShellCommandInRemoteEnvironment ينفذ أمر shell في بيئة موجودة

في هذا البرنامج التعليمي، سوف تتعلّم:

  • إنشاء تجمع جلسات بايثون مع تفعيل خادم MCP
  • استرجاع نقطة نهاية MCP ومفتاح API
  • تهيئة اتصال MCP وتنفيذ كود بايثون عبر JSON-RPC
  • توصيل خادم MCP ب GitHub Copilot في كود VS

Prerequisites

Requirement ‏‏الوصف‬
حساب Azure حساب Azure مع اشتراك نشط. أنشئ واحدا مجانا.
Azure CLI قم بتثبيت Azure CLI.
حليقه Curl (مثبت مسبقا على معظم أنظمة لينكس وmacOS).
jq جي كيو معالج JSON، يستخدم لتحليل استجابات واجهة برمجة التطبيقات (API).
VS Code كود Visual Studio مع امتداد GitHub Copilot (لقسم تكامل Copilot).

الإعداد

  1. قم بتحديث واجهة برمجة Azure وتثبيت إضافة تطبيقات الحاويات:

    az upgrade
    az provider register --namespace Microsoft.App
    az extension add --name containerapp --allow-preview true --upgrade
    
  2. سجل الدخول وحدد اشتراكك:

    az login
    SUBSCRIPTION_ID=$(az account show --query id --output tsv)
    az account set -s $SUBSCRIPTION_ID
    
  3. حدد المتغيرات لهذا الدرس. استبدل البدلاء بقيمك:

    RESOURCE_GROUP=<RESOURCE_GROUP_NAME>
    SESSION_POOL_NAME=<SESSION_POOL_NAME>
    LOCATION=<LOCATION>
    
  4. أنشئ مجموعة موارد:

    az group create --name $RESOURCE_GROUP --location $LOCATION
    

إنشاء تجمع جلسات بايثون باستخدام خادم MCP

قم بنشر مجموعة جلسات باستخدام قالب ARM مع تفعيل MCP.

  1. أنشئ ملفا باسم deploy.json:

    {
        "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
        "contentVersion": "1.0.0.0",
        "parameters": {
            "name": { "type": "String" },
            "location": { "type": "String" }
        },
        "resources": [
            {
                "type": "Microsoft.App/sessionPools",
                "apiVersion": "2025-02-02-preview",
                "name": "[parameters('name')]",
                "location": "[parameters('location')]",
                "properties": {
                    "poolManagementType": "Dynamic",
                    "containerType": "PythonLTS",
                    "scaleConfiguration": {
                        "maxConcurrentSessions": 5
                    },
                    "sessionNetworkConfiguration": {
                        "status": "EgressEnabled"
                    },
                    "dynamicPoolConfiguration": {
                        "lifecycleConfiguration": {
                            "lifecycleType": "Timed",
                            "coolDownPeriodInSeconds": 300
                        }
                    },
                    "mcpServerSettings": {
                        "isMCPServerEnabled": true
                    }
                }
            }
        ]
    }
    

    ‏‫ملاحظة‬

    الخصائص الرئيسية في هذا القالب:

    • containerType: "PythonLTS": ينشئ جلسات باستخدام وقت تشغيل بايثون.
    • mcpServerSettings.isMCPServerEnabled: true: تمكن نقطة نهاية MCP المدارة بواسطة المنصة.
    • coolDownPeriodInSeconds: 300: يتم تدمير الجلسات بعد 5 دقائق من عدم النشاط.
  2. نشر القالب:

استخدم قالب ARM لإنشاء مجموعة جلسات بايثون مع مفعل خادم MCP.

  1. أنشئ ملف قالب نشر بعنوان deploy.json:

    {
        "$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
        "contentVersion": "1.0.0.0",
        "parameters": {
            "name": { "type": "String" },
            "location": { "type": "String" }
        },
        "resources": [
              {
                "type": "Microsoft.App/sessionPools",
                "apiVersion": "2025-10-02-preview",
                "name": "[parameters('name')]",
                "location": "[parameters('location')]",
                "properties": {
                    "poolManagementType": "Dynamic",
                    "containerType": "PythonLTS", # Set the "containerType" property to "PythonLTS"
                    "scaleConfiguration": {
                        "maxConcurrentSessions": 5
                    },
                    "sessionNetworkConfiguration": {
                        "status": "EgressEnabled"
                    },
                    "dynamicPoolConfiguration": {
                        "lifecycleConfiguration": {
                            "lifecycleType": "Timed",
                            "coolDownPeriodInSeconds": 300
                        }
                    },
                    "mcpServerSettings": { 
                        "isMCPServerEnabled": true # Add the "mcpServerSettings" section to enable the MCP server
                    }
                }
            }
        ]
    }
    
  2. نشر قالب ARM.

    az deployment group create \
      --resource-group $RESOURCE_GROUP \
      --template-file deploy.json \
      --parameters name=$SESSION_POOL_NAME location=$LOCATION
    

احصل على نقطة نهاية خادم MCP

بعد النشر، استرجع رابط نقطة نهاية MCP لمجموعة الجلسات الخاصة بك.

MCP_ENDPOINT=$(az rest --method GET --uri "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.App/sessionPools/$SESSION_POOL_NAME" --uri-parameters api-version=2025-10-02-preview --query "properties.mcpServerSettings.mcpServerEndpoint" -o tsv)

احصل على بيانات اعتماد خادم MCP

يستخدم خادم MCP المدار من قبل المنصة مصادقة مفاتيح API عبر الرأس x-ms-apikey . تختلف طريقة المصادقة هذه عن المصادقة الرمزية الحامل التي تستخدمها واجهات برمجة تطبيقات إدارة تجمع الجلسات القياسية.

API_KEY=$(az rest --method POST --uri "https://management.azure.com/subscriptions/$SUBSCRIPTION_ID/resourceGroups/$RESOURCE_GROUP/providers/Microsoft.App/sessionPools/$SESSION_POOL_NAME/fetchMCPServerCredentials" --uri-parameters api-version=2025-10-02-preview --query "apiKey" -o tsv)

تحذير

عامل مفتاح واجهة برمجة التطبيقات كسر. لا تلتزم به للتحكم في المصدر أو تشاركه علنا. يقوم المفتاح بالتحقق من جميع استدعاءات أدوات MCP مقابل مجموعة الجلسات الخاصة بك.

تهيئة خادم MCP

أرسل initialize طلب JSON-RPC لتأسيس اتصال MCP:

curl -sS -X POST "$MCP_ENDPOINT" \
    -H "Content-Type: application/json" \
    -H "x-ms-apikey: $API_KEY" \
    -d '{ "jsonrpc": "2.0", "id": "1", "method": "initialize" }'

يجب أن ترى ردا يشمل:

  • protocolVersion 2025-03-26
  • serverInfo.name Microsoft Container Apps MCP Server
  • capabilities.tools { "call": true, "list": true }

تشغيل بيئة بايثون

إنشاء بيئة بايثون جديدة:

ENVIRONMENT_RESPONSE=$(curl -sS -X POST "$MCP_ENDPOINT" \
    -H "Content-Type: application/json" \
    -H "x-ms-apikey: $API_KEY" \
    -d '{ "jsonrpc": "2.0", "id": "2", "method": "tools/call", "params": { "name": "launchShell", "arguments": {} } }')

echo $ENVIRONMENT_RESPONSE

استخرج من environmentIdstructuredContent الحقل في الرد. تحتاج إلى هذا المعرف لجميع الأوامر التالية.

ENVIRONMENT_ID=$(echo $ENVIRONMENT_RESPONSE | jq -r '.result.structuredContent.environmentId')
echo $ENVIRONMENT_ID

‏‫ملاحظة‬

تولد الأداة launchShell معرف بيئة فريد. يتم تخصيص الجلسة الفعلية "بكسل". عند تنفيذ أول أمرة، يقوم تجمع الجلسات بتعيين حاوية معزولة فائقة V للتعامل معها.

تنفيذ أوامر بايثون

لتشغيل كود بايثون في البيئة البعيدة، استخدم الخطوة السابقة $ENVIRONMENT_ID .

curl -sS -X POST "$MCP_ENDPOINT" \
    -H "Content-Type: application/json" \
    -H "x-ms-apikey: $API_KEY" \
    -d '{
        "jsonrpc": "2.0",
        "id": "3",
        "method": "tools/call",
        "params": {
            "name": "runPythonCodeInRemoteEnvironment",
            "arguments": {
                "environmentId": "'"$ENVIRONMENT_ID"'",
                "pythonCode": "import sys; print(f\"Python {sys.version}\")"
            }
        }
    }'

تتضمن الاستجابة نتائج stdout الأوامر في الحقل ضمن structuredContent.

جرب مثالا أكثر تعقيدا:

curl -sS -X POST "$MCP_ENDPOINT" \
    -H "Content-Type: application/json" \
    -H "x-ms-apikey: $API_KEY" \
    -d '{
        "jsonrpc": "2.0",
        "id": "4",
        "method": "tools/call",
        "params": {
            "name": "runPythonCodeInRemoteEnvironment",
            "arguments": {
                "environmentId": "'"$ENVIRONMENT_ID"'",
                "pythonCode": "import math\nresults = {n: math.factorial(n) for n in range(1, 11)}\nfor k, v in results.items():\n    print(f\"{k}! = {v}\")"
            }
        }
    }'

الاتصال ب GitHub Copilot في كود VS

يمكنك توصيل خادم MCP الخاص بتجمع الجلسات ب GitHub Copilot لواجهة لغوية طبيعية لبيئة تنفيذ الكود.

  1. أنشئ .vscode/mcp.json في مشروعك:

    {
        "servers": {
            "aca-python-sessions": {
                "type": "http",
                "url": "<MCP_ENDPOINT>",
                "headers": {
                    "x-ms-apikey": "<API_KEY>"
                }
            }
        }
    }
    

    استبدل <MCP_ENDPOINT> و <API_KEY> بالقيم من الخطوات السابقة.

    تحذير

    لا تلتزم مفاتيح واجهة برمجة التطبيقات MCP بالتحكم في المصدر. استخدم متغيرات البيئة أو مدير الأسرار في الإنتاج. أضف .vscode/mcp.json إلى ..gitignore

  2. افتح VS Code، ثم افتح دردشة Copilot في وضع الوكيل .

  3. يظهر التحقق aca-python-sessions في قائمة الأدوات.

  4. اختبر مع محفزات مثل:

    • "تشغيل بيئة بايثون وحساب أول 20 رقما لفيبوناتشي"
    • "تشغيل سكريبت بايثون يجلب https://api.github.com ويطبع رؤوس الردود"

تنظيف الموارد

عند الانتهاء من هذا الدرس، قم بإزالة الموارد التي أنشأتها لتجنب تحمل الرسوم.

az group delete --resource-group $RESOURCE_GROUP