diff --git a/ensips/26.md b/ensips/26.md new file mode 100644 index 0000000..79e0e87 --- /dev/null +++ b/ensips/26.md @@ -0,0 +1,112 @@ +--- +title: Agent Text Records +description: Standardized text records for multichain ENS agent identity, context, and endpoint discovery. +contributors: + - premm.eth + - justghadi.eth +ensip: + created: "2025-05-17" + status: draft +--- + +# ENSIP-26: Agent Text Records + +## Abstract + +This ENSIP extends ENSIP‑5: Text Records by standardizing the `agent-context` text record key and `agent-endpoint[]` for agent interface discovery. An ENS name provides a single, multichain identity for an AI agent. The `agent-context` is the entry point: it describes the agent and may reference agent registries (e.g. ENSIP-25) or endpoints set via `agent-endpoint` records. Clients discover one identity, one context, and connect via the indicated registries or endpoints. + +## Motivation + +Agentic systems require a single, verifiable identity that works across chains. An ENS name provides that: one identity, one place for context and discovery. This ENSIP standardizes how agents declare themselves via `agent-context` and `agent-endpoint`. The context can point to whether the agent is registered in agent registries (e.g. ENSIP-25) or has protocol endpoints (MCP, A2A) set via `agent-endpoint` text records. + +## Specification + +The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119. + +### Text Record Keys + +#### agent-context + +- **Key**: `agent-context` +- **Format**: Any format suitable for agentic systems (plain text, Markdown, YAML, JSON, etc.) + +The key **MUST** be published via `text(bytes32,string)` as defined in ENSIP‑5. The content describes the agent and how to interact with it. The content MAY reference whether the agent is registered in agent registries (e.g. ENSIP-25 `agent-registration` records) or has endpoints published via `agent-endpoint` text records. This gives clients a single entry point to understand the agent's identity and how to reach it. + +#### agent-endpoint + +- **Key**: `agent-endpoint[]` +- **Format**: A URL (e.g. `https://`, `http://`) identifying the endpoint for the specified agent protocol. + +Name owners MAY publish one or more `agent-endpoint` records for different agent interfaces. Supported protocol values align with [ERC-8004](https://eips.ethereum.org/EIPS/eip-8004) services: + +| Protocol | Description | +| -------- | ----------- | +| `mcp` | [Model Context Protocol](https://modelcontextprotocol.io/) – tools, resources, prompts | +| `a2a` | [Agent-to-Agent Protocol](https://google-a2a.github.io/A2A/) – agent authentication, skills, messaging | +| `oasf` | [OpenAPI Service Format](https://github.com/agntcy/oasf) – OpenAPI-based agent interface | +| `web` | Web interface or human-facing URL | + +Example records: + +| Key | Value | +| ----- | ----- | +| `agent-endpoint[mcp]` | `https://token-swap.mcp` | +| `agent-endpoint[a2a]` | `https://token-swap.a2a` | +| `agent-endpoint[oasf]` | `ipfs://{cid}` or `https://api.example.com/openapi.json` | +| `agent-endpoint[web]` | `https://agent.example.com/` | + +The value MUST be a valid URL, including IPFS URIs (e.g. `ipfs://{cid}`). Clients interpret the protocol and connect accordingly. Additional protocol values MAY be used as the ecosystem evolves. + +### Agent Resolution + +To resolve an agent for an ENS name (the agent's single identity): + +1. Load the `agent-context` text record for the name using the resolver interface defined in ENSIP‑5. +2. Read the record content. The content describes the agent, how to interact with it, and may reference registries (ENSIP-25) or `agent-endpoint` records. +3. Optionally, load `agent-endpoint[]` records to discover protocol-specific endpoints (MCP, A2A, etc.). + +If `agent-context` is absent, no agent context is available for that name. + +### Example: Multichain agent with single identity + +A Swap Agent has one identity. The context describes the agent and points to how it can be reached: + +| Key | Value | +| ----- | ----- | +| `agent-context` | See below | +| `agent-endpoint[mcp]` | `https://token-swap.mcp` | +| `agent-endpoint[a2a]` | `https://token-swap.a2a` | + +```markdown +# Swap Agent + +I am a multichain swapping agent with a single ENS identity. Connect to me via the MCP or A2A endpoints set in my agent-endpoint text records. + +My verified tokens for swapping include: +| Symbol | Chain ID | Address | +|--------|----------|---------| +| WETH | 1 | 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2 | +| USDC | 1 | 0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48 | +| WETH | 8453 | 0x4200000000000000000000000000000000000006 | +| USDC | 8453 | 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 | +| WETH | 10 | 0x4200000000000000000000000000000000000006 | +| USDC | 10 | 0x0b2C639c533813f4Aa9D7837CAf62653d097Ff85 | +``` + +## Backwards Compatibility + +Unaware clients will ignore the new keys; existing behavior is unaffected. + +## Security Considerations + +There are no security considerations specific to this ENSIP. Standard ENS security considerations apply to the underlying text record functionality. + +## Rationale + +This ENSIP creates a single identity model for multichain agents. An ENS name is the identity; `agent-context` is the entry point (analogous to `index.html`), and it can point to registries or endpoints. The `agent-endpoint` records enable direct connections to MCP, A2A, and other protocols. By unifying context and discovery under one ENS name, clients get one place to understand and reach an agent—whether it is registered on-chain, exposed via endpoints, or both. + +Future ENSIPs may define more specific formats, but this specification intentionally remains minimal to encourage adoption and experimentation. + +## Copyright + +Copyright and related rights waived via [CC0](https://creativecommons.org/publicdomain/zero/1.0/).