EEP Discovery

EEP defines three mechanisms for agents to discover whether a service is EEP-compatible and locate its manifest, subscription endpoint, and gate configuration. Implements Whitepaper §4.

Manifests, sitemaps, and generative retrieval

Traditional SEO often uses XML sitemap.xml so crawlers can enumerate page URLs for human-oriented search. The EEP manifest at /.well-known/eep.json is a different job: a machine-readable declaration of entity identity, protocol layers, gates, and content types. It complements sitemaps; it does not replace them.

Industry and research discussions of generative engine optimization (GEO) focus on how sources are selected and cited inside LLM-mediated answers. EEP does not guarantee rankings or citations. It does provide structured discovery and policy gates so automated clients can find verifiable endpoints without scraping marketing HTML.

See the EEP Whitepaper (Discovery chapter, including "Manifests, sitemaps, and generative retrieval") for narrative and citations. The normative specification §12 defines wire requirements only.

1. Well-known Manifest (/.well-known/eep.json)

The primary discovery mechanism. Any EEP-compatible service exposes a manifest at /.well-known/eep.json. Agents fetch and validate this manifest before subscribing.

Required manifest fields

FieldTypeDescription
didstringW3C DID of the entity (e.g. did:web:example.com)
eep_versionstringProtocol version, e.g. "0.1"
layersobjectEndpoint URLs — layer1 (REST) is required
supported_content_typesstring[]MIME types the entity publishes
pqc_readybooleanPost-quantum cryptography support
x402_enabledbooleanx402 on-chain payment gate support
Validate Manifest
import { validateManifest } from '@eep-dev/discovery';
const res = await fetch('https://api.example.com/.well-known/eep.json');
const manifest = await res.json();
const result = validateManifest(manifest);
if (!result.valid) {
console.error('Invalid manifest:', result.errors);
} else {
console.log('Layer 1 endpoint:', manifest.layers.layer1);
}

2. HTTP Link Header

Agents inspect HTTP responses for Link headers with rel="eep". This allows discovery from any existing HTTP endpoint without a dedicated manifest path.

Link: <https://api.example.com/.well-known/eep.json>; rel="eep"
Link: <https://api.example.com/eep/subscribe>; rel="subscribe"
Parse Link Header
import { parseLinkHeader } from '@eep-dev/discovery';
const links = parseLinkHeader(res.headers.get('link') ?? '');
const eepLink = links.find(l => l.rel === 'eep');
if (eepLink) {
console.log('Manifest URL:', eepLink.url);
}
const subscribeLink = links.find(l => l.rel === 'subscribe');

3. DNS TXT Record

A fallback mechanism for domains where HTTP Link headers aren't available. Add a _eep.yourdomain.com TXT record pointing to your manifest.

_eep.example.com.  IN  TXT  "v=eep1; manifest=https://api.example.com/.well-known/eep.json"
Parse DNS TXT
import { parseDnsTxtRecord } from '@eep-dev/discovery';
// After resolving _eep.domain.com TXT record:
const record = parseDnsTxtRecord('v=eep1; manifest=https://api.example.com/.well-known/eep.json');
if (record) {
console.log('Manifest URL:', record.manifestUrl);
}

Next steps