alibaba/nacos · warning · NacosApiException

PARAMETER_MISSING

PARAMETER_MISSING

Error message

Required parameter `name` not present

What it means

An INVALID_PARAM (HTTP 400, ErrorCode PARAMETER_MISSING/10000) from the client-facing SkillClientOperationServiceImpl.querySkill: the required name argument is blank. This is the read/discovery path (with MD5 short-circuit), and it refuses to proceed without a resource name rather than returning an ambiguous result.

Source

Thrown at ai/src/main/java/com/alibaba/nacos/ai/service/skills/SkillClientOperationServiceImpl.java:78

    private final SkillOperationService skillOperationService;
    
    private final SkillIndexManifestService manifestService;
    
    private final AiResourceVersionPersistService aiResourceVersionPersistService;
    
    public SkillClientOperationServiceImpl(@Lazy SkillOperationService skillOperationService,
        SkillIndexManifestService manifestService,
        AiResourceVersionPersistService aiResourceVersionPersistService) {
        this.skillOperationService = skillOperationService;
        this.manifestService = manifestService;
        this.aiResourceVersionPersistService = aiResourceVersionPersistService;
    }
    
    @Override
    public SkillQueryResult querySkill(String namespaceId, String name, String version,
        String label, String clientMd5) throws NacosException {
        if (StringUtils.isBlank(name)) {
            throw new NacosApiException(NacosException.INVALID_PARAM, ErrorCode.PARAMETER_MISSING,
                "Required parameter `name` not present");
        }
        
        // Step 1: Resolve target version up-front so we can short-circuit on MD5 match without
        // loading the full skill bytes. Manifest absence here is treated as not-found and falls
        // through to skillOperationService.querySkill which raises a consistent error message.
        String resolvedVersion = resolveVersionFromManifest(namespaceId, name, version, label);
        
        // Step 2: Read the published content MD5 directly from the version row's storage JSON.
        String storedMd5 = readStoredContentMd5(namespaceId, name, resolvedVersion);
        
        // Step 3: Fast path — client cache is fresh, no need to load skill bytes.
        if (StringUtils.isNotBlank(storedMd5) && StringUtils.isNotBlank(clientMd5)
            && storedMd5.equals(clientMd5)) {
            return SkillQueryResult.notModified(storedMd5, resolvedVersion);
        }
        
        // Step 4: Load the skill via the regular query path. This also validates meta visibility

View on GitHub (pinned to 9b989acdf1)

Solutions

  1. Supply a non-blank name in the query call.
  2. Add a client-side required-field check before invoking the API.
  3. If name is unknown, list skills first (listSkills) to discover it.

Example fix

// before
client.querySkill(ns, "", null, null, md5); // throws 325

// after
client.querySkill(ns, "weather-tool", null, null, md5);
Defensive patterns

Strategy: validation

Validate before calling

if (StringUtils.isBlank(name)) {
    throw new IllegalArgumentException("name is required");
}
client.querySkill(ns, name.trim(), version, label, clientMd5);

Prevention

When it happens

Trigger: Calling the skill query/lookup endpoint or SkillClientOperationService.querySkill with an empty or whitespace-only name (version/label/clientMd5 are optional; name is not).

Common situations: SDK caller forgot to set the name; frontend sent an empty query field; misrouted request that dropped the name parameter; automated poller with a blank name config.

Related errors


AI-assisted analysis of alibaba/nacos@9b989acdf1 (2026-08-14). Data as JSON: /api/errors/749a781aaf243a2b. Report an issue: GitHub.