public String call()

in spring-ai-alibaba-mcp/spring-ai-alibaba-mcp-nacos-dynamic-server/src/main/java/com/alibaba/cloud/ai/mcp/dynamic/server/callback/DynamicNacosToolCallbackV3.java [282:350]


	public String call(@NonNull final String input, final ToolContext toolContext) {
		try {
			logger.info("[call] input: {} toolContext: {}", input, JacksonUtils.toJson(toolContext));

			// input解析
			logger.info("[call] input string: {}", input);
			Map<String, Object> args = new HashMap<>();
			if (!input.isEmpty()) {
				try {
					args = objectMapper.readValue(input, Map.class);
					logger.info("[call] parsed args: {}", args);
				}
				catch (Exception e) {
					logger.error("[call] Failed to parse input to args", e);
				}
			}

			DynamicNacosToolDefinitionV3 nacosToolDefinition = (DynamicNacosToolDefinitionV3) this.toolDefinition;
			logger.info("Tool callback toolDefinition: {}", JacksonUtils.toJson(nacosToolDefinition));
			Object remoteServerConfig = nacosToolDefinition.getRemoteServerConfig();
			String protocol = nacosToolDefinition.getProtocol();
			if ("http".equalsIgnoreCase(protocol) || "https".equalsIgnoreCase(protocol)) {
				Map<String, Object> configMap = (Map<String, Object>) remoteServerConfig;
				Object serviceRef = configMap.get("serviceRef");
				if (serviceRef != null) {
					Map<String, Object> refMap = (Map<String, Object>) serviceRef;
					String serviceName = (String) refMap.get("serviceName");
					String groupName = (String) refMap.get("groupName");
					Instance instance = namingService.selectOneHealthyInstance(serviceName, groupName);
					logger.info("Tool callback instance: {}", JacksonUtils.toJson(instance));
					Map<String, Object> toolsMeta = (Map<String, Object>) nacosToolDefinition.getToolsMeta();
					String baseUrl = "http://" + instance.getIp() + ":" + instance.getPort();

					if (toolsMeta != null && toolsMeta.containsKey("templates")) {
						Map<String, Object> templates = (Map<String, Object>) toolsMeta.get("templates");
						if (templates != null && templates.containsKey("json-go-template")) {
							Object jsonGoTemplate = templates.get("json-go-template");
							try {
								logger.info("[call] json-go-template: {}",
										objectMapper.writeValueAsString(jsonGoTemplate));
							}
							catch (JsonProcessingException e) {
								logger.error("[call] Failed to serialize json-go-template", e);
							}
							try {
								// 调用executeToolRequest
								String configJson = objectMapper.writeValueAsString(jsonGoTemplate);
								logger.info("[executeToolRequest] configJson: {} args: {} baseUrl: {}", configJson,
										args, baseUrl);
								return processToolRequest(configJson, args, baseUrl).block();
							}
							catch (Exception e) {
								logger.error("Failed to execute tool request", e);
								return "";
							}
						}
					}
					else {
						logger.warn("[call] templates not found in toolsMeta");
					}
				}
			}

			return "";
		}
		catch (NacosException e) {
			throw new RuntimeException(e);
		}
	}