nacos
GitHuban easy-to-use dynamic service discovery, configuration and service management platform for building AI cloud native applications.
nacos Specification
Located in ai-registry-adaptor/src/test/resources/ard-spec/5fa2f5aef790b478319f6a3b43adf4661b0ed0e0/ard.openapi.yaml on branch HEAD
3.x (YAML)
YAML
10.7 KB
Raw YAML Specification
openapi: 3.1.0
info:
title: Agentic Resource Discovery Registry API
version: 0.5.0
description: |
Universal federated discovery API specification for AI agents, tools, and capabilities.
Allows LLM orchestrators to semantically search and discover registries for relevant capabilities
and enables registry-to-registry federated query routing.
paths:
/search:
post:
summary: Semantic Search Registry
description: |
Query a registry with natural language to find matching capabilities.
Accepts a shared semantic and structural query object. Supports multi-hop federation.
operationId: searchAgents
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/SearchRequest'
responses:
'200':
description: Successful search operation.
content:
application/json:
schema:
$ref: '#/components/schemas/SearchResponse'
'400':
$ref: '#/components/responses/400BadRequest'
'401':
$ref: '#/components/responses/401Unauthorized'
'429':
$ref: '#/components/responses/429TooManyRequests'
'500':
$ref: '#/components/responses/500InternalError'
/explore:
post:
summary: Dynamic Registry Introspection
description: |
Aggregates statistical facets and bucketing over the matched search space.
Returns counts instead of ranked catalog entries.
operationId: exploreRegistry
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/ExploreRequest'
responses:
'200':
description: Successful explore operation.
content:
application/json:
schema:
$ref: '#/components/schemas/ExploreResponse'
'400':
$ref: '#/components/responses/400BadRequest'
'401':
$ref: '#/components/responses/401Unauthorized'
'429':
$ref: '#/components/responses/429TooManyRequests'
'501':
description: Dynamic registry exploration is not implemented by this server.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
'500':
$ref: '#/components/responses/500InternalError'
/agents:
get:
summary: Browse Catalog Entries
description: |
Deterministic, highly cacheable listing endpoint designed for developer portals.
Relies on strict EBNF database filtering instead of natural language search.
operationId: listAgents
parameters:
- name: filter
in: query
required: false
description: EBNF-like filter expression (e.g., "type = 'application/mcp-server-card+json' AND createdAfter > '2026-01-01'")
schema:
type: string
- name: orderBy
in: query
required: false
description: Field and sorting direction (e.g., "displayName", "updatedAt DESC")
schema:
type: string
- name: pageSize
in: query
required: false
description: Maximum number of entries to return.
schema:
type: integer
default: 20
maximum: 100
- name: pageToken
in: query
required: false
description: Token for pagination.
schema:
type: string
responses:
'200':
description: Successful deterministic list operation.
content:
application/json:
schema:
$ref: '#/components/schemas/ListResponse'
'400':
$ref: '#/components/responses/400BadRequest'
'401':
$ref: '#/components/responses/401Unauthorized'
'429':
$ref: '#/components/responses/429TooManyRequests'
'500':
$ref: '#/components/responses/500InternalError'
components:
schemas:
QueryModel:
type: object
properties:
text:
type: string
description: Natural language description narrows the set by semantic relevance.
example: "find me a weather lookup tool"
filter:
type: object
description: |
Structured constraints. Keys are field paths (can be dot-separated for nested fields).
Values are arrays or scalar values.
additionalProperties:
oneOf:
- type: string
- type: array
items:
type: string
example:
type: ["application/mcp-server-card+json"]
"trustManifest.attestations.type": ["SOC2-Type2"]
additionalProperties: false
SearchQueryModel:
allOf:
- $ref: '#/components/schemas/QueryModel'
- type: object
required:
- text
SearchRequest:
type: object
required:
- query
properties:
query:
$ref: '#/components/schemas/SearchQueryModel'
federation:
type: string
enum: [auto, referrals, none]
default: auto
pageSize:
type: integer
default: 10
description: Maximum number of search results to return.
pageToken:
type: string
description: Pagination token.
additionalProperties: false
ExploreRequest:
type: object
required:
- resultType
properties:
query:
$ref: '#/components/schemas/QueryModel'
resultType:
type: object
required:
- facets
properties:
facets:
type: array
items:
$ref: '#/components/schemas/ExploreFacetRequest'
additionalProperties: false
ExploreFacetRequest:
type: object
required:
- field
properties:
field:
type: string
description: Dot-separated path of the catalogEntry property to aggregate.
example: "type"
limit:
type: integer
default: 20
minCount:
type: integer
default: 1
additionalProperties: false
ExploreResponse:
type: object
required:
- resultType
- facets
properties:
resultType:
type: string
enum: [facets]
facets:
type: object
additionalProperties:
$ref: '#/components/schemas/ExploreFacetResult'
additionalProperties: false
ExploreFacetResult:
type: object
required:
- buckets
properties:
buckets:
type: array
items:
$ref: '#/components/schemas/ExploreFacetBucket'
otherCount:
type: integer
additionalProperties: false
ExploreFacetBucket:
type: object
required:
- value
- count
properties:
value:
type: string
count:
type: integer
additionalProperties: false
SearchResponse:
type: object
required:
- results
properties:
results:
type: array
items:
$ref: '#/components/schemas/SearchResultItem'
referrals:
type: array
description: List of upstream registries recommended to the client. Only returned in 'referrals' federation mode.
items:
$ref: '#/components/schemas/RegistryReferral'
pageToken:
type: string
description: Token for paging subsequent results.
additionalProperties: false
SearchResultItem:
allOf:
- $ref: './ai-catalog.schema.json#/$defs/catalogEntry'
type: object
required:
- score
- source
properties:
score:
type: integer
minimum: 0
maximum: 100
description: "Semantic relevance rating (0 to 100) computed by the registry. Note: This is not a security or trust score."
example: 95
source:
type: string
format: uri
description: The URL endpoint of the registry where this entry was indexed.
example: "https://registry.acme.com/api/v1/"
RegistryReferral:
type: object
required:
- identifier
- displayName
- type
- url
properties:
identifier:
type: string
description: Logical identifier of the referred registry.
example: "urn:air:nlweb.ai:registry:public"
displayName:
type: string
description: Name of the referred registry.
example: "Public Agent Finder"
type:
type: string
enum: [application/ai-registry, application/ai-registry+json]
description: Registry media type identifier.
url:
type: string
format: uri
description: Endpoint URL for the referred registry's search route.
example: "https://finder.nlweb.ai/search"
ListResponse:
type: object
required:
- items
properties:
items:
type: array
items:
$ref: './ai-catalog.schema.json#/$defs/catalogEntry'
total:
type: integer
description: Total count of matching entries in the registry.
pageToken:
type: string
description: Token for paginating subsequent results.
Error:
type: object
required:
- errorCode
- message
properties:
errorCode:
type: string
description: Standard uppercase error classification code.
example: "INVALID_ARGUMENT"
message:
type: string
description: Human-readable description explaining the error.
example: "The filter expression syntax 'type = MCP' is invalid. Did you mean 'type = application/mcp-server-card+json'?"
responses:
400BadRequest:
description: Malformed request payload or invalid syntax.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
401Unauthorized:
description: Credentials missing or rejected.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
429TooManyRequests:
description: Rate limit exceeded.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'
500InternalError:
description: Internal server error.
content:
application/json:
schema:
$ref: '#/components/schemas/Error'