用 .NET 构建你的第一个 MCP 服务器并发布到 NuGet

用 .NET 构建你的第一个 MCP 服务器并发布到 NuGet

引言

随着人工智能技术的快速发展,AI 助手在各行各业的应用越来越广泛。然而,AI 模型本身往往缺乏与外部系统和数据源直接交互的能力。Model Context Protocol (MCP) 正是为解决这一问题而生的开放标准,它作为连接 AI 模型与现实世界的桥梁,使 AI 助手能够安全地访问数据库、API、文件系统和自定义业务逻辑。

借助 .NET 10 和全新的 MCP 模板,开发者现在可以轻松构建强大的 MCP 服务器来扩展 AI 能力,并通过 NuGet 发布这些工具,让整个 .NET 社区都能发现和使用。本文将详细介绍如何使用 .NET 10 构建你的第一个 MCP 服务器,并将其发布到 NuGet 平台。

正文内容

1. 准备工作与环境配置

1.1 先决条件

在开始构建 MCP 服务器之前,请确保你的开发环境满足以下要求:

  • .NET 10.0 SDK(预览版 6 或更高版本)
  • Visual Studio Code
  • GitHub Copilot 扩展
  • NuGet.org 账号

1.2 安装 MCP 模板

第一步是安装 MCP Server 项目模板。打开终端或命令行工具,执行以下命令:

dotnet new install Microsoft.Extensions.AI.Templates

请确保安装的是 9.7.0-preview.2.25356.2 或更新版本。这个模板包含了构建 MCP 服务器所需的基本结构和配置。

2. 创建 MCP 服务器项目

2.1 初始化项目

使用以下命令创建一个新的 MCP 服务器项目:

dotnet new mcpserver -n SampleMcpServer
cd SampleMcpServer
dotnet build

这个命令会生成一个包含基本功能的工作 MCP 服务器,其中已经包含了一个示例的 get_random_number 工具。

2.2 添加自定义工具

为了让我们的 MCP 服务器更有实用价值,让我们添加一个天气查询工具。在项目的 Tools 目录下创建一个新的 WeatherTools.cs 文件,并添加以下代码:

[McpServerTool]
[Description("Describes random weather in the provided city.")]
public string GetCityWeather(
    [Description("Name of the city to return weather for")] string city)
{
    // 从环境变量读取天气选项
    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]}.";
}

然后更新 Program.cs 文件,在现有的 WithTools 调用后添加 .WithTools<WeatherTools>()

这个工具演示了如何:

  • 接受来自 AI 助手的参数
  • 使用环境变量进行配置
  • 返回有意义的响应

3. 测试 MCP 服务器

3.1 配置 GitHub Copilot

为了测试我们的 MCP 服务器,需要配置 GitHub Copilot 来使用它。在项目根目录下创建 .vscode/mcp.json 文件,内容如下:

{
  "servers": {
    "SampleMcpServer": {
      "type": "stdio",
      "command": "dotnet",
      "args": [
        "run",
        "--project",
        "."
      ],
      "env": {
        "WEATHER_CHOICES": "sunny,humid,freezing,perfect"
      }
    }
  }
}

3.2 进行测试

配置完成后,可以在 GitHub Copilot 中使用以下提示进行测试:

  • "What's the weather in Seattle?"
  • "Give me a random number between 1 and 100"
    image

4. 准备 NuGet 发布

4.1 配置服务器元数据

在发布到 NuGet 之前,需要更新 .mcp/server.json 文件来声明输入和元数据:

{
  "description": "A sample MCP server with weather and random number tools",
  "name": "io.github.yourusername/SampleMcpServer", 
  "packages": [
    {
      "registry_name": "nuget",
      "name": "YourUsername.SampleMcpServer",
      "version": "1.0.0",
      "package_arguments": [],
      "environment_variables": [
        {
          "name": "WEATHER_CHOICES",
          "description": "Comma separated list of weather descriptions",
          "is_required": true,
          "is_secret": false
        }
      ]
    }
  ],
  "repository": {
    "url": "https://github.com/yourusername/SampleMcpServer",
    "source": "github"
  },
  "version_detail": {
    "version": "1.0.0"
  }
}

4.2 更新项目文件

确保在 .csproj 文件中设置了唯一的 <PackageId>

<PackageId>YourUsername.SampleMcpServer</PackageId>

5. 发布到 NuGet

5.1 打包项目

使用以下命令打包项目:

dotnet pack -c Release

5.2 发布到 NuGet

发布打包好的项目到 NuGet:

dotnet nuget push bin/Release/*.nupkg --api-key <your-api-key> --source https://api.nuget.org/v3/index.json

提示:在发布到生产环境前,可以先使用 NuGet 测试环境 int.nugettest.org 进行测试。

6. 发现和使用 MCP 服务器

一旦发布成功,你的 MCP 服务器将在 NuGet.org 上可被发现。开发者可以通过以下方式使用你的服务器:

  1. 搜索:在 NuGet.org 上使用 MCP Server 包类型过滤器进行搜索
  2. 探索:查看包详情并从"MCP Server"标签复制配置
  3. 安装:将配置添加到 .vscode/mcp.json 文件中

image

生成的配置示例如下:

{
  "inputs": [
    {
      "type": "promptString",
      "id": "weather-choices",
      "description": "Comma separated list of weather descriptions",
      "password": false
    }
  ],
  "servers": {
    "YourUsername.SampleMcpServer": {
      "type": "stdio", 
      "command": "dnx",
      "args": [
        "YourUsername.SampleMcpServer",
        "--version",
        "1.0.0",
        "--yes"
      ],
      "env": {
        "WEATHER_CHOICES": "${input:weather-choices}"
      }
    }
  }
}

VS Code 会在首次使用 MCP 服务器时提示输入值,使配置过程对用户更加友好。

结论

通过本文的指导,你已经学会了如何使用 .NET 10 构建一个功能完整的 MCP 服务器,并将其发布到 NuGet 平台。这一过程不仅展示了 .NET 生态系统对 AI 扩展性的强大支持,也体现了 NuGet 作为 .NET 包管理器的灵活性和可扩展性。

随着 .NET 10 和 NuGet 对 MCP 的官方支持,你现在已经成为这个不断发展的生态系统的一部分,正在参与改变 AI 助手与世界互动方式的革命。.NET 强大的库与 NuGet 的包管理相结合,为 AI 扩展性创造了无限可能。

posted @ 2025-11-24 10:32  葡萄城技术团队  阅读(174)  评论(0)    收藏  举报