关键词:Spring AI Alibaba、Model Context Protocol、MCP Server、Qwen、云原生、Agent、最佳实践
0. 为什么我一定要关心 MCP?
-
模型越来越聪明,数据却越来越分散——LLM 想读本地文件、想调外部接口,统统得靠「中间人」把上下文塞回去。
-
Anthropic 主导的 Model Context Protocol (MCP) 正式把这个「中间人」标准化:像 USB 一样,任何模型、任何数据源插上就能用。
-
-
Spring AI Alibaba 率先在 Java 生态内落地 MCP,一句话集成阿里云 Qwen、DashScope 以及一票第三方 LLM,还顺带把日志、观测、配置都打包好了。
一句话总结:学会 MCP = 拥抱下一代「AI × 业务」的新连接范式,能让你的 Agent、RAG、Workflow 立刻拥有“读万卷书、行千里路”的能力。
1. 项目骨架:两行命令拉起「骨骼清奇」的 MCP 服务
git clone https://github.com/springaialibaba/spring-ai-alibaba-examples.git
cd spring-ai-alibaba-examples/spring-ai-alibaba-mcp-example/starter-example
./mvnw spring-boot:run # 初体验
目录结构一览
starter-example
├── application.yaml # 关键配置:模型&Server 端口
├── McpFilesystemServer.java# 本地文件系统 Server 示例
├── MsmClientDemo.java # 如何通过 Client 调用
└── …
踩坑提示:如果你在公司网络无法
raw.githubusercontent.com
,记得配好代理或者把代码搬到自建 GitLab。
2. 关键依赖一站配齐
<dependencyManagement>
<dependency>
<groupId>com.alibaba.spring.ai</groupId>
<artifactId>spring-ai-alibaba-bom</artifactId>
<version>1.0.0-M6.1</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencyManagement>
<!-- MCP starter -->
<dependency>
<groupId>com.alibaba.spring.ai</groupId>
<artifactId>spring-ai-mcp-starter</artifactId>
</dependency>
<!-- 想接 Qwen? 再加这一行 -->
<dependency>
<groupId>com.alibaba.spring.ai</groupId>
<artifactId>spring-ai-qwen-starter</artifactId>
</dependency>
三个亮点
-
BOM 管理——告别版本地狱,所有子模块同一个版本号。
-
Starter 化——和 Spring Cloud 一样,即插即用。
-
无侵入——你的业务 Bean 依旧是
@Service
,只是多了个@McpTool
而已。
3. 五分钟写出一个「读本地 Markdown 并总结」的 MCP Server
@Component
@McpServer(path = "/fs")
public class FilesystemMcpServer {
@McpTool(name = "read_markdown", description = "读取并总结指定 Markdown")
public String readMarkdown(String absolutePath) throws IOException {
var content = Files.readString(Path.of(absolutePath));
// 使用 Qwen 快速总结
ChatResponse res = aiChatClient
.call("用中文总结以下 Markdown 的关键点:\n" + content);
return res.getContent();
}
}
启动后,Server 会自动暴露 SSE + HTTP/JSON 两种 MCP 端点:
POST http://localhost:8080/mcp/v1/fs/read_markdown
{
"absolutePath": "/Users/you/Notes/LLM.md"
}
4. Client 侧体验:像调用普通 REST 一样丝滑
McpClient client = new McpClient("http://localhost:8080/mcp/v1");
String summary = client.tool("fs/read_markdown")
.param("absolutePath", "/tmp/demo.md")
.call(String.class);
System.out.println(summary);
串联 Agent:配合
@EnableAiAgent
,让 Qwen 在聊天中自动决定何时调用read_markdown
工具,“会聊天”+“会动手”一把梭。
5. 容器化部署:让 MCP Server 跑进 K8s
FROM eclipse-temurin:17-jre as base
ARG JAR_FILE=target/mcp-demo.jar
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java", "-jar", "/app.jar"]
再加一个最小化的 Helm Chart,10 秒钟把 Agent 接到你们的云原生平台,顺便复用现成的 Observability Example,Prometheus + Grafana 打点开箱即用。
6. 性能与安全实战
场景 | 常见问题 | 优化打法 |
---|---|---|
高频小文件读取 | I/O 抖动 | 加 LRU Cache 或用 Redis/GemFire 做二级缓存 |
并发请求打满 LLM QPS | 模型限流 | RateLimiter + Resilience4J Retry 双保险 |
内网敏感数据 | 权限控制 | 在 MCP Server 侧加 Spring Security + OIDC;工具级别 @PreAuthorize 细粒度鉴权 |
长流式输出 | 浏览器 WS 断连 | 启用 SSE Transport,Header Cache-Control: no-transform |
7. 写在最后:让你的 AI 服务「长肌肉」
-
MCP 只是开始,Spring AI Alibaba 还有 Prompt 模版、RAG、Graph、Tool Calling 等能力,完全可以拼出一条从数据到 Agent 的全链路流水线。
-
官方 Example 仓库 每周都在更新,Star 一下随时抄作业:https://github.com/springaialibaba/spring-ai-alibaba-examples
📚 延伸阅读
《Spring AI Agent 集成本地文件数据(MCP 实战)》citeturn7search0
Spring 官方博客《Announcing Spring AI MCP》citeturn7search6
AI 圈热议:Axios——“MCP will glue AI to every app you know.”citeturn7news10
觉得有帮助? 点个 ⭐Star + 关注评论区,一起探索下一代 AI 应用架构!