SEP-2640: Skills Extension changedseps/2640-skills-extension
Nearest release: v2.1.274, published 8 hours after upstream edited the page. Shown because the two are within 24 hours of each other. Nothing here says the release caused the edit.
Upstream edited this page at 16 Sep 2026 14:29 UTC, give or take a minute or two: the time comes from Anthropic’s own sitemap rather than from a commit. This site recorded the change at 28 Sep 2026 22:07 UTC.
Upstream edited
Recorded here
Lines+31added
Lines−31removed
From line
20
where the diff opens
First seen
13 Sep 2026
this site's first read of the page
Recorded edits5to this page, all time
The whole hunk
from line 20, old and new numbered
/
from line 20
2020 requirements.
2121</Note>
2222
23| Field | Value |
24| ------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
25| **SEP** | 2640 |
26| **Title** | Skills Extension |
27| **Status** | Final |
28| **Type** | Extensions Track |
29| **Created** | 2026-04-23 |
23| Field | Value |
24| - | - |
25| **SEP** | 2640 |
26| **Title** | Skills Extension |
27| **Status** | Final |
28| **Type** | Extensions Track |
29| **Created** | 2026-04-23 |
3030| **Author(s)** | Peter Alexander ([@pja-ant](https://github.com/pja-ant)), Ola Hungerford ([@olaservo](https://github.com/olaservo)), Sambhav Kothari ([@sambhav](https://github.com/sambhav)), Aditya Kumar ([@aditya-scio](https://github.com/aditya-scio)), on behalf of the Skills Over MCP Working Group |
31| **Sponsor** | [@pja-ant](https://github.com/pja-ant) |
32| **PR** | [#2640](https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2640) |
31| **Sponsor** | [@pja-ant](https://github.com/pja-ant) |
32| **PR** | [#2640](https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2640) |
3333
3434***
3535
from line 94
9494
9595#### Examples
9696
97| Skill path | File | Resource URI |
98| ---------------------- | --------------------- | ------------------------------------------------ |
99| `git-workflow` | `SKILL.md` | `skill://git-workflow/SKILL.md` |
100| `pdf-processing` | `references/FORMS.md` | `skill://pdf-processing/references/FORMS.md` |
101| `pdf-processing` | `scripts/extract.py` | `skill://pdf-processing/scripts/extract.py` |
102| `acme/billing/refunds` | `SKILL.md` | `skill://acme/billing/refunds/SKILL.md` |
103| `acme/billing/refunds` | `examples/email.md` | `skill://acme/billing/refunds/examples/email.md` |
97| Skill path | File | Resource URI |
98| - | - | - |
99| `git-workflow` | `SKILL.md` | `skill://git-workflow/SKILL.md` |
100| `pdf-processing` | `references/FORMS.md` | `skill://pdf-processing/references/FORMS.md` |
101| `pdf-processing` | `scripts/extract.py` | `skill://pdf-processing/scripts/extract.py` |
102| `acme/billing/refunds` | `SKILL.md` | `skill://acme/billing/refunds/SKILL.md` |
103| `acme/billing/refunds` | `examples/email.md` | `skill://acme/billing/refunds/examples/email.md` |
104104
105105#### Resource Metadata
106106
from line 231
231231
232232Result fields:
233233
234| Field | Required | Description |
235| ----------------------------- | -------- | ---------------------------------------------------------------------------------------------------------------------------- |
236| `skills` | Yes | Array of skill entries. |
237| `skills[].frontmatter` | Yes | Verbatim copy of the skill's `SKILL.md` YAML frontmatter, rendered as JSON. See [Frontmatter](#frontmatter). |
238| `skills[].uri` | Yes | Resource URI of the skill's `SKILL.md`. See [Skill URIs](#skill-uris). |
239| `skills[].resources` | Yes | The skill's files: an array enumerating them with digests and sizes, or the string `"dynamic"`. See [Resources](#resources). |
240| `skills[].resources[].uri` | Yes | Resource URI of the file. |
241| `skills[].resources[].digest` | Yes | SHA-256 digest of the file. See [Integrity](#integrity-and-verification). |
242| `skills[].resources[].size` | Yes | Length in bytes of the file's raw content. See [Limits](#limits). |
234| Field | Required | Description |
235| - | - | - |
236| `skills` | Yes | Array of skill entries. |
237| `skills[].frontmatter` | Yes | Verbatim copy of the skill's `SKILL.md` YAML frontmatter, rendered as JSON. See [Frontmatter](#frontmatter). |
238| `skills[].uri` | Yes | Resource URI of the skill's `SKILL.md`. See [Skill URIs](#skill-uris). |
239| `skills[].resources` | Yes | The skill's files: an array enumerating them with digests and sizes, or the string `"dynamic"`. See [Resources](#resources). |
240| `skills[].resources[].uri` | Yes | Resource URI of the file. |
241| `skills[].resources[].digest` | Yes | SHA-256 digest of the file. See [Integrity](#integrity-and-verification). |
242| `skills[].resources[].size` | Yes | Length in bytes of the file's raw content. See [Limits](#limits). |
243243
244244A skill whose content is generated dynamically carries `"resources": "dynamic"` in place of the array. An entry with no `resources` at all is invalid.
245245
from line 291
291291
292292This extension fixes two per-skill limits so that servers know what every conforming host will accept and hosts know what they must be prepared to handle:
293293
294| Limit | Value | Counted over |
295| ------------------------- | ------------------------- | ----------------------------------------------------------- |
296| Resources per skill | 512 entries | The entries of the skill's `resources`, `SKILL.md` included |
297| Total file size per skill | 16 MiB (16,777,216 bytes) | The sum of `size` over the skill's `resources` |
294| Limit | Value | Counted over |
295| - | - | - |
296| Resources per skill | 512 entries | The entries of the skill's `resources`, `SKILL.md` included |
297| Total file size per skill | 16 MiB (16,777,216 bytes) | The sum of `size` over the skill's `resources` |
298298
299299Hosts MUST support skills up to and including these limits, and MAY support larger ones. Servers SHOULD NOT serve a skill that exceeds either limit; a skill that does is not guaranteed to be loadable by any conforming host. Because `resources` is complete, both limits are checkable from the entry alone, by counting entries and summing `size`, before the host retrieves a single file, and a host that declines a skill on this basis SHOULD tell the user why rather than fail silently on a later read.
300300
from line 401
401401
402402One extension-specific setting is defined:
403403
404| Setting | Type | Default | Meaning |
405| --------------- | ------- | ------- | ----------------------------------------------------------------------- |
404| Setting | Type | Default | Meaning |
405| - | - | - | - |
406406| `directoryRead` | boolean | `false` | The server implements [`resources/directory/read`](#directory-listing). |
407407
408408An empty object indicates support for the extension with no optional features. Declaring the extension itself commits the server to [`skills/list`](#enumeration-via-skillslist) and [`skills/get`](#retrieval-via-skillsget); clients MUST NOT call `resources/directory/read` against a server that has not declared `directoryRead: true`. A server declaring this extension MUST also declare the `resources` capability.
No line in this hunk matches that.