Define recommended _meta keys for skill resources#60
Conversation
Replace PR #53 links with relative references to the now-merged skill-uri-scheme.md document. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
JAORMX
left a comment
There was a problem hiding this comment.
oh! this is really handy!
pja-ant
left a comment
There was a problem hiding this comment.
Hmm, this is maybe worth some more discussion.
I did put in the skill URI doc that we could use _meta for additional metadata, but I was more thinking metadata related to MCP-specific things rather than more generic skills metadata.
My sense is that for skills metadata, it should use the existing agentskills.io mechanism for that, which is YAML frontmatter. Certainly things like allowed-tools should not be in _meta when it is already in the YAML.
@pja-ant re: adding existing skills metadata to resources: my thinking was that the frontmatter in a skill file is still the source of truth, but if resources are the preferred way to expose skills through MCP, then it seems more ergonomic + predictable for clients to read that data from standardized Weighing a few tradeoffs: A few arguments for
Against:
One way to reconcile the 'deduplication' risk: treat What do you think? |
|
|
||
| - **Follows the MCP spec:** The 2025-11-25 specification recommends reverse DNS notation for `_meta` keys | ||
| - **Aligns with the agentskills community:** The namespacing proposal ([agentskills#211](https://github.com/agentskills/agentskills/issues/211)) establishes conventions for prefixed fields. Using the `agentskills.io` domain as the namespace root creates a transparent mapping between frontmatter fields and MCP metadata | ||
| - **Avoids collisions:** Implementation-specific keys (like FastMCP's `fastmcp` key) can coexist alongside `io.agentskills/` keys without conflict |
There was a problem hiding this comment.
Given this will be an MCP extension should we not use a io.modelcontextprotocol reverse domain?
There was a problem hiding this comment.
My original thought with io.agentskills/ was because it would align with the agentskills.io spec and create a transparent mapping to frontmatter fields.
A couple thoughts on each option:
io.modelcontextprotocol/would signal this is MCP-official, but ties skill metadata to MCP even though skills are agnostic to MCPio.agentskills/would keep the namespace tied to the skills ecosystem, which exists independently of MCP. This could make the mapping to standard frontmatter fields more obvious.
There was a problem hiding this comment.
I'd prefer io.modelcontextprotocol given that this isn't really under the ownership of the Agent Skills community; we can do a subdomain like io.modelcontextprotocol.skills or something to make the association more explicit if needed. I think it might be poor form for us (or anyone, really) to use unowned domains in extension keys without permission from the domain owner.
There was a problem hiding this comment.
Unrelated but interesting future idea (out of scope for this IG): Defining a new .well-known document or TXT records to verify ownership of any extensions and/or extension schema
There was a problem hiding this comment.
I think it might be poor form for us (or anyone, really) to use unowned domains in extension keys without permission from the domain owner.
Yes totally, to be clear, we'd only use io.agentskills/ if it was agreed on with the agentskills.io spec maintainers (which is something this IG is positioned to coordinate on). io.modelcontextprotocol.skills/ seems like another good option though.
Unrelated but interesting future idea (out of scope for this IG): Defining a new .well-known document or TXT records to verify ownership of any extensions and/or extension schema
I like that idea, created some notes here based on some preliminary research on related work: https://gist.github.com/olaservo/fa58f7574e3c4b41e92f16869c972455
|
@olaservo Those are good points! I see the optimization argument most compelling: it would be nice to avoid pulling the whole file just to get the frontmatter. Not sure I agree with the "consistent client interface" argument since I think we want to be consistent with agent skills: you need to understand frontmatter to work with skills. I assume most clients are going to support more skills than just MCP skills, so they'll need to do that anyway. Agree it would be good for servers to materialize the _meta from the frontmatter if we do this so that we avoid them getting out of sync. I'm wondering how strong the optimization argument is though:
I imagine that what well-built clients will do is to read skills locally and try and keep them cached. Resources have lastModifiedTime metadata so a client can use that (+ change notifications) to keep things cached. My expectation is that metadata reads will greatly outnumber content reads, so we should optimize for light metadata reads and rely on caching to reduce/amortize the cost of getting the frontmatter. If I'm wrong and we're actually in a world where clients read a small % of skill contents in general then yes this would mean that we'd be reading more skills than necessary. If this happen though, we can add the optimization later. If we add the optimization now, it's much more difficult to remove it. I'd wager 10:1 that we never need that optimization. |
@pja-ant it makes sense that we don't want to over-optimize before knowing that it's a problem, and that we wouldn't prefer to recommend alternatives (such as caching). There is another angle I originally had in mind when creating this doc but then I got a little fixated on mapping existing frontmatter. Will add some revisions (or close this PR) this after airing those thoughts in the discord channel. Edit: adding a link to the related discord thread: https://discord.com/channels/1358869848138059966/1482008994062274610 |
Summary
docs/skill-meta-keys.mdproposing recommended_metakey conventions for skill resources served over MCPio.agentskills/version,io.agentskills/invocation) and experimental extended keys (allowed-tools,requires,category) using reverse-DNS namespaceresources/listresponse examplesCloses #55
Test plan
_metakeys against existing implementations🦉 Generated with Claude Code