Spring AI 1.0.0-M5 版本框架支持 MCP 协议了,对于 MCP 相关的内容,请关注专栏# Claude MCP 模型上下文协议 进行学习,该专栏会不定期更新相关内容,本文主要介绍如何使用 Spring AI 实现 MCP Client 以及 MCP Server等内容。
什么是Mcp
Model Context Protocol 是Anthropic 于2024年11月重磅开源的「模型上下文协议」MCP。其是一种开放的通信协议,是人工智能领域的 “USB 接口”,在大模型和其他数据源(数据、工具、开发环境等)之间建立了双向、并且更加安全的连接。
Mcp 将LLM的数据孤岛被彻底打破,LLM应用和外部数据源、工具都将无缝集成。目标是实现LLM应用程序与外部数据源和工具之间的无缝集成。
Spring AI 如何集成 MCP 协议
Spring AI 提供 Mcp Client 、 Mcp Server 开箱即用 Starters 和 Mcp Utils 相关工具。
Mcp Client Boot Starters
对于 Mcp Client,Spring AI 提供了如下两个 Starter 集成 MCP Client;
- spring-ai-mcp-client-spring-boot-starter: 实现基于 STDIO 和 HTTP 的 SSE 传输协议的 Mcp Client
- spring-ai-mcp-client-webflux-spring-boot-starter: 实现基于 WebFlux 的 SSE 传输协议的 Mcp Client
Mcp Client Boot Starter 支持的能力如下;
- 管理多个客户端实例
- 自动初始化客户端,spring.ai.mcp.client.enabled 开关可以控制是否自动初始化
- 支持多种传输方式,stdio、sse
- 与 Spring AI 工具执行框架无缝结合,Spring AI 框架支持工具执行
- Mcp Client 生命周期管理、在应用程序上下文关闭时自动清理资源。
- 支持 Mcp Client 扩展,定制客户端, 比如;
- 请求配置,如:超时时间等。
- 文件系统权限访问控制。
- 服务端资源、工具、提示变更通知、日志处理等
Mcp Server Boot Starters
对于 Mcp Server, Spring AI 提供了如下三个 Starter 集成 Mcp Server;
- spring-ai-mcp-server-spring-boot-starter: 实现支持 STDIO 传输协议的 Mcp Server
- spring-ai-mcp-server-webmvc-spring-boot-starter: 实现基于 webmvc 的 SSE 传输协议的 Mcp Server
- spring-ai-mcp-server-webflux-spring-boot-starter: 实现基于 webflux 的 SSE 传输协议的 Mcp Server
根据业务场景,可以选择其中的 Mcp Server Starter 来实现一个 Mcp Server
Mcp Server Boot Starter 支持的能力如下;
- 自动配置 MCP 服务端组件 (资源、工具、提示词)。
- 支持同步和异步两种服务模式。
- 灵活的工具、资源和提示注册和更改通知功能。
目前有很多现成的 Mcp Server:
在本文示例代码将选择 server-filesystem server 演示如何使用它。
Mcp Utilities
Mcp 实用程序为将模型上下文协议与 Spring AI 应用程序集成提供了基础支持。实现了 Spring AI 的工具系统和 Mcp 服务器之间的无缝通信,支持同步和异步作。
ToolCallback
使 MCP 工具适配 Spring AI 的工具接口,同时支持同步和异步执行。
ToolCallbackProvider
从 MCP 客户端发现并获取 MCP 工具。
Spring Mcp Client 实现示例
基于 ollama qwen2.5:latest + @modelcontextprotocol/server-filesystem 实现一个本地智能文件管理服务
maven 依赖
pom代码解读复制代码<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-mcp-client-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-ollama-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-bom</artifactId>
<version>${spring-ai.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
配置文件
properties代码解读复制代码spring.ai.ollama.base-url=http://localhost:11434
spring.ai.ollama.chat.model=qwen2.5:latest
# MCP Client Configuration
spring.ai.mcp.client.enabled=true
spring.ai.mcp.client.name=mcp-client
spring.ai.mcp.client.version=1.0.0
spring.ai.mcp.client.type=SYNC
spring.ai.mcp.client.request-timeout=30s
spring.ai.mcp.client.stdio.servers-configuration=classpath:/mcp-servers-config.json
mcp-servers-config.json
json代码解读复制代码{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-filesystem",
"."
]
}
}
}
特别说明:对于 args 的第三个参数,可以指定你想要访问的文件路径,可以是多个,比如: “args”: [ “-y”, “@modelcontextprotocol/server-filesystem”, “.”, “/Users” ]
代码实现
java代码解读复制代码package com.ivy.mcp;
import jakarta.annotation.Resource;
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.ai.mcp.SyncMcpToolCallbackProvider;
import org.springframework.ai.ollama.OllamaChatModel;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@RestController
public static class ChatController {
@Resource
private OllamaChatModel ollamaChatModel;
@Resource
private SyncMcpToolCallbackProvider toolCallbackProvider;
@GetMapping("/chat")
public String call(@RequestParam String input) {
ChatClient chatClient = ChatClient.builder(ollamaChatModel)
.defaultTools(toolCallbackProvider.getToolCallbacks())
.build();
return chatClient.prompt(input).call().content();
}
}
}
测试用例
特别说明:在启动时有些同学可能会报错,大部分原因是因为本地没有安装 npx,自行安装即可。
启动应用程序:localhost:8080/chat?input=
-
有哪些工具可以使用
-
帮我创建一个文件夹 mcp
-
帮我在文件夹mcp下创建一个 test.txt 文件,并写入 hello mcp!
-
帮我将 mcp/test.txt 中 hello mcp 改为 Hello MCP!
通过运行如上测试用例观察运行效果是否符合要求。在测试过程中我使用的本地大模型,但是受限于电脑配置,运行速度比较慢,大家也可以换成别的大模型。
总结
本文主要对 Spring AI 框架集成 Mcp 的一些能力,并实现一个 Mcp Client 调用现成的 @modelcontextprotocol/server-filesystem 实现一个智能本地文件管理服务。
后续还要实现两种场景;
- 集成多个 Mcp Server
- 自己实现一个 Mcp Server [支持 stdio 和 sse ]
本文实例代码可以参考 github.com/Fj-ivy/clau…
如何零基础入门 / 学习AI大模型?
大模型时代,火爆出圈的LLM大模型让程序员们开始重新评估自己的本领。 “AI会取代那些行业?
”“谁的饭碗又将不保了?
”等问题热议不断。
不如成为「掌握AI工具的技术人」
,毕竟AI时代,谁先尝试,谁就能占得先机!
想正式转到一些新兴的 AI 行业,不仅需要系统的学习AI大模型。同时也要跟已有的技能结合,辅助编程提效,或上手实操应用,增加自己的职场竞争力。
但是LLM相关的内容很多,现在网上的老课程老教材关于LLM又太少。所以现在小白入门就只能靠自学,学习成本和门槛很高
那么我作为一名热心肠的互联网老兵,我意识到有很多经验和知识值得分享给大家,希望可以帮助到更多学习大模型的人!至于能学习到多少就看你的学习毅力和能力了 。我已将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费
】
👉 福利来袭
CSDN大礼包:《2025最全AI大模型学习资源包》免费分享,安全可点 👈
全套AGI大模型学习大纲+路线
AI大模型时代的学习之旅:从基础到前沿,掌握人工智能的核心技能!
640套AI大模型报告合集
这套包含640份报告的合集,涵盖了AI大模型的理论研究、技术实现、行业应用等多个方面。无论您是科研人员、工程师,还是对AI大模型感兴趣的爱好者,这套报告合集都将为您提供宝贵的信息和启示。
👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;
• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;
• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;
• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。
👉 福利来袭
CSDN大礼包:《2025最全AI大模型学习资源包》免费分享,安全可点 👈
这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费
】
作为普通人,入局大模型时代需要持续学习和实践,不断提高自己的技能和认知水平,同时也需要有责任感和伦理意识,为人工智能的健康发展贡献力量。