Spring AI 中MCP 与普通 @Tool的区别

Spring AI 已经支持 MCP(Model Context Protocol,模型上下文协议),而且它不只是能够连接 MCP 服务,还提供了客户端、服务端以及与 AI 工具调用的集成能力。

如果你是从 Java 后端开发的角度学习 Spring AI,可以把 MCP 理解成:一套标准化的 AI 应用与外部工具、数据源之间的通信协议。 以前你可能需要为每个 AI 应用单独编写工具接口,现在可以通过 MCP 统一暴露和调用工具。

例如,你正在开发一个 Spring Boot 智慧英语学习平台,可以让 AI 通过 MCP 查询学生成绩、获取学习计划、查询课程信息,而不必把这些业务逻辑全部写进提示词中。

一、Spring AI 的 MCP 具体体现在哪里?

截至 2026 年 10 月,Spring AI 官方文档已提供完整的 MCP 集成能力。当前官方文档版本为 Spring AI 2.0.1,Spring AI 2.0 GA 也已发布。

Home

+1

MCP 不只是一个工具调用注解,而是包含了多个层面的能力。

AI 应用 / ChatClient

接收用户问题,结合模型判断需要调用什么能力

MCP Client:发现工具、发送调用请求

MCP 协议通信

JSON-RPC 消息 + STDIO / Streamable HTTP 等传输方式

MCP Server:暴露工具、资源和提示模板

Resources

上下文数据

Tools

可执行操作

Prompts

提示模板

官方集成主要体现在以下四个方面。

Home

+2

能力

Spring AI 的实现

作用

MCP Server

服务端 Starter、@McpTool 等注解

将 Java 业务能力暴露给外部 AI 客户端

MCP Client

客户端 Starter、MCP 客户端连接

连接其他 MCP 服务并发现其工具

AI 工具调用集成

ToolCallbackProvider、ChatClient

将 MCP 工具提供给大模型调用

Resources / Prompts

@McpResource、@McpPrompt 等

向客户端提供上下文资源和可复用提示模板

需要注意:MCP Server 负责提供能力,MCP Client 负责连接服务,而大模型负责根据用户问题决定是否调用某个工具。三者不是同一个概念。

二、实际案例:智慧英语学习平台

假设你正在开发一个 Spring Boot 智慧英语学习平台。学生问 AI:

帮我查询自己的雅思口语成绩,并根据当前成绩推荐下一步学习重点。

传统做法是把查询成绩、查询计划等 Java 方法逐个注册为当前 AI 应用的工具。

采用 MCP 后,可以把这些能力做成独立的 MCP Server,让不同 AI 客户端通过标准协议访问。

  1. 学习平台 MCP Server

暴露 getSpeakingScore、getStudyPlan 等工具,内部调用已有的 Spring Service、数据库和业务接口。

  1. AI 应用 MCP Client

发现服务提供的工具,将工具描述提供给模型,并将模型提出的工具调用请求交给 MCP Client 执行。

  1. 返回学习建议

工具返回真实业务数据后,模型结合成绩、学习目标生成自然语言建议。

这个案例的核心价值是:业务能力可以独立部署和复用,AI 应用不需要了解每个业务系统内部的 Java 实现。 但 MCP 本身不会自动提供学生成绩、身份认证或学习算法,这些仍需要你实现。

三、实际代码:如何把 Java 方法变成 MCP 工具?

下面用一个可落地的简化案例演示。为了让版本和 API 保持一致,以下代码以官方 Spring AI 2.0.1 的注解式 MCP 开发方式为参考。

Home

+1

  1. 创建 MCP Server

先创建一个独立的 Spring Boot 服务,负责向外提供学习平台的业务能力。

添加依赖:
org.springframework.ai spring-ai-starter-mcp-server-webmvc

这里的版本应由项目使用的 Spring AI BOM 统一管理。

在 application.yml 中配置:

server:

port: 8081

spring:

ai:

mcp:

server:

protocol: STREAMABLE

然后编写工具类:

import org.springframework.stereotype.Component;

import org.springframework.ai.mcp.annotation.McpTool;

import org.springframework.ai.mcp.annotation.McpToolParam;

@Component

public class LearningTools {

复制代码
@McpTool(
    name = "getSpeakingScore",
    description = "查询学生指定考试的雅思口语成绩"
)
public String getSpeakingScore(
    @McpToolParam(
        description = "学生ID",
        required = true
    ) Long studentId
) {
    // 实际项目中应调用 Service 查询数据库
    return "学生ID:" + studentId
        + ",雅思口语成绩:6.0";
}

@McpTool(
    name = "getStudyPlan",
    description = "查询学生当前的雅思学习计划"
)
public String getStudyPlan(
    @McpToolParam(
        description = "学生ID",
        required = true
    ) Long studentId
) {
    // 实际项目中应调用学习计划 Service
    return "每日学习4小时,重点练习口语和听力";
}

}

这段代码的关键是 @McpTool:它将普通 Java 方法声明为 MCP 工具,框架可以生成相应的工具参数 Schema,并将其注册到 MCP Server。

Home

+1

注意,示例中的成绩和学习计划是模拟数据。实际业务中应当注入已有的 SpeakingScoreService、StudyPlanService 等服务,而不是直接把数据写死。

  1. 创建 MCP Client

现在创建另一个 Spring Boot AI 应用,作为 MCP 客户端。它不直接调用上面两个 Java 方法,而是连接 MCP Server。

添加依赖:
org.springframework.ai spring-ai-starter-mcp-client

配置服务连接:

spring:

ai:

mcp:

client:

streamable-http:

connections:

learning-server:

url: http://localhost:8081

假设模型的 ChatClient 已经通过项目的模型 Starter 配置完成,就可以编写:

import org.springframework.ai.chat.client.ChatClient;

import org.springframework.ai.tool.ToolCallbackProvider;

import org.springframework.boot.CommandLineRunner;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

@Configuration

public class AiChatConfig {

复制代码
@Bean
CommandLineRunner demo(
        ChatClient.Builder chatClientBuilder,
        ToolCallbackProvider mcpTools) {

    ChatClient chatClient = chatClientBuilder.build();

    return args -> {
        String answer = chatClient.prompt()
            .system("""
                你是雅思学习助手。
                查询成绩时使用 getSpeakingScore。
                查询学习计划时使用 getStudyPlan。
                只能根据工具返回的真实数据回答。
                """)
            .user("帮我查询学生1001的口语成绩,并介绍学习计划")
            .toolCallbacks(mcpTools)
            .call()
            .content();

        System.out.println(answer);
    };
}

}

这里的 ToolCallbackProvider 是关键:客户端 Starter 可以把已连接 MCP Server 提供的工具接入 Spring AI 的工具调用机制;toolCallbacks(mcpTools) 则将这些工具提供给本次模型交互。

Home

+1

具体的客户端自动配置方式可能随 Spring AI 版本和配置而变化,因此需要确认对应版本的 Starter 已启用 MCP 工具回调集成。

  1. 运行时究竟发生了什么?

用户提问

用户输入:"帮我查询学生 1001 的口语成绩,并介绍学习计划。"

模型选择工具

模型根据工具名称、描述和参数 Schema,决定调用 getSpeakingScore(1001) 与 getStudyPlan(1001)。

MCP Client 发起调用

客户端通过 MCP 协议把工具调用请求发送到 localhost:8081。

MCP Server 执行业务逻辑

服务端执行对应 Java 方法;真实项目中则由 Service 查询数据库或调用业务接口。

模型组织答案

工具结果返回 AI 应用,模型再将结果组织成自然语言回复。

这是逻辑流程示意。工具的选择由模型决定,具体调用和结果回传由 Spring AI 的工具调用机制与 MCP 客户端完成。

四、MCP 与普通 @Tool 有什么区别?

这是学习 Spring AI 时最值得理解的地方。

对比维度

Spring AI @Tool

MCP

工具定义

将 Java 方法注册为 AI 工具

可以将 Java 方法等能力暴露为标准化工具

调用方式

通常由当前应用中的 Spring AI 工具调用框架执行

客户端通过 MCP 协议访问服务端

是否跨服务

通常是当前应用内部调用

支持跨进程、跨服务调用

工具复用

通常需要在各应用中集成相应代码

不同兼容 MCP 的客户端可以复用同一服务

适合场景

当前应用内部的简单业务工具

多个 AI 应用共享业务能力、统一接入外部服务

举个例子:

使用 @Tool:你在雅思 AI 助手里注册查询成绩的方法,这个助手可以调用它。

使用 MCP:你将查询成绩的能力部署成 MCP Server,雅思助手、内部运营助手以及其他兼容 MCP 的客户端都可以连接它。

两者并不冲突。MCP 是标准化的跨应用集成方式,@Tool 是 Spring AI 提供的工具定义方式。 对于 MCP Server,使用 @McpTool 可以直接面向 MCP 暴露能力。

五、实际开发中还要注意什么?

版本问题: Spring AI 1.x 和 2.x 的依赖、SDK 版本以及部分 API 存在差异。上面的注解式示例按 2.0.1 文档编写,不应直接假设能原样用于旧版本。

身份认证: 示例中的 HTTP MCP 服务不能直接当作已经具备权限控制的生产服务。官方 Server Starter 默认不会自动为所有工具配置身份认证和授权。暴露到外部网络之前,需要配置认证、授权以及网络访问限制。

Home

+1

数据权限: 不能只相信模型传入的 studentId。真实项目应从经过认证的用户身份中确认数据访问权限,防止越权查询其他学生的成绩。

写操作需要保护: 如果工具能够修改学习计划、提交考试或删除数据,应增加权限校验、参数验证、幂等控制,以及必要的人工确认。

MCP 不等于 Agent: MCP 提供标准化的工具和上下文访问机制,但不负责自动完成所有多步骤任务规划。Agent 的任务规划、循环调用和决策仍需要相应的应用逻辑或框架支持。

相关推荐
美狐美颜sdk43 分钟前
直播APP源码可以直接接入视频美颜sdk吗?技术方案详解
android·人工智能·音视频·美颜sdk·直播美颜sdk
码云数智-园园1 小时前
unique_ptr 还是 shared_ptr?C++ 智能指针选型与内存泄漏实战分析
java·开发语言
问商十三载1 小时前
AI引擎生成式优化实践:刑事辩护律师团队IP构建
大数据·人工智能
老板一杯拿铁1 小时前
Java 异常体系详解:从字节码原理到最佳实践
java
冬奇Lab1 小时前
LLM 驱动的自动化测试系列(08):移动端自动化(四)——AppAgent:解析树与视觉特征的结合
人工智能·测试
蜗牛互联网1 小时前
Java 17 HttpClient调用文件转写API的超时与失败回退
java·人工智能·后端
谢亮_vipxieliang1 小时前
Kubernetes 的“操作系统化”:从容器编排到 AI 基础设施控制平面
人工智能·平面·kubernetes
云上先途11 小时前
AI搜索排名优化,需要重点布局哪些关键词和内容形式?
人工智能·chatgpt