Cherry Studio搭载自定义MCP服务,精准引导大模型
上一节介绍了手搓MCP服务和客户端,并且采用了服务器发送事件(SSE)的形式调用,完成了基本调用。当然客户端也可以使用`Cherry Studio` 客户端直接调用,输入服务端的IP和端口即可。
01 引言
上一节介绍了手搓MCP服务和客户端,并且采用了服务器发送事件(SSE)的形式调用,完成了基本调用。
当然客户端也可以使用Cherry Studio
客户端直接调用,输入服务端的IP和端口即可,按照下图配置,这里不在赘述!
为了更好理解本节内容,如果对上一节手搓MCP服务不清楚的,可以先了解一下,传送门:
https://blog.csdn.net/static_coder/article/details/147732655
02 打包自定义MCP服务
MCP服务既支持Stdio标准流也支持SSE,本次打包以Stdio为例,需要更改MCP服务xml
依赖:
<!-- SSE
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-mcp-server-webmvc</artifactId>
</dependency>
-->
<!-- 标准Stdio -->
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-mcp-server</artifactId>
</dependency>
Java
编写的MCP服务打包非常简单,不需要启动,直接打成jar
包即可。
Maven命令:
mvn clean compile package -DskipTests
Idea 工具集:
最后打好的Jar
包:
03 Cherry Studio配置MCP
3.1 MCP服务配置文件
jar
包这里必须指定绝对路径。
"gzh-mcp-server": {
"command": "java",
"args": [
"-Dspring.ai.mcp.server.stdio=true",
"-Dspring.main.web-application-type=none",
"-jar",
"D://boot-mcp-server-0.0.1-SNAPSHOT.jar"
]
}
3.2 Cherry Studio配置MCP服务
按照如下图步骤:
3.3 开启MCP服务
配置的MCP服务默认是关闭的,需要手动开启。
3.4 开启会话,选择MCP服务
开启会话的时候,默认是不使用MCP服务的。当有多个MCP服务的时候,每次只能选择一个。
3.5 测试MCP相关话题
测试选择用的模型:qwq:latest | Ollama
从测试的结果来看:
【推荐一个学习公众号】的对话,明确调用了的MCP服务,且返回了MCP服务的信息。与预想的完全一致。
【推荐公众号的好文】这个对话,虽然也调用了MCP服务,但是最终返回的数据大模型经过了加工,返回的假数据。这个可能是大模型被污染导致的
3.6 测试非MCP服务话题
从测试的结果来看,选用了MCP之后,大模型回答的结果都是依据MCP服务的大致内容响应数据。MCP之外的话题,大模型可能无法给出结果。
这里反应了大模型使用的MCP之后,大模型的回答的系统框架就会被限制了。
04 自定义客户端配置MCP
我们能不能使用自定义的客户端模拟Cherry Studio
直接配置MCP呢?当然可以。但是需要修改部分参数。
4.1 MCP 服务配置选择性修改
需要禁用启动banner
的打印,否则客户端启动会出现json解析异常。
图中①断点进入,就会发现这里解析的内容是MCP服务启动的banner
。
# Stdio 标准配置
spring.ai.mcp.server.name=gzh-mcp-server
spring.ai.mcp.server.stdio=true
# 禁用banner
spring.main.banner-mode=off
这里的服务端的配置可以通过启动命令指定,所以服务端的配置可以选择性修改。
4.2 MCP客户端配置
spring.ai.mcp.client.name=mcp-client
spring.ai.mcp.client.toolcallback.enabled = true
# 配置server的json文件
spring.ai.mcp.client.stdio.servers-configuration=classpath:mcp-servers-config.json
# 强制文件编码,防止中文乱码
spring.mandatory-file-encoding=UTF-8
4.3 增加json配置文件
配置内容:
{
"mcpServers": {
"gzh-mcp-server": {
"command": "java",
"args": [
"-Dspring.main.banner-mode=off",
"-Dspring.ai.mcp.server.stdio=true",
"-Dlogging.pattern.console=",
"-Dfile.encoding=utf-8",
"-jar",
"D://boot-mcp-server-0.0.1-SNAPSHOT.jar"
]
}
}
}
命令详解:
command
:MCP服务启动的命令类型,这里配置的java
,所以会使用java -jar xx.jar
方式启动。
-Dspring.main.banner-mode=off
:禁用服务端启动打印banner
,可以不配置(因为4.1
服务点已经配置)。
-Dspring.ai.mcp.server.stdio=true
:指定Stdio类型,可以不配置(因为4.1
服务点已经配置)。
-Dlogging.pattern.console=
:控制太不打印日志。因为自定义的客户端启动时会获取控制台的信息。
-Dfile.encoding=utf-8
:文件编码,控制太中文乱码。因为控制台不打印日志,所以可以不配置。
-jar
:启动命令
D://boot-mcp-server-0.0.1-SNAPSHOT.jar
:绝对路径,MCP服务的jar
位置。
总之:
配置的目的就是启动MCP服务。这里的命令就是:
java -Dspring.main.banner-mode=off ... -jar D://boot-mcp-server-0.0.1-SNAPSHOT.jar
4.3 客户端启动测试
日志已经显示客户端连接到MCP服务了。测试结果如下:
大模型明显调用了MCP服务。
05 小结
MCP服务可以引导大模型精准的输出信息,就像MCP服务为大模型搭建一个框架一样,大模型在这个框架里利用资深自然语言的能力,整合内容输出内容。每一个大模型调用同一个MCP服务,输出的结果都有所不同。
如果想用自己的MCP服务被大家使用,可以将自己的服务上传到MCP服务的托管平台,如:https://mcp.so/
好了,今天的分享就到这里了。
更多推荐
所有评论(0)