| Internet-Draft | adp-agent-discovery | June 2026 |
| Lian | Expires 11 December 2026 | [Page] |
This document specifies the Agent Discovery Protocol (ADP), a three-layer discovery mechanism for AI Agents that leverages existing Internet infrastructure: DNS TXT and SRV records for lightweight service discovery (Layer 1), Well-Known URIs for machine-readable metadata (Layer 2), and HTML landing pages with WebSocket channels for human interaction and inter-agent communication (Layer 3). ADP enables any domain owner to make their AI Agent discoverable without relying on centralized registries, using the Domain Name System as the decentralized trust anchor.¶
This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79.¶
Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet-Drafts is at https://datatracker.ietf.org/drafts/current/.¶
Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress."¶
This Internet-Draft will expire on 11 December 2026.¶
Copyright (c) 2026 IETF Trust and the persons identified as the document authors. All rights reserved.¶
This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Revised BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Revised BSD License.¶
AI Agents are rapidly evolving from chatbot plugins into autonomous internet-native entities. Yet the ecosystem lacks a universal discovery mechanism: agents are locked inside proprietary platforms (OpenAI, Dify, Coze), each with its own directory and identity system. An agent on one platform cannot natively discover an agent on another.¶
The Web solved an analogous problem 40 years ago: any resource can be discovered through a combination of DNS names, well-known ports, and HTML document interlinking. This specification applies the same principle to Agents.¶
{::boilerplate bcp14-tagged}¶
agent:{domain}.¶
ed25519:.¶
The Agent Discovery Protocol defines a three-layer discovery and interaction stack:¶
Layer 1 — DNS Discovery: A TXT record at _agent.{domain} carries the
protocol version, a public key fingerprint, and the Well-Known URI. An
optional SRV record at _agent._tcp.{domain} locates the Agent's
service endpoints.¶
Layer 2 — Well-Known Metadata: GET /.well-known/agent.json returns a
JSON document containing the Agent's full identity, capabilities,
relationship graph, security policies, and endpoint map.¶
Layer 3 — Interaction Endpoints: An HTML landing page at the domain root provides human-readable discovery with embedded JSON-LD structured data. WebSocket endpoints enable real-time inter-agent communication with Ed25519 signature authentication.¶
Core principle: Solve at the lowest possible layer. If DNS records suffice, do not issue an HTTP request. If Well-Known metadata suffices, do not open a WebSocket.¶
Every ADP-compliant Agent MUST publish a DNS TXT record at
_agent.{domain} containing semicolon-delimited key-value pairs.¶
_agent.{domain}. IN TXT "v=ADP1; pk=<fingerprint>; wk=<well-known-uri>"
¶
ADP1. REQUIRED.¶
ed25519:<base64url-sha256>.
Computed as the SHA-256 hash of the raw 32-byte Ed25519 public key,
encoded in base64url without padding (Section 5 of {{!RFC4648}}).
REQUIRED.¶
self, parent, and cluster:{name}.¶
When the combined key-value string exceeds 255 octets (a single TXT resource record limit), it SHOULD be split across multiple TXT records at the same owner name. Reassembly is performed by concatenating the RDATA value of each TXT record in the order returned by the DNS resolver.¶
Agents that operate their own service endpoints SHOULD publish a DNS SRV record {{!RFC2782}}:¶
_agent._tcp.{domain}. IN SRV <priority> <weight> <port> <target>
¶
The target field MUST resolve to a host providing ADP-compliant service
endpoints. If no SRV record is published, Discovery Clients SHOULD fall
back to connecting to {domain} on TCP port 443 (HTTPS).¶
Every ADP-compliant Agent MUST serve a JSON document at:¶
/.well-known/agent.json¶
As defined in {{!RFC8615}}, this URI suffix is registered under the
/.well-known/ namespace.¶
The response MUST include Content-Type: application/json. The document
MUST be valid JSON {{!RFC8259}}.¶
The root object contains the following top-level members:¶
"ADP/1.0".¶
Agent identity block.¶
id (string): Agent URI in the format agent:{domain}.¶
domain (string): Canonical FQDN.¶
name (string): Human-readable Agent name.¶
owner (string): Display name of the entity operating the Agent.¶
created (string): ISO 8601 creation timestamp.¶
publicKey (object): Contains algorithm ("ed25519"), fingerprint
(string), and optional full (base64url-encoded full public key).¶
Map of logical endpoint names to absolute URLs.¶
Array of capability objects, each describing a skill the Agent offers:
id, name, description, input (array of MIME types), output
(array of MIME types), interfaces (array of chat/api/webhook),
languages (array of BCP 47 tags), and pricing (object with model
and optional details).¶
Map of interface type to URL.¶
Known peer Agents. Each entry contains type (peer/child/parent),
id (Agent URI), name, optional trust level, and optional since
timestamp.¶
Security configuration. Contains tlsRequired (boolean), minProtocolVersion,
authMethods (array, e.g. ["pubkey"]), and optional rateLimit object.¶
Links to privacy policy, terms of service, data retention policy, and third-party data sharing declaration.¶
Current status (online/offline/maintenance), uptime commitment,
optional maintenance window.¶
Document metadata: updated timestamp, version, generator string.¶
{
"protocol": "ADP/1.0",
"identity": {
"id": "agent:alice.agent",
"domain": "alice.agent",
"name": "Alice's Agent",
"owner": "Alice",
"created": "2026-01-01T00:00:00Z",
"publicKey": {
"algorithm": "ed25519",
"fingerprint": "ed25519:abc123..."
}
},
"endpoints": {
"discovery": "https://alice.agent/",
"wellKnown": "https://alice.agent/.well-known/agent.json",
"chat": "wss://alice.agent/agent/chat",
"tasks": "https://alice.agent/agent/tasks"
},
"capabilities": [
{
"id": "chat",
"name": "Conversation",
"description": "General-purpose conversational AI",
"input": ["text", "image"],
"output": ["text", "html"],
"interfaces": ["chat", "api"],
"languages": ["en", "zh"],
"pricing": { "model": "free" }
}
],
"security": {
"tlsRequired": true,
"minProtocolVersion": "ADP/1.0",
"authMethods": ["pubkey"],
"rateLimit": { "requestsPerMinute": 60 }
},
"availability": {
"status": "online"
}
}
¶
The domain root (/) SHOULD return an HTML document suitable for browser
rendering. The page serves as the human-facing Agent card and MUST embed
structured data for machine consumption.¶
The page MUST include a <script type="application/ld+json"> block
containing the complete Agent metadata as a JSON-LD document. This allows
automated discovery from a single HTTP GET request.¶
The Agent's WebSocket endpoint (published in the Well-Known JSON under
endpoints.chat) provides a real-time, bidirectional communication
channel between Agents.¶
Upon connection, the client MUST send an adp_handshake message
containing:¶
{
"type": "adp_handshake",
"protocol": "ADP/1.0",
"agent_id": "agent:caller.domain",
"public_key": "<base64url-encoded Ed25519 public key>",
"nonce": "<random hex string>"
}
¶
The server responds with its own handshake message, and subsequent messages are authenticated with Ed25519 signatures.¶
All messages after handshake MUST be JSON objects with type, id,
timestamp, and signature fields:¶
{
"type": "message",
"id": "<uuid>",
"timestamp": "<ISO 8601>",
"from": "agent:caller.domain",
"to": "agent:target.domain",
"payload": { ... },
"signature": "<base64url Ed25519 signature>"
}
¶
The signature covers the concatenation of type, id, timestamp,
from, to, and the canonical JSON serialization of payload.¶
ADP establishes a trust chain anchored in DNSSEC and the domain registration system:¶
DNSSEC-validated TXT record
→ fingerprint (embed in DNS)
→ Well-Known agent.json (verify fingerprint matches)
→ full public key (publish in JSON)
→ Ed25519 signatures (verify every message)
¶
Discovery Clients assign one of four trust levels:¶
relationships array with a trust value of verified.¶
Domain hijacking: DNSSEC validation prevents DNS cache poisoning. Even without DNSSEC, the fingerprint comparison between DNS TXT and Well-Known JSON provides a second factor.¶
Man-in-the-middle: TLS 1.3 is REQUIRED for all HTTP and WebSocket endpoints. The DNS-anchored fingerprint allows detection of TLS termination attacks.¶
Impersonation: An attacker who controls a different domain cannot claim another Agent's identity because the domain IS the identity. No certificate authority can issue a valid certificate for another domain without compromising that domain's DNS or the CA itself.¶
Key rotation: Agents SHOULD publish a previousFingerprint field in
their Well-Known document during key rotation. Discovery Clients SHOULD
accept the new key if it can be validated through the old key's signature
over a key rotation message.¶
This document requests registration of the "agent" Well-Known URI in the "Well-Known URIs" registry established by {{!RFC8615}}.¶
This document requests registration of the "_agent" service name in the "Service Name and Transport Protocol Port Number Registry" for TCP.¶
This document requests registration of the media type
application/adp+json in the "Media Types" registry.¶
Additional information:¶
The security of the trust chain depends on DNSSEC validation. Discovery
Clients SHOULD use DNSSEC-validating resolvers and MUST treat
non-validated DNS responses as unverified trust level. In environments
where DNSSEC is unavailable, the fingerprint comparison between DNS TXT
and Well-Known JSON provides defense-in-depth but does not constitute full
verification.¶
Agents MUST protect their Ed25519 private key with the same care as a TLS private key. Compromise of the private key allows an attacker to impersonate the Agent across all communication channels. Key rotation SHOULD be performed by publishing a new fingerprint in DNS TXT, updating the Well-Known document, and (optionally) signing a rotation message with the previous key.¶
The Well-Known endpoint is a JSON document typically under 16 KiB and is
cacheable. Rate limiting at the application layer (published in
security.rateLimit) and standard HTTP caching headers SHOULD be
employed to prevent abuse.¶
Agent discovery is inherently public: any party that knows a domain name
can discover the associated Agent's capabilities and endpoints. Agents
SHOULD NOT include personally identifiable information in their
Well-Known documents. The policies.privacy URL provides a mechanism for
Agents to declare their data handling practices.¶
Discovery Clients SHOULD cache DNS TXT and SRV query results for the TTL specified in the DNS response, up to a maximum of 3600 seconds.¶
The Well-Known JSON document SHOULD be served with appropriate HTTP
caching headers (Cache-Control, ETag). Discovery Clients SHOULD
honor these headers and MAY use conditional requests.¶
The protocol version is carried in DNS TXT (v field) and echoed in the
Well-Known JSON (protocol field). If a Discovery Client encounters a
version it does not support, it SHOULD abort discovery and report the
incompatibility. New protocol versions MUST increment the version string
(e.g., ADP2).¶
ADP/1.0 is the initial protocol version. Future versions SHOULD be backwards-compatible in their discovery layers (TXT record format, Well-Known schema additions are non-breaking if unknown fields are ignored).¶
--- back¶
This protocol was conceived through discussions between Harry Lian and Pro on the nature of the Agent Internet, with the shared conviction that Agents should inherit the Web's proven infrastructure rather than reinventing it.¶
_agent.alice.agent. 3600 IN TXT "v=ADP1; pk=ed25519:dGhpcyBpcyBhIHRlc3Q; wk=https://alice.agent/.well-known/agent.json"¶
_agent._tcp.alice.agent. 3600 IN SRV 10 5 443 alice.agent.¶