feat: mcp-1.0.0

This commit is contained in:
ageerle
2025-04-16 10:25:10 +08:00
parent f24ff5bbdd
commit d1006f50ad
26 changed files with 250 additions and 739 deletions

View File

@@ -1,16 +0,0 @@
package org.ruoyi.mcp;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* @author ageer
*/
@SpringBootApplication
public class McpServerApplication {
public static void main(String[] args) {
SpringApplication.run(McpServerApplication.class, args);
}
}

View File

@@ -1,100 +0,0 @@
package org.ruoyi.mcp.config;
import org.ruoyi.mcp.service.McpCustomService;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.modelcontextprotocol.server.McpServerFeatures;
import io.modelcontextprotocol.spec.McpSchema;
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;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.util.List;
import java.util.Map;
import java.util.function.Consumer;
/**
* @author ageer
*/
@Configuration
@EnableWebMvc
public class McpServerConfig implements WebMvcConfigurer {
@Bean
public ToolCallbackProvider openLibraryTools(McpCustomService mcpService) {
return MethodToolCallbackProvider.builder().toolObjects(mcpService).build();
}
@Bean
public List<McpServerFeatures.SyncResourceRegistration> resourceRegistrations() {
// Create a resource registration for system information
var systemInfoResource = new McpSchema.Resource(
"system://info",
"System Information",
"Provides basic system information including Java version, OS, etc.",
"application/json", null
);
var resourceRegistration = new McpServerFeatures.SyncResourceRegistration(systemInfoResource, (request) -> {
try {
var systemInfo = Map.of(
"javaVersion", System.getProperty("java.version"),
"osName", System.getProperty("os.name"),
"osVersion", System.getProperty("os.version"),
"osArch", System.getProperty("os.arch"),
"processors", Runtime.getRuntime().availableProcessors(),
"timestamp", System.currentTimeMillis());
String jsonContent = new ObjectMapper().writeValueAsString(systemInfo);
return new McpSchema.ReadResourceResult(
List.of(new McpSchema.TextResourceContents(request.uri(), "application/json", jsonContent)));
}
catch (Exception e) {
throw new RuntimeException("Failed to generate system info", e);
}
});
return List.of(resourceRegistration);
}
@Bean
public List<McpServerFeatures.SyncPromptRegistration> promptRegistrations() {
var prompt = new McpSchema.Prompt("greeting", "A friendly greeting prompt",
List.of(new McpSchema.PromptArgument("name", "The name to greet", true)));
var promptRegistration = new McpServerFeatures.SyncPromptRegistration(prompt, getPromptRequest -> {
String nameArgument = (String) getPromptRequest.arguments().get("name");
if (nameArgument == null) {
nameArgument = "friend";
}
var userMessage = new McpSchema.PromptMessage(McpSchema.Role.USER,
new McpSchema.TextContent("Hello " + nameArgument + "! How can I assist you today?"));
return new McpSchema.GetPromptResult("A personalized greeting message", List.of(userMessage));
});
return List.of(promptRegistration);
}
@Bean
public Consumer<List<McpSchema.Root>> rootsChangeConsumer() {
return roots -> {
System.out.println("rootsChange");
};
}
}

View File

@@ -1,20 +0,0 @@
package org.ruoyi.mcp.service;
import org.springframework.ai.tool.annotation.Tool;
import org.springframework.stereotype.Service;
/**
* @author ageer
*/
@Service
public class McpCustomService {
public record User(String userName, String userBalance) {
}
@Tool(description = "根据用户名称查询用户信息")
public User getUserBalance(String username) {
return new User("admin","99.99");
}
}