بناء خوادم 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

خذ الاختبار
هل كان هذا الدرس مفيدًا؟

سجّل الدخول للتقييم

نشرة أسبوعية مجانية

ابقَ على مسار النيرد

بريد واحد أسبوعياً — دورات، مقالات معمّقة، أدوات، وتجارب ذكاء اصطناعي.

بدون إزعاج. إلغاء الاشتراك في أي وقت.