上一篇中我们简单介绍了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.效果
