private List parseMcpServerInfo()

in spring-ai-alibaba-mcp/spring-ai-alibaba-mcp-nacos-dynamic-server/src/main/java/com/alibaba/cloud/ai/mcp/dynamic/server/tools/DynamicToolsInitializer.java [108:167]


	private List<ToolCallback> parseMcpServerInfo(Map<String, Object> mcpServerInfo) {
		Object mcpName = mcpServerInfo.get("name");
		try {
			if (mcpServerInfo.containsKey("data")) {
				Map<String, Object> data = (Map<String, Object>) mcpServerInfo.get("data");
				if (data != null && data.containsKey("toolSpec")) {
					// 解析工具信息
					Object toolSpec = data.get("toolSpec");
					Object remoteServerConfig = data.get("remoteServerConfig");
					Object localeServerConfig = data.get("localeServerConfig");
					String protocol = (String) data.get("protocol");
					if (toolSpec != null) {
						Map<String, Object> toolSpecMap = JacksonUtils.toObj(JacksonUtils.toJson(toolSpec), Map.class);
						List<Map<String, Object>> tools = (List<Map<String, Object>>) toolSpecMap.get("tools");
						Map<String, Object> toolsMeta = (Map<String, Object>) toolSpecMap.get("toolsMeta");
						List<ToolCallback> toolCallbacks = new ArrayList<>();
						for (Map<String, Object> tool : tools) {
							String toolName = (String) tool.get("name");
							String toolDescription = (String) tool.get("description");
							Object inputSchema = tool.get("inputSchema");
							Object metaInfo = toolsMeta.getOrDefault(toolName, new Object());

							// 判断 metaInfo.enabled 是否为 true
							boolean enabled = false;
							if (metaInfo instanceof Map) {
								Object enabledObj = ((Map<?, ?>) metaInfo).get("enabled");
								if (enabledObj instanceof Boolean) {
									enabled = (Boolean) enabledObj;
								}
								else if (enabledObj instanceof String) {
									enabled = Boolean.parseBoolean((String) enabledObj);
								}
							}
							if (!enabled) {
								logger.info("Tool {} is disabled by metaInfo, skipping.", toolName);
								continue;
							}

							ToolDefinition toolDefinition = DynamicNacosToolDefinitionV3.builder()
								.name(toolName)
								.description(toolDescription)
								.inputSchema(inputSchema)
								.protocol(protocol)
								.remoteServerConfig(remoteServerConfig)
								.localServerConfig(localeServerConfig)
								.toolsMeta(metaInfo)
								.build();
							toolCallbacks.add(new DynamicNacosToolCallbackV3(toolDefinition));
						}
						return toolCallbacks;
					}

				}
			}
		}
		catch (Exception e) {
			logger.warn("Failed to get or parse nacos mcp server info (mcpName {})", mcpName, e);
		}
		return null;
	}