The reference
for agent discovery
Agentic Resource Discovery is how an agent finds a capability before it calls one. This is the independent guide to it: what the spec says, how to publish, a validator that runs in your browser, and adoption measured rather than asserted.
// request { "query": { "text": "reconcile last month's invoices", "filter": { "type": ["application/mcp-server-card+json"] } }, "federation": "referrals" } // response { "results": [{ "identifier": "urn:air:example.com:server:invoices", "displayName": "Invoice Tools", "url": "https://example.com/.well-known/mcp/server-card.json", "score": 94 }], "referrals": [{ "displayName": "Public Agent Finder", "url": "https://finder.example/search" }] }
01 What ARD is
Search for capabilities, indexed from a file you host
Today an agent can only use tools somebody wired in by hand. ARD adds the missing step: you describe what you offer once, on your own domain, and any registry can index it and answer plain-language queries against it. Domain ownership is the trust anchor.
- 01PublishOne manifest lists your MCP servers, agents, skills and APIs, each with example queries it serves.
- 02IndexPublic and private registries fetch manifests and build a semantic index.
- 03SearchA client asks in natural language and gets ranked entries back.
- 04ConnectThe client calls the winner over its native protocol. MCP says how to call a tool; ARD says which one exists and where.
| Standard | Answers the question | Governance |
|---|---|---|
| ARD | Which capability should I use, and where is it? | Apache-2.0 · no governing body named · data model from the AI Catalog WG (Linux Foundation) |
| MCP | How do I call this tool? | Agentic AI Foundation (Linux Foundation) |
| A2A | How do I delegate to another agent? | Linux Foundation · v1.0 April 2026 |
| WebMCP | How does a web page expose tools in the browser? | W3C community group |
| llms.txt | What should a model read on this site? | Informal convention |
02 Publish
A minimal manifest
A manifest is a JSON file with an entries array. Each entry needs four things: a domain-anchored identifier, a displayName, a type as an IANA media type, and one of url or data. Add two to five representativeQueries or registries cannot rank you.
urn:air:<publisher>:<namespace>:<name>, where the publisher is a domain you control. The prefix is air, not ard. A registry rejects urn:air:google.com:… unless the trust manifest proves google.com issued it.
/.well-known/ard.json is the current name. /.well-known/ai-catalog.json is the one the deployed web still uses; every publisher we found serves it and only six serve the new name. Serve the same file at both, and add <link rel="ard"> to your home page.
{
"entries": [
{
"@context": "https://agenticresourcediscovery.org/context/v1",
"identifier": "urn:air:example.com:server:invoices",
"displayName": "Invoice Tools",
"type": "application/mcp-server-card+json",
"url": "https://example.com/.well-known/mcp/server-card.json",
"description": "Create, send and reconcile invoices.",
"representativeQueries": [
"send an invoice to a customer",
"check whether invoice 4021 was paid",
"reconcile last month's receivables"
],
"capabilities": ["CreateInvoice", "InvoiceStatus", "Reconcile"],
"version": "1.2.0",
"updatedAt": "2026-09-04T09:00:00Z"
}
]
}
| Media type | For | Registration |
|---|---|---|
| application/mcp-server-card+json | An MCP server, pointing at its server card | de-facto · IANA pending |
| application/a2a-agent-card+json | An A2A agent, pointing at its agent card | de-facto · IANA pending |
| application/ai-skill+md | A skill file such as SKILL.md | de-facto |
| application/ai-registry+json | Another ARD registry; this is how federation is discovered | de-facto |
| application/vnd.oai.openapi+json | A REST API described by OpenAPI | registered |
Checked against the v0.91 text and JSON Schema on 4 September 2026. The spec asks intermediaries not to verify type values strictly while IANA registration is pending.
03 Validator
Check a manifest before a registry does
Runs in your browser; nothing is uploaded. Paste a manifest or a single entry and it checks the structural rules and discovery constraints from Appendix D of the spec.
For the authoritative check the spec repository ships a zero-dependency CLI, conformance/bin/conformance-test, which validates manifests, resolves a live domain and probes registry endpoints. Source on GitHub.
04 Field reference
Every term in the base context
Unprefixed terms belong to the default namespace. An entry may declare extra namespaces in @context; registries index what they recognise and keep the rest.
| Term | Type | Req. | Purpose |
|---|---|---|---|
| identifier | string | must | Domain-anchored URN, urn:air:<publisher>:<namespace>:<name>. The stable identity of the resource. |
| displayName | string | must | Human-readable name shown in registry results. |
| type | string | must | IANA media type identifying what kind of artifact this is. |
| url | @id | must* | Where the artifact document lives: the server card, agent card or OpenAPI file. |
| data | @json | must* | The artifact inline, as the alternative to url. Never both. |
| representativeQueries | set | should | Two to five natural-language queries this resource serves well. Registries build their semantic index from these. Missing or mis-sized is a warning, not an error, but an entry without them will not be found by search. |
| capabilities | set | may | Short skill or tool tokens for fast structured filtering without fetching the artifact. |
| description | string | may | Prose summary. |
| tags | set | may | Free-form labels; filterable. |
| version | string | may | Version of the resource described. |
| updatedAt | xsd:dateTime | may | When the entry last changed; lets registries sync incrementally. |
| metadata | @json | may | Arbitrary publisher-defined JSON. Dot-paths into it are filterable if the registry indexes them. |
| trustManifest | @json | may | Identity, attestations, provenance and signatures. ARD reads only identity, which must align with the URN's publisher domain; the declared framework defines verification. |
| @context | IRI / object | may | Optional in the file; consumers apply the base context regardless. Include it when the entry may be read by generic JSON-LD tooling. |
| @id | IRI | may | JSON-LD node id. If present alongside identifier, both must denote the same resource. |
* Exactly one of url or data. Schema source: ard-entry.schema.json, which deliberately sets additionalProperties: true.
05 Routes
Two layers, five publishing routes
You publish; registries crawl and expose search. The spec defines five ways to advertise a manifest and requires consumers to honour two. Only one registry endpoint is mandatory.
| Static route | Consumer obligation | How |
|---|---|---|
| Well-known URI | must fetch | https://{domain}/.well-known/ard.json, a manifest with an entries array. |
| HTML link tag | must honour | <link rel="ard" href="…"> in a document's head. |
| In-page JSON-LD | may | Entry embedded in the page describing the resource, found by ordinary crawling. |
| Agentmap directive | may | Agentmap: https://example.com/entries.json in robots.txt, by analogy with Sitemap. |
| DNS | may | Service Binding records at _entries._agents.example.com or _search._agents.example.com. |
| Registry endpoint | Required | What it does |
|---|---|---|
| POST /search | must | Ranked entries for natural-language text plus optional filter. Federation modes auto, referrals, none. The score is relevance only and must never be read as trust. |
| POST /explore | may | Facet breakdowns over the matched set. Scoped to one registry; does not federate. Returns 501 if unimplemented. |
| GET /agents | may | Deterministic browsing with structured filters, sorting and pagination, for developer portals. |
Only /search is mandatory. A registry may additionally expose search as an MCP tool or A2A skill, returning the same entry model.
06 Adoption
Measured, not asserted
Every announcement calls ARD industry-backed, which is true, and implies it is widely deployed, which is a separate claim. Here is what has been counted, starting with our own probe. Method and domain list are published so you can repeat it.
Fifty domains fetched at both paths on 4 September 2026: the 11 launch backers, the spec's own domain, known publishers, and a control group of large API companies.
All 31 publishers serve ai-catalog.json. Six also serve ard.json. Nobody serves the new path alone.
Only Hugging Face serves a manifest at its root domain. GitHub publishes 251 entries at a subdomain. The spec's own domain serves none.
Finding The path split
The spec says ard.json. The web still says ai-catalog.json.
Version 0.91 renamed the manifest. Every publisher we found still serves the old name, and only six also serve the new one. A tool that checks only ard.json will report that almost nobody has adopted ARD. That is a measurement error, not a fact.
// GET https://railway.com/.well-known/ard.json 200 OK application/json 8 entries // GET https://zapier.com/.well-known/ard.json 404 falls back to ai-catalog.json → 200, 14 entries // GET https://google.com/.well-known/ard.json 404 no manifest at either path
| Source | Domains checked | Manifests found | Note |
|---|---|---|---|
| Neuronto ARD Registry | 375,995 | 246 | 207 publishers with 2,215 declared resources. 182 on the old path, 25 on the new. Verified by fetching, not by trusting other registries. |
| API Evangelist audit | 43,834 | 12 | Nine publishers; zero manifests fully conformant to the schema at the time of the audit. |
| This page | 50 | 31 | Targeted sample, not a crawl. Chosen to test the launch backers and the path split. |
The counts differ by two orders of magnitude because the crawl frames differ. Read the ratio: publishing is real but thin, and concentrated among developer-tool companies. Serving a manifest says nothing about trust or quality.
Method and full domain list
For each domain we fetched /.well-known/ard.json and /.well-known/ai-catalog.json over HTTPS with a 12-second timeout, following redirects, with the user agent agenticresources.dev-probe/0.1. A path counts as serving when it returns 200 and the body parses as JSON containing an entries array, an array of entries, or a single entry object. Raw results: probe-2026-09-04.json.
Serving (31): api.mcp.github.com, 2s.io, zapier.com, apify.com, clickhouse.com, hostinger.com, airtable.com, surrealdb.com, neon.com, railway.com, eodly.io, amplitude.com, padlet.com, publica.la, speakeasy.com, desvela.dev, nextjs.org, quicknode.com, bird.com, developers.cloudflare.com, telnyx.com, vercel.com, fly.io, getlago.com, neuronto.com, roboflow.com, gtmetrix.com, huggingface.co, img.ly, loops.so, rudderstack.com.
Not serving (19): google.com, microsoft.com, github.com, cisco.com, databricks.com, nvidia.com, salesforce.com, servicenow.com, snowflake.com, godaddy.com, aws.amazon.com, agenticresourcediscovery.org, stripe.com, openai.com, anthropic.com, cloudflare.com, shopify.com, notion.so, slack.com.
Thin publisher adoption days after a v0.91 proposal is unremarkable. The registry side shipped first: GitHub, Hugging Face, Google Cloud and AWS all consume ARD today, so the pressure to publish is arriving from the platforms. The honest comparison is llms.txt: enormous discourse, negligible adoption for a long while, then a default in framework tooling.
These numbers appear here because nobody whose business depends on ARD succeeding is in a position to publish them.
07 Directory
Verified publishers
Every domain below served a parseable manifest when fetched. Listing is free and automatic: publish a manifest and you appear on the next probe. Nobody is listed for money and nobody can pay to be ranked.
| Publisher | Entries | ard.json | ai-catalog.json | Manifest |
|---|
Probed 4 September 2026. Entry counts are as served. A larger list, maintained continuously, is at Neuronto.
Registries, tools and guides
Listings are editorial. If we have missed a registry or a tool, tell us.
08 Get published
We write, validate and publish your catalogue
You already have the resources: an MCP server, a public API, a few agents. What is missing is the afternoon it takes to describe them correctly, at both paths, with queries a registry can rank. We do that part.
- An inventory of everything on your domain an agent could call: MCP servers, A2A agents, skills, OpenAPI services, workflows.
- A manifest that passes the official conformance CLI, served at both paths, with the link tag and, where useful, the robots and DNS routes.
- Representative queries written for retrieval, not marketing, so registries return you for the requests you serve.
- A trust manifest that binds your domain to your identifier, with guidance on the framework to declare.
- Verification that GitHub, Hugging Face and the independent registries can resolve you, and a listing in the directory above.
- A re-check when the spec moves, which at v0.91 it will.
Delivered by Belgravia Labs. The reference stays independent: publishing with us does not change your entry, rank or listing here.