电子展会
HOME
电子展会
正文内容
2026年4月:Spring AI实现McpServer全攻略(附代码与面试考点)
发布时间 : 2026-04-21
作者 : 小编
访问数量 : 10
扫码分享至微信

在2026年的AI工程化浪潮中,医学助手AI(此处为占位符,实际指基于Spring AI构建的医疗智能助手)背后的关键技术——MCP(Model Context Protocol)——正成为连接大模型与外部工具的核心桥梁-15。很多开发者在学习过程中普遍存在一个困境:代码能跑通,但一问原理就卡壳;@Tool和MCP Server的概念总是搞混;面试中被问到“MCP底层依赖什么”时支支吾吾答不上来。本文将带你从零到一,彻底搞懂Spring AI中McpServer的实现原理,配套完整代码示例和高频面试考点,帮你打通从“会用”到“懂原理”的最后一公里。

一、痛点切入:为什么需要MCP Server?

在MCP协议出现之前,如果你想给大模型接入外部工具(比如查询天气、操作数据库),基本上只能手写Function Calling。来看一段典型的传统实现:

java
复制
下载
// 传统方式:手写Function Calling,需要定义JSON Schema

@Configuration public class TraditionalToolConfig { @Bean public Function<WeatherRequest, WeatherResponse> weatherFunction() { return request -> { // 业务逻辑 return fetchWeather(request.getCity()); }; } // 还需要手动注册到ChatClient,每个模型厂商的注册方式还不一样... }

这种方式的痛点非常明显:你得自己定义JSON Schema,处理模型幻觉,管理鉴权和限流,最麻烦的是每个模型厂商的接口各不相同——OpenAI一套、Claude一套、文心通义又各有各的脾气,完全是“一次接入,终身维护”-6

MCP协议正是为解决这些问题而生的。它由Anthropic在2024年底开源,截至2026年初,已有超过10,000个活跃MCP服务器在生产环境运行,月SDK下载量达到9700万次-15MCP的核心思想就是标准化——就像HTTP协议让浏览器能和任何网站通信,MCP让任何AI应用都能以统一的方式发现和使用外部工具-6

二、核心概念:MCP是什么?

MCP(Model Context Protocol,模型上下文协议) 是一个标准化的开源协议,用于实现AI模型与外部数据源、工具之间的统一交互-。如果把AI应用想象成一台电脑,那么MCP就是那个“USB-C接口”——以前给大模型接外部工具需要准备一百种转接头,现在一根线走天下-6

用生活中的例子来理解:想象你是一位旅行者(AI模型),来到一个陌生的城市。以前,你想查天气要下载一个App,想找餐厅要打开另一个App,想打车又要切到第三个平台——每个服务都有自己的一套规矩。现在有了MCP,就像城市建了一个统一的“服务总台”,你只需要说“我要查天气”,总台就会自动找到天气服务提供商,帮你拿到结果并返回给你。MCP扮演的就是这个“服务总台”的角色,负责标准的发现、调用和返回流程

三、关联概念:MCP Server vs MCP Client

理解了MCP之后,就需要分清它的两个重要角色:

  • MCP Server(服务端) :负责将本地业务能力(如天气查询、文件读写)按MCP协议封装并暴露出去,供外部客户端调用-8

  • MCP Client(客户端) :负责发现并调用MCP Server提供的工具能力,将AI模型的工具调用请求转发给对应的Server-6

两者的关系可以这样概括:Server是“提供服务的人”,Client是“使用服务的人” 。在Spring AI中,你既可以搭建MCP Server(把自己的服务暴露出去),也可以作为MCP Client(调用别人提供的MCP服务)-6

最容易混淆的点@Tool注解本身并不等于MCP Server。@Tool只负责标记“这个方法可以作为工具能力”,而真正将其暴露为MCP服务,还需要引入spring-ai-starter-mcp-server依赖并完成自动配置-8

四、代码示例:从零搭建一个MCP Server

4.1 环境准备(2026年最新版本搭配)

组件版本要求说明
Spring Boot3.5.x+别用2.x,否则jar包冲突
Spring AI1.1.x1.0 GA以上版本
JDK17+MCP注解需要Java 17
Maven/Gradle最新版依赖管理

-6

4.2 添加Maven依赖

xml
复制
下载
运行
<!-- MCP Server Starter -->
<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-starter-mcp-server</artifactId>
    <version>1.1.2</version>
</dependency>

-3

4.3 编写业务服务类(使用@McpTool)

java
复制
下载
@Service
public class WeatherService {
    
    // 使用@McpTool将方法暴露为AI可调用的工具
    @McpTool(
        name = "get_weather_by_city",
        description = "根据城市名称获取当前天气信息"
    )
    public String getWeatherByCity(
        @McpToolParam(description = "城市名称,如'北京'", required = true) 
        String city
    ) {
        // 模拟天气查询逻辑
        Map<String, String> weatherMap = Map.of(
            "北京", "晴,25°C",
            "上海", "多云,22°C",
            "深圳", "阵雨,28°C"
        );
        return weatherMap.getOrDefault(city, "暂无该城市天气信息");
    }
}

代码解析

  • @McpTool:标记方法为可被AI调用的工具,namedescription字段非常重要——LLM正是通过这些描述来判断何时调用该工具以及如何填充参数-3

  • @McpToolParam:标注参数,提供语义描述供LLM理解。

  • required = true:告诉LLM这个参数是必填的。

4.4 配置类:注册ToolCallbackProvider

java
复制
下载
@Configuration
public class McpServerConfig {
    
    @Bean
    public ToolCallbackProvider toolCallbackProvider(WeatherService weatherService) {
        // 从WeatherService中提取所有@McpTool方法,封装为ToolCallbackProvider
        return MethodToolCallbackProvider.builder()
            .toolObjects(weatherService)
            .build();
    }
}

这段配置的含义比单纯注册一个Bean更明确——MethodToolCallbackProvider负责从业务对象中提取@McpTool标记的方法,将它们组织成MCP Server可以识别的工具定义-8

4.5 配置application.yml(关键!)

yaml
复制
下载
spring:
  application:
    name: mcp-server-demo
  ai:
    mcp:
      server:
        protocol: STREAMABLE   使用Streamable-HTTP协议
        name: weather-mcp-server
        version: 1.0.0

 如果是Stdio方式(本地开发),还需要额外配置:
 spring.ai.mcp.server.stdio=true
 spring.main.web-application-type=none   关键:禁止打印任何日志到控制台

注意:当使用Stdio传输方式时,AI Client会以子进程方式启动你的Java应用并通过控制台通信,此时任何日志输出都会破坏JSON-RPC消息格式,因此必须禁用Web应用模式和Banner输出-3

五、底层原理:MCP Server是如何工作的?

理解了代码之后,再来看看底层原理。Spring AI MCP Server的核心依赖于三个技术支撑

1. 注解扫描与反射机制

Spring AI在启动时会通过注解扫描器扫描所有带有@McpTool注解的方法。基于Java反射机制,框架能够动态解析方法的签名、参数类型、返回值类型,并自动生成符合MCP协议规范的Tool Definition(JSON Schema格式)-3

2. ToolCallbackProvider适配层

MethodToolCallbackProvider是一个关键适配器——它将业务层的普通Java方法适配为框架层统一抽象的ToolCallback接口。ToolCallback封装了方法的调用元信息(名称、描述、参数Schema)以及实际调用入口,MCP Server的核心调度器通过ToolCallback实现对业务方法的统一调用-

3. 协议传输层

MCP Server支持多种传输协议,包括Stdio(标准输入输出,适合本地开发)和Streamable-HTTP(适合云端部署,支持多客户端连接和服务端推送)-30。传输层负责处理JSON-RPC消息的编码、解码和网络传输。截至2026年,MCP生态还正在向gRPC传输方向演进,谷歌已在推动MCP对gRPC的支持-

六、高频面试题与参考答案

Q1:请简述MCP协议是什么,以及它在Spring AI中的作用?

标准答案:MCP(Model Context Protocol,模型上下文协议)是Anthropic开源的标准化协议,用于实现AI模型与外部工具、数据源的统一交互。在Spring AI中,MCP通过spring-ai-starter-mcp-server Starter提供支持,让开发者可以用@McpTool注解将Java方法暴露为AI可调用的标准化工具,Spring AI负责处理协议转换、工具注册和JSON-RPC通信等底层细节。踩分点:协议定位 + 标准化价值 + Spring AI实现方式

Q2:@Tool和MCP Server有什么区别?

标准答案@Tool是Spring AI中用于标记方法可被AI调用的注解,仅负责描述工具的元信息。而MCP Server是完整的能力暴露体系,需要引入spring-ai-starter-mcp-server依赖并通过ToolCallbackProvider@Tool方法注册到MCP Server中。可以概括为:@Tool是“标记”,MCP Server是“暴露”踩分点:功能区别 + 依赖关系 + 一句话总结

Q3:Spring AI MCP Server底层依赖哪些核心技术?

标准答案:核心依赖三项技术:1)Java反射——扫描@McpTool注解,解析方法签名生成工具定义;2)ToolCallbackProvider适配层——将业务方法适配为框架统一抽象的ToolCallback接口;3)JSON-RPC协议传输层——支持Stdio和Streamable-HTTP两种传输方式,处理协议编码与网络通信。踩分点:三个技术点依次列出,能体现对原理的理解深度

Q4:MCP Server支持哪些传输协议?各自适用什么场景?

标准答案:MCP Server主要支持两种传输协议。Stdio(标准输入输出):AI Client以子进程方式启动Server并通过控制台通信,适合本地开发调试,但必须禁用日志输出避免破坏JSON-RPC消息。Streamable-HTTP:Server作为独立HTTP服务运行,支持多客户端连接和服务端主动推送,适合云端生产部署。踩分点:两种协议名称 + 各自适用场景 + 关键配置点

Q5:如何在MCP Server中处理复杂对象参数?

标准答案:Spring AI支持使用Java Record或POJO作为工具方法的参数。框架会自动将复杂对象序列化为JSON Schema,LLM调用时会自动完成JSON参数的反序列化。使用@JsonProperty(required = false)可以标注可选字段。踩分点:Record/POJO支持 + 自动序列化 + 可选字段标注

七、结尾总结

本文围绕Spring AI中McpServer的实现,梳理了以下核心内容:

核心要点关键结论
MCP协议相当于AI世界的“USB-C接口”,实现工具能力的标准化
@Tool vs MCP Server@Tool是标记,MCP Server是暴露体系,两者需配合使用
代码实现依赖 + @McpTool + ToolCallbackProvider + 配置,四步完成
底层原理反射 + ToolCallbackProvider适配 + 协议传输,三层支撑
传输协议Stdio(本地开发)和Streamable-HTTP(云端部署)

重点易错提醒:用Stdio传输时一定要禁用控制台日志输出;版本必须用Spring Boot 3.5.x以上,别踩老教程的坑;@Tool不等于MCP Server,两者是“标记”和“暴露”的关系。

下一篇将深入讲解MCP Client的实现原理,带你掌握如何调用外部MCP服务,并探讨企业级MCP分布式部署的最佳实践。敬请期待!

王经理: 180-0000-0000(微信同号)
10086@qq.com
北京海淀区西三旗街道国际大厦08A座
©2026  上海羊羽卓进出口贸易有限公司  版权所有.All Rights Reserved.  |  程序由Z-BlogPHP强力驱动
网站首页
电话咨询
微信号

QQ

在线咨询真诚为您提供专业解答服务

热线

188-0000-0000
专属服务热线

微信

二维码扫一扫微信交流
顶部