返回 MCP 目录
public公开dns本地运行

spring-ai-mcp-test

该项目展示了如何在Spring Boot应用中集成Spring AI的MCP支持,包含地理编码和时区查询服务,并通过LLM交互提供地理位置信息。

article

README

🚀 MCP 主机项目

本项目展示了如何在Spring Boot应用程序里集成Spring AI对MCP(模型上下文协议)的支持,涵盖了服务器端和客户端的实现,为AI模型上下文交互管理提供了有效的解决方案。

🚀 快速开始

运行项目

  1. 启动地理编码服务

    cd geocoder
    mvn spring-boot:run
    
  2. 启动时区服务

    cd timezone
    mvn spring-boot:run
    
  3. 启动MCP 主机

    cd mcp-host
    mvn spring-boot:run
    

使用方法

  1. 与MCP 主机交互
    • 运行MCP 主机应用程序。
    • 在控制台中输入城市名称。
    • 系统将提供输入城市的纬度、经度和时区信息。

插入图片
image

✨ 主要特性

MCP 标准

MCP 是一个标准,旨在简化AI模型上下文交互的管理,使其能够与外部数据源和工具保持一致集成。
Spring AI MCP 扩展了MCP Java SDK,并提供了专门针对Spring Boot的客户端和服务器端启动器。

MCP 客户端与服务器

MCP 客户端负责处理与MCP 服务器之间的通信和连接管理。
在此项目中,我们利用Spring AI构建MCP 服务器,并使其功能可供大型语言模型(LLM)使用。需要注意的是,必须使用支持TOOLS 的模型;我们正在使用通过Ollama提供的Llama3.2

📦 安装指南

本项目的安装主要通过Maven命令完成,具体启动各服务的命令如下:

地理编码服务

cd geocoder
mvn spring-boot:run

时区服务

cd timezone
mvn spring-boot:run

MCP 主机

cd mcp-host
mvn spring-boot:run

💻 使用示例

基础用法

地理编码服务接口

public interface Geocoder {
    GeoCodeResult geocode(String city) throws Exception;
}

public record GeoCodeResult(double latitude, double longitude) {}

时区服务接口

public interface TimeZoneService {
    Optional<TimeZone> getTimeZoneFromLocation(double latitude, double longitude) throws Exception;
}
public record TimeZone(
        String id,
        String name,
        int rawOffset,
        int dstSavings
) {}

MCP 主机交互代码

@Bean
CommandLineRunner runner(final ChatClient.Builder chatClientBuilder, List<ToolCallback> toolCallbacks) {

   final ChatClient agent = chatClientBuilder.build();

   return args -> {
      try (Scanner scanner = new Scanner(System.in)) {
         while (true) {
            System.out.print("\n\n请输入城市名称(或输入'退出'以退出):");
            String city = scanner.nextLine();
            if ("退出".equalsIgnoreCase(city)) {
               break;
            }

            String queryTemplate = """
                    请使用可用工具获取给定城市`{city}`的纬度和经度。获得此信息后,请使用工具提供该位置的时区详细信息,并以相同语言返回。
                    """;

            String systemTemplate = """
                    您是一个专门提供地理信息的AI助手。您的任务是利用提供的工具收集并传达准确数据。
                    """;

            String llmResponse = agent
                    .prompt()
                    .advisors(new SimpleLoggerAdvisor())
                    .system(systemSpec -> systemSpec.text(systemTemplate))
                    .user(userSpec -> userSpec.text(queryTemplate).param("city", city))
                    .tools(toolCallbacks)
                    .call()
                    .content();

            log.info("\n\n{}", llmResponse);
         }
      }
   };
}

📚 详细文档

模块介绍

此项目由三个主要模块组成:

地理编码服务

  • 端口:8081
  • 描述:根据城市名称提供纬度和经度。
  • 配置

时区服务

  • 端口:8082
  • 描述:根据纬度和经度提供时区信息。
  • 配置

MCP 主机

  • 描述:通过MCP 客户端使用地理编码和时区服务,并提供一个控制台界面与LLLM交互。
  • 配置

MCP 相关说明

MCP 是一个标准,旨在简化AI模型上下文交互的管理,使其能够与外部数据源和工具保持一致集成。
Spring AI MCP 扩展了MCP Java SDK,并提供了专门针对Spring Boot的客户端和服务器端启动器。

MCP 客户端负责处理与MCP 服务器之间的通信和连接管理。
在此项目中,我们利用Spring AI构建MCP 服务器,并使其功能可供大型语言模型(LLM)使用。需要注意的是,必须使用支持TOOLS 的模型;我们正在使用通过Ollama提供的Llama3.2

help

运行方式说明

cloud

托管运行

托管运行通常表示这个 MCP Server 由服务方环境承载,用户一般按页面提供的连接方式或授权流程接入,不需要在本地长期启动一个 MCP 进程

  1. 打开服务方连接页
  2. 完成授权或复制端点
  3. 在 MCP 客户端中连接
terminal

本地运行 / 其它方式

本地运行通常需要用户在自己的电脑或服务器上安装依赖,把 server_config 复制到 MCP 客户端,并按 env_schema 补齐环境变量、密钥或其它配置

  1. 复制 server_config
  2. 安装所需依赖
  3. 补齐环境变量后重启客户端