docs(findings): SEP-2640 v1 skill detection over skills/list in VS Code - #134
Open
tobi-oye wants to merge 1 commit into
Open
docs(findings): SEP-2640 v1 skill detection over skills/list in VS Code#134tobi-oye wants to merge 1 commit into
tobi-oye wants to merge 1 commit into
Conversation
The issue modelcontextprotocol#66 entry was written against the pre-v1 draft, before skills/list existed. This adds a follow-up entry covering a run of the same VS Code fork against the v1 extension surface, using the findings template added in modelcontextprotocol#112. Traces one query end to end — "what does 5d10dh1 mean?" — chosen because the demo server's roll_dice tool executes dice notation but cannot explain it, so a correct answer can only come from skill content. One skills/list at connect, then two resources/read hops (SKILL.md, then the references/ file its body points at), both verified against the manifest carried in the listing entry. Records three host defects surfaced only by running: a directory URI with no read path, an uncached supporting file fetched six times, and a listing cached across four connections for 27 hours. Notes two design questions for the SEP: nothing bounds listing retention on pre-2026-07-28 connections, and a server-side tool covering the same task as a skill wins against it by default. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
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.
Follow-up to #116. That entry was written against the pre-v1 draft, before
skills/listexisted — as the note added in 59f8c14 records. This adds a second entry for a run of the same VS Code fork against the v1 extension surface, and leaves the original untouched.Docs-only. Written to the findings template added in #112.
Motivation and Context
#116 verified that a mainstream host could discover
skill://resources at all. It could not verify the v1 loop, because v1 did not exist yet: noskills/list, noskills/get, no per-file digest manifest, and digest verification not yet a host MUST.This run closes that gap against olaservo/skills-over-mcp-demo (
@olaservo/ext-skills0.13.0, SEP-2640 at753b9f2).The query it traces — "what does 5d10dh1 mean?" — was chosen deliberately. That deployment ships a
roll_dicetool alongside thetabletop-diceskill, and a tool that executes dice notation cannot explain it. A correct answer therefore has to come from skill content, which makes the trace unambiguous:The second hop happens only because the
SKILL.mdbody says "seereferences/dice-notation.mdfor the full grammar". The answer comes from that file's Keep/Drop table. Both reads were verified against the{uri, digest, size}manifest carried in the listing entry — a listing entry verifying content that had not been fetched yet is what makes detection and retrieval genuinely separable.Screenshots
Two things the WG may want to act on
Nothing bounds how long a host may retain a listing. This host issued one
skills/listand reused it for 27 hours across four connections. The server sends SEP-2549ttlMs/cacheScope, but scopes them to 2026-07-28+ connections; VS Code negotiates2025-11-25and so receives no caching guidance at all. Since verification binds fetched bytes to digests from that cached manifest, a server redeploying between sessions has fresh content checked against a stale manifest — and at that point a legitimate update is indistinguishable from tampering. Re-listing on reconnect is what a server would expect, and nothing currently asks for it.A server-side tool out-competes the skill it pairs with. On a control query ("roll 2d6+3"), the model called
roll_diceand never loadedtabletop-dice, whose description overlaps the tool's almost verbatim — with three skills in context 28 seconds earlier and aBLOCKING REQUIREMENTto load skills first. The server's README states the tool "pairs with the skill without substituting for it"; in this host it substituted. This is a sharper mechanism than the decay recorded under Skill Reliability and Adherence: a matching tool schema beating a document, rather than a model losing the plot. Relevant to #37.How Has This Been Tested?
Code - OSS Dev 1.133.0, source build,
--log trace, against the live Space over Streamable HTTP. All claims in the entry come from the MCP output channel for that session; method totals and the exact read sequence are quoted in the Evidence and reproduction section.The server side was checked independently with the demo's own conformance suite, which passes against the live deployment:
The three defects under What didn't are host bugs in the fork, not server or spec problems, and the entry says so.
Limitations stated in the entry
skills/getwas never exercised (this host has no path that yields an unlisted skill URI);"resources": "dynamic"and nested skills are untested because this server offers neither; per-turn model attribution is not recorded undercopilot/auto.Breaking Changes
None. Docs-only.
Types of changes