.NET 10 革新:dnx + nuget 开启 MCP 服务分发新纪元
.NET 10 dnx 登场,开启 .NET 的 "npx/uvx" 时代
悄悄告诉你🤫,双击屏幕,解锁微信隐藏功能!
紧接上篇,.NET 10 预览版带来了另一项重大更新:NuGet.org 现在支持托管和消费使用 ModelContextProtocol (MCP) C# SDK 构建的 MCP 服务器。这使得 NuGet 从一个主要用于库包管理的平台转变为一个可发现、版本化且易于安装的 MCP 服务分发平台。
其次,.NET 10 预览版引入了 dnx 工具执行脚本。dnx 与 C# MCP 服务的结合,实现了类似 Python uvx 和 Node.js npx 在本地快速启动服务的强大能力。这意味着 C# 开发者也能像 Python 和 Node.js 开发者一样,直接在本地快速启动 AI 服务进行开发和测试,预示着 .NET 10 在 AI 开发领域将大有不同。
MCP + NuGet:AI 服务即包
官方支持:.NET 10 SDK 提供模板 (
dotnet new install Microsoft.Extensions.AI.Templates) 和 SDK (ModelContextProtocol),简化 C# MCP 服务器开发。打包为 .NET Tool:通过在项目文件 (.csproj) 中设置
<PackAsTool>true</PackAsTool>和<ToolCommandName>,MCP 服务器可打包为标准的 .NET 工具 NuGet 包。NuGet.org 发现与集成:NuGet.org 新增对
mcpserver包类型的支持,允许开发者搜索、发现 MCP 服务器。包页面生成 MCP Server 配置说明。声明式配置 (server.json):包内的
.mcp/server.json清单文件声明服务器元数据、所需环境变量等,使客户端(如 VS Code)能在首次使用时自动提示用户配置,实现无缝设置。
开发与部署 MCP 服务实战
项目初始化与开发
安装模板:
dotnet new install Microsoft.Extensions.AI.Templates
dotnet new install Microsoft.Extensions.AI.Templates`
这个命令会安装包含 mcpserver 模板的包:
Success: Microsoft.Extensions.AI.Templates::9.7.2-preview.3.25366.2 installed the following templates:
Template Name Short Name Language Tags
---------------------------- ---------- -------- --------------------------------
AI Chat Web App aichatweb [C#] Common/AI/Web/Blazor/.NET Aspire
Local MCP Server Console App mcpserver [C#] Common/AI/MCP
创建项目:
dotnet new mcpserver -n SampleMcpServer理解结构:项目包含
Program.cs(入口点,配置 MCP 服务器、传输协议和工具)、示例工具类(如RandomNumberTools.cs)和关键的.mcp/server.json配置文件。
生成的项目包含几个关键文件:
Program.cs:这是应用程序的入口点。您会看到一个流畅的配置链,用于设置 MCP 服务器:
AddMcpServer():注册 MCP 服务器所需的服务。
WithStdioServerTransport():配置服务器使用标准输入/输出(stdio)进行通信,这是本地工具的理想选择。
WithTools():添加工具 。
Tools/RandomNumberTools.cs:这是一个示例工具类,用于演示核心属性的用法:
McpServerToolType:标记一个类是 MCP 工具的容器。McpServerTool:将一个公共静态方法暴露为 MCP 工具。Description:为工具及其参数提供自然语言描述,这是引导 LLM 如何正确调用该工具的关键 。
.mcp/server.json :声明服务元数据、所需环境变量等
实现自定义工具:在
Tools目录下创建工具类(WeatherTools.cs),使用[McpServerToolType]和[McpServerTool]属性标记,并提供清晰的[Description]指导 LLM。
using System.ComponentModel;
using ModelContextProtocol.Server;
namespaceSampleMcpServer.Tools;
[McpServerToolType]
publicclassWeatherTools
{
[McpServerTool]
[Description("Describes random weather in the provided city.")]
public string GetCityWeather(
[Description("Name of the city to return weather for")] string city)
{
// Read the environment variable during tool execution.
// Alternatively, this could be read during startup and passed via IOptions dependency injection
var weather = Environment.GetEnvironmentVariable("WEATHER_CHOICES");
if (string.IsNullOrWhiteSpace(weather))
{
weather = "balmy,rainy,stormy";
}
var weatherChoices = weather.Split(",");
var selectedWeatherIndex = Random.Shared.Next(0, weatherChoices.Length);
return$"The weather in {city} is {weatherChoices[selectedWeatherIndex]}.";
}
}
这个工具演示了:
接受来自 LLM 的参数(string city)。
在参数上使用
Description属性来指导 LLM。访问环境变量等配置,以提供动态行为 。
注册工具: 最后,别忘了在 Program.cs 中注册这个新工具类:
// Add the MCP services: the transport to use (stdio) and the tools to register.
builder.Services
.AddMcpServer()
.WithStdioServerTransport()
.WithTools<RandomNumberTools>()
.WithTools<WeatherTools>();
await builder.Build().RunAsync();
本地测试 (VS Code) : 在项目目录下创建
.vscode/mcp.json,然后用vs code 打开,再打开github copilot输入问题即可测试:生成一个随机数。
北京今天天气如何?
{
"servers": {
"SampleMcpServer": {
"type": "stdio",
"command": "dotnet",
"args": [
"run",
"--project",
"."
],
"env": {
"WEATHER_CHOICES": "sunny,humid,freezing,perfect"
}
}
}
}
打包与发布
项目配置:确保
.csproj文件包含:<PackAsTool>true</PackAsTool> <PackageType>McpServer</PackageType> <PackageId>sheng-jie.SampleMcpServer</PackageId> <PackageVersion>0.2.0</PackageVersion>更新 server.json:确保
name和version与包信息匹配,并补充描述、环境变量要求、仓库链接等。 然后修改.mcp/server.json将上面的PackageId 和PackageVersion 更新到对应的name和version中,并补充其他说明:
{
"description": "一个带有天气和随机数工具的示例MCP服务器",
"name": "io.github.sheng-jie/SampleMcpServer",
"packages": [
{
"registry_name": "nuget",
"name": "sheng-jie.SampleMcpServer",
"version": "0.2.0",
"package_arguments": [],
"environment_variables": [
{
"name": "WEATHER_CHOICES",
"description": "以逗号分隔的天气描述列表",
"is_required": true,
"is_secret": false
}
]
}
],
"repository": {
"url": "https://github.com/sheng-jie/SampleMcpServer",
"source": "github"
},
"version_detail": {
"version": "0.2.0"
}
}
打包:执行
dotnet pack -c Release。发布:将生成的
.nupkg文件上传到 NuGet.org。
使用 dnx 运行与集成验证
本地执行验证:
dnx sheng-jie.SampleMcpServer@0.2.0 --yes集成到 AI 平台 (如 Cherry Studio) :在平台中添加
stdio传输协议的 MCP Server,指向dnx命令或包名。成功调用工具验证集成。


展望:.NET 在 AI 服务领域的新篇章
结合对 NuGet 上 MCP 服务的支持和 dnx 的敏捷执行能力,.NET 不仅能够消费 AI 库,更能以标准化、可发现且易于消费的方式分发和运行可执行的 AI 服务。这种能力是 .NET 深入参与现代 AI 应用开发的关键一步。
可以预见,NuGet 上将涌现一个蓬勃发展的 .NET AI 服务包新生态。这一系列创新,将进一步巩固 .NET 作为构建复杂、现代化、AI 集成应用程序的首选平台的地位。
现在正是 .NET 开发者拥抱 AI 的最佳时机!
❝示例项目: https://github.com/sheng-jie/SampleMcpServer
官方指南: https://devblogs.microsoft.com/dotnet/mcp-server-dotnet-nuget-quickstart/
更多推荐



所有评论(0)