۱۴۰۵ مهر ۶, دوشنبه
دلار آمریکا۲۴۳٬۴۱۵▲ ۳٫۵۸٪یورو۲۷۷٬۰۰۰▲ ۳٫۳۹٪درهم امارات۶۶٬۳۰۵▲ ۳٫۶۱٪سکه امامی۲۴۴٬۵۰۵٬۰۰۰▲ ۱٫۶۶٪طلای ۱۸ عیار (گرم)۲۴٬۳۱۹٬۰۰۰▲ ۱٫۷۵٪انس طلا۴٬۱۵۰ $▼ ۳٫۲۶٪تتر۲۴۴٬۴۵۶▲ ۳٫۲۴٪بیت‌کوین۸۲٬۶۵۳ $▼ ۲٫۴۱٪اتریوم۲٬۶۴۰ $▼ ۱٫۸۹٪سولانا۱۱۷٫۸۴ $▼ ۴٫۳۴٪اپل۳۴۱٫۰۷ $▲ ۱٫۵۳٪انویدیا۲۲۵٫۰۷ $▲ ۰٫۲۲٪مایکروسافت۵۱۶٫۱۷ $▲ ۳٫۶۶٪آلفابت (گوگل)۳۴۳٫۹۲ $▲ ۰٫۴۶٪تسلا۳۷۲٫۱۱ $▼ ۱٫۵۴٪شاخص نزدک۲۷٬۰۶۹ $▲ ۰٫۴۸٪
نرخ ارز

پروتکل MCP چیست؟ ایجنت‌های هوش مصنوعی به زبان ساده + ساخت سرور

پروتکل MCP چیست و چطور به ایجنت‌های هوش مصنوعی دست و پا می‌دهد؟ معماری، قابلیت‌ها، تغییرات نسخه ۲۰۲۶ و ساخت اولین سرور MCP با پایتون در چند دقیقه.

هوش مصنوعی۶ دقیقه مطالعه
پروتکل MCP چیست؟ ایجنت‌های هوش مصنوعی به زبان ساده + ساخت سرور
فهرست مطالب
  1. ایجنت هوش مصنوعی چیست؟
  2. مشکلی که MCP حل می‌کند
  3. پروتکل MCP چیست و از کجا آمد؟
  4. معماری MCP: میزبان، کلاینت، سرور
  5. سه قابلیت اصلی سرور MCP
  6. پروتکل MCP در نسخه ۲۰۲۶ چه تغییری کرد؟
  7. ساخت اولین سرور MCP با پایتون
  8. امنیت در دنیای ایجنت‌ها
  9. جمع‌بندی

چت‌بات‌ها حرف می‌زنند؛ ایجنت‌ها کار انجام می‌دهند. فاصله این دو، دسترسی به ابزار است: خواندن فایل، جست‌وجو در پایگاه داده، ساختن تیکت یا اجرای تست. پروتکل MCP استانداردی است که این اتصال را یکپارچه کرده و امروز تقریباً همه ابزارهای مهم هوش مصنوعی از آن پشتیبانی می‌کنند. در این مقاله ایجنت‌ها و MCP را به زبان ساده توضیح می‌دهیم و در آخر، اولین سرور MCP خودمان را با پایتون می‌سازیم.

ایجنت هوش مصنوعی چیست؟

یک مدل زبانی بزرگ به‌تنهایی فقط متن می‌گیرد و متن پس می‌دهد. ایجنت هوش مصنوعی (AI Agent) همان مدل است که در یک حلقه قرار گرفته و به ابزار دسترسی دارد:

  1. کاربر هدفی را مطرح می‌کند؛ مثلاً «تست‌های شکست‌خورده را پیدا و درست کن».
  2. مدل تصمیم می‌گیرد کدام ابزار را با چه ورودی‌ای صدا بزند.
  3. برنامه میزبان ابزار را اجرا می‌کند و نتیجه را به مدل برمی‌گرداند.
  4. مدل نتیجه را می‌بیند و قدم بعدی را انتخاب می‌کند؛ تا وقتی کار تمام شود.

توانایی مدل برای درخواست اجرای ابزار را فراخوانی ابزار (Tool Calling یا Function Calling) می‌نامند. ابزارهایی مثل Claude Code و Codex دقیقاً همین حلقه را برای کدنویسی پیاده کرده‌اند؛ مقایسه‌شان را در راهنمای ابزارهای هوش مصنوعی برای برنامه‌نویسی آورده‌ایم.

مشکلی که MCP حل می‌کند

فرض کنید ۱۰ اپلیکیشن هوش مصنوعی و ۱۰۰ ابزار و سرویس داریم. بدون استاندارد، هر ابزار باید برای هر اپلیکیشن جداگانه یکپارچه شود؛ یعنی صدها پیاده‌سازی تکراری. این همان مشکل قدیمی «N×M» است.

MCP این معادله را به «N+M» تبدیل می‌کند: هر ابزار یک بار به‌صورت سرور MCP نوشته می‌شود و هر اپلیکیشن یک بار کلاینت MCP را پیاده می‌کند. از آن به بعد، همه با هم کار می‌کنند. مستندات رسمی MCP این پروتکل را به درگاه USB-C تشبیه می‌کند؛ یک درگاه استاندارد برای وصل کردن هر چیزی.

پروتکل MCP چیست و از کجا آمد؟

Model Context Protocol را Anthropic در نوامبر ۲۰۲۴ به‌عنوان یک استاندارد باز معرفی کرد. پذیرش آن سریع بود و در دسامبر ۲۰۲۵ Anthropic مالکیت پروتکل را به Agentic AI Foundation اهدا کرد؛ صندوقی زیر نظر بنیاد لینوکس که Anthropic، Block و OpenAI هم‌بنیان‌گذار آن هستند.

طبق اعلام وبلاگ رسمی MCP در همان زمان، این پروتکل بیش از ۹۷ میلیون دانلود ماهانه SDK و ۱۰ هزار سرور فعال داشت و ChatGPT، Claude، Cursor، Gemini، Microsoft Copilot و Visual Studio Code از آن پشتیبانی می‌کردند.

معماری MCP: میزبان، کلاینت، سرور

MCP سه نقش اصلی دارد:

نقش توضیح مثال
میزبان (Host) اپلیکیشنی که کاربر با آن کار می‌کند و مدل را اجرا می‌کند Claude Code، Cursor، VS Code
کلاینت (Client) بخشی از میزبان که با یک سرور MCP ارتباط برقرار می‌کند درون خود میزبان قرار دارد
سرور (Server) برنامه‌ای که ابزارها و داده‌ها را ارائه می‌دهد سرور GitHub، سرور پایگاه داده، سرور شما

پیام‌ها با قالب JSON-RPC 2.0 رد و بدل می‌شوند و دو روش انتقال (Transport) استاندارد وجود دارد:

  • stdio: سرور به‌عنوان یک پروسه محلی اجرا می‌شود و از ورودی و خروجی استاندارد حرف می‌زند. ساده‌ترین گزینه برای ابزارهای محلی.
  • Streamable HTTP: سرور روی شبکه اجرا می‌شود و از طریق HTTP در دسترس است. مناسب سرویس‌های ابری و تیمی.

سه قابلیت اصلی سرور MCP

ابزارها (Tools): توابعی که مدل می‌تواند صدا بزند؛ مثل create_issue یا run_query. هر ابزار نام، توضیح و طرح‌واره ورودی (JSON Schema) دارد و مدل بر اساس همین توضیح تصمیم می‌گیرد کی از آن استفاده کند.

منابع (Resources): داده‌هایی که با یک URI خوانده می‌شوند؛ مثل محتوای یک فایل یا رکورد پایگاه داده. منابع برای «دادن زمینه» به مدل‌اند، نه انجام کار.

پرامپت‌ها (Prompts): قالب‌های آماده‌ای که سرور پیشنهاد می‌کند و کاربر می‌تواند انتخابشان کند؛ مثلاً یک قالب «بازبینی کد امنیتی».

پروتکل MCP در نسخه ۲۰۲۶ چه تغییری کرد؟

آخرین نسخه مشخصات MCP با شناسه 2026-07-28 تغییرات بزرگی نسبت به نسخه 2025-11-25 دارد. مهم‌ترین‌هایش:

  • بی‌حالت شدن (Stateless): دست‌دهی اولیه initialize حذف شده و هر درخواست نسخه پروتکل و قابلیت‌های کلاینت را خودش در _meta حمل می‌کند. نشست‌های پروتکلی و هدر Mcp-Session-Id هم از Streamable HTTP حذف شده‌اند. نتیجه: سرورهای MCP را خیلی راحت‌تر می‌شود پشت لودبالانسر مقیاس داد.
  • متد server/discover: سرورها باید نسخه‌های پشتیبانی‌شده، قابلیت‌ها و هویت خود را از این راه اعلام کنند.
  • درخواست‌های چندمرحله‌ای (MRTR): وقتی سرور به اطلاعات بیشتری از کاربر یا کلاینت نیاز دارد، به‌جای ارسال درخواست از سمت سرور، پاسخی از نوع input_required برمی‌گرداند و کلاینت درخواست را با اطلاعات تکمیلی تکرار می‌کند.
  • منسوخ شدن چند قابلیت: قابلیت‌های Roots، Sampling و Logging منسوخ (Deprecated) اعلام شده‌اند و پیاده‌سازی‌های جدید نباید سراغشان بروند.

اگر سرور MCP قدیمی دارید، برای مهاجرت فرصت دارید: طبق سیاست تازه چرخه عمر، قابلیت‌های منسوخ دست‌کم ۱۲ ماه در مشخصات باقی می‌مانند.

ساخت اولین سرور MCP با پایتون

بیایید یک سرور کوچک بسازیم که به مدل اجازه می‌دهد در یادداشت‌های Markdown شما جست‌وجو کند و آن‌ها را بخواند. نسخه ۲ از SDK رسمی پایتون (در زمان نگارش، نسخه 2.2.0) از مشخصات جدید پشتیبانی می‌کند و به پایتون ۳٫۱۰ یا جدیدتر نیاز دارد.

pip install "mcp[cli]"

فایل server.py:

from pathlib import Path

from mcp.server import MCPServer

mcp = MCPServer("notes")
NOTES_DIR = (Path.home() / "notes").resolve()


@mcp.tool()
def search_notes(query: str, limit: int = 5) -> list[str]:
    """Search markdown notes for a keyword and return matching file names."""
    matches = []
    for path in sorted(NOTES_DIR.glob("*.md")):
        if query.lower() in path.read_text(encoding="utf-8").lower():
            matches.append(path.name)
    return matches[:limit]


@mcp.tool()
def read_note(name: str) -> str:
    """Return the full content of a single note by its file name."""
    path = (NOTES_DIR / name).resolve()
    if path.parent != NOTES_DIR or path.suffix != ".md":
        raise ValueError("Only .md files inside the notes folder can be read.")
    return path.read_text(encoding="utf-8")


if __name__ == "__main__":
    mcp.run()  # stdio transport by default

چند نکته در همین کد کوتاه:

  • SDK از type hintها و docstring هر تابع، نام، توضیح و طرح‌واره ورودی ابزار را خودکار می‌سازد. توضیح خوب یعنی مدل بهتر می‌فهمد کی از ابزار استفاده کند.
  • در read_note مسیر فایل را بررسی می‌کنیم تا مدل نتواند با ورودی‌ای مثل ../.ssh/id_rsa از پوشه یادداشت‌ها بیرون برود. هیچ‌وقت به ورودی‌ای که مدل تولید می‌کند اعتماد کامل نکنید.
  • کلاس MCPServer در نسخه ۲ جایگزین FastMCP نسخه ۱ شده است؛ اگر آموزش قدیمی‌تری دیده‌اید، تفاوت از همین‌جاست.

تست با MCP Inspector

پیش از وصل کردن به یک میزبان واقعی، سرور را با ابزار بازرسی رسمی امتحان کنید:

mcp dev server.py

این دستور MCP Inspector را در مرورگر باز می‌کند تا ابزارها را ببینید و دستی صدا بزنید. mcp dev برای اجرا به Node.js و ابزار uv نیاز دارد. اگر uv ندارید، Inspector را مستقیم با npx و مفسر پایتون محیط مجازی‌تان اجرا کنید:

npx @modelcontextprotocol/inspector python server.py

اتصال به Claude Code یا ویرایشگرهای دیگر

در Claude Code کافی است سرور را با دستور claude mcp add ثبت کنید. هر چیزی بعد از -- دستور اجرای سرور است:

claude mcp add --transport stdio notes -- python /absolute/path/to/server.py
claude mcp list

بسیاری از میزبان‌های دیگر، مثل Claude Desktop و Cursor، سرورها را از یک فایل تنظیمات JSON با ساختاری شبیه این می‌خوانند:

{
  "mcpServers": {
    "notes": {
      "command": "python",
      "args": ["/absolute/path/to/server.py"]
    }
  }
}

اگر پکیج mcp را در محیط مجازی نصب کرده‌اید، در هر دو روش به‌جای python مسیر کامل مفسر همان محیط را بنویسید (مثلاً /path/to/.venv/bin/python)؛ وگرنه میزبان سرور را با پایتونی اجرا می‌کند که SDK روی آن نصب نیست.

حالا کافی است بپرسید: «در یادداشت‌هایم درباره Docker چه نوشته‌ام؟» و ببینید مدل خودش ابزار search_notes و بعد read_note را صدا می‌زند.

برای اجرای سرور روی شبکه هم فقط آخرین خط را عوض کنید: mcp.run(transport="streamable-http", port=3001).

امنیت در دنیای ایجنت‌ها

MCP قدرت زیادی به مدل می‌دهد و این قدرت ریسک هم دارد:

  • تزریق پرامپت (Prompt Injection): اگر ابزار شما محتوای وب، ایمیل یا اسناد دیگران را برگرداند، ممکن است دستورهای مخربی در آن پنهان شده باشد که مدل را فریب دهد.
  • سرورهای نامعتبر: سرور MCP روی سیستم شما کد اجرا می‌کند. فقط سرورهایی را نصب کنید که منبعشان را می‌شناسید.
  • حداقل دسترسی: توکن‌ها و کلیدهای API که به سرور می‌دهید باید فقط همان دسترسی لازم را داشته باشند. سرور «فقط‌خواندنی» را به سرور «همه‌کاره» ترجیح دهید.
  • تأیید انسانی: برای کارهای برگشت‌ناپذیر مثل حذف داده، ارسال ایمیل یا پرداخت، تأیید کاربر را اجباری کنید.

جمع‌بندی

MCP همان لایه‌ای است که مدل‌های زبانی را از «دانای پرحرف» به «همکار کاربلد» تبدیل می‌کند. اگر ابزاری داخلی یا API دارید که تیمتان هر روز با آن کار می‌کند، نوشتن یک سرور MCP برایش شاید یکی از پربازده‌ترین کارهای این هفته شما باشد. برای اینکه ایجنتتان به اسناد داخلی هم دسترسی داشته باشد، آموزش RAG با پایتون را هم ببینید.

مطالب مرتبط