本项目包含一个使用 Spring AI 构建的 MCP 服务器模块 ('mcp-weather-server') 和一个配套的 MCP 客户端模块 ('mcp-hub')。它演示了如何使用 Spring AI 框架实现一个基于 Model Context Protocol (MCP) 的工具服务器,并通过 Server-Sent Events (SSE) 协议与 MCP 客户端进行通信,使 LLM 客户端能够调用服务器上托管的工具。

主要功能点

  • 托管和暴露工具: 'mcp-weather-server' 模块实现了两个工具函数(获取天气预报、获取空气质量),并使用 Spring AI 的 '@Tool' 注解和 'MethodToolCallbackProvider' 将它们注册为 MCP 工具。
  • 支持 MCP 协议: 服务器基于 'spring-ai-mcp-server-webflux-spring-boot-starter' 构建,能够理解并响应 MCP 客户端通过 SSE 发送的工具调用等请求。
  • SSE 通信: 使用 Server-Sent Events 作为 MCP 的传输协议,允许服务器实时向客户端推送信息(尽管此示例主要演示请求/响应模式)。

安装步骤

  1. 环境准备: 确保已安装 JDK 17+ 和 Maven 3.9+。
  2. 获取代码: 从 GitHub 克隆或下载整个仓库。
  3. Maven 配置 (可选): 如果需要,可以在 Maven 'settings.xml' 中配置阿里云镜像以加速依赖下载(具体配置见项目 README)。
  4. 配置 LLM API Key: 在 'mcp-hub' 模块的 'src/main/resources/application.yml' 中配置您的 LLM (如 DashScope) API Key。这是 MCP 客户端与大模型通信所需。
  5. 构建项目: 在项目根目录执行 'mvn clean install'。这将构建 'mcp-weather-server' 和 'mcp-hub' 两个模块。

服务器配置

MCP 服务器 'mcp-weather-server' 是一个独立的 Spring Boot 应用,需要先启动。

  • 启动命令: 进入 'mcp-weather-server' 模块目录,使用 Maven 命令启动:
    mvn spring-boot:run -Dserver.port=18081 # 可以指定端口,例如 18081
  • 主要配置: 服务器的主要配置在 'mcp-weather-server' 模块的 'application.yml' 中(如果存在或需要自定义)。核心配置包括:
    • 'server.port': 服务器监听的端口,客户端连接时需要用到。
    • 'spring.ai.mcp.server.name': MCP 服务器的名称 (例如: 'weather-server')。
    • 'spring.ai.mcp.server.version': 服务器版本 (例如: '0.0.1')。
  • MCP 客户端连接配置: MCP 客户端(如 'mcp-hub' 模块)需要知道如何连接到此服务器。对于 SSE 连接,客户端需要配置服务器的 SSE 端点 URL。在 MCP 客户端的配置中,通常会有一个连接列表,例如:
    {
      "connections": {
        "weatherService": { // 连接名称,可自定义
          "type": "sse",
          "url": "http://localhost:18081/sse" // 指向 MCP 服务器的 SSE 端点地址
        }
      }
    }
    实际配置在 Spring AI MCP 客户端中通常通过 'application.yml' 完成,如仓库示例所示。

基本使用方法

  1. 启动服务器: 按照上述步骤启动 'mcp-weather-server' 模块。
  2. 启动客户端: 进入 'mcp-hub' 模块目录,使用 Maven 命令启动:
    mvn spring-boot:run
  3. 客户端交互: 'mcp-hub' 模块包含一个简单的 '/chat' 控制器。你可以通过 HTTP GET 请求与客户端交互,例如使用浏览器或 'curl':
    curl "http://localhost:8080/chat?input=What's the weather like in Beijing?"
    客户端会接收到请求,将其发送给配置好的 LLM。如果 LLM 判断需要调用工具(例如查询天气),它会通过 MCP 协议向 'mcp-weather-server' 发起工具调用请求。服务器执行工具函数并将结果返回给客户端,客户端再将工具结果反馈给 LLM,最终 LLM 生成包含天气信息的回复。

注意事项:

  • 示例使用了 Spring AI 的里程碑版本 ('1.0.0-M6'),生产环境建议使用稳定版。
  • API Key 等敏感信息应通过环境变量或秘密管理工具配置。

信息

分类

网页与API