SpringAi 创建mcp服务器,客户端连接服务器

引入依赖

复制代码
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>4.0.1</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.ruoyi</groupId>
    <artifactId>mcp-server</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>mcp-server</name>
    <description>mcp-server</description>
    <url/>
    <licenses>
        <license/>
    </licenses>
    <developers>
        <developer/>
    </developers>
    <scm>
        <connection/>
        <developerConnection/>
        <tag/>
        <url/>
    </scm>
    <properties>
        <java.version>17</java.version>
    </properties>

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

    <dependencies>


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


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

<!--        <dependency>-->
<!--            <groupId>org.springframework.boot</groupId>-->
<!--            <artifactId>spring-boot-starter-webmvc-test</artifactId>-->
<!--            <scope>test</scope>-->
<!--        </dependency>-->
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

</project>

配置下端口号

复制代码
server.port=9999

写一个配置类 和tool

复制代码
package com.ruoyi.mcpserver;


import org.springframework.ai.tool.ToolCallbackProvider;
import org.springframework.ai.tool.annotation.Tool;
import org.springframework.ai.tool.annotation.ToolParam;
import org.springframework.ai.tool.method.MethodToolCallbackProvider;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Service;

@Service
public class User {

    @Tool(description = "获取用户分数")
    public Integer getScore(@ToolParam(description = "用户名") String userName) {
        if ("zhangsan".equals(userName)) return 11;
        if ("lisi".equals(userName)) return 22;

        return 0;
    }



}


package com.ruoyi.mcpserver;

import org.springframework.ai.tool.ToolCallbackProvider;
import org.springframework.ai.tool.method.MethodToolCallbackProvider;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class Config {

    @Bean
    public ToolCallbackProvider userProvider(User  user) {
        return MethodToolCallbackProvider.builder().toolObjects(user).build();
    }
}

启动项目

访问http://localhost:9999/sse

服务器端启动成功

maven package 产生jar包

在cmd命令行中java -jar xxx.jar启动

client增加配置

复制代码
spring.ai.mcp.client.sse.connections.s1.url=http://localhost:9999

重新启动client端

问个server端的问题

查看日志:

复制代码
2026-01-01T23:25:11.293+08:00  INFO 18824 --- [demo1] [nio-8080-exec-4] c.e.demo.intercepter.GlobalInterceptor   : 请求地址:http://localhost:8080/wx
2026-01-01T23:25:11.311+08:00 DEBUG 18824 --- [demo1] [nio-8080-exec-4] o.s.a.c.c.advisor.SimpleLoggerAdvisor    : request: ChatClientRequest[prompt=Prompt{messages=[UserMessage{content='what is your name', properties={messageType=USER}, messageType=USER}, AssistantMessage [messageType=ASSISTANT, toolCalls=[], textContent=I am Qwen, a large-scale language model developed by Alibaba Cloud. How can I assist you today?, metadata={role=ASSISTANT, messageType=ASSISTANT, finishReason=STOP, refusal=, index=0, annotations=[], id=chatcmpl-a6366bf2-3050-9bc5-bda9-1bd788e508cf}], UserMessage{content='zhangsan的分数', properties={messageType=USER}, messageType=USER}], modelOptions=OpenAiChatOptions: {"streamUsage":false,"model":"qwen3-max","temperature":0.7}}, context={}]
2026-01-01T23:25:13.035+08:00 DEBUG 18824 --- [demo1] [nio-8080-exec-4] o.s.a.m.tool.DefaultToolCallingManager   : Executing tool call: spring_ai_mcp_client_s1_getScore
2026-01-01T23:25:14.418+08:00 DEBUG 18824 --- [demo1] [nio-8080-exec-4] o.s.a.c.c.advisor.SimpleLoggerAdvisor    : response: {

服务确实由mcp server提供

成功!

相关推荐
、BeYourself3 小时前
✅ 宝塔 PostgreSQL 安装UUID指南
数据库·postgresql·springai
刘立军1 天前
本地大模型编程实战(39)MCP实战演练
人工智能·后端·mcp
梵得儿SHI1 天前
(第六篇)Spring AI 核心技术攻坚:多模态模型集成与全场景落地实战
人工智能·springai·多模态ai开发·whisper语音转录技术·springai的三层架构设计·prompt优化·多模态内容生成
fanruitian1 天前
springboot openai 调用functioncall
java·spring boot·spring·ai·springai
北慕阳1 天前
健康管理后端记录
springboot
算法与双吉汉堡2 天前
【短链接项目笔记】6 短链接跳转
java·开发语言·笔记·后端·springboot
程序员Linc2 天前
2025年MCP协议发展及其在xiaozhi-esp32中的落地实践分析
ai·mcp·小智·xiaozhi-esp32·2025年度征文
青w韵2 天前
最新SpringAI-1.1.2接入openai兼容模型
java·学习·ai·springai
七夜zippoe2 天前
MyBatis插件开发-实现SQL执行耗时监控
java·sql·mybatis·springboot·责任链