MCP对接Spring AI Alibaba遇到的坑

上一篇中我们简单介绍了MCP的内容。本期分享下Spring AI Alibaba给的demo

官方文档中给的流程图感觉不是太清晰,然后我画了一个流程图

因为流程很重要,这个流程图我再次发一下,python版本感觉DEMO比JAVA版本更能体会每步的流程(感觉java的封装的比较深吧

遇到的坑

  • 1.starter的选择问题(我想这是通用的就直接在网上找了个基础的demo跑没用ali的starter,一直报错连里面初始化的模型名字都不对,开始我还以为是配置文件的问题,后来我发现应该是每个模型都有自己的starter然后只用配置个API-KEY就可以了
  • 2.工具输出了springboot的logo导致mcp包解析数据报错(这个问题的发现是用了jaredit的插件改了包的内容打印了错误输出发现的,报错的原因后面会说开始我还以为是JACKSON的版本问题
  • 3.这两个地方浪费了好多时间,剩下的借用官方的demo就一路通行了。

愉快的运行个流程

  • 1.项目地址 github.com/springaiali...
  • 2.Spring AI 默认的JDK版本是17
  • 3.Client POM的一些文件(注意要找模型对应的starter实现
  • 4.demo中mcp例子是个天气预报
xml 复制代码
<dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>3.2.4</version>
        </dependency>
        <!--ollama的实现-->
        <!-- <dependency>
     <groupId>org.springframework.ai</groupId>
     <artifactId>spring-ai-ollama-spring-boot-starter</artifactId>
 </dependency>-->
        <!-- 这里每个模型会有个对应的 starter实现-->
        <dependency>
            <groupId>com.alibaba.cloud.ai</groupId>
            <artifactId>spring-ai-alibaba-starter</artifactId>
            <version>1.0.0-M6.1</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.ai</groupId>
            <artifactId>spring-ai-mcp-client-spring-boot-starter</artifactId>
            <version>1.0.0-M6</version>
        </dependency>

    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>21</source>
                    <target>21</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.ai</groupId>
                <artifactId>spring-ai-bom</artifactId>
                <version>1.0.0-M6</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
  • 4.注意工具调用是(是通过命令的方式进行的
yaml 复制代码
spring:
  ai:
    mcp:
      client:
        request-timeout: 40s
        stdio:
          #servers-configuration: classpath:/mcp-servers-config.json
          # 直接配置
           connections:
             server1:
               command: D:/java/jdk-21.0.1/bin/java
               args:
                 - -Dspring.ai.mcp.server.stdio=true
                 - -Dspring.main.web-application-type=none
                 - -Dlogging.pattern.console=
                 - -jar
                 - D:/toolsInstall/McpServerTest/target/McpServerTest-1.0-SNAPSHOT.jar
  • 5.MCP server也是通过SpringBoot的方式进行开发的 引入了一个问题

SpringBoot在启动的时候会打印LOGO导致mcp的包解析接收工具数据的时候出现JSON解析异常

原因是:mcp按行解析输出的时候直接进行json解析导致出错了(logo不是json格式的

mcp挂掉的地方

处理办法是工具包在开始的时候屏蔽springbott的logog打印

arduino 复制代码
    public static void main(String[] args) {
        //SpringApplication.run(McpServerApplication.class, args);
        //获取SpringBoot入口类
        SpringApplication springApplication=new SpringApplication(McpServerApplication.class);
        //设置它的属性 屏蔽logo打印
        springApplication.setBannerMode(Banner.Mode.OFF);
        springApplication.run(args);
    }
  • 6.MCPServer声明很简单
typescript 复制代码
/**
 * 声明一个时间工具
 * 获取当前时间
 */
@Service
public class CurrentTimeService {
    @Tool(description = "获取当前时间")
    public String getCurrentTime() {
        SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        return sdf.format(System.currentTimeMillis());
    }
}
  • 7.效果
相关推荐
Captaincc18 分钟前
Cursor 1.0 更新解析:意外升级,亮点与槽点并存
ai编程·cursor
小阿鑫26 分钟前
记录第一次公司内部分享:如何基于大模型搭建企业+AI业务
大模型·llm·agent·大模型落地·ai落地·mcp·mcpserver
Jooolin31 分钟前
【三大前端语言之一】交互:JavaScript详解
前端·javascript·ai编程
程序员NEO1 小时前
AI编码焕新:用Context7
mcp
Goboy1 小时前
Trae 智能体实现大海、日出与白云的动态首页背景设计,MCP一键部署开箱即用。
ai编程·trae
用户4099322502121 小时前
FastAPI权限迷宫:RBAC与多层级依赖的魔法通关秘籍
后端·ai编程·trae
rocksun1 小时前
MCP是AI的RSS:模型上下文协议的更多用例
人工智能·mcp
juer1 小时前
Trae编程工具:重新定义前端开发效率的边界
ai编程
每天开心2 小时前
前端面试必看!从 add 函数深挖 JavaScript 核心知识🧐
前端·面试·ai编程
Goboy2 小时前
用 Trae IDE 为网站生成动感粒子背景,打造星空效果
ai编程·trae