MCP مخفف Model Context Protocol و به فارسی پروتکل کانتکست مدل است. این استاندارد متنباز به برنامههای هوش مصنوعی اجازه میدهد به ابزار، اطلاعات و گردشکارهای بیرونی متصل شوند. MCP خودش مدل زبانی، دیتابیس یا جایگزین REST API نیست، بلکه قرارداد ارتباطی بین میزبان و ارائهکننده قابلیت است.
معماری Host، Client و Server
Host برنامه اصلی مانند IDE یا دستیار مبتنی بر LLM است. Host برای تعامل با هر سرور یک MCP Client دارد. MCP Server قابلیتهای معینی را در قالب Tools، Resources و Prompts ارائه میدهد. در یک فروشگاه، سرور میتواند ابزار خواندن وضعیت سفارش را فراهم کند، اما اینکه کاربر مجاز به دیدن کدام سفارش است باید در همان Backend بررسی شود.
تصویر معماری
تصویر بالا بهصورت موقت از CDN رسمی مستندات MCP نمایش داده میشود. برای انتشار پایدار، آن را مطابق شرایط استفاده در سرور باورژن آپلود کنید و src را به نشانی داخلی تغییر دهید.
مفاهیم و متدهای اصلی
| بخش | متد یا قابلیت | مثال فروشگاهی |
|---|---|---|
| Tools | tools/list و tools/call | فراخوانی تابع get_order_status |
| Resources | resources/list و resources/read | خواندن مستندات یا داده مرجع |
| Prompts | prompts/list و prompts/get | الگوی پاسخ پشتیبانی |
| Discovery | server/discover | شناخت اختیاری قابلیت سرور |
| Client Features | Elicitation و سازوکارهای مرتبط | گرفتن ورودی تکمیلی از کاربر |
| Extensions | Tasks، MCP Apps و سایر افزونهها | عملیات طولانی یا رابط تعاملی |
تفاوت نسخه ۲۰۲۶-۰۷-۲۸ با نمونههای قدیمی
- در هسته جدید درخواستها Stateless و خودتوصیفاند. تبادل initialize/initialized و Session ID قدیمی بهعنوان چرخه پایه لازم نیست.
- درخواست میتواند نسخه پروتکل و اطلاعات کلاینت را در _meta حمل کند. فراخوانی server/discover برای شناخت قابلیتها اختیاری است.
- برای مسیر HTTP در نسخه جدید سرآیندهای Mcp-Method و Mcp-Name به تشخیص روش و نام ابزار کمک میکنند.
- لیست Tools و Resources میتواند نشانههای کش مانند ttlMs و cacheScope داشته باشد.
- درخواستهای چندمرحلهای ورودی یا تعامل با مدل با Multi Round-Trip Requests بازطراحی شدهاند.
- Tasks از هسته آزمایشی به Extension منتقل شده است. Roots و Sampling و Logging قدیمی در این نسخه Deprecated هستند.
- پشتیبانی SDKها و کلاینتها با یکدیگر تفاوت دارد. برای یک سرور جدید باید نسخه دقیق پروتکل و SDK بررسی شود.
نمونه درخواست واقعی JSON-RPC در نسخه جدید
POST /mcp HTTP/1.1
Host: api.baversion.com
Content-Type: application/json
MCP-Protocol-Version: 2026-07-28
Mcp-Method: tools/call
Mcp-Name: get_order_status
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "get_order_status",
"arguments": {"order_id": 42},
"_meta": {
"io.modelcontextprotocol/protocolVersion": "2026-07-28",
"io.modelcontextprotocol/clientCapabilities": {},
"io.modelcontextprotocol/clientInfo": {
"name": "baversion-client", "version": "1.0.0"
}
}
}
}
مثال HTTP
این نمونه ساختار پیام نسخه ۲۰۲۶ را نمایش میدهد. مسیر، Host و نام ابزار فرضیاند. برای اجرای واقعی باید پیادهسازی SDK، احراز هویت، Headerهای لازم و Schema ابزار با سرور سازگار باشند.
نمونه ساخت یک ابزار با SDK پایتون
برای نمونه آموزشی مستقل، ابزار جمع قیمت یک سفارش را بهجای ارتباط با دیتابیس واقعی تعریف میکنیم. در محیط واقعی میتوان ابزار را به سرویس مجاز سفارش متصل کرد.
# Check the current supported Python SDK version before installing
python -m pip install mcp
from mcp.server.fastmcp import FastMCP
mcp = FastMCP("baversion-shop")
@mcp.tool()
def calculate_total(unit_price: int, quantity: int) -> int:
"""Calculate total price for a cart line."""
if unit_price < 0 or quantity < 0:
raise ValueError("values must be non-negative")
return unit_price * quantity
if __name__ == "__main__":
mcp.run(transport="stdio")
تفاوت SDK و Spec
کد بالا نمونه الگوی توسعه با FastMCP است، نه اثبات پشتیبانی یک نسخه مشخص SDK از پروتکل ۲۰۲۶-۰۷-۲۸. قبل از استقرار API و نسخه پکیج نصبشده را با مستندات SDK تطبیق دهید.
شیوههای ارتباط و میزبانی
| Transport | مناسب برای | نکته |
|---|---|---|
| STDIO | اجرای سرور محلی بهصورت زیرپردازش IDE | لاگها نباید خروجی JSON-RPC روی stdout را خراب کنند |
| HTTP | سرور راه دور و اپلیکیشن وب | نیازمند TLS، احراز هویت و کنترل مبدا |
| Legacy SSE | برخی پیادهسازیهای قدیمی | در نسخه ۲۰۲۶ Deprecated است |
ایمنی و مدیریت مجوز
- Tool Discovery به معنای مجوز اجرای همه ابزارها نیست.
- مجوز هر داده و عملیات را داخل سرویس واقعی بررسی کنید، نه فقط در متن Prompt.
- در OAuth، Issuer، Audience و Scope توکن را بهدرستی اعتبارسنجی کنید.
- از Token Passthrough و اعتماد کور به URLهای ارسالی جلوگیری کنید.
- در عملیات حساس مانند حذف سفارش یا انتقال پول، تایید کاربر و ثبت Audit Log داشته باشید.
- سرور ناشناخته را روی رایانه با دسترسی وسیع به فایلها یا Secretها اجرا نکنید.
- خروجی Tools و Resources میتواند حاوی Prompt Injection باشد و باید داده غیرقابل اعتماد محسوب شود.
چطور MCP Server را تست کنیم؟
# MCP Inspector: interactive UI
npx @modelcontextprotocol/inspector
# For a local node-based server
npx @modelcontextprotocol/inspector node path/to/server/index.js
برای تست ارتباط، فهرست ابزارها، ورودی و خروجی اسکیما، درخواستهای بدون مجوز، Timeout و نسخه پروتکل را بررسی کنید. اینسپکتور ابزاری برای Debug است و نباید بدون حفاظت مناسب در شبکه عمومی در دسترس باشد.
مستندات معتبر نسخه ۲۰۲۶
- معرفی MCP
- معماری Host و Client و Server
- ابزارها، منابع و پرامپتها
- قابلیتهای کلاینت
- راهنمای ساخت سرور
- بهترین رویههای امنیتی
- MCP Inspector
- اسپسیفیکیشن رسمی
اصطلاحات مرتبط: تول کالینگ، اجنتیک ورکفلو، اجنت، رابط برنامهنویسی کاربردی، اواوث، تزریق پرامپت، حمله SSRF، اسدیکی.