اتصال MCP به Claude و مدل‌های دیگه

قسمت ۵ ۱۵ دقیقه

قبلاً چی گفتیم؟

توی قسمت‌های قبلی این سری، با خود مفهوم MCP آشنا شدی، معماری Client-Server رو فهمیدی، یاد گرفتی چطور یه MCP Server بسازی و سه قابلیت اصلی (Tools، Resources و Prompts) رو عملی تجربه کردی. حالا وقتشه ببینیم این سرورهایی که ساختی، چطور به یه مدل AI واقعی وصل می‌شن.

این قسمت یکی از مهم‌ترین بخش‌های سریه. چون تا اینجا فقط سرور ساختیم — حالا می‌خوایم ببینیم کلاینت چطور کار می‌کنه و کدوم مدل‌ها و اپلیکیشن‌ها از MCP پشتیبانی می‌کنن.

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

Claude Desktop — خونه اصلی MCP

وقتی از MCP حرف می‌زنیم، اولین چیزی که باید بشناسی Claude Desktop هست. Anthropic که خالق MCP هست، این پروتکل رو مستقیماً داخل اپلیکیشن دسکتاپ Claude پیاده‌سازی کرده. یعنی Claude Desktop یه MCP Host بومی (native) هست.

این یعنی چی؟ یعنی وقتی Claude Desktop رو نصب می‌کنی، از همون اول قابلیت اتصال به MCP Serverها رو داره. نیاز به پلاگین اضافه یا تنظیمات پیچیده نیست. فقط باید بهش بگی کدوم سرورها رو می‌خوای.

تشبیه
فرض کن گوشیت بلوتوث داره. نیاز نیست بلوتوث رو جداگانه نصب کنی — از اول توشه. فقط باید دستگاه‌هایی رو که می‌خوای بهش وصل کنی، Pair کنی. Claude Desktop هم دقیقاً همین‌طوره. MCP از اول توشه، فقط باید سرورها رو بهش معرفی کنی.

فایل تنظیمات: claude_desktop_config.json

قلب اتصال MCP به Claude Desktop، یه فایل JSON ساده‌ست به اسم claude_desktop_config.json. این فایل توی مسیر تنظیمات Claude Desktop قرار داره:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json

ساختار این فایل خیلی ساده‌ست. هر MCP Server که می‌خوای استفاده کنی رو داخل بخش mcpServers تعریف می‌کنی:

{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-filesystem", "/Users/me/Documents"]
    },
    "github": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-github"],
      "env": {
        "GITHUB_TOKEN": "ghp_your_token_here"
      }
    }
  }
}

بذار هر بخش رو توضیح بدم:

  • کلید اصلی (مثل filesystem): اسمی که خودت انتخاب می‌کنی. این اسم توی Claude Desktop نشون داده می‌شه
  • command: دستوری که برای اجرای سرور استفاده می‌شه (معمولاً npx یا python)
  • args: آرگومان‌هایی که به دستور پاس داده می‌شن
  • env: متغیرهای محیطی (environment variables) مثل توکن‌ها و کلیدها

بعد از ذخیره این فایل و ریستارت Claude Desktop، سرورها فعال می‌شن. می‌تونی توی پنجره چت Claude ببینی که آیکون ابزارها اضافه شده و می‌تونی ازشون استفاده کنی.

نکته
بعد از هر تغییر توی فایل تنظیمات، حتماً Claude Desktop رو کامل ببند و دوباره باز کن. Reload ساده کافی نیست.

چطور می‌فهمی سرور وصل شده؟

وقتی Claude Desktop رو باز می‌کنی و سرورها درست تنظیم شده باشن، یه آیکون ابزار (معمولاً شکل چکش یا آچار) پایین پنجره چت ظاهر می‌شه. روش کلیک کنی، لیست ابزارهای هر سرور رو می‌بینی. مثلاً اگه سرور filesystem رو وصل کرده باشی، ابزارهایی مثل read_file و write_file و list_directory رو می‌بینی.

حالا کافیه توی چت از Claude بخوای کاری انجام بده. مثلاً بنویسی «فایل‌های توی فولدر Documents رو لیست کن» و Claude خودش تشخیص می‌ده که باید از ابزار list_directory استفاده کنه.

Claude Code — MCP برای توسعه‌دهنده‌ها

اگه توسعه‌دهنده هستی، احتمالاً بیشتر وقتت رو توی ترمینال و ادیتور کد می‌گذرونی. Claude Code (که توی VS Code و JetBrains هم قابل استفاده‌ست) یه MCP Host دیگه‌ست که مستقیماً توی محیط توسعه‌ات کار می‌کنه.

Claude Code هم مثل Claude Desktop از MCP پشتیبانی می‌کنه، ولی یه تفاوت مهم داره: محیطش command-line و کدمحور هست. یعنی ابزارهای MCP مستقیماً توی workflow کدنویسی تو ادغام می‌شن.

تنظیم MCP در Claude Code

توی Claude Code، سرورهای MCP رو توی فایل .mcp.json تعریف می‌کنی. این فایل می‌تونه توی ریشه پروژه‌ات باشه (برای تنظیمات پروژه‌ای) یا توی فولدر ~/.claude/ (برای تنظیمات global):

{
  "mcpServers": {
    "postgres": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-postgres", "postgresql://localhost/mydb"]
    }
  }
}

تفاوت کلیدی اینه که Claude Code ابزارهای MCP رو مستقیماً توی مکالمه‌ات استفاده می‌کنه. مثلاً اگه سرور دیتابیس وصل باشه، می‌تونی بگی «آخرین ۱۰ سفارش رو از جدول orders بکش» و Claude Code مستقیماً کوئری رو اجرا می‌کنه.

نکته
یه مزیت بزرگ Claude Code اینه که چون توی محیط توسعه‌ات هست، context پروژه‌ات رو هم داره. یعنی هم کد رو می‌فهمه و هم ابزارهای MCP رو. این ترکیب خیلی قدرتمنده.

آیا مدل‌های دیگه هم از MCP استفاده می‌کنن؟

این یکی از رایج‌ترین سوال‌هاییه که می‌شنوم: «MCP فقط مال Claude هست؟» جواب کوتاه: نه!

MCP یه پروتکل اوپن‌سورس هست. Anthropic اون رو ساخته، ولی مالکیت انحصاری نداره. هر کسی می‌تونه ازش استفاده کنه. و خبر خوب اینه که خیلی از اپلیکیشن‌ها و مدل‌ها دارن پشتیبانی از MCP رو اضافه می‌کنن.

اکوسیستم MCP

بذار ببینیم کی‌ها از MCP پشتیبانی می‌کنن:

پشتیبانی بومی (Native):

  • Claude Desktop — بله، همون‌طور که گفتیم
  • Claude Code — محیط توسعه
  • Cursor — ادیتور کد AI-محور، MCP رو مستقیماً پشتیبانی می‌کنه
  • Windsurf — یکی دیگه از ادیتورهای AI
  • Zed — ادیتور سریع با پشتیبانی MCP

پشتیبانی از طریق پلاگین:

  • VS Code — با افزونه‌های مختلف
  • JetBrains IDEs — از طریق پلاگین‌های third-party

سازگار ولی غیررسمی:

  • چون MCP یه استاندارد بازه، هر اپلیکیشنی می‌تونه یه MCP Client بنویسه و مدل دلخواهش رو بهش وصل کنه. مثلاً اگه یه اپلیکیشن از OpenAI GPT استفاده می‌کنه، می‌تونه یه لایه MCP Client اضافه کنه و از سرورهای MCP بهره ببره
تشبیه
MCP مثل HTTP هست. Google اون رو اختراع نکرد، ولی Chrome ازش استفاده می‌کنه. Mozilla هم، Apple هم. MCP رو Anthropic ساخته، ولی هر کسی می‌تونه ازش استفاده کنه. مهم اینه که استاندارد باز هست.

نکته مهم درباره مدل‌های زبانی

یه نکته که خیلی مهمه و باید دقت کنی: خود مدل زبانی (مثل GPT-4 یا Claude) نیازی نداره مستقیماً «از MCP پشتیبانی کنه». MCP یه پروتکل ارتباطی هست که در لایه اپلیکیشن پیاده‌سازی می‌شه، نه در لایه مدل.

یعنی چی؟ یعنی اگه اپلیکیشنت یه MCP Client داشته باشه، می‌تونه هر مدلی رو بهش وصل کنه. مدل فقط باید قابلیت Tool Use (استفاده از ابزار) داشته باشه — که اکثر مدل‌های مدرن دارن.

پس وقتی می‌شنوی «فلان اپلیکیشن از MCP پشتیبانی می‌کنه»، منظور اینه که اون اپلیکیشن یه MCP Client داره. مدل زیرش هر چیزی می‌تونه باشه.

چند MCP Server همزمان

یکی از قدرتمندترین ویژگی‌های MCP اینه که محدود به یه سرور نیستی. می‌تونی همزمان چندین MCP Server رو به یه Host وصل کنی. و این واقعاً جادوییه.

فرض کن این سرورها رو همزمان فعال کردی:

  • سرور فایل‌سیستم — دسترسی به فایل‌های لوکال
  • سرور GitHub — دسترسی به ریپازیتوری‌ها
  • سرور PostgreSQL — دسترسی به دیتابیس
  • سرور Slack — ارسال پیام

حالا می‌تونی به Claude بگی: «آخرین commit روی ریپوی main رو چک کن، بعد از دیتابیس آمار فروش امروز رو بکش، یه گزارش بنویس و توی Slack بفرست.» و Claude از هر چهار سرور استفاده می‌کنه تا این کار رو انجام بده!

نکته
هر سرور مستقل از بقیه کار می‌کنه. اگه یه سرور مشکل داشته باشه، بقیه سالمن. این طراحی باعث می‌شه سیستم مقاوم (resilient) باشه.

مدیریت چند سرور

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

ولی یه نکته هست: هر چقدر ابزارهای بیشتری فعال باشه، context window بیشتری مصرف می‌شه (چون توضیحات ابزارها باید به مدل فرستاده بشه). پس بهتره فقط سرورهایی رو فعال کنی که واقعاً لازم داری.

تنظیمات پیشرفته

Transport Types — روش‌های ارتباط

MCP دو روش اصلی برای ارتباط بین Client و Server داره:

۱. stdio (Standard Input/Output): سرور به صورت یه فرآیند لوکال اجرا می‌شه و ارتباط از طریق stdin/stdout انجام می‌شه. این روش برای سرورهای لوکال عالیه و همونیه که توی مثال‌های بالا دیدی.

۲. SSE (Server-Sent Events): سرور از طریق HTTP در دسترسه. این روش برای سرورهای ریموت و cloud-based مناسبه. می‌تونی یه MCP Server روی اینترنت داشته باشی و از هر جایی بهش وصل بشی.

{
  "mcpServers": {
    "remote-db": {
      "url": "https://mcp.example.com/db",
      "transport": "sse"
    }
  }
}
هشدار
وقتی از سرورهای ریموت استفاده می‌کنی، حتماً مطمئن شو ارتباط HTTPS هست و احراز هویت (authentication) داری. توی قسمت بعدی (امنیت MCP) بیشتر درباره این موضوع صحبت می‌کنیم.

Environment Variables

خیلی از سرورهای MCP به اطلاعات حساس نیاز دارن — توکن‌ها، رمزها، کلیدهای API. بهترین روش اینه که این اطلاعات رو از طریق env توی تنظیمات پاس بدی و هرگز مستقیماً توی کد سرور قرار ندی:

{
  "mcpServers": {
    "database": {
      "command": "python",
      "args": ["my_db_server.py"],
      "env": {
        "DB_HOST": "localhost",
        "DB_PASSWORD": "secret_password",
        "DB_NAME": "myapp"
      }
    }
  }
}

این یه اصل امنیتی مهمه که توی قسمت بعدی بیشتر بهش می‌پردازیم.

یه سناریوی واقعی

بذار یه مثال واقعی بزنم تا ببینی همه این‌ها توی عمل چطور کنار هم قرار می‌گیرن.

فرض کن یه تیم توسعه نرم‌افزار داری. اعضای تیم از Claude Desktop استفاده می‌کنن و این سرورهای MCP رو تنظیم کردن:

  1. سرور GitHub: برای بررسی Pull Requestها و خوندن کد
  2. سرور Jira: برای مدیریت تسک‌ها
  3. سرور دیتابیس: برای اجرای کوئری‌های گزارشی
  4. سرور Slack: برای ارسال نوتیفیکیشن

حالا مدیر تیم می‌تونه به Claude بگه: «PR شماره ۱۲۳ رو بررسی کن، تسک مربوطه توی Jira رو پیدا کن، ببین تغییرات روی performance دیتابیس تاثیری داره یا نه، و خلاصه‌ات رو توی کانال #dev بفرست.»

Claude از هر چهار سرور استفاده می‌کنه: کد رو از GitHub می‌خونه، تسک رو از Jira پیدا می‌کنه، کوئری test روی دیتابیس اجرا می‌کنه، و نتیجه رو توی Slack می‌فرسته. بدون اینکه مدیر تیم حتی یه خط کد بنویسه.

سرورهای آماده
نیازی نیست همه سرورها رو خودت بسازی. یه اکوسیستم بزرگ از سرورهای آماده وجود داره. از GitHub و Slack و Google Drive گرفته تا دیتابیس‌ها و سرویس‌های ابری. لیست کامل رو می‌تونی توی مخزن رسمی MCP Servers ببینی.

خلاصه و قدم بعدی

توی این قسمت یاد گرفتی:

  • Claude Desktop چطور به صورت بومی از MCP پشتیبانی می‌کنه و چطور تنظیمش کنی
  • Claude Code چطور MCP رو توی محیط توسعه ادغام می‌کنه
  • MCP یه استاندارد بازه و محدود به Claude نیست
  • می‌تونی چند سرور رو همزمان استفاده کنی
  • دو روش ارتباط (stdio و SSE) وجود داره

حالا که می‌دونی چطور MCP رو به اپلیکیشن‌ها وصل کنی، یه سوال مهم پیش میاد: امنیت چی؟ وقتی به AI اجازه می‌دی به فایل‌هات، دیتابیست و سرویس‌هات دسترسی داشته باشه، چه ریسک‌هایی وجود داره؟ توی قسمت بعدی دقیقاً درباره امنیت MCP و بهترین شیوه‌ها صحبت می‌کنیم.

نظرات

هنوز نظری ثبت نشده. اولین نفر باشید!

نظر خود را بنویسید