Model Context Protocol (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 یا هر منبع داده دیگری را نمایندگی میکنند. منابع با URIها شناسایی میشوند.
{ 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 | ایجاد issue، PR، مدیریت repo | جریانهای کاری توسعه |
| Slack | ارسال پیام، مدیریت کانال | ارتباطات تیمی |
| PostgreSQL | کوئری و مدیریت پایگاه داده | دسترسی به داده |
| Filesystem | خواندن، نوشتن و جستجوی فایل | توسعه محلی |
| Puppeteer | اتوماسیون مرورگر و اسکرپینگ | تست وب |
| Sentry | نظارت خطا و دیباگ | پشتیبانی تولید |
| Supabase | پایگاه داده، احراز هویت، ذخیرهسازی | عملیات بکاند |
MCP در مقابل A2A (Agent-to-Agent)
در حالی که MCP ارتباط عامل-ابزار را مدیریت میکند، پروتکل A2A (Agent-to-Agent) گوگل ارتباط عامل-عامل را مدیریت میکند. آنها مکمل یکدیگر هستند:
- MCP: چگونه یک عامل هوش مصنوعی از ابزارها استفاده میکند (یکپارچهسازی عمودی)
- A2A: چگونه عاملهای هوش مصنوعی با یکدیگر همکاری میکنند (یکپارچهسازی افقی)
بهترین شیوهها
- سرورها را متمرکز نگه دارید: یک سرور برای هر حوزه (سرور GitHub، سرور Slack و غیره). سرورهای یکپارچه نسازید.
- ورودیها را با Zod اعتبارسنجی کنید: همیشه ورودیهای ابزار را با طرحوارههای مناسب اعتبارسنجی کنید.
- خطاها را با ظرافت مدیریت کنید: پیامهای خطای معنادار برگردانید، نه stack trace.
- از منابع برای دادههای فقط خواندنی استفاده کنید: اگر هوش مصنوعی فقط نیاز به خواندن داده دارد، آن را به عنوان منبع ارائه دهید نه ابزار.
- توضیحات مناسب اضافه کنید: توضیحات خوب ابزار و پارامتر به هوش مصنوعی کمک میکند بفهمد چه زمانی و چگونه از هر ابزار استفاده کند.
- با 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 تست کنید