مع انتقال نماذج اللغات الكبيرة (LLMs) من واجهات الدردشة الثابتة إلى وكلاء مستقلين، يتحول التحدي الحاسم من استنتاج النموذج إلى إدارة السياق. كيف يتفاعل الذكاء الاصطناعي بفعالية مع قاعدة بياناتك أو نظام إدارة علاقات العملاء أو البنية التحتية السحابية دون المساس بالأمان أو الاستقرار؟ هنا يأتي دور بروتوكول سياق النموذج (MCP). هذا المعيار المفتوح يُحدث ثورة في طريقة اتصال تطبيقات الذكاء الاصطناعي بمصادر البيانات الخارجية. في هذا المنشور، سنغوص بعمق في بنية بروتوكول MCP، مع التركيز تحديداً على مكون "الأدوات"، وسنوضح كيفية الاستفادة منه لتطوير تطبيقات قوية.
ما هي أدوات MCP؟
في جوهره، يوحّد بروتوكول سياق النموذج الطريقة التي تكتشف بها أنظمة الذكاء الاصطناعي وتستخدم القدرات التي توفرها الخوادم. بينما تتيح "الموارد" في بروتوكول MCP للنماذج قراءة البيانات الثابتة (مثل قراءة ملف أو استعلام مخطط قاعدة البيانات)، فإن الأدوات تمثل الإجراءات. الأداة هي دالة قابلة للاستدعاء تعرضها خادم MCP ويمكن لنموذج اللغات الكبيرة (LLM) استدعاؤها لإجراء عمليات ذات حالة (stateful operations).
فكر في أدوات MCP على أنها بوابة API لوكيل الذكاء الاصطناعي الخاص بك. بدلاً من كتابة استدعاءات API معقدة بشكل ثابت داخل منطق التطبيق الخاص بك، فإنك تعرض القدرات من خلال واجهة بروتوكول MCP الموحدة. يتلقى نموذج اللغات الكبيرة تعريفات الأداة (الاسم، الوصف، المعاملات) ويقرر ديناميكياً أي أداة يجب استدعاؤها بناءً على نية المستخدم. يسمح هذا الفصل بين المكونات بنظام بيئي نمطي حيث يمكن لخوادم مختلفة توفير مجموعات مختلفة من القدرات لنفس العميل.
تعريف أداة في بايثون
إن تنفيذ خادم MCP في بايثون مُبسَّط باستخدام SDK الرسمي. دعونا نلقي نظرة على مثال عملي: إنشاء أداة تحسب متتالية فيبوناتشي. يوضح هذا المثال البسيط هيكل الحجج، والتحقق من الصحة، وأنواع الإرجاع.
import asyncio
import json
from mcp.server import Server
from mcp.types import Tool, TextContent
from mcp.server.stdio import stdio_server
app = Server("fibonacci-service")
@app.list_tools()
async def list_tools():
return [
Tool(
name="calculate_fibonacci",
description="Calculate the Nth Fibonacci number",
inputSchema={
"type": "object",
"properties": {
"n": {
"type": "integer",
"description": "The position in the Fibonacci sequence"
}
},
"required": ["n"]
}
)
]
@app.call_tool()
async def handle_tool_call(name: str, arguments: dict):
if name == "calculate_fibonacci":
n = arguments.get("n")
if not isinstance(n, int) or n < 0:
return [TextContent(type="text", text="Error: n must be a non-negative integer")]
def fib(k):
if k <= 1: return k
return fib(k-1) + fib(k-2)
return [TextContent(type="text", text=str(fib(n)))]
raise ValueError(f"Unknown tool: {name}")
async def main():
async with stdio_server() as (read, write):
await app.run(read, write, app.create_initialization_options())
if __name__ == "__main__":
asyncio.run(main())
لماذا نستخدم أدوات MCP بدلاً من استدعاءات API المباشرة؟
قد يتساءل المطورون لماذا لا يكتبون ببساطة تكاملات API مخصصة لتطبيقات نماذج اللغات الكبيرة الخاصة بهم. هناك ثلاثة أسباب مقنعة:
- التوحيد القياسي: من خلال اعتماد بروتوكول MCP، تضمن توافق أدواتك مع أي عميل متوافق مع بروتوكول MCP. هذا يحمي بنيتك التحتية من التغيرات في أطر عمل جانب العميل على المدى الطويل.
- الأمان: يمكن عزل خوادم MCP في بيئة معزولة (sandboxed) وعزلها عن الشبكة. تعمل كوسيط موثوق، حيث تتعامل مع المصادقة وتحديد معدل الطلبات قبل أن يتعامل نموذج اللغات الكبيرة (LLM) مع البيانات.
- قابلية الاكتشاف: يمكن للعملاء اكتشاف الأدوات المتاحة ومعاملاتها ديناميكياً عبر مخطط JSON. يسمح هذا لنموذج اللغات الكبيرة بتقديم إجابات أكثر دقة لأنه يفهم القيود والقدرات المتاحة للأدوات في الوقت الفعلي.
الخاتمة
بروتوكول سياق النموذج هو أكثر من مجرد مكتبة؛ إنه تحول جذري في طريقة تصميمنا لتطبيقات الذكاء الاصطناعي. من خلال توحيد الواجهة بين نماذج اللغات الكبيرة وبيانات العالم، تتيح أدوات MCP للمطورين بناء وكلاء أكثر أماناً، وأكثر نمطية، وأكثر ذكاءً. مع نضوج النظام البيئي، من المرجح أن نشهد سوقاً غنياً من خوادم MCP الجاهزة للمهام الشائعة، بدءاً من استعلام قواعد البيانات وحتى النشر السحابي، مما يسمح للمطورين بالتركيز على المنطق عالي المستوى بدلاً من أعمال التكامل منخفضة المستوى.