项目简介
此 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 服务器示例,您需要具备相应的环境:
- 克隆仓库: 首先克隆整个 'ml-reference-designs' 仓库到您的本地机器。
git clone https://github.com/ccozad/ml-reference-designs.git cd ml-reference-designs - Python 环境 (针对 Python 天气服务器):
- 确保您已安装 Python 3.8 或更高版本。
- 建议创建并激活一个 Python 虚拟环境。
- 进入 'mcp/weather-server-py' 目录。
- 安装所需的依赖库(通常在 'requirements.txt' 文件中指定,或根据代码中的导入手动安装,如 'httpx', 'mcp' 库)。
- .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 客户端示例。
基本交互流程:
- 启动客户端: 运行 MCP 客户端程序,并为其提供上述相应的服务器启动命令和参数。
- 客户端连接并初始化: 客户端根据配置启动服务器,并通过 Stdio 建立连接。然后发送 'initialize' 请求,服务器响应其能力(包括工具列表)。
- 客户端发现工具: 客户端可以发送 'list_tools' 请求获取服务器当前可用的工具清单。
- 客户端调用工具: 根据用户或 LLM 的指令,客户端构造 'call_tool' 请求,指定要调用的工具名称和符合其输入模式的参数。
- 服务器执行工具: 服务器接收 'call_tool' 请求,执行相应的工具代码(例如,调用天气 API 或查询数据库)。
- 服务器返回结果: 工具执行完成后,服务器将结果(通常是文本、图像或嵌入式资源)通过 MCP 响应返回给客户端。客户端(或与之集成的 LLM)可以使用这些结果继续进行交互或生成最终回复。
例如,使用仓库中的 Python 客户端连接到 Python 天气服务器:
# 在仓库根目录执行 python mcp/client-py/client.py mcp/weather-server-py/src/weather/server.py
客户端启动后,您可以输入查询,客户端会尝试调用天气服务器的工具来获取信息。类似地,配置客户端指向 .NET 服务器的启动命令即可与其交互。
信息
分类
AI与计算