Skip to content

spec: adopt urn:ai: naming standard for AI artifacts (ADR 0015)#36

Open
mindpower wants to merge 16 commits into
jbu/adr-0014-mediatype-to-typefrom
jbu/ai-catalog-updates
Open

spec: adopt urn:ai: naming standard for AI artifacts (ADR 0015)#36
mindpower wants to merge 16 commits into
jbu/adr-0014-mediatype-to-typefrom
jbu/ai-catalog-updates

Conversation

@mindpower
Copy link
Copy Markdown
Member

@mindpower mindpower commented May 13, 2026

This pull request introduces ADR 0015, proposaling a standardized, domain-anchored URN naming convention (urn:ai:) for all AI actors and artifacts within the AI Catalog ecosystem. Evolving from the recommendations in PR #19, this proposal ensures global federation, consistent indexing, and industry-wide interoperability across registries and orchestrators.

📝 Summary of Changes

1. Architectural Decision Record: adr/0015-agent-identifier-naming.md

  • Formalized Naming Contract: Defines the universal URN structure: urn:ai:{publisher}:{namespace}:{name}.
    • publisher: The anchoring domain where the artifact is hosted (e.g., example.com).
    • namespace: Optional, hierarchical segments separated by : (e.g., hr, finance, finance:agent, mcp, skill, catalog).
    • name: The specific, distinguishing name of the artifact.
  • Separation of Concerns: Establishes a clear boundary between logical discovery names (the stable identifier URN) and cryptographic trust identities (the identity field in trustManifest, which may use DIDs, SPIFFE, x509, etc.).

2. Core Specification: specification/ai-catalog.md

  • Specification Text Update: Updated the identifier member definition to mandate the urn:ai: format.
  • Example Alignment: Updated 38 example JSON blocks and narrative references across the specification to reflect the new standard, including:
    • A2A Agent Cards (urn:ai:acme.com:agent:finance)
    • MCP Server Cards (urn:ai:io.modelcontextprotocol.anonymous:mcp:brave-search)
    • Nested & Hierarchical Catalogs (urn:ai:acme.com:catalog:finance)
    • Dual-Protocol (MCP + A2A) Wrappers (urn:ai:acme.com:agent:finance:mcp)
    • Security Typosquatting Scenarios (urn:ai:acme.com:agent:financ vs urn:ai:acme.com:agent:finance)

Architectural Rationale:

  • Nomenclature Stability: The URN acts as an abstract, stable contract. Relocating workloads or changing underlying cloud infrastructure does not break client discovery or routing logic.
  • Global Uniqueness: Anchoring URNs to fully qualified domain names (FQDNs) guarantees cross-network uniqueness without central registration overhead.
  • Interoperability: Standardizing on urn:ai: allows centralized registries and decentralized crawlers to index, filter, and search AI artifacts uniformly.

⚠️ Reviewer Guidance & Stacked PR Note

Note to Reviewers: This pull request is stacked on top of #37

@github-actions
Copy link
Copy Markdown
Contributor

Preview: https://agent-card.github.io/ai-catalog/pr/36/

This comment is updated automatically while the pull request preview is available.

github-actions Bot added a commit that referenced this pull request May 13, 2026
github-actions Bot added a commit that referenced this pull request May 13, 2026
@mindpower mindpower changed the title Update mediaType to type based on last meeting Update mediaType to type based on last meeting + updated agent identifier May 13, 2026
github-actions Bot added a commit that referenced this pull request May 13, 2026
github-actions Bot added a commit that referenced this pull request May 13, 2026
Comment thread adr/0015-agent-identifier-naming.md Outdated

## Proposal
We will align the agent identifier naming in `ai-catalog.md` with the standards defined in [PR #19](https://github.com/Agent-Card/ai-catalog/pull/19).
The `identifier` field MUST follow the URN format: `urn:{nid}:{publisher}:{namespace}:{name}`.
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this a URN or a URI ?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi Luca, it is specifically a URN (which is a specific type of URI). While the previous draft allowed a mix of URNs and URIs, the latest update narrows this down to mandate a strictly formatted URN (starting with urn:).

This ensures that agent identifiers remain stable, location-independent handles, separating the logical name of the agent from its physical network location (which would be a URL) and the trust identity (SPIFFE/DID/DNS/etc).

So in summary:

  • Logical Discovery Identifier (CatalogEntry.identifier): Retains an abstract, domain-anchored URN namespace (e.g., urn:example:agent:name) to ensure permanent nomenclature stability and efficient indexing and discovery.
  • Pluggable Trust Identity (TrustManifest.identity): Supports various identity including SPIFFE IDs, DIDs, etc as a fully supported, first-class identity token for zero-trust enforcement and cryptographic verification.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Understood. So if my agent is running locally and I am using stdio or a file descriptor it's still a URN that I should use?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a good question. We can use "local" or "unknown" to indicate this is an unverifiable local agent (so publisher is not verifiable)

Comment thread adr/0015-agent-identifier-naming.md Outdated
## Proposal
We will align the agent identifier naming in `ai-catalog.md` with the standards defined in [PR #19](https://github.com/Agent-Card/ai-catalog/pull/19).
The `identifier` field MUST follow the URN format: `urn:{nid}:{publisher}:{namespace}:{name}`.
- `nid`: The Namespace Identifier (e.g., `agent`, `mcp`).
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Making each ai artifact have its own nid is somewhat duplicative of having a type for each artifact. To adhere to the guidance of URNs and media types would require registering in two different IANA registries.

And if agent and mcp have two different nids, then there is no guarantee that the mcp nid will have publisher/namespace/name as the elements because the NID determines how the NSS is interpreted.

Would you be open to having aicatalog as the nid ?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

These are valid concerns. Let's discuss about this in the meeting today.

Comment thread specification/ai-catalog.md Outdated

- `application/ai-catalog+json` — a nested AI Catalog
- `application/a2a-agent-card+json` — an A2A Agent Card
- `application/mcp-server-card+json` — an MCP Server Card
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What was the reason for removing the agent card type?

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we are just missing application/agent-card+json that was mentioned in the ADR

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Updated the PR so now we have application/agent-card+json as mentioned in the ADR.

Comment thread specification/ai-catalog.md Outdated
`application/agentskill+zip` for skill definitions)
- `application/mcp-server+json` — an MCP Server
- `application/ai-catalog+json` — a nested AI Catalog
- `application/agent-registry` — an Agent Registry search endpoint
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm not sure how a type defines an endpoint? Is there other documentation for what this is?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is the agent registry which is a rest based registry API (as proposed in #21). So by allowing to point to registries allow to further discover as well. But since we haven't discussed too much on registry here yet, I can remove that type from this PR.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's just a url pointer

github-actions Bot added a commit that referenced this pull request May 14, 2026
Comment thread adr/0015-agent-identifier-naming.md Outdated
We will align the agent identifier naming in `ai-catalog.md` with the naming standards proposed in [PR #19](https://github.com/Agent-Card/ai-catalog/pull/19).
The `identifier` field will follow the URN format: `urn:{nid}:{publisher}:{namespace}:{name}`.
- `nid`: The Namespace Identifier (e.g., `agent`, `mcp`).
- `publisher`: The domain where the agent is hosted (e.g., `example.com`).
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If you embed the domain anyway, how is this more stable than say a did:web identifier?

github-actions Bot added a commit that referenced this pull request May 15, 2026
github-actions Bot added a commit that referenced this pull request May 15, 2026
@mindpower mindpower changed the base branch from main to jbu/adr-0014-mediatype-to-type May 15, 2026 23:20
… marked as type under TrustManifest) during auto-merge
github-actions Bot added a commit that referenced this pull request May 15, 2026
github-actions Bot added a commit that referenced this pull request May 15, 2026
github-actions Bot added a commit that referenced this pull request May 15, 2026
@mindpower mindpower changed the title Update mediaType to type based on last meeting + updated agent identifier feat: adopt urn:ai: naming standard for AI artifacts (ADR 0015) May 15, 2026
@mindpower mindpower changed the title feat: adopt urn:ai: naming standard for AI artifacts (ADR 0015) spec: adopt urn:ai: naming standard for AI artifacts (ADR 0015) May 15, 2026
@mindpower mindpower requested review from Tehsmash and ToddSegal May 15, 2026 23:40
github-actions Bot added a commit that referenced this pull request May 30, 2026
Redefines the `identifier` field in catalog entries as an open format
for local and closed systems, while highly recommending and standardizing
the domain-anchored `urn:ai` URN scheme for open/federated systems.

- Updates the `identifier` schema description in `ai-catalog.md`.
- Promotes and updates ADR 0015 to document this balanced decision.
github-actions Bot added a commit that referenced this pull request May 30, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants