Agentic Resource Discovery (ARD) Specification

repository·main·Indexed 18 days ago

https://github.com/ards-project/ard-spec

A federated, domain-anchored standard for cataloging, searching, and discovering agentic resources such as MCP servers, A2A agent cards, Skills, and APIs. Built upon the ai-catalog standard, it includes specifications for URN naming patterns, Registry API endpoints (POST /search, GET /agents, and POST /explore), and a Python-based Conformance Testing Tool for verifying implementation compliance.

Tokens
13.5K
Snippets
38
Records
60
Agent score
64%

What's inside ARD

  1. What is Agentic Resource Discovery (ARD)?

    main
    Agentic Resource Discovery (ARD) is a federated, domain-anchored standard designed for cataloging, searching, and discovering agentic resources. These resources include MCP servers, A2A agent cards, Skills, APIs, and other callable services across networks of discovery services. The specification builds upon the ai-catalog standard.
  2. Overview of Agentic Resource Discovery (ARD)

    main
    Agentic Resource Discovery (ARD) is a specification for the federated discovery and search of agentic resources (such as MCP tools, A2A agents, skills, and other callable services). It provides a framework for cataloging and searching these resources across distributed networks, allowing LLMs to discover capabilities dynamically via search rather than requiring manual installation or hardcoding.
  3. The ARD Query Model

    main

    The ARD API uses a common query object for both POST /search and POST /explore endpoints. The query object consists of two primary members:

    • text (String): A natural-language description used for semantic relevance. In POST /search, this field is required.
    • filter (Object): Structured constraints using dot-separated field paths (e.g., trustManifest.attestations.type).

    Filter Semantics:

    • Matching: An entry matches if it satisfies the text relevance AND every constraint in the filter.
    • Logic: Within a single key, values are combined with OR. Across different keys, constraints are combined with AND.
    • Arrays: If the value at a path is an array, a constraint matches if any element satisfies it.
    • Extensibility: Any attribute in a catalog entry (standard fields like type, tags, capabilities, or custom metadata.* fields) can be used as a filter key.
    {
      "query": {
        "text": "find me a flight booking agent",
        "filter": {
          "type": ["application/a2a-agent-card+json"],
          "tags": ["finance"],
          "trustManifest.attestations.type": ["SOC2-Type2"]
        }
      }
    }
  4. Placement of the federation parameter in POST /search

    main

    In the ARD specification (v0.5.0 and later), the federation control parameter is located at the root level of the POST /search request payload. It is a sibling to the query, pageSize, and pageToken parameters.

    Do not place the federation parameter inside the query object. The query object (the QueryModel) is shared with the /explore endpoint and must only contain semantic intent and metadata filtering constraints. The federation parameter is a routing instruction that determines how the registry executes and routes the request across the network topology.

    {
      "federation": "auto",
      "query": {
        "//": "semantic intent and filters go here"
      },
      "pageSize": 20,
      "pageToken": "abc"
    }
  5. Understand the two layers of ARD Discovery

    main

    The ARD discovery specification operates via two distinct layers:

    1. Static Discovery: A decentralized mechanism where developers or enterprises host static JSON manifests (capability manifests).
    2. Dynamic Discovery: Active, searchable services known as Registries that index these static catalogs and provide dynamic search endpoints for agents to query.
  6. Format Agent Identifiers using URNs

    main

    To ensure cross-network uniqueness and decentralized trust, all agent identifiers MUST follow a standardized, domain-anchored URN format: urn:air:<publisher>:<namespace>:<agent-name>.

    • urn: Mandatory prefix.
    • air: The Namespace Identifier (NID) for the ARD ecosystem.
    • <publisher>: A fully qualified domain name (FQDN) acting as the organizational trust anchor (e.g., acme.com).
    • <namespace>: (Optional) Hierarchical segments for categorization (e.g., finance:trading).
    • <agent-name>: (Mandatory) The specific logical short name (e.g., assistant).
    urn:air:<publisher>:<namespace>:<agent-name>
  7. Core Design Principles of ARD

    main

    ARD is built on several key principles to ensure scalability and interoperability:

    • Search-First Discovery: Agents are discovered dynamically through search registries rather than pre-installation.
    • Scalability Beyond Context Windows: Moves the tool selection process from the LLM's context window to a dedicated search service using information retrieval techniques.
    • Artifact Agnostic Envelope: Uses an IANA Media Type in a type field to identify artifacts (e.g., application/mcp-server-card+json), delegating specific metadata definitions to the underlying protocol.
    • Strict Value-or-Reference: To ensure safe parsing, every catalog entry must contain exactly one of two mutually exclusive keys:
      • url: A remote reference to the artifact document.
      • data: An embedded JSON object containing the full artifact document.
    • Universal Baseline for Federation: Agent Registries MUST expose a standard HTTP REST search interface to ensure any HTTP client can participate in discovery.
    • Separation of Concerns: Authentication and physical distribution (e.g., OCI, npm) are handled by the artifact protocols and infrastructure, not the discovery layer.
  8. Understand the Core Principle: Identity vs. Location in URNs

    main

    In the Agentic Resource Discovery (ARD) specification, a Uniform Resource Name (URN) represents the logical identity (the 'Noun') of an agent or capability, not its physical location.

    • Identity (URN): A permanent, abstract identifier that serves as a stable primary key for search indexes and clients. It must not change based on deployment environment.
    • Location (URL/Data): The physical transport binding (e.g., http://, mTLS, stdio) is defined separately in the catalog entry's url or data properties.

    The standard URN structure is: urn:air:<publisher>:<namespace>:<agent-name>

    urn:air:<publisher>:<namespace>:<agent-name>
  9. Configure URN publishers for Syntax-Only vs. Workload Verification

    main

    The ARD specification supports two tiers of URN publisher configuration depending on your security requirements:

    Scenario A & B: Syntax-Only Validation (Default)

    For standard local development, use the RFC 2606 placeholders (*.localhost, example.com). In this mode, there is no active cryptographic identity verification. The placeholders are used strictly to satisfy syntax validation rules and maintain architectural consistency.

    Scenario C: Workload Verification (Advanced Enterprise)

    If you are testing production zero-trust security meshes (e.g., SPIFFE/SPIRE or mTLS) within a local environment (like a Kubernetes/Istio cluster), use your real production domain (e.g., acme.com) as the URN publisher. This allows your local security mesh to actively validate test certificates against the URN namespace before deployment.

  10. Control federation with the federation parameter

    main

    The federation parameter in POST /search allows clients to control how a registry interacts with other registries in the network:

    • auto: The registry automatically queries upstream registries, merges their results with its own, and returns a single unified response.
    • referrals: The registry returns its own results plus catalog entries for other registries. The client is responsible for deciding which registries to query next.
    • none: The registry searches only its own local index and does not perform any federated lookups.
    {
      "query": {
        "text": "find me a flight booking agent"
      },
      "federation": "referrals"
    }
  11. Identify Artifact Types using IANA Media Types

    main

    ARD uses the type field, formatted as an IANA Media Type, to identify the nature of an artifact. This allows the discovery layer to remain agnostic of the internal schema of specific agent types.

    Commonly used (though pending formal registration) media types include:

    • application/a2a-agent-card+json
    • application/mcp-server-card+json

    Note for Implementers: While well-known path directories like /.well-known/agent-card.json are officially registered, full type registrations are pending. Intermediaries should avoid strict verification of these types during the transition period.

  12. Understand the difference between Search and Browse APIs

    main

    The ARD specification enforces a strict separation of concerns between semantic search and catalog browsing to ensure performance and relevance integrity:

    1. POST /search (Relevance-Driven): Use this for semantic, natural-language queries. Results are ordered exclusively by match score. To filter results, do not use complex EBNF strings; instead, use the explicit, flat JSON fields provided in the query object (e.g., type, compliance, publisher).

    2. GET /agents (Browse-Driven): Use this for deterministic, SQL-like catalog browsing. This is the only endpoint that supports complex EBNF filter strings and metadata orderBy parameters. There are no relevance scores in this endpoint.

    When to use which:

    • If you want to find resources using natural language (e.g., "tools for translating text") $\rightarrow$ Use POST /search.
    • If you want to find resources using exact logic (e.g., "all servers published by Acme Corp, sorted by date") $\rightarrow$ Use GET /agents.