使用方法讓我通過(guò)具體案例來(lái)說(shuō)明 WebMvcSseServerTransport 的使用:

1. 基礎(chǔ)配置案例

Spring MVC 配置

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

2. 服務(wù)器端使用案例

2.1 基本服務(wù)器設(shè)置

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

2.2 添加工具支持

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

2.3 添加資源支持

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

3. 完整應(yīng)用案例

3.1 AI助手服務(wù)器

@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", "搜索知識(shí)庫(kù)", searchSchema),
            this::performSearch
        );
        var writeTool = new SyncToolRegistration(
            new Tool("write", "生成文檔", writeSchema),
            this::generateDocument
        );
        // 2. 定義資源
        var knowledgeBase = new SyncResourceRegistration(
            new Resource("kb://docs", "知識(shí)庫(kù)文檔"),
            this::readKnowledgeBase
        );
        // 3. 創(chuàng)建服務(wù)器
        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. 錯(cuò)誤處理案例

@Component
class McpErrorHandler {
    private final McpServer mcpServer;
    public void handleError(Exception e) {
        // 1. 記錄錯(cuò)誤
        logger.error("MCP error: ", e);
        // 2. 發(fā)送日志通知
        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() {
        // 初始化服務(wù)器
        mcpServer.initialize();
    }
    @PreDestroy
    public void shutdown() {
        try {
            // 1. 優(yōu)雅關(guān)閉服務(wù)器
            mcpServer.closeGracefully();
            // 2. 關(guān)閉傳輸層
            transport.closeGracefully()
                .block(Duration.ofSeconds(5));
        } catch (Exception e) {
            logger.error("Shutdown error", e);
            // 強(qiáng)制關(guān)閉
            mcpServer.close();
        }
    }
}

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

原文轉(zhuǎn)載自:https://mp.weixin.qq.com/s/XtQF7qQpgIq7hsCtOzQoTg

上一篇:

DeepSeek發(fā)布開(kāi)源數(shù)學(xué)定理證明模型

下一篇:

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

我們有何不同?

API服務(wù)商零注冊(cè)

多API并行試用

數(shù)據(jù)驅(qū)動(dòng)選型,提升決策效率

查看全部API→
??

熱門(mén)場(chǎng)景實(shí)測(cè),選對(duì)API

#AI文本生成大模型API

對(duì)比大模型API的內(nèi)容創(chuàng)意新穎性、情感共鳴力、商業(yè)轉(zhuǎn)化潛力

25個(gè)渠道
一鍵對(duì)比試用API 限時(shí)免費(fèi)

#AI深度推理大模型API

對(duì)比大模型API的邏輯推理準(zhǔn)確性、分析深度、可視化建議合理性

10個(gè)渠道
一鍵對(duì)比試用API 限時(shí)免費(fèi)