<dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-bom</artifactId> <version>1.0.0-M5</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.ai</groupId> <artifactId>spring-ai-openai-spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.experimental</groupId> <artifactId>spring-ai-mcp</artifactId> <version>0.4.1</version> </dependency> </dependencies>
spring.ai.openai.base-url=https://api.openai-hk.com spring.ai.openai.api-key=XXX
@Bean public CommandLineRunner predefinedQuestions(ChatClient.Builder chatClientBuilder, List<McpFunctionCallback> functionCallbacks, ConfigurableApplicationContext context) { return args -> { var chatClient = chatClientBuilder .defaultFunctions(functionCallbacks.toArray(new McpFunctionCallback[0])) .build(); String question1 = "mcp.txt 这篇文档有什么建议吗?方便公众号传播推广"; System.out.println("ASSISTANT: " + chatClient.prompt(question1).call().content()); context.close(); }; } @Bean public List<McpFunctionCallback> functionCallbacks(McpSyncClient mcpClient) { return mcpClient.listTools(null) .tools() .stream() .map(tool -> new McpFunctionCallback(mcpClient, tool)) .toList(); } @Bean(destroyMethod = "close") public McpSyncClient mcpClient() { var stdioParams = ServerParameters.builder("npx") .args("-y", "@modelcontextprotocol/server-filesystem", getDbPath()) .build(); var mcpClient = McpClient.using(new StdioClientTransport(stdioParams)) .requestTimeout(Duration.ofSeconds(10)).sync(); var init = mcpClient.initialize(); System.out.println("MCP Initialized: " + init); return mcpClient; } private static String getDbPath() { return Paths.get(System.getProperty("user.dir"), "target").toString(); }
mvn springboot:run