docs(findings): transport of an io.modelcontextprotocol/ frontmatter metadata key over SEP-2640 - #136
Open
tobi-oye wants to merge 1 commit into
Conversation
tobi-oye
force-pushed
the
docs/issue-126-metadata-namespace-finding
branch
from
September 7, 2026 10:51
b562fc9 to
842b566
Compare
Contributor
Author
|
One wording clarification that may help: “unrecognized” means the host can read the key and value but has no implementation for its semantics. The host should still preserve the key and include it in frontmatter identity verification:
Suggested SEP wording:
|
tobi-oye
force-pushed
the
docs/issue-126-metadata-namespace-finding
branch
from
September 7, 2026 11:30
842b566 to
b1a4820
Compare
Issue modelcontextprotocol#126 item 4 proposes reserving the `io.modelcontextprotocol/` prefix inside the Agent Skills frontmatter `metadata` map. SEP-2640 already reserves it on the MCP side and defines no keys under it, but nothing had exercised the path end to end, and the wording suggestion the group agreed to open upstream reads better with evidence behind it. This records a run of that path. A demo server serves a skill whose frontmatter carries one key under the prefix; VS Code connects to it, lists its skills, and recognizes the key. Four cases: the marker present, a vendor-namespaced key only, an unrecognized key under the reserved prefix, and no `metadata` at all. Each records discovery, the host's log output, and whether the fetched SKILL.md still passes the frontmatter identity check that gates loading. The first case ran in the running editor against a live server; the rest are unit tests against the same discovery entry point. Evidence is wire logs, protocol responses and deterministic host logs; no model is on the path. The entry states plainly what this does not settle. It shows transport, preservation and host recognition are possible; it does not show the namespace should be reserved, which is a governance call. The key `io.modelcontextprotocol/test-marker` is a fixture, not a proposed property. And this is frontmatter `metadata`, not MCP `_meta` — the io.modelcontextprotocol.skills/ convention from modelcontextprotocol#60 is unaffected. Two things the run surfaced. "Ignore" and "do not compare" are different obligations. A host with no semantics for a reserved key still compares it field-by-field against the entry, so a key whose value drifts, or which the fetched file drops altogether, fails verification and the skill does not load. Both directions are tested. The entry carries suggested SEP wording: do not interpret or act on unrecognized keys, but preserve them and keep them in frontmatter identity verification — without that second half a host could strip them before comparing, letting a server advertise one value and serve another. And the detection line follows the wire call rather than the context rebuild: a third contribution of the same skills came from the host's listing cache and produced nothing, so anything derived from reserved metadata inherits that cache's lifetime. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
tobi-oye
force-pushed
the
docs/issue-126-metadata-namespace-finding
branch
from
September 7, 2026 13:16
b1a4820 to
e6a85b1
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Adds an experimental finding for #126 item 4, reserving the
io.modelcontextprotocol/namespace inside the Agent Skills frontmattermetadatamap. One commit on currentmain.Why
The group agreed on 2026-06-16 (§2) to propose the reservation upstream in the Agent Skills spec. SEP-2640 already reserves the prefix on the MCP side and defines no keys under it, but nothing had exercised the path, and a wording suggestion reads better with evidence behind it. This is that evidence, run before the upstream proposal rather than after.
What was run
A demo server serves a skill whose frontmatter is exactly:
VS Code started that server over stdio, called
skills/list, and recognized the key four milliseconds later:Four cases, each recording discovery, the host's log output, and whether the fetched
SKILL.mdstill passes the frontmatter identity check that gates loading:io.modelcontextprotocol/test-markerpresentinfoline, detectioncom.example/test-markerio.modelcontextprotocol/unknown-test-keytraceline, ignoredmetadataThe first ran in the running editor against a live server; the other three are unit tests against the same discovery entry point. No parser changes were needed anywhere. Server: 28 tests pass plus the stdio conformance suite. Host: 39 pass. No model is on the evidence path — wire logs, protocol responses and deterministic host logs only.
Tested commits: server
bb21190(on olaservo/skills-over-mcp-demoabf2262), host2984fa2, SEP-2640 ata3e147con the canonicalsep/skills-extensionbranch.What it does not claim
Stated explicitly in the entry: this shows transport, preservation and host recognition are technically possible. It does not show the namespace should be reserved — that is a governance and interoperability decision for the Agent Skills project.
io.modelcontextprotocol/test-markeris a throwaway fixture, not a proposed production property. This isSKILL.mdfrontmattermetadata, not MCP_meta; theio.modelcontextprotocol.skills/convention from #60 is a separate mechanism and is unaffected.Two things worth the group's attention
Ignoring is not the same as not comparing. Because a host compares fetched frontmatter field-by-field against the published entry, a reserved key it does not understand still participates in verification: a marker whose value differs between listing and file fails the check and the skill does not load. So "implementations SHOULD ignore keys under this prefix that they do not recognize" needs to mean do not act on them, not do not compare them. Worth a clarifying clause in the SEP if the group agrees.
Reserved metadata inherits the listing cache's lifetime. Two
skills/listcalls produced two detection lines, but a third contribution of the same skills to the model's context produced none — it came from the host's cache without re-running discovery. Fine for a log line; relevant for any future key meant to influence behaviour.Limitations are listed in the entry. The main ones: the live session covered discovery and detection but never loaded the skill, so the "still loads" column rests on tests and the server-side verified read; and the live host negotiated
2025-11-25, so the 2026-07-28 listing-cache attributes were exercised server-side only.A documentation-only proposal to
agentskills/agentskillsfollows from this: agentskills#546.AI assistance: this finding, the experiment code and this description were drafted with Claude Code and reviewed by me.
🤖 Generated with Claude Code