本项目包含一个使用 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 的传输协议,允许服务器实时向客户端推送信息(尽管此示例主要演示请求/响应模式)。
安装步骤
- 环境准备: 确保已安装 JDK 17+ 和 Maven 3.9+。
- 获取代码: 从 GitHub 克隆或下载整个仓库。
- Maven 配置 (可选): 如果需要,可以在 Maven 'settings.xml' 中配置阿里云镜像以加速依赖下载(具体配置见项目 README)。
- 配置 LLM API Key: 在 'mcp-hub' 模块的 'src/main/resources/application.yml' 中配置您的 LLM (如 DashScope) API Key。这是 MCP 客户端与大模型通信所需。
- 构建项目: 在项目根目录执行 '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 客户端的配置中,通常会有一个连接列表,例如:
实际配置在 Spring AI MCP 客户端中通常通过 'application.yml' 完成,如仓库示例所示。{ "connections": { "weatherService": { // 连接名称,可自定义 "type": "sse", "url": "http://localhost:18081/sse" // 指向 MCP 服务器的 SSE 端点地址 } } }
基本使用方法
- 启动服务器: 按照上述步骤启动 'mcp-weather-server' 模块。
- 启动客户端: 进入 'mcp-hub' 模块目录,使用 Maven 命令启动:
mvn spring-boot:run - 客户端交互: 'mcp-hub' 模块包含一个简单的 '/chat' 控制器。你可以通过 HTTP GET 请求与客户端交互,例如使用浏览器或 'curl':
客户端会接收到请求,将其发送给配置好的 LLM。如果 LLM 判断需要调用工具(例如查询天气),它会通过 MCP 协议向 'mcp-weather-server' 发起工具调用请求。服务器执行工具函数并将结果返回给客户端,客户端再将工具结果反馈给 LLM,最终 LLM 生成包含天气信息的回复。curl "http://localhost:8080/chat?input=What's the weather like in Beijing?"
注意事项:
- 示例使用了 Spring AI 的里程碑版本 ('1.0.0-M6'),生产环境建议使用稳定版。
- API Key 等敏感信息应通过环境变量或秘密管理工具配置。
信息
分类
网页与API