Spring Boot使用MCP服务器

1、JDK版本17

2、pom文件

复制代码
<?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>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.4.5</version>
        <relativePath /> <!-- lookup parent from repository -->
    </parent>

    <groupId>com.example</groupId>

    <artifactId>mcp-weather-starter-webmvc-server</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <name>Spring AI MCP Weather Sample</name>
    <description>Sample Spring Boot application demonstrating MCP client and server usage</description>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.ai</groupId>
                <artifactId>spring-ai-bom</artifactId>
                <version>1.1.0-SNAPSHOT</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>
    </dependencies>

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

	<repositories>
		<repository>
			<id>spring-milestones</id>
			<name>Spring Milestones</name>
			<url>https://repo.spring.io/milestone</url>
			<snapshots>
				<enabled>false</enabled>
			</snapshots>
		</repository>
		<repository>
			<id>spring-snapshots</id>
			<name>Spring Snapshots</name>
			<url>https://repo.spring.io/snapshot</url>
			<releases>
				<enabled>false</enabled>
			</releases>
		</repository>
		<repository>
			<id>central-portal-snapshots</id>
			<name>Central Portal Snapshots</name>
			<url>https://central.sonatype.com/repository/maven-snapshots/</url>
			<releases>
				<enabled>false</enabled>
			</releases>
			<snapshots>
				<enabled>true</enabled>
			</snapshots>
		</repository>
	</repositories>
</project>

3、配置文件application.properties

复制代码
# spring.main.web-application-type=none

# NOTE: You must disable the banner and the console logging 
# to allow the STDIO transport to work !!!
spring.main.banner-mode=off
# logging.pattern.console=

# spring.ai.mcp.server.stdio=false

spring.ai.mcp.server.name=my-weather-server
spring.ai.mcp.server.version=0.0.1

logging.file.name=./model-context-protocol/weather/starter-webmvc-server/target/starter-webmvc-server.log

4、MCP服务

复制代码
BIService
复制代码
package org.springframework.ai.mcp.sample.server;

import org.springframework.ai.tool.annotation.Tool;
import org.springframework.ai.tool.annotation.ToolParam;
import org.springframework.stereotype.Component;

@Component
public class BIService {

    @Tool(description = "根据客户名称查询项目信息,输入参数是客户名称")
    public String getProjectInfoByName(@ToolParam(description = "客户名称") String name) {
        return "系统查询用户,"+name+"项目信息";
    }

    @Tool(description = "根据合同编号查询项目信息,输入参数是合同编号")
    public String getProjectByContactNumber(@ToolParam(description = "合同编号") String contactNumber) {
        return "系统查询合同编号,"+contactNumber+"项目信息";
    }

}
复制代码
MIService
复制代码
package org.springframework.ai.mcp.sample.server;

import org.springframework.ai.tool.annotation.Tool;
import org.springframework.ai.tool.annotation.ToolParam;
import org.springframework.stereotype.Component;

@Component
public class MIService {

    @Tool(description = "根据城市名称获取该城市的天气信息")
    public String getWeather(@ToolParam(description = "城市") String city){
        return city+":温度25度,大太阳,适合旅行";
    }

}

启动类

复制代码
package org.springframework.ai.mcp.sample.server;

import org.springframework.ai.tool.ToolCallback;
import org.springframework.ai.tool.ToolCallbackProvider;
import org.springframework.ai.tool.function.FunctionToolCallback;
import org.springframework.ai.tool.method.MethodToolCallbackProvider;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;

@SpringBootApplication
public class McpServerApplication {

	public static void main(String[] args) {
		SpringApplication.run(McpServerApplication.class, args);
	}

	@Bean
	public ToolCallbackProvider mcpTool(BIService biService,MIService miService) {
		return MethodToolCallbackProvider.builder()
				.toolObjects(miService,biService)
				.build();
	}
}

5、cursor访问MCP服务

复制代码
{
  "mcpServers": {
    "bi-mcp-server": {
      "url": "http://localhost:8080/sse"
    }
  }

}

6、maxkb访问mcp服务

复制代码
{
	"bi-mcp-server": {
		"url": "http://host.docker.internal:8080/sse",
		"transport": "sse"
	}
}
相关推荐
倔强青铜三5 分钟前
Python的Lambda,是神来之笔?还是语法毒瘤?
人工智能·后端·python
a cool fish(无名)5 分钟前
rust-方法语法
开发语言·后端·rust
搬码临时工33 分钟前
使用FRP搭建内网穿透工具,自己公网服务器独享内外网端口转发
运维·服务器
随意石光43 分钟前
秒杀功能、高并发系统关注的问题、秒杀系统设计
后端
随意石光44 分钟前
Spring Cloud Alibaba Seata、本地事务、分布式事务、CAP 定理与 BASE 理论、Linux 安装 Seata、Seata的使用
后端
程序员清风1 小时前
程序员入职公司实习后应该学什么?
java·后端·面试
智慧源点1 小时前
基于DataX的数据同步实战
后端
随意石光1 小时前
Java操作Excel报表,EasyExcel用法大全
后端
友莘居士1 小时前
Dify中的Agent和发现和调用mcp工具两个节点调用的异同
agent·react·dify·functioncalling·mcp
大葱白菜1 小时前
Java 反射的作用详解:为什么说它是 Java 中最强大的特性之一?
java·后端·程序员