Spring AI构建MCP Client-Server架构(最全版本)

前言:

最近因为项目中需要用到AI 聊天对话,看到网上不少例子,几乎没有一个是完整的,抽了一些时间研究了一下。希望对需要研究这么方面的同学有所帮助!项目并非简单的对接大模型的api,可以直接接入企业自己数据做成tool来优先分析。

服务架构:mcp servier(服务端);mcp clien(客户端);mcp data(自己的数据服务)

(借鉴一位同学画的结构图,基本就是如此结构)

项目架构如下:

前提:java17+,srpingboot 3.3.10,maven 3.8.8

一、spring ai mcp 服务端

1.MCP service 服务端构建

pom文件配置如何,用到了nacos,如果同学们有用到nacos的记得采用我给的nacos版本,已经试验过不对的版本会出现不兼容的问题

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.menglar</groupId>
    <artifactId>cortex-ai-service</artifactId>
    <version>1.0.0-SNAPSHOT</version>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.3.10</version>
        <relativePath/>
    </parent>

    <properties>
        <!-- 禁用 Spring Boot 的默认编译器参数 -->
        <spring-boot.repackage.skip>true</spring-boot.repackage.skip>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <java.version>17</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <spring-ai.version>1.0.0-SNAPSHOT</spring-ai.version>
        <spring-cloud-alibaba.version>2023.0.1.0</spring-cloud-alibaba.version>
        <menglar.version>1.0.2-SNAPSHOT</menglar.version>
    </properties>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.ai</groupId>
                <artifactId>spring-ai-bom</artifactId>
                <version>${spring-ai.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <dependencies>

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

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-loadbalancer</artifactId>
            <version>4.1.1</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.clou
生产环境建议使用 WebFlux 客户端(spring-ai-starter-mcp-client-webflux)实现响应式架构,可通过 SSE 传输连接远程 MCP 服务器,使用时需确保网络连通性和安全性[^1]。 spring-ai 提供了 spring-ai-starter-mcp-client 用于快速集成 mcpClient 到 chatClient 中。McpClientAutoConfiguration 依赖 McpClientCommonProperties,它根据 McpClientCommonProperties 和 List<NamedClientMcpTransport> 构建 List<McpSyncClient> 及 List<McpAsyncClient>;McpToolCallbackAutoConfiguration 在 spring.ai.mcp.client.enabled 及 spring.ai.mcp.client.toolcallback.enabled 都为 true 时才生效,它会根据 List<McpSyncClient> 去创建 SyncMcpToolCallbackProvider 或 AsyncMcpToolCallbackProvider [^2]。 虽然没有直接针对 spring-ai-starter-mcp-client-webflux 详细使用方法,但可以结合上述信息推测,在使用 spring-ai-starter-mcp-client-webflux 时,可能需要配置好相应的属性,利用其响应式特性进行客户端构建,通过 SSE 传输与远程 MCP 服务器建立连接并进行交互。 以下是一个简单的伪代码示例,展示可能的使用逻辑: ```java import org.springframework.ai.chat.client.ChatClient; import org.springframework.web.bind.annotation.*; @RestController @RequestMapping("/mcp") public class McpController { private final ChatClient chatClient; public McpController(ChatClient.Builder chatClientBuilder) { this.chatClient = chatClientBuilder.build(); } @GetMapping("/chat") public String generation(@RequestParam(value = "question", defaultValue = "使用中文简短介绍自己") String question) { return this.chatClient.prompt() .user(question) .call() .content(); } } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值