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.效果
相关推荐
Allen_LVyingbo1 小时前
医疗科研管理系统到院级生命科学平台的升级路径
python·信息可视化·健康医疗·ai编程
zzywxc7872 小时前
AI 在金融、医疗、教育、制造业等领域都有广泛且深入的应用,以下是这些领域的一些落地案例
人工智能·金融·自动化·prompt·ai编程·xcode
yaocheng的ai分身8 小时前
Spec-Kit:AI驱动的软件开发全流程管理工具套件
ai编程·claude
江湖伤心人12 小时前
MCP(trae)+ wireshark-提高干活效率
wireshark·mcp
云起SAAS14 小时前
SCL-90症状自评量表抖音快手微信小程序看广告流量主开源
微信小程序·小程序·ai编程·看广告变现轻·scl-90症状自评量表·scl-90
冷yan~15 小时前
Spring AI与智能代理模式的深度解析
java·spring·ai·ai编程
yaocheng的ai分身16 小时前
如何用CLI工具解决Claude Code的上下文丢失问题
ai编程
yaocheng的ai分身16 小时前
在Claude开发者平台上管理上下文
ai编程·claude
带娃的IT创业者18 小时前
Function Call实战效果:准确率提升86%背后的数据与思考,兼谈MCP的未来
人工智能·python·function call·性能分析·技术趋势·mcp·roi
_t19 小时前
关于AI Agent处理大量第三方集成的思路
openai·agent·mcp