MCP چیست؟ آموزش کامل ساخت MCP Server از صفر | Hozhi Learn
MCP چیست؟ هوش مصنوعی را به همهچیز وصل کن
در این راهنمای کامل و از صفر یاد میگیری MCP دقیقاً چیست، چرا مهم است، و چطور با پایتون یک MCP Server اختصاصی بسازی و به Claude وصلش کنی — همه به سادهترین زبان ممکن و قدمبهقدم، حتی اگر تازهکار باشی.
MCP دقیقاً چیست؟
تا حالا شده با یک هوش مصنوعی مثل Claude یا ChatGPT حرف بزنی و از یک جایی به بعد بگوید «من به این اطلاعات دسترسی ندارم»؟ مشکل اینجاست که این مدلها خیلی باهوشاند، ولی مثل یک آدم فوقالعاده باهوشاند که در یک اتاق دربسته نشسته؛ نه به فایلهای تو دسترسی دارد، نه به برنامههایی که هر روز با آنها کار میکنی. MCP همان چیزی است که این در بسته را باز میکند.
MCP مخفف سه کلمه است: Model Context Protocol. بیایید ساده معنیشان کنیم. Model یعنی همان مدل هوش مصنوعی (مثل Claude). Context یعنی اطلاعات و ابزارهایی که مدل برای انجام کار لازم دارد (فایلهایت، دیتابیس، ایمیل). و Protocol یعنی یک قرارداد یا زبان مشترک؛ یک سری قانون که همه سرشان توافق کردهاند تا دو چیز راحت با هم حرف بزنند.
پس MCP یعنی: یک زبان مشترک و استاندارد که به مدلهای هوش مصنوعی اجازه میدهد به اطلاعات و ابزارهای دنیای بیرون وصل شوند.
و این فقط یک ایده روی کاغذ نیست. MCP را شرکت Anthropic (سازندهی Claude) اواخر ۲۰۲۴ بهصورت یک استاندارد باز معرفی کرد و خیلی زود بقیه هم پذیرفتندش؛ امروز ابزارهای مختلفی مثل Claude، Cursor و VS Code از آن پشتیبانی میکنند. پس وقتی MCP یاد میگیری، مهارتی یاد میگیری که به یک هوش مصنوعی خاص وصل نیست.
مشکلی که MCP حل میکند
بیایید دو دنیا را مقایسه کنیم تا اهمیتش روشن شود.
دنیای بدون MCP: فرض کن میخواهی هوش مصنوعیات به فایلهای شرکت، دیتابیس مشتریها و تقویم کاری وصل شود. باید برای هر کدام یک اتصال جداگانه و دستساز بنویسی. حالا اگر فردا بخواهی همینها را به یک هوش مصنوعی دیگر هم وصل کنی، باید دوباره از اول همه را بنویسی. یعنی هر ابزار ضربدر هر هوش مصنوعی؛ یک کابوس تکراری.
دنیای با MCP: برای هر ابزار فقط یک بار یک سرور میسازی، و بعد هر هوش مصنوعیای که بخواهد فقط به آن وصل میشود. Claude میتواند استفاده کند، Cursor میتواند، بقیه هم میتوانند؛ همه از یک زبان مشترک.
| موضوع | بدون MCP | با MCP |
|---|---|---|
| اتصال هر ابزار | کد جداگانه برای هر ترکیب | یک سرور، قابل استفاده برای همه |
| افزودن هوش مصنوعی جدید | باید همهچیز را از نو بنویسی | فقط وصلش میکنی |
| نگهداری | سخت و پرتکرار | تمیز و استاندارد |
سه جزء اصلی MCP
برای ساختن MCP، اول باید بفهمیم از چه قطعههایی تشکیل شده. فقط سه قطعهی اصلی داریم.
- Host (میزبان): برنامهای که تو با آن کار میکنی و هوش مصنوعی داخلش زندگی میکند؛ مثل Claude Desktop یا Cursor.
- Client (مشتری): یک واسطه که داخل Host نشسته و پیامها را بین هوش مصنوعی و سرور رد و بدل میکند. معمولاً پشت صحنه کار میکند و مستقیم نمیبینیاش.
- Server (سرور): همان چیزی که ابزارها و اطلاعات واقعی را نگه میدارد. این همان قسمتی است که ما میسازیم.
جریان کار ساده است: داخل Host چیزی مینویسی، Client آن را به Server میدهد، Server کار را انجام میدهد و جواب برمیگردد. حالا خودِ Server میتواند سه نوع چیز ارائه دهد:
| نوع | یعنی چه | مثال |
|---|---|---|
| Tools (ابزارها) | کارهایی که هوش مصنوعی میتواند انجام دهد | فرستادن ایمیل، افزودن یک کار |
| Resources (منابع) | اطلاعاتی که فقط خوانده میشوند | محتوای یک فایل یا داده |
| Prompts (الگوها) | قالبهای آماده برای راحتی کار | دستور آمادهی «این کد را بررسی کن» |
در این آموزش بیشتر روی Tools تمرکز میکنیم، چون کاربردیترین و هیجانانگیزترین بخش است. وقتی همین را یاد بگیری، بقیه خیلی راحت میشود.
آمادهسازی محیط از صفر
قبل از ساختن چیزی، باید چند ابزار نصب کنیم. اگر هر کدام را از قبل داری، از رویش رد شو.
- پایتون ۳.۱۰ یا بالاتر: زبانی که با آن سرور را مینویسیم. لازم نیست پایتون بلد باشی؛ کدها را کامل داریم. از
python.orgبگیر. (ویندوزیها موقع نصب حتماً تیک Add Python to PATH را بزنند.) - ابزار uv: کار نصب و اجرای پایتون را خیلی راحت میکند.
- یک ادیتور کد: مثل VS Code یا Cursor (هر دو رایگان).
- Claude Desktop: همان Host یا میزبان ما. از
claude.ai/downloadبگیر. با اکانت رایگان هم کار میکند. - Node.js: فقط برای مرحلهی تست (ابزار Inspector) و بعضی سرورهای آماده لازم است. نسخهی LTS را از
nodejs.orgنصب کن.
برای مطمئنشدن از نصب درست پایتون و uv، این دستورها را در ترمینال بزن:
python --version
uv --versionساخت اولین MCP Server
اول یک پروژهی جدید میسازیم و کتابخانهی MCP را نصب میکنیم:
uv init mcp-server-demo
cd mcp-server-demo
uv add 'mcp[cli]>=1.28,<2'No module named 'mcp.server.fastmcp' میگیری. برای همین با >=1.28,<2 عمداً روی نسخهی پایدار ۱ میمانیم.حالا در پوشهی پروژه یک فایل به اسم server.py بساز و این کد را داخلش بنویس. (یادت باشه: دستورها در ترمینال زده میشوند، ولی کد داخل فایل نوشته و با Ctrl+S ذخیره میشود.)
from mcp.server.fastmcp import FastMCP
# ساختن یک سرور با یک اسم دلخواه
mcp = FastMCP("hozhi-first-server")
# اولین ابزار ما: جمع دو عدد
@mcp.tool()
def add(a: int, b: int) -> int:
"""دو عدد را با هم جمع میکند"""
return a + b
# اجرای سرور
if __name__ == "__main__":
mcp.run()بیایید کد را خطبهخط بفهمیم. خط اول ابزار آمادهی FastMCP را وارد میکند (Fast یعنی سریع؛ راه سریع ساختن سرور). خط بعد یک سرور میسازد و یک اسم دلخواه به آن میدهد. مهمترین قسمت آن خط @mcp.tool() است؛ این علامت به سرور میگوید تابع پایینش یک «ابزار» است که هوش مصنوعی میتواند از آن استفاده کند.
آن جملهی داخل سه کوتیشن ("""دو عدد را با هم جمع میکند""") هم خیلی مهم است: این توضیح ابزار است و هوش مصنوعی آن را میخواند تا بفهمد ابزار چه کاری میکند. پس همیشه برای ابزارهایت یک توضیح واضح بنویس. همین! ما با کمتر از ده خط، اولین MCP Server را ساختیم.
@mcp.tool() در چند خط یک سرور با یک ابزار ساختیم. توضیح واضح هر ابزار حیاتی است.تست با MCP Inspector
قبل از وصلکردن سرور به Claude، بهتر است خودمان تستش کنیم. برای این کار ابزار MCP Inspector را داریم که یک صفحهی تصویری میدهد و میتوانیم ابزارها را دستی امتحان کنیم — بدون نیاز به هیچ هوش مصنوعیای. (این ابزار به Node.js نیاز دارد.)
uv run mcp dev server.pyOk to proceed?؛ فقط حرف y را بزن و Enter کن.بعد از چند لحظه یک صفحه در مرورگر باز میشود (روی یک آدرس محلی مثل localhost). دکمهی Connect را بزن، برو تب Tools، ابزار add را انتخاب کن، برای a بگذار ۵ و برای b بگذار ۳ و اجرا کن. اگر جواب ۸ آمد، یعنی سرورت درست کار میکند.
uv run mcp dev server.py سرور را قبل از اتصال به هوش مصنوعی، مستقل تست میکنیم.اتصال سرور به Claude Desktop
حالا میخواهیم سرور را به Claude Desktop وصل کنیم. یک دستور کوتاه به اسم mcp install وجود دارد، اما در عمل روی ویندوز اغلب با پیام Claude app not found شکست میخورد. پس روش دستی را نشان میدهیم که همیشه کار میکند.
قدم ۱: مسیر پایتونِ پروژه را پیدا کن
uv run python -c "import sys; print(sys.executable)"خروجی یک مسیر میدهد که به python.exe ختم میشود؛ کپیاش کن.
قدم ۲: فایل کانفیگ را باز کن
بهترین و مطمئنترین راه این است که خودِ Claude فایل را برایت باز کند تا دنبال مسیر نگردی: در Claude Desktop برو Settings → Developer → Edit Config. این دکمه دقیقاً همان فایلی را باز میکند که اپ از آن میخواند.
قدم ۳: سرور را اضافه کن
این بلوک را داخل فایل بگذار. دو نکتهی حیاتی: مسیرها را با مسیرهای خودت عوض کن، و در ویندوز هر بکاسلش \ را دوتا کن یعنی \\.
{
"mcpServers": {
"hozhi-first-server": {
"command": "C:\\path\\to\\.venv\\Scripts\\python.exe",
"args": ["C:\\path\\to\\server.py"]
}
}
}اگر فایل از قبل محتوا داشت، بلوک mcpServers را بهعنوان یک کلید جدید کنار بقیه اضافه کن (نه اینکه چیزی را پاک کنی) و یادت باشد بین کلیدها ویرگول بگذاری.
قدم ۴: کامل ببند و باز کن
خیلی مهم: Claude را فقط با زدن ضربدر نبند، چون پشت صحنه باز میماند. روی آیکونش کنار ساعت راستکلیک کن و Quit بزن، بعد دوباره از منوی استارت بازش کن.
قدم ۵: تست کن
حالا در Claude بنویس: «با استفاده از ابزارت، عدد ۱۲۴ و ۲۹۸ را با هم جمع کن.» یک پنجره برای اجازه میآید (این برای امنیت است)؛ اجازه بده. Claude بهجای اینکه خودش حساب کند، ابزار add ما را صدا میزند و جواب ۴۲۲ را میدهد.
ساخت یک سرور واقعی: مدیریت کارها
جمع دو عدد فقط برای یادگیری بود. حالا یک چیز واقعی میسازیم: یک دستیار مدیریت کارها که به Claude اجازه میدهد کار جدید اضافه کند، لیست کارها را بدهد و علامت بزند کدام انجام شده. کارها را در یک فایل ذخیره میکنیم تا محفوظ بمانند، و کاملاً آفلاین است (بدون کلید یا اشتراک).
یک فایل به اسم todo_server.py بساز و این کد را بنویس:
import json
from pathlib import Path
from mcp.server.fastmcp import FastMCP
mcp = FastMCP("todo-manager")
# فایل را دقیقاً کنار همین فایل پایتون بساز (مهم!)
TASKS_FILE = Path(__file__).parent / "tasks.json"
def load_tasks() -> list:
"""کارها را از فایل میخواند"""
if TASKS_FILE.exists():
return json.loads(TASKS_FILE.read_text(encoding="utf-8"))
return []
def save_tasks(tasks: list) -> None:
"""کارها را در فایل ذخیره میکند"""
TASKS_FILE.write_text(
json.dumps(tasks, ensure_ascii=False, indent=2),
encoding="utf-8",
)
@mcp.tool()
def add_task(title: str) -> str:
"""یک کار جدید به لیست اضافه میکند"""
tasks = load_tasks()
new_task = {"id": len(tasks) + 1, "title": title, "done": False}
tasks.append(new_task)
save_tasks(tasks)
return f"کار اضافه شد: {title}"
@mcp.tool()
def list_tasks() -> str:
"""همهی کارها را نمایش میدهد"""
tasks = load_tasks()
if not tasks:
return "هیچ کاری در لیست نیست."
result = []
for task in tasks:
status = "انجامشده" if task["done"] else "در انتظار"
result.append(f'{task["id"]}. {task["title"]} ({status})')
return "\n".join(result)
@mcp.tool()
def complete_task(task_id: int) -> str:
"""یک کار را انجامشده علامت میزند"""
tasks = load_tasks()
for task in tasks:
if task["id"] == task_id:
task["done"] = True
save_tasks(tasks)
return f'کار شماره {task_id} انجامشده علامت خورد.'
return f'کاری با شماره {task_id} پیدا نشد.'
if __name__ == "__main__":
mcp.run()Path(__file__).parent ؟ (نکتهی طلایی)Path("tasks.json")، فایل کنار جایی ساخته میشود که برنامه از آنجا اجرا میشود. ولی وقتی Claude سرور را اجرا میکند، پوشهی کاریاش یک مسیر سیستمی است که اجازهی نوشتن ندارد و خطای دسترسی میگیری. با Path(__file__).parent / "tasks.json" فایل همیشه دقیقاً کنار خودِ سرور و در جای قابلنوشتن ساخته میشود.حالا این سرور را هم مثل قبلی، از راه فایل کانفیگ به Claude اضافه کن. دقت کن که هر سرور باید به فایل خودش اشاره کند (اشتباه رایج: اشارهی سرور دوم به فایل سرور اول). و بین دو سرور ویرگول بگذار:
{
"mcpServers": {
"hozhi-first-server": {
"command": "C:\\path\\to\\.venv\\Scripts\\python.exe",
"args": ["C:\\path\\to\\server.py"]
},
"todo-manager": {
"command": "C:\\path\\to\\.venv\\Scripts\\python.exe",
"args": ["C:\\path\\to\\todo_server.py"]
}
}
}بعد از ذخیره و ریاستارت کامل Claude، امتحان کن: «کارهای زیر را به لیستم اضافه کن: تدوین ویدیو، جواب دادن به کامنتها، نوشتن اسکریپت بعدی.» Claude خودش سه بار ابزار add_task را صدا میزند. بعد بگو «لیست کارهایم را نشان بده» و بعد «کار اول را انجام دادم، علامتش بزن».
Path(__file__).parent بده تا خطای دسترسی نگیری.استفاده از سرورهای آماده
همیشه لازم نیست خودت از صفر بسازی. هزاران سرور MCP آماده وجود دارد که میتوانی در دو دقیقه اضافه کنی. چند جای اصلی برای پیدا کردنشان:
github.com/modelcontextprotocol/servers— مخزن رسمی و مورد اعتمادmcp.soوglama.ai/mcp/servers— دایرکتوریهای بزرگ و قابل جستجوsmithery.ai— دایرکتوری با نصب آسانgithub.com/punkpeye/awesome-mcp-servers— لیست دستهبندیشده
مثال عملی: سرور فایلسیستم رسمی
این سرور به Claude اجازه میدهد فایلهای داخل یک پوشهی مشخص را بخواند، بسازد و ویرایش کند. نه به کد نیاز دارد نه به کلید، و فقط از همان Node.js استفاده میکند. اول یک پوشهی تست بساز (مثلاً C:\mcp-test)، بعد این را کنار سرورهای قبلی در کانفیگ اضافه کن:
"filesystem": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-filesystem",
"C:\\mcp-test"
]
}npx را مستقیم پیدا نمیکند. در این حالت بهجای npx از cmd استفاده کن: مقدار command را بگذار cmd و اول args اضافه کن "/c", "npx" و بعد بقیه را مثل قبل.بعد از ریاستارت، تست کن: «با ابزار filesystem، فایلهای داخل مسیر C:\mcp-test را لیست کن.» بهتر است مسیر را کامل و صریح بدهی، چون در حالت Agent، خودِ Claude هم ابزار ساخت فایل داخلی دارد و ممکن است بهجای سرور تو از آن استفاده کند؛ درخواستی که به یک مسیر مشخص روی درایو نیاز دارد، مطمئن میشود که از سرور تو استفاده شود.
نکته: MCP به هیچ زبانی وابسته نیست
سرورهای خودمان را با پایتون نوشتیم و با python اجرا شدند. ولی این سرور آماده را کسی با Node.js نوشته، برای همین با npx اجرا میشود. خودِ MCP فقط یک «قرارداد» است و به هیچ زبانی گره نخورده؛ هر کسی میتواند با هر زبانی سرور بسازد و همه با هم کار میکنند. برای همین بعضی سرورها با python اجرا میشوند و بعضی با npx. صفحهی هر سرور خودش میگوید با کدام روش اجرایش کنی.
npx همراه Node.js میآید و یک بسته را از فروشگاه npm میگیرد و مستقیم اجرا میکند، بدون نصب دائمی. مثل «باز کن و استفاده کن». مزیتش: راحت، همیشه بهروز، و کامپیوترت را شلوغ نمیکند. آن -y هم یعنی «به سؤالهای نصب خودت جواب بله بده و منتظر من نمان».رفع خطاهای رایج (خیلی مهم)
موقع یادگیری MCP، احتمالاً به چند خطای پرتکرار میخوری. اینها را جمع کردهایم تا هر جا گیر کردی، سریع حلش کنی.
- No server object found — کد داخل فایل نیست یا ذخیره نشده، یا خط
mcp = FastMCP(...)تورفتگی دارد. فایل را ذخیره کن و مطمئن شو این خط چسبیده به سمت چپ است. - No module named 'mcp.server.fastmcp' — نسخهی ۲ نصب شده. با
uv add 'mcp[cli]>=1.28,<2'برگرد روی نسخهی ۱. - The system cannot find the path specified — مسیر در کانفیگ اشتباه است یا بکاسلشها دوتا نشدهاند. هر
\را\\کن و مسیر python.exe را باsys.executableدوباره بگیر. - هر دو ابزار شبیه هم شدند — یک سرور در کانفیگ به فایل سرور دیگری اشاره میکند. args هر سرور باید فایل خودش باشد.
- خطای دسترسی فایل (tasks.json) — مسیر ذخیره را با
Path(__file__).parentبنویس تا فایل کنار خودِ سرور ساخته شود. - سرور اصلاً دیده نمیشود — بلوک سرور بیرون از
mcpServersافتاده، یا ویرگول جا افتاده/اضافه است. باjsonlint.comساختار JSON را چک کن. - فایل در جای اشتباه ساخته شد — در حالت Agent، Claude ممکن است از ابزار داخلی خودش استفاده کند نه سرور تو. مسیر کامل بده و بگو با کدام ابزار (مثلاً filesystem).
{ } است. ۲) بین کلیدها ویرگول هست، ولی بعد از آخرین کلید نه. ۳) در ویندوز هر بکاسلش را دوتا کن (\\). همین سه را رعایت کنی، تقریباً هیچ خطای کانفیگی نمیگیری.امنیت در MCP
وقتی یک سرور MCP میسازی یا نصب میکنی، داری به هوش مصنوعی قدرت انجام کارهای واقعی میدهی. پس امنیت مهم است. چند قانون طلایی:
- اطلاعات حساس مثل رمز عبور و کلیدها را مستقیم در کد ننویس.
- فقط سرورهای آمادهای را نصب کن که به منبعشان اعتماد داری.
- ورودیهایی که به ابزارهایت میآیند را بررسی کن که چیز خطرناکی نباشند.
- به هر سرور فقط همان دسترسیای را بده که واقعاً لازم دارد. مثلاً سرور فایلسیستم فقطخواندنی نیست و میتواند فایل بسازد و پاک کند؛ پس فقط یک پوشهی مشخص به آن بده، نه کل درایو.
جمعبندی و قدم بعدی
بیایید همهچیز را مرور کنیم. اول فهمیدیم MCP چیست: یک زبان مشترک و استاندارد که هوش مصنوعی را به دنیای بیرون وصل میکند؛ مثل USB-C برای هوش مصنوعی. سه جزء اصلیاش (میزبان، مشتری، سرور) را شناختیم. از صفر محیط را آماده کردیم، اولین سرور را ساختیم، با Inspector تستش کردیم و به Claude وصلش کردیم. بعد یک سرور واقعی برای مدیریت کارها ساختیم و در آخر یاد گرفتیم سرورهای آماده را هم اضافه کنیم.
اگر تا اینجا آمدی، حالا مهارتی داری که خیلیها ندارند. برای قدم بعدی میتوانی سراغ اینها بروی:
- کاوش در دنیای سرورهای آماده و افزودن آنها که به کارت میآیند (گیتهاب، دیتابیس، جستجو و...).
- ساخت سرورهای راه دور با Streamable HTTP، برای وقتی که میخواهی سرورت را با بقیه به اشتراک بگذاری.
- افزودن Resources و Prompts به سرورت، نه فقط Tools.
- عمیقتر شدن در امنیت سرورهای MCP.
هوش مصنوعی جایگزین فهمیدن نیست، شتابدهندهی آن است. حالا که این مفاهیم را داری، هر ابزاری که به هوش مصنوعی وصل میشود دیگر یک جعبهی سیاه نیست — خودت میتوانی بسازیاش.
ویدیوی کامل این آموزش را ببین
این مقاله همراهِ ویدیوی کامل است. برای دیدن توضیح گامبهگام و تصویریِ ساخت سرور و اتصال به Claude، ویدیو را تماشا کن.
تماشای ویدیوی کامل