Spring AI MCP(模型上下文协议)服务器Starters提供了在 Spring Boot 应用程序中设置 MCP 服务器的自动配置。它支持将 MCP 服务器功能与 Spring Boot 的自动配置系统无缝集成。
本文主要演示支持STDIO传输的MCP服务器
仅支持STDIO传输的MCP服务器
导入jar
<dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-starter-mcp-server</artifactId>
</dependency>
注意:本例使用的Spring AI是1.0.0-SNAPSHOT,笔者写博客期间,Spring AI已经发布了1.0.0的正式版,新版本的jar使用spring-ai-mcp-server-spring-boot-starter
服务类
该类中定义需要对外提供的调用的函数方法,本例仅为测试使用,没有实际意义。
package com.renr.springainew.mcpserver;import lombok.extern.slf4j.Slf4j;
import org.springframework.ai.tool.annotation.Tool;
import org.springframework.ai.tool.annotation.ToolParam;
import org.springframework.stereotype.Service;@Slf4j
@Service
public class NameMcpServer {@Tool(description = "根据孩子的出生日期和性别起名")public String childName(@ToolParam(description = "出生日期") String birth,@ToolParam(description = "性别") String gender) {log.info(birth, gender);return "老任与码";}
}
其中@Tool用与描述方法的作用,@ToolParam用于描述参数的作用。这些内容描述的越详细,大模型选择该工具的可能性越大。
配置类
用于向MCP客户端公开函数工具
package com.renr.springainew.config;import com.renr.springainew.mcpserver.NameMcpServer;
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 MyServerConfig {@Beanpublic ToolCallbackProvider nameTool(NameMcpServer nameMcpServer) {return MethodToolCallbackProvider.builder().toolObjects(nameMcpServer).build();}}
MCP 服务器支持四种主要功能类型,可以单独启用或禁用:
- 工具 - 启用/禁用工具功能spring.ai.mcp.server.capabilities.tool=true|false
- 资源 - 启用/禁用资源功能spring.ai.mcp.server.capabilities.resource=true|false
- 提示 - 启用/禁用提示功能spring.ai.mcp.server.capabilities.prompt=true|false
- 完成 - 启用/禁用完成功能spring.ai.mcp.server.capabilities.completion=true|false
默认情况下,所有功能均处于启用状态。禁用功能将阻止服务器注册和向客户端公开相应的功能。
本例仅配置了函数工具
yml配置
logging:pattern:console:
spring:main:web-application-type: nonebanner-mode: offai:mcp:server:name: name-mcp-serverversion: 1.0.0type: SYNCstdio: true
server:port: 8088
使用STDIO传输时,如下选项必须配置:
Disable web application type (`spring.main.web-application-type=none`)
Disable Spring banner (`spring.main.banner-mode=off`)
Clear console logging pattern (`logging.pattern.console=`)
spring.ai.mcp.server配置的属性主要包括:
属性 | 描述 | 默认值 |
---|---|---|
| 启用/禁用 MCP 服务器 |
|
| 启用/禁用 stdio 传输 |
|
| 用于标识的服务器名称 |
|
| 服务器版本 |
|
| 可选说明,用于向客户端提供有关如何与此服务器交互的指导 |
|
| 服务器类型 (SYNC/ASYNC) |
|
| 启用/禁用资源功能 |
|
| 启用/禁用工具功能 |
|
| 启用/禁用提示功能 |
|
| 启用/禁用完成功能 |
|
| 启用资源更改通知 |
|
| 启用提示更改通知 |
|
| 启用工具更改通知 |
|
| (可选)每个工具名称的响应 MIME 类型。例如 |
|
| 客户端用于发送消息的 Web 传输的自定义 SSE 消息终端节点路径 |
|
| 用于 Web 传输的自定义 SSE 终端节点路径 |
|
| 可选 URL 前缀。例如 | - |
| 在请求超时之前等待服务器响应的持续时间。适用于通过客户端发出的所有请求,包括工具调用、资源访问和提示作。 |
|
对MCP服务进行打包
将打包后的jar拷贝到d盘
MCP客户端调用MCP服务
MCP客户端的使用,参考Spring AI(9)——MCP客户端-CSDN博客
客户端中MCP服务的配置
mcp-servers-config.json文件中增加MCP服务的配置:
{"mcpServers": {"name-mcp-server": {"command": "java","args": ["-jar","D:/name-mcp-server.jar"]}}
}
测试MCP服务器的函数工具调用
输出结果:
根据日志和输出结果,说明调用了我们自定义MCP服务器的childName方法
客户端中MCP服务的另外配置方式
{"mcpServers": {"name-mcp-server": {"command": "java","args": ["-jar","-Dspring.ai.mcp.server.stdio=true","-Dspring.main.web-application-type=none","-Dspring.main.banner-mode=false","-Dlogging.pattern.console=","D:/name-mcp-server.jar"]}}
}
如果客户端采用上述配置,MCP服务端的配置可以修改为:
spring:ai:mcp:server:name: name-mcp-serverversion: 1.0.0type: SYNCstdio: true
server:port: 8088