项目简介
本仓库提供了一个基于.NET的MCP服务器的实验性示例,旨在帮助开发者理解和实践MCP协议。它包含两个主要的服务器实现:
- Stdio服务器 (MyMCPServer.Stdio): 通过标准输入输出流 (Stdio) 与MCP客户端通信,提供获取当前时间的工具。
- SSE服务器 (MyMCPServer.Sse): 通过服务器发送事件 (SSE) 协议与MCP客户端通信,提供获取地点氛围的工具。
同时,仓库还包含一个简单的 MCP客户端 (MyMCPClient),用于演示如何连接和使用这两个服务器提供的工具。
请注意: 这是一个实验性项目,用于学习和演示MCP服务器的基本概念,可能不适用于生产环境。
主要功能点
- 资源 (Resources): 虽然示例中没有显式管理资源,但MCP服务器的框架已搭建,可以扩展以支持资源管理。
- 工具 (Tools):
- Stdio服务器: 提供 'GetCurrentTime(city)' 工具,允许LLM获取指定城市的当前时间。
- SSE服务器: 提供 'GetVibe(location)' 工具,允许LLM获取指定地点的氛围描述(示例中为固定文本)。
- Prompt 模板 (Prompts): 示例中没有涉及 Prompt 模板,但MCP服务器具备支持 Prompt 模板的能力,可以根据需要进行扩展。
- 多种传输协议: 演示了 Stdio 和 SSE 两种传输协议的MCP服务器实现。
- 工具注册和发现: 服务器自动注册程序集中的工具,客户端可以发现并调用这些工具。
安装步骤
- 安装 .NET SDK: 确保你的开发环境已安装 .NET SDK (>= .NET 7,推荐 .NET 9,根据仓库 'net9.0' 目录判断)。可以从 https://dotnet.microsoft.com/download 下载安装。
- 克隆仓库: 将 GitHub 仓库 'https://github.com/halllo/McpExperiments' 克隆到本地。
- 构建项目: 使用命令行工具 (如 'cmd' 或 'PowerShell') 进入仓库根目录,分别构建 Stdio 和 SSE 服务器项目:
cd MyMCPServer.Stdio dotnet build cd ..\MyMCPServer.Sse dotnet build cd ..\MyMCPClient dotnet build cd .. - (可选) 运行 LM Studio: 客户端代码 'MyMCPClient' 默认配置连接到 LM Studio 的 OpenAI 兼容接口 ('http://127.0.0.1:1234/v1')。如果你想运行客户端示例,需要先安装并启动 LM Studio 或其他 OpenAI 兼容的服务端,并确保模型 'gemma-3-27b-it' 可用(客户端代码中指定)。当然,你也可以修改客户端代码连接到其他LLM服务。
服务器配置
以下是 MCP 客户端 (如 Claude Desktop) 配置连接本示例 MCP 服务器的 JSON 格式配置信息。你需要根据实际情况修改 'command' 和 'args' 字段中的路径。
1. Stdio 服务器 (getTime):
{ "mcpServers": { "getTime": { "command": "D:\\McpExperiments\\MyMCPServer.Stdio\\bin\\Debug\\net9.0\\MyMCPServer.Stdio.exe" // command: Stdio 服务器可执行文件的绝对路径。 // 注意:请根据你的实际仓库路径和构建配置 (Debug/Release, net版本) 修改路径。 } } }
2. SSE 服务器 (getVibe):
{ "mcpServers": { "getVibe": { "command": "dotnet", // command: 运行 .NET 应用程序的命令,通常为 "dotnet"。 "args": [ "run", // args: 传递给 "dotnet run" 命令的参数,用于指定要运行的 .NET 项目。 // "run" 命令指示运行项目。 // 项目路径参数被省略,因为 "dotnet run" 会在当前目录查找项目文件,假设 Claude Desktop 的工作目录设置正确。 // 如果需要显式指定项目路径,可以添加类似 "MyMCPServer.Sse.csproj" 的参数。 ] } } }
或者,如果使用 'mcp-remote' (如 README.md 中 Claude Desktop 配置示例):
{ "mcpServers": { "getVibe": { "command": "npx", // command: Node.js 包执行器,用于运行 npm 包,需要预先安装 Node.js 和 npm。 "args": [ "[email protected]", // args: 传递给 "npx" 命令的参数。 // "[email protected]": 指定要运行的 npm 包和版本,这是一个第三方的 MCP 远程客户端工具,可以将 HTTP SSE 服务转换为 MCP 服务器。 "http://localhost:5253/sse" // SSE 服务器的 URL 地址,mcp-remote 将连接到这个地址。 ] } } }
重要提示:
- 路径修改: 请务必根据你的实际仓库位置和构建输出目录,修改 'command' 和 'args' 中的路径。
- 端口: SSE 服务器默认监听 'http://localhost:5253' 端口,如果需要更改,请修改 'MyMCPServer.Sse/Program.cs' 中的配置。
- Claude Desktop 配置: 将上述 JSON 配置添加到 Claude Desktop 的 'claude_desktop_config.json' 文件中,即可在 Claude 中使用示例 MCP 服务器提供的工具。 请参考仓库 README.md 中关于 Claude Desktop 的说明。
基本使用方法
-
运行服务器:
- Stdio 服务器: 在 'MyMCPServer.Stdio' 目录下,运行构建生成的 'MyMCPServer.Stdio.exe' 文件。 通常在 'MyMCPServer.Stdio\bin\Debug\net9.0' 目录下。
- SSE 服务器: 在 'MyMCPServer.Sse' 目录下,运行命令 'dotnet run'。 这将启动 Kestrel Web 服务器并运行 SSE MCP 服务器。
-
运行客户端:
- 进入 'MyMCPClient' 目录,运行命令 'dotnet run'。
- 客户端程序会连接到 Stdio 和 SSE 服务器,列出可用的 MCP 工具,并向配置的 OpenAI 兼容 LLM 服务 (默认 LM Studio) 发送包含工具调用的聊天请求。
- 观察控制台输出,查看工具是否被成功调用,以及 LLM 的响应。
-
Claude Desktop 集成 (可选):
- 按照 "服务器配置" 章节的说明,配置 'claude_desktop_config.json' 文件。
- 启动 Claude Desktop,在对话中使用自然语言指令,Claude 应该能够识别并调用 MCP 服务器提供的工具 (例如,询问 "What is the current time in London?" 或 "What's the vibe in Paris?")。
信息
分类
开发者工具