Four built-in types. Custom types welcome. All share a simple base.
Every record in a zone file shares these fields:
| Field | Required | Description |
|---|---|---|
| type | Yes | agent, mcp, skill, a2a, or any custom string |
| id | Yes | Unique within the zone. Lowercase, hyphens OK. |
| name | Yes | Display name |
| description | Yes | What it does, 1-2 sentences |
| endpoint | Depends | URL to reach the service. Required for agent, mcp, a2a. |
Any additional fields are allowed. The protocol is JSON - add what you need.
An AI agent that accepts tasks and returns results.
| Field | Description |
|---|---|
| endpoint | Where to reach the agent |
| protocol | How to talk to it: a2a, rest, graphql, websocket. Default: a2a |
| capabilities | What it can do. Array of keyword strings. |
| card | URL to a full agent card JSON (for richer metadata) |
A Model Context Protocol server that exposes tools to AI applications.
| Field | Description |
|---|---|
| transport | How to connect: sse, streamable-http, stdio |
| endpoint | URL for remote transports (sse, streamable-http). Not needed for stdio. |
| tools | Array of { name, description } - what tools the server provides |
| install | How to run it locally: { "npm": "@pkg/name", "command": "npx @pkg/name" } |
For stdio transport, consumers use the install field to start the process. For remote transports, they connect to endpoint.
A collection of SKILL.md files — instructions that teach AI coding agents how to perform specific tasks.
Collection (multiple skills):
Single skill:
| Field | Description |
|---|---|
| index | URL to an index.json listing multiple skills |
| skill_md | URL to a single SKILL.md file |
| skills | Inline skill list: [{ "id", "name", "description", "skill_md" }] |
One of index, skill_md, or skills must be present.
index.json format:
SKILL.md format:
Compatible with: Claude Code, Codex CLI, Gemini CLI, Cursor, Windsurf, GitHub Copilot.
An Agent-to-Agent protocol endpoint, following the A2A specification.
| Field | Description |
|---|---|
| endpoint | URL to the A2A agent card or endpoint |
| capabilities | What it can do. Array of keyword strings. |
| skills | A2A skills: [{ "name", "description" }] |
When to use a2a vs agent with protocol: "a2a": Both work. Use type: "a2a" when the A2A protocol is the point. Use type: "agent" when you want to present it more broadly and A2A is just the protocol it happens to use.
Any string works as a type. Use the base fields, add whatever you need:
Registries index custom types. The UI shows them with a generic display. Popular custom types may eventually get dedicated UI.
These are common fields you can add to any record. None are required.
| Field | Description |
|---|---|
| auth | Auth hint: "none", "api-key", "bearer", "oauth2" |
| pricing | Pricing hint: "free", "freemium", "paid" |
| docs | Link to documentation |
| source | Link to source code |
| category | Category hint: "research", "devtools", "data", "automation", etc. |
These are labels, not specs. "auth": "oauth2" means "you'll need OAuth2" — it doesn't define the flow. Link to your docs for details.
Every record has a simple address: <domain>/<record-id>
These addresses are used in CLI commands, API URLs, and the registry UI: