رفتن به محتوا

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

پروتکل MCP به زبان ساده؛ میزبان، کلاینت و سرور چه می‌کنند، کدام ابزارها از آن پشتیبانی می‌کنند و چطور با مدل‌های هیبانا یک سرور MCP را به کار بگیرید.

تیم هیبانا۶ دقیقه مطالعه
یک مدل هوش مصنوعی در مرکز که با چند رابط یکسان به ابزارها و منابع داده در اطرافش وصل شده است

مدل زبانی به‌تنهایی فقط متن می‌خواند و متن می‌نویسد؛ نه فایل‌های پروژهٔ شما را می‌بیند، نه به دیتابیس فروشگاهتان دسترسی دارد. MCP (مخفف Model Context Protocol) یک استاندارد باز است که همین فاصله را پر می‌کند: یک بار یک «سرور MCP» برای ابزار یا داده‌تان می‌سازید (یا یک سرور آماده نصب می‌کنید) و هر برنامهٔ هوش مصنوعی که MCP را می‌فهمد، می‌تواند از آن استفاده کند. در این مطلب می‌بینیم MCP دقیقاً چیست، چه بخش‌هایی دارد، کدام ابزارها از آن پشتیبانی می‌کنند و چطور با مدل‌هایی که از طریق هیبانا فراخوانی می‌کنید کار می‌کند.

MCP به زبان ساده

شرکت Anthropic در آذر ۱۴۰۳ (نوامبر ۲۰۲۴) MCP را به‌صورت متن‌باز منتشر کرد و آن را «استانداردی برای اتصال دستیارهای هوش مصنوعی به سیستم‌هایی که داده در آن‌ها است» معرفی کرد؛ یعنی مخزن‌های محتوا، ابزارهای کسب‌وکار و محیط‌های توسعه.

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

نکتهٔ مهمی که در مستندات رسمی MCP هم آمده، این است که این پروتکل فقط به تبادل «زمینه» (context) می‌پردازد و تعیین نمی‌کند برنامه از کدام مدل زبانی استفاده کند. به همین دلیل MCP به مدل یا شرکت خاصی گره نخورده است.

اجزای MCP؛ میزبان، کلاینت و سرور

معماری MCP سه نقش دارد:

نقشچه کسی استچه می‌کند
میزبان (Host)برنامهٔ هوش مصنوعی، مثل یک ایجنت کدنویسی در VS Codeگفت‌وگو با مدل را مدیریت می‌کند و کلاینت‌ها را می‌سازد
کلاینت (Client)بخشی داخل میزبانبرای هر سرور یک اتصال اختصاصی نگه می‌دارد
سرور (Server)برنامه‌ای که ابزار یا داده را عرضه می‌کندمثلاً به فایل‌ها، دیتابیس یا یک سرویس آنلاین دسترسی می‌دهد

پیام‌ها در قالب JSON-RPC 2.0 رد و بدل می‌شوند و دو روش انتقال تعریف شده است:

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

سرور MCP چه چیزهایی عرضه می‌کند؟

هر سرور می‌تواند سه نوع امکان داشته باشد:

  • ابزار (Tools): تابع‌هایی که اجرا می‌شوند؛ مثل خواندن فایل، فراخوانی یک API یا اجرای کوئری روی دیتابیس.
  • منبع (Resources): داده‌ای که به‌عنوان زمینه در اختیار برنامه قرار می‌گیرد؛ مثل محتوای یک فایل یا ساختار جدول‌های دیتابیس.
  • پرامپت (Prompts): قالب‌های آماده برای شروع یک کار مشخص.

کلاینت اول با درخواست tools/list می‌پرسد سرور چه ابزارهایی دارد؛ هر ابزار یک نام، یک توضیح و یک JSON Schema برای ورودی‌هایش دارد. هر وقت مدل تصمیم بگیرد از ابزاری استفاده کند، کلاینت آن را با tools/call اجرا می‌کند و نتیجه را به گفت‌وگو برمی‌گرداند.

MCP و Function Calling چه فرقی دارند؟

اگر با فراخوانی تابع (Function Calling) آشنا باشید، این روند برایتان آشناست. فرقشان در لایه است:

  • Function Calling قابلیت خود مدل و API است: شما در درخواست، فهرستی از توابع را با پارامتر tools می‌فرستید و مدل به‌جای متن، درخواست اجرای یکی از آن‌ها را برمی‌گرداند. اجرای تابع با کد خود شماست.
  • MCP استاندارد بین برنامه و ابزار است: تعیین می‌کند ابزارها چطور معرفی و اجرا شوند تا هر برنامه‌ای بتواند از هر سروری استفاده کند.

پس MCP جای Function Calling را نمی‌گیرد؛ معمولاً روی آن سوار می‌شود. میزبان ابزارهای سرور MCP را به شکلی که مدل می‌فهمد به آن معرفی می‌کند و وقتی مدل ابزاری خواست، آن را از طریق MCP اجرا می‌کند. نتیجهٔ عملی برای شما این است که مدلی که برای کار با MCP انتخاب می‌کنید باید در فراخوانی ابزار خوب باشد.

کدام مدل‌های هیبانا فراخوانی ابزار دارند؟

در لیست مدل‌ها کنار مدل‌هایی که از Function Calling پشتیبانی می‌کنند برچسب «فراخوانی ابزار» آمده است. در زمان نگارش این مطلب، مدل‌هایی از جمله gpt-5-nano، claude-haiku-4-5، deepseek-v4-flash و مدل داخلی gpt-oss این قابلیت را دارند. مدل‌های امبدینگ مثل bge-m3 آن را ندارند.

یک نمونهٔ کامل؛ سرور MCP و مدل از طریق هیبانا

برای اینکه ببینید MCP با هر API سازگار با OpenAI کار می‌کند، یک سرور MCP کوچک و یک برنامهٔ میزبان ساده با پایتون می‌نویسیم. سرور یک ابزار دارد که وضعیت سفارش را برمی‌گرداند و میزبان، مدل را از طریق هیبانا فراخوانی می‌کند. هر دو با کتابخانهٔ رسمی MCP برای پایتون (نسخهٔ ۲) و کتابخانهٔ openai نوشته شده‌اند:

pip install mcp openai

فایل server.py؛ داده‌ها نمونه‌اند و در عمل این‌جا به دیتابیس یا API فروشگاهتان وصل می‌شوید:

from mcp.server import MCPServer mcp = MCPServer("shop") # داده‌ی نمونه؛ در عمل این‌جا به دیتابیس یا API فروشگاه وصل می‌شویدORDERS = {    "1001": "ارسال شده؛ کد رهگیری 12345",    "1002": "در حال آماده‌سازی",}  @mcp.tool()def order_status(order_id: str) -> str:    """وضعیت یک سفارش را با شماره‌ی سفارش برمی‌گرداند."""    return ORDERS.get(order_id, "سفارشی با این شماره پیدا نشد")  if __name__ == "__main__":    mcp.run()  # پیش‌فرض: stdio

فایل agent.py؛ سرور را با stdio اجرا می‌کند، ابزارهایش را می‌گیرد و به شکل tools به مدل می‌دهد. به‌جای YOUR_API_KEY کلید API خودتان را بگذارید:

import asyncioimport json from mcp import Client, StdioServerParametersfrom openai import OpenAI llm = OpenAI(    base_url="https://api-ai.hibanacloud.ir/v1",    api_key="YOUR_API_KEY",)MODEL = "gpt-5-nano"  async def main():    server = StdioServerParameters(command="python", args=["server.py"])    async with Client(server) as mcp_client:        # ۱. ابزارهای سرور MCP را بگیر و به قالب tools در API تبدیل کن        listed = await mcp_client.list_tools()        tools = [            {                "type": "function",                "function": {                    "name": t.name,                    "description": t.description,                    "parameters": t.input_schema,                },            }            for t in listed.tools        ]         messages = [{"role": "user", "content": "سفارش 1001 من کجاست؟"}]        reply = llm.chat.completions.create(            model=MODEL, messages=messages, tools=tools        ).choices[0].message         # ۲. اگر مدل ابزاری خواست، آن را از طریق MCP اجرا کن        if reply.tool_calls:            messages.append(reply)            for call in reply.tool_calls:                args = json.loads(call.function.arguments)                print("tool call:", call.function.name, args)                result = await mcp_client.call_tool(call.function.name, args)                text = "".join(c.text for c in result.content if c.type == "text")                messages.append(                    {"role": "tool", "tool_call_id": call.id, "content": text}                )            # ۳. نتیجه را به مدل برگردان تا پاسخ نهایی را بنویسد            reply = llm.chat.completions.create(                model=MODEL, messages=messages, tools=tools            ).choices[0].message         print("answer:", reply.content)  asyncio.run(main())

با python agent.py خروجی‌ای شبیه این می‌گیرید. این چند خط اول خروجی یکی از اجراهای ما است؛ متن پاسخ مدل در هر اجرا کمی فرق می‌کند و معمولاً یکی دو جملهٔ دیگر هم دارد:

tool call: order_status {'order_id': '1001'}answer: وضعیت سفارش 1001:- وضعیت: ارسال شده- کد رهگیری: 12345

دقت کنید که مدل خودش شمارهٔ سفارش را از جملهٔ کاربر بیرون کشید و ابزار درست را فراخوانی کرد. همین کد را با MODEL = "claude-haiku-4-5" هم اجرا کردیم و بدون هیچ تغییر دیگری همان ابزار با همان آرگومان فراخوانی شد. این همان چیزی است که MCP وعده می‌دهد: سرور یک بار نوشته می‌شود و مدل و برنامه قابل تعویض‌اند.

استفاده از سرورهای MCP در ایجنت‌های کدنویسی

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

Cline: طبق مستندات Cline، در پنل Cline روی آیکون MCP Servers در نوار بالا بزنید، به زبانهٔ Configure بروید و Configure MCP Servers را انتخاب کنید. یک فایل JSON باز می‌شود که سرورها را زیر کلید mcpServers تعریف می‌کند. برای نمونه، سرور رسمی فایل‌سیستم که فقط به پوشه‌ای که مشخص می‌کنید دسترسی دارد:

{  "mcpServers": {    "filesystem": {      "command": "npx",      "args": [        "-y",        "@modelcontextprotocol/server-filesystem",        "/path/to/your/project"      ],      "disabled": false,      "autoApprove": []    }  }}

برای سرور راه دور به‌جای command و args از url استفاده می‌شود. اتصال خود Cline به هیبانا در راهنمای Cline آمده است.

Kilo Code: طبق مستندات Kilo Code، در نسخه‌های جدید سرورها از تنظیمات افزونه، زبانهٔ Agent Behaviour و بخش MCP Servers مدیریت می‌شوند. شکل فایل تنظیمات در نسخه‌های مختلف Kilo Code فرق کرده است، پس مستندات نسخه‌ای را که نصب کرده‌اید ببینید. اتصال آن به هیبانا در راهنمای Kilo Code است.

هر سرور MCP که اضافه می‌کنید، معمولاً توضیح ابزارهایش را به درخواست‌های مدل اضافه می‌کند؛ یعنی توکن ورودی بیشتر در هر درخواست. سرورهایی را که لازم ندارید غیرفعال کنید. دربارهٔ اثر این موضوع روی هزینه، توکن و هزینهٔ API را بخوانید.

نکته‌های امنیتی و محدودیت‌ها

  • سرور محلی، کد اجرایی است. سرور stdio روی سیستم شما و با دسترسی کاربر شما اجرا می‌شود. فقط سرورهایی را نصب کنید که منبعشان را می‌شناسید.
  • تأیید خودکار را با احتیاط روشن کنید. فهرست autoApprove در Cline ابزارهایی را مشخص می‌کند که بدون پرسیدن از شما اجرا می‌شوند. ابزارهایی را که فایل می‌نویسند یا پاک می‌کنند، در آن نگذارید.
  • دسترسی را محدود کنید. مثلاً به سرور فایل‌سیستم فقط پوشهٔ پروژه را بدهید، نه کل دیسک.
  • مدل ضعیف، ابزار را نادرست فراخوانی می‌کند. اگر ایجنت ابزارها را نادیده می‌گیرد یا آرگومان اشتباه می‌فرستد، یک مدل قوی‌تر با برچسب «فراخوانی ابزار» را امتحان کنید.
  • سرورهای راه دور به اینترنت نیاز دارند. اگر سرور MCP روی سرویسی خارج از ایران است، در زمان اختلال اینترنت بین‌الملل در دسترس نخواهد بود؛ حتی اگر مدل از طریق هیبانا کار کند. دربارهٔ این وضعیت این مطلب را ببینید.

جمع‌بندی

MCP یک زبان مشترک بین برنامه‌های هوش مصنوعی و ابزارهاست: سرور یک بار نوشته می‌شود و هر میزبان سازگاری، با هر مدلی که فراخوانی ابزار را بلد است، از آن استفاده می‌کند. برای شروع، کلید API بگیرید، یک ایجنت مثل Cline یا Kilo Code را به هیبانا وصل کنید و یک سرور ساده مثل فایل‌سیستم را به آن اضافه کنید. اگر هنوز بین ایجنت‌ها مردد هستید، مقایسهٔ Kilo Code، Cline و Cursor را بخوانید و برای ساخت سرور خودتان از مستندات Function Calling و نمونهٔ بالا شروع کنید.

مطالب مرتبط

کدام ایجنت کدنویسی با API ایرانی کار می‌کند؟ Kilo Code و Cline و Cursor

مقایسهٔ عملی Kilo Code و Cline و Cursor برای اتصال به API هوش مصنوعی از ایران؛ کدام کار می‌کند، چرا Cline توکن زیادی مصرف می‌کند و کدام مدل را انتخاب کنیم.

با یک کلید به همه مدل‌ها وصل شوید

GPT، Claude، Gemini و ده‌ها مدل دیگر، با پرداخت ریالی و یک API سازگار با OpenAI.