在2025年3月下旬开始,MCP相关的内容就铺天盖地的到处都是,目前随着AI的快速发展,在未来要使用AI,那么MCP一定是要掌握的,所以这里我们出一系列的关于MCP的实战教程,在后期会越来越丰富各种应用场景的MCP。
本文主要是使用java编写一个MCP Server,然后使用Cherry Studio来进行测试。使用的模式是Stdio模式,下面直接开始演示。
一、创建一个空白的maven项目
这里我们使用spring-ai的框架来编写整个MCP Server,所以只需要创建一个maven项目即可。但是这里需要注意的是,这里的jdk需要使用jdk17及以上,低版本的jdk在后期拓展的时候不方便。
创建了空白的maven项目之后,把下面的代码添加到pom.xml中
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.4.3</version> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <mcp.verison>1.0.0-M6</mcp.verison> <java.version>17</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-mcp-server-spring-boot-starter</artifactId> <version>${mcp.verison}</version> </dependency> </dependencies>
二、添加application.yml
这里虽然我们使用的是springboot的模板,但是我们却不能启动web,所以需要在appliation.yml文件中进行屏蔽。
直接在resources目录下创建application.yml文件,然后把下面的内容复制进去:
server: port: 8080 name: mcp spring: main: banner-mode: off web-application-type: none logging: pattern: console: ai: mcp: server: stdio: true name: mcp version: 1.0.0
这里特别说明一下,一定要配置:spring.main.banner-mode=off,这是必须配置的,同时不能使用web模式,因此需要配置spring.main.web-application-type=none。
三、编写主类
默认创建的是app.class,我们把它改造一下,熟悉springboot的同学应该可以轻车熟路,实例代码如下:
四、创建service
因为整体的项目不是web,所以这里我们是没有controller层的,只有service层,然后通过service层来暴露整个服务,因此创建一个service的目录,然后再创建一个名词为NumService的类,把下面的代码复制进去:
package org.mcp.service; import org.springframework.ai.tool.annotation.Tool; import org.springframework.ai.tool.annotation.ToolParam; import org.springframework.stereotype.Service; @Service public class NumService { @Tool(description = "判断是否是双数") public String judgeIfOdd(@ToolParam(description = "待判断的数") Integer num) { return num + (num%2 == 0 ? "是双数" : "不是双数"); } }
这里我们说明一下:
1、@Tool是spring AI MCP框架中用于快速暴露业务能力,为AI工具的核心注解,该注解实现了java方法和MCP协议工具的自动映射。
2、@Tool中的description主要是用来帮助人工智能模型根据用户输入的信息觉得是否调用这些工具,并返回响应的结果。
3、@ToolParams主要是参数映射。
4、上面的方法很简单,就是通过用户在聊天窗输入一个数字,然后人工智能解析之后把它传过来,然后咱们判断这个数是不是双数。
五、创建config
在项目中创建一个config文件夹,并且在config文件夹下创建一个McpConfig的类,把下面的代码粘贴进去:
package org.mcp.config; import org.mcp.service.NumService; import org.springframework.ai.tool.ToolCallbackProvider; import org.springframework.ai.tool.method.MethodToolCallbackProvider; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class McpConfig { @Bean public ToolCallbackProvider weatherTools(NumService numService) { return MethodToolCallbackProvider.builder().toolObjects(numService).build(); } }
备注:
1、这里的config主要是用来注册MCP工具。
2、一般我们一个service注册一个bean,如果写了多个service,则在这里注册多个bean(也就是有N个service,那么就写N个方法,添加N个@Bean)。
3、这里的注册时把当前的service中所有带有@Tool注解的方法都注册为工具,供AI模型低啊用。
4、ToolCallbackProvider是spring ai中的一个借口,用于定义工具发现机制,主要负责将那些使用@Tool注解标记的方法转换为工具回调对象,并提供给chatclient,以方便AI模型能够在对话过程中调用这些工具。
六、打包springboot项目
上面我们已经使用java语言完成了一个简单的mcp服务器,接下来我们把它打成jar包:
mvn clean package
打包完成之后就可以使用了。
七、添加MCP服务端
服务端开发好了,接下来就是测试了,我个人喜欢使用cherry studio来进行测试,所以这里我们打开cherry studio,进入设置->mcp服务器:
点击添加一个服务器,把下面的信息输入进去:
1、名称:测试MCP(名字可以随便填写)
2、命令:java(这里需要保证本地有java执行环境,默认填写UVX或者NPM,但是咱们不用管,直接填写java即可)
3、参数:
-Dspring.ai.mcp.server.stdio=true -jar C:\Users\Administrator\Desktop\test1\mcpdemo1-1.0.jar
参数这里其实填写的主要是java启动参数,整个MCP服务的话,我们相当于命令启动一个java服务。
4、剩下其他的不用填写了,完整的示例图如下:
接下来咱们点击最上册的八寸,并且把开关打开:
打开开关之后他会转一会圈,其实就是相当于在启动jar服务并且注册MCP,等他不转了,把这个MCP服务器详情拉倒最下边,可以看到有可用的工具方法:
此时就代表我们自定义的mcp服务器是可用状态了。
八、测试MCP服务器
最后我们使用cherry studio的聊天窗口来测试下这个MCP服务器,进入到聊天窗口
在下方找到MCP服务的选项
点击之后会出来很多的MCP服务列表
此时我们没有选中任何一个MCP服务器,找到刚才我们创建的MCP服务器,点击一下(这里点击一下之后,代表选择当前的MCP服务器,选择的MCP服务器后面会有个打钩,只要打钩了就代表选中了)
然后咱们就可以直接测试了,比如我们选择qweb模型
然后问他2是不是双数:。
此时等待一会就可以看到他调用了我们自定义的MCP服务器的双数方法:
最后展示的结果如下:
是不是看到了调用效果。
以上就是使用java编写的MCP服务端的案例。
备注:
1、关于过程中使用cherry studio可能出现的问题,可参考:《cherry studio MCP安装问题》。
2、Stdio模式可以看做是进程间通信,本地的cherry与本地启动的jar服务器之间的进程通信,同时大家在cmd中使用jps查看的话,可以看到非常多的jar进程被启动。
3、最后按照惯例,附上本案例的源码,登录后即可下载。
还没有评论,来说两句吧...