alibaba/nacos · error · NacosApiException

PARAMETER_MISSING

PARAMETER_MISSING

Error message

Required ARD artifact parameter not present

What it means

ArdArtifactService.get loads a versioned ARD artifact and requires namespaceId, resourceType, resourceName, and version all to be non-blank. If any of the four is blank it throws PARAMETER_MISSING (HTTP 400) before lookup.

Source

Thrown at ai-registry-adaptor/src/main/java/com/alibaba/nacos/airegistry/service/ard/ArdArtifactService.java:77

    
    @Autowired
    public ArdArtifactService(AiResourceManager resourceManager,
        McpServerOperationService mcpServerOperationService,
        AiResourceFileReader fileReader, SkillClientOperationService skillClientOperationService) {
        this.resourceManager = resourceManager;
        this.mcpServerOperationService = mcpServerOperationService;
        this.fileReader = fileReader;
        this.skillClientOperationService = skillClientOperationService;
    }
    
    /**
     * Load a versioned ARD artifact.
     */
    public ArdArtifact get(String namespaceId, String resourceType, String resourceName,
        String version, String mcpName) throws NacosException {
        if (StringUtils.isBlank(namespaceId) || StringUtils.isBlank(resourceType)
            || StringUtils.isBlank(resourceName) || StringUtils.isBlank(version)) {
            throw new NacosApiException(NacosException.INVALID_PARAM,
                ErrorCode.PARAMETER_MISSING,
                "Required ARD artifact parameter not present");
        }
        if (AiResourceConstants.RESOURCE_TYPE_SKILL.equals(resourceType)) {
            return skillArtifact(namespaceId, resourceName, version);
        }
        if (AiResourceConstants.RESOURCE_TYPE_PROMPT.equals(resourceType)) {
            return promptArtifact(namespaceId, resourceType, resourceName, version);
        }
        if (AiResourceConstants.RESOURCE_TYPE_MCP.equals(resourceType)) {
            McpServerDetailInfo detail = mcpServerOperationService.getMcpServerDetail(namespaceId,
                resourceName, mcpName, version);
            return new ArdArtifact(ArdProtocolConstants.MEDIA_TYPE_MCP, detail);
        }
        throw new NacosApiException(NacosException.INVALID_PARAM,
            ErrorCode.PARAMETER_VALIDATE_ERROR,
            "Unsupported ARD artifact resourceType: " + resourceType);
    }

View on GitHub (pinned to 9b989acdf1)

Solutions

  1. Supply all four parameters: namespaceId, resourceType, resourceName, and version.
  2. For resourceType use one of the supported constants (skill, prompt, mcp).
  3. Non-empty-check each parameter client-side before the call.

Example fix

// before
GET /artifacts?namespaceId=public&resourceType=skill&resourceName=my-skill

// after
GET /artifacts?namespaceId=public&resourceType=skill&resourceName=my-skill&version=1.0.0
Defensive patterns

Strategy: validation

Validate before calling

if (StringUtils.isBlank(namespaceId) || StringUtils.isBlank(resourceType)
        || StringUtils.isBlank(resourceName) || StringUtils.isBlank(version)) {
    throw new IllegalArgumentException(
        "namespaceId, resourceType, resourceName and version are all required");
}

Prevention

When it happens

Trigger: Calling GET /artifacts (or the underlying service) missing any of ?namespaceId=, ?resourceType=, ?resourceName=, or ?version=.

Common situations: Resolving a catalog URL that omits the version; a client that defaults resourceType to empty; a stale link missing the resource name.

Related errors


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