.NET MCP 服务器

一个全面的模型上下文协议(MCP)服务器,将.NET CLI命令和Entity Framework操作作为MCP工具公开,使用官方的Microsoft `ModelContextProtocol`库构建。

  • by jamesburton
  • C#
  • 本地部署
  • 更新于
在 GitHub 查看 jamesburton/DotNetMcpServer2

使用说明

.NET MCP服务器2

一个全面的模型上下文协议(MCP)服务器。NET CLI命令和实体框架操作作为MCP工具,使用官方Microsoft构建 ModelContextProtocol 图书馆。

与DotNetMcpServer的主要区别

此版本使用 Microsoft ModelContextProtocol库 代替MCPSharp,提供:

  • 微软官方支持:基于微软官方MCP库构建
  • 主机集成:用途 Microsoft.Extensions.Hosting 用于强健的服务器生命周期管理
  • 自动工具发现:使用以下命令从部件中自动发现工具 WithToolsFromAssembly()
  • 简化属性:用途 [McpServerTool] 和 [Description] 属性而不是自定义MCP属性
  • 更好的日志记录:将日志记录集成到stderr,以避免干扰MCP通信

体系结构比较

DotNetMcpServer(MCPSharp)

[McpTool("dotnet_version", "Gets the installed .NET version")]
public static async Task<string> GetVersionAsync()

// Registration
MCPServer.Register<DotNetCoreCommands>();
await MCPServer.StartAsync("DotNetMcpServer", "1.0.0");

DotNetMcpServer2(模型上下文协议)

[McpServerTool, Description("Gets the installed .NET version")]
public static async Task<string> GetVersionAsync()

// Registration
builder.Services
    .AddMcpServer()
    .WithStdioServerTransport()
    .WithToolsFromAssembly();

特性

核心。NET CLI命令(20多种工具)

  • 项目管理:创建、构建、运行、测试、清理和发布。NET项目
  • 包管理:添加、删除和列出NuGet包
  • 项目引用:管理项目到项目的引用
  • 模板操作:列出并从模板创建项目
  • 信息命令:得到。NET版本、SDK信息和运行时详细信息

实体框架命令(11个工具)

  • 数据库操作:更新、删除和管理数据库
  • 迁移管理:添加、删除、列出和脚本迁移
  • 操作:列出、构建和优化Contoso类
  • 高级功能:创建用于部署的迁移包

解决方案和NuGet管理(12个工具)

  • 解决方案操作:添加/删除项目,列出解决方案内容
  • NuGet发布:从NuGet源推送和删除包
  • 来源管理:添加、删除、更新和列出NuGet源
  • 缓存管理:清除并列出NuGet本地缓存

先决条件

  • .NET 9.0 SDK或更高版本
  • 实体框架CLI工具(用于EF命令): dotnet tool install --global dotnet-ef

安装与使用

  1. 克隆和构建:

    git clone <repository-url>
    cd DotNetMcpServer2
    dotnet build
    
  2. 运行服务器:

    cd DotNetMcpServer2
    dotnet run
    
  3. 运行测试:

    dotnet test
    

Claude桌面配置

将此条目添加到您的Claude Desktop配置中(claude_desktop_config.json):

{
  "mcpServers": {
    "dotnet-mcp-server2": {
      "command": "dotnet",
      "args": [
        "run",
        "--project",
        "C:\\Development\\MCP\\DotNetMcpServer2\\DotNetMcpServer2\\DotNetMcpServer2.csproj"
      ],
      "env": {
        "DOTNET_CLI_TELEMETRY_OPTOUT": "1",
        "DOTNET_NOLOGO": "1"
      }
    }
  }
}

可用的MCP工具

原始DotNetMcpServer中的所有工具都具有相同的功能:

核心命令

  • GetVersionAsync -得到。NET版本
  • GetInfoAsync -显示详细信息。网络信息
  • ListSdksAsync -列出已安装的SDK
  • CreateProjectAsync -从模板创建新项目
  • BuildAsync -构建项目
  • TestAsync -运行测试(包括 --no-build 和 --no-restore 旗帜)
  • PublishAsync -发布项目
  • 还有更多。..

实体框架命令

  • UpdateDatabaseAsync -将数据库更新到最新迁移
  • AddMigrationAsync -添加新的迁移
  • ScaffoldDbContextAsync -来自数据库的脚手架
  • ListMigrationsAsync -列出可用的迁移
  • 还有更多。..

解决方案和NuGet命令

  • ListProjectsAsync -列出解决方案中的项目
  • AddProjectToSolutionAsync -将项目添加到解决方案中
  • NuGetPushAsync -将包推送到NuGet
  • NuGetListSourceAsync -列出NuGet源代码
  • 还有更多。..

ModelContextProtocol库的优点

简化开发

  • 自动发现:无需手动工具注册
  • 标准属性:使用熟悉的 [Description] 属性
  • 类型安全:具有自动参数绑定的强类型

更好的集成

  • 主机型号:与集成。NET托管和依赖注入
  • 日志记录:具有可配置级别的内置日志记录基础设施
  • 配置:标准。NET配置模式

增强可靠性

  • 官方支持:由微软维护
  • 稳健的交通:内置stdio传输,具有错误处理功能
  • 流程管理:适当的生命周期管理和优雅的关机

性能比较

两个版本都提供相同的功能,但DotNetMcpServer2提供:

  • 由于优化了托管,启动时间更长
  • 更高效的工具发现和注册
  • 改进了错误处理和日志记录
  • 更好的资源管理和清理

迁移指南

要从MCPSharp迁移到ModelContextProtocol,请执行以下操作:

  1. 替换包参考:

    <!-- Old -->
    <PackageReference Include="MCPSharp" Version="1.0.10" />
    
    <!-- New -->
    <PackageReference Include="ModelContextProtocol" Version="0.1.0-preview.11" />
    <PackageReference Include="Microsoft.Extensions.Hosting" Version="9.0.4" />
    
  2. 更新属性:

    // Old
    [McpTool("tool_name", "Description")]
    public static Task<string> MethodAsync([McpParameter(true)] string param)
    
    // New
    [McpServerTool, Description("Description")]
    public static Task<string> MethodAsync([Description("Parameter description")] string param)
    
  3. 更新程序cs:

    // Old
    MCPServer.Register<Commands>();
    await MCPServer.StartAsync("ServerName", "1.0.0");
    
    // New
    var builder = Host.CreateApplicationBuilder(args);
    builder.Services.AddMcpServer().WithStdioServerTransport().WithToolsFromAssembly();
    await builder.Build().RunAsync();
    

这一实施提供了同样的全面性。NET CLI功能,采用更现代、更可维护的架构,使用微软官方的MCP库。