بناء خوادم MCP
أساسيات خادم MCP
5 دقيقة للقراءة
الآن بعد أن فهمت هندسة MCP، دعنا نبني خادم MCP كامل يكشف أدوات مفيدة.
دورة حياة الخادم
كل خادم MCP يتبع هذه الدورة:
- التهيئة: يبدأ الخادم ويسجل القدرات
- الاتصال: يتصل العميل عبر stdio أو SSE
- تبادل القدرات: يعلن الخادم عن الأدوات/الموارد المتاحة
- التشغيل: يتعامل الخادم مع الطلبات
- الإغلاق: فصل الاتصال النظيف
إنشاء نسخة الخادم
from mcp.server import Server
from mcp.types import Tool, TextContent
# إنشاء خادم باسم فريد
server = Server(name="my-awesome-server")
اسم الخادم يظهر في السجلات ويساعد في تحديد خادمك عند تكوين عدة خوادم MCP.
تسجيل الأدوات
الأدوات هي الطريقة الأساسية للتفاعل بين الذكاء الاصطناعي وخادمك. كل أداة تحتاج:
| المكون | الغرض |
|---|---|
| name | معرف فريد (snake_case) |
| description | ماذا تفعل الأداة (الذكاء الاصطناعي يقرأ هذا!) |
| inputSchema | مخطط JSON للمعلمات |
@server.list_tools()
async def list_tools():
return [
Tool(
name="get_weather",
description="الحصول على الطقس الحالي لمدينة",
inputSchema={
"type": "object",
"properties": {
"city": {
"type": "string",
"description": "اسم المدينة (مثل 'لندن'، 'طوكيو')"
},
"units": {
"type": "string",
"enum": ["celsius", "fahrenheit"],
"default": "celsius"
}
},
"required": ["city"]
}
)
]
التعامل مع استدعاءات الأدوات
عندما يستدعي الذكاء الاصطناعي أداة، يستقبل معالجك الاسم والوسائط:
@server.call_tool()
async def call_tool(name: str, arguments: dict):
if name == "get_weather":
city = arguments["city"]
units = arguments.get("units", "celsius")
# منطقك هنا (مثل استدعاء API الطقس)
weather = fetch_weather(city, units)
return [TextContent(
type="text",
text=f"الطقس في {city}: {weather}"
)]
raise ValueError(f"أداة غير معروفة: {name}")
أوصاف الأدوات مهمة
نصيحة احترافية: اكتب أوصاف الأدوات كما لو كنت تشرح لإنسان. يستخدم الذكاء الاصطناعي هذه الأوصاف لتقرير متى وكيف يستخدم أداتك.
وصف جيد:
"البحث في قاعدة معرفة الشركة عن المستندات ذات الصلة.
يُرجع أفضل 5 تطابقات مع العناوين والمقتطفات."
وصف سيء:
"بحث KB"
في القسم التالي، سنضيف موارد لكشف البيانات التي يمكن للذكاء الاصطناعي قراءتها. :::