Skip to content

SEP-2640: Skills Extension#2640

Open
pja-ant wants to merge 15 commits into
mainfrom
sep/skills-extension
Open

SEP-2640: Skills Extension#2640
pja-ant wants to merge 15 commits into
mainfrom
sep/skills-extension

Conversation

@pja-ant

@pja-ant pja-ant commented Apr 23, 2026

Copy link
Copy Markdown
Contributor

Extensions Track SEP defining the skill:// resource convention for serving Agent Skills over MCP. Developed by the Skills Over MCP Working Group; transports the design from experimental-ext-skills#69 with archive distribution per experimental-ext-skills#83.

Extension identifier: io.modelcontextprotocol/skills.

Reference implementations: TypeScript SDK wrappers, host prototypes in gemini-cli/fast-agent/goose/codex/Claude Code, and the GitHub MCP Server.

@pja-ant pja-ant requested a review from olaservo April 23, 2026 19:46
@pja-ant pja-ant force-pushed the sep/skills-extension branch from 1f35055 to 7b35855 Compare April 23, 2026 19:47
@pja-ant pja-ant changed the title SEP: Skills Extension SEP-2640: Skills Extension Apr 23, 2026
@pja-ant pja-ant added SEP draft SEP proposal with a sponsor. extension labels Apr 23, 2026
@pja-ant pja-ant marked this pull request as ready for review April 23, 2026 19:51
@pja-ant pja-ant requested review from a team as code owners April 23, 2026 19:51
@pja-ant pja-ant self-assigned this Apr 23, 2026
@olaservo olaservo moved this from Backlog to In review in Skills Over MCP Working Group Apr 24, 2026
Comment thread seps/2640-skills-extension.md Outdated
Comment thread seps/2640-skills-extension.md Outdated
Comment thread seps/2640-skills-extension.md Outdated
Comment thread seps/2640-skills-extension.md Outdated
Comment thread seps/2640-skills-extension.md Outdated
Comment thread seps/2640-skills-extension.md Outdated
Comment thread seps/2640-skills-extension.md Outdated
Comment thread seps/2640-skills-extension.md
Comment thread seps/2640-skills-extension.md Outdated
Comment thread seps/2640-skills-extension.md Outdated
Comment thread seps/2640-skills-extension.md

Per RFC 3986, the first segment of `<skill-path>` occupies the authority component. This carries no special semantics under this convention and clients MUST NOT attempt DNS or network resolution of it.

A server MAY instead serve skills under another scheme native to its domain (e.g., `github://owner/repo/skills/refunds/SKILL.md`), provided each skill is listed in the [`skill://index.json`](#enumeration-via-skillindexjson) resource. The index is the authoritative record of which resources are skills; outside the index, hosts recognize skills by the `skill://` scheme prefix. The structural constraints above — `<skill-path>` ending in the skill name, `SKILL.md` explicit in the URI, no nesting — apply regardless of scheme.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So the skill path for the github:// example is owner/repo/skills/refunds, right?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes

Comment on lines +199 to +218
```json
{
"name": "read_resource",
"description": "Read an MCP resource from a connected server.",
"inputSchema": {
"type": "object",
"properties": {
"server": {
"type": "string",
"description": "Name of the connected MCP server"
},
"uri": {
"type": "string",
"description": "The resource URI, e.g. skill://git-workflow/SKILL.md"
}
},
"required": ["server", "uri"]
}
}
```

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I know this is just an example - but I don't think the model typically knows about MCP servers in most client implementations (or do they in your investigations into existing read_resource impls?).

For tools, the host keeps track of which tools exposed to the model come from MCP servers; it doesn't disclose to the model which MCP servers are available or how tools map to individual MCP servers.

Similarly, I would expect hosts to potentially have something like a single read_skill progressive disclosure tool that can read skills locally on disk and from MCP servers. Especially wrt the section below "Unified Treatement of Filesystem and MCP Skills". It's not clear to me how this signature would support unified treatment, since local file-based skills wouldn't have a server input value.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@olaservo did an exploration here: #2527 (comment)

I did some digging in code and:

  • claude code, codex, and fast-agent all have a single read_resource tool with a server param.
  • gemini-cli and goose just take uri alone and seem to probe servers one-by-one until one hits... which seems pretty janky and IMO should be fixed regardless of skills.

but yes, it's non-normative and implementations are free to do what they like here.

Similarly, I would expect hosts to potentially have something like a single read_skill progressive disclosure tool that can read skills locally on disk and from MCP servers. Especially wrt the section below "Unified Treatement of Filesystem and MCP Skills". It's not clear to me how this signature would support unified treatment, since local file-based skills wouldn't have a server input value.

What I expect (but again, non-normative):

  • Client enumerate skills for all servers by reading skill://index.json
  • They create a map of skill-name to skill metadata. The skill metadata says whether it is a local file or MCP-backed skill + which server it came from (or anything else).
  • They have a single read_skill tool that keys on skill-name and when invoked uses the metadata to decide whether to do a local file read or MCP resources/read (note: the model doesn't need to use read_resource for this -- just read_skill and it is backed by a resource/read for MCP skills).
  • read_resource is mostly needed for reading related files as part of the skill, e.g. if the skill references skill://code-review/checklist.json then the model will need to read that using a read_resource tool and make sure it is disambiguated.

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That matches how I'm thinking about too, I recommend adding it to the SEP

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done!

Comment thread docs/seps/2640-skills-extension.mdx Outdated

## Abstract

This SEP defines a convention for serving [Agent Skills](https://agentskills.io/) over MCP using the existing Resources primitive. A _skill_ is a directory of files (minimally a `SKILL.md`) that provides structured workflow instructions to an agent. This extension specifies that each file in a skill directory is exposed as an MCP resource, conventionally under the `skill://` URI scheme. Skills are addressed by URI and may be read directly; a well-known `skill://index.json` resource enumerates concrete skills and parameterized skill templates, but is not required — accommodating servers whose skill catalogs are large, generated, or otherwise unenumerable. The skill format itself — directory structure, YAML frontmatter, naming rules, and the [progressive disclosure](https://agentskills.io/specification#progressive-disclosure) model that governs how hosts stage content into context — is delegated entirely to the [Agent Skills specification](https://agentskills.io/specification); this SEP defines only the transport binding.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good callout on boundaries here 👍🏼
Probably a good idea to wait until this SEP lands, but was curious if there is an RFC on how we could leverage this in Agent Skills specs, or if there has already been a conversation. Sorry if my question had already been addressed. I'm still catching up on the topic.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm in touch with the Agent Skills folks and they are happy with this proposal since it keeps the Agent Skills format and just focuses on delivery. Once it lands can maybe chat with them about linking to it from the agentskills.io site as a reference.

Comment thread seps/2640-skills-extension.md Outdated
olaservo added a commit to olaservo/skilljack-mcp that referenced this pull request May 3, 2026
* Align resource layer with SEP-2640 (Skills Extension)

Replace legacy `skill://{name}` and `skill://{name}/` URIs with the SEP-2640
shape: `skill://<skill-path>/SKILL.md` for skill markdown, individual files
addressable as siblings, and a new `skill://index.json` discovery resource.
Declares the `io.modelcontextprotocol/skills` extension in initialize
capabilities, and adds `getSkillPath` / `buildSkillResourceUri` /
`parseSkillResourceUri` / `buildSkillIndex` helpers in skill-discovery.ts.

This is a breaking change to the URI scheme; pre-1.0, draft SEP, no shims.

SEP: modelcontextprotocol/modelcontextprotocol#2640

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* Update CLAUDE.md for SEP-2640 resource layer

Document the new URI shapes, the `extensions["io.modelcontextprotocol/skills"]`
capability, and the four SEP helpers in skill-discovery.ts. Note the explicit
`skill://index.json` update notification fired from `refreshSkills()`.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Comment thread seps/2640-skills-extension.md Outdated

**Archive entries** (`type: "archive"`) point `url` at a single resource whose content is a packed skill directory. Per the [Agent Skills archive distribution format](https://agentskills.io/well-known-uri#archive-distribution), the archive MUST be `.tar.gz` (gzip-compressed tar, `mimeType` `application/gzip`) or `.zip` (`mimeType` `application/zip`); hosts MUST support both and SHOULD determine the format from the resource's `mimeType`, falling back to the URL suffix. Archive contents represent the skill directory directly — `SKILL.md` MUST be at the archive root, not nested inside a wrapper directory, and the archive MUST NOT contain path-traversal sequences (`..`) or absolute paths.

The `<skill-path>` is the archive `url` with its archive suffix (`.tar.gz` or `.zip`) stripped — `skill://pdf-processing.tar.gz` unpacks to `skill://pdf-processing/`, `skill://acme/billing/refunds.zip` to `skill://acme/billing/refunds/` — and the archive contents populate `skill://<skill-path>/<file-path>` exactly as if each file were served individually. A server chooses per-skill whether to distribute as individual files or as an archive; hosts observe an identical virtual namespace either way. Archive distribution delivers a multi-file skill atomically in one round trip and can carry UNIX file metadata (executable bits, symlinks) that individual-resource distribution cannot represent — robustly for `.tar.gz`, variably for `.zip`.

@viswabalaji viswabalaji May 26, 2026

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Does the index.json have a constraint on unique way to expose the skill?

For instance, if I have a skill folder, few agents may prefer to download the archive at startup time, while other agents would prefer to load in only the skill.md file and load in related resources at runtime.

Can we expose the skill as "skill-md" and "archive" resource types to let agent/harness know about the two styles? Any other alternatives for this

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Similar to my request at #2640 (comment)

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for linking that. We are trying to implement this spec in Microsoft Foundry Toolbox as well to expose skills as resources. As part of that we want to explore both methods of distribution:

  1. discover skills (single file + folders), download them at agent session init time
  2. discover skills (single file + folders), but only download the resources into the agent sandbox/session as needed.
    • Retrieve only the skill://index.json at init time
    • If an "example skill" needs to be activated, then resource/read on skill://example_skill/SKILL.md
    • If the SKILL.md references other documents (doc X.md), then do a resource/read on that skill://example_skill/X.md

Though downloading the archive on session init might probably be the best for long-lived sessions. There are cases where if my skill is massive folder of instructions (>10MB), we can just download few files we need and not the entire archive. With size hints provided, the agent/harness can make a determination on choosing to download archive or only certain files.

The skills spec https://agentskills.io/client-implementation/adding-skills-support assumes the agent is reading from file system (so archive makes immediate sense). But there is a growing use case for having progressive disclosure over the network than even having all skills locally in file system (especially in case of sandboxes with limited memory and in cases where there are just too many skills). Perhaps this is best delegated to agent skills spec itself.

For now, we are experimenting by exposing a skill folder in index.json in 2 ways (one skill-md entry and one archive entry), so the agent/harness can use the approach of their choice. Ideally if each skill could have offer a list of possible discovery and load mechanism, it would be nicer but this likely requires alignment with agentskills.io spec as well.

@sambhav

sambhav commented May 26, 2026

Copy link
Copy Markdown
Member

Coming back to this since the same shape of concern came up again from @viswabalaji -- I think it's worth a closer look at where the question is actually live, because most cases really do reduce to "server picks per skill" the way you said.

Looking at anthropics/skills, the choice splits three ways:

  1. Archive-only. pdf -- forms.md drives the agent through python scripts/check_fillable_fields.py, python scripts/extract_form_field_info.py, etc. The skill doesn't function unless scripts are on disk and executable. Server picks archive, done.

  2. Per-file-only. claude-api -- 33 KB SKILL.md tells the agent to detect the project's language and read only the matching subdir (9 lang subdirs total). Archive wastes 8/9. Server picks per-file, done.

  3. Client-dependent. This is the case I want to focus on, because it's where the concern keeps coming up and "server picks per skill" doesn't reduce. Example: internal-comms -- 1.5 KB SKILL.md plus four ~3 KB example files (3p-updates.md, company-newsletter.md, faq-answers.md, general-comms.md). SKILL.md says "identify the comm type, load only the matching guideline." Same cold-path access pattern as claude-api, but ~11 KB total, no scripts, pure reference content. This shape is going to be common -- company playbooks, brand guidelines, style guides, FAQ packs, runbooks. Probably the bulk of what gets published over MCP.

For this kind of skill the format isn't determined by the content; it's determined by the client:

  • A Claude-Code-style client -- filesystem-backed, code-execution sandbox, treats every skill as a directory at ~/.claude/skills/<name>/ -- prefers the archive in one shot. Even when no scripts are executed, the harness's mental model is "skill = directory on disk, model reads with bash", and N separate resources/read calls to populate that directory is N round trips of pure overhead. Same goes for Codex CLI, the claude.ai code-execution container, the Claude API container.
  • A lightweight in-memory client -- thin chat UI, mobile app, browser-only -- prefers per-file. There's no disk to populate; it just reads SKILL.md, decides relevance, and dereferences the one ~3 KB guideline it actually needs. An 11 KB archive is wasted bytes when it ends up using 4.5 KB.
  • A gateway / many-hop client -- MCP gateway across regions, or a host batching connections to many servers at session start -- prefers the archive. Per-file's round-trip cost dominates when latency is the bottleneck, even on small payloads.
  • A caching-aggressive client might lean per-file -- individual files cache and dedupe across skills more cleanly than opaque archive blobs.

The skill author can't predict which of these the requestor is. For a registry-style server fronting public skills, the consumer distribution is unknown by construction.

"Servers SHOULD pick one" forces some fraction of consumers to pay the wrong cost. The cleanest resolution I can see: shared-name entries in the index describe one skill in alternative representations, and clients pick by materialization strategy. The URI namespace already supports it (pdf-processing.tar.gz and pdf-processing/SKILL.md resolve to the same pdf-processing/ virtual paths, per the SEP body itself) -- the only thing missing is the index-level dedupe rule. Equivalently a representations[] array per entry; more explicit, more invasive.

Worth nailing down either way -- goose r2's current parser would produce two cache entries with the same name and collide downstream in aggregated_mcp_skills. Right now it's underspecified, and the same question is going to keep coming back from anyone implementing a server that wants to serve a class-3 skill to mixed consumers.

@pja-ant

pja-ant commented May 27, 2026

Copy link
Copy Markdown
Contributor Author

Coming back to this since the same shape of concern came up again from @viswabalaji -- I think it's worth a closer look at where the question is actually live, because most cases really do reduce to "server picks per skill" the way you said.
...

Just for other reading: we're discussing this on Discord https://discord.com/channels/1358869848138059966/1464745826629976084/1508940124803829760

jancurn added a commit to apify/mcpc that referenced this pull request May 30, 2026
## Summary

Adds two **[EXPERIMENTAL]** CLI commands for the draft MCP skills
extension
([SEP-2640](modelcontextprotocol/modelcontextprotocol#2640),
`io.modelcontextprotocol/skills`):

- `mcpc @session skills-list` — discover Agent Skills exposed by the
server
- `mcpc @session skills-get <name> [--raw]` — read a skill's `SKILL.md`

Implemented as sugar over `resources-read` using the `skill://` URI
convention — no SDK changes required.

## Behavior

- **Discovery:** tries `skill://index.json` first; if absent, scans
resources for `skill://*/SKILL.md` (spec requires hosts not to treat a
missing index as proof of no skills).
- **Index entry types** (per current SEP-2640 draft): `skill-md`,
`archive` (`.tar.gz`/`.zip`), and `mcp-resource-template`. Entries with
unrecognized `type` are skipped.
- **Capability surfacing:** `mcpc @session` overview shows `skills
(experimental extension)` when the server advertises the extension under
either `capabilities.extensions` (per spec) or
`capabilities.experimental` (the SDK-preserved escape hatch since
current SDKs strip unknown capability fields).
- **JSON output** is documented in each command's `--help`:
  - `skills-list` → `[{ name, description, type, url }, ...]`
- `skills-get` → full `ReadResourceResult`; use `jq -r
'.contents[0].text'` to extract markdown

## Experimental labeling

Help text marks both commands as `[EXPERIMENTAL]` and notes the spec is
in draft and the shape may change — in the top-level `mcpc --help`, in
the per-command descriptions, and in dedicated "Status:" blocks in each
command's `--help` output.

## Tests

- Unit (`test/unit/cli/skills.test.ts`, Vitest): URI resolution, index
parsing (all three types, unknown-type skipping, malformed entries),
resource-scan fallback, pagination, formatters, capability surfacing.
- E2E (`test/e2e/suites/basic/skills.test.sh`): three scenarios via
opt-in `WITH_SKILLS=true` server flag — index path, no-index fallback
(`SKILLS_NO_INDEX=true`), and server without the extension. Covers
`--raw`, `--json` shapes, nested paths, archive entries, and
unknown-type skipping.

## Test plan

- [x] `pnpm run lint`
- [x] `pnpm run build`
- [x] `pnpm run test:unit` (632 tests)
- [x] `./test/e2e/run.sh basic/skills.test.sh`

https://claude.ai/code/session_01PyzCAbMiMXTbLrFXUP3nQJ

---------

Co-authored-by: Claude <noreply@anthropic.com>
@wachterjohannes

wachterjohannes commented Jun 2, 2026

Copy link
Copy Markdown

Sharing a PHP implementation of this SEP as a reference point (the SEP currently lists none, and the documented implementations so far are Python/TS):

Two pieces of spec-text feedback surfaced while implementing the server side:

  1. Resource name vs. frontmatter name (Resource Metadata). The section says the SKILL.md resource name SHOULD be the frontmatter name. The PHP SDK constrains MCP resource names to [a-zA-Z0-9_-]+, so a skill whose identity includes a path can't be represented in name. We satisfied the intent via title and kept the real name as the final URI segment (already guaranteed recoverable). Might be worth softening the SHOULD, or explicitly naming title as an acceptable carrier, so SDKs with constrained resource-name charsets stay conformant.
  2. _meta namespace is unspecified. The SEP says servers MAY expose extra frontmatter via the resource _meta, but defines no key, so we had to choose one (io.modelcontextprotocol.skills/). This is a concrete interop point — two servers under different keys won't interoperate. Tracked in experimental-ext-skills#55; flagging here since it intersects the normative text.

Minor note for other SDK authors: an extension advertising an empty {} capability payload is easy to accidentally serialize as [] (we hit this in the PHP SDK). A one-line caution in the capability-declaration section could save the next
implementer some time.

For the open question of whether clients consume MCP skills: as of June 2026, Claude Code loads skills from the filesystem/plugins only and treats MCP resources as user-mention attachments rather than model-driven reads, so it can't currently consume MCP-served skills end-to-end. FastMCP 3.0 looks like the right consumer to validate the serving half against next.

@pja-ant

pja-ant commented Jun 4, 2026

Copy link
Copy Markdown
Contributor Author

@wachterjohannes

  1. Resource name vs. frontmatter name (Resource Metadata). The section says the SKILL.md resource name SHOULD be the frontmatter name. The PHP SDK constrains MCP resource names to [a-zA-Z0-9_-]+, so a skill whose identity includes a path can't be represented in name. We satisfied the intent via title and kept the real name as the final URI segment (already guaranteed recoverable). Might be worth softening the SHOULD, or explicitly naming title as an acceptable carrier, so SDKs with constrained resource-name charsets stay conformant.

I'm not sure I follow, what exactly is the problem? The path shouldn't be in the name anyway, and the name is already constrained by the agent skills spec:

Max 64 characters. Lowercase letters, numbers, and hyphens only. Must not start or end with a hyphen.

_meta namespace is unspecified. The SEP says servers MAY expose extra frontmatter via the resource _meta, but defines no key, so we had to choose one (io.modelcontextprotocol.skills/). This is a concrete interop point — two servers under different keys won't interoperate. Tracked in experimental-ext-skills#55; flagging here since it intersects the normative text.

It is already specified on the sentence immediately following the quoted one:

Servers MAY expose additional frontmatter fields via the resource's _meta object. When _meta keys are used for skill resources, implementations SHOULD use the io.modelcontextprotocol.skills/ reverse-domain prefix.

@wachterjohannes

Copy link
Copy Markdown

Thanks @pja-ant — both fair, and you're right on the spec text in each case. Turns out neither is actually a spec issue; let me separate that from the SDK-side artifact.

1. Resource name. Agreed — the skill name charset ([a-z0-9-], ≤64, no leading/trailing hyphen) is a strict subset of the MCP resource-name charset, so "name SHOULD = frontmatter name" is satisfiable, and I'll withdraw the suggestion to soften the SHOULD. The friction was entirely on our side: our SDK registers every resource — including a skill's supporting files (references/SECURITY.md, …) — under a unique, schema-valid name key, and as your acme/billing/refunds + acme/support/refunds example shows, two skills can legitimately share the frontmatter name refunds. So we can't use the bare frontmatter name as the registry key without collisions; we derive a unique name from the URI path and keep the frontmatter name in title. That's an SDK registration detail, not a spec gap — identity is the URI regardless. No change implied for the SEP.

2. _meta prefix. You're right, it's specified — and our SDK independently picked exactly io.modelcontextprotocol.skills/, so we're already conformant (a nice corroboration of the recommended prefix). What I was reading is the working-group repo-local copy, experimental-ext-skills/docs/sep-draft-skills-extension.md, which ends that paragraph at "…via the resource's _meta object." and doesn't include the prefix sentence — so the PR and that working draft have drifted. Might be worth syncing the repo copy. I'll fix my findings note accordingly.

Thanks for the close read.

@pja-ant

pja-ant commented Jun 8, 2026

Copy link
Copy Markdown
Contributor Author

Major update: the skill://index.json has changed, moving away from the .well-known Agent Skills proposal. It's unclear what the future of the .well-known index is and decoupling allows us to have more freedom over the format (which we are now taking advantage of):

  • Frontmatter is mirrored to the index
  • Archives are optional, additional serving formats rather than servers having to choose files vs archive.

pja-ant added 14 commits June 8, 2026 11:38
- "four" → "several" implementations (count will rot)
- Fix orphaned "where:" — alternative-scheme paragraph had been
  inserted between the URI form and its definitions; moved it after
  the constraints block
- Add SHOULD for io.modelcontextprotocol.skills/ _meta prefix
- Cite design-principles instead of a transient GH issue for the
  resources-over-primitive rationale
- SEP-2076 "proposes" → "originally proposed" (PR is closed)
- Backward Compat: replace named small projects with link to the WG
  related-work survey; call out FastMCP SkillsProvider explicitly as
  the high-impact migration
- Drop redundant instructor-scope paragraph after the security bullets
- Label host/server reference impls as "Prototype"
- Mark Experimental Findings as (WIP); add Related Work and _meta
  Keys to References
Replaces the separate Model-Driven Resource Loading and Unified Treatment
sections with a single illustrative flow: host-side name→origin registry,
a name-keyed read_skill tool that routes to filesystem or resources/read,
and read_resource positioned for supporting files. Addresses review
feedback that the previous read_resource(server, uri) example did not
actually unify with filesystem skills.
…matter

The skill://index.json format is now defined by this extension rather
than borrowing an external discovery format. Entries carry the skill's
SKILL.md frontmatter verbatim, an optional direct url+digest pair, and
optional archive alternatives, each with url, mimeType, and digest.
Archive layout and unpacking safety requirements are stated inline.
The index is versioned by the extension capability itself; unrecognized
fields are ignored, so the format can grow additively without a
per-document version marker.
@pja-ant pja-ant force-pushed the sep/skills-extension branch from dfbaebf to 518ca79 Compare June 8, 2026 10:38
Skills often point agents at a directory of files (templates, scripts)
without naming one; resources/list cannot answer this scoped question.
The new method lists the direct children of a resource with mimeType
inode/directory, with resources/list-style cursor pagination. Support
is opt-in via a directoryRead setting in the extension capability.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

draft SEP proposal with a sponsor. extension SEP

Projects

Status: No status
Status: In review

Development

Successfully merging this pull request may close these issues.