项目简介
这是一个使用 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 服务器暴露工具的来源。
安装步骤
- 环境准备: 确保已安装 .NET 9.0 SDK 或更高版本。
- 克隆仓库:
git clone https://github.com/softlgl/McpDemo.git cd McpDemo - 还原依赖:
dotnet restore - 构建项目:
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 服务器建立连接。
基本使用方法
按照以下顺序启动项目:
- 启动 WeatherApi:
(这将启动示例天气 API 服务,通常在 'http://localhost:5021' 运行,并暴露 Swagger 定义。)dotnet run --project src/WeatherApi - 启动 MCP 服务器: 选择其中一种传输方式启动对应的服务器项目。
- Stdio 方式 (McpServerDemo):
(这个服务器将作为客户端的子进程启动,你可能看不到独立的窗口。)dotnet run --project src/McpServerDemo - SSE 方式 (McpServerSseDemo):
(这个服务器将作为一个独立的 Web 服务运行,通常监听 'http://localhost:3001'。) 注意: 客户端 ('McpClientDemo') 默认配置为连接 SSE 服务器 'http://localhost:3001'。如果你想测试 Stdio 服务器,需要修改 'src/McpClientDemo/Program.cs' 中的客户端创建代码,取消注释 Stdio 部分并注释掉 SSE 部分。dotnet run --project src/McpServerSseDemo
- Stdio 方式 (McpServerDemo):
- 启动 MCP 客户端 (McpClientDemo):
(客户端启动后,会连接到 MCP 服务器,列出发现的工具,然后进入一个交互循环。你需要为客户端配置一个有效的 OpenAI 或兼容 API 的 Key 来使用 LLM 能力。)dotnet run --project src/McpClientDemo
在客户端的交互循环中,你可以输入问题,LLM 可能会识别出需要调用 MCP 服务器提供的工具(例如,询问天气),然后通过 MCP 协议向服务器发送请求,获取结果,并将结果整合到回复中。
关键词
.NET, LLM 工具, API 扩展, 上下文协议
信息
分类
AI与计算