项目简介

此 GitHub 仓库是机器学习相关参考设计和示例代码的集合。其中,'mcp/dotnet' 和 'mcp/weather-server-py' 子目录包含了 Model Context Protocol (MCP) 服务器的实际实现示例。这些示例旨在展示如何构建符合 MCP 标准的应用后端,为大型语言模型 (LLM) 客户端提供结构化的上下文信息和外部功能访问。

主要功能点

这些 MCP 服务器示例主要展示了以下核心功能:

  • 工具注册与调用: 服务器定义并向 LLM 客户端(通过 MCP 协议)声明其可用的工具(Tools)。客户端可以请求服务器执行特定工具,服务器接收请求、运行对应的工具逻辑,并将结果返回给客户端。例如,.NET 服务器提供了 Echo 和查询猴子信息的工具,Python 天气服务器提供了查询天气预报和警报的工具。
  • 上下文信息提供: 虽然示例中没有复杂的资源管理,但 MCP 协议的核心能力之一就是以标准方式提供结构化数据作为 LLM 的上下文。这些工具就是提供特定类型数据的示例(如天气数据、猴子信息)。
  • 标准化通信: 服务器通过实现 MCP 的 JSON-RPC 协议与客户端通信,处理如 'initialize'、'list_tools'、'call_tool' 等标准请求。
  • 传输协议支持: 示例中使用了标准输入输出 (Stdio) 作为传输协议,这是 MCP 支持的一种简单易用的通信方式。

这些示例代码功能完整且可运行,是学习和构建 MCP 服务器的有效参考。

安装步骤

要运行这些 MCP 服务器示例,您需要具备相应的环境:

  1. 克隆仓库: 首先克隆整个 'ml-reference-designs' 仓库到您的本地机器。
    git clone https://github.com/ccozad/ml-reference-designs.git
    cd ml-reference-designs
  2. Python 环境 (针对 Python 天气服务器):
    • 确保您已安装 Python 3.8 或更高版本。
    • 建议创建并激活一个 Python 虚拟环境。
    • 进入 'mcp/weather-server-py' 目录。
    • 安装所需的依赖库(通常在 'requirements.txt' 文件中指定,或根据代码中的导入手动安装,如 'httpx', 'mcp' 库)。
  3. .NET 环境 (针对 .NET 示例服务器):
    • 确保您已安装 .NET SDK(例如 .NET 6 或更高版本)。
    • 进入 'mcp/dotnet/MyFirstMCP' 目录。
    • 构建项目:'dotnet build'

请参考仓库中对应目录下的具体说明文件(如 README)获取更详细的安装和设置步骤。

服务器配置

MCP 服务器是为 MCP 客户端提供服务的。一个 MCP 客户端需要知道如何启动并连接到服务器。通常,这通过配置服务器的启动命令 ('command') 和参数 ('args') 来实现。以下是仓库中两个示例服务器用于客户端连接的配置示例:

  • Python天气服务器 ('mcp/weather-server-py'): 此服务器通过运行Python脚本启动。 命令 ('command'): 'python3' 参数 ('args'): '["<仓库根目录>/mcp/weather-server-py/src/weather/server.py"]' (注意替换 '<仓库根目录>' 为您的仓库在本地文件系统中的实际路径)

  • .NET示例服务器 ('mcp/dotnet'): 此服务器是一个.NET应用程序。在 'mcp/dotnet/MyFirstMCP' 目录构建成功后,可以通过 'dotnet run' 命令启动。 命令 ('command'): 'dotnet' 参数 ('args'): '["run", "--project", "<仓库根目录>/mcp/dotnet/MyFirstMCP"]' (注意替换 '<仓库根目录>' 为您的仓库在本地文件系统中的实际路径,并且确保已安装 .NET SDK)

MCP客户端通过运行这些命令来启动服务器,然后通过标准输入输出来建立 MCP 协议连接。服务器会在初始化阶段向客户端声明其名称、版本和提供的所有工具及其详细信息(包括输入参数的 JSON Schema)。

基本使用方法

MCP 服务器是作为 LLM 客户端的后端运行的。您需要一个 MCP 客户端来与之交互。仓库的 'mcp/client-py' 目录提供了一个 Python 客户端示例。

基本交互流程:

  1. 启动客户端: 运行 MCP 客户端程序,并为其提供上述相应的服务器启动命令和参数。
  2. 客户端连接并初始化: 客户端根据配置启动服务器,并通过 Stdio 建立连接。然后发送 'initialize' 请求,服务器响应其能力(包括工具列表)。
  3. 客户端发现工具: 客户端可以发送 'list_tools' 请求获取服务器当前可用的工具清单。
  4. 客户端调用工具: 根据用户或 LLM 的指令,客户端构造 'call_tool' 请求,指定要调用的工具名称和符合其输入模式的参数。
  5. 服务器执行工具: 服务器接收 'call_tool' 请求,执行相应的工具代码(例如,调用天气 API 或查询数据库)。
  6. 服务器返回结果: 工具执行完成后,服务器将结果(通常是文本、图像或嵌入式资源)通过 MCP 响应返回给客户端。客户端(或与之集成的 LLM)可以使用这些结果继续进行交互或生成最终回复。

例如,使用仓库中的 Python 客户端连接到 Python 天气服务器:

# 在仓库根目录执行
python mcp/client-py/client.py mcp/weather-server-py/src/weather/server.py

客户端启动后,您可以输入查询,客户端会尝试调用天气服务器的工具来获取信息。类似地,配置客户端指向 .NET 服务器的启动命令即可与其交互。

信息

分类

AI与计算