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.效果
相关推荐
Elcker5 小时前
RAG教程-基础篇-第二节 RAG的技术原理
人工智能·ai编程·rag
vistaup5 小时前
在 claude code 中使用 RTK 节省token
ai编程
Java.熵减码农5 小时前
Claude Code 完全使用指南:从入门到精通的终端AI编程助手
ai编程
刘贺同学5 小时前
用Hermes一周,它自动生成了4个直接运行的Skill
aigc·ai编程
测试员周周5 小时前
【AI测试系统】第2篇:拒绝盲目 AI:规则引擎 10ms 自动生成 36 条测试用例实战(附源码)
llm·ai编程·测试
米小虾6 小时前
MCP 协议深度解析:AI 时代的「USB-C」接口如何重塑智能体生态
人工智能·mcp
库洛西鲁6 小时前
OpenClaw 16G 内存怎么配模型?实测 3 套方案,最后一套跑满不卡
claude·mcp
海上日出6 小时前
给 AI Agent 装上"工具外挂":2026 Function Calling 实战指南,任务完成率提升 300%(完整代码)
ai编程
JaydenAI6 小时前
[MCP在LangChain中的应用-03]在Session构建的上下文中与MCP Server交互
python·langchain·ai编程·ai agent·mcp·fastmcp