使用方法讓我通過具體案例來說明 WebMvcSseServerTransport 的使用:

1. 基礎配置案例

Spring MVC 配置

@Configuration
@EnableWebMvc
class McpConfig {
    @Bean
    public WebMvcSseServerTransport mcpTransport() {
        return new WebMvcSseServerTransport(
            new ObjectMapper(),
            "/mcp/message" ?// 消息端點
        );
    }
    @Bean
    public RouterFunction mcpRoutes(WebMvcSseServerTransport transport) {
        return transport.getRouterFunction();
    }
}

2. 服務器端使用案例

2.1 基本服務器設置

// 1. 創建服務器能力配置
var capabilities = McpSchema.ServerCapabilities.builder()
    .resources(true) ?// 支持資源訪問
    .tools(true) ? ? ?// 支持工具調用
    .prompts(true) ? ?// 支持提示模板
    .logging() ? ? ? ?// 支持日志
    .build();
// 2. 創建服務器
var mcpServer = McpServer.sync(mcpTransport)
    .serverInfo("demo-server", "1.0.0")
    .capabilities(capabilities)
    .build();

2.2 添加工具支持

// 1. 定義計算器工具
var calculatorTool = new SyncToolRegistration(
    new Tool("calculator", "基礎計算器", schema),
    request -> {
        Map params = request.arguments();
        double result = calculate(params);
        return new CallToolResult(
            List.of(new TextContent(String.valueOf(result))),
            null
        );
    }
);
// 2. 創建帶工具的服務器
var mcpServer = McpServer.sync(mcpTransport)
    .capabilities(capabilities)
    .tools(calculatorTool)
    .build();

2.3 添加資源支持

// 1. 定義文件資源處理器
var fileResource = new SyncResourceRegistration(
    new Resource("file://data", "數據文件"),
    request -> {
        String content = readFile(request.uri());
        return new ReadResourceResult(
            new TextContent(content)
        );
    }
);
// 2. 創建帶資源的服務器
var mcpServer = McpServer.sync(mcpTransport)
    .capabilities(capabilities)
    .resources(fileResource)
    .build();

3. 完整應用案例

3.1 AI助手服務器

@Configuration
class AiAssistantConfig {
    @Bean
    public WebMvcSseServerTransport mcpTransport() {
        return new WebMvcSseServerTransport(
            new ObjectMapper(),
            "/ai/message"
        );
    }
    @Bean
    public McpServer aiServer(WebMvcSseServerTransport transport) {
        // 1. 定義工具
        var searchTool = new SyncToolRegistration(
            new Tool("search", "搜索知識庫", searchSchema),
            this::performSearch
        );
        var writeTool = new SyncToolRegistration(
            new Tool("write", "生成文檔", writeSchema),
            this::generateDocument
        );
        // 2. 定義資源
        var knowledgeBase = new SyncResourceRegistration(
            new Resource("kb://docs", "知識庫文檔"),
            this::readKnowledgeBase
        );
        // 3. 創建服務器
        return McpServer.sync(transport)
            .serverInfo("ai-assistant", "1.0.0")
            .capabilities(ServerCapabilities.builder()
                .tools(true)
                .resources(true)
                .prompts(true)
                .build())
            .tools(searchTool, writeTool)
            .resources(knowledgeBase)
            .build();
    }
}

3.2 變更通知案例

@Service
class ResourceManager {
    private final McpServer mcpServer;
    public void updateResource(String uri, String content) {
        // 1. 更新資源
        saveResource(uri, content);
        // 2. 通知客戶端資源變更
        mcpServer.notifyResourcesListChanged();
    }
    public void addNewTool(Tool tool) {
        // 1. 添加新工具
        mcpServer.addTool(new SyncToolRegistration(
            tool,
            this::handleToolCall
        ));
        // 2. 通知客戶端工具變更
        mcpServer.notifyToolsListChanged();
    }
}

4. 錯誤處理案例

@Component
class McpErrorHandler {
    private final McpServer mcpServer;
    public void handleError(Exception e) {
        // 1. 記錄錯誤
        logger.error("MCP error: ", e);
        // 2. 發送日志通知
        mcpServer.loggingNotification(
            new LoggingMessageNotification(
                LoggingLevel.ERROR,
                "Operation failed: " + e.getMessage()
            )
        );
    }
}

5. 生命周期管理案例

@Component
class McpServerLifecycle {
    private final McpServer mcpServer;
    private final WebMvcSseServerTransport transport;
    @PostConstruct
    public void init() {
        // 初始化服務器
        mcpServer.initialize();
    }
    @PreDestroy
    public void shutdown() {
        try {
            // 1. 優雅關閉服務器
            mcpServer.closeGracefully();
            // 2. 關閉傳輸層
            transport.closeGracefully()
                .block(Duration.ofSeconds(5));
        } catch (Exception e) {
            logger.error("Shutdown error", e);
            // 強制關閉
            mcpServer.close();
        }
    }
}

這些案例展示了 WebMvcSseServerTransport 在不同場景下的使用方式,包括基礎配置、工具和資源管理、錯誤處理以及生命周期管理等方面。通過這些案例,可以更好地理解如何在實際應用中使用 WebMvcSseServerTransport。

原文轉載自:https://mp.weixin.qq.com/s/XtQF7qQpgIq7hsCtOzQoTg

上一篇:

DeepSeek發布開源數學定理證明模型

下一篇:

64張圖,看懂AI Agent的核心技術與未來
#你可能也喜歡這些API文章!

我們有何不同?

API服務商零注冊

多API并行試用

數據驅動選型,提升決策效率

查看全部API→
??

熱門場景實測,選對API

#AI文本生成大模型API

對比大模型API的內容創意新穎性、情感共鳴力、商業轉化潛力

25個渠道
一鍵對比試用API 限時免費

#AI深度推理大模型API

對比大模型API的邏輯推理準確性、分析深度、可視化建議合理性

10個渠道
一鍵對比試用API 限時免費