--- a/base/rendered.txt +++ b/head/rendered.txt @@ -136,19 +136,19 @@ { "identifier": "urn:example:skill:code-review", "displayName": "Code Review Assistant", -"mediaType": "application/agentskill+zip", +"type": "application/ai-skills+zip", "url": "https://skills.example.com/code-review/skill.zip" }, { "identifier": "urn:example:mcp:weather", "displayName": "Weather Service", -"mediaType": "application/mcp-server-card+json", +"type": "application/mcp-server+json", "url": "https://api.example.com/.well-known/mcp/server-card.json" }, { "identifier": "urn:example:a2a:research", "displayName": "Research Assistant", -"mediaType": "application/a2a-agent-card+json", +"type": "application/a2a-agent-card+json", "url": "https://agents.example.com/researchAssistant" } ] @@ -222,21 +222,23 @@ A string containing a human-readable name for the artifact. -mediaType - -A string containing the media type that identifies the type of the -referenced artifact. This is the mechanism by which clients -determine what kind of AI artifact the entry represents. Well-known -values include (but are not limited to): - -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 - -Any other media type defined by a protocol specification (e.g., -application/agentskill+zip for skill definitions) +type + +A string containing the identifier that specifies the type of the +referenced artifact. This field is an open text format, so any string value is accepted. However, to ensure interoperability, it is RECOMMENDED to use one of the following recognized "known types" in the ecosystem when applicable, partitioned by their respective governance boundaries: + +Core Protocol Types (Governed by the AI Catalog WG): +- application/ai-catalog+json — a nested AI Catalog +- application/agent-card+json — reserved for a generic Agent Card format + +Integrated Ecosystem & Third-Party Types (Governed externally): +- application/a2a-agent-card+json — an A2A Agent Card +- application/mcp-server+json — an MCP Server Card +- application/ai-skills+zip — an AI Skill bundle (ZIP archive) +- application/ai-skills+gzip — an AI Skill bundle (gzipped tarball) +- text/markdown; profile=ai-skill — an AI Skill defined in a standard Markdown file + +These values are designed to align with official IANA media type registration standards. Standard ecosystem types use registered structured syntax suffixes (+json, +zip, +gzip). For generic payload formats (like text/markdown), the standard profile parameter is used to specify the semantic schema (e.g., profile=ai-skill). For any new or custom types not listed here, it is up to the specific client implementation to handle them correctly. A Catalog Entry MUST contain exactly one of the following members to provide the artifact content: @@ -245,12 +247,12 @@ A string containing a URL where the full artifact document can be retrieved. The document served at this URL SHOULD be served with -the media type declared in the mediaType field. +the media type declared in the type field. data A JSON value containing the complete artifact document inline. The -structure of this value is determined by the mediaType field and +structure of this value is determined by the type field and is opaque to this specification. The following members are OPTIONAL: @@ -318,7 +320,7 @@ "identifier": "urn:acme:agent:finance", "displayName": "Acme Finance Agent", "version": "2.1.0", -"mediaType": "application/a2a-agent-card+json", +"type": "application/a2a-agent-card+json", "url": "https://api.acme-corp.com/agents/finance/v2.1.json", "updatedAt": "2026-03-15T10:00:00Z" }, @@ -326,7 +328,7 @@ "identifier": "urn:acme:agent:finance", "displayName": "Acme Finance Agent", "version": "2.0.0", -"mediaType": "application/a2a-agent-card+json", +"type": "application/a2a-agent-card+json", "url": "https://api.acme-corp.com/agents/finance/v2.0.json", "updatedAt": "2026-01-20T08:00:00Z" } @@ -720,13 +722,13 @@ Organizing Catalogs As catalogs grow, a flat list of entries becomes unwieldy. Because any -catalog entry can have a mediaType of application/ai-catalog+json, +catalog entry can have a type of application/ai-catalog+json, catalogs are naturally composable — an entry can reference or inline another AI Catalog, creating a hierarchy of any depth. Nested Catalog Entries -A catalog entry whose mediaType is application/ai-catalog+json +A catalog entry whose type is application/ai-catalog+json references (via url) or embeds (via data) another AI Catalog document. This mechanism supports two complementary use cases: @@ -745,19 +747,19 @@ { "identifier": "urn:acme:catalog:finance", "displayName": "Finance Services", -"mediaType": "application/ai-catalog+json", +"type": "application/ai-catalog+json", "url": "https://acme.com/catalogs/finance.json" }, { "identifier": "urn:acme:catalog:ml", "displayName": "ML Models", -"mediaType": "application/ai-catalog+json", +"type": "application/ai-catalog+json", "url": "https://acme.com/catalogs/ml.json" }, { "identifier": "urn:acme:catalog:devops", "displayName": "DevOps Tools", -"mediaType": "application/ai-catalog+json", +"type": "application/ai-catalog+json", "url": "https://acme.com/catalogs/devops.json" } ] @@ -771,7 +773,7 @@ { "identifier": "urn:acme:plugin:finance-suite", "displayName": "Finance Plugin", -"mediaType": "application/ai-catalog+json", +"type": "application/ai-catalog+json", "url": "https://acme.com/plugins/finance-suite.json", "publisher": { "identifier": "did:web:acme-corp.com", @@ -971,7 +973,7 @@ specVersion — the specification version string entries — an array of Catalog Entry objects, each containing at -minimum identifier, displayName, mediaType, and exactly one of url or +minimum identifier, displayName, type, and exactly one of url or data All other fields (host, publisher, trustManifest, @@ -1130,7 +1132,7 @@ and MUST NOT be executed in the consumer's security context. Consumers SHOULD validate that the data content is well-formed -JSON (or the expected format for the declared mediaType) before +JSON (or the expected format for the declared type) before processing. Privacy Considerations @@ -1158,7 +1160,7 @@ class CatalogEntry { identifier string displayName string -mediaType string +type string url | data version string publisher Publisher @@ -1183,7 +1185,7 @@ class Attestation { type string uri string -mediaType string +type string digest string } class ProvenanceLink { @@ -1330,7 +1332,7 @@ CatalogEntry = { identifier: text, displayName: text, -mediaType: text, +type: text, (url: text // data: any), ? version: text, ? description: text, @@ -1371,7 +1373,7 @@ Attestation = { type: text, uri: text, -mediaType: text, +type: text, ? digest: text, ? size: uint, ? description: text @@ -1403,7 +1405,7 @@ "identifier": "urn:acme:agent:finance-a2a", "displayName": "Acme Finance A2A Agent", "version": "2.1.0", -"mediaType": "application/a2a-agent-card+json", +"type": "application/a2a-agent-card+json", "url": "https://api.acme-corp.com/agents/finance.json", "description": "A2A agent for financial workflows.", "tags": ["finance", "a2a"], @@ -1436,7 +1438,7 @@ "identifier": "urn:acme:server:finance-mcp", "displayName": "Acme Finance MCP Server", "version": "1.4.0", -"mediaType": "application/mcp-server-card+json", +"type": "application/mcp-server+json", "url": "https://api.acme-corp.com/.well-known/mcp/server-card.json", "description": "MCP server with finance tools.", "tags": ["finance", "mcp"], @@ -1445,7 +1447,7 @@ { "identifier": "urn:acme:plugin:finance-suite", "displayName": "Acme Finance Suite", -"mediaType": "application/ai-catalog+json", +"type": "application/ai-catalog+json", "description": "A2A agent + MCP server + dataset for finance workflows.", "tags": ["finance", "suite"], "data": { @@ -1454,19 +1456,19 @@ { "identifier": "urn:acme:agent:finance-a2a", "displayName": "Finance A2A Agent", -"mediaType": "application/a2a-agent-card+json", +"type": "application/a2a-agent-card+json", "url": "https://api.acme-corp.com/agents/finance.json" }, { "identifier": "urn:acme:server:finance-mcp", "displayName": "Finance MCP Server", -"mediaType": "application/mcp-server-card+json", +"type": "application/mcp-server+json", "url": "https://api.acme-corp.com/.well-known/mcp/server-card.json" }, { "identifier": "urn:acme:data:market-2026q1", "displayName": "Market Dataset Q1 2026", -"mediaType": "application/parquet", +"type": "application/parquet", "url": "https://data.acme-corp.com/market-2026q1.parquet", "trustManifest": { "identity": "urn:acme:data:market-2026q1", @@ -1508,14 +1510,14 @@ "identifier": "urn:acme:agent:assistant", "displayName": "Acme Corporate Assistant", "version": "3.0.0", -"mediaType": "application/a2a-agent-card+json", +"type": "application/a2a-agent-card+json", "url": "https://api.acme-corp.com/agents/assistant.json", "description": "General-purpose corporate assistant agent." }, { "identifier": "urn:acme:catalog:finance", "displayName": "Finance Services", -"mediaType": "application/ai-catalog+json", +"type": "application/ai-catalog+json", "url": "https://acme-corp.com/catalogs/finance.json", "description": "Financial agents, MCP servers, and datasets.", "tags": ["finance", "trading", "compliance"] @@ -1523,7 +1525,7 @@ { "identifier": "urn:acme:catalog:engineering", "displayName": "Engineering Tools", -"mediaType": "application/ai-catalog+json", +"type": "application/ai-catalog+json", "url": "https://acme-corp.com/catalogs/engineering.json", "description": "CI/CD agents, code review tools, and DevOps servers.", "tags": ["engineering", "devops", "ci-cd"] @@ -1531,7 +1533,7 @@ { "identifier": "urn:acme:catalog:ml-models", "displayName": "ML Models", -"mediaType": "application/ai-catalog+json", +"type": "application/ai-catalog+json", "url": "https://acme-corp.com/catalogs/ml-models.json", "description": "Model cards and inference endpoints.", "tags": ["ml", "models", "inference"] @@ -1553,7 +1555,7 @@ { "identifier": "urn:acme:agent:finance", "displayName": "Acme Finance Agent", -"mediaType": "application/ai-catalog+json", +"type": "application/ai-catalog+json", "description": "Finance agent accessible via both MCP and A2A protocols.", "tags": ["finance", "dual-protocol"], "publisher": { @@ -1566,13 +1568,13 @@ { "identifier": "urn:acme:agent:finance:mcp", "displayName": "Acme Finance MCP Server", -"mediaType": "application/mcp-server-card+json", +"type": "application/mcp-server+json", "url": "https://api.acme-corp.com/.well-known/mcp/server-card.json" }, { "identifier": "urn:acme:agent:finance:a2a", "displayName": "Acme Finance A2A Agent", -"mediaType": "application/a2a-agent-card+json", +"type": "application/a2a-agent-card+json", "url": "https://api.acme-corp.com/agents/finance" } ] @@ -1604,7 +1606,7 @@ Logical Format vs. Physical Distribution The AI Catalog specification defines a logical format: a JSON -document with entries, displayName, mediaType, and trustManifest +document with entries, displayName, type, and trustManifest fields that are immediately meaningful to anyone working with AI artifacts. Authors write simple JSON. APIs serve simple JSON. Clients consume simple JSON. @@ -1656,9 +1658,9 @@ Catalog Entry -OCI Image Manifest with artifactType set to the entry's mediaType - -Entry mediaType +OCI Image Manifest with artifactType set to the entry's type + +Entry type Manifest artifactType field @@ -1744,11 +1746,11 @@ { "schemaVersion": 2, -"mediaType": "application/vnd.oci.image.index.v1+json", +"type": "application/vnd.oci.image.index.v1+json", "artifactType": "application/ai-catalog+json", "manifests": [ { -"mediaType": "application/vnd.oci.image.manifest.v1+json", +"type": "application/vnd.oci.image.manifest.v1+json", "digest": "sha256:aaa111...", "size": 1024, "artifactType": "application/a2a-agent-card+json", @@ -1758,10 +1760,10 @@ } }, { -"mediaType": "application/vnd.oci.image.manifest.v1+json", +"type": "application/vnd.oci.image.manifest.v1+json", "digest": "sha256:bbb222...", "size": 512, -"artifactType": "application/mcp-server-card+json", +"artifactType": "application/mcp-server+json", "annotations": { "ai-catalog.identifier": "urn:acme:server:finance-mcp", "ai-catalog.displayName": "Acme Finance MCP Server" @@ -1818,7 +1820,7 @@ Vocabulary -entries, displayName, mediaType, trustManifest +entries, displayName, type, trustManifest manifests, layers, config, annotations @@ -1970,14 +1972,14 @@ MCP Server as Catalog Entry An MCP server listed in the Registry maps to a Catalog Entry whose -url points to the server.json document and whose mediaType +url points to the server.json document and whose type reflects the Registry format: { "identifier": "urn:mcp:io.modelcontextprotocol.anonymous/brave-search", "displayName": "Brave Search", "version": "1.0.2", -"mediaType": "application/json", +"type": "application/mcp-server+json", "url": "https://registry.modelcontextprotocol.io/servers/brave-search/server.json", "description": "MCP server for Brave Search API integration", "tags": ["search", "brave", "web"], @@ -2016,7 +2018,7 @@ Note: This example uses application/json because the MCP Registry has not registered a dedicated media type for server.json. When referencing an MCP Server Card (SEP-1649) instead, use -application/mcp-server-card+json — see +application/mcp-server+json — see Relationship to MCP Server Cards. MCP Registry as AI Catalog @@ -2038,7 +2040,7 @@ "identifier": "urn:mcp:io.modelcontextprotocol.anonymous/brave-search", "displayName": "Brave Search", "version": "1.0.2", -"mediaType": "application/json", +"type": "application/mcp-server+json", "url": "https://registry.modelcontextprotocol.io/servers/brave-search/server.json", "description": "MCP server for Brave Search API integration", "tags": ["search", "brave"] @@ -2047,7 +2049,7 @@ "identifier": "urn:mcp:io.github.modelcontextprotocol/filesystem", "displayName": "Filesystem", "version": "1.0.2", -"mediaType": "application/json", +"type": "application/mcp-server+json", "url": "https://registry.modelcontextprotocol.io/servers/filesystem/server.json", "description": "MCP server for filesystem operations", "tags": ["filesystem", "files"] @@ -2056,7 +2058,7 @@ "identifier": "urn:mcp:io.github.example/weather-mcp", "displayName": "Weather", "version": "0.5.0", -"mediaType": "application/json", +"type": "application/mcp-server+json", "url": "https://registry.modelcontextprotocol.io/servers/weather/server.json", "description": "Python MCP server for weather data access", "tags": ["weather", "python"], @@ -2080,7 +2082,7 @@ https://api.acme-corp.com/.well-known/ai-catalog.json Clients and crawlers discover the catalog via the well-known URL, -find entries by mediaType, and fetch the referenced artifacts for +find entries by type, and fetch the referenced artifacts for operational details — whether those are MCP Server Cards, Registry server.json documents, or other AI artifact formats. @@ -2144,7 +2146,7 @@ { "identifier": "urn:mcp:example.com:finance-server", "displayName": "Acme Finance MCP Server", -"mediaType": "application/mcp-server+json", +"type": "application/mcp-server+json", "url": "https://api.acme-corp.com/.well-known/mcp/server-card.json", "description": "MCP server for financial data and trading tools", "tags": ["finance", "mcp"], @@ -2175,7 +2177,7 @@ Fetch /.well-known/ai-catalog.json to discover all artifacts on a domain (MCP servers, A2A agents, plugins, etc.). -Filter entries by mediaType to find MCP servers. +Filter entries by type to find MCP servers. Evaluate the Trust Manifest for publisher identity and attestations. @@ -2287,7 +2289,7 @@ (not in marketplace) -Entry mediaType +Entry type Centralized marketplace repo @@ -2331,7 +2333,7 @@ { "identifier": "urn:claude-plugin:anthropic:agent-sdk-dev", "displayName": "agent-sdk-dev", -"mediaType": "application/vnd.anthropic.claude-plugin+json", +"type": "application/vnd.anthropic.claude-plugin+json", "url": "https://github.com/anthropics/claude-plugins-official/tree/main/plugins/agent-sdk-dev", "description": "Development kit for working with the Claude Agent SDK", "tags": ["development"], @@ -2346,7 +2348,7 @@ { "identifier": "urn:claude-plugin:adspirer:ads-agent", "displayName": "adspirer-ads-agent", -"mediaType": "application/vnd.anthropic.claude-plugin+json", +"type": "application/vnd.anthropic.claude-plugin+json", "url": "https://github.com/amekala/adspirer-mcp-plugin.git", "description": "Cross-platform ad management for Google Ads, Meta Ads, TikTok Ads, and LinkedIn Ads.", "tags": ["productivity", "ads"], @@ -2367,7 +2369,7 @@ { "identifier": "urn:claude-plugin:aikido:security", "displayName": "aikido", -"mediaType": "application/vnd.anthropic.claude-plugin+json", +"type": "application/vnd.anthropic.claude-plugin+json", "url": "https://github.com/AikidoSec/aikido-claude-plugin.git", "description": "Aikido Security scanning — SAST, secrets, and IaC vulnerability detection.", "tags": ["security"], @@ -2399,7 +2401,7 @@ { "identifier": "urn:claude-plugin:anthropic:example-plugin", "displayName": "example-plugin", -"mediaType": "application/ai-catalog+json", +"type": "application/ai-catalog+json", "description": "Comprehensive plugin with commands, agents, skills, and MCP servers", "tags": ["development"], "publisher": { @@ -2412,13 +2414,13 @@ { "identifier": "urn:claude-plugin:anthropic:example-plugin:mcp", "displayName": "Example Plugin MCP Server", -"mediaType": "application/mcp-server-card+json", +"type": "application/mcp-server+json", "url": "https://github.com/anthropics/claude-plugins-official/blob/main/plugins/example-plugin/server-card.json" }, { "identifier": "urn:claude-plugin:anthropic:example-plugin:skills", "displayName": "Example Plugin Skills", -"mediaType": "application/agentskill+zip", +"type": "application/ai-skills+zip", "url": "https://github.com/anthropics/claude-plugins-official/tree/main/plugins/example-plugin/skills.zip" } ]