Repository navigation
skills.mdx: CacheableResult on skills/list and skills/get, state 2026-07-28 baseline - #139
Conversation
…ecord decisions Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Sure6Sknngow87Q6TkzTfL
|
👍 |
|
Thanks for this @pja-ant - LGTM. I like the reasoning in Couple of things that I wanted to flag here instead of on 330: 1. Decision 2 looks like a behaviour change In SEP-2640 Decisions 1 and 3 look like corrections, ie - the wrong base type and a consequence of the base Resources spec respectively, but here it looks like we are adding a requirement. I do agree with your reasoning - Perhaps we could clarify that it it is new - this would remove the doubts for implementors. 2. Also +1 on this being a separate decision. The suite already has a On the conditional, I raised the 2026-07-28 gating question on modelcontextprotocol/conformance#330 and would be great to keep it one place instead of two. We have three implementations and the pages have each resolved the conditional independently so wondering if the SEP text should follow? Wdyt? |
True... but the extension isn't final. Servers written today against the non-final extension should have no expectations of stability. I don't know where we'd mark anything as "new" since there is no stable specification to say that it is new against. I feel it would be odd for the first version of a specification to reference changes relative to a work-in-progress SEP? |
Its text already shipped in specification/stable/skills.mdx via PR #139, so the entry joins the three v1 entries this PR ratifies. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
* Initial plan * docs: ratify three Proposed decision log entries to Accepted Co-authored-by: olaservo <16480113+olaservo@users.noreply.github.com> * docs: mark the 2026-09-08 stable-spec decision Accepted Its text already shipped in specification/stable/skills.mdx via PR #139, so the entry joins the three v1 entries this PR ratifies. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> --------- Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com> Co-authored-by: olaservo <16480113+olaservo@users.noreply.github.com> Co-authored-by: Ola Hungerford <olahungerford@gmail.com> Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
…157) Fixes #156. Aligns `specification/stable/skills.mdx` with the `2026-07-28` base schema and records the decision. - `skills/get`, `resources/directory/read`: named params interfaces, so `_meta` is required - `ReadResourceDirectoryResult` extends `CacheableResult` (**breaking**: `ttlMs`, `cacheScope` required) - `*ResultResponse` types for each method; optional `_meta` on `Skill` - Request examples carry the full required `_meta` ## Why this lands in stable These are corrections to the published page rather than new design: - **The page doesn't compile against its own stated baseline.** It says its types are those of the `2026-07-28` schema, and `ReadResourceDirectoryRequest` fails to type-check against it (#156). - **`_meta` was already required.** The page's text says every request MUST include it. Only the types and examples disagreed. - **Directory-read caching was missed in the 2026-09-08 pass.** That decision made `skills/list` and `skills/get` cacheable so that every result type in the extension stays uniform with the base protocol; `resources/directory/read` was the one it didn't catch. This is the only change that adds a requirement on servers, and it affects an optional method behind `directoryRead: true`. Corrections like these have landed on stable in place before (#139, and #147 after SEP-2640 went Final), so I've followed that route rather than opening a `draft/` revision. `index.md` excerpt ranges are re-anchored to the new line numbers. ## Verification All interfaces and all 16 examples type-check under `--strict` against the base schema; `docs:build` passes. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01M8b7Vuu2jRefMhoZB3BrrX --- _Generated by [Claude Code](https://claude.ai/code)_ Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
[SEP-3392: Extension Lifecycle](https://modelcontextprotocol.io/seps/3392-extension-lifecycle) is Final. It classifies the Skills extension as **Beta**, and the directory holding an extension's specification is the marker of its stage. This PR makes the move that SEP-3392's Transition section requires. **Changes** - `specification/stable/skills.md(x)` → `specification/beta/skills.md(x)`. The file contents are unchanged, so the `index.md` include ranges still apply. - Every live link to the old path is updated: README, CONTRIBUTING, AGENTS, `index.md`, the VitePress nav, sidebar and edit link, the archive document headers, and the decision log's links. - "Stable" is no longer used for the released revision, because it now names a lifecycle stage. The sidebar label is now "Beta". - AGENTS.md notes that at Beta a revision may make breaking changes, and that each one is recorded in the decision log. This is the changelog SEP-3392 requires for Beta breaking changes. - `MAINTAINERS.md` is new. It lists the WG leads as Extension Maintainers, because SEP-3392 requires every extension to have at least one listed. **Kept as is** - The decision log's 2026-09-08 entry still says it was applied to `specification/stable/skills.mdx` in PR #139. That was the path at the time. Its heading is also kept, because another entry links to that anchor. **Follow-ups** - Links to the old path on `main` will break once this merges. GitHub does not redirect moved paths. The main spec repo has three such links, and a companion PR updates them. Merge this PR first. - The SEP asks Beta extensions to state an intended destination: Stable, or promotion to Core. The extensions page currently says "destination not yet stated" for Skills. - Per SEP-3392, a Core Maintainer approves stage moves. **Verification:** `npm run docs:build` passes. VitePress fails on dead links, so this also checks the moved includes and links. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01QK1G3tFRjbLpjvT8NyuDJN --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Follow-up to #138 addressing @panyam's review comment on
specification/stable/skills.mdx, cross-checked against the base2026-07-28schema.Before:
After:
Changes:
ListSkillsResultnow extendsCacheableResult.PaginatedResultalone does not carryttlMs/cacheScope; those live onCacheableResultand are required there, as ontools/listandresources/list. The prose bullet now says the fields are required, and everyskills/listexample response carries them.GetSkillResultnow extendsCacheableResult. SEP-2640 left open whetherskills/getcarries caching attributes "asresources/readresults do". This resolves it: yes, matchingReadResourceResult. A new semantics bullet explainsttlMsas the hint for when to re-callskills/get, and notes neither field is an integrity property. Everyskills/getexample response carries them.2026-07-28or later and naming the base types it references. This is why the SEP's "in protocol versions 2026-07-28 and later" conditional is not carried.resources-capability line reworded as a consequence of the base Resources specification (a server servingresources/readdeclaresresources) rather than a free-standing new MUST. The requirement itself is kept so the conformance suite can check it.resources/readresponse also gainsttlMs/cacheScope, sinceReadResourceResultrequires them at this revision.docs/decisions.mdgets a 2026-09-08 entry (Status: Proposed) recording the three normative points above as deliberate, per this repo's process for changes beyond the v1 SEP text.Not changed here:
ReadResourceDirectoryResultstill extendsPaginatedResultonly. Its closest analogueListResourcesResultis cacheable, so the same question applies; left for a separate decision.All JSON examples parse and all internal anchors resolve.
🤖 Generated with Claude Code
Requested by Peter · Claude session #01Sure6S