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提供

成功!

相关推荐
一缕82年的清风7 小时前
别把MCP只当插件!当所有AI都在接入USB-C接口,架构师该如何设计智能体底座?
mcp
EatFan7 小时前
AI Agent Harness 元年:从框架混战到运行时收敛,2026 年 Agent 基础设施分层重构解读
大数据·人工智能·重构·ai agent·mcp·a2a·agent harness
sarasuki8 小时前
MCP 为什么是一个协议而不是一个框架呢?
设计模式·agent·mcp
全栈Agent 小李9 小时前
【无标题】
前端·后端·agent·ai编程·全栈·cursor·mcp
xrlfreedom9 小时前
MCP 面试高频考点:把知识库 RAG 封装成 Tool,JSON Schema 与 Prompts 怎么分工才不踩坑
json schema·prompts·mcp
xrlfreedom11 小时前
MCP 面试高频考点:本地文件访问 Server 怎么设计才安全可用?
resources·mcp·mcp server·超时、重试与幂等
BLUcoding1 天前
接口服务公网超时排查记录:SecureRandom 阻塞问题分析与解决
java·linux·springboot·aes·securerandom
鱼宵1 天前
Spring AI 可观测与透明化:traceId 串起全链路,思考过程实时直播给用户
java·人工智能·spring·链路追踪·springai
Blockbuater_drug1 天前
protein-design-mcp 裸机实战:41 个蛋白设计工具大合集Agent部署与实测
agent·mcp·proteinmpnn·rfdiffusion·esmfold·boltz-2