使用说明
项目简介
本项目展示了如何使用 Spring AI 框架快速构建 Model Context Protocol (MCP) 服务器。它包含两个独立的、功能明确的 MCP 服务示例:地理编码服务 (Geocoder Service) 和 时区服务 (Timezone Service)。这两个服务分别提供了查询城市经纬度和根据经纬度查询时区信息的功能,并通过 Spring AI 的工具机制暴露给 LLM 客户端。'mcp-host' 模块则作为一个简单的客户端示例,演示了如何通过 Spring AI 的 'ChatClient' 与这些 MCP 服务提供的工具进行交互。
主要功能点
- 地理编码服务 (Geocoder Service):
- 提供将城市名称转换为经纬度的功能。
- 通过 HTTP 请求调用 Nominatim API 获取地理编码信息。
- 使用 Spring AI 的 '@Tool' 注解将地理编码功能注册为 MCP 工具。
- 时区服务 (Timezone Service):
- 提供根据经纬度查询时区信息的功能。
- 使用 'timezonemap' 库根据经纬度获取时区信息。
- 使用 Spring AI 的 '@Tool' 注解将时区查询功能注册为 MCP 工具。
- MCP Host (客户端示例):
- 演示如何使用 Spring AI 的 'ChatClient' 连接和调用 MCP 服务器提供的工具。
- 通过简单的命令行界面,允许用户输入城市名称,并调用地理编码和时区工具获取相关信息。
- 展示了如何构建 Prompt 模板,指示 LLM 使用可用的工具完成任务。
安装步骤
-
克隆代码仓库
git clone https://github.com/oalles/spring-ai-mcp-test.git cd spring-ai-mcp-test -
启动 Geocoder Service
cd geocoder mvn spring-boot:run(等待服务启动完成,默认端口为 8081)
-
启动 Timezone Service
cd ../timezone mvn spring-boot:run(等待服务启动完成,默认端口为 8082)
-
启动 MCP Host 客户端
cd ../mcp-host mvn spring-boot:run(等待客户端启动完成)
服务器配置
为了让 MCP 客户端(例如 'mcp-host' 模块,或者其他 MCP 客户端应用)能够连接到 MCP 服务器,需要配置服务器的启动命令和参数。以下是针对 Geocoder Service 和 Timezone Service 的 MCP 服务器配置示例 (JSON 格式):
Geocoder Service 配置:
{ "server name": "geocoder-service", "command": "mvn", "args": ["spring-boot:run"], "description": "启动地理编码 MCP 服务" }
Timezone Service 配置:
{ "server name": "timezone-service", "command": "mvn", "args": ["spring-boot:run"], "description": "启动时区 MCP 服务" }
配置参数说明:
- '"server name"': MCP 服务器的名称,用于在客户端识别和管理多个服务器连接。例如 "geocoder-service" 或 "timezone-service"。
- '"command"': 启动 MCP 服务器的可执行命令。对于 Spring Boot 应用,通常使用 Maven 命令 'mvn' 或 Gradle 命令 'gradle'。
- '"args"': 启动命令的参数列表。对于 Spring Boot 应用,通常使用 'spring-boot:run' 来运行应用。
- '"description"': 对该服务器配置的简要描述,方便用户理解其用途。
基本使用方法
- 确保 Geocoder Service 和 Timezone Service 都已成功启动。
- 启动 MCP Host 客户端后,在控制台会提示 "Enter city (or type 'exit' to quit): "。
- 输入城市名称(例如 "London")并按回车键。
- MCP Host 客户端会调用配置好的 MCP 服务器 (Geocoder Service 和 Timezone Service) 获取地理编码和时区信息,并展示给用户。
- 可以继续输入其他城市名称进行查询。
- 输入 "exit" 并按回车键可以退出 MCP Host 客户端。
信息
分类
AI与计算