Skip to content

Commit f9ddc65

Browse files
committed
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.
1 parent 236c894 commit f9ddc65

1 file changed

Lines changed: 8 additions & 9 deletions

File tree

docs/sep-draft-skills-extension.md

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ On top of that baseline, two discovery mechanisms are defined. A server MAY supp
9797

9898
#### Enumeration via `skill://index.json`
9999

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.
101101

102102
```json
103103
{
@@ -116,9 +116,9 @@ A server SHOULD expose a resource at the well-known URI `skill://index.json` who
116116
"url": "skill://acme/billing/refunds/SKILL.md"
117117
},
118118
{
119-
"type": "skill-md",
119+
"type": "mcp-resource-template",
120120
"description": "Per-product documentation skill",
121-
"urlTemplate": "skill://docs/{product}/SKILL.md"
121+
"url": "skill://docs/{product}/SKILL.md"
122122
}
123123
]
124124
}
@@ -130,15 +130,14 @@ Index fields:
130130
|---|---|---|
131131
| `$schema` | Yes | Schema version URI. Clients SHOULD match against known URIs before processing. |
132132
| `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"`. |
138137

139138
Clients SHOULD ignore unrecognized fields and SHOULD skip entries with an unrecognized `type`.
140139

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.
142141

143142
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.
144143

0 commit comments

Comments
 (0)