项目简介

本仓库提供了一个基于.NET的MCP服务器的实验性示例,旨在帮助开发者理解和实践MCP协议。它包含两个主要的服务器实现:

  1. Stdio服务器 (MyMCPServer.Stdio): 通过标准输入输出流 (Stdio) 与MCP客户端通信,提供获取当前时间的工具。
  2. 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服务器实现。
  • 工具注册和发现: 服务器自动注册程序集中的工具,客户端可以发现并调用这些工具。

安装步骤

  1. 安装 .NET SDK: 确保你的开发环境已安装 .NET SDK (>= .NET 7,推荐 .NET 9,根据仓库 'net9.0' 目录判断)。可以从 https://dotnet.microsoft.com/download 下载安装。
  2. 克隆仓库: 将 GitHub 仓库 'https://github.com/halllo/McpExperiments' 克隆到本地。
  3. 构建项目: 使用命令行工具 (如 'cmd' 或 'PowerShell') 进入仓库根目录,分别构建 Stdio 和 SSE 服务器项目:
    cd MyMCPServer.Stdio
    dotnet build
    cd ..\MyMCPServer.Sse
    dotnet build
    cd ..\MyMCPClient
    dotnet build
    cd ..
  4. (可选) 运行 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 的说明。

基本使用方法

  1. 运行服务器:

    • Stdio 服务器: 在 'MyMCPServer.Stdio' 目录下,运行构建生成的 'MyMCPServer.Stdio.exe' 文件。 通常在 'MyMCPServer.Stdio\bin\Debug\net9.0' 目录下。
    • SSE 服务器: 在 'MyMCPServer.Sse' 目录下,运行命令 'dotnet run'。 这将启动 Kestrel Web 服务器并运行 SSE MCP 服务器。
  2. 运行客户端:

    • 进入 'MyMCPClient' 目录,运行命令 'dotnet run'。
    • 客户端程序会连接到 Stdio 和 SSE 服务器,列出可用的 MCP 工具,并向配置的 OpenAI 兼容 LLM 服务 (默认 LM Studio) 发送包含工具调用的聊天请求。
    • 观察控制台输出,查看工具是否被成功调用,以及 LLM 的响应。
  3. Claude Desktop 集成 (可选):

    • 按照 "服务器配置" 章节的说明,配置 'claude_desktop_config.json' 文件。
    • 启动 Claude Desktop,在对话中使用自然语言指令,Claude 应该能够识别并调用 MCP 服务器提供的工具 (例如,询问 "What is the current time in London?" 或 "What's the vibe in Paris?")。

信息

分类

开发者工具