بناء خوادم MCP

كشف الموارد

5 دقيقة للقراءة

بينما تتيح الأدوات للذكاء الاصطناعي تنفيذ إجراءات، الموارد تتيح للذكاء الاصطناعي قراءة البيانات. الموارد مثالية لكشف الملفات وسجلات قاعدة البيانات أو أي بيانات للقراءة فقط.

المورد مقابل الأداة

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

تعريف الموارد

تستخدم الموارد URIs لتحديد المحتوى:

from mcp.types import Resource

@server.list_resources()
async def list_resources():
    return [
        Resource(
            uri="config://app/settings",
            name="إعدادات التطبيق",
            description="تكوين التطبيق الحالي",
            mimeType="application/json"
        ),
        Resource(
            uri="file:///var/log/app.log",
            name="سجلات التطبيق",
            description="إدخالات سجل التطبيق الأخيرة",
            mimeType="text/plain"
        )
    ]

مخططات URI

يمكنك استخدام أي مخطط URI منطقي لبياناتك:

المخطط حالة الاستخدام مثال
file:// الملفات المحلية file:///home/user/doc.txt
db:// سجلات قاعدة البيانات db://users/123
config:// التكوين config://app/settings
api:// واجهات برمجة التطبيقات الخارجية api://weather/london

قراءة الموارد

نفذ معالج القراءة لإرجاع المحتوى:

from mcp.types import TextContent, BlobContent

@server.read_resource()
async def read_resource(uri: str):
    if uri == "config://app/settings":
        settings = load_app_settings()
        return [TextContent(
            type="text",
            text=json.dumps(settings, indent=2)
        )]

    if uri.startswith("file://"):
        path = uri.replace("file://", "")
        content = read_file(path)
        return [TextContent(type="text", text=content)]

    raise ValueError(f"مورد غير معروف: {uri}")

الموارد الثنائية

للبيانات الثنائية مثل الصور، استخدم BlobContent:

import base64

@server.read_resource()
async def read_resource(uri: str):
    if uri.startswith("image://"):
        image_data = load_image(uri)
        return [BlobContent(
            type="blob",
            data=base64.b64encode(image_data).decode(),
            mimeType="image/png"
        )]

الموارد الديناميكية

يمكن توليد الموارد ديناميكياً بناءً على المعلمات:

@server.list_resources()
async def list_resources():
    # توليد الموارد من قاعدة البيانات
    users = await db.get_all_users()
    return [
        Resource(
            uri=f"user://{user.id}",
            name=f"المستخدم: {user.name}",
            description=f"ملف تعريف {user.name}"
        )
        for user in users
    ]

في القسم التالي، سنستكشف معالجة الأخطاء وأفضل الممارسات. :::

اختبار

اختبار الوحدة 2: بناء خوادم MCP

خذ الاختبار