بناء خوادم 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
]
في القسم التالي، سنستكشف معالجة الأخطاء وأفضل الممارسات. :::