Spring AI框架中集成MCP的完整指南:从服务端到客户端的全流程实践

AI3天前发布 beixibaobao
8 0 0

Spring AI框架中集成MCP的完整指南:从服务端到客户端的全流程实践

    • 一、集成概览:Spring AI的MCP生态架构
      • Spring AI MCP的核心依赖
    • 二、方式一:基于注解的MCP服务端开发(推荐)
      • 步骤1:添加Maven依赖
      • 步骤2:实现工具服务
      • 步骤3:配置文件
    • 三、方式二:基于SSE的远程MCP服务端
      • 依赖配置
      • 服务端配置
    • 四、MCP客户端集成:连接与调用
      • 步骤1:添加客户端依赖
      • 步骤2:配置MCP服务器连接
      • 步骤3:配置客户端属性
      • 步骤4:在ChatClient中使用MCP工具
    • 五、Spring AI MCP的安全集成
      • 添加安全依赖
      • 配置安全过滤器链
      • 客户端配置OAuth2
    • 六、集成模式对比与选型建议
    • 总结

🌺The Begin🌺点点关注,收藏不迷路🌺

⬇ ⬇ 底部 ⬇ ⬇

随着Spring AI 1.1正式版的发布,模型上下文协议(MCP)的集成已成为Spring生态中AI开发的核心能力。Spring团队不仅主导了MCP Java SDK的开发,还提供了专用的Boot Starter和注解编程模型,让开发者能够以Spring惯用的方式快速构建MCP服务端和客户端。本文将带您从零开始,完整实践在Spring AI框架中集成MCP的全流程。

一、集成概览:Spring AI的MCP生态架构

Spring AI为MCP提供了全方位的支持,涵盖服务端和客户端两端,支持多种传输协议和部署模式。

Spring AI MCP生态

Spring AI应用

MCP客户端组件

协议适配器

传输层

stdio本地进程

HTTP SSE远程服务

Streamable HTTP有状态会话

MCP服务端组件

工具/资源/提示词

Spring AI MCP的核心依赖

Spring AI 1.1提供了多款专用Starter,覆盖不同的使用场景和传输需求:

客户端Starter

  • spring-ai-starter-mcp-client:核心客户端,支持stdio和基于HTTP的SSE
  • spring-ai-starter-mcp-client-webflux:基于WebFlux的响应式客户端

服务端Starter

  • spring-ai-starter-mcp-server:核心服务端,支持stdio传输
  • spring-ai-starter-mcp-server-webmvc:基于Spring MVC的SSE服务端
  • spring-ai-starter-mcp-server-webflux:基于WebFlux的响应式服务端

二、方式一:基于注解的MCP服务端开发(推荐)

Spring AI 1.1推荐使用注解驱动的开发方式,通过@McpTool@McpResource@McpPrompt等注解,将普通Spring Bean的方法暴露为MCP能力。

步骤1:添加Maven依赖

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-starter-mcp-server-webmvc</artifactId>
</dependency>

步骤2:实现工具服务

使用@McpTool注解标记方法,框架会自动将其注册为MCP工具:

@Service
public class WeatherService {
    @McpTool(description = "获取指定城市的实时天气信息")
    public String getWeather(
            @McpToolParam(description = "城市名称", required = true) String city) {
        // 调用真实天气API
        return String.format("北京市当前天气:晴,温度25°C,湿度45%%");
    }
    @McpTool(description = "计算两个数字的数学运算")
    public double calculate(
            @McpToolParam(description = "第一个数字") double num1,
            @McpToolParam(description = "运算符 + - * /") String operator,
            @McpToolParam(description = "第二个数字") double num2) {
        switch (operator) {
            case "+": return num1 + num2;
            case "-": return num1 - num2;
            case "*": return num1 * num2;
            case "/": return num1 / num2;
            default: throw new IllegalArgumentException("不支持的运算符");
        }
    }
}

@McpTool注解的description属性会传递给AI模型,帮助模型理解工具的用途和调用时机。

步骤3:配置文件

spring:
  ai:
    mcp:
      server:
        name: my-weather-mcp-server
        version: 1.0.0
        protocol: STREAMABLE   # 支持STREAMABLE或SSE
        sse-endpoint: /sse
        sse-message-endpoint: /mcp/messages

注意:使用spring-ai-starter-mcp-server-webmvc时,需要配置protocol: STREAMABLE以启用HTTP流式传输。

三、方式二:基于SSE的远程MCP服务端

对于需要远程部署、支持多客户端并发访问的场景,SSE(Server-Sent Events)模式是更合适的选择。与stdio模式不同,SSE模式将MCP服务器暴露为标准的HTTP端点。

依赖配置

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-starter-mcp-server-webmvc</artifactId>
</dependency>

服务端配置

spring:
  ai:
    mcp:
      server:
        name: remote-mcp-server
        version: 1.0.0
        stdio: false          # 关闭stdio模式
        type: ASYNC           # 异步处理
        sse-endpoint: /sse
        sse-message-endpoint: /mcp/messages
        capabilities:
          tool: true
          resource: true
          prompt: true

SSE模式下,客户端通过/sse端点建立长连接,服务器通过/mcp/messages端点接收消息,支持服务器主动推送实时通知和进度更新。

四、MCP客户端集成:连接与调用

步骤1:添加客户端依赖

<dependency>
    <groupId>org.springframework.ai</groupId>
    <artifactId>spring-ai-starter-mcp-client</artifactId>
</dependency>

步骤2:配置MCP服务器连接

创建src/main/resources/mcp-servers.json,配置需要连接的MCP服务:

{
  "mcpServers": {
    "weather-server": {
      "command": "java",
      "args": [
        "-jar",
        "-Dspring.ai.mcp.server.stdio=true",
        "-Dspring.main.web-application-type=none",
        "/path/to/your/mcp-server.jar"
      ]
    },
    "remote-sse-server": {
      "command": "npx",
      "args": [
        "mcp-remote",
        "http://localhost:8080/sse"
      ]
    }
  }
}

步骤3:配置客户端属性

spring:
  ai:
    mcp:
      client:
        enabled: true
        name: my-agent-mcp-client
        version: 1.0.0
        type: SYNC                    # SYNC或ASYNC
        request-timeout: 30s
        toolcallback:
          enabled: true               # 启用工具回调
        stdio:
          servers-configuration: classpath:mcp-servers.json

步骤4:在ChatClient中使用MCP工具

通过ToolCallbackProvider将MCP工具注入到ChatClient中:

@Bean
public CommandLineRunner demo(ChatClient chatClient, ToolCallbackProvider mcpTools) {
    return args -> {
        String response = chatClient
            .prompt("北京今天的天气怎么样?")
            .tools(mcpTools)              // 注入MCP工具
            .call()
            .content();
        System.out.println(response);
    };
}

MCP客户端会自动发现服务器提供的所有工具,无需手动注册。框架通过tools/list请求在运行时获取工具列表,实现了动态工具发现。

五、Spring AI MCP的安全集成

在企业级部署中,MCP服务器的安全防护至关重要。Spring AI提供了与Spring Security的无缝集成,支持OAuth2认证。

添加安全依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-oauth2-resource-server</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-oauth2-authorization-server</artifactId>
</dependency>

配置安全过滤器链

通过Spring Security的配置类,将MCP服务器同时配置为资源服务器(验证token)和授权服务器(颁发token):

@Configuration
@EnableWebSecurity
public class SecurityConfiguration {
    @Bean
    SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        return http
            .authorizeHttpRequests(auth -> auth.anyRequest().authenticated())
            .oauth2ResourceServer(resource -> resource.jwt(Customizer.withDefaults()))
            .csrf(CsrfConfigurer::disable)
            .cors(Customizer.withDefaults())
            .build();
    }
}

客户端配置OAuth2

mcp-servers.json中为远程服务配置认证头:

{
  "mcpServers": {
    "secure-remote-server": {
      "command": "npx",
      "args": [
        "mcp-remote",
        "https://secure-mcp.example.com/mcp",
        "--header",
        "Authorization: Bearer ${MCP_ACCESS_TOKEN}"
      ]
    }
  }
}

六、集成模式对比与选型建议

维度 stdio模式 SSE/Streamable HTTP模式
部署方式 客户端启动服务器子进程 服务器独立部署为HTTP服务
通信机制 标准输入/输出 HTTP + Server-Sent Events
生命周期 客户端完全控制 服务器独立运行
多客户端 通常一对一 支持多客户端并发
安全要求 较低(本地通信) 需配置OAuth2等认证机制
适用场景 本地工具集成、IDE插件 分布式系统、云端部署

总结

Spring AI通过专用的Boot Starter注解驱动的编程模型以及与Spring Security的深度集成,为MCP协议提供了全方位的支持。开发者可以选择基于stdio的本地进程通信实现轻量级工具集成,也可以选择基于SSE/Streamable HTTP的远程部署模式构建分布式AI系统。掌握这套集成方案,将让您在使用Spring AI构建AI Agent应用时,能够以标准化、可扩展的方式接入各种外部工具和数据源。

在这里插入图片描述

🌺The End🌺点点关注,收藏不迷路🌺

⬆ ⬆ 顶部 ⬆ ⬆
© 版权声明

相关文章