بروتوكول سياق النموذج (MCP) هو معيار مفتوح أنشأته Anthropic يحدد كيفية تواصل نماذج الذكاء الاصطناعي مع الأدوات الخارجية ومصادر البيانات والخدمات. فكر فيه كـ "USB-C للذكاء الاصطناعي" - موصل عالمي يتيح لأي وكيل ذكاء اصطناعي التحدث مع أي أداة من خلال واجهة موحدة.
منذ إطلاقه، تجاوز MCP 97 مليون تنزيل شهري لمجموعة التطوير SDK وتم تبنيه من قبل جميع مزودي الذكاء الاصطناعي الرئيسيين: Anthropic وOpenAI وGoogle وMicrosoft وAmazon. في هذا الدليل، سنستكشف كل ما تحتاج معرفته للبناء باستخدام MCP.
لماذا يوجد MCP
قبل MCP، كان كل تطبيق ذكاء اصطناعي يحتاج إلى بناء تكاملات مخصصة لكل أداة يريد استخدامها. هل تريد أن يقرأ الذكاء الاصطناعي الملفات؟ اكتب كود مخصص. الاستعلام من قاعدة بيانات؟ المزيد من الكود المخصص. النشر على Slack؟ تكامل آخر.
هذا خلق مشكلة N×M: N تطبيق ذكاء اصطناعي يحتاج كل منها M تكامل مخصص، مما أدى إلى جهد مكرر وأنظمة بيئية مجزأة.
يحل MCP هذا بـ بروتوكول واحد يمكن لأي عميل ذكاء اصطناعي استخدامه للتواصل مع أي خادم MCP:
المفاهيم الأساسية
يحتوي MCP على ثلاثة أساسيات جوهرية:
1. الأدوات (Tools)
الأدوات هي وظائف يمكن للذكاء الاصطناعي استدعاؤها. تمثل إجراءات مثل "إنشاء ملف" أو "الاستعلام من قاعدة بيانات" أو "إرسال رسالة". لكل أداة اسم ووصف ومخطط JSON Schema لمعاملاتها.
{ name: "create_issue", description: "Create a new GitHub issue", inputSchema: { type: "object", properties: { title: { type: "string", description: "Issue title" }, body: { type: "string", description: "Issue body" }, repo: { type: "string", description: "Repository name" } }, required: ["title", "repo"] } }
2. الموارد (Resources)
الموارد هي بيانات يمكن للذكاء الاصطناعي قراءتها. تمثل الملفات وسجلات قواعد البيانات واستجابات API أو أي مصدر بيانات آخر. يتم تحديد الموارد بواسطة URIs.
{ uri: "file:///Users/dev/project/README.md", name: "Project README", mimeType: "text/markdown" }
3. المطالبات (Prompts)
المطالبات هي قوالب قابلة لإعادة الاستخدام تساعد في هيكلة التفاعلات. يمكن أن تتضمن معاملات ديناميكية وهي مفيدة لتوحيد سير العمل الشائعة.
{ name: "code_review", description: "Review code changes for quality and security", arguments: [ { name: "diff", description: "The code diff to review", required: true } ] }
البنية المعمارية
يتبع MCP بنية عميل-خادم:
- المضيف: تطبيق الذكاء الاصطناعي (Claude Desktop أو Cursor أو تطبيقك المخصص)
- العميل: يحافظ على اتصال 1:1 مع خادم MCP
- الخادم: يكشف الأدوات والموارد والمطالبات للعميل
- النقل: يتم التواصل عبر JSON-RPC 2.0 عبر stdio (محلي) أو Server-Sent Events (عن بُعد)
بناء خادم MCP
لنبنِ خادم MCP عملي يتفاعل مع قائمة مهام مخزنة في ملف JSON.
الإعداد
mkdir mcp-todo-server && cd mcp-todo-server npm init -y npm install @modelcontextprotocol/sdk zod
تنفيذ الخادم
// src/index.ts import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; import { z } from "zod"; import fs from "fs"; const TODO_FILE = "./todos.json"; function readTodos(): { id: number; text: string; done: boolean }[] { if (!fs.existsSync(TODO_FILE)) return []; return JSON.parse(fs.readFileSync(TODO_FILE, "utf-8")); } function writeTodos(todos: { id: number; text: string; done: boolean }[]) { fs.writeFileSync(TODO_FILE, JSON.stringify(todos, null, 2)); } const server = new McpServer({ name: "todo-server", version: "1.0.0", }); // Tool: Add a todo server.tool( "add_todo", "Add a new todo item", { text: z.string().describe("The todo text") }, async ({ text }) => { const todos = readTodos(); const newTodo = { id: Date.now(), text, done: false }; todos.push(newTodo); writeTodos(todos); return { content: [{ type: "text", text: `Added: "${text}"` }] }; } ); // Tool: List todos server.tool( "list_todos", "List all todo items", {}, async () => { const todos = readTodos(); const list = todos .map((t) => `${t.done ? "✅" : "⬜"} [${t.id}] ${t.text}`) .join("\n"); return { content: [{ type: "text", text: list || "No todos yet." }] }; } ); // Tool: Complete a todo server.tool( "complete_todo", "Mark a todo as completed", { id: z.number().describe("The todo ID to complete") }, async ({ id }) => { const todos = readTodos(); const todo = todos.find((t) => t.id === id); if (!todo) return { content: [{ type: "text", text: "Todo not found." }] }; todo.done = true; writeTodos(todos); return { content: [{ type: "text", text: `Completed: "${todo.text}"` }] }; } ); // Resource: Current todos as a readable resource server.resource( "todos://list", "Current todo list", async () => ({ contents: [{ uri: "todos://list", mimeType: "application/json", text: JSON.stringify(readTodos(), null, 2), }], }) ); // Start the server const transport = new StdioServerTransport(); await server.connect(transport);
التكوين
لاستخدام هذا الخادم مع Claude Desktop، أضفه إلى تكوينك:
{ "mcpServers": { "todo": { "command": "npx", "args": ["tsx", "/path/to/mcp-todo-server/src/index.ts"] } } }
بناء عميل MCP
يمكنك أيضاً بناء عميل مخصص يتصل بأي خادم MCP:
import { Client } from "@modelcontextprotocol/sdk/client/index.js"; import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js"; const transport = new StdioClientTransport({ command: "npx", args: ["tsx", "./src/index.ts"], }); const client = new Client({ name: "my-client", version: "1.0.0" }); await client.connect(transport); // List available tools const { tools } = await client.listTools(); console.log("Available tools:", tools.map((t) => t.name)); // Call a tool const result = await client.callTool({ name: "add_todo", arguments: { text: "Write MCP blog post" }, }); console.log(result);
خوادم MCP الشائعة
نما نظام MCP البيئي بسرعة. إليك بعض الخوادم الأكثر شيوعاً:
| الخادم | الوصف | حالة الاستخدام |
|---|---|---|
| GitHub | إنشاء المشكلات وطلبات السحب وإدارة المستودعات | سير عمل التطوير |
| Slack | إرسال الرسائل وإدارة القنوات | تواصل الفريق |
| PostgreSQL | الاستعلام وإدارة قواعد البيانات | الوصول إلى البيانات |
| Filesystem | قراءة وكتابة والبحث في الملفات | التطوير المحلي |
| Puppeteer | أتمتة المتصفح والاستخراج | اختبار الويب |
| Sentry | مراقبة الأخطاء والتصحيح | دعم الإنتاج |
| Supabase | قاعدة البيانات والمصادقة والتخزين | عمليات الواجهة الخلفية |
MCP مقابل A2A (Agent-to-Agent)
بينما يتعامل MCP مع تواصل الوكيل-الأداة، يتعامل بروتوكول A2A (Agent-to-Agent) من Google مع تواصل الوكيل-الوكيل. هما متكاملان:
- MCP: كيف يستخدم وكيل الذكاء الاصطناعي الأدوات (تكامل رأسي)
- A2A: كيف يتعاون وكلاء الذكاء الاصطناعي مع بعضهم البعض (تكامل أفقي)
أفضل الممارسات
- اجعل الخوادم مركزة: خادم واحد لكل مجال (خادم GitHub، خادم Slack، إلخ). لا تبنِ خوادم متجانسة.
- تحقق من المدخلات باستخدام Zod: تحقق دائماً من مدخلات الأدوات بمخططات مناسبة.
- تعامل مع الأخطاء بأناقة: أرجع رسائل خطأ ذات معنى، وليس تتبعات المكدس.
- استخدم الموارد للبيانات للقراءة فقط: إذا كان الذكاء الاصطناعي يحتاج فقط لقراءة البيانات، اعرضها كمورد وليس كأداة.
- أضف أوصافاً مناسبة: الأوصاف الجيدة للأدوات والمعاملات تساعد الذكاء الاصطناعي على فهم متى وكيف يستخدم كل أداة.
- اختبر باستخدام MCP Inspector: استخدم
npx @modelcontextprotocol/inspectorلاختبار خادمك بشكل تفاعلي.
البدء
# Create a new MCP server from template npx @modelcontextprotocol/create-server my-server # Test with the MCP Inspector npx @modelcontextprotocol/inspector npx tsx ./src/index.ts
الخاتمة
أصبح MCP المعيار الفعلي لاستخدام أدوات الذكاء الاصطناعي في 2026. سواء كنت تبني وكلاء ذكاء اصطناعي مخصصين، أو توسع Claude Code، أو تنشئ تكاملات لمنصات موجودة، فإن فهم MCP أمر ضروري. البروتوكول بسيط بما يكفي لتعلمه في فترة ما بعد الظهر ولكنه قوي بما يكفي لبناء سير عمل ذكاء اصطناعي جاهز للإنتاج.
الخطوات التالية:
- استكشف مواصفات MCP
- تصفح خوادم MCP الموجودة للإلهام
- ابنِ خادمك الأول باستخدام TypeScript أو Python SDK
- اختبره مع Claude Desktop أو MCP Inspector