使用SpringAI实现MCP服务并与Qwen集成使用
MCP(Model Context Protocol,模型上下文协议)是一种开放协议,旨在实现 大型语言模型(LLM) 应用与外部数据源、工具和服务之间的无缝集成,类似于网络中的 HTTP 协议或邮件中的 SMTP 协议。MCP 协议通过标准化模型与外部资源的交互方式,提升 LLM 应用的功能性、灵活性和可扩展性。
01.MCP 介绍
MCP(Model Context Protocol,模型上下文协议)是一种开放协议,旨在实现 大型语言模型(LLM) 应用与外部数据源、工具和服务之间的无缝集成,类似于网络中的 HTTP 协议或邮件中的 SMTP 协议。
MCP 协议通过标准化模型与外部资源的交互方式,提升 LLM 应用的功能性、灵活性和可扩展性。

MCP 的架构由四个关键部分组成:
- 1、主机(Host):主机是期望从服务器获取数据的人工智能应用,例如一个集成开发环境(IDE)、聊天机器人等。主机负责初始化和管理客户端、处理用户授权、管理上下文聚合等。
- 2、客户端(Client):客户端是主机与服务器之间的桥梁。它与服务器保持一对一的连接,负责消息路由、能力管理、协议协商和订阅管理等。客户端确保主机和服务器之间的通信清晰、安全且高效。
- 3、服务器(Server):服务器是提供外部数据和工具的组件。它通过工具、资源和提示模板为大型语言模型提供额外的上下文和功能。例如,一个服务器可以提供与Gmail、Slack等外部服务的API调用。
- 4、基础协议(Base Protocol):基础协议定义了主机、客户端和服务器之间如何通信。它包括消息格式、生命周期管理和传输机制等。

MCP 关键特性
- 1、标准化接口:定义统一的接口和协议,确保 LLM 与外部资源的兼容性。
- 2、动态集成:支持 LLM 动态访问和集成外部数据源和工具。
- 3、上下文感知:支持动态管理对话上下文,提升多轮对话的连贯性。
- 4、开放性和可扩展性:支持第三方开发者为 LLM 应用扩展功能和资源。
MCP 与 Function Calling 的区别:
| 特性 | MCP | Function Calling |
|---|---|---|
| 性质 | 协议 | 功能 |
| 范围 | 通用(多数据源、多功能) | 特定场景(单一数据源和功能) |
| 目标 | 统一接口,实现互操作 | 扩展模型能力 |
| 实现 | 基于标准协议(JSON-RPC 2.0,标准请求、响应和通知消息) | 依赖于特定模型实现 |
| 通信机制 | MCP 支持多种传输机制,包括本地的标准输入/输出(Stdio)和基于HTTP的服务器发送事件(SSE)。 | Function Calling 使用 HTTP 作为通信机制。 |
| 开发复杂度 | 低:通过统一协议实现多源兼容 | 高:需要为每个任务单独开发函数 |
| 复杂性 | 高:一次开发,可多场景使用 | 低:函数通常为特定任务设计 |
| 灵活性 | 高:支持动态适配和扩展 | 低:功能扩展需要额外开发 |
| 常见场景 | 复杂场景,如跨平台数据访问与整合 | 简单任务,如天气查询、翻译等 |
| 整合难度 | 一次标准化整合 | 每个API单独整合 |
| 实时双向通讯 | 支持 | 不支持 |
| 动态发现工具 | 支持 | 不支持 |
02.SpringAI MCP 介绍
Spring AI MCP,它是模型上下文协议(Model Context Protocol,MCP)的 Java SDK 实现。Spring AI 生态系统的这一新成员为 Java 平台带来了标准化的 AI 模型集成能力。
MCP 的核心是客户端-服务器(CS)架构,一个应用可以连接多个服务器。

Spring AI MCP 采用模块化架构,包含以下组件:
- 1、Spring AI 应用: 使用 Spring AI 框架构建希望通过 MCP 访问数据的生成式 AI 应用。
- 2、Spring MCP 客户端:与服务器保持 1:1 连接的 MCP 协议的 Spring AI 实现。
- 3、Spring MCP 服务器:轻量级程序,每个程序都通过标准化的模型上下文协议公开特定功能。
- 4、本地数据源:MCP 服务器可安全访问的计算机文件、数据库和服务。
- 5、远程服务:MCP 服务器可通过互联网(如 API)连接的外部系统。
03.使用 SpringAI 开发 MCP 服务
第一步:引入 spring-ai 依赖
<dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-starter-mcp-server-webmvc</artifactId></dependency><dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-bom</artifactId> <version>1.0.0-SNAPSHOT</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies></dependencyManagement>
第二步:开发 MCP Tool,并注册暴露 MCP Server
// 开发 MCP Tool@Servicepublic class WeatherService { @Tool(description = "根据城市名称获取天气预报") public String getWeatherByCity(@ToolParam(description = "城市名称") String city) { if (Objects.isNull(city)) { return "抱歉:城市名称不能为空!"; } // 模拟天气数据 Map<String, String> mockData = Map.of( "西安", "晴天", "北京", "小雨", "上海", "大雨" ); return mockData.getOrDefault(city, "抱歉:未查询到对应城市!"); }}// 注册暴露 MCP Server@Beanpublic ToolCallbackProvider weatherTools(WeatherService weatherService) { return MethodToolCallbackProvider.builder().toolObjects(weatherService).build();}
第三步:自测验证(SSE方式)
- 启动 MCP 服务(SSE方式需要手动启动)
public static void main(String[] args) { SpringApplication.run(ServerApplication.class, args);}
- 发起 SSE 请求
// 初始化 SSE Clientvar client = McpClient.sync(new HttpClientSseClientTransport("http://localhost:8080")).build(// 发起请求CallToolResult getWeatherByCity = client.callTool(new CallToolRequest("getWeatherByCity", Map.of("city", "上海")));System.out.println("上海天气是:" + getWeatherByCity);
第四步:自测验证(STDIO方式)
// 初始化 STDIO Clientvar stdioParams = ServerParameters.builder("java") .args("-Dspring.ai.mcp.server.stdio=true", "-Dspring.main.web-application-type=none", "-Dlogging.pattern.console=", "-jar", "/Users/admin/program/git-space/project/abc-demo/spring-ai-mcp/mcp-server/target/mcp-server-1.0.0-SNAPSHOT.jar") .build();var client = McpClient.sync(new StdioClientTransport(stdioParams)).build(// 发起请求CallToolResult getWeatherByCity = client.callTool(new CallToolRequest("getWeatherByCity", Map.of("city", "上海")));System.out.println("上海天气是:" + getWeatherByCity);
第五步:查看日志输出
// MCP服务 Tools列表:Available Tools = ListToolsResult[tools=[Tool[name=getWeatherByCity, description=根据城市名称获取天气预报, inputSchema=JsonSchema[type=object, properties={arg0={type=string, description=城市名称}}, required=[arg0], additionalProperties=false]]], nextCursor=null]// MCP服务 天气查询结果:上海 天气为:CallToolResult[content=[TextContent[audience=null, priority=null, text="小雨"]], isError=false]
04.Qwen集成 MCP 服务
当前,大型语言模型(LLM)并非普遍支持模型上下文协议(MCP),本文选择已支持MCP的 Qwen2.5 模型基座,使用 Cherry Studio 作为模型工具。
另外,由于上文示例过于简单,为确保演示效果从 glama.ai(已收集1K+MCP服务)选择2个开源 MCP服务进行集成演示。
- 1、mcp-trends-hub:该MCP服务,针对全网热点趋势一站式聚合,并提供检索查询服务。
- 2、mcp-npx-fetch:该MCP服务,支持获取各种格式的web内容,包括HTML、JSON、纯文本和Markdown等。
第一步:添加 MCP 服务配置
{ "mcpServers": { "trends-hub": { "isActive": true, "description": "针对全网热点趋势一站式聚合,并提供检索查询服务", "command": "npx", "args": [ "-y", "mcp-trends-hub@1.6.0" ] }, "fetch": { "isActive": true, "description": "支持获取各种格式的web内容,包括HTML、JSON、纯文本和Markdown等。", "command": "npx", "args": [ "-y", "@tokenizin/mcp-npx-fetch" ] } }}
第二步:配置 Qwen2.5 模型(启动 “工具” 特性)

第三步:集成使用(勾选 “MCP服务器”)


总结思考
随着MCP和推理模型的不断成熟,大模型应用架构逐渐在从 “工作流+技能” 向 “推理LLM+MCP”演进,为AI应用带来更大想象空间与可能性。
| 维度 | 工作流+技能 | 推理LLM+MCP |
|---|---|---|
| 决策机制 | 规则驱动 | 自主推理 |
| 扩展性 | 有限的内置技能库 | 动态的工具注册 |
| 交互方式 | 单向指令执行 | 双向数据流(主机↔服务器) |
| 典型系统 | Dify、ragflow | Claude Desktop、Cherry Studio、OpenAI Agents SDK |
如何学习大模型 AI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

第一阶段(10天):初阶应用
该阶段让大家对大模型 AI有一个最前沿的认识,对大模型 AI 的理解超过 95% 的人,可以在相关讨论时发表高级、不跟风、又接地气的见解,别人只会和 AI 聊天,而你能调教 AI,并能用代码将大模型和业务衔接。
- 大模型 AI 能干什么?
- 大模型是怎样获得「智能」的?
- 用好 AI 的核心心法
- 大模型应用业务架构
- 大模型应用技术架构
- 代码示例:向 GPT-3.5 灌入新知识
- 提示工程的意义和核心思想
- Prompt 典型构成
- 指令调优方法论
- 思维链和思维树
- Prompt 攻击和防范
- …
第二阶段(30天):高阶应用
该阶段我们正式进入大模型 AI 进阶实战学习,学会构造私有知识库,扩展 AI 的能力。快速开发一个完整的基于 agent 对话机器人。掌握功能最强的大模型开发框架,抓住最新的技术进展,适合 Python 和 JavaScript 程序员。
- 为什么要做 RAG
- 搭建一个简单的 ChatPDF
- 检索的基础概念
- 什么是向量表示(Embeddings)
- 向量数据库与向量检索
- 基于向量检索的 RAG
- 搭建 RAG 系统的扩展知识
- 混合检索与 RAG-Fusion 简介
- 向量模型本地部署
- …
第三阶段(30天):模型训练
恭喜你,如果学到这里,你基本可以找到一份大模型 AI相关的工作,自己也能训练 GPT 了!通过微调,训练自己的垂直大模型,能独立训练开源多模态大模型,掌握更多技术方案。
到此为止,大概2个月的时间。你已经成为了一名“AI小子”。那么你还想往下探索吗?
- 为什么要做 RAG
- 什么是模型
- 什么是模型训练
- 求解器 & 损失函数简介
- 小实验2:手写一个简单的神经网络并训练它
- 什么是训练/预训练/微调/轻量化微调
- Transformer结构简介
- 轻量化微调
- 实验数据集的构建
- …
第四阶段(20天):商业闭环
对全球大模型从性能、吞吐量、成本等方面有一定的认知,可以在云端和本地等多种环境下部署大模型,找到适合自己的项目/创业方向,做一名被 AI 武装的产品经理。
- 硬件选型
- 带你了解全球大模型
- 使用国产大模型服务
- 搭建 OpenAI 代理
- 热身:基于阿里云 PAI 部署 Stable Diffusion
- 在本地计算机运行大模型
- 大模型的私有化部署
- 基于 vLLM 部署大模型
- 案例:如何优雅地在阿里云私有部署开源大模型
- 部署一套开源 LLM 项目
- 内容安全
- 互联网信息服务算法备案
- …
学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。
如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。
这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)