spring-ai 1.0.0 学习(十八)——MCP Server

上一篇学习了如何调用外部工具,这一篇我们看看如何将自己的服务发布为外部工具,供他人调用

最小化样例

与使用Mcp Client一样,分为三步,引入依赖,添加配置,修改代码

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

根据自身需要引入上述三个依赖之一,分别对应STDIO、WebFlux、Http模式

以http为例,在application文件中添加如下配置

# Using spring-ai-starter-mcp-server-webmvc
spring:
  ai:
    mcp:
      server:
        name: webmvc-mcp-server
        version: 1.0.0
        type: SYNC
        instructions: "This server provides weather information tools and resources"
        sse-message-endpoint: /mcp/messages
        capabilities: 
          tool: true       #是否开启工具
          resource: true   #是否开启资源
          prompt: true     #是否开启提示词
          completion: true #是否开启补全

instructions用来介绍当前服务器提供的功能

然后将想要暴露的服务上添加Tool注解

@Service
public class WeatherService {

    @Tool(description = "Get weather information by city name")
    public String getWeather(String cityName) {
        // Implementation
    }
}

之后将服务注册为ToolCallbackProvider

@SpringBootApplication
public class McpServerApplication {

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

	@Bean
	public ToolCallbackProvider weatherTools(WeatherService weatherService) {
		return MethodToolCallbackProvider.builder().toolObjects(weatherService).build();
	}
}

然后就可以通过MCP Client进行调用了

进阶知识

内部原理

以http为例,spring-ai首先会将spring.ai.mcp.server相关配置注入McpServerProperties

然后根据McpServerProperties创建WebMvcSseServerTransportProvider,负责创建并管理会话

之后根据WebMvcSseServerTransportProvider、注册的ToolCallbackProvider等组件,创建McpSyncServer

McpSyncServer内部包含了服务器信息(如服务器介绍、支持的能力等)和具体的能力(如工具列表),在构造函数中,声明了一系列的请求及其处理器(例如工具相关请求tool/list和tool/call)

每当WebMvcSseServerTransportProvider收到会话请求,就会创建一个McpServerSession,并将McpSyncServer中声明的请求及处理器交给McpServerSession

McpServerSession根据请求路径选择相应的处理器进行处理

### 解决 Maven 无法下载 `spring-ai-mcp-server-webmvc-spring-boot-starter` 的问题 当尝试通过 Maven 下载 `spring-ai-mcp-server-webmvc-spring-boot-starter` 出现失败时,可能是由以下几个常见原因引起的。以下是针对该问题的具体分析和解决方案: #### 1. ### 检查依赖仓库配置 确保本地项目的 `pom.xml` 或全局的 `settings.xml` 文件中已正确配置了 Spring 官方或相关镜像仓库地址。如果没有找到对应的依赖项,可能会导致下载失败。 ```xml <repositories> <repository> <id>spring-releases</id> <name>Spring Releases Repository</name> <url>https://repo.spring.io/release</url> </repository> </repositories> ``` 此部分应添加到项目的根级 `<project>` 标签内的适当位置[^2]。如果仍然找不到目标构件,则可能是因为当前版本尚未发布至公共存储库之中[^3]。 #### 2. ### 版本兼容性校验 确认所使用的 Spring Boot 主体框架版本与所需 Starter 组件之间是否存在不匹配情况。不同大版本间可能存在较大差异甚至完全废弃某些功能模块的情况发生。因此建议先查阅官方文档获取支持矩阵表后再做决定。 例如对于最新的 Spring Boot 3.x 用户而言,应该选用对应分支下的专属制品而非旧版遗留产物[^1]。 #### 3. ### 网络连接状况核查 有时候因为防火墙规则限制或者其他外部因素干扰也会造成访问远程资源受阻的现象出现。此时可以通过命令行手动执行如下指令来进行初步诊断: ```bash mvn dependency:get -Dartifact=org.springframework.ai:spring-ai-starter-mcp-server-webmvc:1.0.0-SNAPSHOT ``` 观察终端输出日志判断具体错误类型是什么样的性质造成的障碍存在与否[^2]。 #### 4. ### 替代方案探索 假如经过上述步骤依旧未能解决问题的话,不妨考虑采用其他形式实现相似效果的功能替代品作为临时过渡措施之一。比如直接引用 RESTful 接口服务端点而不是借助专用客户端 SDK 方式达成目的等方法均不失为一种可行思路方向[^3]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值