تبدیل ابزارهای خط فرمان داتنت به سرور محلی MCP برای استفاده با GitHub Copilot در VS Code
نویسنده: وحید نصیری
تاریخ: ۱۴۰۴/۰۲/۱۸ ۰۷:۵۵
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
dotnet add package ModelContextProtocol --version 0.1.0-preview.12 dotnet add package Microsoft.Extensions.Hosting
ModelContextProtocol شامل مؤلفههای لازم برای ساخت سرور MCP است و بسته Microsoft.Extensions.Hosting برای مدیریت چرخه عمر برنامه و ارائه سرویسهای مورد نیاز به کار میرود.ModelContextProtocol تزئین شوند.using System.ComponentModel;
using System.Text;
using ModelContextProtocol.Server;
namespace SqlAnalyzerCli.Services;
[McpServerToolType]
public sealed class AnalyzerTools
{
[McpServerTool]
[Description("یافتن مشکلات طراحی و الگوهای نامناسب در یک اسکریپت CREATE زبان SQL Server")]
public static async Task<string> FindSqlScriptProblems(
[Description("اسکریپت CREATE زبان SQL Server برای یافتن مشکلات طراحی و الگوهای نامناسب در آن.")] string sqlScript)
{
var factory = new ErikEJ.DacFX.TSQLAnalyzer.AnalyzerFactory(new() { Script = sqlScript });
var result = factory.Analyze();
var output = new StringBuilder();
// TODO: بررسی اعتبار اسکریپت CREATE
if (result.Result == null || result.Result.Problems.Count == 0)
{
return "هیچ مشکلی یافت نشد.";
}
foreach (var problem in result.Result.Problems)
{
output.AppendLine(problem.Description);
}
return output.ToString();
}
}AnalyzerTools با ویژگی [McpServerToolType] مشخص شده است که نشان میدهد این کلاس شامل ابزارهای قابل استفاده توسط سرور MCP است. متد FindSqlScriptProblems با ویژگی [McpServerTool] علامتگذاری شده و توضیحی برای آن با استفاده از ویژگی [Description] ارائه شده است. این توضیحات توسط GitHub Copilot برای درک عملکرد این ابزار استفاده میشود. پارامتر sqlScript نیز دارای یک ویژگی [Description] است که هدف آن را برای Copilot روشن میسازد.Program.cs خود اضافه کنید تا سرور MCP را راهاندازی کرده و آن را به کلاس ابزار ایجاد شده متصل کنید. توجه داشته باشید که ثبت رویدادهای خطا (Error Logging) به گونهای پیکربندی شده است که با تعامل Copilot تداخل پیدا نکند. هنگامی که ابزار خط فرمان با سوییچ -mcp اجرا شود، سرور MCP شروع به کار کرده و منتظر دستورات از طرف کلاینت MCP میماند.using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;
using SqlAnalyzerCli.Services;
using ModelContextProtocol.Server;
if (args.Length == 1 && args[0] == "-mcp")
{
var builder = Host.CreateApplicationBuilder(args);
builder.Services.AddMcpServer()
.WithStdioServerTransport()
.WithTools<AnalyzerTools>();
builder.Logging.AddConsole(options =>
{
options.LogToStandardErrorThreshold = LogLevel.Trace;
});
await builder.Build().RunAsync();
return 0;
}-mcp هنگام اجرای برنامه ارائه شده است یا خیر. در صورت وجود این آرگومان، یک HostBuilder ایجاد میشود. سپس، سرویس MCP با استفاده از متد AddMcpServer() اضافه شده و نحوه انتقال دادهها از طریق ورودی/خروجی استاندارد (Standard Input/Output - Stdio) با استفاده از WithStdioServerTransport() پیکربندی میشود. AnalyzerTools به عنوان منبع ابزارهای MCP با استفاده از WithTools<AnalyzerTools>() ثبت میشود. پیکربندی لاگینگ نیز به گونهای انجام شده است که فقط لاگهای با سطح Trace و بالاتر به خروجی کنسول هدایت شوند، تا از تداخل با ارتباطات MCP جلوگیری شود.dotnet tool install --global ErikEJ.DacFX.TSQLAnalyzer.Cli
vscode:mcp/install?%7B%22name%22%3A%22tsqlanalyzer%22%2C%22command%22%3A%22tsqlanalyze%22%2C%22args%22%3A%5B%22-mcp%22%5D%7D
mcp.json پیکربندی کنند:{
"servers": {
"tsqlanalyzer": {
"type": "stdio",
"command": "tsqlanalyze",
"args": [
"-mcp"
]
}
}
}.sql در ویرایشگر باز دارد و از GitHub Copilot در حالت Agent استفاده میکند، میتواند از Copilot بخواهد تا به او در یافتن الگوهای نامناسب T-SQL در آن فایل کمک کند. Copilot با سرور MCP محلی که توسط ابزار tsqlanalyze اجرا میشود، ارتباط برقرار کرده و نتایج تحلیل را دریافت و به کاربر ارائه میدهد.