spinny:~/writing $ vim mcp-model-context-protocol-guide.md
1~2**بروتوكول سياق النموذج (MCP)** هو معيار مفتوح أنشأته Anthropic يحدد كيفية تواصل نماذج الذكاء الاصطناعي مع الأدوات الخارجية ومصادر البيانات والخدمات. فكر فيه كـ "USB-C للذكاء الاصطناعي" - موصل عالمي يتيح لأي وكيل ذكاء اصطناعي التحدث مع أي أداة من خلال واجهة موحدة.3~4منذ إطلاقه، تجاوز MCP **97 مليون تنزيل شهري لمجموعة التطوير SDK** وتم تبنيه من قبل جميع مزودي الذكاء الاصطناعي الرئيسيين: Anthropic وOpenAI وGoogle وMicrosoft وAmazon. في هذا الدليل، سنستكشف كل ما تحتاج معرفته للبناء باستخدام MCP.5~6## لماذا يوجد MCP7~8قبل MCP، كان كل تطبيق ذكاء اصطناعي يحتاج إلى بناء تكاملات مخصصة لكل أداة يريد استخدامها. هل تريد أن يقرأ الذكاء الاصطناعي الملفات؟ اكتب كود مخصص. الاستعلام من قاعدة بيانات؟ المزيد من الكود المخصص. النشر على Slack؟ تكامل آخر.9~10هذا خلق **مشكلة N×M**: N تطبيق ذكاء اصطناعي يحتاج كل منها M تكامل مخصص، مما أدى إلى جهد مكرر وأنظمة بيئية مجزأة.11~12```mermaid13graph TD14 subgraph "Before MCP (N×M)"15 A1[AI App 1] --> T1[GitHub Integration]16 A1 --> T2[Slack Integration]17 A1 --> T3[DB Integration]18 A2[AI App 2] --> T4[GitHub Integration]19 A2 --> T5[Slack Integration]20 A2 --> T6[DB Integration]21 end22```23~24يحل MCP هذا بـ **بروتوكول واحد** يمكن لأي عميل ذكاء اصطناعي استخدامه للتواصل مع أي خادم MCP:25~26```mermaid27graph TD28 subgraph "With MCP (N+M)"29 A1[AI App 1] --> MCP[MCP Protocol]30 A2[AI App 2] --> MCP31 MCP --> S1[GitHub Server]32 MCP --> S2[Slack Server]33 MCP --> S3[DB Server]34 end35```36~37## المفاهيم الأساسية38~39يحتوي MCP على ثلاثة أساسيات جوهرية:40~41### 1. الأدوات (Tools)42الأدوات هي وظائف يمكن للذكاء الاصطناعي استدعاؤها. تمثل إجراءات مثل "إنشاء ملف" أو "الاستعلام من قاعدة بيانات" أو "إرسال رسالة". لكل أداة اسم ووصف ومخطط JSON Schema لمعاملاتها.43~44```typescript45{46 name: "create_issue",47 description: "Create a new GitHub issue",48 inputSchema: {49 type: "object",50 properties: {51 title: { type: "string", description: "Issue title" },52 body: { type: "string", description: "Issue body" },53 repo: { type: "string", description: "Repository name" }54 },55 required: ["title", "repo"]56 }57}58```59~60### 2. الموارد (Resources)61الموارد هي بيانات يمكن للذكاء الاصطناعي قراءتها. تمثل الملفات وسجلات قواعد البيانات واستجابات API أو أي مصدر بيانات آخر. يتم تحديد الموارد بواسطة URIs.62~63```typescript64{65 uri: "file:///Users/dev/project/README.md",66 name: "Project README",67 mimeType: "text/markdown"68}69```70~71### 3. المطالبات (Prompts)72المطالبات هي قوالب قابلة لإعادة الاستخدام تساعد في هيكلة التفاعلات. يمكن أن تتضمن معاملات ديناميكية وهي مفيدة لتوحيد سير العمل الشائعة.73~74```typescript75{76 name: "code_review",77 description: "Review code changes for quality and security",78 arguments: [79 { name: "diff", description: "The code diff to review", required: true }80 ]81}82```83~84## البنية المعمارية85~86يتبع MCP بنية عميل-خادم:87~88```mermaid89graph LR90 subgraph "Host Application"91 Client[MCP Client]92 end93~94 subgraph "MCP Server"95 Server[Server Process]96 Server --> Tools[Tools]97 Server --> Resources[Resources]98 Server --> Prompts[Prompts]99 end100~101 Client -- "JSON-RPC 2.0\n(stdio or SSE)" --> Server102```103~104- **المضيف**: تطبيق الذكاء الاصطناعي (Claude Desktop أو Cursor أو تطبيقك المخصص)105- **العميل**: يحافظ على اتصال 1:1 مع خادم MCP106- **الخادم**: يكشف الأدوات والموارد والمطالبات للعميل107- **النقل**: يتم التواصل عبر JSON-RPC 2.0 عبر stdio (محلي) أو Server-Sent Events (عن بُعد)108~109## بناء خادم MCP110~111لنبنِ خادم MCP عملي يتفاعل مع قائمة مهام مخزنة في ملف JSON.112~113### الإعداد114~115```bash116mkdir mcp-todo-server && cd mcp-todo-server117npm init -y118npm install @modelcontextprotocol/sdk zod119```120~121### تنفيذ الخادم122~123```typescript124// src/index.ts125import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";126import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";127import { z } from "zod";128import fs from "fs";129~130const TODO_FILE = "./todos.json";131~132function readTodos(): { id: number; text: string; done: boolean }[] {133 if (!fs.existsSync(TODO_FILE)) return [];134 return JSON.parse(fs.readFileSync(TODO_FILE, "utf-8"));135}136~137function writeTodos(todos: { id: number; text: string; done: boolean }[]) {138 fs.writeFileSync(TODO_FILE, JSON.stringify(todos, null, 2));139}140~141const server = new McpServer({142 name: "todo-server",143 version: "1.0.0",144});145~146// Tool: Add a todo147server.tool(148 "add_todo",149 "Add a new todo item",150 { text: z.string().describe("The todo text") },151 async ({ text }) => {152 const todos = readTodos();153 const newTodo = { id: Date.now(), text, done: false };154 todos.push(newTodo);155 writeTodos(todos);156 return { content: [{ type: "text", text: `Added: "${text}"` }] };157 }158);159~160// Tool: List todos161server.tool(162 "list_todos",163 "List all todo items",164 {},165 async () => {166 const todos = readTodos();167 const list = todos168 .map((t) => `${t.done ? "✅" : "⬜"} [${t.id}] ${t.text}`)169 .join("\n");170 return { content: [{ type: "text", text: list || "No todos yet." }] };171 }172);173~174// Tool: Complete a todo175server.tool(176 "complete_todo",177 "Mark a todo as completed",178 { id: z.number().describe("The todo ID to complete") },179 async ({ id }) => {180 const todos = readTodos();181 const todo = todos.find((t) => t.id === id);182 if (!todo) return { content: [{ type: "text", text: "Todo not found." }] };183 todo.done = true;184 writeTodos(todos);185 return { content: [{ type: "text", text: `Completed: "${todo.text}"` }] };186 }187);188~189// Resource: Current todos as a readable resource190server.resource(191 "todos://list",192 "Current todo list",193 async () => ({194 contents: [{195 uri: "todos://list",196 mimeType: "application/json",197 text: JSON.stringify(readTodos(), null, 2),198 }],199 })200);201~202// Start the server203const transport = new StdioServerTransport();204await server.connect(transport);205```206~207### التكوين208~209لاستخدام هذا الخادم مع Claude Desktop، أضفه إلى تكوينك:210~211```json212{213 "mcpServers": {214 "todo": {215 "command": "npx",216 "args": ["tsx", "/path/to/mcp-todo-server/src/index.ts"]217 }218 }219}220```221~222## بناء عميل MCP223~224يمكنك أيضاً بناء عميل مخصص يتصل بأي خادم MCP:225~226```typescript227import { Client } from "@modelcontextprotocol/sdk/client/index.js";228import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js";229~230const transport = new StdioClientTransport({231 command: "npx",232 args: ["tsx", "./src/index.ts"],233});234~235const client = new Client({ name: "my-client", version: "1.0.0" });236await client.connect(transport);237~238// List available tools239const { tools } = await client.listTools();240console.log("Available tools:", tools.map((t) => t.name));241~242// Call a tool243const result = await client.callTool({244 name: "add_todo",245 arguments: { text: "Write MCP blog post" },246});247console.log(result);248```249~250## خوادم MCP الشائعة251~252نما نظام MCP البيئي بسرعة. إليك بعض الخوادم الأكثر شيوعاً:253~254| الخادم | الوصف | حالة الاستخدام |255|--------|-------|----------------|256| **GitHub** | إنشاء المشكلات وطلبات السحب وإدارة المستودعات | سير عمل التطوير |257| **Slack** | إرسال الرسائل وإدارة القنوات | تواصل الفريق |258| **PostgreSQL** | الاستعلام وإدارة قواعد البيانات | الوصول إلى البيانات |259| **Filesystem** | قراءة وكتابة والبحث في الملفات | التطوير المحلي |260| **Puppeteer** | أتمتة المتصفح والاستخراج | اختبار الويب |261| **Sentry** | مراقبة الأخطاء والتصحيح | دعم الإنتاج |262| **Supabase** | قاعدة البيانات والمصادقة والتخزين | عمليات الواجهة الخلفية |263~264## MCP مقابل A2A (Agent-to-Agent)265~266بينما يتعامل MCP مع تواصل **الوكيل-الأداة**، يتعامل بروتوكول **A2A (Agent-to-Agent)** من Google مع تواصل **الوكيل-الوكيل**. هما متكاملان:267~268```mermaid269graph TD270 Agent1[Agent 1] -- "A2A Protocol" --> Agent2[Agent 2]271 Agent1 -- "MCP Protocol" --> Tool1[GitHub MCP Server]272 Agent2 -- "MCP Protocol" --> Tool2[Database MCP Server]273```274~275- **MCP**: كيف يستخدم وكيل الذكاء الاصطناعي الأدوات (تكامل رأسي)276- **A2A**: كيف يتعاون وكلاء الذكاء الاصطناعي مع بعضهم البعض (تكامل أفقي)277~278## أفضل الممارسات279~2801. **اجعل الخوادم مركزة**: خادم واحد لكل مجال (خادم GitHub، خادم Slack، إلخ). لا تبنِ خوادم متجانسة.2812. **تحقق من المدخلات باستخدام Zod**: تحقق دائماً من مدخلات الأدوات بمخططات مناسبة.2823. **تعامل مع الأخطاء بأناقة**: أرجع رسائل خطأ ذات معنى، وليس تتبعات المكدس.2834. **استخدم الموارد للبيانات للقراءة فقط**: إذا كان الذكاء الاصطناعي يحتاج فقط لقراءة البيانات، اعرضها كمورد وليس كأداة.2845. **أضف أوصافاً مناسبة**: الأوصاف الجيدة للأدوات والمعاملات تساعد الذكاء الاصطناعي على فهم متى وكيف يستخدم كل أداة.2856. **اختبر باستخدام MCP Inspector**: استخدم `npx @modelcontextprotocol/inspector` لاختبار خادمك بشكل تفاعلي.286~287## البدء288~289```bash290# Create a new MCP server from template291npx @modelcontextprotocol/create-server my-server292~293# Test with the MCP Inspector294npx @modelcontextprotocol/inspector npx tsx ./src/index.ts295```296~297## الخاتمة298~299أصبح MCP المعيار الفعلي لاستخدام أدوات الذكاء الاصطناعي في 2026. سواء كنت تبني وكلاء ذكاء اصطناعي مخصصين، أو توسع Claude Code، أو تنشئ تكاملات لمنصات موجودة، فإن فهم MCP أمر ضروري. البروتوكول بسيط بما يكفي لتعلمه في فترة ما بعد الظهر ولكنه قوي بما يكفي لبناء سير عمل ذكاء اصطناعي جاهز للإنتاج.300~301**الخطوات التالية:**302- استكشف [مواصفات MCP](https://spec.modelcontextprotocol.io/)303- تصفح [خوادم MCP الموجودة](https://github.com/modelcontextprotocol/servers) للإلهام304- ابنِ خادمك الأول باستخدام TypeScript أو Python SDK305- اختبره مع Claude Desktop أو MCP Inspector306~
NORMAL · mcp-model-context-protocol-guide.md [readonly]306 lines · :q to close