PR: https://github.com/ensdomains/ensips/pull/75
ENSIP-26 standardised how to find an agent via ENS text records (agent-endpoint[mcp], agent-endpoint[a2a]). It intentionally left the format of the document at the discovered endpoint open for a future ENSIP.
This is that future.
ENSIP-27 defines the schema for the agent card, the JSON resource served at /.well-known/agent.json that a client fetches after resolving the ENS text record. Without a shared schema, every gateway invents its own format and clients can’t parse agent cards interoperably.
The discovery chain it completes:
ENS name
→ agent-endpoint[mcp] text record (ENSIP-26)
→ /.well-known/agent.json (ENSIP-27)
→ mcp endpoint + capabilities + on-chain identity
What the schema defines:
Required: schema_version, name, url (MCP endpoint), provider, version, capabilities, authentication, skills.
Key optional fields:
| Field | Purpose |
|---|---|
erc8004 |
On-chain identity anchor — { registry, agentId } |
trustScope |
A2A depth limiting — { transitive, maxDepth, capabilities } |
sanitizationSpec |
IPFS URI of input sanitization pipeline (addresses the prompt injection concern raised in the ENSIP-26 thread) |
inputSources |
Declared input origin scope |
Companion PR:
PR #76 contributes erc8004 to ENSIP-26’s agent-context and registers agent-endpoint[ens-acs] (ENS Agent Card Schema) as the dedicated protocol value pointing to the card, namespaced per reviewer feedback to keep the keyspace unambiguous.
Reference implementation - live today:
GET https://gateway.ensub.org/agent/0xe61f5a6783ae09949b9a1b6821b68f89c0d7bb2d/5/.well-known/agent.json
Three ERC-8004 collection registries on Ethereum mainnet. Agent cards served via CCIP-Read for *.dinamic.eth subnames, no on-chain transaction per agent registration.
Open questions for discussion:
-
Should
/.well-known/agent.jsonbe the only valid path, or shouldagent-endpoint[ens-acs]allow any URL? Multi-agent gateways may want per-agent paths rather than a root-level card. -
Should
erc8004be required rather than optional, should every ENSIP-27-compliant card declare an on-chain identity? -
Is
sanitizationSpectoo implementation-specific for a general schema, or does input provenance belong at the agent card level?