Layer 5 — Discovery (ARD Binding)
| Field | Value |
|---|---|
| Layer | 5 |
| Status | external |
| Working Group | discovery |
| Substrate | ARD — Agentic Resource Discovery v0.91 (Proposal, 2026-08-26) |
Scope
Layer 5 is not specified by ACMP. Capability discovery is delegated to the Agentic Resource Discovery (ARD) specification, an industry-backed open standard developed by Microsoft, Google, Nvidia, Hugging Face, Salesforce, and others.
ARD defines how agents publish, index, and discover capabilities. ACMP consumes ARD as its discovery layer and extends it with an ACMP binding — additional metadata fields needed for economic interaction.
This binding targets ARD v0.91. That revision still has Proposal status, and ARD notes that the card media types it uses are not yet IANA-registered and may change; the binding follows the pinned revision and will be re-pinned when ARD moves.
What ARD Provides
- Agents publish lightweight manifests describing their capabilities
- Discovery services crawl and index these manifests
- AI clients query discovery services using natural language or structured search
- Results include what a resource does, its provider, location, and invocation method
What ACMP Adds (the Binding)
ARD answers “what exists?” — ACMP needs to also know “what does it cost?”.
The ACMP binding adds terms to an ordinary ARD entry. A provider publishes the
entry in the entries array of https://{domain}/.well-known/ard.json (ARD
§5.1):
{
"entries": [
{
"@context": [
"https://agenticresourcediscovery.org/context/v1",
{
"acmp": "https://a2agora.org/acmp/v0.1#",
"acmp:price_cu_indicative": { "@type": "@json" }
}
],
"identifier": "urn:air:example.com:acmp:openclaw-3",
"displayName": "OpenClaw-3",
"type": "application/mcp-server-card+json",
"url": "https://openclaw-3.example.com/mcp/server-card.json",
"capabilities": ["sentiment-analysis", "code-execution", "vision"],
"representativeQueries": [
"classify the sentiment of these customer reviews",
"run this Python snippet and return the output"
],
"acmp:tier": "A",
"acmp:price_cu_indicative": {
"sentiment-analysis": 0.003,
"code-execution": 0.012,
"vision": 0.008
},
"acmp:price_basis": "acmp:reference-tasks/v1",
"acmp:latency_p99_ms": 800,
"acmp:availability": 0.997,
"acmp:proof_methods": ["result-hash", "tee-attestation"],
"acmp:negotiation_endpoint": "https://openclaw-3.example.com/acmp/negotiate"
}
]
}
The unprefixed terms are ARD’s own (ARD §4.2): identifier, displayName,
type, and url are required, capabilities and representativeQueries are
the discovery signals a registry indexes. The acmp: terms are the economic
extension that enables negotiation (Layer 6), escrow (Layer 4), and proof of
execution (Layer 3).
The entry describes the provider’s transport card, not an ACMP artifact.
type is the media type of the card the provider is reached through —
application/mcp-server-card+json for the MCP
binding, application/a2a-agent-card+json for the A2A
binding — and url points at that card. ACMP
defines no artifact type of its own: discovery finds an MCP server or A2A agent
like any other, and the acmp: terms say that it also trades.
Why the ACMP terms cannot live in the card. For MCP, the card is the
Server Card
(SEP-2127, status Final, extension io.modelcontextprotocol/server-card;
wire format in the extension
repository). By
design it advertises no MCP capabilities and no extension support — those
depend on the client and the deployment and are negotiated live — and its
namespaced _meta is explicitly not a substitute for them. A provider
therefore cannot announce org.a2agora/acmp in its card. Before connecting, a
buyer learns that a provider trades only from the acmp: terms in the ARD
entry; after connecting, it confirms the extension through server/discover
(Layer 1 §1).
Publishing path. SEP-2127 has MCP clients find Server Cards through an AI
Catalog at /.well-known/ai-catalog.json, which ARD v0.91 treats as an
optional predecessor of its own /.well-known/ard.json. A provider publishes
its entry in ard.json, which every ARD consumer reads, and MAY list the same
entry in ai-catalog.json as well, so that MCP clients following SEP-2127
find the server too.
The ACMP namespace. ARD v0.91 treats an entry as a JSON-LD node and admits
terms from any namespace the entry declares in its @context (ARD §4.1).
ACMP’s namespace IRI is https://a2agora.org/acmp/v0.1# — the same URI the A2A
binding uses as its extension identifier, with # appended so that terms
resolve to https://a2agora.org/acmp/v0.1#tier and so on. Registries match
namespaced terms by IRI, not by prefix: a publisher that binds the
namespace to a different prefix is still found by the same filter, while a
term under an acmp prefix bound to any other IRI is simply not an ACMP term.
The binding therefore lives inline in the entry; discovery needs no separate
ACMP endpoint. How fast-moving figures stay fresh is the push-vs-pull question
below.
acmp:price_cu_indicative is declared @json because it is the one ACMP term
whose value is an object with free-form keys. Without that declaration, JSON-LD
expansion under ARD’s base context — which maps unknown keys into the ARD
namespace — would turn each capability tag into an ARD property and lose the
map. All other ACMP terms are plain literals and need no declaration.
ACMP prices tasks, not tokens (RFC-0001 §5), so
the advertised price is denominated per task: acmp:price_cu_indicative quotes
one CU figure per advertised capability — keyed by the same capabilities
token Layer 6 quotes against — measured on the reference task that
acmp:price_basis names. Both parts are needed: without a shared reference
task, two providers’ figures describe different work and cannot be compared.
The acmp:price_basis value above is illustrative — what such a catalogue
contains, and who publishes it, is an open question below.
The figure is informational only. It exists so a buyer can shortlist
providers before negotiating, and it binds no one. The binding price is the
price_cu of a Layer 6 offer, which covers the
task actually requested rather than the reference one.
Only the price is broken out per capability here. acmp:availability describes
the endpoint and is provider-wide by nature; whether acmp:tier and
acmp:latency_p99_ms should vary per capability as the price does is not
settled by this binding.
Filtering on ACMP terms is registry-dependent. ARD makes namespaced terms
available as filter dimensions, but support for them beyond ARD’s standard
terms is registry-defined, and a registry MAY reject a filter on an
unsupported term path with 400 (ARD §5.3.1). A buyer therefore cannot rely
on server-side filtering by acmp:tier or price. It can always search on
ARD’s standard terms and apply the acmp: terms client-side to the entries
returned — which is all the binding requires, since the figures only shortlist
providers for Layer 6.
Why Not Build Our Own Registry?
ARD is backed by Microsoft, Google, Nvidia, and a dozen other major companies. Building a competing discovery layer would be:
- Redundant — ARD already solves the discovery problem
- Adoption-hostile — agents would need to integrate two discovery protocols instead of one
- Counter to P1 (layer independence) — by delegating discovery, ACMP focuses on what no one else is building: the economic layer
Open Questions
[OPEN]Should a vocabulary or JSON-LD context document be published athttps://a2agora.org/acmp/v0.1#, so that generic tooling can resolve theacmp:terms (including the@jsondeclaration) without each entry restating them — and who maintains it?[OPEN]How areacmp:price_cu_indicativefigures kept up-to-date as market conditions change (push vs. pull)?[OPEN]Who defines the reference task behindacmp:price_basis, and who may publish or version such a catalogue? Compare the CU tier-definition question (RFC-0001 §7, question 2) — its candidate Assessor role maintains benchmark definitions, and a reference task is one.[OPEN]Can the ACMP binding be discovered via ARD itself (meta-discovery)?
Related
- Layer 6 — Negotiation Protocol (consumes discovery results)
- Layer 3 — Proof of Execution (proof methods advertised here)
- ARD Specification v0.91 and its base JSON-LD context
- SEP-2127 — MCP Server Cards (the card an MCP provider’s entry points at; carries no extension support)