قرار دادن یک سرور MCP در داخل یک اپلیکیشن Laravel
عاملهای هوش مصنوعی (AI agents) به چیزی فراتر از یک رابط کاربری استخراجشده (scraped UI) نیاز دارند. آنها به راهی برای فراخوانی ابزارهای خاص با مجوزهای مناسب نیاز دارند. این دقیقاً همان کاری است که پروتکل زمینه مدل (Model Context Protocol یا MCP) انجام میدهد.
من اخیراً یک سرور MCP را مستقیماً در یک اپلیکیشن Laravel ادغام کردهام. میخواهم تصمیمات معماری اتخاذ شده برای ساخت امن این سیستم را به اشتراک بگذارم.
استعارهی پذیرشگر
اپلیکیشن خود را مانند یک ساختمان اداری تصور کنید.
- رابط کاربری وب (web UI) لابی برای انسانها است.
- REST API ورودی کارکنان برای سیستمها است.
- سرور MCP میز پذیرش برای عاملهای هوش مصنوعی است.
عامل هوش مصنوعی کارت شناسایی خود را نشان میدهد و درخواست یک وظیفه خاص را میکند. پذیرشگر کلیدهای ساختمان را به آنها نمیدهد؛ بلکه مجوزها را بررسی کرده، یک وظیفه را انجام میدهد و یک پاسخ ساختاریافته برمیگرداند.
تصمیمات کلیدی طراحی
۱. استفاده از یک endpoint واحد
برای ابزارهای مختلف، مسیرهای (routes) زیادی ایجاد نکنید. از یک endpoint واحد به نام /mcp استفاده کنید. این پروتکل، کشف ابزارها (tool discovery) را بهطور خودکار مدیریت میکند. مدیریت امنیت و مستندسازی یک سطح (surface) واحد، بسیار آسانتر است.
۲. پشتیبانی از احراز هویت دوگانه
فراخوانکنندگان مختلف به روشهای امنیتی متفاوتی نیاز دارند:
- فراخوانکنندگان داخلی (مانند ابزارهای CLI) از توکنهای دسترسی شخصی Sanctum استفاده میکنند.
- عاملهای شخص ثالث (که به نمایندگی از کاربران عمل میکنند) از OAuth 2.1 استفاده میکنند.
از یک resolver به سبک درایور (driver-style) برای مدیریت هر دو استفاده کنید. کدِ ابزار فقط باید به کاربر احراز هویت شده اهمیت دهد، نه به اینکه او چگونه وارد سیستم شده است.
۳. اعمال RBAC موجود
احراز هویت (Authentication) فقط ثابت میکند که فراخوانکننده کیست. شما همچنان باید بررسی کنید که او چه کاری میتواند انجام دهد. هر ابزار باید به یک قابلیت (ability) موجود نگاشت شود. اگر کاربری نمیتواند شرکتکنندگان را در رابط کاربری وب مشاهده کند، نباید بتواند این کار را از طریق MCP انجام دهد.
۴. محدود کردن خروجی دادهها
هرگز یک مدل کامل پایگاه داده را برنگردانید. با خروجی MCP مانند یک API عمومی رفتار کنید. فقط فیلدهای خاصی را که عامل به آنها نیاز دارد برگردانید. این کار از نشت تصادفی دادهها جلوگیری میکند.
تست برای امنیت
تستهای شما باید ثابت کنند که سیستم در صورت بروز خطا، بهدرستی عمل میکند. تست کنید که:
- یک کاربر غیرمجاز خطای
403 Forbiddenدریافت میکند. - یک کاربر مجاز فقط فیلدهای مجاز را دریافت میکند.
یک مجموعه تست (test suite) خوب، بهترین دفاع شما در برابر نشت دادهها هنگام استفاده از عاملهای خودمختار است.
خلاصه
برای ساخت یک سرور MCP مسئولانه، این سه قانون را دنبال کنید:
- هر فراخوانکننده را با استفاده از طرح (scheme) مناسب احراز هویت کنید.
- هر ابزار را با استفاده از مدل مجوزدهی موجود خود، مجازسازی (Authorize) کنید.
- با هر خروجیِ ابزار مانند یک منبع عمومی محدود رفتار کنید.
