MCP 客户端是 MCP 架构中的关键组件,主要负责和 MCP 服务器建立连接并进行通信。它能自动匹配服务器的协议版本,确认可用功能,并负责数据传输和 JSON-RPC 交互。此外,它还能发现和使用各种工具、管理资源,并与提示系统进行交互。
除了这些核心功能,MCP 客户端还支持一些额外特性,比如根管理、采样控制,以及同步或异步操作。为了适应不同场景,它提供了多种数据传输方式,包括标准输入/输出、基于 Java HttpClient 和 WebFlux 的 SSE 传输。
MCP 服务端
MCP 服务器是整个 MCP 架构的核心部分,主要用来为客户端提供各种工具、资源和功能支持。它负责处理客户端的请求,包括解析协议、提供工具、管理资源以及处理各种交互信息。同时,它还能记录日志、发送通知,并且支持多个客户端同时连接,保证高效的通信和协作。它可以通过多种方式进行数据传输,比如标准输入/输出、Servlet、WebFlux 和 WebMVC,满足不同应用场景的需求。
Spring AI 集成 MCP
可以通过引入一些依赖,直接让 Spring AI 和 MCP 进行集成,在 Spring Boot 项目中轻松使用。
比如客户端启动器:
服务器启动器:
MCP开发实践
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-mcp-server</artifactId>
</dependency>
添加yml配置文件配置
spring:
ai:
mcp:
server:
name: super-sql-mcp-server
version: 1.0.0
type: SYNC
注意点需要关闭springboot的banner输出
##服务端口
server:
port: 8088
spring:
application:
###应用名
name: super-sql-mcp-server
main:
banner-mode: off
web-application-type: none
开始实现mcp的接口
public interface ISQLEngineService {
String genSQL(String question);
List<Map<String,Object>> getNl2SQLData(String question);
}
实现接口代码
实现 MCP 工具
@Tool
是 Spring AI MCP 框架中用于快速暴露业务能力为 AI 工具的核心注解,该注解实现 Java 方法与 MCP 协议工具的自动映射,并且可以通过注解的属性 description
,帮助人工智能模型根据用户输入的信息决定是否调用这些工具,并返回相应的结果。
到这里为止MCP的服务端就开发完成了,接下来我们要实现的是mcp的client端
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-mcp-client</artifactId>
</dependency>
{
"mcpServers": {
"super-sql-mcp-server": {
"command": "java",
"args": [
"-jar",
"-Dspring.ai.mcp.server.stdio=true",
"-Dspring.main.web-application-type=none",
"-Dlogging.pattern.console=",
"-Dspring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver",
"-Dspring.datasource.url=jdbc:mysql://localhost:3306/supersql?characterEncoding=utf8&useSSL=false",
"-Dspring.datasource.username=root",
"-Dspring.datasource.password=123456",
"-Dspring.ai.azure.openai.api-key=your_openai_api_key",
"-Dspring.ai.azure.openai.chat.options.deployment-name=your_chat_model_deployment_name",
"-Dspring.ai.azure.openai.endpoint=your_openai_endpoint",
"-Dspring.ai.azure.openai.embedding.options.deployment-name=your_embedding_model_deployment_name",
"-Dspring.ai.vectorstore.chroma.client.host=http://127.0.0.1",
"-Dspring.ai.vectorstore.chroma.client.port=8000",
"-Dspring.ai.vectorstore.chroma.collection-name=super-sql",
"-Dspring.ai.vectorstore.chroma.initialize-schema=true",
"D:\\your_jar_file_path\\super-sql-mcp-stdio-1.0.0-M1.jar"
],
"env": {}
}
}
}
开发对应的接口
最后测试一下
结果显示已经调用了MCP工具,并且数据来源于数据库中
基于SSE的服务端
除了基于 stdio
的实现外,Spring AI 还提供了基于 Server-Sent Events (SSE) 的 MCP 客户端方案。相较于 stdio
方式,SSE 更适用于远程部署的 MCP 服务器,客户端可以通过标准 HTTP 协议与服务器建立连接,实现单向的实时数据推送。基于 SSE 的 MCP 服务器支持被多个客户端远程调用。
由于sse与stdio除了maven依赖和配置不同,其他不需要修改,所以这里不过赘述
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-mcp-server-webmvc</artifactId>
</dependency>
配置文件配置
spring:
ai:
mcp:
server:
name: webmvc-super-sql-mcp-server
version: 1.0.0
stdio: false
type: ASYNC
sse-message-endpoint: /mcp/messages
sse-endpoint: /sse
capabilities:
tool: true
resource: true
prompt: true
completion: true
开发完成的mcp你可以上传到modelscope的MCP广场,让更多的人关注到你的mcp或者higress的MCP广场
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。