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
- Supply all four parameters: namespaceId, resourceType, resourceName, and version.
- For resourceType use one of the supported constants (skill, prompt, mcp).
- 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
- Build artifact URLs from all four components; never omit version.
- Validate all four params client-side before the call.
- Use supported resourceType constants (skill, prompt, mcp).
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.