{"record":{"id":"d6e25db13153fe0e","repo":"alibaba/nacos","slug":"mcp-server-external-id-is-blank","errorCode":null,"errorMessage":"MCP server external id is blank","messagePattern":"MCP server external id is blank","errorType":"exception","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"ai/src/main/java/com/alibaba/nacos/ai/service/McpExternalDataAdaptor.java","lineNumber":158,"sourceCode":"        if (StringUtils.isBlank(urlData)) {\n            throw new IllegalArgumentException(\"URL is blank\");\n        }\n        return fetchUrlPage(urlData.trim(), cursor, limit, search);\n    }\n    \n    /**\n     * Fetch one official MCP registry server by name or generated id.\n     *\n     * @param urlData registry endpoint\n     * @param externalId selected server name or generated id\n     * @param limit search page size\n     * @return adapted MCP server detail\n     * @throws Exception if registry fetch or adaptation failed\n     */\n    public McpServerDetailInfo fetchOfficialRegistryServer(String urlData, String externalId,\n        int limit) throws Exception {\n        if (StringUtils.isBlank(externalId)) {\n            throw new IllegalArgumentException(\"MCP server external id is blank\");\n        }\n        int actualLimit = limit > 0 ? limit : 30;\n        UrlPageResult page = fetchOfficialRegistryPage(urlData, null, actualLimit, externalId);\n        if (CollectionUtils.isNotEmpty(page.getServers())) {\n            for (McpServerDetailInfo each : page.getServers()) {\n                if (StringUtils.equals(externalId, each.getName())\n                    || StringUtils.equals(externalId, each.getId())) {\n                    return each;\n                }\n            }\n        }\n        throw new IllegalStateException(\"MCP server not found in registry: \" + externalId);\n    }\n    \n    private UrlPageResult fetchUrlPage(String urlData, String cursor, Integer limit, String search)\n        throws Exception {\n        String base = urlData.trim();\n        HttpClient client = getHttpClient();","sourceCodeStart":140,"sourceCodeEnd":176,"githubUrl":"https://github.com/alibaba/nacos/blob/9b989acdf181d00898f2e8839257bb2b2a3cefe3/ai/src/main/java/com/alibaba/nacos/ai/service/McpExternalDataAdaptor.java#L140-L176","documentation":"Thrown by McpExternalDataAdaptor.fetchOfficialRegistryServer when the externalId (server name or generated id) used to look up a single registry server is blank. The lookup needs a concrete identifier to search the registry page. It is an IllegalArgumentException.","triggerScenarios":"Calling fetchOfficialRegistryServer(urlData, externalId, limit) with a null/empty/whitespace externalId.","commonSituations":"User selection not propagated from the UI; an import flow that resolves the target server lazily but the resolution returned empty; defaulting externalId to an unset variable.","solutions":["Pass a non-blank externalId (the server name or its generated id from the registry).","Validate the selected server id is non-blank before invoking the lookup.","Surface a clear user-facing error if no server was selected."],"exampleFix":"// before\nadaptor.fetchOfficialRegistryServer(registryUrl, \"\", 30); // blank id -> error\n\n// after\nadaptor.fetchOfficialRegistryServer(registryUrl, selectedServer.getId(), 30);","handlingStrategy":"validation","validationCode":"if (StringUtils.isBlank(externalId)) { throw new IllegalArgumentException(\"externalId is required\"); }","typeGuard":"boolean hasExternalId(String id) { return id != null && !id.trim().isEmpty(); }","tryCatchPattern":"try { adaptor.fetchOfficialRegistryServer(url, id, limit); }\ncatch (IllegalArgumentException e) { promptUserToSelect(); }","preventionTips":["Require an explicit server selection before lookup.","Propagate the chosen id from the listing step, not a free text field."],"tags":["mcp","registry","import","validation","illegal-argument"],"backgroundTag":null,"analyzedSha":"9b989acdf181d00898f2e8839257bb2b2a3cefe3","analyzedAt":"2026-08-14T07:17:31.569Z","schemaVersion":2},"datasetVersion":"2026-08-14T10:17:34.591Z"}