Spring-AI之MCP
引言
在 AI 技术快速发展的今天,模型与外部数据源、工具的集成效率成为制约其应用落地的关键瓶颈。传统模式下,每个数据源或工具都需要单独开发 API 接口,导致重复劳动与扩展性不足。在AI项目开发中可以发现,集成AI模型复杂,现有框架如LangChain Tools、LlamaIndex和Vercel AI SDK存在问题。LangChain和LlamaIndex代码抽象高,商业化过重;Vercel AI SDK与Nextjs绑定过深。
一 什么是MCP(Model Context Protocol)
定义
MCP(Model Context Protocol,模型上下文协议) ,2024年11月底,由 Anthropic 推出的一种开放标准,旨在统一大型语言模型(LLM)与外部数据源和工具之间的通信协议。MCP 的主要目的在于解决当前 AI 模型因数据孤岛限制而无法充分发挥潜力的难题,MCP 使得 AI 应用能够安全地访问和操作本地及远程数据,为 AI 应用提供了连接万物的接口。
(旨在通过结构化数据格式和标准化通信流程,帮助模型在不同场景下高效理解、记忆和利用上下文信息。它解决了传统模型在处理长对话、多轮交互或复杂任务时上下文丢失、信息冗余等问题。)
通过标准化的架构设计,为 AI 模型与外部系统的无缝连接提供了 “即插即用” 的解决方案,被誉为 AI 时代的 “USB-C 接口”。
MCP的优势在于:一是开放标准利于服务商开发API,二是避免开发者重复造轮子,可利用现有MCP服务增强Agent。
附官方链接: https://modelcontextprotocol.io/introduction
Function Calling是AI模型调用函数的机制,MCP是一个标准协议,使AI模型与API无缝交互,而AI Agent是一个自主运行的智能系统,利用Function Calling和MCP来分析和执行任务,实现特定目标。
价值
- 打破数据孤岛
- 简化开发流程
- 增强模型能力
举个栗子,在过去,为了让大模型等 AI 应用使用我们的数据,要么复制粘贴,要么上传下载,非常麻烦。
即使是最强大模型也会受到数据隔离的限制,形成信息孤岛,要做出更强大的模型,每个新数据源都需要自己重新定制实现,使真正互联的系统难以扩展,存在很多的局限性。
现在,MCP 可以直接在 AI 与数据(包括本地数据和互联网数据)之间架起一座桥梁,通过 MCP 服务器和 MCP 客户端,大家只要都遵循这套协议,就能实现“万物互联”。
有了MCP,可以和数据和文件系统、开发工具、Web 和浏览器自动化、生产力和通信、各种社区生态能力全部集成,实现强大的协作工作能力,它的价值远不可估量。
与传统 API 集成的区别
功能 | 传统 API | MCP 协议 |
整合难度 | 需为每个工具单独开发接口 | 标准化协议一次整合所有工具 |
实时双向通信 | 不支持 | 支持(如 AI 实时获取数据库更新) |
动态发现工具 | 不支持 | 支持(模型自动识别可用工具) |
扩展性 | 弱(需额外开发) | 强(即插即用) |
安全性 | 分散管理 | 统一权限控制 |
MCP 与 Function Calling 的区别
这两种技术都旨在增强 AI 模型与外部数据的交互能力,但 MCP 不止可以增强 AI 模型,还可以是其他的应用系统。
安全问题
MCP 通过标准化的数据访问接口,大大减少了直接接触敏感数据的环节,降低了数据泄露的风险。
还有,MCP 内置了安全机制,确保只有经过验证的请求才能访问特定资源,相当于在数据安全又加上了一道防线。同时,MCP协议还支持多种加密算法,以确保数据在传输过程中的安全性。
例如,MCP 服务器自己控制资源,不需要将 API 密钥等敏感信息提供给 LLM 提供商。这样一来,即使 LLM 提供商受到攻击,攻击者也无法获取到这些敏感信息。
二 核心架构与原理
MCP 采用客户端 - 服务器模型(Client-Server Model),其核心组件包括:
- MCP 主机(MCP Hosts):发起请求的LLM应用程序(例如 Claude Desktop、IDE 或 AI 工具)。
- MCP 客户端(MCP Clients):在主机程序内部,与 MCP server 保持 1:1的连接。负责与 MCP 服务器通信,传递模型的意图与请求。
- MCP 服务器 (MCP Servers):为 MCP client 提供上下文、工具 和 prompt 信息。作为连接 AI 模型与外部系统的中介,承担 “翻译” 与 “桥梁” 角色。(解析模型意图,调用外部资源执行操作,并将结果返回模型)
- 资源 (Resources):本地或外部资源。(如文件、数据库、API 等)
附官方架构图:
MCP Client
- MCP client 首先从 MCP server 获取可用的工具列表。
- 将用户的查询连同工具描述通过 function calling 一起发送给 LLM。
- LLM 决定是否需要使用工具以及使用哪些工具。
- 如果需要使用工具,MCP client 会通过 MCP server 执行相应的工具调用。
- 工具调用的结果会被发送回 LLM。
- LLM 基于所有信息生成自然语言响应。
- 最后将响应展示给用户。
MCP Server
MCP server 是 MCP 架构中的关键组件,它可以提供 3 种主要类型的功能:
- 资源(Resources):类似文件的数据,可以被客户端读取,如 API 响应或文件内容。
- 工具(Tools):可以被 LLM 调用的函数(需要用户批准)。
- 提示(Prompts):预先编写的模板,帮助用户完成特定任务。
这些功能使 MCP server 能够为 AI 应用提供丰富的上下文信息和操作能力,从而增强 LLM 的实用性和灵活性。
通信机制
MCP 协议支持两种主要的通信机制:基于标准输入输出的本地通信和基于SSE(Server-Sent Events)的远程通信。
这两种机制都使用 JSON-RPC 2.0 格式进行消息传输,确保了通信的标准化和可扩展性。
- 本地通信:通过 stdio 传输数据,适用于在同一台机器上运行的客户端和服务器之间的通信。
- 远程通信:利用 SSE 与 HTTP 结合,实现跨网络的实时数据传输,适用于需要访问远程资源或分布式部署的场景。
附一些官方支持的 SDK
我们这里主要看 Java 的 https://github.com/modelcontextprotocol/java-sdk
Spring AI 正好有对其集成,很好。
三 Spring AI 集成 MCP
Spring AI MCP
扩展了MCP Java SDK与Spring Boot集成,提供客户端和服务器启动器。 使用Spring Initializer引导带有MCP支持的AI应用程序。
Spring AI 通过三大模块实现 MCP 协议与 Java 生态的深度整合:
- MCP 客户端库
- 工具适配器
- 安全增强组件
The Java MCP implementation follows a three-layer architecture:
附 Spring AI MCP 官方文档:https://docs.spring.io/spring-ai/reference/api/mcp/mcp-overview.html
MCP Client
MCP Server
典型的应用场景
- 自然语言驱动的 Docker 管理
https://www.51cto.com/article/807150.html
- 智能数据库查询
https://juejin.cn/post/7483454392979570700
- Git 仓库只能管理
https://juejin.cn/post/7474220344699666458
四 未来发展方向
技术演进路径
- 异步流支持:通过 SSE 实现实时数据推送(如日志监控)
- 多云适配:集成 Kubernetes 实现服务动态扩缩容
- 低代码开发:通过 Spring AI CLI 生成 MCP 接口文
生态建设规划
- 工具市场:构建 Spring AI 官方工具库(含 MySQL、Redis 等主流服务)
- 行业解决方案:开发金融、医疗等垂直领域的 MCP 插件
- 性能优化:引入 AOT 编译提升 MCP 服务器响应速度
五 总结
MCP 协议与 Spring AI 的深度整合,为企业级 AI 应用提供了标准化、安全化、高效化的开发范式。通过统一的通信协议和生态工具,开发者可将精力聚焦于业务创新,而非底层集成。未来,随着 MCP 生态的持续完善,Spring AI 将推动更多行业实现 "对话即服务" 的智能协作革命。
反思
如何应用到我们的业务上,或着我们应该如何跟上这场革命的浪潮,成为飞在风口上的🐷。