(برای مشاهده ویدئوی این درس روی تصویر بالا کلیک کنید)
Model Context Protocol (MCP) یک چارچوب استاندارد قدرتمند است که ارتباط بین مدلهای زبانی بزرگ (LLMs) و ابزارها، برنامهها و منابع داده خارجی را بهینه میکند. این راهنما شما را با مفاهیم اصلی MCP آشنا میکند. شما با معماری کلاینت-سرور، اجزای اساسی، مکانیزمهای ارتباطی و بهترین شیوههای پیادهسازی آن آشنا خواهید شد.
-
رضایت صریح کاربر: تمام دسترسیها به دادهها و عملیاتها نیاز به تأیید صریح کاربر قبل از اجرا دارند. کاربران باید به وضوح بدانند که چه دادههایی دسترسی پیدا میشود و چه اقداماتی انجام خواهد شد، با کنترل دقیق بر مجوزها و تأییدیهها.
-
حفاظت از حریم خصوصی دادهها: دادههای کاربر تنها با رضایت صریح افشا میشوند و باید در طول چرخه تعامل با کنترلهای دسترسی قوی محافظت شوند. پیادهسازیها باید از انتقال غیرمجاز دادهها جلوگیری کرده و مرزهای حریم خصوصی را به شدت حفظ کنند.
-
ایمنی اجرای ابزارها: هر فراخوانی ابزار نیاز به رضایت صریح کاربر دارد، همراه با درک واضح از عملکرد ابزار، پارامترها و تأثیرات احتمالی آن. مرزهای امنیتی قوی باید از اجرای ناخواسته، ناامن یا مخرب ابزارها جلوگیری کنند.
-
امنیت لایه انتقال: تمام کانالهای ارتباطی باید از مکانیزمهای رمزنگاری و احراز هویت مناسب استفاده کنند. اتصالات از راه دور باید پروتکلهای انتقال امن و مدیریت صحیح اعتبارنامهها را پیادهسازی کنند.
- مدیریت مجوزها: سیستمهای مجوز دقیق پیادهسازی کنید که به کاربران اجازه میدهد کنترل کنند کدام سرورها، ابزارها و منابع قابل دسترسی هستند.
- احراز هویت و مجوزدهی: از روشهای امن احراز هویت (OAuth، کلیدهای API) با مدیریت صحیح توکنها و انقضا استفاده کنید.
- اعتبارسنجی ورودیها: تمام پارامترها و دادههای ورودی را بر اساس طرحهای تعریفشده اعتبارسنجی کنید تا از حملات تزریقی جلوگیری شود.
- ثبت گزارشهای حسابرسی: گزارشهای جامع از تمام عملیاتها برای نظارت امنیتی و انطباق نگهداری کنید.
این درس به بررسی معماری و اجزای اساسی که اکوسیستم Model Context Protocol (MCP) را تشکیل میدهند میپردازد. شما با معماری کلاینت-سرور، اجزای کلیدی و مکانیزمهای ارتباطی که تعاملات MCP را ممکن میسازند آشنا خواهید شد.
در پایان این درس، شما:
- معماری کلاینت-سرور MCP را درک خواهید کرد.
- نقشها و مسئولیتهای میزبانها، کلاینتها و سرورها را شناسایی خواهید کرد.
- ویژگیهای اصلی که MCP را به یک لایه یکپارچهسازی انعطافپذیر تبدیل میکند تحلیل خواهید کرد.
- نحوه جریان اطلاعات در اکوسیستم MCP را یاد خواهید گرفت.
- از طریق مثالهای کدنویسی در .NET، جاوا، پایتون و جاوااسکریپت بینشهای عملی کسب خواهید کرد.
اکوسیستم MCP بر اساس مدل کلاینت-سرور ساخته شده است. این ساختار ماژولار به برنامههای هوش مصنوعی اجازه میدهد تا به طور کارآمد با ابزارها، پایگاههای داده، APIها و منابع زمینهای تعامل داشته باشند. بیایید این معماری را به اجزای اصلی آن تقسیم کنیم.
در هسته خود، MCP از معماری کلاینت-سرور پیروی میکند که در آن یک برنامه میزبان میتواند به چندین سرور متصل شود:
flowchart LR
subgraph "Your Computer"
Host["Host with MCP (Visual Studio, VS Code, IDEs, Tools)"]
S1["MCP Server A"]
S2["MCP Server B"]
S3["MCP Server C"]
Host <-->|"MCP Protocol"| S1
Host <-->|"MCP Protocol"| S2
Host <-->|"MCP Protocol"| S3
S1 <--> D1[("Local\Data Source A")]
S2 <--> D2[("Local\Data Source B")]
end
subgraph "Internet"
S3 <-->|"Web APIs"| D3[("Remote\Services")]
end
- میزبانهای MCP: برنامههایی مانند VSCode، Claude Desktop، IDEها یا ابزارهای هوش مصنوعی که میخواهند از طریق MCP به دادهها دسترسی پیدا کنند.
- کلاینتهای MCP: کلاینتهای پروتکل که ارتباطات ۱:۱ با سرورها را حفظ میکنند.
- سرورهای MCP: برنامههای سبکوزنی که هر کدام قابلیتهای خاصی را از طریق پروتکل استاندارد Model Context ارائه میدهند.
- منابع داده محلی: فایلها، پایگاههای داده و خدمات کامپیوتر شما که سرورهای MCP میتوانند به طور امن به آنها دسترسی پیدا کنند.
- خدمات از راه دور: سیستمهای خارجی که از طریق اینترنت در دسترس هستند و سرورهای MCP میتوانند از طریق APIها به آنها متصل شوند.
پروتکل MCP یک استاندارد در حال تکامل است که از نسخهبندی مبتنی بر تاریخ (فرمت YYYY-MM-DD) استفاده میکند. نسخه فعلی پروتکل 2025-06-18 است. میتوانید آخرین بهروزرسانیهای مشخصات پروتکل را مشاهده کنید.
در پروتکل Model Context (MCP)، میزبانها برنامههای هوش مصنوعی هستند که به عنوان رابط اصلی عمل میکنند و کاربران از طریق آنها با پروتکل تعامل دارند. میزبانها با ایجاد کلاینتهای MCP اختصاصی برای هر اتصال سرور، ارتباطات با چندین سرور MCP را هماهنگ و مدیریت میکنند. مثالهایی از میزبانها عبارتند از:
- برنامههای هوش مصنوعی: Claude Desktop، Visual Studio Code، Claude Code
- محیطهای توسعه: IDEها و ویرایشگرهای کد با یکپارچهسازی MCP
- برنامههای سفارشی: عوامل و ابزارهای هوش مصنوعی ساختهشده برای اهداف خاص
میزبانها برنامههایی هستند که تعاملات مدل هوش مصنوعی را هماهنگ میکنند. آنها:
- مدلهای هوش مصنوعی را هماهنگ میکنند: مدلهای زبانی بزرگ را اجرا یا با آنها تعامل میکنند تا پاسخها را تولید کرده و جریانهای کاری هوش مصنوعی را هماهنگ کنند.
- اتصالات کلاینت را مدیریت میکنند: برای هر اتصال سرور MCP یک کلاینت MCP ایجاد و نگهداری میکنند.
- رابط کاربری را کنترل میکنند: جریان مکالمه، تعاملات کاربر و نمایش پاسخها را مدیریت میکنند.
- امنیت را اجرا میکنند: مجوزها، محدودیتهای امنیتی و احراز هویت را کنترل میکنند.
- رضایت کاربر را مدیریت میکنند: تأیید کاربر برای اشتراکگذاری دادهها و اجرای ابزارها را مدیریت میکنند.
کلاینتها اجزای اساسی هستند که ارتباطات اختصاصی یکبهیک بین میزبانها و سرورهای MCP را حفظ میکنند. هر کلاینت MCP توسط میزبان برای اتصال به یک سرور MCP خاص ایجاد میشود و کانالهای ارتباطی سازمانیافته و امن را تضمین میکند. چندین کلاینت به میزبانها اجازه میدهند به طور همزمان به چندین سرور متصل شوند.
کلاینتها اجزای اتصالدهنده درون برنامه میزبان هستند. آنها:
- ارتباطات پروتکل: درخواستهای JSON-RPC 2.0 را با دستورات و راهنماییها به سرورها ارسال میکنند.
- مذاکره قابلیتها: ویژگیهای پشتیبانیشده و نسخههای پروتکل را با سرورها در طول راهاندازی مذاکره میکنند.
- اجرای ابزارها: درخواستهای اجرای ابزار از مدلها را مدیریت کرده و پاسخها را پردازش میکنند.
- بهروزرسانیهای بلادرنگ: اعلانها و بهروزرسانیهای بلادرنگ از سرورها را مدیریت میکنند.
- پردازش پاسخها: پاسخهای سرور را پردازش و برای نمایش به کاربران قالببندی میکنند.
سرورها برنامههایی هستند که زمینه، ابزارها و قابلیتها را به کلاینتهای MCP ارائه میدهند. آنها میتوانند به صورت محلی (روی همان دستگاه میزبان) یا از راه دور (روی پلتفرمهای خارجی) اجرا شوند و مسئول پردازش درخواستهای کلاینت و ارائه پاسخهای ساختاریافته هستند. سرورها قابلیتهای خاصی را از طریق پروتکل استاندارد Model Context ارائه میدهند.
سرورها خدماتی هستند که زمینه و قابلیتها را فراهم میکنند. آنها:
- ثبت ویژگیها: قابلیتهای موجود (منابع، دستورات، ابزارها) را به کلاینتها ثبت و ارائه میکنند.
- پردازش درخواستها: فراخوانی ابزارها، درخواست منابع و درخواستهای دستورات را از کلاینتها دریافت و اجرا میکنند.
- ارائه زمینه: اطلاعات و دادههای زمینهای را برای بهبود پاسخهای مدل فراهم میکنند.
- مدیریت وضعیت: وضعیت جلسه را حفظ کرده و تعاملات حالتدار را در صورت نیاز مدیریت میکنند.
- اعلانهای بلادرنگ: اعلانهایی درباره تغییرات قابلیتها و بهروزرسانیها به کلاینتهای متصل ارسال میکنند.
سرورها میتوانند توسط هر کسی برای گسترش قابلیتهای مدل با عملکردهای تخصصی توسعه داده شوند و از سناریوهای استقرار محلی و از راه دور پشتیبانی میکنند.
سرورها در پروتکل Model Context (MCP) سه ابتدایی اصلی ارائه میدهند که بلوکهای سازنده اساسی برای تعاملات غنی بین کلاینتها، میزبانها و مدلهای زبانی را تعریف میکنند. این ابتداییات انواع اطلاعات زمینهای و اقدامات موجود از طریق پروتکل را مشخص میکنند.
سرورهای MCP میتوانند هر ترکیبی از سه ابتدایی اصلی زیر را ارائه دهند:
منابع منابع دادهای هستند که اطلاعات زمینهای را به برنامههای هوش مصنوعی ارائه میدهند. آنها محتوای ایستا یا پویا را نشان میدهند که میتواند درک مدل را بهبود بخشد:
- دادههای زمینهای: اطلاعات ساختاریافته و زمینه برای مصرف مدل هوش مصنوعی
- پایگاههای دانش: مخازن اسناد، مقالات، راهنماها و مقالات پژوهشی
- منابع داده محلی: فایلها، پایگاههای داده و اطلاعات سیستم محلی
- دادههای خارجی: پاسخهای API، خدمات وب و دادههای سیستمهای از راه دور
- محتوای پویا: دادههای بلادرنگ که بر اساس شرایط خارجی بهروزرسانی میشوند
منابع با URIs شناسایی میشوند و از طریق روشهای resources/list و resources/read قابل کشف و بازیابی هستند:
file://documents/project-spec.md
database://production/users/schema
api://weather/current
دستورات قالبهای قابل استفاده مجددی هستند که به ساختاردهی تعاملات با مدلهای زبانی کمک میکنند. آنها الگوهای تعامل استاندارد و جریانهای کاری قالببندیشده را ارائه میدهند:
- تعاملات مبتنی بر قالب: پیامهای پیشساخته و شروعکنندههای مکالمه
- قالبهای جریان کاری: توالیهای استاندارد برای وظایف و تعاملات رایج
- مثالهای Few-shot: قالبهای مبتنی بر مثال برای آموزش مدل
- دستورات سیستمی: دستورات پایهای که رفتار و زمینه مدل را تعریف میکنند
- قالبهای پویا: دستورات پارامتری که به زمینههای خاص تطبیق مییابند
دستورات از جایگزینی متغیر پشتیبانی میکنند و از طریق prompts/list قابل کشف و با prompts/get بازیابی میشوند:
Generate a {{task_type}} for {{product}} targeting {{audience}} with the following requirements: {{requirements}}ابزارها توابع اجرایی هستند که مدلهای هوش مصنوعی میتوانند برای انجام اقدامات خاص آنها را فراخوانی کنند. آنها "افعال" اکوسیستم MCP را نشان میدهند و به مدلها اجازه میدهند با سیستمهای خارجی تعامل داشته باشند:
- توابع اجرایی: عملیاتهای مجزا که مدلها میتوانند با پارامترهای خاص آنها را فراخوانی کنند
- یکپارچهسازی سیستم خارجی: فراخوانی API، پرسوجوهای پایگاه داده، عملیات فایل، محاسبات
- هویت منحصربهفرد: هر ابزار دارای نام، توضیحات و طرح پارامتر متمایز است
- ورودی/خروجی ساختاریافته: ابزارها پارامترهای اعتبارسنجیشده را میپذیرند و پاسخهای ساختاریافته و تایپشده بازمیگردانند
- قابلیتهای عملیاتی: به مدلها اجازه میدهند اقدامات واقعی انجام دهند و دادههای زنده را بازیابی کنند
ابزارها با استفاده از JSON Schema برای اعتبارسنجی پارامترها تعریف میشوند و از طریق tools/list کشف و با tools/call اجرا میشوند:
server.tool(
"search_products",
{
query: z.string().describe("Search query for products"),
category: z.string().optional().describe("Product category filter"),
max_results: z.number().default(10).describe("Maximum results to return")
},
async (params) => {
// Execute search and return structured results
return await productService.search(params);
}
);در پروتکل Model Context (MCP)، کلاینتها میتوانند ابتداییاتی ارائه دهند که به سرورها اجازه میدهد قابلیتهای اضافی از برنامه میزبان درخواست کنند. این ابتداییات سمت کلاینت امکان پیادهسازی سرورهای غنیتر و تعاملیتر را فراهم میکنند که میتوانند به قابلیتهای مدل هوش مصنوعی و تعاملات کاربر دسترسی داشته باشند.
نمونهگیری به سرورها اجازه میدهد تا تکمیلهای مدل زبانی را از برنامه هوش مصنوعی کلاینت درخواست کنند. این ابتدایی به سرورها امکان میدهد بدون وابستگی به مدلهای داخلی خود، به قابلیتهای LLM دسترسی پیدا کنند:
- دسترسی مستقل از مدل: سرورها میتوانند تکمیلها را بدون گنجاندن SDKهای LLM یا مدیریت دسترسی به مدل درخواست کنند.
- هوش مصنوعی سرورمحور: به سرورها اجازه میدهد به طور مستقل محتوا را با استفاده از مدل هوش مصنوعی کلاینت تولید کنند.
- تعاملات بازگشتی LLM: از سناریوهای پیچیدهای که سرورها برای پردازش به کمک هوش مصنوعی نیاز دارند پشتیبانی میکند.
- تولید محتوای پویا: به سرورها اجازه میدهد پاسخهای زمینهای را با استفاده از مدل میزبان ایجاد کنند.
نمونهگیری از طریق روش sampling/complete آغاز میشود، جایی که سرورها درخواستهای تکمیل را به کلاینتها ارسال میکنند.
استخراج اطلاعات به سرورها اجازه میدهد اطلاعات اضافی یا تأییدیه از کاربران را از طریق رابط کلاینت درخواست کنند:
- درخواستهای ورودی کاربر: سرورها میتوانند هنگام نیاز به اطلاعات اضافی برای اجرای ابزار درخواست کنند.
- دیالوگهای تأییدیه: درخواست تأیید کاربر برای عملیات حساس یا تأثیرگذار
- جریانهای کاری تعاملی: به سرورها اجازه میدهد تعاملات مرحلهبهمرحله با کاربر ایجاد کنند.
- جمعآوری پارامترهای پویا: جمعآوری پارامترهای گمشده یا اختیاری در طول اجرای ابزار
درخواستهای استخراج اطلاعات با استفاده از روش elicitation/request برای جمعآوری ورودی کاربر از طریق رابط کلاینت انجام میشوند.
ثبت گزارش به سرورها اجازه میدهد پیامهای گزارش ساختاریافته را برای اشکالزدایی، نظارت و دید عملیاتی به کلاینتها ارسال کنند:
- پشتیبانی اشکالزدایی: به سرورها اجازه میدهد گزارشهای اجرایی دقیق برای رفع اشکال ارائه دهند.
- نظارت عملیاتی: ارسال بهروزرسانیهای وضعیت و معیارهای عملکرد به کلاینتها
- گزارش خطا: ارائه زمینه خطا و اطلاعات تشخیصی دقیق
- ردیابی حسابرسی: ایجاد گزارشهای جامع از عملیات و تصمیمات سرور
پیامهای گزارش به کلاینتها ارسال میشوند تا شفافیت در عملیات سرور را فراهم کرده و اشکالزدایی را تسهیل کنند.
پروتکل Model Context (MCP) جریان ساختاریافتهای از اطلاعات بین میزبانها، کلاینتها، سرورها و مدلها تعریف میکند. درک این جریان به روشن شدن نحوه پردازش درخواستهای کاربر و نحوه یکپارچهسازی ابزارها و دادههای خارجی در پاسخهای مدل کمک میکند.
-
میزبان اتصال را آغاز میکند
برنامه میزبان (مانند یک IDE یا رابط چت) اتصال به یک سرور MCP را برقرار میکند، معمولاً از طریق STDIO، WebSocket یا یک انتقال پشتیبانیشده دیگر. -
مذاکره قابلیتها
کلاینت (جاسازیشده در میزبان) و سرور اطلاعاتی درباره ویژگیهای پشتیبانیشده، ابزارها، منابع و نسخههای پروتکل خود تبادل میکنند. این کار تضمین میکند که هر دو طرف قابلیتهای موجود برای جلسه را درک میکنند. -
درخواست کاربر
کاربر با میزبان تعامل میکند (مثلاً یک دستور یا درخواست وارد میکند). میزبان این ورودی را جمعآوری کرده و برای پردازش به کلاینت ارسال میکند. -
استفاده از منابع یا ابزارها
- کلاینت ممکن است برای غنیسازی درک مدل، زمینه یا منابع اضافی از سرور درخواست کند (مانند فایلها، ورودیهای پایگاه داده یا مقالات پایگاه دانش).
- اگر مدل
-
پروتکل JSON-RPC 2.0: تمام ارتباطات از فرمت استاندارد پیام JSON-RPC 2.0 برای فراخوانی متدها، پاسخها و اعلانها استفاده میکنند.
-
مدیریت چرخه عمر: مدیریت اولیهسازی اتصال، مذاکره قابلیتها و خاتمه جلسه بین کلاینتها و سرورها.
-
ابزارهای سرور: به سرورها امکان ارائه قابلیتهای اصلی از طریق ابزارها، منابع و قالبها را میدهد.
-
ابزارهای کلاینت: به سرورها امکان درخواست نمونهگیری از مدلهای زبانی، دریافت ورودی کاربر و ارسال پیامهای لاگ را میدهد.
-
اعلانهای بلادرنگ: پشتیبانی از اعلانهای غیرهمزمان برای بهروزرسانیهای پویا بدون نیاز به درخواست مکرر.
- مذاکره نسخه پروتکل: استفاده از نسخهبندی مبتنی بر تاریخ (YYYY-MM-DD) برای اطمینان از سازگاری.
- کشف قابلیتها: کلاینتها و سرورها در طول اولیهسازی اطلاعات ویژگیهای پشتیبانیشده را تبادل میکنند.
- جلسات با حالت پایدار: حفظ وضعیت اتصال در تعاملات متعدد برای تداوم زمینه.
لایه انتقال کانالهای ارتباطی، قالببندی پیامها و احراز هویت بین شرکتکنندگان MCP را مدیریت میکند:
-
انتقال STDIO:
- استفاده از جریانهای ورودی/خروجی استاندارد برای ارتباط مستقیم بین فرآیندها.
- بهینه برای فرآیندهای محلی روی یک ماشین بدون سربار شبکه.
- معمولاً برای پیادهسازیهای سرور MCP محلی استفاده میشود.
-
انتقال HTTP قابل استریم:
- استفاده از HTTP POST برای پیامهای کلاینت به سرور.
- رویدادهای ارسالشده توسط سرور (SSE) اختیاری برای استریم از سرور به کلاینت.
- امکان ارتباط با سرورهای راه دور در شبکهها.
- پشتیبانی از احراز هویت استاندارد HTTP (توکنهای حامل، کلیدهای API، هدرهای سفارشی).
- MCP استفاده از OAuth را برای احراز هویت امن مبتنی بر توکن توصیه میکند.
لایه انتقال جزئیات ارتباط را از لایه داده انتزاع میکند و امکان استفاده از همان فرمت پیام JSON-RPC 2.0 را در تمام مکانیزمهای انتقال فراهم میکند. این انتزاع به برنامهها اجازه میدهد بهراحتی بین سرورهای محلی و راه دور جابهجا شوند.
پیادهسازیهای MCP باید از چندین اصل امنیتی حیاتی پیروی کنند تا تعاملات ایمن، قابلاعتماد و مطمئن در تمام عملیات پروتکل تضمین شود:
-
رضایت و کنترل کاربر: کاربران باید قبل از دسترسی به هر داده یا انجام عملیات، رضایت صریح خود را ارائه دهند. آنها باید کنترل واضحی بر دادههای بهاشتراکگذاشتهشده و اقدامات مجاز داشته باشند، که این امر با رابطهای کاربری شهودی برای بررسی و تأیید فعالیتها پشتیبانی میشود.
-
حریم خصوصی دادهها: دادههای کاربران فقط با رضایت صریح آنها در دسترس قرار میگیرد و باید با کنترلهای دسترسی مناسب محافظت شود. پیادهسازیهای MCP باید از انتقال غیرمجاز دادهها جلوگیری کرده و اطمینان حاصل کنند که حریم خصوصی در تمام تعاملات حفظ میشود.
-
ایمنی ابزارها: قبل از فراخوانی هر ابزار، رضایت صریح کاربر لازم است. کاربران باید درک روشنی از عملکرد هر ابزار داشته باشند و مرزهای امنیتی قوی باید برای جلوگیری از اجرای ناخواسته یا ناامن ابزارها اعمال شود.
با پیروی از این اصول امنیتی، MCP اطمینان حاصل میکند که اعتماد، حریم خصوصی و ایمنی کاربران در تمام تعاملات پروتکل حفظ میشود و در عین حال ادغامهای قدرتمند هوش مصنوعی را امکانپذیر میسازد.
در زیر مثالهایی از کد در چند زبان برنامهنویسی محبوب آورده شده است که نحوه پیادهسازی اجزای کلیدی سرور MCP و ابزارها را نشان میدهد.
در اینجا یک مثال عملی از کد .NET آورده شده است که نحوه پیادهسازی یک سرور ساده MCP با ابزارهای سفارشی را نشان میدهد. این مثال نحوه تعریف و ثبت ابزارها، مدیریت درخواستها و اتصال سرور با استفاده از پروتکل مدل زمینه را نمایش میدهد.
using System;
using System.Threading.Tasks;
using ModelContextProtocol.Server;
using ModelContextProtocol.Server.Transport;
using ModelContextProtocol.Server.Tools;
public class WeatherServer
{
public static async Task Main(string[] args)
{
// Create an MCP server
var server = new McpServer(
name: "Weather MCP Server",
version: "1.0.0"
);
// Register our custom weather tool
server.AddTool<string, WeatherData>("weatherTool",
description: "Gets current weather for a location",
execute: async (location) => {
// Call weather API (simplified)
var weatherData = await GetWeatherDataAsync(location);
return weatherData;
});
// Connect the server using stdio transport
var transport = new StdioServerTransport();
await server.ConnectAsync(transport);
Console.WriteLine("Weather MCP Server started");
// Keep the server running until process is terminated
await Task.Delay(-1);
}
private static async Task<WeatherData> GetWeatherDataAsync(string location)
{
// This would normally call a weather API
// Simplified for demonstration
await Task.Delay(100); // Simulate API call
return new WeatherData {
Temperature = 72.5,
Conditions = "Sunny",
Location = location
};
}
}
public class WeatherData
{
public double Temperature { get; set; }
public string Conditions { get; set; }
public string Location { get; set; }
}این مثال همان سرور MCP و ثبت ابزارها را که در مثال .NET بالا آورده شده است، اما در جاوا پیادهسازی میکند.
import io.modelcontextprotocol.server.McpServer;
import io.modelcontextprotocol.server.McpToolDefinition;
import io.modelcontextprotocol.server.transport.StdioServerTransport;
import io.modelcontextprotocol.server.tool.ToolExecutionContext;
import io.modelcontextprotocol.server.tool.ToolResponse;
public class WeatherMcpServer {
public static void main(String[] args) throws Exception {
// Create an MCP server
McpServer server = McpServer.builder()
.name("Weather MCP Server")
.version("1.0.0")
.build();
// Register a weather tool
server.registerTool(McpToolDefinition.builder("weatherTool")
.description("Gets current weather for a location")
.parameter("location", String.class)
.execute((ToolExecutionContext ctx) -> {
String location = ctx.getParameter("location", String.class);
// Get weather data (simplified)
WeatherData data = getWeatherData(location);
// Return formatted response
return ToolResponse.content(
String.format("Temperature: %.1f°F, Conditions: %s, Location: %s",
data.getTemperature(),
data.getConditions(),
data.getLocation())
);
})
.build());
// Connect the server using stdio transport
try (StdioServerTransport transport = new StdioServerTransport()) {
server.connect(transport);
System.out.println("Weather MCP Server started");
// Keep server running until process is terminated
Thread.currentThread().join();
}
}
private static WeatherData getWeatherData(String location) {
// Implementation would call a weather API
// Simplified for example purposes
return new WeatherData(72.5, "Sunny", location);
}
}
class WeatherData {
private double temperature;
private String conditions;
private String location;
public WeatherData(double temperature, String conditions, String location) {
this.temperature = temperature;
this.conditions = conditions;
this.location = location;
}
public double getTemperature() {
return temperature;
}
public String getConditions() {
return conditions;
}
public String getLocation() {
return location;
}
}در این مثال نشان داده میشود که چگونه یک سرور MCP در پایتون ساخته شود. همچنین دو روش مختلف برای ایجاد ابزارها نشان داده شده است.
#!/usr/bin/env python3
import asyncio
from mcp.server.fastmcp import FastMCP
from mcp.server.transports.stdio import serve_stdio
# Create a FastMCP server
mcp = FastMCP(
name="Weather MCP Server",
version="1.0.0"
)
@mcp.tool()
def get_weather(location: str) -> dict:
"""Gets current weather for a location."""
# This would normally call a weather API
# Simplified for demonstration
return {
"temperature": 72.5,
"conditions": "Sunny",
"location": location
}
# Alternative approach using a class
class WeatherTools:
@mcp.tool()
def forecast(self, location: str, days: int = 1) -> dict:
"""Gets weather forecast for a location for the specified number of days."""
# This would normally call a weather API forecast endpoint
# Simplified for demonstration
return {
"location": location,
"forecast": [
{"day": i+1, "temperature": 70 + i, "conditions": "Partly Cloudy"}
for i in range(days)
]
}
# Instantiate the class to register its tools
weather_tools = WeatherTools()
# Start the server using stdio transport
if __name__ == "__main__":
asyncio.run(serve_stdio(mcp))این مثال ایجاد سرور MCP در جاوااسکریپت و نحوه ثبت دو ابزار مرتبط با آبوهوا را نشان میدهد.
// Using the official Model Context Protocol SDK
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod"; // For parameter validation
// Create an MCP server
const server = new McpServer({
name: "Weather MCP Server",
version: "1.0.0"
});
// Define a weather tool
server.tool(
"weatherTool",
{
location: z.string().describe("The location to get weather for")
},
async ({ location }) => {
// This would normally call a weather API
// Simplified for demonstration
const weatherData = await getWeatherData(location);
return {
content: [
{
type: "text",
text: `Temperature: ${weatherData.temperature}°F, Conditions: ${weatherData.conditions}, Location: ${weatherData.location}`
}
]
};
}
);
// Define a forecast tool
server.tool(
"forecastTool",
{
location: z.string(),
days: z.number().default(3).describe("Number of days for forecast")
},
async ({ location, days }) => {
// This would normally call a weather API
// Simplified for demonstration
const forecast = await getForecastData(location, days);
return {
content: [
{
type: "text",
text: `${days}-day forecast for ${location}: ${JSON.stringify(forecast)}`
}
]
};
}
);
// Helper functions
async function getWeatherData(location) {
// Simulate API call
return {
temperature: 72.5,
conditions: "Sunny",
location: location
};
}
async function getForecastData(location, days) {
// Simulate API call
return Array.from({ length: days }, (_, i) => ({
day: i + 1,
temperature: 70 + Math.floor(Math.random() * 10),
conditions: i % 2 === 0 ? "Sunny" : "Partly Cloudy"
}));
}
// Connect the server using stdio transport
const transport = new StdioServerTransport();
server.connect(transport).catch(console.error);
console.log("Weather MCP Server started");این مثال جاوااسکریپت نشان میدهد که چگونه یک کلاینت MCP ایجاد کنید که به سرور متصل شود، یک درخواست ارسال کند و پاسخ را پردازش کند، از جمله هرگونه فراخوانی ابزار که انجام شده است.
MCP شامل چندین مفهوم و مکانیزم داخلی برای مدیریت امنیت و مجوزها در سراسر پروتکل است:
-
کنترل مجوز ابزار:
کلاینتها میتوانند مشخص کنند که کدام ابزارها در طول یک جلسه برای مدل مجاز هستند. این امر تضمین میکند که فقط ابزارهای صریحاً مجاز در دسترس هستند و خطر عملیات ناخواسته یا ناامن کاهش مییابد. مجوزها میتوانند بهصورت پویا بر اساس ترجیحات کاربر، سیاستهای سازمانی یا زمینه تعامل پیکربندی شوند. -
احراز هویت:
سرورها میتوانند قبل از اعطای دسترسی به ابزارها، منابع یا عملیات حساس، احراز هویت را الزامی کنند. این ممکن است شامل کلیدهای API، توکنهای OAuth یا سایر طرحهای احراز هویت باشد. احراز هویت مناسب تضمین میکند که فقط کلاینتها و کاربران مورداعتماد میتوانند قابلیتهای سمت سرور را فراخوانی کنند. -
اعتبارسنجی:
اعتبارسنجی پارامتر برای تمام فراخوانیهای ابزار اعمال میشود. هر ابزار انواع، قالبها و محدودیتهای مورد انتظار برای پارامترهای خود را تعریف میکند و سرور درخواستهای ورودی را بهطور مناسب اعتبارسنجی میکند. این امر از رسیدن ورودیهای نادرست یا مخرب به پیادهسازی ابزار جلوگیری کرده و به حفظ یکپارچگی عملیات کمک میکند. -
محدودیت نرخ:
برای جلوگیری از سوءاستفاده و اطمینان از استفاده منصفانه از منابع سرور، سرورهای MCP میتوانند محدودیت نرخ را برای فراخوانی ابزارها و دسترسی به منابع اعمال کنند. محدودیتهای نرخ میتوانند بهصورت کاربر، جلسه یا بهصورت کلی اعمال شوند و به محافظت در برابر حملات انکار سرویس یا مصرف بیش از حد منابع کمک کنند.
با ترکیب این مکانیزمها، MCP یک پایه امن برای ادغام مدلهای زبانی با ابزارها و منابع داده خارجی فراهم میکند و در عین حال کنترل دقیق بر دسترسی و استفاده را به کاربران و توسعهدهندگان میدهد.
ارتباطات MCP از پیامهای ساختاریافته JSON-RPC 2.0 برای تسهیل تعاملات واضح و قابلاعتماد بین میزبانها، کلاینتها و سرورها استفاده میکند. پروتکل الگوهای پیام خاصی را برای انواع مختلف عملیات تعریف میکند:
- درخواست
initialize: اتصال را برقرار کرده و نسخه پروتکل و قابلیتها را مذاکره میکند. - پاسخ
initialize: ویژگیهای پشتیبانیشده و اطلاعات سرور را تأیید میکند. notifications/initialized: نشان میدهد که اولیهسازی کامل شده و جلسه آماده است.
- درخواست
tools/list: ابزارهای موجود در سرور را کشف میکند. - درخواست
resources/list: منابع موجود (منابع داده) را فهرست میکند. - درخواست
prompts/list: قالبهای درخواست موجود را بازیابی میکند.
- درخواست
tools/call: یک ابزار خاص را با پارامترهای ارائهشده اجرا میکند. - درخواست
resources/read: محتوا را از یک منبع خاص بازیابی میکند. - درخواست
prompts/get: یک قالب درخواست را با پارامترهای اختیاری دریافت میکند.
- درخواست
sampling/complete: سرور از کلاینت درخواست تکمیل مدل زبانی میکند. elicitation/request: سرور از کلاینت درخواست ورودی کاربر از طریق رابط کاربری میکند.- پیامهای لاگ: سرور پیامهای لاگ ساختاریافته را به کلاینت ارسال میکند.
notifications/tools/list_changed: سرور تغییرات ابزارها را به کلاینت اطلاع میدهد.notifications/resources/list_changed: سرور تغییرات منابع را به کلاینت اطلاع میدهد.notifications/prompts/list_changed: سرور تغییرات قالبها را به کلاینت اطلاع میدهد.
تمام پیامهای MCP از فرمت JSON-RPC 2.0 پیروی میکنند که شامل موارد زیر است:
- پیامهای درخواست: شامل
id،methodو پارامترهای اختیاریparams. - پیامهای پاسخ: شامل
idو یاresultیاerror. - پیامهای اعلان: شامل
methodو پارامترهای اختیاریparams(بدونidیا پاسخ مورد انتظار).
این ارتباط ساختاریافته تعاملات قابلاعتماد، قابلردیابی و قابلگسترش را پشتیبانی میکند که سناریوهای پیشرفتهای مانند بهروزرسانیهای بلادرنگ، زنجیرهسازی ابزارها و مدیریت خطای قوی را امکانپذیر میسازد.
- معماری: MCP از معماری کلاینت-سرور استفاده میکند که در آن میزبانها چندین اتصال کلاینت به سرورها را مدیریت میکنند.
- شرکتکنندگان: اکوسیستم شامل میزبانها (برنامههای هوش مصنوعی)، کلاینتها (اتصالدهندههای پروتکل) و سرورها (ارائهدهندگان قابلیتها) است.
- مکانیزمهای انتقال: ارتباطات از STDIO (محلی) و HTTP قابل استریم با SSE اختیاری (راه دور) پشتیبانی میکند.
- ابزارهای اصلی: سرورها ابزارها (توابع اجرایی)، منابع (منابع داده) و قالبها (الگوها) را ارائه میدهند.
- ابزارهای کلاینت: سرورها میتوانند از کلاینتها درخواست نمونهگیری (تکمیل مدل زبانی)، دریافت ورودی کاربر و لاگگیری کنند.
- پایه پروتکل: بر اساس JSON-RPC 2.0 با نسخهبندی مبتنی بر تاریخ (نسخه فعلی: 2025-06-18).
- قابلیتهای بلادرنگ: از اعلانها برای بهروزرسانیهای پویا و همگامسازی بلادرنگ پشتیبانی میکند.
- امنیت در اولویت: رضایت صریح کاربر، حفاظت از حریم خصوصی دادهها و انتقال امن از الزامات اصلی هستند.
یک ابزار ساده MCP طراحی کنید که در حوزه شما مفید باشد. مشخص کنید:
- نام ابزار چه خواهد بود.
- چه پارامترهایی را میپذیرد.
- چه خروجیای بازمیگرداند.
- چگونه یک مدل ممکن است از این ابزار برای حل مشکلات کاربران استفاده کند.
بعدی: فصل ۲: امنیت
سلب مسئولیت:
این سند با استفاده از سرویس ترجمه هوش مصنوعی Co-op Translator ترجمه شده است. در حالی که ما برای دقت تلاش میکنیم، لطفاً توجه داشته باشید که ترجمههای خودکار ممکن است شامل خطاها یا نادرستیهایی باشند. سند اصلی به زبان اصلی آن باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حساس، ترجمه حرفهای انسانی توصیه میشود. ما هیچ مسئولیتی در قبال سوءتفاهمها یا تفسیرهای نادرست ناشی از استفاده از این ترجمه نداریم.
