Agentic Resource Discovery (ARD) is a specification for cataloging agentic
resources. The ard.json manifest describes agentic resources on a domain, such
as MCP servers, A2A agents, and agent skills, so that AI agents and registries
can find them.
How the Lighthouse audit works
Discovery process: The audit looks for the manifest based on the discovery mechanisms in the ARD specification (§5.1):
- Checking for an
Agentmap:directive insiderobots.txt. - Scanning HTML for
<link rel="ard" href="...">tags. - Inspecting for an HTTP
Link: <...>; rel="ard"header response. - Fetching from the well-known endpoint
/.well-known/ard.json.
If primary discovery fails, Lighthouse checks legacy pathways (such as
rel="ai-catalog" or /.well-known/ai-catalog.json). While content found here
is still validated, a warning is raised because standard ARD clients are not
obligated to support deprecated routes.
Validation rules: Verification is performed using a JavaScript port of the ARD v0.91 conformance suite, testing for the following criteria:
Conformance and validation errors:
- Syntax and schema: The manifest is valid JSON and matches the ARD
manifest schema, and each entry matches the ARD entry schema. Lighthouse
doesn't fetch or validate the artifact an entry points to (for example, the
MCP server card at
url). - Required fields: The manifest contains an
entriesarray, and every entry contains anidentifier,displayName, andtype. - Domain-anchored URNs: Each
identifierfollows theurn:air:<publisher>:<namespace>:<name>format. - Location definition: Each entry defines exactly one of
urlor inlinedata, never both or neither. - Trust manifest structure: When a
trustManifestis included, it is an object with anidentityproperty.
Best practice warnings:
- Representative queries: Each entry has a
representativeQueriesarray with 2–5 sample queries. Registries build their search index from these, so an entry without them won't appear in search results. (If present, it must be an array of strings; anything else is an error.) - Media type:
typemust be a well-formed media type. Lighthouse warns about deprecated types (for example,application/mcp-server+jsontoapplication/mcp-server-card+json), standard types with missing or extra parameters, and unrecognized types outsideapplication/*. Customapplication/*types are allowed. - Collections: Flags a top-level
collectionsfield. It's no longer part of ARD and is ignored; model hierarchies insideentriesinstead. - Legacy endpoints: Flags manifests that are only found through the legacy
ai-cataloglocations. - Broken advertised locations: Flags any advertised location (
Agentmap:,rel="ard"orrel="ai-catalog"link, orLinkheader) that couldn't be loaded when the manifest was found somewhere else.
Not required:
specVersionand other extra top-level fields don't affect the score.capabilitiesare optional and not scored. If your resource exposes named tools or skills, consider listing them (for example,["WeatherTool", "ForecastTool"]) so registries can filter on them without fetching the full artifact. If included, it must be an array of strings.
Reading the results table
The Element column shows Root for problems with the manifest as a whole. For
problems with an entry, it shows the entry's displayName, falling back to its
identifier, or Entry #n if neither is available. A single schema problem may
appear twice, once under Root and once under the entry, matching the output of
the official conformance test.
Understand your score
The audit results are reflected in the following ways:
- Pass (1): The manifest was found and has no errors or warnings.
- Partial credit (0.9): The manifest is valid but has at least one best-practice warning.
- Fail (0): Any conformance error, such as malformed JSON, a schema
violation, an invalid URN, or both or neither of
url/data. The audit also fails if a manifest was advertised (throughrobots.txt, arel="ard"orrel="ai-catalog"link, or aLinkheader) but couldn't be loaded. - Not applicable: No manifest was found by any method. This doesn't affect your Lighthouse score.
How to fix
To pass the audit, follow these actionable steps:
- Serve your manifest at
/.well-known/ard.json, or link to it withrel=ard. If you useai-catalog.jsonorrel=ai-catalog, move to the new names. - Fix any errors listed in the audit table so the manifest matches the ARD schema.
- Give every entry a
urn:air:...identifier and exactly one ofurlordata. - Use a standard ARD media type in
typewhere one applies. - Add 2 to 5
representativeQueriesto each entry to get a perfect score.