依赖

除了引入springboot的依赖,还需要mcp的sdk.

<dependency>
            <groupId>io.modelcontextprotocol.sdk</groupId>
            <artifactId>mcp</artifactId>
 </dependency>

可以加一个bom管理mcp sdk相关依赖

<dependencyManagement>
    <dependencies>
        <dependency>
                  <groupId>io.modelcontextprotocol.sdk</groupId>
                  <artifactId>mcp-bom</artifactId>
                  <version>0.11.0</version>
                  <type>pom</type>
                  <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

代码

启动类

启动类按照springboot写就可以了

OrderService

按照所需业务逻辑写,和mvc无区别.

McpServerConfig

1 创建sse的TransportProvider bean
2 并和"/mcp/message" ,"/sse"这两个路径映射绑定,创建ServletRegistrationBean


@Configuration
@EnableWebMvc
public class McpServerConfig {
    @Bean
    public HttpServletSseServerTransportProvider serverTransportProvider() {
        return new HttpServletSseServerTransportProvider(new ObjectMapper(), "/mcp/message");
    }

    @Bean
    public ServletRegistrationBean customServletBean(HttpServletSseServerTransportProvider transportProvider) {
        return new ServletRegistrationBean(transportProvider, "/mcp/message", "/sse");
    }
}

StartMcpServer

使用上文创建的transportProvider创建McpServer对象,配置tool信息.


@Component
public class SmartMcpServer {

    @Bean(destroyMethod = "close")
    public McpSyncServer mcpSyncServer(HttpServletSseServerTransportProvider transportProvider,
            OrderService orderService) {
        McpSyncServer mcpSyncServer = McpServer.sync(transportProvider)
                .serverInfo("my-server", "1.0.0")
                .capabilities(McpSchema.ServerCapabilities.builder()
                        .tools(true)
                        .logging()
                        .build())
                .build();

        String jsonSchema = """
                {
                    "type":"object",
                    "properties":{
                        "orderId":{
                            "type":"string",
                            "description":"订单号"
                        }
                    },
                    "required":[
                        "orderId"
                    ],
                    "additionalProperties":false
                }
                        """;
        McpSchema.Tool tool = new McpSchema.Tool.Builder().name("getOrderDetail").description("通过订单号获取订单详情")
                .inputSchema(jsonSchema).build();
        BiFunction<McpSyncServerExchange, Map<String, Object>, McpSchema.CallToolResult> call = (exchange,
                arguments) -> {
            OrderService.OrderDetail result = orderService.getOrderDetail(String.valueOf(arguments.get("orderId")));
            return new McpSchema.CallToolResult(result.toString(), false);
        };

        // 绑定描述和执行逻辑
        McpServerFeatures.SyncToolSpecification toolSpecification = new McpServerFeatures.SyncToolSpecification(tool,
                call);

        //
        mcpSyncServer.addTool(toolSpecification);
        return mcpSyncServer;
    }
}

运行

最后启动springboot应用即可

Logo

一站式 AI 云服务平台

更多推荐