MCP
对接MCP服务
1. 引入pom
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-mcp-server-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-mcp-client-webflux-spring-boot-starter</artifactId>
</dependency>
2. 配置MCP
- 具体MCP服务可由python、nodejs、java等语言实现,只要后续与Spring AI对接即可
- 公用MCP服务可找:https://smithery.ai/,https://glama.ai/mcp/servers
① 配置json

② 引入json

- 在 Spring AI 中,MCP 的对接,可以通过 json 文件的方式进行配置
- 也可以通过代码的方式设置 MCP 服务,如果把 MCP 的配置放到数据库,那么一般用代码的方式
案例:
比如引入一个文件处理MCP服务,可在AI对话过程中,读取、设置、操作我的文件信息
MCP服务地址:https://www.npmjs.com/package/@modelcontextprotocol/server-filesystem
然后引入Spring中,即在mcp-servers-config.json下:
"mcpServers": {
"filesystem": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-filesystem",
"/Users/root/Desktop",
"/Users/root/Desktop"
]
}
}
- filesystem:MCP服务名称,表示该服务用于处理文件系统操作
- command:“npx”:表示用Node.js的npx命令运行npm包
- args:-y表示如果包不存在同意安装
- 具体的MCP服务
- 底下两个为输入目录,输出目录
- 注意:windows需要配置绝对地址
3. 构建客户端
主要是AI服务可能有多套AI对话模型,需要指定ChatClient.Builder的实现类
@Configuration
public class OpenAIConfig {
// ... 引入配置
@Bean
public ChatClient.Builder chatClientBuilder(OpenAiChatModel openAiChatModel) {
return new DefaultChatClientBuilder(openAiChatModel, ObservationRegistry.NOOP, (ChatClientObservationConvention) null);
}
}
4.测试MCP
@Slf4j
@RunWith(SpringRunner.class)
@SpringBootTest
public class MCPTest {
@Resource
private ChatClient.Builder chatClientBuilder;
@Autowired
private ToolCallbackProvider tools;
@Test
public void test_tool() {
String userInput = "有哪些工具可以使用";
var chatClient = chatClientBuilder
.defaultTools(tools)
.defaultOptions(OpenAiChatOptions.builder()
.model("gpt-4o")
.build())
.build();
System.out.println("\n>>> QUESTION: " + userInput);
System.out.println("\n>>> ASSISTANT: " + chatClient.prompt(userInput).call().content());
}
@Test
public void test_workflow() {
String userInput = "获取电脑配置";
userInput = "在 /Users/root/Desktop 文件夹下,创建 电脑.txt";
var chatClient = chatClientBuilder
.defaultTools(tools)
.defaultOptions(OpenAiChatOptions.builder()
.model("gpt-4o")
.build())
.build();
System.out.println("\n>>> QUESTION: " + userInput);
System.out.println("\n>>> ASSISTANT: " + chatClient.prompt(userInput).call().content());
}
}
开发MCP服务
通过 Java 语言开发一个简单的 MCP 服务,获得当前电脑的配置信息

1. 引入pom
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-mcp-server-spring-boot-starter</artifactId>
</dependency>
需要引入 spring-ai-mcp-server-spring-boot-starter 服务开发组件
2. 服务实现
@Slf4j
@Service
public class ComputerService {
@Tool(description = "获取电脑配置")
public ComputerFunctionResponse queryConfig(ComputerFunctionRequest request) {
log.info("获取电脑配置信息 {}", request.getComputer());
// 获取系统属性
Properties properties = System.getProperties();
// 操作系统名称
String osName = properties.getProperty("os.name");
// 操作系统版本
String osVersion = properties.getProperty("os.version");
// 操作系统架构
String osArch = properties.getProperty("os.arch");
// 用户的账户名称
String userName = properties.getProperty("user.name");
// 用户的主目录
String userHome = properties.getProperty("user.home");
// 用户的当前工作目录
String userDir = properties.getProperty("user.dir");
// Java 运行时环境版本
String javaVersion = properties.getProperty("java.version");
String osInfo = "";
// 根据操作系统执行特定的命令来获取更多信息
if (osName.toLowerCase().contains("win")) {
// Windows特定的代码
osInfo = getWindowsSpecificInfo();
} else if (osName.toLowerCase().contains("mac")) {
// macOS特定的代码
osInfo = getMacSpecificInfo();
} else if (osName.toLowerCase().contains("nix") || osName.toLowerCase().contains("nux")) {
// Linux特定的代码
osInfo = getLinuxSpecificInfo();
}
ComputerFunctionResponse response = new ComputerFunctionResponse();
response.setOsName(osName);
response.setOsVersion(osVersion);
response.setOsArch(osArch);
response.setUserName(userName);
response.setUserHome(userHome);
response.setUserDir(userDir);
response.setJavaVersion(javaVersion);
response.setOsInfo(osInfo);
return response;
}
private String getWindowsSpecificInfo() {
StringBuilder cache = new StringBuilder();
// Windows特定的系统信息获取
try {
Process process = Runtime.getRuntime().exec("systeminfo");
java.io.BufferedReader reader = new java.io.BufferedReader(new java.io.InputStreamReader(process.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
cache.append(line);
}
} catch (Exception e) {
e.printStackTrace();
}
return cache.toString();
}
private static String getMacSpecificInfo() {
StringBuilder cache = new StringBuilder();
// macOS特定的系统信息获取
try {
Process process = Runtime.getRuntime().exec("system_profiler SPHardwareDataType");
java.io.BufferedReader reader = new java.io.BufferedReader(new java.io.InputStreamReader(process.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
cache.append(line);
}
} catch (Exception e) {
e.printStackTrace();
}
return cache.toString();
}
private static String getLinuxSpecificInfo() {
StringBuilder cache = new StringBuilder();
// Linux特定的系统信息获取
try {
Process process = Runtime.getRuntime().exec("lshw -short");
java.io.BufferedReader reader = new java.io.BufferedReader(new java.io.InputStreamReader(process.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
cache.append(line);
}
} catch (Exception e) {
e.printStackTrace();
}
return cache.toString();
}
}
- 服务方法必须配置 @Tool(description = “获取电脑配置”) 有多少个方法,就给方法配置这个注解。这个注解是可以被 Spring AI 识别
- 这是一个获取电脑配置的服务,在 ApiTest 类里也加入了这样的操作。开发可以先做这样的验证,之后在开发服务
3.启动配置
@Slf4j
@SpringBootApplication
public class McpServerComputerApplication implements CommandLineRunner {
public static void main(String[] args) {
SpringApplication.run(McpServerComputerApplication.class, args);
}
@Bean
public ToolCallbackProvider computerTools(ComputerService computerService) {
return MethodToolCallbackProvider.builder().toolObjects(computerService).build();
}
@Override
public void run(String... args) throws Exception {
log.info("mcp server computer success!");
}
}
-
在 Application 或者 config 配置类,增加工具类启动
-
toolObjects 可以设置你所有的工具包,ComputerService、XxxService 等
4. 生成jar包

5. 服务对接
{
"mcp-server-computer": {
"command": "java",
"args": [
"-Dspring.ai.mcp.server.stdio=true",
"-jar",
"/Users/fuzhengwei/Applications/apache-maven-3.8.4/repository/cn/bugstack/mcp/mcp-server-computer/1.0.0/mcp-server-computer-1.0.0.jar"
]
}
}
6. AI工作流测试
@Test
public void test() {
String userInput = "获取电脑配置";
userInput = "获取电脑配置 在 /Users/root/Desktop 文件夹下,创建 电脑.txt 把电脑配置写入 电脑.txt";
var chatClient = chatClientBuilder
.defaultTools(tools)
.defaultOptions(OpenAiChatOptions.builder()
.model("gpt-4o")
.build())
.build();
System.out.println("\n>>> QUESTION: " + userInput);
System.out.println("\n>>> ASSISTANT: " + chatClient.prompt(userInput).call().content());
}

111

被折叠的 条评论
为什么被折叠?



