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.效果
相关推荐
程序视点7 小时前
Copilot 代码评审:支持 copilot-instructions.md 自定义
aigc·ai编程·github copilot
晚风予星7 小时前
MCP文件操作服务器:让AI帮你管理文件
人工智能·开源·mcp
小小琪_Bmob后端云9 小时前
【Trae实践】直播间自动发言工具的开发
android·ai编程·trae
西柚啊9 小时前
AI + 可视化:Stagewise 如何让前端 UI 调试效率飞跃
前端·ai编程
阿里云云原生10 小时前
Function AI 助力用户自主开发 MCP 服务,一键上云高效部署
mcp
KevinZhang1357911 小时前
ShadowAI 支持二维表格数据生成了
人工智能·agent·ai编程
思绪漂移11 小时前
CodeBuddy IDE 使用测评——半小时做一个web可视化数据工具
ai编程·aiide·codebuddy 推荐官
阿里云云原生12 小时前
如何实现 AI Agent 自主发现和使用 MCP 服务 —— Nacos MCP Router 部署最佳实践
mcp
书中曾有的故事_12 小时前
mcp-faker-json
前端·mcp
一只爱撸猫的程序猿12 小时前
构建一个简单的亿级数据迁移方案案例
spring boot·数据分析·ai编程