
墨西哥支付方式:是什么?
使用方法讓我通過具體案例來說明 WebMvcSseServerTransport 的使用:
@Configuration
@EnableWebMvc
class McpConfig {
@Bean
public WebMvcSseServerTransport mcpTransport() {
return new WebMvcSseServerTransport(
new ObjectMapper(),
"/mcp/message" ?// 消息端點
);
}
@Bean
public RouterFunction mcpRoutes(WebMvcSseServerTransport transport) {
return transport.getRouterFunction();
}
}
// 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();
// 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();
// 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();
@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();
}
}
@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();
}
}
@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()
)
);
}
}
@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