spinny:~/writing $ less mcp-model-context-protocol-guide.md
12**Model Context Protocol (MCP)** یک استاندارد باز است که توسط Anthropic ایجاد شده و نحوه ارتباط مدلهای هوش مصنوعی با ابزارهای خارجی، منابع داده و سرویسها را تعریف میکند. آن را به عنوان "USB-C هوش مصنوعی" در نظر بگیرید - یک اتصالدهنده جهانی که به هر عامل هوش مصنوعی اجازه میدهد از طریق یک رابط استاندارد با هر ابزاری صحبت کند.34از زمان راهاندازی، MCP از **97 میلیون دانلود ماهانه SDK** عبور کرده و توسط تمام ارائهدهندگان بزرگ هوش مصنوعی پذیرفته شده است: Anthropic، OpenAI، Google، Microsoft و Amazon. در این راهنما، همه چیزی که برای ساخت با MCP نیاز دارید را بررسی میکنیم.56## چرا MCP وجود دارد78قبل از MCP، هر برنامه هوش مصنوعی باید برای هر ابزاری که میخواست استفاده کند، یکپارچهسازی سفارشی میساخت. میخواهید هوش مصنوعی شما فایل بخواند؟ کد سفارشی بنویسید. پایگاه داده را کوئری کنید؟ کد سفارشی بیشتر. در Slack پست کنید؟ یکپارچهسازی دیگر.910این یک **مشکل N×M** ایجاد کرد: N برنامه هوش مصنوعی که هر کدام به M یکپارچهسازی سفارشی نیاز داشتند، که منجر به تلاش تکراری و اکوسیستمهای پراکنده شد.1112```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```2324MCP این مشکل را با **یک پروتکل واحد** حل میکند که هر کلاینت هوش مصنوعی میتواند برای ارتباط با هر سرور MCP استفاده کند:2526```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```3637## مفاهیم اصلی3839MCP سه اصل بنیادی دارد:4041### 1. ابزارها (Tools)42ابزارها توابعی هستند که هوش مصنوعی میتواند فراخوانی کند. آنها اقداماتی مانند "ایجاد فایل"، "کوئری پایگاه داده" یا "ارسال پیام" را نمایندگی میکنند. هر ابزار یک نام، توضیح و یک JSON Schema برای پارامترهایش دارد.4344```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```5960### 2. منابع (Resources)61منابع دادههایی هستند که هوش مصنوعی میتواند بخواند. آنها فایلها، رکوردهای پایگاه داده، پاسخهای API یا هر منبع داده دیگری را نمایندگی میکنند. منابع با URIها شناسایی میشوند.6263```typescript64{65 uri: "file:///Users/dev/project/README.md",66 name: "Project README",67 mimeType: "text/markdown"68}69```7071### 3. پرامپتها (Prompts)72پرامپتها قالبهای قابل استفاده مجدد هستند که به ساختاردهی تعاملات کمک میکنند. میتوانند شامل پارامترهای پویا باشند و برای استانداردسازی جریانهای کاری رایج مفید هستند.7374```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```8384## معماری8586MCP از معماری کلاینت-سرور پیروی میکند:8788```mermaid89graph LR90 subgraph "Host Application"91 Client[MCP Client]92 end9394 subgraph "MCP Server"95 Server[Server Process]96 Server --> Tools[Tools]97 Server --> Resources[Resources]98 Server --> Prompts[Prompts]99 end100101 Client -- "JSON-RPC 2.0\n(stdio or SSE)" --> Server102```103104- **میزبان**: برنامه هوش مصنوعی (Claude Desktop، Cursor، برنامه سفارشی شما)105- **کلاینت**: اتصال 1:1 با یک سرور MCP را حفظ میکند106- **سرور**: ابزارها، منابع و پرامپتها را به کلاینت ارائه میدهد107- **انتقال**: ارتباط از طریق JSON-RPC 2.0 روی stdio (محلی) یا Server-Sent Events (راه دور) انجام میشود108109## ساخت سرور MCP110111بیایید یک سرور MCP عملی بسازیم که با لیست وظایف ذخیره شده در فایل JSON تعامل دارد.112113### راهاندازی114115```bash116mkdir mcp-todo-server && cd mcp-todo-server117npm init -y118npm install @modelcontextprotocol/sdk zod119```120121### پیادهسازی سرور122123```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";129130const TODO_FILE = "./todos.json";131132function 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}136137function writeTodos(todos: { id: number; text: string; done: boolean }[]) {138 fs.writeFileSync(TODO_FILE, JSON.stringify(todos, null, 2));139}140141const server = new McpServer({142 name: "todo-server",143 version: "1.0.0",144});145146// 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);159160// 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);173174// 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);188189// 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);201202// Start the server203const transport = new StdioServerTransport();204await server.connect(transport);205```206207### پیکربندی208209برای استفاده از این سرور با Claude Desktop، آن را به پیکربندی خود اضافه کنید:210211```json212{213 "mcpServers": {214 "todo": {215 "command": "npx",216 "args": ["tsx", "/path/to/mcp-todo-server/src/index.ts"]217 }218 }219}220```221222## ساخت کلاینت MCP223224همچنین میتوانید یک کلاینت سفارشی بسازید که به هر سرور MCP متصل شود:225226```typescript227import { Client } from "@modelcontextprotocol/sdk/client/index.js";228import { StdioClientTransport } from "@modelcontextprotocol/sdk/client/stdio.js";229230const transport = new StdioClientTransport({231 command: "npx",232 args: ["tsx", "./src/index.ts"],233});234235const client = new Client({ name: "my-client", version: "1.0.0" });236await client.connect(transport);237238// List available tools239const { tools } = await client.listTools();240console.log("Available tools:", tools.map((t) => t.name));241242// Call a tool243const result = await client.callTool({244 name: "add_todo",245 arguments: { text: "Write MCP blog post" },246});247console.log(result);248```249250## سرورهای محبوب MCP251252اکوسیستم MCP به سرعت رشد کرده است. در اینجا برخی از محبوبترین سرورها آورده شده:253254| سرور | توضیح | مورد استفاده |255|------|-------|-------------|256| **GitHub** | ایجاد issue، PR، مدیریت repo | جریانهای کاری توسعه |257| **Slack** | ارسال پیام، مدیریت کانال | ارتباطات تیمی |258| **PostgreSQL** | کوئری و مدیریت پایگاه داده | دسترسی به داده |259| **Filesystem** | خواندن، نوشتن و جستجوی فایل | توسعه محلی |260| **Puppeteer** | اتوماسیون مرورگر و اسکرپینگ | تست وب |261| **Sentry** | نظارت خطا و دیباگ | پشتیبانی تولید |262| **Supabase** | پایگاه داده، احراز هویت، ذخیرهسازی | عملیات بکاند |263264## MCP در مقابل A2A (Agent-to-Agent)265266در حالی که MCP ارتباط **عامل-ابزار** را مدیریت میکند، پروتکل **A2A (Agent-to-Agent)** گوگل ارتباط **عامل-عامل** را مدیریت میکند. آنها مکمل یکدیگر هستند:267268```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```274275- **MCP**: چگونه یک عامل هوش مصنوعی از ابزارها استفاده میکند (یکپارچهسازی عمودی)276- **A2A**: چگونه عاملهای هوش مصنوعی با یکدیگر همکاری میکنند (یکپارچهسازی افقی)277278## بهترین شیوهها2792801. **سرورها را متمرکز نگه دارید**: یک سرور برای هر حوزه (سرور GitHub، سرور Slack و غیره). سرورهای یکپارچه نسازید.2812. **ورودیها را با Zod اعتبارسنجی کنید**: همیشه ورودیهای ابزار را با طرحوارههای مناسب اعتبارسنجی کنید.2823. **خطاها را با ظرافت مدیریت کنید**: پیامهای خطای معنادار برگردانید، نه stack trace.2834. **از منابع برای دادههای فقط خواندنی استفاده کنید**: اگر هوش مصنوعی فقط نیاز به خواندن داده دارد، آن را به عنوان منبع ارائه دهید نه ابزار.2845. **توضیحات مناسب اضافه کنید**: توضیحات خوب ابزار و پارامتر به هوش مصنوعی کمک میکند بفهمد چه زمانی و چگونه از هر ابزار استفاده کند.2856. **با MCP Inspector تست کنید**: از `npx @modelcontextprotocol/inspector` برای تست تعاملی سرور خود استفاده کنید.286287## شروع کار288289```bash290# Create a new MCP server from template291npx @modelcontextprotocol/create-server my-server292293# Test with the MCP Inspector294npx @modelcontextprotocol/inspector npx tsx ./src/index.ts295```296297## نتیجهگیری298299MCP در سال 2026 به استاندارد عملی استفاده از ابزار هوش مصنوعی تبدیل شده است. چه در حال ساخت عاملهای هوش مصنوعی سفارشی باشید، چه Claude Code را گسترش دهید یا یکپارچهسازی برای پلتفرمهای موجود بسازید، درک MCP ضروری است. این پروتکل به اندازه کافی ساده است که در یک بعدازظهر یاد بگیرید اما به اندازه کافی قدرتمند است برای ساخت جریانهای کاری هوش مصنوعی در سطح تولید.300301**مراحل بعدی:**302- [مشخصات MCP](https://spec.modelcontextprotocol.io/) را بررسی کنید303- [سرورهای MCP موجود](https://github.com/modelcontextprotocol/servers) را برای الهام مرور کنید304- اولین سرور خود را با TypeScript یا Python SDK بسازید305- آن را با Claude Desktop یا MCP Inspector تست کنید306
:MCP (Model Context Protocol): راهنمای کامل برای توسعهدهندگانlines 1-306 (END) — press q to close