Model Context Protocol
MCP – پروتکل زمینه مدل چیست؟
در دنیای پردازش زبان طبیعی و مدل زبانی بزرگ (LLM)، محدودیت اصلی اغلب نه در توان تولید محتوا بلکه در دسترسی به دادههای خارجی و ابزارها است. اگر یک مدل هوش مصنوعی نتواند به منابع داده و ابزارهای مناسب وصل شود، عملکرد آن در شرایط واقعی با ضعفهایی مواجه خواهد شد. MCP – پروتکل زمینه مدل آمده است تا این خلا را پر کند. در این مقاله، به زبانی ساده و دقیق توضیح خواهیم داد MCP چیست، چگونه کار میکند، چه مزایا و چالشهایی دارد و چگونه میتوان آن را در پروژههای هوش مصنوعی و chatGPT پیادهسازی کرد.
مقدمه
MCP (مخفف Model Context Protocol) یک پروتکل باز و استاندارد ارتباطی است که به مدل زبانی بزرگ و هوش مصنوعی اجازه میدهد تا به ابزارها، منابع داده و سرویسهای خارجی به صورت دوطرفه متصل شوند. به بیان سادهتر، این پروتکل زمینهای یک لایه ارتباطی بین مدل و دنیای بیرون ایجاد میکند که وظیفه آن مدیریت زمینه (context) است.
این فناوری در نوامبر ۲۰۲۴ توسط شرکت Anthropic معرفی شد تا راهی استاندارد برای دسترسی مدلها به داده و ابزارهای خارجی فراهم کند.
یک تشبیه رایج این است که MCP یک «USB-C برای هوش مصنوعی» است: همانطور که USB-C رابط استانداردی برای وصل کردن دستگاههاست، این پروتکل رابط استانداردی برای وصل کردن مدلها به دادهها و ابزارهاست.
به زبان دیگر، اگر بخواهیم مدل را به دنیای واقعی وصل کنیم (خواندن پایگاه دادههای دیگر، استفاده از APIها، انجام محاسبات در ابزارها)، پروتکل زمینه مدل ابزار منسجم و واحدی ارائه میدهد که همه این کارها را در قالب یک پروتکل یکنواخت امکانپذیر میسازد.
معماری و اجزای MCP
برای درک دقیقتر، بیایید اجزای اصلی و معماری پروتکل زمینه مدل را بشکافیم:
۱. میزبان (Host)
میزبان، محیطی است که مدل هوش مصنوعی یا عامل (Agent) در آن اجرا میشود. ممکن است یک اپلیکیشن وب، یک محیط توسعه یا خود chatGPT باشد.
۲. کلاینت (MCP Client)
کلاینت پروتکل زمینه مدل بخش نرمافزاری است که از طرف میزبان با سرور MCP ارتباط برقرار میکند. کلاینت وظیفه دارد درخواستها را به فرمت استاندارد این مدل تبدیل کند و پاسخها را به مدل منتقل نماید.
۳. سرور (MCP Server)
سرورِ MCP یک سرویس یا ابزار است که دسترسی به یک یا چند منبع داده یا قابلیت پردازشی را فراهم میکند. این سرورها میتوانند شامل پایگاهدادهها، سرویسهای وب، ابزارهای پردازش، فایلسیستمها یا سایر منابع مرتبط باشند. هنگام دریافت درخواست از کلاینت، سرور طبق قواعد پروتکل پاسخ را تولید کرده و نتیجه را بازمیگرداند.
۴. پروتکلهای انتقال
این مدل از روشهای متفاوتی برای ارتباط بین کلاینت و سرور استفاده میکند، مانند HTTP، SSE (Server-Sent Events)، STDIO و غیره.
به عنوان مثال، اگر سرور پروتکل زمینه مدل از نوع HTTP باشد، کلاینت میتواند درخواستها را بر بستر HTTP ارسال کند و پاسخها را دریافت کند. یا در حالتی سادهتر، سرور میتواند از طریق STDIO با کلاینت تعامل کند.
۵. ابزارها و منابع (Tools & Resources)
در این مدل، تمایزی بین ابزار (tool) و منبع (resource) وجود دارد:
- ابزارها عملیاتی هستند که مدل میتواند آنها را فراخوانی کند (مثلاً اجرای محاسبه، ارسال ایمیل، پردازش تصویر).
- منابع داده مثل فایلها، جداول دیتابیس یا دادههایی هستند که مدل میتواند آنها را بخواند یا بنویسد.
چرا MCP اهمیت دارد؟
پیش از ورود MCP، توسعهدهندگان برای هر ترکیب مدل + ابزار مجبور بودند یک رابط سفارشی بنویسند. اگر شما چهار مدل (مثلاً ChatGPT، DeepSeek-OCR، Llama، Gemini) و پنج ابزار داشته باشید، باید ۲۰ پیوند (۴×۵) بسازید — کاری سخت و زمانبر.
پروتکل زمینه مدل این چالش را با ارائه یک پلتفرم یکپارچه برطرف میکند که مدلها را به ابزارها و دادهها وصل میکند بدون اینکه هر بار رابط جدیدی بنویسید.
چند مزیت کلیدی MCP:
- افزایش سرعت توسعه: دیگر نیازی به نوشتن اتصال اختصاصی برای هر ابزار نیست.
- یکپارچگی آسانتر: مدلهای مختلف میتوانند از همان سرورها استفاده کنند بدون تغییر بنیادین در ساختار.
- امنیت و کنترل بیشتر: MCP اجازه میدهد دسترسی مدل به دادهها محدود و مدیریت شود. البته امنیت یکی از چالشهای این پروتکل نیز هست.
- همکاری بین مدلها (Interoperability): اگر مدلهای مختلف (مثلاً LLMهای متفاوت) بتوانند از یک استاندارد استفاده کنند، اکوسیستم هماهنگتری شکل میگیرد.
MCP چطور کار میکند؟ (فرایند ارتباط)
برای روشن شدن چگونگی کار پروتکل زمینه مدل، این روند ساده را در نظر بگیرید:
- میزبان (مثلاً اپلیکیشن شما) مدل را اجرا میکند و کلاینت مدل را بارگذاری میکند.
- مدل یا عامل درخواست برای انجام کاری (مثلاً «داده کاربر را از دیتابیس بگیر») تولید میکند.
- کلاینت پروتکل این درخواست را به فرمت پروتکل زمینه مدل تبدیل کرده و به سرور مناسب میفرستد.
- سرور MCP عملیاتی را که تعریف شده است انجام میدهد (خواندن جدول، فراخوانی API، پردازش) و نتیجه را بازمیگرداند.
- کلاینت پاسخ را گرفته و آن را به مدل منتقل میکند تا بخشی از زمینه پاسخ شود.
- مدل پاسخ نهایی را بر اساس زمینه و داده و ابزارها تولید میکند.
در این همکاری، مدل تنها به واسطه کلاینت MCP با ابزارها تعامل میکند و نیازی به دانش داخلی از جزئیات سرور یا API ندارد.
همچنین در OpenAI، پشتیبانی از سرورهای دور (remote MCP servers) به ابزار Responses API اضافه شده که امکان اتصال مدل به ابزارهای خارجی را تسهیل میکند.
کاربردها و نمونهها
بعضی مثالهای عملی کاربرد MCP – پروتکل زمینه مدل:
- مدل میتواند به پایگاه داده سازمان متصل شود و گزارشها را استخراج کند.
- عامل هوش مصنوعی در chatGPT میتواند از طریق این پروتکل به فایلهای محلی سیستم کاربر دسترسی پیدا کند.
- ادغام بین OpenAI و Azure با استفاده از پروتکل زمینه مدل امکانپذیر شده است تا ابزارهای ابری با مدل هوش مصنوعی متحد شوند.
- شرکتهایی مانند Block، Replit، Zed، Codeium، Sourcegraph در حال پشتیبانی از MCP در محیط توسعه و ابزارهایشان هستند.
- پروژههای تحقیقاتی مانند OSWorld-MCP استفاده از ابزارهای پروتکل زمینه مدل را در عاملهای چندرسانهای بررسی کردهاند.
- مقالاتی مانند «AutoMCP» تلاش کردهاند تا ساخت سرورهای پروتکل زمینه مدل از روی مستندات OpenAPI را خودکار کنند.
مزایا و معایب MCP
| مزیت | توضیح |
|---|---|
| کاهش پیچیدگی توسعه | دیگر لازم نیست برای هر مدل + ابزار رابط جدید بنویسید. |
| قابلیت توسعه بیشتر | میتوانید ابزار و منابع جدید را به سادگی اضافه کنید. |
| یکپارچگی استاندارد | همه مدلها و ابزارها با یک استاندارد متحد کار میکنند. |
| مدیریت زمینه دقیق | این مدل با زمینه واقعی و بهروز کار میکند نه فقط بر اساس دادههای پیشین. |
| ارتقای همکاری | عاملها و عوامل مختلف در اکوسیستم میتوانند با هم هماهنگ شوند. |
چالشها و محدودیتها
- مسائل امنیتی: اگر سرورها به درستی پیکربندی نشده باشند، ممکن است اطلاعات حساس فاش شود یا کد مخرب اجرا شود (مانند حمله MCP-UPD)
- حملات تزریق فرمان (Prompt Injection): چون مدل میتواند مستقیماً با ابزارها کار کند، آسیبپذیری به تزریق دستوری افزایش مییابد.
- مسائل هویت و دسترسی (Identity Fragmentation): پروتکل به تنهایی کنترل هویت قوی ندارد و مدیریت اعتبار بین سیستمها چالشبرانگیز است.
- نگهداری سرورها: تقریباً دو سوم سرورهای پروتکل زمینه مدل دارای «کد بدبو» (code smells) هستند و نگهداری آنها دشوار است.
- فاز نسبتاً نو و در حال تکامل: چون این پروتکل هنوز جدید است، استانداردها و ابزارهای پیرامون آن کامل نیستند.
مقایسه MCP با روشهای سنتی
قبل از پروتکل زمینه مدل، روشهای متفاوتی برای اتصال مدل به ابزارها استفاده میشد:
اتصال مستقیم API: هر مدل مستقیماً با ابزار API تعامل میکرد — پیچیدگی زیاد داشت.
استفاده از تابعخوانی (function calling) داخلی مدل: برخی مدلها امکان فراخوانی توابع را داشتند، اما ابزارها باید در خود مدل تعریف میشدند.
چارچوبهای اختصاصی عامل (agent frameworks) با کلاسها و رابطهای خود: هر چارچوب روش خودش را داشت.
در مقایسه، MCP مزیت متحدسازی تمام این روشها را دارد: یک پروتکل مشترک برای همه مدلها و ابزارها، بدون نیاز به نوشتن هر بار اتصال اختصاصی.
MCP در برابر REST و GraphQL
| ویژگی | Model Context Protocol (MCP) | REST | GraphQL |
|---|---|---|---|
| مدیریت Context | بله | خیر | محدود |
| بهینهسازی انتقال داده | بله | محدود | بله |
| مقیاسپذیری بالا | بله | متوسط | بله |
| انعطافپذیری در مدلسازی | بله | محدود | بله |
| پشتیبانی از دادههای پیچیده | بله | محدود | بله |
پروتکل زمینه مدل برتریهایی نسبت به REST دارد، زیرا امکان مدیریت دادهها در زمینه خاص را فراهم کرده و انعطافپذیری بیشتری برای پردازش دادههای پیچیده دارد.
چگونه از MCP در پروژه استفاده کنیم؟
در این بخش، گامهای عملی برای استفاده از پروتکل زمینه مدل را با مثال Python بررسی میکنیم:
- انتخاب کلاینت
اگر از OpenAI Agents SDK استفاده میکنید، میتوانید یکی از روشهای انتقال پروتکل زمینه مدل مثل HTTP یا SSE را انتخاب کنید. - انتخاب یا ایجاد سرور
اگر ابزار موردنظر شما از پیش سرور MCP دارد، استفاده کنید. در غیر این صورت باید یک سرور پروتکل بسازید که ابزار شما را در قالب پروتکل زمینه مدل در اختیار قرار دهد. - تعریف ابزار و منابع
در سرور MCP باید schema هایی تعریف کنید که ابزارها و منابع را معرفی کنند (پارامترها، نوع داده، مجوزها). - راهاندازی ارتباط کلاینت و سرور
کلاینت با آدرس URL سرور پروتکل زمینه مدل یا کانال دلخواه به سرور متصل میشود و درخواستها را ارسال میکند. - ارسال درخواست از مدل یا عامل
مدل درخواست میکند، کلاینت آن را انتقال میدهد، سرور پاسخ میدهد، کلاینت پاسخ را به مدل میدهد. - مدیریت خطا و امنیت
در سرور باید محدودیتهای دسترسی، اعتبارسنجی، احراز هویت و بررسی حملات تزریق فراهم شود. - توسعه و بهبود
با افزودن ابزار جدید یا بهبود schema میتوانید پروژه را ارتقا دهید.
مستندات رسمی OpenAI نیز راهنمای استفاده از سرورهای دور (remote MCP servers) و ارتباط آنها با Responses API را نشان میدهد.
مثال کد پایتون: MCP server ساده با FastAPI + SSE
# mcp_server.py
from fastapi import FastAPI, Request, HTTPException
from fastapi.responses import StreamingResponse, JSONResponse
import os
import json
import asyncio
from typing import Dict, Any
app = FastAPI(title="Simple MCP Server - Example")
# --- Metadata endpoint (tools discovery) ---
@app.get("/.well-known/mcp")
async def mcp_discovery():
"""
MCP discovery endpoint: لیست ابزارها و metadata را برمیگرداند.
(فرمت دقیق schema بسته به spec ممکن است فرق کند — این یک مثال عملی است.)
"""
tools = {
"tools": [
{
"name": "list_files",
"description": "List files in a directory",
"input_schema": {"type": "object", "properties": {"path": {"type": "string"}}}
},
{
"name": "read_file",
"description": "Read a file's content (bytes limited)",
"input_schema": {"type": "object", "properties": {"path": {"type": "string"}, "max_bytes": {"type": "integer"}}}
}
]
}
return JSONResponse(content=tools)
# --- Helper: implement tools ---
async def handle_list_files(params: Dict[str, Any]) -> Dict[str, Any]:
path = params.get("path", ".")
if not os.path.isdir(path):
raise HTTPException(status_code=400, detail="path is not a directory")
items = os.listdir(path)
return {"files": items}
async def handle_read_file(params: Dict[str, Any]) -> Dict[str, Any]:
path = params.get("path")
if not path or not os.path.isfile(path):
raise HTTPException(status_code=400, detail="file not found")
max_bytes = int(params.get("max_bytes", 2000))
with open(path, "rb") as f:
data = f.read(max_bytes)
try:
text = data.decode("utf-8", errors="replace")
except Exception:
text = ""
return {"content": text}
# --- SSE endpoint to handle requests/streams (simple) ---
@app.post("/invoke")
async def invoke_tool(request: Request):
"""
یک endpoint ساده HTTP که درخواستهای JSON حاوی:
{ "tool": "", "params": { ... } }
را قبول میکند و پاسخ JSON برمیگرداند.
(برای SSE یا streamable HTTP میتوانیم از مسیر متفاوت استفاده کنیم.)
"""
payload = await request.json()
tool = payload.get("tool")
params = payload.get("params", {})
if tool == "list_files":
result = await handle_list_files(params)
elif tool == "read_file":
result = await handle_read_file(params)
else:
raise HTTPException(status_code=400, detail="unknown tool")
return JSONResponse(content={"result": result})
# Optional: a stream endpoint (SSE style) — minimal example
@app.get("/stream")
async def stream_endpoint():
"""
نمونهٔ بسیار ساده SSE که میتواند برای ارتباط streamable طبق MCP استفاده شود.
برای production باید header های مربوط به SSE و keep-alive مدیریت شود.
"""
async def event_generator():
for i in range(3):
await asyncio.sleep(1)
yield f"data: {json.dumps({'tick': i})}\n\n"
return StreamingResponse(event_generator(), media_type="text/event-stream")
پیشنهاد: میتوانید برای دریافت پیاده سازی کامل پروژه و بصورت حرفهای و اصولی, مطابق با درخواست و نیاز شما از طریق ثبت پروژه درخواست ثبت کنید. این مثال کد فقط برای پیاده سازی سرور هست.
- با اجرای:
uvicorn mcp_server:app --host 0.0.0.0 --port 8080سرور ذکرشده بالا میآید. / .well-known/mcp— لیست ابزارها را ارائه میدهد (discovery)./invoke— یک endpoint ساده برای فراخوانی ابزارها (POST JSON)./stream— نمونهٔ SSE (برای حالتهایی که agent از SSE استفاده میکند مفید است).
توجه: پیادهسازی کامل MCP spec شامل فیلدها و schemaهای مشخصتری است؛ در پروژههای واقعی از کتابخانههایی مثل fastapi-mcp یا ابزارهای repo رسمی استفاده کنید تا spec دقیق رعایت شود.
نکات کاربردی برای پیادهسازی امن و موفق MCP
- از مجوزها و احراز هویت دقیق استفاده کنید تا مدل تنها به آنچه لازم است دسترسی داشته باشد.
- ورودیها را حتماً اعتبارسنجی کنید تا از تزریق فرمان مخرب جلوگیری شود.
- از محدودسازی دسترسی زمانی (time-bound access) استفاده نمایید تا سرورها به صورت نامحدود در دسترس نباشند.
- نظارت و لاگگیری روی تعاملات کلاینت و سرور داشته باشید تا خطاها و رفتار مشکوک شناسایی شود.
- سرورهای MCP را بهروز نگه دارید و آسیبپذیریها را بررسی کنید (مطالعههایی نشان دادهاند برخی سرورها حاوی مشکلات امنیتی هستند)
- هنگام طراحی ابزار، کمینهگرایی (least privilege) را رعایت کنید؛ فقط امکانات ضروری را در دسترس مدل قرار دهید.
آینده MCP و چشمانداز
چند روند مهم آینده پروتکل زمینه مدل:
- پذیرش گستردهتر توسط OpenAI، Microsoft و دیگر شرکتها: در مارس ۲۰۲۵، OpenAI اعلام کرد که پروتکل زمینه مدل را در Agents SDK پشتیبانی میکند و قصد دارد آن را در ChatGPT و Responses API نیز وارد کند.
- ادغام در سیستمهای عامل: نسخه ویندوز در حال افزودن پشتیبانی از پروتکل زمینه مدل با عنوان «USB-C برای اپلیکیشنهای هوش مصنوعی» است.
- پلتفرمهای سازمانی MCP: شرکتهایی مانند Workato سرورهای پروتکل زمینه مدل مدیریتشده برای شرکتها ارائه دادهاند تا استفاده و امنیت را آسانتر کنند.
- تحقیقات امنیتی: مقالاتی مانند MCPSecBench به تحلیل آسیبپذیریها پرداختهاند و نشان دادهاند بیش از ۸۵٪ حملات در محیط پروتکل زمینه مدل موفق هستند.
- ابزار خودکار تولید سرور MCP: پروژههایی مانند AutoMCP تلاش کردهاند سرورهای پروتکل زمینه مدل را از مستندات OpenAPI به صورت خودکار بسازند.
به این ترتیب، پروتکل زمینه مدل احتمالاً به یکی از ستونهای اصلی یکپارچهسازی هوش مصنوعی با داده و ابزارهای واقعی تبدیل شود.
جمعبندی
در این مقاله مفصل، (Model Context Protocol) پروتکل زمینه مدل را از صفر تا صد بررسی کردیم. دیدیم که MCP چگونه به عنوان یک استاندارد باز کار میکند تا مدل زبانی بزرگ (LLM) را به ابزارها و منابع داده متصل کند. معماری کلاینت-سرور آن را شناختیم، مزایا و چالشها را مورد بحث قرار دادیم، و راهنمای گامبهگام پیادهسازی آن را بیان کردیم.
اگر بخواهم در یک جمله خلاصه کنم: MCP پلی است که مدلهای هوش مصنوعی را از محصور بودن در فضای داخلی به جهان واقعی همانند استاندارد کابل USB-C متصل میکند—بدون پیچیدگی زیاد، با امنیت مدیریتشده، و با قابلیت توسعه بالا.


بدون دیدگاه