Model Context Protocol (MCP)

درک مبانی MCP: راهنمای جامع پروتکل زمینه مدل

منظره یکپارچه‌سازی مدل‌های زبانی بزرگ (LLM) به سرعت در حال تغییر است. سال‌هاست که توسعه‌دهندگان برای اتصال مدل‌های هوش مصنوعی به منابع داده و ابزارهای خارجی، به مهندسی پرامپت و لایه‌های API شکننده متکی بوده‌اند. پروتکل زمینه مدل (MCP) به عنوان راه‌حل استاندارد برای این پراکندگی در حال ظهور است. این پروتکل که توسط Anthropic توسعه یافته و اکنون در سراسر صنعت محبوبیت می‌یابد، یک رابط یکپارچه و باز برای اتصال دستیارهای هوش مصنوعی به منابع داده، ابزارها و جریان‌های کاری سفارشی ارائه می‌دهد.

در این راهنما، مفاهیم بنیادین MCP را تبیین می‌کنیم، معماری آن را بررسی می‌کنیم و نگاهی می‌اندازیم به اینکه چگونه توسعه برنامه‌های هوشمند و آگاه از زمینه را ساده می‌کند.

چرا MCP؟ مسئله پراکندگی

پیش از MCP، یکپارچه‌سازی یک LLM با یک سرویس خاص (مانند یک فضای کاری Slack، یک سیستم فایل محلی یا یک پایگاه داده اختصاصی) نیازمند ساخت یک یکپارچه‌سازی سفارشی برای هر مورد استفاده بود. اگر می‌خواستید از همان قابلیت در یک کلاینت LLM دیگر استفاده کنید، باید منطق را از نو می‌ساختید یا به راه‌حل‌های جایگزین بدون پشتیبانی متکی می‌شدید.

MCP این مسئله را با عمل کردن به عنوان یک مترجم جهانی حل می‌کند. این پروتکل مجموعه‌ای مشترک از اجزای اصلی—ابزارها، منابع و پرامپت‌ها—را تعریف می‌کند که می‌توانند توسط هر سروری ارائه و توسط هر کلاینت سازگاری مصرف شوند. این کار منطقِ *چه* داده‌ها یا عملیاتی در دسترس هستند را از *نحوه* فراخوانی LLM جدا می‌کند.

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

درک معماری سه‌بخشی MCP کلید تسلط بر آن است:

  • میزبان (Host): برنامه‌ای که اتصال را آغاز می‌کند. این معمولاً خود برنامه LLM است (مثلاً یک دستیار دسکتاپ، یک افزونه IDE یا یک وب‌اپ).
  • کلاینت (Client): اتصال بین میزبان و یک یا چند سرور را حفظ می‌کند. این بخش از ترجمه پیام‌های پروتکل مسئولیت دارد.
  • سرور (Server): قابلیت‌های خاص (ابزارها، داده‌ها، پرامپت‌ها) را از طریق کلاینت به میزبان ارائه می‌دهد. منطق کسب‌وکار یا دسترسی به داده‌ها شما در اینجا قرار دارد.

ارتباط بین این اجزا از طریق یک لایه حمل‌ونقل با استفاده از JSON-RPC 2.0 انجام می‌شود. رایج‌ترین روش‌های حمل‌ونقل stdio (ورودی/خروجی استاندارد برای فرآیندهای محلی) و Streamable HTTP (برای تعاملات دور و دارای وضعیت) هستند.

سه ستون اصلی MCP

۱. ابزارها: اجازه دهید LLM عمل کند

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

// مثال: تعریف یک ابزار برای جستجو در کدبیس
{
  "name": "search_code",
  "description": "جستجو برای یک الگوی خاص در کدبیس",
  "inputSchema": {
    "type": "object",
    "properties": {
      "query": {
        "type": "string",
        "description": "رشته جستجو"
      }
    },
    "required": ["query"]
  }
}

۲. منابع: اجازه دهید LLM بخواند

منابع داده‌های ایستا یا نیمه‌ایستایی هستند که LLM می‌تواند آن‌ها را بازیابی کند. آن‌ها مشابه فایل‌ها یا نقاط پایانی API هستند. LLM می‌تواند URIهای منبع خاصی را درخواست کند و سرور محتوا را برمی‌گرداند.

// مثال: یک منبع برای یک سند خاص
{
  "uri": "doc://readme.txt",
  "name": "Project README",
  "mimeType": "text/plain",
  "content": "This is the project documentation..."
}

۳. پرامپت‌ها: اجازه دهید LLM پیشنهاد دهد

پرامپت‌ها قالب‌های قابل استفاده مجدد برای تعامل با LLM هستند. آن‌ها می‌توانند پویا باشند و متغیرهایی را بپذیرند که توسط کلاینت یا میزبان پر می‌شوند. این برای جریان‌های کاری استاندارد مانند "خلاصه کردن این فایل" یا "بازنویسی این کد" مفید است.

مثال عملی: ساخت یک سرور MCP ساده

در اینجا یک مثال ساده‌شده از یک سرور MCP با استفاده از SDK پایتون آورده شده است. این سرور ابزاری را ارائه می‌دهد که زمان فعلی را برمی‌گرداند.

import datetime
from mcp.server.fastmcp import FastMCP

mcp = FastMCP("TimeServer")

@mcp.tool()
def get_current_time() -> str:
    """Get the current time in ISO format."""
    return datetime.datetime.now().isoformat()

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

این سرور می‌تواند به عنوان یک فرآیند محلی راه‌اندازی شود. یک میزبان سازگار با MCP (مانند Claude Desktop یا یک افزونه IDE) سپس می‌تواند ابزار get_current_time را کشف کند و زمانی که کاربر بپرسد "ساعت چند است؟" آن را فراخوانی کند.

امنیت و بهترین روش‌ها

اگرچه MCP یکپارچه‌سازی را ساده می‌کند، اما سطح حمله را نیز گسترش می‌دهد. نکات کلیدی امنیتی عبارتند از:

  • حداقل امتیاز (Least Privilege): فقط ابزارها و منابعی را که برای وظیفه LLM ضروری هستند، ارائه دهید.
  • اعتبارسنجی ورودی: همیشه ورودی‌های فراخوانی ابزارها را اعتبارسنجی کنید تا از حملات تزریق جلوگیری شود.
  • محلی در مقابل دور: از stdio برای سرورهای محلی و مورد اعتماد و از HTTP با احراز هویت برای سرورهای دور استفاده کنید.

نتیجه‌گیری

پروتکل زمینه مدل (MCP) یک گام مهم به سمت یک اکوسیستم هوش مصنوعی ماژولارتر و قابل همکاری‌تر است. با استانداردسازی نحوه تعامل LLMها با سیستم‌های خارجی، MCP اصطکاک توسعه را کاهش داده و امکان ساخت برنامه‌های قدرتمندتر و غنی از زمینه را فراهم می‌کند. با بلوغ اکوسیستم، می‌توان انتظار داشت که کتابخانه‌ای رو به رشد از سرورهای MCP ساخته شده توسط جامعه را ببینیم که به توسعه‌دهندگان امکان می‌دهد هوش را به صورت Plug-and-play به جریان‌های کاری خود اضافه کنند.

برای توسعه‌دهندگان، گام بعدی آزمایش است. سعی کنید یک سرور MCP ساده برای ابزارهای داخلی خود بسازید یا سرورهای موجود در مخزن GitHub را بررسی کنید. آینده یکپارچه‌سازی LLM درباره کد چسب‌دار سفارشی نیست—درباره استانداردهای باز است.

Share: