پرش به محتوای اصلی
پرش به محتوای مقاله

تسهیل اتصال مدل‌های زبانی به هسته .NET 9 از طریق پروتکل MCP

·۴ مرداد ۱۴۰۵۵ دقیقه مطالعه۲ بازدید
راهنما
بررسی عمیق MCP، بخش ۱۲: ساخت سرورهای MCP در سی‌شارپ و دات‌نت ۹ — SDK، تزریق وابستگی و AOT بومی
بررسی عمیق MCP، بخش ۱۲: ساخت سرورهای MCP در سی‌شارپ و دات‌نت ۹ — SDK، تزریق وابستگی و AOT بومی
اشتراک‌گذاری
واقعاً چه چیز جدید است؟

جایگزینی تولید دستی JSON Schema با اتریبیوت‌های C# و پشتیبانی بومی از Native AOT برای کاهش زمان راه‌اندازی سرد در سرویس‌های MCP.

اگر امروز یک سیستم بک‌اِند با .NET دارید، دیگر نیازی نیست برای اتصال آن به هوش مصنوعی، منطق تجاری خود را دوباره در پایتون یا تایپ‌اسکریپت بنویسید. «چرا باید منطق دامنه (Domain Logic) را در پایتون یا تایپ‌اسکریپت بازنویسی کنیم وقتی بک‌اِند فعلی ما دقیقاً همان‌جاست؟» این پرسش هسته‌ی اصلی تغییرات اخیر است. حالا با استفاده از SDK جدید مدل کانتکست پروتکل (MCP) برای C#، توسعه‌دهندگان .NET می‌توانند خدمات فعلی خود را به ابزارهایی تبدیل کنند که مدل‌های زبانی بزرگ (LLM) قادر به درک و اجرای مستقیم آن‌ها باشند. با بهره‌گیری از قابلیت‌های .NET 9، توسعه‌دهندگان اکنون می‌توانند یک سطح نازک و مبتنی بر اتریبیوت (Attributed Surface) ایجاد کنند که به LLMها اجازه می‌دهد مستقیماً با سرویس‌های دامنه C# تعامل داشته باشند.

این تحول در حالی رخ می‌دهد که عامل‌های هوش مصنوعی (AI Agents) از چرخه‌های ساده‌ی پرسش-پاسخ به سمت الگوهای پیچیده استفاده از ابزار (Tool Use) حرکت می‌کنند. برای سازمان‌ها و شرکت‌هایی که منطق تجاری‌شان پیش از این در اکوسیستم .NET مستقر شده است، تکثیر و بازنویسی این منطق در زبانی دیگر تنها برای ارضا کردن یک پروتکل AI، اتلاف شدید منابع و زمان است. طبق گزارشی فنی که در ۲۶ جولای ۲۰۲۶ در وب‌سایت dev.to منتشر شد، ارزش اصلی این SDK در این است که امضای تایپ‌شده‌ی (Typed Signature) متدهای .NET را به عنوان «منبع حقیقت» (Source of Truth) برای ساختار ابزار AI در نظر می‌گیرد. این رویکرد، نیاز به نوشتن دستی JSON Schemaها را که مستعد خطا هستند و معمولاً در گردش‌کارهای عامل‌محور باعث بروز ناهماهنگی (Drift) می‌شوند، به‌طور کامل از بین می‌برد. این رویکردی است که شرکت‌های بزرگی نظیر اپل نیز در پیش گرفته‌اند تا فرآیندهای توصیف دستی را در ابزارهای برنامه‌نویسی خود حذف کنند.

همان‌طور که در تحلیل‌های قبلی ما درباره‌ی استانداردسازی پروتکل‌های ارتباطی AI اشاره کردیم، هدف نهایی حذف لایه‌های واسطه‌ی متناقض است.

گذار از پیاده‌سازی دستی به SDK

پیش از ظهور SDK سی‌شارپ، توسعه‌دهندگان با حجم زیادی از کارهای دستی و سربارهای عملیاتی روبرو بودند. انتقال به این SDK چرخه حیات توسعه را به‌طور بنیادی تغییر می‌دهد:

  • تجزیه پروتکل (Protocol Parse): از کدنویسی دستی JSON-RPC به سمت استفاده از AddMcpServer() برای مدیریت خودکار تغییر یافت.
  • ساختار ابزار (Tool Schema): از نوشتن دستی JSON Schema به تولید خودکار از طریق اتریبیوت [McpServerTool] تغییر کرد.
  • وابستگی‌ها (Dependencies): سازنده‌های استاتیک یا نمونه‌سازی‌های دستی جای خود را به تزریق وابستگی (Dependency Injection) با دامنه Scoped برای هر فراخوانی دادند.
  • لایه انتقال (Transport): از پیاده‌سازی‌های بسته و محدود به stdio به انتخاب‌های منعطف بین stdio و ASP.NET Core تغییر یافت.
  • تست: از اجرای کامل عامل‌های AI به سمت تست واحد (Unit Testing) متدها و استفاده از انتقال‌دهنده‌های درون-حافظه‌ای (In-memory transport) حرکت کرد.
  • شروع سرد (Cold Start): از باینری‌های حجیم JIT به سمت Trim کردن و AOT بومی (Native AOT) گذار کرد.

خودکارسازی پروتکل

پروتکل زمینهٔ مدل (Model Context Protocol یا MCP) — که شبیه به یک مترجم استاندارد است تا مدل زبانی بتواند با دیتابیس‌ها و ابزارهای مختلف بدون زبان‌های واسطه صحبت کند — در این SDK به شدت ساده شده است. این SDK کارهای دشوار مربوط به قاب‌بندی JSON-RPC، مقداردهی اولیه (Initialization) و مذاکره درباره قابلیت‌ها (Capability Negotiation) را بر عهده می‌گیرد.

توسعه‌دهندگان تنها کافی است بسته‌های NuGet مربوط به ModelContextProtocol و نسخه ModelContextProtocol.AspNetCore را به پروژه خود اضافه کنند. با استفاده از متد WithToolsFromAssembly()، سرور به‌طور خودکار کلاس‌هایی را که با اتریبیوت [McpServerToolType] علامت‌گذاری شده‌اند، شناسایی می‌کند. این شناسایی مبتنی بر Reflection، مکانیسم توزیع درخواست‌ها را سیم‌کشی می‌کند؛ به این معنا که توسعه‌دهنده به جای درگیر شدن با لوله‌کشی کد (Plumbing)، فقط قابلیت‌ها را ثبت می‌کند. در کد، این فرآیند به شکل یک الگوی ساده‌ی Builder ظاهر می‌شود:

builder.Services
    .AddMcpServer(o => o.ServerInfo = new() { Name = "mattrx-analytics", Version = "2.4.0" })
    .WithHttpTransport()
    .WithToolsFromAssembly();

ساختارهای مبتنی بر اتریبیوت

بر اساس مستندات این SDK، ویژگی کلیدی یا «Killer Feature» آن، تبدیل متدهای C# به ابزارهایی است که برای مدل قابل خواندن باشد. با افزودن اتریبیوت [McpServerTool] و ارائه یک توصیف ([Description])، SDK به طور خودکار JSON Schema لازم را از روی امضای متد تولید می‌کند.

برای مثال، متدی مانند GetCampaignKpis پارامترهای خود — نظیر یک GUID برای شناسه‌ی کمپین‌ها و رشته‌های ISO-8601 برای بازه‌های زمانی (مانند "2026-06-01/2026-06-30") — را مستقیماً به ویژگی‌هایی تبدیل می‌کند که مدل زبانی قادر به درک آن‌هاست. پارامترهایی که Non-nullable هستند، به‌طور خودکار به عنوان فیلدهای اجباری (Required) در Schema در نظر گرفته می‌شوند. در این میان، اتریبیوت [Description] تبدیل به دستورالعمل صریح و لفظی می‌شود که مدل برای تصمیم‌گیری در مورد زمان فراخوانی ابزار، آن را می‌خواند.

ابزارسازی بومی با تزریق وابستگی (DI)

ابزارها در این معماری به عنوان کلاس‌هایی با تزریق وابستگی در سازنده (Constructor Injection) پیاده‌سازی می‌شوند، که باعث می‌شود رفتاری کاملاً مشابه با کنترلرهای MVC داشته باشند. SDK یک نمونه Scoped از ابزار را برای هر فراخوانی از کانتینر تزریق وابستگی برنامه استخراج می‌کند.

این معماری اجازه می‌دهد یک سرور MCP از سرویس‌های دامنه موجود، مانند ICampaignQueries یا یک DbContext با دامنه Scoped و همچنین هویت امنیتی درخواست (AiPrincipal) مجدداً استفاده کند. در این حالت، سرور تبدیل به یک رابط مدیریت‌شده (Governed Interface) می‌شود، نه یک بازپیاده‌سازی از بک‌اِند. برای مثال، با تزریق ICampaignQueries، اکسپوز کردن یک دامنه کامل تحلیلی روی MCP تقریباً به هیچ کد کوئری جدیدی نیاز ندارد. توسعه‌دهندگان همچنین می‌توانند CancellationToken را در امضای متد بگذرانند تا اطمینان حاصل کنند که SDK می‌تواند زمان‌های انتظار (Timeout) یا لغو درخواست‌ها را به‌طور بهینه مدیریت کند.

مدل‌های میزبان منعطف

یک کدبیس واحد می‌تواند بسته به هدف استقرار، از دو محیط میزبانی متمایز پشتیبانی کند:

  • میزبان Stdio: یک اپلیکیشن کنسول که برای توسعه محلی یا ابزارهای AI مبتنی بر دسک‌تاپ طراحی شده است. این مدل از WithStdioServerTransport() برای ارتباط از طریق ورودی/خروجی استاندارد استفاده می‌کند.
  • میزبان HTTP: یک اپلیکیشن ASP.NET Core که از MapMcp("/mcp") برای محیط‌های تولیدی و چندمستاجری (Multi-tenant) استفاده می‌کند. این رویکرد اجازه می‌دهد نقطه انتهایی (Endpoint) مدل کانتکست پروتکل با احراز هویت‌های موجود، OpenTelemetry (OTel) و میدل‌ویرهای بررسی سلامت (Health-check) ترکیب شود.

این انعطاف باعث می‌شود توسعه‌دهندگان قابلیت ابزار را تنها یک بار بنویسند و سپس لایه‌ی انتقال (Transport Layer) را بر اساس اینکه سرور به صورت محلی اجرا می‌شود یا به عنوان یک سرویس ابری، انتخاب کنند. این انتقال به سمت معماری‌های منعطف‌تر، با تغییرات معماری MCP v2 برای سازگاری با زیرساخت‌های بدون سرور همسو است تا مقیاس‌پذیری در محیط‌های ابری بهینه شود.

تست و عملکرد

به دلیل اینکه ابزارها در واقع متدهای ساده هستند، می‌توان آن‌ها را با استفاده از Fakeها بدون هیچ‌گونه سربار پروتکلی، مورد تست واحد قرار داد. توسعه‌دهنده می‌تواند به سادگی AnalyticsTools را با یک FakeCampaignQueries نمونه‌سازی کرده و تأیید کند که نتایج به‌درستی بر اساس مستاجر (Tenant-scoped) هستند.

برای اعتبارسنجی سرتاسری (End-to-End)، SDK یک انتقال‌دهنده درون-حافظه‌ای از طریق McpTestHost.ConnectInMemoryAsync<T>() فراهم کرده است. این امکان به کلاینت‌ها اجازه می‌دهد تا بدون نیاز به شبکه زنده یا حضور LLM در چرخه، لیست ابزارها را دریافت کرده و آن‌ها را به‌صورت قطعی فراخوانی کنند تا از صحت عملکردهای tools/list و tools/call اطمینان حاصل شود.

برای رفع مشکل راه‌اندازی سرد (Cold Start) در محیط‌های ابری مانند Azure Container Apps، این SDK از Native AOT (Ahead-of-Time) پشتیبانی می‌کند. با تنظیم ویژگی‌های زیر در فایل پروژه، توسعه‌دهندگان می‌توانند زمان استارت-آپ را به شدت کاهش داده و حجم ایمیج‌ها را کوچک کنند:

  • <PublishTrimmed>true</PublishTrimmed>
  • <InvariantGlobalization>true</InvariantGlobalization>
  • <PublishAot>true</PublishAot>

با این حال، نویسنده هشدار می‌دهد که چون تولید Schema بر پایه Reflection است، توسعه‌دهندگان باید پیش از استقرار Native AOT، ایمنی Trim (Trim-safety) را اعتبارسنجی کنند یا از Source Generatorها استفاده نمایند تا از خطاهای زمان اجرا جلوگیری شود. نباید این تنظیمات را بدون بررسی (Cargo-culting) کپی کرد، بلکه ابتدا باید اعتبارسنجی صورت گیرد.

این تغییر، شیوه ادغام AI را برای شرکت‌های .NET تغییر می‌دهد؛ زیرا پیچیدگی را از «کدهای چسب» (Glue Code) به «منطق دامنه» منتقل می‌کند. در واقع، به جای ساخت یک میدل‌ویر AI مجزا، هوش مصنوعی به‌طور مؤثر به یکی دیگر از کلاینت‌های لایه سرویس موجود تبدیل می‌شود.

ادغام MCP در استک .NET 9 اصطکاک معماری‌های چند-زبانه را از بین می‌برد و تضمین می‌کند که قابلیت‌های AI هم‌زمان با تغییر کد بک‌اِند، به‌روز شوند؛ زیرا هرگونه تغییر در امضای یک متد، به‌طور خودکار Schema ابزار ارائه شده به مدل را به‌روزرسانی می‌کند. در نهایت، این ابزارها می‌توانند در رابط‌های کاربر پیشرفته‌تر نمایش داده شوند، مشابه آنچه در چارچوب‌های رابط کاربر پشتیبان از mcp-elements مشاهده می‌کنیم.

توسعه‌دهندگان اکنون باید سرویس‌های دامنه فعلی خود را برای یافتن فرصت‌های با اهرم بالا (High-leverage) جهت استفاده از AI ارزیابی کنند. گام منطقی بعدی برای این معماری، انتقال این سرورها به زیرساخت‌های مقیاس تولید در Azure است.

گام بعدی شما

  • شناسایی متدهای پرکاربرد در لایه‌ی سرویس فعلی خود که پتانسیل تبدیل شدن به ابزار AI دارند.
  • تست پیاده‌سازی Native AOT روی یک پروژه کوچک برای بررسی سازگاری Reflection با کاربرد Trim.
  • بررسی جایگزینی APIهای واسط با یک سرور MCP متمرکز برای کاهش تأخیر در پاسخ‌دهی عامل‌ها.
چرا این موضوع مهم است؟

این SDK از اعتبار استانداردهای مایکروسافت و پروتکل MCP برای حذف تکرار کد در سازمان‌ها استفاده می‌کند. نتیجه این است که سرعت تبدیل سرویس‌های سنتی به سیستم‌های عامل‌محور، از هفته‌ها به چند ساعت کاهش می‌یابد.

تأثیر برای ایران

توسعه‌دهندگان ایرانی که از اکوسیستم .NET برای پروژه‌های سازمانی استفاده می‌کنند، اکنون می‌توانند بدون نیاز به یادگیری عمیق پایتون، عامل‌های AI را به سیستم‌های خود متصل کنند.

·نگاه ما
تحریریه دات‌هوش

تکمیل زنجیره ابزارهای .NET با MCP، عملاً سد ورود شرکت‌های سازمانی (Enterprise) را به دنیای عامل‌های هوش مصنوعی می‌شکند. این حرکت نشان می‌دهد که آینده‌ی AI نه در بازنویسی زیرساخت‌ها، بلکه در ساخت لایه‌های «ترجمه» است که مدل را به منطق موجود متصل می‌کند. به نظر ما، Native AOT در اینجا نقطه‌ی تعیین‌کننده‌ای است که اجازه می‌دهد عامل‌ها در محیط‌های Serverless بدون تأخیرهای مرگبار اجرا شوند.

منابع

این گزارش با خط‌لولهٔ خودکار دات‌هوش از منابع معتبر جهانی تدوین و زیر نظر تحریریه منتشر شده است. روش کار ما

گفتگو

پنج‌شنبه‌های هوش‌محور

بسته‌ی هفتگی دات‌هوش

۵ خبر، ۲ ابزار، ۱ پرامپت در هر شماره. به‌زودی راه‌اندازی می‌شود — هر پنج‌شنبه صبح.

خبر کلیدی
ابزار کاربردی
پرامپت حرفه‌ای
تحلیل پژوهش
به‌زودی
زاویه‌ی ایرانی
به‌زودی
تمرین این هفته
به‌زودی

راهنماهای دات‌هوش

راهنماهای کاربردیِ دات‌هوش برای کار با هوش مصنوعی — از همین‌جا شروع کنید:

دات‌هوش

راهنمای فارسی هوش مصنوعی — با نگاه به ایران

اخبار روزانه، معرفی ابزارها و مدل‌ها، و آموزشِ کار با هوش مصنوعی؛ همیشه با این پرسش که از ایران چه چیزی کار می‌کند و چه چیزی نه.