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

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

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

什么是MCP?

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

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

alt

为什么需要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 的调用,从而实现天气预报的查询功能。

具体交互流程如下:

alt

实现 MCP Server 代码编写

MCP Server 主要实现步骤如下:

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

关键实现代码如下。

添加 MCP Server 依赖

<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 服务代码

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

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, "抱歉:未查询到对应城市!");
    }

}

将服务暴露出去

@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。

核心实现代码如下:

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;
    }

}

最终执行结果如下:

alt

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

alt

小结

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

#聊聊我眼中的AI##ai##java#
Java面试精讲 文章被收录于专栏

Java常见面试题、场景题、企业真题精讲。

全部评论
有具体项目吗
1 回复 分享
发布于 03-27 12:15 广西
大模型时代必学技能
点赞 回复 分享
发布于 04-16 16:56 广西

相关推荐

MCP(模型上下文协议)可以理解成一个“AI翻译官+智能管家”的组合体,它的核心作用是让AI大模型能更流畅地与外部世界“对话”和“合作”。用生活化的例子来解释:1.&nbsp;MCP是AI的“万能翻译官”假设你有一个只会说中文的AI助手,但你想让它帮你操作家里的英文智能音箱、查询法国天气、甚至调用公司的数据库。这时候,MCP就像一个翻译官:统一语言:它把AI的“中文指令”翻译成各种设备/系统能听懂的语言(比如API接口、数据库查询语句),同时把外部系统的反馈再翻译回中文告诉AI。打破隔阂:无论设备是国产的还是进口的,只要支持MCP协议,AI都能直接“喊话”操作,不用为每个设备单独学外语。2.&nbsp;MCP是AI的“任务调度员”当AI需要完成复杂任务时(比如“帮我订一张明天上海飞北京的机票,然后发邮件通知同事”),MCP会像管家一样拆分任务:分步执行:先让AI查航班信息,再调用订票接口,最后通过邮件工具发通知。自动纠错:如果某个步骤失败(比如航班售罄),MCP会告诉AI重新规划,比如“换下午的航班”或“改高铁”。3.&nbsp;MCP是AI的“记忆助手”大模型虽然聪明,但容易“健忘”(比如对话太长就记不住上下文)。MCP的作用是:整理重点:把长对话压缩成“关键词+逻辑链”,比如把“用户昨天说喜欢川菜,今天要请客”简化成“用户需求:川菜餐厅推荐,6人,预算500元”。按需调用:当AI需要回忆细节时,MCP会快速“翻笔记”,而不是让AI从头读所有对话。4.&nbsp;MCP是AI的“安全保镖”当AI需要操作敏感信息(比如银行账户、医疗记录)时,MCP会:检查权限:确认AI有资格访问这些数据(比如用户已授权)。加密通道:像“保密通话”一样,确保数据传输过程中不被窃听。MCP让AI从“学霸”变成“社会人”没有MCP时,AI像是一个只会读书的学霸,虽然知识渊博,但不会用手机、不会点外卖、不会打车。有了MCP,AI就像一个精通多国语言、会规划行程、能处理突发状况的“社会人”,能无缝融入我们的日常生活和工作场景。&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
点赞 评论 收藏
分享
评论
3
11
分享

创作者周榜

更多
牛客网
牛客企业服务