Loading [MathJax]/jax/output/CommonHTML/config.js
部署DeepSeek模型,进群交流最in玩法!
立即加群
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >必看!SpringAI轻松构建MCP Client-Server架构

必看!SpringAI轻松构建MCP Client-Server架构

作者头像
磊哥
发布于 2025-03-30 12:28:52
发布于 2025-03-30 12:28:52
46413
代码可运行
举报
文章被收录于专栏:王磊的博客王磊的博客
运行总次数:3
代码可运行

MCP 这个概念相信大家已经听了无数次了,但不同人会有不同的解释,你可能也是听得云里雾里的。

不过没关系,今天这篇内容会通过 Spring AI 给你实现一个 MCP 的 Client 和 Server 架构,让你彻底搞懂 MCP 的概念,以及学会 MCP 的开发技能。

什么是MCP?

MCP 是 Model Context Protocol,模型上下文协议,它是由 Anthropic(Claude 大模型母公司)提出的开放协议,用于大模型连接外部“数据源”的一种协议。

它可以通俗的理解为 Java 界的 Spring Cloud Openfeign,只不过 Openfeign 是用于微服务通讯的,而 MCP 用于大模型通讯的,但它们都是为了通讯获取某项数据的一种机制,如下图所示:

为什么需要MCP?

MCP 存在的意义是它解决了大模型时代最关键的三个问题:数据孤岛、开发低效和生态碎片化等问题。

1.打破数据孤岛,让AI“连接万物”

大模型本身无法直接访问实时数据或本地资源(如数据库文件系统),传统方式需要手动复制粘贴或定制接口。MCP 通过标准化协议,让大模型像“插USB”一样直接调用外部工具和数据源,例如:

  • 查天气时自动调用气象 API,无需手动输入数据。
  • 分析企业数据时直接连接内部数据库,避免信息割裂。

2.降低开发成本,一次适配所有场景

在之前每个大模型(如 DeepSeek、ChatGPT)需要为每个工具单独开发接口(Function Calling),导致重复劳动,MCP 通过统一协议:

  • 开发者只需写一次 MCP 服务端,所有兼容 MCP 的模型都能调用。
  • 用户无需关心技术细节,大模型可直接操作本地文件、设计软件等。

3.提升安全性与互操作性

  • 安全性:MCP 内置权限控制和加密机制,比直接开放数据库更安全。
  • 生态统一:类似 USB 接口,MCP 让不同厂商的工具能“即插即用”,避免生态分裂。

4.推动AIAgent的进化

MCP 让大模型从“被动应答”变为“主动调用工具”,例如:

  • 自动抓取网页新闻补充实时知识。
  • 打开 Idea 编写一个“Hello World”的代码。

MCP 的诞生,相当于为AI世界建立了“通用语言”,让模型、数据和工具能高效协作,最终释放大模型的全部潜力。

MCP组成和执行流程

MCP 架构分为以下 3 部分:

  • 客户端:大模型应用(如 DeepSeek、ChatGPT)发起请求。
  • 服务器:中间层,连接具体工具(如数据库、设计软件)。
  • 资源:具体的数据或工具(如 Exce l文件、网页 API)。

运行流程

  1. 用户提问。
  2. 大模型通过 MCP 客户端发送请求。
  3. MCP 服务器接收指令。
  4. 调用对应工具(如数据库)执行。
  5. 返回结果给大模型。
  6. 生成最终回答。

Spring AI MCP 介绍

Spring AI MCP 是通过 Spring Boot 集成扩展了 MCP 的 Java SDK(开发工具),它同时提供了 Spring Boot 客户端和服务器的启动器,方便使用 Spring AI MCP 快速开发 AI 应用程序。

Spring AI MCP 实战

当前案例中,我们使用 MCP 实现一个天气查询小助手,其中包含的主要角色有:

  • MCP Server:MCP 服务提供方,提供天气查询功能。
  • MCP Client:MCP 客户端(大模型端)我们对接 DeepSeek LLM 实现对 MCP Server 的调用,从而实现天气预报的查询功能。

具体交互流程如下:

实现 MCP Server 代码编写

MCP Server 主要实现步骤如下:

  1. 添加 MCP Server 依赖。
  2. 设置 MCP 配置信息。
  3. 编写 MCP Server 服务代码。
  4. 将 MCP Server 进行暴露设置。

关键实现代码如下。

添加 MCP Server 依赖
代码语言:javascript
代码运行次数:2
运行
AI代码解释
复制
<dependencies>
  <dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-starter-mcp-server-webflux</artifactId>
  </dependency>
</dependencies>

<repositories>
  <repository>
    <name>Central Portal Snapshots</name>
    <id>central-portal-snapshots</id>
    <url>https://central.sonatype.com/repository/maven-snapshots/</url>
    <releases>
      <enabled>false</enabled>
    </releases>
    <snapshots>
      <enabled>true</enabled>
    </snapshots>
  </repository>
  <repository>
    <id>spring-milestones</id>
    <name>Spring Milestones</name>
    <url>https://repo.spring.io/milestone</url>
    <snapshots>
      <enabled>false</enabled>
    </snapshots>
  </repository>
  <repository>
    <id>spring-snapshots</id>
    <name>Spring Snapshots</name>
    <url>https://repo.spring.io/snapshot</url>
    <releases>
      <enabled>false</enabled>
    </releases>
  </repository>
</repositories>

MCP Server 依赖有三种类型:

  • 标准输入/输出 (STDIO):spring-ai-starter-mcp-server
  • Spring MVC(服务器发送的事件):spring-ai-starter-mcp-server-webmvc
  • Spring WebFlux(响应式 SSE):spring-ai-starter-mcp-server-webflux
设置 MCP 配置信息

MCP Server 包含以下配置信息:

配置项

描述

默认值

enabled

启用/禁用 MCP 服务器

TRUE

stdio

启用/禁用 stdio 传输

FALSE

name

用于标识的服务器名称

mcp-server

version

服务器版本

1.0.0

type

服务器类型 (SYNC/ASYNC)

SYNC

resource-change-notification

启用资源更改通知

TRUE

prompt-change-notification

启用提示更改通知

TRUE

tool-change-notification

启用工具更改通知

TRUE

tool-response-mime-type

(可选)每个工具名称的响应 MIME 类型。例如,将 mime 类型与工具名称相关联spring.ai.mcp.server.tool-response-mime-type.generateImage=image/pngimage/pnggenerateImage()

-

sse-message-endpoint

Web 传输的 SSE 终端节点路径

/mcp/message

其中 MCP Server 又分为以下两种类型。

服务器类型
  • 同步服务器:默认服务器类型,它专为应用程序中的简单请求-响应模式而设计。要启用此服务器类型,请在您的配置中设置。 激活后,它会自动处理同步工具规格的配置,spring.ai.mcp.server.type=SYNC。
  • 异步服务器:异步服务器实现使用非阻塞作并针对非阻塞作进行了优化。要启用此服务器类型,请使用配置您的应用程序。此服务器类型会自动设置具有内置 Project Reactor 支持的异步工具规范,spring.ai.mcp.server.type=ASYNC。
编写 MCP Server 服务代码

编写天气预报查询伪代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import org.springframework.ai.tool.annotation.Tool;
import org.springframework.stereotype.Service;

import java.util.Map;

@Service
public class WeatherService {

    @Tool(description = "根据城市名称获取天气预报")
    public String getWeatherByCity(String city) {
        Map<String, String> mockData = Map.of(
            "西安", "晴天",
            "北京", "小雨",
            "上海", "大雨"
        );
        return mockData.getOrDefault(city, "抱歉:未查询到对应城市!");
    }

}
将服务暴露出去
代码语言:javascript
代码运行次数:1
运行
AI代码解释
复制
@Bean
public ToolCallbackProvider weatherTools(WeatherService weatherService) {
return MethodToolCallbackProvider.builder().toolObjects(weatherService).build();
}

这样 MCP Server 就编写完成了。

实现 MCP Client 代码编写

MCP Client 主要实现步骤如下:

  1. 添加 MCP Client 相关依赖。
  2. 设置配置信息。
  3. 设置 ChatClient 对象(调用 MCP Server)。
  4. 编写测试代码调用 MCP Server。

核心实现代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import org.springframework.ai.chat.client.ChatClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ClientController {

    @Autowired
    private ChatClient chatClient;

    @RequestMapping("/chat")
    public String chat(@RequestParam(value = "msg",defaultValue = "今天天气如何?") String msg) {
        String response = chatClient.prompt()
        .user(msg)
        .call()
        .content();
        System.out.println("响应结果: " + response);
        return response;
    }

}

最终执行结果如下:

因为 MCP Server 只配置了 3 个城市,所以查询结果和预期相符:

想要获取完整案例的同学加V:vipStone【备注MCP】

小结

到这里使用 Spring AI 就实现了 MCP Client 和 Server 的调用了,可以看出 MCP 的推出只是为了增强大模型的能力的,有了 MCP 协议之后,任何大模型就可以调用任意实现了 MCP Server 的服务了,这样就无线扩充了大模型的能力,为 AI 的发展提供了标准的协议和便利的对接。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2025-03-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
1 条评论
热度
最新
能给一下服务端和客户端的工程源码吗,谢谢
能给一下服务端和客户端的工程源码吗,谢谢
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
Java 实现 MCP Server 以及常用 MCP 服务分享
MCP 前段时间在 AI 领域 引发了 广泛关注,特别是在 各大海内外技术社区 中,大家热烈讨论,热度非常高,本文将带领大家使用 java 语言实现一个 mcp,揭开 mcp 这神秘的面纱,本文最后也推荐给大家一些常用的 MCP 服务,开箱即用 0 成本,希望对大家有一定的帮助。
Lcry
2025/04/24
1810
Java 实现 MCP Server 以及常用 MCP 服务分享
牛逼!实操 SpringBoot+MCP!
大家好,欢迎来到程序视点!我是你们的老朋友.小二!需要IDEA、PyCharm等全家桶激活的小伙伴,可以关注微信公众号【程序视点】,回复【vip】,获取激活优惠!
程序视点
2025/04/15
5660
牛逼!实操 SpringBoot+MCP!
用 Go 语言轻松构建 MCP 客户端
](https://cloud.tencent.com/developer/article/2509998)。
陈明勇
2025/04/03
8862
用 Go 语言轻松构建 MCP 客户端
聊聊SpringAI流式输出的底层实现?
在 Spring AI 中,流式输出(Streaming Output)是一种逐步返回 AI 模型生成结果的技术,允许服务器将响应内容分批次实时传输给客户端,而不是等待全部内容生成完毕后再一次性返回。
磊哥
2025/04/24
490
聊聊SpringAI流式输出的底层实现?
工良出品 | 长文讲解 MCP 和案例实战
示例项目地址:https://github.com/whuanle/mcpdemo
痴者工良
2025/04/22
4060
工良出品 | 长文讲解 MCP 和案例实战
大语言模型交互协议 MCP SDK Go-MCP 正式开源!
今天,ThinkInAI 团队(前身为 GoCN 团队)自豪地宣布,基于 Go 语言的大模型交互协议(Model Context Protocol)SDK —— Go-MCP 正式开源!
深度学习与Python
2025/04/10
7440
大语言模型交互协议 MCP SDK Go-MCP 正式开源!
一文彻底搞懂 MCP:AI 大模型的标准化工具箱
MCP 最近在 AI 领域 引发了 广泛关注,特别是在 海外各大社区 中,大家热烈讨论,热度 相当高。
程序员NEO
2025/04/09
3.7K5
一文彻底搞懂 MCP:AI 大模型的标准化工具箱
如何用Spring AI构建MCP Client-Server架构
现代 Web 应用正加速与大语言模型(LLMs)深度融合,构建超越传统问答场景的智能解决方案。为突破模型知识边界,增强上下文理解能力,开发者普遍采用多源数据集成策略,将 LLM 与搜索引擎、数据库、文件系统等外部资源互联。然而,异构数据源的协议差异与格式壁垒,往往导致集成复杂度激增,成为制约 AI 应用规模化落地的关键瓶颈。因此,Anthropic公司推出了模型上下文协议(Model Context Protocol, MCP),通过标准化接口为 AI 应用与外部数据源建立统一交互通道。这一协议体系不仅实现了数据获取与操作的规范化,更构建起可扩展的智能体开发框架,使开发者能够基于原生 LLM 能力快速构建复杂工作流。
程序猿DD
2025/03/27
1.2K0
如何用Spring AI构建MCP Client-Server架构
spring-ai-starter-mcp-client小试牛刀
org/springframework/ai/mcp/client/autoconfigure/McpClientAutoConfiguration.java
code4it
2025/03/31
2030
spring-ai-starter-mcp-client小试牛刀
一文读懂 MCP!大模型如何用它连接世界,打造更智能的 AI Agent?
最近,MCP[1](模型上下文协议,Model Context Protocol)在 AI 圈子里火了起来。然而,很多人对它的概念仍然感到困惑,包括我在最初接触时也是如此。
AgenticAI
2025/03/19
8860
一文读懂 MCP!大模型如何用它连接世界,打造更智能的 AI Agent?
spring-ai-starter-mcp-client小试牛刀
org/springframework/ai/mcp/client/autoconfigure/McpClientAutoConfiguration.java
code4it
2025/03/29
1630
spring-ai-starter-mcp-client小试牛刀
SpringBoot系列之Spring AI+DeekSeek创建AI应用
随着人工智能技术的飞速发展,AI 已经成为现代软件应用中不可或缺的一部分。从智能对话系统到内容生成工具,AI 的应用场景日益丰富。Spring AI 是 Spring 官方推出的用于简化 AI 集成的框架,而 DeepSeek 是一个强大的 AI 平台,提供了高效、灵活的语言模型和 API 接口。通过将 Spring AI 与 DeepSeek 结合,开发者可以在 Spring Boot 应用中快速实现智能对话、文本生成等 AI 功能。
SmileNicky
2025/03/04
6200
SpringBoot系列之Spring AI+DeekSeek创建AI应用
聊聊spring ai的mcp server
mcp提供了java sdk,同时还提供了spring webflux及mvc的sse实现
code4it
2025/03/26
6040
聊聊spring ai的mcp server
Spring AI + DeepSeek:轻松打造你的第一个 AI 应用
在当今数字化时代,人工智能(AI)已成为推动技术进步和创新的核心力量。从智能语音助手到图像识别系统,从个性化推荐引擎到自动化流程,AI 的应用无处不在,正深刻地改变着我们的生活和工作方式。
用户1220090
2025/02/27
2970
Spring AI + DeepSeek:轻松打造你的第一个 AI 应用
对话即服务:Spring Boot整合MCP让你的CRUD系统秒变AI助手
随着人工智能的飞速发展,大语言模型(LLM)正在革命性地重塑用户与软件的交互范式。想象一下这样的场景:用户无需钻研复杂的API文档或者在繁琐的表单间来回切换,只需通过自然语言直接与系统对话——"帮我查找所有2023年出版的图书"、"创建一个新用户叫张三,邮箱是zhangsan@example.com"。这种直观、流畅的交互方式不仅能显著降低新用户的学习曲线,更能大幅削减B端系统的培训成本和实施周期,让企业应用变得更为简单和高效。
别惹CC
2025/03/20
3K12
# 一文读懂 MCP!大模型如何用它连接世界,打造更智能的 AI Agent?
最近,MCP(模型上下文协议,Model Context Protocol)在 AI 圈子里火了起来。然而,很多人对它的概念仍然感到困惑,包括我在最初接触时也是如此。
AgenticAI
2025/03/19
2K0
# 一文读懂 MCP!大模型如何用它连接世界,打造更智能的 AI Agent?
MCP(Model Context Protocol)好比大模型外挂!
最近Anthropic主导发布了MCP(Model Context Protocol,模型上下文协议)后,着实真真火了一把。熟悉AI大模型的人对Anthropic应该不会陌生,Claude 3.5 Sonnet模型就是他们发布的,包括现在的最强编程AI模型 3.7 Sonnet。今天我们来刨析下什么是MCP,AI大模型下,需要MCP吗?
有一只柴犬
2025/03/23
6311
MCP(Model Context Protocol)好比大模型外挂!
Spring AI实战之一:快速体验(OpenAI)
程序员欣宸
2024/05/26
2.1K0
Spring AI实战之一:快速体验(OpenAI)
SpringAI+Ollama三部曲之二:细说开发
程序员欣宸
2024/05/26
2K0
SpringAI+Ollama三部曲之二:细说开发
JeecgBoot 低代码平台快速集成 Spring AI
JeecgBoot 是一款基于代码生成器的低代码开发平台!前后端分离架构 SpringBoot2.x 和 3.x,SpringCloud,Ant Design Vue3,Mybatis-plus,Shiro,JWT,支持微服务。强大的代码生成器让前后端代码一键生成,实现低代码开发!JeecgBoot 引领新的低代码开发模式 (OnlineCoding-> 代码生成器 -> 手工 MERGE), 帮助解决 Java 项目 70% 的重复工作,让开发更多关注业务。既能快速提高效率,节省研发成本,同时又不失灵活性!
JEECG
2024/08/05
2780
JeecgBoot 低代码平台快速集成 Spring AI
推荐阅读
相关推荐
Java 实现 MCP Server 以及常用 MCP 服务分享
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档