项目简介

这是一个使用 C# 和 .NET 开发的 Model Context Protocol (MCP) 演示项目。它包含一个示例 MCP 服务器,可以将外部 Web API(此处为一个模拟天气查询 API)转换为符合 MCP 规范的工具(Tool),供 LLM 客户端调用。项目同时包含一个示例 MCP 客户端,展示了如何连接服务器、发现工具,并将这些工具与 LLM 结合使用。

主要功能点

  • MCP 服务器实现: 提供了基于 Stdio 和 SSE/HTTP 传输协议的 MCP 服务器示例。
  • 工具注册与发现: 能够导入外部 OpenAPI/Swagger 定义的 API,并将其自动注册为 MCP 工具。
  • LLM 工具调用: 示例客户端展示了如何通过 MCP 协议获取工具列表,并将这些工具提供给大型语言模型(LLM),使 LLM 能够根据用户请求自动调用相应的外部功能。
  • 示例 API 服务: 包含一个简单的 ASP.NET Core Web API (WeatherApi),作为 MCP 服务器暴露工具的来源。

安装步骤

  1. 环境准备: 确保已安装 .NET 9.0 SDK 或更高版本。
  2. 克隆仓库:
    git clone https://github.com/softlgl/McpDemo.git
    cd McpDemo
  3. 还原依赖:
    dotnet restore
  4. 构建项目:
    dotnet build

服务器配置

MCP 客户端需要知道如何连接 MCP 服务器并与之通信。这通常通过一个配置文件(例如 JSON 格式)指定。根据此仓库提供的示例,客户端连接 MCP 服务器的关键配置信息如下:

  • 服务器标识名称 (name): 用于唯一标识 MCP 服务器的名称,例如 'city_date_weather'。
  • 传输协议 (transport): 指定客户端与服务器通信的方式。可能的值为 'stdio' 或 'sse' (HTTP)。
  • Stdio 配置 (stdio): 如果 'transport' 为 'stdio',需要指定服务器可执行文件的路径 ('command')。例如,对于 'McpServerDemo','command' 可能指向 'src/McpServerDemo/bin/Debug/net9.0/McpServerDemo.exe' (具体路径取决于你的构建输出和运行时环境)。通常不需要额外的启动参数 ('args')。
  • SSE 配置 (sse): 如果 'transport' 为 'sse',需要指定服务器的 HTTP/SSE 端点 URL ('endpoint')。例如,对于 'McpServerSseDemo','endpoint' 为 'http://localhost:3001'。

客户端在启动时会读取这些配置信息,并尝试与指定的 MCP 服务器建立连接。

基本使用方法

按照以下顺序启动项目:

  1. 启动 WeatherApi:
    dotnet run --project src/WeatherApi
    (这将启动示例天气 API 服务,通常在 'http://localhost:5021' 运行,并暴露 Swagger 定义。)
  2. 启动 MCP 服务器: 选择其中一种传输方式启动对应的服务器项目。
    • Stdio 方式 (McpServerDemo):
      dotnet run --project src/McpServerDemo
      (这个服务器将作为客户端的子进程启动,你可能看不到独立的窗口。)
    • SSE 方式 (McpServerSseDemo):
      dotnet run --project src/McpServerSseDemo
      (这个服务器将作为一个独立的 Web 服务运行,通常监听 'http://localhost:3001'。) 注意: 客户端 ('McpClientDemo') 默认配置为连接 SSE 服务器 'http://localhost:3001'。如果你想测试 Stdio 服务器,需要修改 'src/McpClientDemo/Program.cs' 中的客户端创建代码,取消注释 Stdio 部分并注释掉 SSE 部分。
  3. 启动 MCP 客户端 (McpClientDemo):
    dotnet run --project src/McpClientDemo
    (客户端启动后,会连接到 MCP 服务器,列出发现的工具,然后进入一个交互循环。你需要为客户端配置一个有效的 OpenAI 或兼容 API 的 Key 来使用 LLM 能力。)

在客户端的交互循环中,你可以输入问题,LLM 可能会识别出需要调用 MCP 服务器提供的工具(例如,询问天气),然后通过 MCP 协议向服务器发送请求,获取结果,并将结果整合到回复中。

关键词

.NET, LLM 工具, API 扩展, 上下文协议

信息

分类

AI与计算