الأدوات والموارد والتعليمات
دمج القدرات
4 دقيقة للقراءة
القوة الحقيقية لـ MCP تأتي من دمج الأدوات والموارد والتعليمات في أنظمة متماسكة.
مثال كامل: خادم قاعدة المعرفة
دعنا نبني خادم قاعدة معرفة يجمع كل قدرات MCP:
from mcp.server import Server
from mcp.types import Tool, Resource, Prompt, TextContent
server = Server(name="knowledge-base")
# 1. الموارد: كشف المستندات
@server.list_resources()
async def list_resources():
docs = await db.get_all_documents()
return [
Resource(
uri=f"doc://{doc.id}",
name=doc.title,
description=f"مستند: {doc.title}",
mimeType="text/markdown"
)
for doc in docs
]
@server.read_resource()
async def read_resource(uri: str):
doc_id = uri.replace("doc://", "")
doc = await db.get_document(doc_id)
return [TextContent(type="text", text=doc.content)]
# 2. الأدوات: البحث والتعديل
@server.list_tools()
async def list_tools():
return [
Tool(
name="search_knowledge",
description="البحث في قاعدة المعرفة",
inputSchema={
"type": "object",
"properties": {
"query": {"type": "string"},
"limit": {"type": "integer", "default": 5}
},
"required": ["query"]
}
),
Tool(
name="add_document",
description="إضافة مستند جديد إلى قاعدة المعرفة",
inputSchema={
"type": "object",
"properties": {
"title": {"type": "string"},
"content": {"type": "string"},
"tags": {"type": "array", "items": {"type": "string"}}
},
"required": ["title", "content"]
}
)
]
# 3. التعليمات: تفاعلات موحدة
@server.list_prompts()
async def list_prompts():
return [
Prompt(
name="summarize_topic",
description="تلخيص جميع المستندات حول موضوع",
arguments=[
PromptArgument(name="topic", required=True)
]
)
]
سير العمل: الذكاء الاصطناعي يستخدم جميع القدرات
إليك كيف يمكن للذكاء الاصطناعي استخدام هذا الخادم:
- قراءة المورد للحصول على محتوى المستند الكامل
- استدعاء الأداة للبحث عن مستندات ذات صلة
- استخدام التعليمات لهيكلة طلب الملخص
المستخدم: "لخص سياسات أمان الذكاء الاصطناعي لدينا"
إجراءات الذكاء الاصطناعي:
1. search_knowledge(query="سياسات أمان الذكاء الاصطناعي") ← يحصل على معرفات المستندات
2. read_resource("doc://policy-123") ← يحصل على المحتوى الكامل
3. read_resource("doc://policy-456") ← يحصل على المزيد من المحتوى
4. يلخص بناءً على المستندات
تنسيق الموارد والأدوات
صمم الموارد والأدوات للعمل معاً:
# المورد: عرض للقراءة فقط
Resource(uri="user://123", name="ملف المستخدم 123")
# الأداة: تعديل المستخدم
Tool(name="update_user", description="تحديث ملف المستخدم")
أفضل الممارسات
| الممارسة | السبب |
|---|---|
| فصل واضح | الموارد للقراءة، الأدوات للإجراءات |
| URIs متسقة | تجعل الموارد قابلة للتنبؤ |
| تسمية ذات صلة | user://123 مع أداة update_user |
| توثيق العلاقات | اشرح في الأوصاف |
الآن دعنا نطبق هذه الأنماط في مختبر عملي. :::