كيفية إنشاء خادم MCP

المؤلفون

Ash Minhas

Manager, Technical Content | AI Advocate

IBM

PJ Hagerty

Lead, AI Advocacy

IBM

Erika Russi

Data Scientist

IBM

في هذا البرنامج التعليمي، ستقوم بإنشاء خادم [بروتوكول سياق نموذج] (https://www.ibm.com/ae-ar/think/topics/model-context-protocol) (MCP) بسيط يعرض أداة واحدة للبحث في برامج IBM التعليمية. باستخدام إطار عمل "fastmcp" ومكتبة الطلبات، يقوم البرنامج النصي بتنزيل فهرس JSON للبرامج التعليمية من عنوان URL بعيد. ثم يبحث عن تطابقات لاستعلام المستخدم ويعرض قائمة نتائج منسقة بدقة. سيضيف أيضًا معالجة الأخطاء لمشكلات الشبكة وJSON غير السليمة والمشكلات غير المتوقعة، ما يجعل الأداة قوية وسهلة الاستخدام للمبتدئين. وأخيرًا، ستقوم بتشغيل خادم MCP بحيث يمكن توصيله واختباره مع عميل مثل Cursor.

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

تقوم Enterprise والشركات الناشئة المماثلة بتطوير حلول [الذكاء الاصطناعي] (https://www.ibm.com/ae-ar/think/topics/artificial-intelligence) (AI) التوليدية بشكل متزايد. ومن أجل جعل حلولهم أكثر فائدة، يحتاجون إلى معلومات وسياق محدثين. تحتاج [نماذج] التعلم الآلي (https://www.ibm.com/ae-ar/think/topics/ai-model) إلى التشغيل البيني مع الأدوات، [واجهات برمجة التطبيقات] (https://www.ibm.com/ae-ar/think/topics/api) (APIs)، ومجموعات تطوير البرمجيات (SDKs) وأنظمة الواجهة الأمامية لتحقيق ذلك.

يقوم MCP بتوحيد كيفية تمرير السياق بين نماذج الذكاء الاصطناعي والأنظمة. فهو يبسط التنسيق عبر [نموذج لغة كبير] (https://www.ibm.com/ae-ar/think/topics/large-language-models) (LLM) ومصادر وأدوات البيانات الخارجية. القياس الشائع هو التفكير في MCP باعتباره منفذ USB-C® لنموذج LLM. فهي تجعل نموذج LLM أكثر فائدة لأن النموذج لديه إمكانية الوصول إلى القدرات والبيانات التي لم تكن جزءًا من تدريب النموذج. هذه القدرة مفيدة بشكل خاص عند إنشاء وكلاء الذكاء الاصطناعي.

تم تطوير MCP من قِبل شركة Anthropic وتم اعتماده من قِبل كبار مزودي حلول الذكاء الاصطناعي بما في ذلك OpenAI وGoogle DeepMind ورواد الصناعة على نطاق أوسع. يُقدم طريقة آمنة وموحدة لنماذج الذكاء الاصطناعي للوصول إلى البيانات والموارد الخارجية واستخدامها (مثل القوالب الموجهة) والأدوات.

وعلاوة على ذلك، تبنت [بيئات التنمية المتكاملة] (https://www.ibm.com/ae-ar/think/topics/integrated-development-environment) (IDEs) مثل Cursor وVisual Studio Code، برنامج MCP أيضًا، ما يسمح لمساعدي الذكاء الاصطناعي بالوصول إلى خوادم MCP لجعل استخدامها أكثر ملاءمة للسياق وأكثر ملاءمة للمطورين. تستخدم المؤسسات MCP، الذي تم تصميمه كمعيار مفتوح، للعمل كجسر بين العالم العشوائي للذكاء الاصطناعي التوليدي والعالم الحتمي لمعظم أنظمة المؤسسات الموجودة اليوم على الساحة. يزود MCP نموذج LLM بمعلومات سياقية على غرار أنماط التصميم الأخرى التي بدأت في الظهور مثل [التوليد المعزز للاسترجاع] (https://www.ibm.com/ae-ar/think/topics/retrieval-augmented-generation) (RAG)، واستدعاء الأدوات ووكلاء الذكاء الاصطناعي.

تتضمن بعض مزايا استخدام MCP مقارنةً بهذه الحلول الأخرى ما يلي:

- المقياس: يمكن تعريف خوادم MCP واستضافتها مرة واحدة واستخدامها بواسطة العديد من أنظمة الذكاء الاصطناعي. تحد هذه السعة من الحاجة إلى تحديد الوصول إلى نفس البيانات المصدرية والموارد وأدوات الذكاء الاصطناعي لأنظمة الذكاء الاصطناعي التوليدي المتعددة.

- استرجاع البيانات: على عكس التوليد المعزز بالاسترجاع (RAG) حيث يتطلب استرداد البيانات معالجة مسبقة وتوجيهها قبل الاستعلام، فإن MCP ديناميكي ويسمح بالتقلبات والتحديثات من مصادر المعلومات في الوقت الفعلي.

- التعقيد: من السهل إلى حد ما إعداد MCP ودمجه في تطبيقات الذكاء الاصطناعي، كما هو موضح هنا. يمكنك استخدام ملفات التكوين بسهولة لجعل خادم MCP محمولاً عبر البيئات.

- مستقل عن المنصة: بالإضافة إلى حقيقة أنه يمكنك إنشاء خوادم MCP باستخدام لغة Python أو TypeScript أو لغات أخرى، فهو أيضًا غير مقترن بحل LLM محدد.

التصحيح من خلال نموذج العميل/الخادم: يرسل عميل بروتوكول سياق النماذج الطلبات إلى خادم بروتوكول سياق النماذج، الذي يتولى بدوره جلب البيانات الضرورية من مختلف الأنظمة والمصادر الخارجية — سواء كانت واجهات برمجة التطبيقات أو قواعد البيانات أو الملفات المحلية. يضمن هذا النهج المنظم حصول نموذج الذكاء الاصطناعي على سياق متسق وذي صلة، ما يؤدي إلى نتائج أكثر دقة وموثوقية. يستخدم بروتوكول سياق النماذج JSON-RPC لتشفير الرسائل ويدعم آليتين للنقل، هما stdio وHTTP القابل للبث. في الإصدارات السابقة من البروتوكول، كان يدعم أيضًا HTTP مع الأحداث المرسلة من الخادم (SSE)

قد تكون الحاجة إلى مواكبة أحدث المعلومات التي تحتاجها مؤسستك باستمرار أمرًا شاقًا. يمكن أن يساعد نظام إدارة المحتوى MCP في بناء السياق ودمج المعلومات الجديدة للعقود في أثناء سريانها، والمعلومات الموروثة التي تتم رقمنتها ولكن ليس بالضرورة أن تكون قابلة للتلخيص، وغير ذلك. يمكن أن تكون هذه المعلومات داخلية وخارجية، بيد أن إضافة السياق تتجاوز الحاجة التي تستغرق وقتًا طويلاً لإعادة تدريب النماذج اللغوية الكبيرة (LLM) لتكون مفيدة.

ثمة العديد من خوادم MCP البعيدة المتاحة بالإضافة إلى الكثير من التطبيقات المرجعية من github.com

الخطوات

يمكن العثور على هذا الدليل المفصل خطوة بخطوة في مستودع GitHub الخاص بنا جنبا إلى جنب مع برنامج server.py النصي الذي ستشير إليه عند إنشاء خادم MCP. في هذا البرنامج التعليمي، سنتطرق إلى إنشاء خادم MCP مخصص أساسي يمكنه:

  • الاتصال بمستودع GitHub الذي يضم برامج تعليمية
  • إجراء بحث عن الموضوعات التي قد تثير اهتمام المستخدم
  • إرجاع النتائج مع روابط إلى البرنامج التعليمي

من أجل تسهيل عمل هذا البرنامج التعليمي، أنشأنا آلية يمكن من خلالها للخادم الذي ستقوم ببنائه أن يستهلك بسهولة محتوى البرنامج التعليمي من دون الحاجة إلى مصادقة.

الخطوة 1. إعداد البيئة.

- Python 3.11 أو أحدث مثبت على جهاز الكمبيوتر الخاص بك (تحقق من خلال تشغيل python3 --version في جهازك الطرفي).

- وحدة venv المدمجة متاحة (تأتي مع Python في معظم الأنظمة، وفي بعض توزيعات Linux® قد تحتاج إلى تثبيتها بشكل منفصل باستخدام sudo apt install python3-venv).

- محطة سطر الأوامر (CLI):

- macOS أو Linux: استخدم تطبيق المحطة الطرفية لديك (هذه البيئات تشبه Unix).

- Windows: استخدم PowerShell أو موجه الأوامر، مع توضيح الاختلافات الطفيفة في بناء الجملة في الخطوة التالية.

- محرر نصوص أو IDE من اختيارك 

قم بإنشاء دليل جديد وقرص مضغوط بداخله

  mkdir ibmtutorialmcpserver  و cd ibmtutorialmcpserver

التأكد من أنك في الدليلibmtutorialmcpserver يمكنك تشغيل الأمر التالي لإنشاء بيئة افتراضية 

python3 -m venv venv 

ملاحظة: في نظام التشغيل Windows، قد تتمكن من استبدالpython3  معpython

بمجرد إنشاء البيئة الافتراضية، تحتاج إلى تنشيطها باستخدام الأمر التالي

source venv/bin/activate

بمجرد تنشيطه، من المحتمل أن يعرض لك(venv) في الموجه 

الآن تحتاج إلى تثبيت حزمة Python لـfastMCP . يوفر إطار العمل المفتوح المصدر جميع الميزات المطلوبة لتشغيل خادم MCP وتتم صيانته بشكل نشط. سنقوم أيضًا بتثبيتrequests package  لتقديم طلبات HTTP البسيطة

قم بتثبيتfastMCP وrequests حزمة معpip باستخدام الأمر التالي

pip install fastmcp requests

بعد اكتمال هذه الخطوة، يمكنك التحقق من تثبيت FastMCP بشكل صحيح عن طريق تشغيل الأمر التالي

fastmcp version

إذا حصلت على إخراج مشابه لما يلي، فلديك fastMCP مثبت في بيئتك الافتراضية.

FastMCP version:                                       2.10.1
MCP version:                                           1.10.1
Python version:                                       3.11.13
Platform:                          macOS-15.5-arm64-arm-64bit
FastMCP root path: /opt/homebrew/lib/python3.11/site-packages

الآن لقد قمت بتثبيت fastMCP، دعنا نحصل على خادم MCP الخاص بنا.

الخطوة 2. إنشاء خادم MCP

قم بإنشاء ملف جديد في الدليل ودعنا نعطيه الاسمserver.py .

بمجرد حصولك على هذا الملف، افتحه وانسخ مقتطف الشفرة التالي وألصقه فيه

# Simple MCP server that exposes a single tool to search IBM tutorials.
# How to run:
# 1) Install dependencies: pip install fastmcp requests
# 2) Start the server using an MCP client with the command: fastmcp run <YOUR PATH>/server.py

from fastmcp import FastMCPimport requests

# Source of the tutorials index 
DOCS_INDEX_URL = "https://raw.githubusercontent.com/IBM/ibmdotcom-tutorials/refs/heads/main/docs_index.json"


mcp = FastMCP("IBM Tutorials")

@mcp.tool
def search_ibmtutorials(query: str) -> str:
    """
    Search for tutorials on GitHub by downloading a JSON file from a GitHub repo and searching the payload for any relevant results and the respective details

Args:
    query: The search term to look for in tutorial titles and URLs

Returns:
    A formatted list of relevant tutorial results
    """
    try:
        # Download the JSON file from the GitHub repo
        response = requests.get(DOCS_INDEX_URL, timeout=10)
        response.raise_for_status() # Raise an exception for bad status codes

        # Parse the JSON data
        tutorials = response.json()

        # Search for relevant tutorials (case-insensitive)
        query_lower = query.lower()
        relevant_tutorials = []

        for tutorial in tutorials:
            # Search in title and URL
            title = tutorial.get('title', '').lower()
            url_path = tutorial.get('url', '').lower()

            if query_lower in title or query_lower in url_path:
                relevant_tutorials.append(tutorial)

        # Format and return results
        if not relevant_tutorials:
            return f"No IBM tutorials found matching '{query}'"

        # Format the results
            result_lines = [f"Found {len(relevant_tutorials)} tutorial(s) matching '{query}':\n"]

        for i, tutorial in enumerate(relevant_tutorials, 1):
            title = tutorial.get('title', 'No title')
            tutorial_url = tutorial.get('url', 'No URL')
            date = tutorial.get('date', 'No date')
            author = tutorial.get('author', '')

            result_lines.append(f"{i}. **{title}**")
            result_lines.append(f" URL: {tutorial_url}")
            result_lines.append(f" Date: {date}")
            if author:
                result_lines.append(f" Author: {author}")
            result_lines.append("") # Empty line for spacing

        return "\n".join(result_lines)

    except requests.exceptions.RequestException as e:
    return f"Error fetching tutorials from GitHub: {str(e)}"
    except ValueError as e:
    return f"Error parsing JSON data: {str(e)}"
    except Exception as e:
    return f"Error searching IBM tutorials: {str(e)}"


if __name__ == "__main__":
    mcp.run()

دعنا نستعرض الكود السابق ونوضح ما تفعله الأجزاء الرئيسية. 

عمليات الاستيراد والإعداد

يبدأ البرنامج النصي باستيراد FastMCP، الذي يوفر إطار عمل لإنشاء خادم MCP، والطلبات التي تُستخدم لتنزيل البيانات عبر HTTP. لقد أضفنا ثابتًاDOCS_INDEX_URL للاحتفاظ بعنوان URL لـ JSON البعيد لمؤشر البرامج التعليمية. هذا النهج يسهّل تغيير الموقع المصدر إذا كان لديك مصدر آخر لبيانات JSON تريد إعادة استخدام هذا البرنامج التعليمي من أجله لاحقًا.

إعداد خادم MCP

ثم نقوم بإنشاء مثيل خادم MCP باستخدامFastMCP(“IBM Tutorials”) . تعمل هذه الخطوة كوحدة تحكم مركزية لجميع الأدوات التي سيعرضها الخادم لعملاء MCP، مثلsearch_ibmtutorials  الأداة التي نحددها.

تعريف أداة MCP

تخزِّن@mcp.tool  علامات الديكورsearch_ibmtutorials  كأداة MCP. تأخذ هذه الوظيفة مصطلح البحث، وتقوم بتنزيل فهرس البرنامج التعليمي منDOCS_INDEX_URL  باستخدامrequests.get() (مع مهلة مدتها 10 ثوانٍ لأمان الشبكة) ويرفع استثناء إذا كانت حالة استجابة HTTP تشير إلى وجود خطأ. بمجرد استرداد البيانات، يتم تحليلها من كائنات JSON إلى كائنات Python.

البحث غير حساس لحالة الأحرف: يُحول الاستعلام إلى أحرف صغيرة، وكذلك عنوان كل برنامج تعليمي وعنوان URL للمطابقة. إذا كان البرنامج التعليمي يحتوي على مصطلح البحث في العنوان أو عنوان URL، يُضاف إلى قائمة النتائج ذات الصلة.

تنسيق النتائج وعرضها

إذا لم يتطابق أي برنامج تعليمي مع البحث، فإن الدالة ترجع رسالة مألوفة تشير إلى أنه لم يتم العثور على أي شيء. إذا كان هناك تطابق، فستنشئ الدالة قائمة منسقة ومرقمة تعرض عنوان كل برنامج تعليمي وعنوان URL والتاريخ والمؤلف - إذا كان متاحًا. يستخدم التنسيق أسلوبًا غامقًا على غرار Markdown للعناوين بحيث تبرز في العملاء الذين يدعمونه. يتم إرجاع النص المنسق النهائي كسلسلة واحدة.

معالجة الأخطاء

تتضمن الوظيفة معالجة الاستثناءات المستهدفة:

requests.exceptions.RequestException يلتقط مشكلات الشبكة مثل انتهاء المهلة أو الاتصالات غير السليمة.

ValueError  (والتي يمكن رفعها بواسطة .json()) يلتقط الحالات التي تكون فيها الاستجابة غير صالحة JSON.

معالج عامException  يلتقط أي شيء آخر غير متوقع.

يقوم كل خطأ بإرجاع رسالة وصفية إلى المتصل بدلاً من إيقاف البرنامج.

بدء تشغيل الخادم

في الأسفل،if name == “main” تتأكد كتلة : منmcp.run() تنفيذه فقط عند تشغيل البرنامج النصي مباشرة. تبدأ هذه الخطوة تشغيل خادم MCP، ما يجعلsearch_ibmtutorials  الأداة متاحة لأي عميل MCP، مثل MCP Inspector. هذه الأداة مفيدة لاستكشاف الأخطاء وإصلاحها وتصحيح أخطاء خادم MCP لديك. توفر الأداة واجهة مستخدم (UI) يمكنك استخدامها لتصحيح أخطاء خادم MCP والتحقق من صحة السلوك المتوقع. 

الخطوة 3. إضافة خادم MCP إلى IDE الخاص بك

الآن بعد أن بنيت الخادم الخاص بك، تحتاج إلى تمكينه في بيئة التطوير المتكاملة لديك قبل أن تتمكن من استخدامه. هناك العديد من العملاء الذين يدعمون بروتوكول سياق النماذج بمستويات مختلفة من التكامل مع البروتوكول. يوفر موقع بروتوكول سياق النماذج الرسمي قائمة شاملة بأمثلة للعملاء.
إذا كان Cursor مثبتًا لديك، فيمكنك إضافة خادم بروتوكول سياق النماذج داخل Cursor باتباع هذه التعليمات.

افتح إعدادات المؤشر وانتقل إلى الأدوات وعمليات التكامل. حدد خادم MCP جديدًا وألصقه في ملف mcp.json الذي يفتحه المؤشر في علامة تبويب جديدة. تأكد من استبدال <YOUR PATH> بالدليل الذي تتواجد فيه. يمكنك تشغيل pwd في جهازك للحصول على المسار الكامل. لمزيد من المعلومات حول المؤشر وMCP، راجع مستندات المؤشر.

{
  &quot;mcpServers&quot;: {
    &quot;البرامج التعليمية&quot;: {
      &quot;الأمر&quot;: &quot;fastmcp&quot;،
      &quot;الوسيطة&quot;: [&quot;run <YOUR PATH>/ibmtutorialmcpserver/server.py&quot;]،
      &quot;env&quot;: {
      }
    }
  }
}

إذا كنت من مستخدمي Microsoft VS Code، فيمكنك إضافة خادم MCP باستخدام الإرشادات المرتبطة هنا. تأكد من إعداد Copilot في VS Code قبل المتابعة.
إذا كنت ترغب في تمكين خادم MCP باستخدام ملف، فقم بإنشاء ملف .vscode/mcp.json في دليل المشروع هذا وانسخ هذا الكود وألصقه في الملف. تأكد من استبدال <YOUR PATH> بالدليل الذي تتواجد فيه. يمكنك تشغيل pwd في جهازك للحصول على المسار الكامل.

&quot;الخوادم&quot;: {
		&quot;برامج IBM التعليمية&quot;: {
			&quot;النوع&quot;: &quot;stdio&quot;،
			&quot;الأمر&quot;: &quot;fastmcp&quot;،
			&quot;الوسيطة&quot;: [
				&quot;run&quot;،
				&quot;<YOUR PATH>/ibmtutorialmcpserver/server.py&quot;
			]
		}،
	}،

الخطوة 4. استخدام خادم MCP الخاص بك

الآن بعد أن قمت بتمكين خادم MCP الخاص بك، دعنا نعمل على الخادم حتى تتمكن من استخدام الأداة التي تم إنشاؤها في server.py. إذا كنت تستخدم VS Code، فراجع من هذه المستندات.

في دردشة IDE، سأسأل "ما بعض البرامج التعليمية لمتسلسلة IBM الزمنية؟" يوضح ما يلي أن الإخراج تم استلامه، ومع ذلك يمكن أن تختلف استجابتك وفقًا للطراز المستخدم وIDE الخاص بك.

** الإخراج:**

Here are some IBM time series tutorials:

Time series forecasting with Lag-Llama (zero-shot learning)
Tutorial link
Predict overnight low temperatures using the Lag-Llama model in a zero-shot learning scenario.

Using the watsonx.ai Time Series Forecasting API to predict energy demand
Tutorial link
Predict energy demand with the watsonx.ai Time Series Forecasting API.
Authors: Aleksandra Kłeczek and Meredith Syed

Let me know if you want details or help with a specific tutorial.

رائع! كان الوكيل قادرًا على استخدام search_ibmtutorials  أداة صممناها للبحث عن البرامج التعليمية المتعلقة بالمتواليات الزمنية.

ملخص

في هذا البرنامج التعليمي، تعلمت إنشاء خادم MCP للبحث في جميع البرامج التعليمية الخاصة بنا باستخدام أي عميل MCP تفضله. لقد أنشأت خادم MCP بأداة بحث واحدة تسترجع فهرس برامج JSON التعليمية عن بُعد، وتصفية النتائج بناءً على مصطلح بحث وإرجاعها بتنسيق قابل للقراءة. يستخدم fastmcp لتسجيل الأداة وتشغيلها، وطلبات جلب البيانات ويتضمن معالجة الأخطاء للشبكة والتحليل والمشكلات غير المتوقعة. وعند تشغيله، يمكن توصيل الخادم بواسطة عملاء MCP للاستعلام المباشر عن جميع البرامج التعليمية.

حلول ذات صلة
وكلاء الذكاء الاصطناعي للأعمال

يمكنك إنشاء مساعدين ووكلاء ذكاء اصطناعي ووكلاء أقوياء يعملون على أتمتة مهام سير العمل والعمليات باستخدام الذكاء الاصطناعي التوليدي ونشرها وإدارتها.

    استكشف watsonx Orchestrate
    حلول وكلاء الذكاء الاصطناعي من IBM

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

    استكشف حلول وكلاء الذكاء الاصطناعي
    خدمات الذكاء الاصطناعي لدى IBM Consulting

    تساعد خدمات IBM Consulting AI في إعادة تصور طريقة عمل الشركات باستخدام حلول الذكاء الاصطناعي من أجل النهوض بأعمالها.

    استكشف خدمات الذكاء الاصطناعي
    اتخِذ الخطوة التالية

    سواء اخترت تخصيص التطبيقات والمهارات المُعدّة مسبقًا أو إنشاء خدمات مخصصة مستندة إلى وكلاء ونشرها باستخدام استوديو الذكاء الاصطناعي، فإن منصة IBM watsonx تُلبي احتياجاتك.

    استكشف watsonx Orchestrate استكشف watsonx.ai