You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Use type:"mcp-resource-template" for template index entries
Template entries now reuse the url field with type as the
discriminator, rather than a separate urlTemplate field. This is
consistent with the upstream schema where type already discriminates
how to interpret url (skill-md vs archive). The mcp-resource-template
type is namespaced so upstream consumers skip it safely per the
existing unrecognized-type rule.
Copy file name to clipboardExpand all lines: docs/sep-draft-skills-extension.md
+8-9Lines changed: 8 additions & 9 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -97,7 +97,7 @@ On top of that baseline, two discovery mechanisms are defined. A server MAY supp
97
97
98
98
#### Enumeration via `skill://index.json`
99
99
100
-
A server SHOULD expose a resource at the well-known URI `skill://index.json` whose content is a JSON index of the skills it serves. The index format follows the [Agent Skills well-known URI discovery index](https://agentskills.io/well-known-uri#index-format), with three differences: the `url` field contains a full MCP resource URI (any scheme the server serves), the `digest` field is omitted (integrity is the transport's concern over an authenticated MCP connection), and entries may carry `urlTemplate` in place of `url` to describe a parameterized skill namespace.
100
+
A server SHOULD expose a resource at the well-known URI `skill://index.json` whose content is a JSON index of the skills it serves. The index format follows the [Agent Skills well-known URI discovery index](https://agentskills.io/well-known-uri#index-format), with two differences: the `url` field contains a full MCP resource URI (any scheme the server serves), and the `digest` field is omitted (integrity is the transport's concern over an authenticated MCP connection). This binding also defines one additional `type` value, `"mcp-resource-template"`, for entries that describe a parameterized skill namespace.
101
101
102
102
```json
103
103
{
@@ -116,9 +116,9 @@ A server SHOULD expose a resource at the well-known URI `skill://index.json` who
116
116
"url": "skill://acme/billing/refunds/SKILL.md"
117
117
},
118
118
{
119
-
"type": "skill-md",
119
+
"type": "mcp-resource-template",
120
120
"description": "Per-product documentation skill",
121
-
"urlTemplate": "skill://docs/{product}/SKILL.md"
121
+
"url": "skill://docs/{product}/SKILL.md"
122
122
}
123
123
]
124
124
}
@@ -130,15 +130,14 @@ Index fields:
130
130
|---|---|---|
131
131
|`$schema`| Yes | Schema version URI. Clients SHOULD match against known URIs before processing. |
132
132
|`skills`| Yes | Array of skill entries. |
133
-
|`skills[].type`| Yes | MUST be `"skill-md"` in the MCP context. Archive distribution does not apply; supporting files are individually addressable as resources. |
134
-
|`skills[].description`| Yes | For concrete entries, the skill's `description` matching its `SKILL.md` frontmatter. For template entries, a description of the addressable skill space. |
135
-
|`skills[].url`| — | The full resource URI of the skill's `SKILL.md`. Exactly one of `url` or `urlTemplate` MUST be present. |
136
-
|`skills[].urlTemplate`| — | An [RFC 6570](https://datatracker.ietf.org/doc/html/rfc6570) URI template resolving to `SKILL.md` resource URIs. Exactly one of `url` or `urlTemplate` MUST be present. |
137
-
|`skills[].name`| Conditional | Required when `url` is present; matches the `SKILL.md` frontmatter `name` and the final path segment. Omitted when `urlTemplate` is present. |
133
+
|`skills[].type`| Yes | MUST be `"skill-md"` or `"mcp-resource-template"`. Archive distribution does not apply; supporting files are individually addressable as resources. |
134
+
|`skills[].description`| Yes | For `"skill-md"`, the skill's `description` matching its `SKILL.md` frontmatter. For `"mcp-resource-template"`, a description of the addressable skill space. |
135
+
|`skills[].url`| Yes | For `"skill-md"`, the full resource URI of the skill's `SKILL.md`. For `"mcp-resource-template"`, an [RFC 6570](https://datatracker.ietf.org/doc/html/rfc6570) URI template that resolves to `SKILL.md` resource URIs. |
136
+
|`skills[].name`| Conditional | Required for `"skill-md"`; matches the `SKILL.md` frontmatter `name` and the final path segment. Omitted for `"mcp-resource-template"`. |
138
137
139
138
Clients SHOULD ignore unrecognized fields and SHOULD skip entries with an unrecognized `type`.
140
139
141
-
**Template entries** describe a parameterized skill namespace without materializing every entry. A server SHOULD register the same `urlTemplate` as an MCP [resource template](https://modelcontextprotocol.io/specification/2025-11-25/server/resources#resource-templates) so hosts can wire template variables to the [completion API](https://modelcontextprotocol.io/specification/2025-11-25/server/utilities/completion). Hosts SHOULD surface template entries in their UI as interactive discovery points: the user fills in variables via completion, selects a skill, and the host passes the resolved URI into the conversation. This scales to servers with unbounded skill catalogs.
140
+
**Template entries**(`type: "mcp-resource-template"`) describe a parameterized skill namespace without materializing every entry. A server SHOULD register the same `url` value as an MCP [resource template](https://modelcontextprotocol.io/specification/2025-11-25/server/resources#resource-templates) so hosts can wire template variables to the [completion API](https://modelcontextprotocol.io/specification/2025-11-25/server/utilities/completion). Hosts SHOULD surface template entries in their UI as interactive discovery points: the user fills in variables via completion, selects a skill, and the host passes the resolved URI into the conversation. This scales to servers with unbounded skill catalogs.
142
141
143
142
The `skill://index.json` resource is served via `resources/read` like any other resource, with `mimeType` of `application/json`. A server MAY also surface it in `resources/list` so clients can detect its presence, but clients MAY attempt to read it directly without prior discovery.
0 commit comments