Auth extension support (OAuth Client Credentials and Enterprise-Managed Authorization) is tracked separately from the core MCP authorization features (DCR, CIMD). Check each extension's specification and the [ext-auth repository](https://github.com/modelcontextprotocol/ext-auth) for the latest implementation status.
diff --git a/content/mcp/extensions/overview.md b/content/mcp/extensions/overview.md
index 14dd1a4bac..0ce1571839 100644
--- a/content/mcp/extensions/overview.md
+++ b/content/mcp/extensions/overview.md
@@ -50,6 +50,19 @@ To get started building MCP Apps, see the [quickstart guide](/extensions/apps/bu
| --------------------------------------- | ------------------------------------------------------------------------------------------------------------- |
| [MCP Tasks](/extensions/tasks/overview) | Asynchronous task execution for long-running operations, with polling, mid-flight input, and durable handles. |
+### Skills over MCP
+
+
+ Discover and read Agent Skills from MCP servers.
+
+
+| Extension | Description |
+| ---------------------------------------------- | ------------------------------------------------------------------------------- |
+| [Skills over MCP](/extensions/skills/overview) | Discover workflow instructions and read supporting files through MCP resources. |
+
+See the [Skills overview](/extensions/skills/overview) to get started and the
+[client matrix](/extensions/client-matrix) for implementation support.
+
## Experimental Extensions
Experimental extensions provide an incubation pathway for [Working Groups and Interest Groups](/community/working-interest-groups) to prototype ideas and collaborate on extension concepts before formal SEP submission.
diff --git a/content/mcp/extensions/skills/overview.md b/content/mcp/extensions/skills/overview.md
new file mode 100644
index 0000000000..4fb029e8f3
--- /dev/null
+++ b/content/mcp/extensions/skills/overview.md
@@ -0,0 +1,434 @@
+> ## Documentation Index
+> Fetch the complete documentation index at: https://modelcontextprotocol.io/llms.txt
+> Use this file to discover all available pages before exploring further.
+
+# Skills
+
+> Discover and read Agent Skills from MCP servers
+
+The [ext-skills repository](https://github.com/modelcontextprotocol/ext-skills)
+contains the specification for Skills over MCP.
+
+
+ Specification and documentation for Skills over MCP.
+
+
+The Skills extension allows MCP servers to expose workflow instructions and
+supporting files to clients. Clients can discover available skills, retrieve
+their metadata, and read their contents using the existing Resources primitive.
+
+A skill is a directory containing a `SKILL.md` file and optional supporting
+files, following the [Agent Skills specification](https://agentskills.io/specification).
+This extension defines discovery and retrieval over MCP.
+
+Skills are useful for reusable workflows that combine several tools or require
+supporting references, such as code review or document processing. Serving them
+over MCP keeps those instructions with the service they describe. Clients can
+discover available workflows from metadata and load instructions and supporting
+files only when needed.
+
+## User Interaction Model
+
+Host applications determine how skills are exposed to the model and user. Skills
+can be selected by the model based on their names and descriptions, or explicitly
+by the user. The extension does not mandate a specific user interaction model.
+
+Reading `SKILL.md` through `resources/read` does not itself activate a skill.
+To load the skill, the host routes the read through its skill-loading path, which
+verifies the content and applies any required user approval before loading it
+into model context.
+
+## Capabilities
+
+Servers that support Skills **MUST** declare both the `resources` capability and
+the `io.modelcontextprotocol/skills` extension in
+[`server/discover`](/specification/draft/server/discover):
+
+```json theme={null}
+{
+ "capabilities": {
+ "resources": {},
+ "extensions": {
+ "io.modelcontextprotocol/skills": {
+ "directoryRead": true
+ }
+ }
+ }
+}
+```
+
+Servers that declare this extension **MUST** implement `skills/list` and
+`skills/get`. Skill files are served through `resources/read`.
+
+The optional `directoryRead` setting indicates support for
+`resources/directory/read` and defaults to `false`. An empty extension object
+indicates support without directory reading. Clients issue `skills/list` and
+`skills/get` only after observing the server's declaration.
+
+
+ These examples use protocol revision `2026-07-28` or later. For brevity, the
+ request examples omit `_meta`. Every request **MUST** include the required
+ [request metadata](/specification/draft/basic/index#_meta).
+
+
+## Protocol Messages
+
+### Listing Skills
+
+To discover available skills, clients send a `skills/list` request. This
+operation supports [pagination](/specification/draft/server/utilities/pagination)
+and [caching](/specification/draft/server/utilities/caching).
+
+**Request:**
+
+```json theme={null}
+{
+ "jsonrpc": "2.0",
+ "id": 1,
+ "method": "skills/list",
+ "params": {}
+}
+```
+
+**Response:**
+
+```json theme={null}
+{
+ "jsonrpc": "2.0",
+ "id": 1,
+ "result": {
+ "resultType": "complete",
+ "skills": [
+ {
+ "uri": "skill://code-review/SKILL.md",
+ "frontmatter": {
+ "name": "code-review",
+ "description": "Review code using the team's checklist."
+ },
+ "resources": [
+ {
+ "uri": "skill://code-review/SKILL.md",
+ "digest": "sha256:d2489d6c182e8df9c178563ff9f2eac7998a0c1bb1278c52a7fd5306e4259160",
+ "size": 149
+ },
+ {
+ "uri": "skill://code-review/references/checklist.md",
+ "digest": "sha256:dbab2de7bf7db9cc95cb6ce681c3690b26184db39f75b958a0287ca6d9e24e20",
+ "size": 65
+ }
+ ]
+ }
+ ],
+ "ttlMs": 300000,
+ "cacheScope": "public"
+ }
+}
+```
+
+Each entry contains:
+
+| Field | Meaning |
+| ------------- | --------------------------------------------------------------------------- |
+| `uri` | The resource URI of the skill's `SKILL.md`. |
+| `frontmatter` | All YAML frontmatter fields, unchanged, including `name` and `description`. |
+| `resources` | The complete file manifest, or `"dynamic"` for generated content. |
+
+A manifest **MUST** include `SKILL.md` and every supporting file, with each file's
+URI, SHA-256 digest, and byte size. Each entry returned by `skills/list` is
+complete; clients do not need to call `skills/get` for additional metadata.
+
+When a response includes `nextCursor`, clients pass it as `params.cursor` to
+retrieve the next page. List and get results **MUST** include
+`resultType: "complete"`, `ttlMs`, and `cacheScope`. The cache fields describe
+freshness and sharing; they do not provide content integrity.
+
+Skill identity consists of the originating server's identity and the skill URI.
+Names are labels and are not guaranteed to be unique. Hosts **MUST** preserve
+both server identity and URI in registries, approvals, and caches. Servers
+**SHOULD** use the `skill://` scheme, but **MAY** use another scheme.
+Hosts **MUST NOT** identify a resource as a skill solely by its URI scheme.
+
+### Getting a Skill
+
+To retrieve a skill entry by URI, clients send a `skills/get` request. The URI
+may be supplied by a user, another skill, or server instructions.
+
+**Request:**
+
+```json theme={null}
+{
+ "jsonrpc": "2.0",
+ "id": 2,
+ "method": "skills/get",
+ "params": {
+ "uri": "skill://code-review/SKILL.md"
+ }
+}
+```
+
+The response contains a skill entry under `result.skill`, with the same shape
+as an entry in `skills/list`, alongside `resultType: "complete"`, `ttlMs`,
+and `cacheScope`. Clients can also use this method to refresh an existing entry.
+
+Servers **MAY** return empty or partial listings, but **MUST** respond to
+`skills/get` for every skill they serve. Hosts **MUST** support loading by URI,
+including skills that do not appear in a listing.
+
+### Reading Skill Content
+
+To retrieve skill instructions or supporting files, clients send a
+[`resources/read`](/specification/draft/server/resources#reading-resources)
+request. This example retrieves the `SKILL.md` from the listing above.
+
+**Request:**
+
+```json theme={null}
+{
+ "jsonrpc": "2.0",
+ "id": 3,
+ "method": "resources/read",
+ "params": {
+ "uri": "skill://code-review/SKILL.md"
+ }
+}
+```
+
+**Response:**
+
+```json theme={null}
+{
+ "jsonrpc": "2.0",
+ "id": 3,
+ "result": {
+ "resultType": "complete",
+ "contents": [
+ {
+ "uri": "skill://code-review/SKILL.md",
+ "mimeType": "text/markdown",
+ "text": "---\nname: code-review\ndescription: Review code using the team's checklist.\n---\n\n# Code review\n\nRead `references/checklist.md`, then review the diff.\n"
+ }
+ ],
+ "ttlMs": 300000,
+ "cacheScope": "public"
+ }
+}
+```
+
+A `SKILL.md` file **MUST** begin with YAML frontmatter containing `name` and
+`description`. The final segment of its parent directory's path **MUST** match
+`name`.
+
+Clients resolve relative references against the skill's root directory. In this
+example, `references/checklist.md` resolves to
+`skill://code-review/references/checklist.md`. The supporting file is retrieved
+from the same server using `resources/read` and contains:
+
+```markdown theme={null}
+# Review checklist
+
+Check correctness, tests, and compatibility.
+```
+
+Both example files end with a newline; their digests and sizes match the manifest.
+Hosts **MUST NOT** retrieve files ahead of need, including on connection, listing,
+or approval. Approval binds to the manifest without requiring file retrieval.
+
+### Reading Directories
+
+To list a directory's direct children, clients send a `resources/directory/read`
+request. This method is optional. Clients **MUST NOT** call it unless the server
+declares `directoryRead: true`.
+
+**Request:**
+
+```json theme={null}
+{
+ "jsonrpc": "2.0",
+ "id": 4,
+ "method": "resources/directory/read",
+ "params": {
+ "uri": "skill://code-review/references"
+ }
+}
+```
+
+**Response:**
+
+```json theme={null}
+{
+ "jsonrpc": "2.0",
+ "id": 4,
+ "result": {
+ "resultType": "complete",
+ "resources": [
+ {
+ "uri": "skill://code-review/references/checklist.md",
+ "name": "checklist.md",
+ "mimeType": "text/markdown"
+ }
+ ]
+ }
+}
+```
+
+Directory URIs have no trailing slash. Child directories use
+`mimeType: "inode/directory"`. Clients descend by issuing another request for
+a child directory. Results support `cursor` / `nextCursor` pagination and
+contain direct children only.
+
+For skills with a manifest, hosts **MAY** answer directory queries from that
+manifest. Directory reading also supports dynamic skills and other resource
+trees. Hosts **MUST NOT** treat a live directory result as extending the retained
+manifest or expose newly listed files as part of the skill. Access to those files
+requires an entry refresh and any required user approval.
+
+## Message Flow
+
+This example shows loading a skill with a file manifest, after
+server capabilities have been discovered. The host's MCP client sends the
+protocol requests. Skill selection and user approval are host interactions.
+
+```mermaid theme={null}
+sequenceDiagram
+ actor User
+ participant Model
+ participant Host
+ participant Server
+
+ opt Discover a catalog
+ Host->>Server: skills/list
+ Server-->>Host: Skill entries with frontmatter and manifests
+ Host->>Model: Available skills and their origins
+ Host->>User: Available skills and their origins
+ end
+
+ alt Model selects a skill
+ Model->>Host: Load skill (server, URI)
+ else User selects a skill
+ User->>Host: Load skill (server, URI)
+ end
+
+ opt Host has only a URI
+ Host->>Server: skills/get (URI)
+ Server-->>Host: Skill entry or error
+ end
+ break Lookup failed
+ Note over Host,Server: Stop loading (unknown skill: -32602)
+ end
+ Note over Host: Retain entry (server, URI)
+
+ opt User approval required
+ Host->>User: Request approval for this skill and manifest
+ User-->>Host: Approve
+ end
+
+ Host->>Server: resources/read (SKILL.md URI)
+ Server-->>Host: SKILL.md content
+ Host->>Host: Verify byte size, digest, and frontmatter
+ Host->>Model: Load verified instructions with server origin
+
+ loop Supporting files requested while the skill is active
+ Model->>Host: Read a supporting file
+ Host->>Host: Resolve URI within the retained manifest
+ Host->>Server: resources/read (file URI)
+ Server-->>Host: File content
+ Host->>Host: Verify byte size and digest
+ Host->>Model: Verified content with server origin
+ end
+```
+
+A known URI can be loaded without listing. An entry returned by `skills/list`
+can be reused; otherwise, the host calls `skills/get`. An unlisted skill may
+still exist, but an unknown URI returns `-32602` (Invalid params) and stops
+loading. All skill reads use the originating server.
+
+If lookup fails, approval is denied, or verification fails, the host does not load
+or use the content. Recovering from a changed manifest requires refreshing the
+entry and obtaining any required approval again, as described below.
+
+## Integrity and Verification
+
+While acting on a skill, the host retains the entry used to load it. This period
+extends at least until the skill's `SKILL.md` leaves model context. For skills
+with a manifest, hosts **MUST**:
+
+1. Restrict file reads to URIs in the retained manifest.
+2. Verify each file's raw byte size and SHA-256 digest before use.
+3. Parse `SKILL.md` frontmatter and compare it field-by-field with the entry's
+ `frontmatter`.
+
+Hosts **MUST NOT** use content that fails verification. To recover from stale
+metadata, the host refreshes the entry with `skills/get`. Persisted approval
+**MUST** bind to the complete set of file URIs and digests. A changed, added, or
+removed file revokes that approval; the host **MUST** obtain approval again
+before loading or executing.
+
+Hosts **SHOULD** cache verified content on demand. Disk caches **MUST** either
+prevent modification by the model, its tools, or other users and keep files
+immutable, or verify cached bytes on every access. Hosts **MUST** exclude cached
+files from filesystem-skill discovery paths and preserve their MCP origin,
+including after a restart.
+
+
+ Digests establish consistency with the server's manifest, not trust in its
+ content. For generated content without stable digests, an entry uses
+ `"resources": "dynamic"`. Hosts **MAY** decline these skills. If accepted,
+ hosts **MUST** still verify frontmatter and **MUST NOT** treat persisted
+ approval as covering arbitrary future content.
+
+
+## Implementation Requirements
+
+### Servers
+
+Servers **MUST**:
+
+* Serve valid Agent Skills and implement the declared methods, including base
+ Resources support.
+* Preserve all frontmatter fields and publish complete manifests computed from
+ the bytes served, unless the skill's resources are declared `"dynamic"`.
+* Support direct lookup independently of listing. Each skill entry is atomic;
+ its manifest **MUST NOT** be split across pages.
+* Support every directory in the served skill namespaces when declaring
+ `directoryRead: true`.
+
+Servers **SHOULD NOT** exceed **512 files or 16 MiB per skill**, including
+`SKILL.md`. Hosts **MUST** support skills up to these limits and **MAY** support
+larger skills.
+
+### Security Considerations
+
+Hosts **MUST**:
+
+* Prevent skills with the same name from silently replacing one another.
+* Tag loaded content with its originating server and bind resource reads to that
+ server using a host-assigned label. Cross-server reads require explicit
+ per-call approval naming both servers.
+* Treat skill content as untrusted input. Host-side code execution and permission
+ grants such as `allowed-tools` require explicit per-skill user approval.
+* Obtain fresh user consent before activating a nested skill. Reading its
+ `SKILL.md` as supporting content does not activate it or its frontmatter.
+
+See the [security requirements](https://github.com/modelcontextprotocol/ext-skills/blob/main/specification/stable/skills.mdx#security-considerations)
+for the full approval, origin, and cache rules.
+
+## Error Handling
+
+| Condition | Handling |
+| ----------------------------------------------- | --------------------------------------------- |
+| Unknown skill/file, or invalid directory URI | JSON-RPC `-32602` (Invalid params). |
+| Internal server failure | JSON-RPC `-32603` (Internal error). |
+| Digest, size, frontmatter, or manifest mismatch | Host rejects content and refreshes the entry. |
+
+Verification failures are host-side conditions rather than protocol errors.
+They are handled as described in [Integrity and Verification](#integrity-and-verification).
+
+## Client Support
+
+See the [client matrix](/extensions/client-matrix) for Skills support and links
+to implementation documentation.
+
+## Specification
+
+The full specification is in the [ext-skills repository](https://github.com/modelcontextprotocol/ext-skills/blob/main/specification/stable/skills.mdx).
+Development is coordinated by the [Skills Over MCP Working Group](/community/working-groups/skills-over-mcp).
diff --git a/content/mcp/seps.md b/content/mcp/seps.md
index 34a42ef2c8..91d8df817b 100644
--- a/content/mcp/seps.md
+++ b/content/mcp/seps.md
@@ -14,13 +14,14 @@ Specification Enhancement Proposals (SEPs) are the primary mechanism for proposi
## Summary
-* **Final**: 41
+* **Final**: 42
## All SEPs
| SEP | Title | Status | Type | Created |
| ------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------- | ----------------------------------------------- | ---------------- | ---------- |
| [SEP-2663](/seps/2663-tasks-extension) | Tasks Extension | Final | Extensions Track | 2026-04-27 |
+| [SEP-2640](/seps/2640-skills-extension) | Skills Extension | Final | Extensions Track | 2026-04-23 |
| [SEP-2596](/seps/2596-spec-feature-lifecycle-and-deprecation) | Specification Feature Lifecycle and Deprecation Policy | Final | Process | 2026-04-17 |
| [SEP-2577](/seps/2577-deprecate-roots-sampling-and-logging) | Deprecate Roots, Sampling, and Logging | Final | Standards Track | 2026-04-14 |
| [SEP-2575](/seps/2575-stateless-mcp) | Make MCP Stateless | Final | Standards Track | 2025-06-18 |
diff --git a/content/mcp/seps/2640-skills-extension.md b/content/mcp/seps/2640-skills-extension.md
new file mode 100644
index 0000000000..74a2913736
--- /dev/null
+++ b/content/mcp/seps/2640-skills-extension.md
@@ -0,0 +1,674 @@
+> ## Documentation Index
+> Fetch the complete documentation index at: https://modelcontextprotocol.io/llms.txt
+> Use this file to discover all available pages before exploring further.
+
+# SEP-2640: Skills Extension
+
+> Skills Extension
+
+
+
+ Final
+
+
+
+ Extensions Track
+
+
+
+
+ This SEP has reached Final status and is preserved as a historical record of
+ the design as accepted. Changes made to the protocol after finalization are
+ not reflected here. Refer to the [current
+ specification](/specification/latest) and its changelog for authoritative
+ requirements.
+
+
+| Field | Value |
+| ------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
+| **SEP** | 2640 |
+| **Title** | Skills Extension |
+| **Status** | Final |
+| **Type** | Extensions Track |
+| **Created** | 2026-04-23 |
+| **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 |
+| **Sponsor** | [@pja-ant](https://github.com/pja-ant) |
+| **PR** | [#2640](https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2640) |
+
+***
+
+## 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 `skills/list` method enumerates the skills a server serves (servers whose skill catalogs are large, generated, or otherwise unenumerable MAY return an empty or partial listing), and a `skills/get` method returns any single skill's entry by URI. 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.
+
+The extension defines three protocol methods. Every server declaring the extension implements `skills/list`, which enumerates the skills a server serves, and `skills/get`, which returns the entry for a single skill by URI, including skills absent from the listing. The optional `resources/directory/read` lists the direct children of a directory resource, giving agents scoped navigation of a skill's supporting files. Everything else rides on existing protocol surface, so hosts that already treat MCP resources as a virtual filesystem can consume MCP-served skills identically to local filesystem skills. The specification is accompanied by implementation guidelines for host-provided resource-reading tools and SDK-level convenience wrappers.
+
+## Motivation
+
+Native skills support in host applications demonstrates strong demand for rich, progressively disclosed workflow instructions. MCP does not currently offer a conventional way to ship this content alongside the tools it describes, which leads to:
+
+* **Fragmented distribution.** A server and the skill that teaches an agent to use it are versioned, discovered, and installed separately. Users installing a server from a registry have no signal that a companion skill exists. ([problem statement](https://github.com/modelcontextprotocol/ext-skills/blob/main/docs/problem-statement.md))
+* **Instruction size limits.** Server instructions are delivered as the `instructions` field of the `server/discover` result and are practically bounded in size. Complex workflows, such as the 875-line [mcpGraph skill](https://github.com/TeamSparkAI/mcpGraph/blob/main/skills/mcpgraphtoolkit/SKILL.md), do not fit this model. ([experimental findings](https://github.com/modelcontextprotocol/ext-skills/blob/main/docs/experimental-findings.md#mcpgraph-skills-in-mcp-server-repo))
+* **Inconsistent ad-hoc solutions.** Absent a convention, several independent implementations have each invented their own `skill://` URI structure, with diverging semantics for authority, path, and sub-resource addressing.
+
+## Specification
+
+### Dependencies
+
+This extension has no dependencies beyond the base MCP Resources primitive. In protocol versions 2026-07-28 and later, `skills/list` results additionally carry the base protocol's list-caching attributes ([SEP-2549]).
+
+### Skill Format
+
+A skill served over MCP MUST conform to the [Agent Skills specification](https://agentskills.io/specification). In particular:
+
+* A skill is a directory. Its *skill name* is the value of the `name` field in its `SKILL.md` frontmatter.
+* Every skill MUST contain a `SKILL.md` file at its root.
+* `SKILL.md` MUST begin with YAML frontmatter containing at minimum the `name` and `description` fields as defined by the Agent Skills specification.
+* A skill MAY contain additional files and subdirectories (references, scripts, examples, assets).
+
+This extension does not redefine, constrain, or extend the skill format. Future revisions of the Agent Skills specification apply automatically. In the event that the Agent Skills specification changes in a backwards incompatible way, clients MUST honor any backwards compatibility mechanisms provided by the Agent Skills specification and SHOULD continue to support the Agent Skills specification as it existed prior to any incompatible change.
+
+### Resource Mapping
+
+Each file within a skill directory is exposed as an MCP resource. Servers SHOULD use the `skill://` URI scheme, under which the resource URI has the form:
+
+```
+skill:///
+```
+
+where:
+
+* `` is a `/`-separated path of one or more segments locating the skill directory within the server's skill namespace. It MAY be a single segment (`git-workflow`) or nested to arbitrary depth (`acme/billing/refunds`).
+* `` is the file's path relative to the skill directory root, using `/` as the separator.
+
+The resource for the skill's required `SKILL.md` is therefore always addressable as `skill:///SKILL.md`, and the skill's root directory is `skill://` (the `/SKILL.md` suffix removed, no trailing slash), matching [Directory Listing](#directory-listing).
+
+The final segment of `` MUST equal the skill's `name` as declared in its `SKILL.md` frontmatter. This mirrors the Agent Skills specification's requirement that `name` [match the parent directory name](https://agentskills.io/specification#name-field). Preceding segments, if any, are a server-chosen organizational prefix. Servers MAY organize skills hierarchically by domain, team, version, or any other axis. In `skill://acme/billing/refunds/SKILL.md`, the prefix is `acme/billing` and the skill's `name` is `refunds`; in `skill://git-workflow/SKILL.md` there is no prefix and the `name` is `git-workflow`. This means the skill name is always recoverable from the URI alone, without reading frontmatter.
+
+Further constraints:
+
+* A `SKILL.md` MAY appear in a descendant directory of a skill, so skills can nest. See [Nested skills](#nested-skills).
+* The final `` segment, being the skill `name`, MUST satisfy the Agent Skills specification's naming rules. The first `` segment occupies the authority component and SHOULD be a valid `reg-name` per [RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986); any other prefix segments SHOULD be valid URI path segments; no further constraints are imposed on them.
+
+Per RFC 3986, the first segment of `` 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 serve skills under another scheme native to its domain (e.g., `github://owner/repo/skills/refunds/SKILL.md`). No scheme is privileged: the structural constraints above (`` ending in the skill name, `SKILL.md` explicit in the URI) apply regardless of scheme, and [`skills/list`](#enumeration-via-skillslist) enumerates a server's skills whatever scheme they use.
+
+Skill identity does not depend on the scheme. A host learns that a resource is a skill in one of two ways: from a [`skills/list`](#enumeration-via-skillslist) entry, the authoritative record of the skills a server publishes; or from an explicit reference (the server's `instructions` field, another skill, or the user), which [`skills/get`](#retrieval-via-skillsget) confirms, the server answering for a skill it serves and erroring otherwise. This holds for every scheme, `skill://` included. A host MUST NOT conclude that a resource is a skill merely because its URI carries a particular scheme.
+
+#### Examples
+
+| Skill path | File | Resource URI |
+| ---------------------- | --------------------- | ------------------------------------------------ |
+| `git-workflow` | `SKILL.md` | `skill://git-workflow/SKILL.md` |
+| `pdf-processing` | `references/FORMS.md` | `skill://pdf-processing/references/FORMS.md` |
+| `pdf-processing` | `scripts/extract.py` | `skill://pdf-processing/scripts/extract.py` |
+| `acme/billing/refunds` | `SKILL.md` | `skill://acme/billing/refunds/SKILL.md` |
+| `acme/billing/refunds` | `examples/email.md` | `skill://acme/billing/refunds/examples/email.md` |
+
+#### Resource Metadata
+
+For each `skill:///SKILL.md` resource:
+
+* `mimeType` SHOULD be `text/markdown`.
+* `name` SHOULD be set from the `name` field of the `SKILL.md` YAML frontmatter. By the path constraint above, this will equal the final segment of ``.
+* `description` SHOULD be set from the `description` field of the `SKILL.md` YAML frontmatter.
+
+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. Other files in the skill use the `mimeType` appropriate to their content.
+
+#### Nested skills
+
+A skill directory MAY contain further skills in descendant directories. A nested skill is subject to the same rules as any other skill (its directory name is its `name`, and the enclosing skill's path becomes part of its organizational prefix), with the following semantics:
+
+* **Nested content is supporting content.** From the enclosing skill's perspective, a nested skill's directory and files are ordinary supporting files, and reading them is ordinary reading. A nested `SKILL.md` read this way is ordinary markdown: hosts MUST NOT act on its frontmatter.
+* **Activation requires fresh consent.** Approval is per skill: approving a skill approves that skill alone and says nothing about skills nested within it. Activating a nested skill (loading it as a skill in its own right, whether through the host's skill-loading machinery or by giving effect to its frontmatter) requires fresh, explicit user consent; approval of the enclosing skill does not substitute for it. Once activated, a nested skill is an ordinary skill: its frontmatter takes effect under the same rules as any other MCP-served skill, including the approval gate on `allowed-tools`.
+* **Publication is flat.** A nested skill is published like any other: through its own [`skills/list`](#enumeration-via-skillslist) entry, or by explicit reference. The listing remains flat: an entry for a nested skill is an ordinary entry whose `uri` happens to share a path prefix with the enclosing skill's, and nothing in the listing marks nesting.
+
+### Discovery
+
+A server is not required to make its skills enumerable. A skill's URI is directly readable via `resources/read` whether or not it appears in any listing, and hosts MUST support loading a skill given only its URI (see [Hosts: End-to-End Integration](#hosts-end-to-end-integration)). This is the baseline: if a model has the URI, whether from server instructions, another skill, or the user, it can read the skill.
+
+On top of that baseline, three mechanisms are defined. Two are discovery: enumeration via `skills/list`, which every server declaring this extension implements, and an optional pointer from server instructions. The third is retrieval: however a host arrives at a skill's URI, `skills/get` returns that skill's entry (its metadata and digests), including for skills no listing mentions.
+
+#### Enumeration via `skills/list`
+
+A server declaring the `io.modelcontextprotocol/skills` extension MUST implement the `skills/list` method, which returns the skills it serves. The result MAY be empty.
+
+The request carries an optional pagination cursor:
+
+```json theme={null}
+{
+ "jsonrpc": "2.0",
+ "id": 4,
+ "method": "skills/list",
+ "params": {}
+}
+```
+
+The result carries the skill entries:
+
+```json theme={null}
+{
+ "jsonrpc": "2.0",
+ "id": 4,
+ "result": {
+ "resultType": "complete",
+ "skills": [
+ {
+ "uri": "skill://git-workflow/SKILL.md",
+ "frontmatter": {
+ "name": "git-workflow",
+ "description": "Follow this team's Git conventions for branching and commits"
+ },
+ "resources": [
+ {
+ "uri": "skill://git-workflow/SKILL.md",
+ "digest": "sha256:a1b2c3d4...",
+ "size": 2314
+ }
+ ]
+ },
+ {
+ "uri": "skill://acme/billing/refunds/SKILL.md",
+ "frontmatter": {
+ "name": "refunds",
+ "description": "Process customer refund requests per company policy",
+ "license": "Apache-2.0"
+ },
+ "resources": [
+ {
+ "uri": "skill://acme/billing/refunds/SKILL.md",
+ "digest": "sha256:b2c3d4e5...",
+ "size": 3871
+ },
+ {
+ "uri": "skill://acme/billing/refunds/examples/email.md",
+ "digest": "sha256:c3d4e5f6...",
+ "size": 962
+ }
+ ]
+ },
+ {
+ "uri": "skill://pdf-processing/SKILL.md",
+ "frontmatter": {
+ "name": "pdf-processing",
+ "description": "Extract, fill, and assemble PDF documents",
+ "metadata": { "version": "2.1.0" }
+ },
+ "resources": [
+ {
+ "uri": "skill://pdf-processing/SKILL.md",
+ "digest": "sha256:d5e6f7a8...",
+ "size": 5120
+ },
+ {
+ "uri": "skill://pdf-processing/references/FORMS.md",
+ "digest": "sha256:e6f7a8b9...",
+ "size": 18433
+ },
+ {
+ "uri": "skill://pdf-processing/scripts/extract.py",
+ "digest": "sha256:f7a8b9c0...",
+ "size": 4096
+ },
+ {
+ "uri": "skill://pdf-processing/templates/invoice.md",
+ "digest": "sha256:a8b9c0d1...",
+ "size": 1210
+ },
+ {
+ "uri": "skill://pdf-processing/templates/purchase-order.md",
+ "digest": "sha256:b9c0d1e2...",
+ "size": 1388
+ },
+ {
+ "uri": "skill://pdf-processing/templates/regional/eu-invoice.md",
+ "digest": "sha256:c0d1e2f3...",
+ "size": 1472
+ }
+ ]
+ }
+ ]
+ }
+}
+```
+
+Result fields:
+
+| Field | Required | Description |
+| ----------------------------- | -------- | ---------------------------------------------------------------------------------------------------------------------------- |
+| `skills` | Yes | Array of skill entries. |
+| `skills[].frontmatter` | Yes | Verbatim copy of the skill's `SKILL.md` YAML frontmatter, rendered as JSON. See [Frontmatter](#frontmatter). |
+| `skills[].uri` | Yes | Resource URI of the skill's `SKILL.md`. See [Skill URIs](#skill-uris). |
+| `skills[].resources` | Yes | The skill's files: an array enumerating them with digests and sizes, or the string `"dynamic"`. See [Resources](#resources). |
+| `skills[].resources[].uri` | Yes | Resource URI of the file. |
+| `skills[].resources[].digest` | Yes | SHA-256 digest of the file. See [Integrity](#integrity-and-verification). |
+| `skills[].resources[].size` | Yes | Length in bytes of the file's raw content. See [Limits](#limits). |
+
+A skill whose content is generated dynamically carries `"resources": "dynamic"` in place of the array. An entry with no `resources` at all is invalid.
+
+Pagination mirrors the base protocol's list methods: the request accepts an optional `cursor`, and when the result includes `nextCursor` the client passes it back to retrieve the next page. An entry is atomic: a skill's `resources` set is never split across pages.
+
+In protocol versions 2026-07-28 and later, the result also carries the base protocol's list-caching attributes, `ttlMs` and `cacheScope`, as defined for `tools/list` and `resources/list` ([SEP-2549]), with the same semantics: a freshness hint for the listing and a cache-scope marker, not an integrity property. [Integrity and verification](#integrity-and-verification) governs content regardless of how fresh a cached listing is.
+
+A server whose skill catalog is large, generated on demand, or otherwise unenumerable MAY return an empty or partial listing. Hosts MUST NOT treat an empty or partial listing as proof that a server has no skills. The method serves entries for a server's skills whatever URI scheme they use. Enumeration is uniform across schemes.
+
+##### Names
+
+A skill's `name` is a label, not an identifier. A skill is identified by its `uri` within a server, and by the pair of server identity and `uri` across servers ([Skill URIs](#skill-uris)). Within a server's listing, names SHOULD be unique, but they are not guaranteed to be: two skills at different paths may share a final segment (`acme/billing/refunds` and `acme/support/refunds` are both named `refunds`), and a nested skill may share its name with a top-level one. Hosts MUST NOT assume name uniqueness. When two entries in one listing collide on `name`, hosts MUST disambiguate them, for example by their distinguishing path segments, rather than silently discarding or preferring one. When skills from different origins collide on `name`, hosts MUST resolve the name within a per-origin namespace, identifying servers by a host-assigned label; an MCP-served skill MUST NOT silently shadow, or be silently substituted for, a same-named skill from any other origin, whether another server's or the host's own filesystem skills. See [Security Implications](#security-implications).
+
+##### Frontmatter
+
+`frontmatter` is the skill's `SKILL.md` YAML frontmatter rendered verbatim as a JSON object. It contains every field the author wrote, not a curated subset. Because the Agent Skills specification requires `name` and `description`, those fields are always present; everything else (`license`, `metadata`, fields added by future revisions of the Agent Skills specification) passes through unchanged. A host can therefore build its skill registry (names, descriptions, and whatever other metadata it understands) from the listing alone, without fetching each `SKILL.md`.
+
+The `frontmatter` object MUST be identical in content to the frontmatter of the `SKILL.md` it describes. The final `` segment of the entry's `uri` MUST equal `frontmatter.name`, per [Resource Mapping](#resource-mapping).
+
+Within the frontmatter `metadata` object, keys prefixed with `io.modelcontextprotocol/` are reserved for metadata defined by MCP extensions. This extension currently defines no such keys. Implementations SHOULD ignore keys under this prefix that they do not recognize.
+
+##### Skill URIs
+
+`uri` is the full resource URI of the skill's `SKILL.md`, readable via `resources/read`. Supporting files are individually addressable as sibling resources under the same skill path, per [Resource Mapping](#resource-mapping). A skill is always retrieved as individually addressable resources; this extension defines no packed or bundled retrieval form. See [Appendix: Deferred Features](#appendix-deferred-features).
+
+A skill URI is scoped to the server that serves it. Nothing prevents two connected servers from both serving `skill://refunds/SKILL.md`, and those are two unrelated skills. The identity of an MCP-served skill is therefore the pair of the host's identity for the originating server and the skill's `uri`. Hosts MUST preserve both halves wherever a skill is recorded or addressed, including the registry, persisted approvals, the cache, and any tool or path through which the model reaches the skill, and MUST NOT key any of these on the `uri` alone. In particular, any path at which a host materializes skill content, whether a cache directory or a virtual mount, MUST encode the server identity as well as the `uri`, so that same-URI skills from different servers land at distinct paths and the originating server is recoverable from the path; this is also what lets the host honor the durable-origin requirement in [Security Implications](#security-implications).
+
+##### Resources
+
+`resources` is REQUIRED on every skill entry and takes one of two forms: an array enumerating the skill's files (`SKILL.md` and every supporting file) as `{uri, digest, size}` triples, or the string `"dynamic"`. The array is the unit of content that a host verifies and that a user's approval binds to:
+
+* When present, `resources` MUST be complete: it lists every file of the skill, each exactly once, including an entry matching the skill's top-level `uri`. That entry carries the digest and size of `SKILL.md` itself.
+* Each `uri` MUST be the skill's `SKILL.md` or a file within the skill's directory.
+* Each entry MUST carry `size`: the length in bytes of the file's raw content (the same bytes the `digest` covers). `size` lets a host budget a skill before fetching anything: it can enforce the [Limits](#limits) from the entry alone, decide whether a file is worth retrieving, and detect a truncated or padded read before hashing it. A read whose byte length differs from the entry's `size` is a verification failure equivalent to a digest mismatch ([Integrity and verification](#integrity-and-verification)), whether or not the host goes on to compute the digest.
+* Completeness extends to nested skills: from the enclosing skill's perspective their files are supporting files ([Nested skills](#nested-skills)), so the enclosing skill's `resources` lists them too, and the same file may appear in both the enclosing and the nested skill's entries. A change to a nested skill is therefore a change to the enclosing skill's set.
+* When a skill's content is generated dynamically, such that stable digests cannot be published, the server MUST set `"resources": "dynamic"` instead of an array. The marker is explicit so that a host can tell a deliberately unverifiable skill from a malformed entry: an entry with no `resources` at all, or with any value other than an array or `"dynamic"`, is invalid, and hosts MUST NOT load it. A skill whose `resources` is `"dynamic"` offers no content integrity and cannot be content-bound ([Security Implications](#security-implications)). Hosts MAY decline to load such skills, and server authors SHOULD expect that some hosts will.
+
+##### Integrity and verification
+
+Digests are SHA-256 hashes of an artifact's raw bytes, formatted as `sha256:{hex}` where `{hex}` is 64 lowercase hexadecimal characters. Each entry in a skill's `resources` carries the digest of the file at its `uri`.
+
+When a host retrieves a file listed in a skill's `resources`, it MUST verify the content against that entry's digest. A mismatch means the content is not what the listing promised. It may be corrupted, tampered with, or simply stale because the skill was updated after the listing was fetched. Whatever the cause, hosts MUST NOT use the unverified content; to recover from staleness, call [`skills/get`](#retrieval-via-skillsget) for that skill (or `skills/list` to refresh the catalog) and proceed from the current `resources` set, which, being different, revokes any content-bound approval ([Security Implications](#security-implications)). A host is *acting on* a skill from the moment it loads the skill's `SKILL.md` into the model's context until, at the earliest, that `SKILL.md` leaves context; hosts MAY hold the window open longer, never shorter. For the whole of that window the host holds the entry from which it loaded the skill. Because `resources` is complete, an unlisted file is a change to the skill: while acting on a skill, a host MUST resolve reads of the skill's files only to URIs listed in that entry's `resources`, and MUST treat a read of an unlisted file within the skill as a verification failure equivalent to a digest mismatch. Hosts MUST NOT retrieve a skill's files ahead of need, whether on connection, on listing, or at approval. A `SKILL.md` is fetched when the skill is loaded, and a supporting file when it is read. A server may publish many skills with many files each, and every host that connects retrieving all of them would impose load proportional to the catalog rather than to use. Hosts SHOULD instead cache what they do retrieve, and digests make that cache cheap to validate: a cached file whose digest matches the current entry can be served without fetching it again, and one whose digest does not match must be fetched again. A cached copy is only as trustworthy as the host's certainty that its bytes have not changed since they were verified; the requirements on a disk cache are in [Security Implications](#security-implications). Lazy retrieval is compatible with content-bound approval, which binds to the entry's `resources` set rather than to retrieved bytes; a file fetched long after approval is verified against that set when it is read.
+
+Digests are unsigned and supplied by the same server that supplies the content. A match proves the two are consistent, not that either is trustworthy. Any intermediary on the path, such as a gateway, can rewrite both the listing and the content together. Hosts MUST NOT treat a digest match as a security boundary.
+
+After fetching a `SKILL.md` for which the host holds an entry, from either `skills/list` or `skills/get` (digest-verified when the entry's `resources` is an array, and unverifiable when it is `"dynamic"`), hosts MUST parse its YAML frontmatter and compare it field-by-field against the entry's `frontmatter`. Any discrepancy MUST be treated as a verification failure equivalent to a digest mismatch, and the skill MUST NOT be loaded. This enforces the [Frontmatter](#frontmatter) identity requirement on the host side, so that what a user approves from the listing is what the model actually receives.
+
+##### Limits
+
+This 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:
+
+| Limit | Value | Counted over |
+| ------------------------- | ------------------------- | ----------------------------------------------------------- |
+| Resources per skill | 512 entries | The entries of the skill's `resources`, `SKILL.md` included |
+| Total file size per skill | 16 MiB (16,777,216 bytes) | The sum of `size` over the skill's `resources` |
+
+Hosts 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.
+
+For a skill whose `resources` is `"dynamic"`, the entry offers nothing to count. A host that chooses to load such a skill applies the total-size limit to what it actually retrieves and MAY stop loading the skill once that limit is reached.
+
+These limits bound a host's exposure to a single skill. They say nothing about how many skills a server may serve or a host must accept; a listing may be arbitrarily large, which is one reason hosts retrieve files only on demand ([Integrity and verification](#integrity-and-verification)).
+
+#### Retrieval via `skills/get`
+
+A server declaring the `io.modelcontextprotocol/skills` extension MUST also implement the `skills/get` method, which returns the entry for a single skill named by its URI:
+
+```json theme={null}
+{
+ "jsonrpc": "2.0",
+ "id": 5,
+ "method": "skills/get",
+ "params": {
+ "uri": "skill://pdf-processing/SKILL.md"
+ }
+}
+```
+
+```json theme={null}
+{
+ "jsonrpc": "2.0",
+ "id": 5,
+ "result": {
+ "resultType": "complete",
+ "skill": {
+ "uri": "skill://pdf-processing/SKILL.md",
+ "frontmatter": {
+ "name": "pdf-processing",
+ "description": "Extract, fill, and assemble PDF documents",
+ "metadata": { "version": "2.1.0" }
+ },
+ "resources": [
+ {
+ "uri": "skill://pdf-processing/SKILL.md",
+ "digest": "sha256:d5e6f7a8...",
+ "size": 5120
+ },
+ {
+ "uri": "skill://pdf-processing/references/FORMS.md",
+ "digest": "sha256:e6f7a8b9...",
+ "size": 18433
+ },
+ {
+ "uri": "skill://pdf-processing/scripts/extract.py",
+ "digest": "sha256:f7a8b9c0...",
+ "size": 4096
+ },
+ {
+ "uri": "skill://pdf-processing/templates/invoice.md",
+ "digest": "sha256:a8b9c0d1...",
+ "size": 1210
+ },
+ {
+ "uri": "skill://pdf-processing/templates/purchase-order.md",
+ "digest": "sha256:b9c0d1e2...",
+ "size": 1388
+ },
+ {
+ "uri": "skill://pdf-processing/templates/regional/eu-invoice.md",
+ "digest": "sha256:c0d1e2f3...",
+ "size": 1472
+ }
+ ]
+ }
+ }
+}
+```
+
+`params.uri` MUST be the URI of a skill's `SKILL.md`. The `skill` object is a skill entry, identical in shape and meaning to an entry of `skills/list`, with the same `uri`, `frontmatter`, and `resources` fields under the same rules.
+
+Semantics:
+
+* If the URI does not identify a skill the server serves, the server MUST return error `-32602` (Invalid params), the same code `resources/read` uses for unknown resources.
+* A server MUST answer for every skill it serves, whether or not that skill appears in its `skills/list` result. A skill absent from a partial listing is still retrievable by URI.
+* The result is a point-in-time snapshot, exactly as a listing entry is. Re-calling the method is how a host refreshes one skill's digests without re-enumerating the catalog.
+* A skill whose content is generated dynamically carries `"resources": "dynamic"`, per [Resources](#resources), whether it is reached through `skills/list` or `skills/get`.
+* The result carries no pagination cursor: a single entry is not a list. The entry is a snapshot of the skill as the server holds it at that moment; whether the result should also carry the base protocol's caching attributes (`ttlMs` and `cacheScope`, per [SEP-2549]), as `resources/read` results do, is left open.
+
+The method complements the baseline: a URI alone is enough to read a skill, and `skills/get` turns that same URI into the skill's metadata and digests, so a skill that never appeared in a listing can still be verified and content-bound ([Security Implications](#security-implications)).
+
+#### Pointer from Server Instructions
+
+A server MAY direct the agent to specific skill URIs from its `instructions` field. This requires no discovery machinery on the host; the URI is simply present in the model's context and readable via `resources/read`.
+
+#### Capability Declaration
+
+Per [SEP-2133] extension negotiation, servers declare support for this extension in the `extensions` field of their capabilities:
+
+```json theme={null}
+{
+ "capabilities": {
+ "extensions": {
+ "io.modelcontextprotocol/skills": {
+ "directoryRead": true
+ }
+ }
+ }
+}
+```
+
+One extension-specific setting is defined:
+
+| Setting | Type | Default | Meaning |
+| --------------- | ------- | ------- | ----------------------------------------------------------------------- |
+| `directoryRead` | boolean | `false` | The server implements [`resources/directory/read`](#directory-listing). |
+
+An 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.
+
+### Reading
+
+Skill files are read via the standard `resources/read` method. No skill-specific read semantics are defined.
+
+In particular, reading a `SKILL.md` via `resources/read` does not by itself activate the skill. `resources/read` is transport: it returns bytes, whoever asked for them: a generic resource-reading tool, a resource browser, a user inspecting the server. A skill is activated only by the host's own skill-loading path, the one that verifies the content against the skill's entry ([Integrity and verification](#integrity-and-verification)), applies any required user approval ([Security Implications](#security-implications)), and opens the window in which the host is acting on the skill. Hosts MUST NOT treat a `resources/read` of a `SKILL.md` that arrives by any other route as a load: it grants no approval, opens no window, and confers no standing on the skill's supporting files. Content obtained that way is ordinary resource content, and a host that returns it to the model SHOULD do so as it would any other resource read, not as a loaded skill. A host that wishes such a read to load the skill routes it through the skill-loading path instead.
+
+Internal references within a skill (e.g., `SKILL.md` linking to `references/GUIDE.md`) are relative paths, as in the filesystem form of the Agent Skills specification. A client resolves a relative reference against the skill's root, so `references/GUIDE.md` in `skill://acme/billing/refunds/SKILL.md` resolves to `skill://acme/billing/refunds/references/GUIDE.md`, exactly as a filesystem path would resolve. The skill's root is the directory containing `SKILL.md`, not the scheme root. When skills nest, each `SKILL.md`'s references resolve against its own directory: a relative reference in a nested skill's `SKILL.md` resolves against the nested skill's root, regardless of how the file was reached.
+
+### Directory Listing
+
+A skill's instructions frequently reference a directory rather than a file: "pick the appropriate template from `templates/`", "run the matching script in `scripts/`". To act on this, the agent must learn what the directory contains. `resources/list` cannot answer that scoped question: it enumerates the server's entire resource space, not a subtree, and the servers this SEP most wants to accommodate, large, generated, or unenumerable catalogs (see [Why May the Listing Be Empty or Partial?](https://github.com/modelcontextprotocol/ext-skills/blob/main/docs/rationale.md#why-may-the-listing-be-empty-or-partial)), may not implement meaningful global listing at all.
+
+This extension therefore defines one new method, `resources/directory/read`, gated behind the `directoryRead` setting of the [capability declaration](#capability-declaration).
+
+#### Directory resources
+
+A *directory resource* is a resource whose `mimeType` is `inode/directory`. In a skill namespace served as individual files, every directory level is a directory resource: the skill root (`skill://pdf-processing`) and each subdirectory (`skill://pdf-processing/templates`). Directory URIs are written without a trailing slash. Directory resources need not appear in `resources/list`; they are addressable whether listed or not.
+
+#### `resources/directory/read`
+
+The request carries the directory's URI and an optional pagination cursor. The result carries the resource metadata of the directory's direct children, the same `Resource` objects that `resources/list` returns, with the same `nextCursor` pagination contract.
+
+```json theme={null}
+{
+ "jsonrpc": "2.0",
+ "id": 7,
+ "method": "resources/directory/read",
+ "params": {
+ "uri": "skill://pdf-processing/templates"
+ }
+}
+```
+
+```json theme={null}
+{
+ "jsonrpc": "2.0",
+ "id": 7,
+ "result": {
+ "resultType": "complete",
+ "resources": [
+ {
+ "uri": "skill://pdf-processing/templates/invoice.md",
+ "name": "invoice.md",
+ "mimeType": "text/markdown"
+ },
+ {
+ "uri": "skill://pdf-processing/templates/purchase-order.md",
+ "name": "purchase-order.md",
+ "mimeType": "text/markdown"
+ },
+ {
+ "uri": "skill://pdf-processing/templates/regional",
+ "name": "regional",
+ "mimeType": "inode/directory"
+ }
+ ]
+ }
+}
+```
+
+Semantics:
+
+* The method applies only to directory resources. If the URI does not exist, or exists but is not a directory resource, the server MUST return error `-32602` (Invalid params), the same code `resources/read` uses for unknown resources.
+* The result contains every direct child of the directory: files with their ordinary resource metadata, subdirectories listed as directory resources (`mimeType: "inode/directory"`). The listing is not recursive; clients descend by calling the method again on a child directory.
+* An empty directory yields an empty `resources` array.
+* Pagination mirrors `resources/list`: when the result includes `nextCursor`, the client passes it back as `cursor` to retrieve the next page.
+
+A server that declares `directoryRead` MUST support the method for every directory within the skill namespaces it serves as individual files. The method itself is not skill-specific: a server MAY support it on any directory resource it serves, under any scheme.
+
+#### Directory reads and the held entry
+
+For a skill whose entry carries `resources`, the host already holds a complete manifest of the skill's files ([Resources](#resources)); a directory read tells it nothing about that skill's contents that the entry did not. Directory reading earns its place elsewhere: for dynamically generated skills, whose `resources` is `"dynamic"`; for resource trees that are not skills at all; and for obtaining the server's current view of a directory without first refreshing the entry. When a host acting on a skill with a manifest wants to know what `templates/` contains, it MAY answer from the entry alone.
+
+The two views can disagree. If the server adds a file to a skill after the host obtained its entry, a directory read may list that file while the held manifest does not. This is the stale-snapshot case that [Integrity and verification](#integrity-and-verification) already governs, and the recovery path is the one specified there: while acting on the skill under the held entry, the host MUST NOT read the newly listed child (an unlisted file is a verification failure, exactly as a digest mismatch is) and MUST NOT surface it to the model as a file of the skill. To reach it, the host refreshes the entry with [`skills/get`](#retrieval-via-skillsget), at which point the `resources` set has changed and any persisted content-bound approval is revoked and must be obtained again ([Security Implications](#security-implications)). Only under the refreshed entry is the new file readable. Hosts SHOULD expect this sequence and present it as a skill that has changed and needs re-approval, rather than as a read error. Conversely, a child present in the manifest but absent from a directory read is a file the server no longer serves; a read of it will fail, and the same refresh applies.
+
+This extension defines no shared version or cache token that would let a host determine whether a directory result and an entry describe the same snapshot of the server. The manifest is authoritative for what the host may read under its current approval; a directory read is a live observation that may run ahead of or behind it. Hosts MUST NOT treat the directory result as extending the manifest.
+
+For a dynamically generated skill, whose `resources` is `"dynamic"`, none of this changes the skill's standing: it offers no content integrity and cannot be content-bound, and a host MAY decline to load it ([Resources](#resources)). A directory read is how such a skill's files are discovered at all, but it does not supply the integrity the entry lacks.
+
+## Implementation Guidelines
+
+The following are recommendations for interoperable implementations. They are not part of the normative specification.
+
+### Hosts: End-to-End Integration
+
+This section sketches one way a host might wire MCP-served skills into an existing skills implementation. It is illustrative, not prescriptive. Hosts are free to structure tools, naming, and routing however suits their architecture. The goal is that an MCP-served skill flows through the same loading and reading mechanics as a filesystem skill while remaining origin-tagged, per [Security Implications](#security-implications).
+
+**Registry.** At startup and on connection change, the host assembles a single internal skill registry from every origin it supports: filesystem skill directories, and `skills/list` results from each connected MCP server that declares the `io.modelcontextprotocol/skills` extension. Each registry entry records the skill's `name` and `description` (from the entry's `frontmatter`) and its origin: for a filesystem skill, the local directory, and for an MCP skill, the server identity and the `SKILL.md` resource URI. Assembling the registry reads only the listing: the host MUST NOT fetch `SKILL.md` or any supporting file at this stage ([Integrity and verification](#integrity-and-verification)). The entry's `frontmatter` carries everything the registry needs. The registry is keyed by skill identity, origin and `SKILL.md` URI together ([Skill URIs](#skill-uris)), never by name. Because names collide within and across origins ([Names](#names)), the registry qualifies colliding names for display rather than dropping either entry; since the name is not the key, a collision never changes how a skill is loaded.
+
+**Context.** The host surfaces the `name` and `description` of each enabled registry entry in the model's context, the same list the model already sees for filesystem skills, now with MCP-served entries mixed in, together with the entry's identity: the host's label for the originating server and the `SKILL.md` URI. The name and description tell the model what a skill is for; the identity is what the model passes to load it. The host's UI presents the same merged list for user inspection and per-skill enable/disable, with provenance shown so users can see which server a skill came from.
+
+**Loading.** The host exposes a single skill-loading tool to the model, keyed by skill identity, the originating server and the `SKILL.md` URI:
+
+```json theme={null}
+{
+ "name": "read_skill",
+ "description": "Load a skill's SKILL.md into context.",
+ "inputSchema": {
+ "type": "object",
+ "properties": {
+ "server": {
+ "type": "string",
+ "description": "Name of the connected MCP server"
+ },
+ "uri": { "type": "string", "description": "The skill's SKILL.md URI" }
+ },
+ "required": ["server", "uri"]
+ }
+}
+```
+
+`read_skill` is the host's skill-loading path in this sketch, the only route by which a skill is activated ([Reading](#reading)); a `read_resource` call against the same `SKILL.md` URI returns its content but does not load the skill. When the model calls `read_skill`, the host looks up the pair in its registry and routes on origin: a filesystem skill is read from disk; an MCP skill is fetched via `resources/read` against the originating server, at that moment and not before, unless a verified copy is already in the host's cache. The mechanics are the same either way. Keying the tool by identity rather than by name is what lets a URI travel: a skill URI handed to the model by the user, by server instructions, or by another skill's `SKILL.md` is exactly what `read_skill` takes, with no need to map it back to a display name that the host may have qualified to resolve a collision ([Names](#names)). A host that already exposes a name-keyed loading tool for filesystem skills extends it to accept `server` and `uri` rather than introducing a parallel one; for a filesystem skill it may reserve a `server` value for the local origin and pass the `SKILL.md` path as `uri`.
+
+**Supporting files.** Once a `SKILL.md` is in context, the model may encounter relative references to supporting files (`references/GUIDE.md`, `scripts/extract.py`). For filesystem skills the model reads these with the host's ordinary file-read tool; for MCP skills there is no local file. The host therefore also exposes a general-purpose resource-reading tool:
+
+```json theme={null}
+{
+ "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" }
+ },
+ "required": ["server", "uri"]
+ }
+}
+```
+
+The host arranges for the model to know, when it loads an MCP-served `SKILL.md`, which server it came from and what its base URI is, for example by stating both in the `read_skill` tool result, so the model can resolve `references/GUIDE.md` to `skill:///references/GUIDE.md` and issue `read_resource` against the right server. A host may instead fold this into its file-read tool by mounting each server's `skill://` namespace into a virtual path, with one mount root per server so that the path encodes the server identity ([Skill URIs](#skill-uris)), and translating reads under that path into `resources/read` calls, in which case no separate `read_resource` tool is needed and the model treats every supporting file as a local path. A virtual mount resolves reads on access; it MUST NOT be populated by fetching the skill's files in advance. Either way the resolution rule is the same: relative references resolve against the skill's root directory, exactly as on a filesystem. When the skill's entry carries a `resources` array, the host verifies each such read against it, per [Integrity and verification](#integrity-and-verification).
+
+**Directory navigation.** Skill instructions may point the model at a directory rather than a file ("choose the right template from `templates/`"). When the originating server declares `directoryRead`, the host SHOULD surface this capability to the model: a `read_resource` call whose target is a directory resource can be routed to `resources/directory/read` and return the child listing, and the virtual-mount approach maps it onto the host's existing directory-listing tool: an `ls` of a mounted path becomes a `resources/directory/read` call.
+
+**Unenumerated skills.** Because a listing may be empty or partial, a host should also accept skill URIs it has never seen listed, handed to the model by the user, by server instructions, or by another skill. Calling `skills/get` on such a URI yields the same entry a listing would have carried, so an unlisted skill enters the registry, gets verified, and is approved on the same terms as a listed one; a server that does not serve the URI as a skill answers with an error. No special tool surface is needed: `read_skill` already takes a server and a URI, so a `read_skill` call naming a pair the registry has not seen is the trigger for `skills/get`.
+
+Both tool signatures above include `server` because two connected servers may both serve `skill://refunds/SKILL.md` ([Skill URIs](#skill-uris)). That is one disambiguation strategy; a host may instead rewrite URIs with a per-server prefix, scope by session, or anything else appropriate to its architecture. The tool is general-purpose, reads any MCP resource, and is useful beyond skills.
+
+### SDKs: Convenience Wrappers
+
+SDK maintainers SHOULD provide affordances that wrap the underlying resource operations in skill-specific terms. For example:
+
+**Server-side**: declare a skill from a directory, at a given path:
+
+```python theme={null}
+@server.skill("git-workflow") # → skill://git-workflow/SKILL.md
+def git_workflow():
+ return Path("./skills/git-workflow")
+
+@server.skill("acme/billing/refunds") # → skill://acme/billing/refunds/SKILL.md
+def refunds():
+ return Path("./skills/refunds")
+```
+
+The SDK handles: reading `SKILL.md` frontmatter to populate resource metadata, serving file content on `resources/read`, and answering `skills/get` (and, where the server's skill set is bounded, `skills/list`), computing entry digests and sizes from the registered files, and warning when a registered skill exceeds the [Limits](#limits).
+
+**Client-side**: enumerate and fetch skills:
+
+```python theme={null}
+skills = await client.list_skills() # calls skills/list, paginating; may be empty
+entry = await client.get_skill(
+ "skill://acme/billing/refunds/SKILL.md") # calls skills/get, listed or not
+content = await client.read_skill_uri(
+ "skill://acme/billing/refunds/SKILL.md") # wraps resources/read, works regardless of enumeration
+entries = await client.read_directory(
+ "skill://pdf-processing/templates") # wraps resources/directory/read
+```
+
+These wrappers are thin, each a single underlying protocol call with a fixed URI pattern, but they give server authors an ergonomic way to declare skills and give client authors a discoverable entry point.
+
+## Rationale
+
+The design rationale for this SEP (why skills map to Resources rather than a new primitive, the URI structure, listing semantics, `skills/get`, the choice of a method over an index resource, format delegation to agentskills.io, directory reads, verbatim frontmatter, and per-file digests) is maintained as a standalone document in the Working Group repository: [rationale.md](https://github.com/modelcontextprotocol/ext-skills/blob/main/docs/rationale.md).
+
+One point of that design bears restating here because it shapes how the two methods relate. A `skills/list` entry is intentionally a complete manifest of the skill, its verbatim `frontmatter` and its full `resources` set with digests, rather than a summary to be filled in by a follow-up call. A host that pages through the listing therefore has, in that one pass, everything it needs to build its registry, present the skill for approval, bind the approval to content, and verify every file it later reads; there is no second round-trip per skill, which matters most for exactly the hosts that connect to many servers or servers with many skills. `skills/get` exists for the cases the listing does not serve: refreshing a single skill's entry, typically after a digest mismatch, without re-enumerating the catalog, and obtaining an entry for a skill that a partial listing omitted. It is never a step a host must take to complete a listed entry.
+
+## Backward Compatibility
+
+This extension introduces three protocol methods. `skills/list` and `skills/get` are implemented by every server declaring the extension, so a client only issues those calls after seeing the declaration, and a client that predates the extension never issues them. `resources/directory/read` is additionally gated behind the `directoryRead` capability setting, so a server that does not declare it never receives the call. The extension introduces no other methods, message types, or schema changes. A server that does not implement this extension simply exposes no `skill://` resources; existing clients are unaffected. A client that does not implement this extension sees `skill://` resources as ordinary resources, which they are.
+
+Existing implementations using other `skill://` URI structures will need to adjust to conform. See the Working Group's [related-work survey](https://github.com/modelcontextprotocol/ext-skills/blob/main/docs/related-work.md) for a catalog. Notably, FastMCP's widely-used [SkillsProvider](https://gofastmcp.com/servers/providers/skills) diverges on URI structure, discovery (per-skill `_manifest` vs. central index), and metadata mapping; coordinating that migration is a near-term Working Group priority. These are mechanical changes, not semantic ones.
+
+## Security Implications
+
+Skill content is instructional text delivered to a model, which makes it a prompt-injection surface (background in [open-questions.md §10](https://github.com/modelcontextprotocol/ext-skills/blob/main/docs/open-questions.md#10-how-should-skills-handle-security-and-trust-boundaries)). This extension imposes the following requirements:
+
+* **Skill content is untrusted input.** Hosts MUST treat MCP-served skill content as untrusted model input, subject to the same prompt-injection defenses applied to any server-provided text. A server being connected does not make its skill content authoritative.
+* **Origin MUST be visible to the model.** Hosts MUST tag MCP-served skill content with its originating server identity at the point it enters model context and MUST NOT present an MCP-served skill to the model as indistinguishable from a local filesystem skill. The model, not the host, decides whether to follow a skill's instructions. Withholding origin from it makes the untrusted-input requirement above unenforceable at the layer that acts on it.
+* **Skills introduce host-side surfaces that tools do not.** Unlike a remote tool call, an MCP-served skill can place server-authored bytes on the host filesystem and direct the model to execute them with host-side tools. Hosts MUST treat MCP-served skills as a higher-risk surface than remote tool invocation.
+* **No implicit local execution.** Hosts MUST NOT allow MCP-served skill content to cause host-side code execution without explicit per-skill user approval. This covers (a) declarative fields the host parses (hooks, frontmatter scripts) and (b) instructions in the skill body that direct the model to invoke any host code-execution tool, whether to run a script bundled in the skill or to run an arbitrary command the skill specifies. Hosts MUST ignore or approval-gate (a), and MUST apply the same approval gate to code-execution tool calls issued while the model is acting on an MCP-served skill.
+* **Origin-scoped resource reads.** A model-callable resource-read surface (such as the `read_resource` pattern in [Hosts: End-to-End Integration](#hosts-end-to-end-integration)) is a cross-server confused-deputy vector when driven by untrusted skill content. Hosts MUST bind such reads to the skill's originating server: a skill served by server A MUST NOT cause a `resources/read` against server B. Hosts MUST identify servers by a host-assigned label, not the server's self-reported `serverInfo.name`. Any cross-origin read MUST be gated behind explicit per-call user approval naming both servers.
+* **Name collisions are an impersonation surface.** Skill names are not unique across origins, and a malicious server can publish a skill under the name of a popular one, whether another server's or the user's own local skill, counting on the host resolving its way. Hosts MUST resolve skill names within a per-origin namespace, identifying servers by a host-assigned label, not the self-reported `serverInfo.name`; MUST NOT let an MCP-served skill silently shadow, replace, or intercept invocations of a same-named skill from any other origin, including the host's filesystem skills; and SHOULD surface collisions to the user. A name binds to whatever bytes its origin currently serves and carries no authorship or endorsement. Intermediaries MAY attach provenance or verification annotations via `_meta` under their own reverse-domain prefix, not the `io.modelcontextprotocol.skills/` prefix reserved for this extension ([Resource Metadata](#resource-metadata)); this extension assigns such annotations no semantics.
+* **No implicit permission grants.** Hosts MUST NOT honor frontmatter fields that widen the model's tool or filesystem permissions when the skill arrives over MCP. In particular, the Agent Skills `allowed-tools` field, which a filesystem-sourced skill uses to declare the tools available while it runs, MUST be ignored for MCP-origin skills unless the user has explicitly approved that grant for that skill. A remote server populating `allowed-tools` is requesting elevated access on the host, not declaring a property of its own environment. Approval of a skill never extends to the frontmatter of any other `SKILL.md` within its file space: a nested skill's `allowed-tools` has no effect unless that nested skill is itself activated under its own approval ([Nested skills](#nested-skills)).
+* **Skills are data, not directives.** Hosts MUST NOT treat skill resources as higher-authority than other context. Explicit user policy governs whether a skill is loaded at all.
+* **Nested skill consent.** Approval is per skill: approving a skill does not approve skills nested within it. Activating a nested `SKILL.md` requires fresh, explicit user consent, per [Nested skills](#nested-skills). Silently promoting a file of an approved skill to an active skill would let a server ride new instructions and permission requests in on a prior approval.
+* **Provenance and inspection.** Hosts SHOULD indicate which server a skill originates from when presenting it, SHOULD let users inspect a skill's content before it is loaded into model context, and MAY gate loading behind per-skill or per-server user approval.
+* **Digests are not a security boundary.** Listing digests are unsigned and come from the same server as the content. They confirm consistency between the listing and what was fetched, as described in [Integrity and verification](#integrity-and-verification), but they cannot establish trust in the content, defend against the server itself, or detect an intermediary that rewrites both together.
+* **Content-bound approval.** When a host persists any per-skill user approval, it MUST be bound to the entry's `resources` set (every `uri` and `digest`) observed at the moment of approval. If a subsequent entry for that skill, from `skills/list` or `skills/get`, advertises a different set, whether a file was rotated, added, or removed, the host MUST treat the prior approval as revoked and re-prompt before loading or executing. A host need not poll for changes. While it is acting on the skill ([Integrity and verification](#integrity-and-verification)), content that has moved fails verification when read; and if it does fetch a fresh entry, the rule above revokes the approval. Neither path lets moved content through under the old approval. A skill whose `resources` is `"dynamic"` cannot be content-bound: hosts MAY decline to load it, and MUST NOT treat a persisted approval as covering whatever content the server currently serves. Digest verification ([Integrity and verification](#integrity-and-verification)) defends the approval after it is granted. It cannot establish that the content was trustworthy when the user approved it, because the server authors both the listing and the body.
+* **Caching, cache integrity, cache isolation, and durable origin.** Hosts SHOULD cache verified skill content locally, populated on demand as files are read rather than in bulk ([Integrity and verification](#integrity-and-verification)). A cache is a second copy of content that was verified once; the verification does not carry over to bytes that may have changed since. Hosts that cache skill content on disk MUST therefore do one of the following for every file served from the cache: keep the cache where nothing but the host can write to it (not the model, not scripts or tools the model runs, not other users of the machine) and never modify a cached file in place; or recompute the file's SHA-256 digest from the cached bytes on each access and compare it against the entry's digest, treating a mismatch exactly as a mismatch on a fresh read. Comparing a stored digest label, or a modification time, is not verification. Hosts that cache MCP-served skill content on disk MUST also do so in a location excluded from every filesystem-skill discovery path, and MUST treat content loaded from that location as having arrived over MCP for all purposes of the no-implicit-local-execution rule above, including after host restart and after the originating server is disconnected. Cached bytes do not graduate to filesystem-skill trust by residing locally. Hosts SHOULD remove a server's cached skill content when the user removes that server.
+
+## Reference Implementation
+
+Per [SEP-2133], an Extensions Track SEP requires at least one reference implementation in an official SDK prior to review.
+
+**SDK implementations:**
+
+* Python SDK: [python-sdk#3485](https://github.com/modelcontextprotocol/python-sdk/pull/3485)
+* C# SDK: [csharp-sdk#1856](https://github.com/modelcontextprotocol/csharp-sdk/pull/1856)
+* Go SDK: [go-sdk#1238](https://github.com/modelcontextprotocol/go-sdk/pull/1238)
+
+**Conformance tests:**
+
+* Client and server scenarios with the SEP traceability file (`sep-2640.yaml`): [conformance#330](https://github.com/modelcontextprotocol/conformance/pull/330)
+
+**Prototype host implementations** (reading `skill://` resources, surfacing skills alongside filesystem skills):
+
+* gemini-cli: [olaservo/gemini-cli#1](https://github.com/olaservo/gemini-cli/pull/1)
+* fast-agent: [evalstate/fast-agent#815](https://github.com/evalstate/fast-agent/pull/815)
+* codex: [olaservo/codex#1](https://github.com/olaservo/codex/pull/1)
+* Claude Code: prototyped internally at Anthropic; not yet public
+
+**Prototype server implementation:**
+
+* GitHub MCP Server: [github/github-mcp-server#3046](https://github.com/github/github-mcp-server/pull/3046)
+
+## Appendix: Deferred Features
+
+Features recorded here appeared in earlier revisions of this SEP and were removed before review concluded. They are not part of this extension. Each is kept on record with the objections that removed it, so that any future proposal to reintroduce one starts from those objections rather than rediscovering them.
+
+### Archive Distribution
+
+An earlier revision let a skill entry advertise pre-packed archives of the entire skill directory (gzip-compressed tar and ZIP) as an alternative retrieval form alongside the skill's `uri`. A host could fetch a multi-file skill in a single `resources/read` rather than one per file, and an archive could carry UNIX file metadata (executable bits, symlinks) that individually served resources cannot represent.
+
+The Core Maintainers removed archives during review, for two reasons:
+
+* **Unpacking is an attack surface disproportionate to the benefit.** Safely extracting an archive supplied by a remote server means defending against decompression bombs, path traversal, links resolving outside the skill directory, case- and Unicode-normalization collisions that silently overwrite `SKILL.md`, setuid and setgid bits, and non-regular file entries such as device nodes. Every host would have to implement that checklist correctly, and a host that got any item wrong would be exploitable by any server it connects to. Serving a skill as individually addressable resources has no comparable surface.
+* **Two ways to serve one skill is a compatibility hazard.** Archives were a second encoding of content the protocol could already express. Hosts would have to support both forms to be certain of reading any skill, and a skill offered only as an archive would be unreadable to a host that implemented individual-file reads alone. A single retrieval form keeps the compatibility floor flat: any conforming host can read any conforming skill.
+
+The cost of removal is the one archives were introduced to address: a skill with many supporting files takes one round trip per file, and executable bits and symlinks have no representation. Because hosts retrieve files only as they are needed ([Integrity and verification](#integrity-and-verification)), that cost scales with the files a session actually uses rather than with the size of the skill. Should archives be reconsidered, the questions to settle first are how to bound host-side unpacking risk, perhaps by restricting the format to a profile admitting no symlinks, no non-regular entries, and a declared uncompressed size; and how to keep an archive strictly an optimization, never the sole way to retrieve a skill, so that the compatibility floor stays flat. An archive form would now also be required to unpack to exactly the file set enumerated in the entry's `resources` ([Resources](#resources)).
+
+## References
+
+* [Agent Skills specification](https://agentskills.io/specification)
+* [SEP-2133]: Extensions
+* [SEP-2549]: TTL for list results
+* [SEP-2076]: Agent Skills as first-class primitive (alternative approach)
+* [Skills Over MCP Working Group charter](https://modelcontextprotocol.io/community/skills-over-mcp/charter)
+* [Decision Log](https://github.com/modelcontextprotocol/ext-skills/blob/main/docs/decisions.md): Working Group decisions and rationale
+* [Experimental Findings](https://github.com/modelcontextprotocol/ext-skills/blob/main/docs/experimental-findings.md): results from implementations (WIP)
+* [Related Work](https://github.com/modelcontextprotocol/ext-skills/blob/main/docs/related-work.md): survey of existing skill-serving implementations
+* [Skill `_meta` Keys](https://github.com/modelcontextprotocol/ext-skills/blob/main/docs/skill-meta-keys.md): `_meta` key conventions for skill resources
+* [RFC 3986: URIs](https://datatracker.ietf.org/doc/html/rfc3986)
+
+[SEP-2076]: https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2076
+
+[SEP-2133]: https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2133
+
+[SEP-2549]: https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2549
diff --git a/content/support/10310342-how-do-i-log-out-of-all-active-sessions.md b/content/support/10310342-how-do-i-log-out-of-all-active-sessions.md
index 6899ea7ca2..70aed4a649 100644
--- a/content/support/10310342-how-do-i-log-out-of-all-active-sessions.md
+++ b/content/support/10310342-how-do-i-log-out-of-all-active-sessions.md
@@ -38,7 +38,7 @@ To regain access to your account on any device, you'll need to authenticate agai
If you used your Claude account to authenticate into Claude Code, you can manage your authorization tokens by navigating to **[Settings > Claude Code](https://claude.ai/settings/claude-code)**. To remove a token and log out of Claude Code, click the trash can icon.
-
+
## Unable to access your account?
diff --git a/content/support/10366376-how-can-i-delete-my-claude-console-account.md b/content/support/10366376-how-can-i-delete-my-claude-console-account.md
index c59056f35f..de0ecca718 100644
--- a/content/support/10366376-how-can-i-delete-my-claude-console-account.md
+++ b/content/support/10366376-how-can-i-delete-my-claude-console-account.md
@@ -36,7 +36,7 @@ If you followed the steps above to delete your Console organization but want to
If you have an outstanding balance, you will see a message during the deletion flow that prompts you to pay the balance first by routing you to [Settings > Billing](https://platform.claude.com/settings/billing).
-
+
You must pay this outstanding balance before you’re able to move forward with the deletion process.
@@ -44,6 +44,6 @@ You must pay this outstanding balance before you’re able to move forward with
There are some scenarios where you will need to contact our team to delete your account. If this is the case, it will be noted when you try to delete your organization:
-
+
If you are seeing this message, this indicates that your Console organization cannot be deleted via the self-service pathway.
\ No newline at end of file
diff --git a/content/support/10504844-manage-user-feedback-settings-on-team-and-enterprise-plans.md b/content/support/10504844-manage-user-feedback-settings-on-team-and-enterprise-plans.md
index 596a76de00..b6d0ee2d47 100644
--- a/content/support/10504844-manage-user-feedback-settings-on-team-and-enterprise-plans.md
+++ b/content/support/10504844-manage-user-feedback-settings-on-team-and-enterprise-plans.md
@@ -6,6 +6,6 @@ As a Primary Owner or Owner of a Team or Enterprise plan, you can manage the abi
2. Use the toggle to change the **Rate chats** setting for your organization:
-
+
More information on how Anthropic collects, uses, and stores feedback data can be found in our Privacy Center: **[How long do you store my organization’s data?](https://privacy.claude.com/en/articles/7996866-how-long-do-you-store-my-organization-s-data)**
\ No newline at end of file
diff --git a/content/support/10504853-manage-user-feedback-settings-on-claude-console.md b/content/support/10504853-manage-user-feedback-settings-on-claude-console.md
index 3c5d6106b7..16fe765c56 100644
--- a/content/support/10504853-manage-user-feedback-settings-on-claude-console.md
+++ b/content/support/10504853-manage-user-feedback-settings-on-claude-console.md
@@ -8,6 +8,6 @@ To manage feedback for your Console organization:
2. Toggle the feedback switch on or off.
-
+
More information on how Anthropic collects, uses, and stores feedback data can be found in our Privacy Center: [How long do you store my organization’s data?](https://privacy.claude.com/en/articles/7996866-how-long-do-you-store-my-organization-s-data)
\ No newline at end of file
diff --git a/content/support/10593882-share-and-unshare-chats.md b/content/support/10593882-share-and-unshare-chats.md
index d9e08593d8..be86c1124a 100644
--- a/content/support/10593882-share-and-unshare-chats.md
+++ b/content/support/10593882-share-and-unshare-chats.md
@@ -38,12 +38,12 @@ To unshare a chat:
Users on free, Pro, or Max plans can review a log of shared chats by navigating to **[Settings > Privacy](https://claude.ai/settings/data-privacy-controls)**. Find the **Privacy settings** section and click “Manage” next to **Shared chats:**
-
+
This will open a **Shared chats** modal listing the title, date shared, and link to each chat, allowing you to easily review and access all your previously-shared content. From here, you also have the option to click “Unshare” next to each listed chat to revoke access to the last snapshot you shared:
-
+
If you don’t have any shared chat snapshots, the **Shared chats** modal will show “No shared content found”:
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/content/support/10949351-getting-started-with-local-mcp-servers-on-claude-desktop.md b/content/support/10949351-getting-started-with-local-mcp-servers-on-claude-desktop.md
index e8c501b838..722790faae 100644
--- a/content/support/10949351-getting-started-with-local-mcp-servers-on-claude-desktop.md
+++ b/content/support/10949351-getting-started-with-local-mcp-servers-on-claude-desktop.md
@@ -48,7 +48,7 @@ for specific instructions.
Custom desktop extensions uploads allow Team and Enterprise plans to leverage organization-specific workflows that aren’t available in the public directory. After creating a custom desktop extension, Owners and Primary Owners can navigate to Settings > Extensions within Claude Desktop and click “Advanced settings” to access the **Extension Developer** section:
-
+
Click “Install Extension…” and select the .mcpb file. Follow the prompts to install and configure your custom desktop extension. For more in-depth information, please refer to our [desktop extension developer documentation](https://github.com/anthropics/mcpb).
diff --git a/content/support/11101966-use-voice-mode.md b/content/support/11101966-use-voice-mode.md
index 6f1cfaf3e8..1870f302d0 100644
--- a/content/support/11101966-use-voice-mode.md
+++ b/content/support/11101966-use-voice-mode.md
@@ -24,7 +24,7 @@ Voice mode transforms how you interact with Claude by:
2. Tap the sound wave symbol in the lower right corner of the chat window to activate voice mode:
-
+
3. Start talking and see your prompt automatically populate in the chat input.
@@ -32,7 +32,7 @@ Voice mode transforms how you interact with Claude by:
5. Claude will remain in voice mode until you click the “Stop” button in the lower right corner of the chat window:
-
+
### On mobile (iOS and Android)
@@ -40,7 +40,7 @@ Voice mode transforms how you interact with Claude by:
2. Tap the voice mode icon (sound wave symbol next to the microphone icon) in the text input field:
-
+
3. Choose a voice to personalize your experience.
@@ -78,7 +78,7 @@ To change the voice later:
- **On mobile:** Click the settings button in the bottom left corner while chatting with Claude in voice mode, then tap your preferred voice and pace:
-
+
## Choose a model
diff --git a/content/support/11725453-set-up-the-claude-lti-in-canvas-by-instructure.md b/content/support/11725453-set-up-the-claude-lti-in-canvas-by-instructure.md
index 7b38947863..224c36c1b9 100644
--- a/content/support/11725453-set-up-the-claude-lti-in-canvas-by-instructure.md
+++ b/content/support/11725453-set-up-the-claude-lti-in-canvas-by-instructure.md
@@ -44,7 +44,7 @@ This article provides information on how to enable the Claude LTI integration in
5. Click "Install" and refresh the course page.
-
+
## Turn on the Claude LTI Integration in Claude for Education organization settings
diff --git a/content/support/11817273-use-claude-s-chat-search-and-memory-to-build-on-previous-context.md b/content/support/11817273-use-claude-s-chat-search-and-memory-to-build-on-previous-context.md
index 0cb1b07c84..708b538887 100644
--- a/content/support/11817273-use-claude-s-chat-search-and-memory-to-build-on-previous-context.md
+++ b/content/support/11817273-use-claude-s-chat-search-and-memory-to-build-on-previous-context.md
@@ -40,7 +40,7 @@ When Claude searches your previous chats, you will see this reflected in your cu
Yes, navigate to **[Settings > Memory](https://claude.ai/new#settings/customize-memory)** and switch the toggle next to "Search and reference chats" off:
-
+
## Can I exclude a specific past chat from searches?
@@ -84,7 +84,7 @@ What Claude remembers from your chats is available when you hand it a task in Co
You can toggle Claude’s memory on by navigating to **[Settings > Memory](https://claude.ai/new#settings/customize-memory)** and turning on **Generate memory from chats**:
-
+
If you want to disable Claude’s memory, click the toggle and you'll see two options:
@@ -240,7 +240,7 @@ When Claude searches your previous chats, you will see this reflected in your cu
Yes, navigate to **[Settings > Capabilities](https://claude.ai/settings/capabilities)** and find the **Preferences** section. Switch the toggle next to “Search and reference chats” off:
-
+
### Can I exclude a specific past chat from searches?
@@ -248,7 +248,7 @@ Incognito chats are available to all Claude users (free, Pro, Max, Team, and Ent
When starting a new chat with Claude outside of a project, you'll see a ghost icon in the upper right corner of your screen:
-
+
Clicking the ghost icon will open an incognito chat, creating a temporary conversation that isn’t saved to your chat history. Claude won’t pull information from incognito chats when searching previous conversations.
@@ -280,7 +280,7 @@ Each project has its own separate memory space and dedicated project summary, so
You can toggle Claude’s memory on by navigating to **[Settings > Capabilities](https://claude.ai/settings/capabilities)**:
-
+
If you want to disable Claude’s memory, click the toggle to see two options:
diff --git a/content/support/11818288-why-am-i-being-asked-to-verify-my-payment-method.md b/content/support/11818288-why-am-i-being-asked-to-verify-my-payment-method.md
index 8183bf72a1..8c7d460531 100644
--- a/content/support/11818288-why-am-i-being-asked-to-verify-my-payment-method.md
+++ b/content/support/11818288-why-am-i-being-asked-to-verify-my-payment-method.md
@@ -2,7 +2,7 @@
If you see the following pop-up when you log in to your Claude account, you’ll need to click the “Verify now” button to verify your payment method:
-
+
## What happens if I click “Remind me later?”
diff --git a/content/support/11869629-use-claude-with-android-apps.md b/content/support/11869629-use-claude-with-android-apps.md
index 9bdb530169..ee14e6fadd 100644
--- a/content/support/11869629-use-claude-with-android-apps.md
+++ b/content/support/11869629-use-claude-with-android-apps.md
@@ -222,7 +222,7 @@ Permission requirements vary by feature:
For features requiring permissions (like location or calendar access), Claude will request permission contextually with clear explanations of why the access is needed. You’ll be prompted to approve the action with three options: Allow once, Always allow, or Don't allow.
-
+
These permissions can be managed at any time in your device settings by going to Settings > Apps > Claude > Permissions. Click into each permission listed under **Allowed** and **Not allowed** to make changes. You can toggle between “Allow only while using the app” or “Ask every time” to change Claude’s access, or remove permissions by choosing “Don’t allow.” Claude will only request permissions if needed for specific features, and you can always choose to decline while still using other capabilities.
diff --git a/content/support/12005970-manage-usage-credits-for-team-and-seat-based-enterprise-plans.md b/content/support/12005970-manage-usage-credits-for-team-and-seat-based-enterprise-plans.md
index e2c849e4a0..8804342fc2 100644
--- a/content/support/12005970-manage-usage-credits-for-team-and-seat-based-enterprise-plans.md
+++ b/content/support/12005970-manage-usage-credits-for-team-and-seat-based-enterprise-plans.md
@@ -70,7 +70,7 @@ After navigating to **[Organization settings > Usage](https://claude.ai/admin-se
The **Usage and spend limits** section will show the current limit (if any) or **Unlimited**. Clicking on "Adjust limit" opens a modal where you can either input an amount and click "Set spend limit," or click "Set to unlimited" to remove the organization-wide monthly spend limit.
-
+
Changes to your organization’s overall spend limit go into effect immediately.
@@ -78,11 +78,11 @@ Changes to your organization’s overall spend limit go into effect immediately.
Owners and Primary Owners on **seat-based Enterprise plans only** can set spend limits that apply to all users within a specific seat tier.
-
+
Select the "By group" tab to see **Standard seats** and **Premium seats** groups. Click the "..." icon next to the current limit, then "Edit limit." This opens a modal where you can either select "Set dollar amount" and input an amount, or click "Unlimited" to remove the limit for that seat type. Click "Set limit" to save your changes.
-
+
---
@@ -90,11 +90,11 @@ Select the "By group" tab to see **Standard seats** and **Premium seats** groups
Owners and Primary Owners can also set individual monthly spend limits for each member by finding **Spend limits by user** and clicking the "..." button next to the user, then "Edit limit."
-
+
Enter the amount and click "Set limit." Alternatively, selecting "Set to unlimited" will remove that member's monthly spend limit (they will still be subject to any organization or seat-level spend limits).
-
+
This allows owners fine control over usage credits, so you can set limits for different members based on their roles or individual needs. Once a user reaches their defined spend limit, this will automatically pause their usage credits until the end of the month. They will need to wait for their usage limits to reset before using Claude again.
diff --git a/content/support/12012173-get-started-with-claude-in-chrome.md b/content/support/12012173-get-started-with-claude-in-chrome.md
index b62b88f3de..8cdba2dc6f 100644
--- a/content/support/12012173-get-started-with-claude-in-chrome.md
+++ b/content/support/12012173-get-started-with-claude-in-chrome.md
@@ -38,7 +38,7 @@ Follow these steps to connect Claude in Chrome in your desktop app:
4. Toggle the connector on, then download and install the extension if you haven’t already.
-
+
Completing these steps will add Claude in Chrome to the “Connectors” drop-down on your chats with Claude. This is disabled by default, so you’ll need to enable it manually for each conversation.
diff --git a/content/support/12111783-create-and-edit-files-with-claude.md b/content/support/12111783-create-and-edit-files-with-claude.md
index 19c05951e3..a32eef5ac7 100644
--- a/content/support/12111783-create-and-edit-files-with-claude.md
+++ b/content/support/12111783-create-and-edit-files-with-claude.md
@@ -48,7 +48,7 @@ These capabilities make it easy to produce professional documents by simply chat
To give Claude access to external data sources, toggle **Allow network egress** on:
-
+
### Enabling on Claude Mobile
@@ -66,11 +66,11 @@ Team and Enterprise organization owners can control network access settings in *
- **Allow network egress to package managers and specific domains:** Claude can access package managers plus additional domains you specify. Add domains individually to whitelist specific resources your organization needs:
-
+
**All domains:** Claude has full internet access except for domains on Anthropic's legal blocklist. While this provides maximum flexibility for file creation and analysis tasks, it’s also the riskiest option. Please review the **[security considerations below](#h_0ee9d698a1)** before enabling “All domains”:
-
+
---
diff --git a/content/support/12157520-claude-code-usage-analytics.md b/content/support/12157520-claude-code-usage-analytics.md
index c252e2c9d5..9606ead3ac 100644
--- a/content/support/12157520-claude-code-usage-analytics.md
+++ b/content/support/12157520-claude-code-usage-analytics.md
@@ -50,7 +50,7 @@ The **Usage** tab displays the following metrics for your organization. Data on
- **Top commands**: The Claude Code commands used most often across your organization.
-
+
### User-level metrics
diff --git a/content/support/12260368-use-incognito-chats.md b/content/support/12260368-use-incognito-chats.md
index 04327dc144..8eb936553e 100644
--- a/content/support/12260368-use-incognito-chats.md
+++ b/content/support/12260368-use-incognito-chats.md
@@ -30,7 +30,7 @@ Incognito chats are temporary conversations that aren't saved to your chat histo
When starting a new chat with Claude outside of a project, you'll see a ghost icon in the upper right corner of your screen:
-
+
1. Click the ghost icon to enable incognito mode.
diff --git a/content/support/12293051-use-claude-in-xcode.md b/content/support/12293051-use-claude-in-xcode.md
index a6f3c24213..0711b2ec35 100644
--- a/content/support/12293051-use-claude-in-xcode.md
+++ b/content/support/12293051-use-claude-in-xcode.md
@@ -34,7 +34,7 @@ To start using Claude in Xcode:
3. Log in with your Claude account.
-
+
## Usage limits
diff --git a/content/support/12429409-manage-usage-credits-for-paid-claude-plans.md b/content/support/12429409-manage-usage-credits-for-paid-claude-plans.md
index d866c1ed7a..7ec4157cd0 100644
--- a/content/support/12429409-manage-usage-credits-for-paid-claude-plans.md
+++ b/content/support/12429409-manage-usage-credits-for-paid-claude-plans.md
@@ -46,7 +46,7 @@ To enable usage credits on your paid Claude plan:
8. You can also enable auto-reload to automatically make a purchase when your balance falls below a threshold you set:
-
+
**Note:** There is a daily redemption limit of $2000.
diff --git a/content/support/12466728-troubleshoot-claude-error-messages.md b/content/support/12466728-troubleshoot-claude-error-messages.md
index c58bb0f799..88366e3846 100644
--- a/content/support/12466728-troubleshoot-claude-error-messages.md
+++ b/content/support/12466728-troubleshoot-claude-error-messages.md
@@ -58,4 +58,4 @@ Capacity issues will not appear on our status page because they represent normal
Service incidents are disruptions where Claude is unavailable or significantly degraded for all or most users. These represent actual technical problems with our systems. To check for confirmed incidents, visit status.claude.com, where you'll find real-time updates on scope, impact, and resolution progress for any active incidents.
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/content/support/12512180-use-skills-in-claude.md b/content/support/12512180-use-skills-in-claude.md
index 4306394d19..eb4f069c97 100644
--- a/content/support/12512180-use-skills-in-claude.md
+++ b/content/support/12512180-use-skills-in-claude.md
@@ -166,7 +166,7 @@ To remove a custom skill you've uploaded:
4. To delete the custom skill entirely, click the "..." button next to the toggle, then select "Delete":
- 
+ 
5. Click "Delete" in the confirmation prompt.
diff --git a/content/support/12592343-enabling-and-using-the-desktop-extension-allowlist.md b/content/support/12592343-enabling-and-using-the-desktop-extension-allowlist.md
index 79ae40141e..c9e1fd1cfc 100644
--- a/content/support/12592343-enabling-and-using-the-desktop-extension-allowlist.md
+++ b/content/support/12592343-enabling-and-using-the-desktop-extension-allowlist.md
@@ -20,11 +20,11 @@ The desktop extension allowlist is disabled by default, so an organization Owner
4. Switch to the "Desktop" tab:
-
+
5. Toggle **Allowlist** on:
-
+
## What happens after enabling the allowlist?
@@ -42,7 +42,7 @@ Consider completing the allowlist setup during off-hours to minimize disruption
**Important:** The allowlist requires Claude Desktop version 0.13.91 or higher, so users should update the desktop app by clicking “Claude”, then either “Check for updates” or “Restart to update to Claude 0.13.91”:
-
+
## Managing allowed extensions
@@ -60,7 +60,7 @@ After enabling the allowlist, you can choose which extensions to allow:
If you want to remove an extension from the allowlist, click the “...” button and “Remove from allowlist.”
-
+
## Uploading custom extensions
diff --git a/content/support/12618689-claude-code-on-the-web.md b/content/support/12618689-claude-code-on-the-web.md
index 2b8649ee03..3ed7825bb5 100644
--- a/content/support/12618689-claude-code-on-the-web.md
+++ b/content/support/12618689-claude-code-on-the-web.md
@@ -10,7 +10,7 @@ This feature works with repositories you may not have on your local machine. You
Claude Code for web enables asynchronous development workflows. With Claude Code in your terminal or editor, you typically work synchronously: you make a request, wait for Claude to respond, review the changes, then make another request. Synchronous work like this gives you fine-grained control but requires your attention throughout the process. Claude Code on the web handles this differently: you can assign a larger task, let Claude work independently, and return later to review the completed work.
-
+
You can also run multiple tasks in parallel. Since each task runs in its own isolated environment, you can have Claude working on several different issues or repositories simultaneously. Each task proceeds independently and creates its own pull request when complete. More than one task can work on the same repository at the same time.
@@ -18,13 +18,13 @@ You can also run multiple tasks in parallel. Since each task runs in its own iso
When you start a task, Claude Code on the web creates an isolated virtual machine for your work. Your GitHub repository is cloned into this environment, which comes pre-configured with common development tools and language ecosystems.
-
+
Claude prepares the environment by running any setup commands you've defined in your repository's configuration. This includes installing dependencies, setting up databases, or running other initialization steps your project needs. If your task requires network access, maybe to install packages or fetch data, you can configure the level of internet access the environment has.
Once the environment is ready, Claude begins working on your task. Claude reads your code, makes changes, writes tests, and runs commands to verify the work. You can monitor progress and provide guidance through the web interface if needed.
-
+
When Claude completes the task, it pushes the changes to a new branch in your GitHub repository. You receive a notification and can review the changes, then create a pull request directly from the interface. The pull request includes all of Claude's work, ready for your review and any additional changes you want to make.
diff --git a/content/support/12626668-use-quick-entry-with-claude-desktop-on-mac.md b/content/support/12626668-use-quick-entry-with-claude-desktop-on-mac.md
index 7012bf19a4..721fc51236 100644
--- a/content/support/12626668-use-quick-entry-with-claude-desktop-on-mac.md
+++ b/content/support/12626668-use-quick-entry-with-claude-desktop-on-mac.md
@@ -40,7 +40,7 @@ When you first open the updated version of Claude Desktop, you'll see a prompt t
Once enabled, double-tapping Option will open a text box where you can type your message and start a new chat. You can also click "New chat" to see your five most recent conversations.
-
+
### Enable the voice shortcut (optional)
diff --git a/content/support/12883420-view-usage-analytics-for-team-and-enterprise-plans.md b/content/support/12883420-view-usage-analytics-for-team-and-enterprise-plans.md
index 139e5e3a0b..af8e33ab99 100644
--- a/content/support/12883420-view-usage-analytics-for-team-and-enterprise-plans.md
+++ b/content/support/12883420-view-usage-analytics-for-team-and-enterprise-plans.md
@@ -22,7 +22,7 @@ This page includes the following analytics:
- Sessions in Cowork
-
+
### Who’s using Claude?
@@ -34,7 +34,7 @@ This page includes the following analytics:
Use the dropdown on the **Active members and assigned seats** chart to filter by product, including Claude Design.
-
+
### How are they using Claude?
@@ -48,9 +48,9 @@ Use the dropdown on the **Active members and assigned seats** chart to filter by
- How agentic is their work? (beta)
-
+
-
+
### What are the results?
@@ -66,7 +66,7 @@ Use the dropdown on the **Active members and assigned seats** chart to filter by
- Estimated time saved
-
+
### How much is Claude costing?
@@ -82,9 +82,9 @@ This section includes the following analytics:
- Spend by model (month-to-date, quarter-to-date, year-to-date, 1 year)
-
+
-
+
## Export a spend report
@@ -160,7 +160,7 @@ Navigate to **[Analytics > Claude Chat](https://claude.ai/analytics/usage)** to
- Top members by chats
-
+
### Projects
@@ -172,7 +172,7 @@ Navigate to **[Analytics > Claude Chat](https://claude.ai/analytics/usage)** to
- Top members by project usage
-
+
### Artifacts
@@ -182,7 +182,7 @@ Navigate to **[Analytics > Claude Chat](https://claude.ai/analytics/usage)** to
- Top 10 users by artifacts generated (month-to-date, quarter-to-date, year-to-date, 1 year)
-
+
---
@@ -278,7 +278,7 @@ Navigate to **[Analytics > Cowork](https://claude.ai/analytics/cowork)** to view
- Daily, weekly, and monthly active Cowork users
-
+
**Note:** Cowork analytics are available alongside Chat and Claude Code data in the **[Analytics API](https://platform.claude.com/docs/en/manage-claude/analytics-api)**.
@@ -294,7 +294,7 @@ Navigate to **[Analytics > Surveys](https://claude.ai/analytics/surveys)** to as
On Enterprise plans with usage-based billing, when your admin turns on individual usage analytics, any member of the organization can see their own usage broken down by product, model, and skill, along with where they stand against any spend limits set for them. Individual usage analytics are available in **[Settings > Usage](https://claude.ai/settings/usage)**.
-
+
---
diff --git a/content/support/12902446-claude-in-chrome-permissions-guide.md b/content/support/12902446-claude-in-chrome-permissions-guide.md
index 5c255e49c6..1e6e82f9a0 100644
--- a/content/support/12902446-claude-in-chrome-permissions-guide.md
+++ b/content/support/12902446-claude-in-chrome-permissions-guide.md
@@ -28,7 +28,7 @@ In "Manually approve," Claude checks with you before it acts. What that looks li
Claude creates a plan from your prompt, which you can approve before Claude starts. The plan specifies which websites you're allowing Claude to access, as well as the approach it will follow:
-
+
Note that Claude will only use the websites listed in the plan, so you’ll need to manually approve any additional access requests.
@@ -62,7 +62,7 @@ When you choose "Skip all approvals," Claude doesn't pause to ask, and nothing c
There are some websites on which Claude requires approval for every action. If you navigate to one of these sites, a **New permissions required** prompt will appear in the extension side panel, Claude Cowork, or Claude Code where Claude will ask for permission before accessing the page or taking any action.
-
+
### Permission options
diff --git a/content/support/12997503-team-plan-billing-faqs.md b/content/support/12997503-team-plan-billing-faqs.md
index b71c50915c..27324290ec 100644
--- a/content/support/12997503-team-plan-billing-faqs.md
+++ b/content/support/12997503-team-plan-billing-faqs.md
@@ -18,7 +18,7 @@ Your organization's billing address determines where your invoices are sent. You
If you want to use a name other than the one tied to your payment method, an organization Owner should check the "Use a different name on invoices" box when adding or updating your payment method in **[Organization settings > Billing](https://claude.ai/admin-settings/billing)**:
-
+
## When will I be billed?
diff --git a/content/support/13132885-set-up-single-sign-on-sso.md b/content/support/13132885-set-up-single-sign-on-sso.md
index d51a95f42e..339ba31f72 100644
--- a/content/support/13132885-set-up-single-sign-on-sso.md
+++ b/content/support/13132885-set-up-single-sign-on-sso.md
@@ -42,7 +42,7 @@ You can verify multiple domains for a single organization, but all domains must
3. Enter the domain(s) you want to verify in the **Update organization email domains** modal and click the “+” button:
-
+
4. Click “Save” when you’re finished adding domains.
@@ -50,7 +50,7 @@ You can verify multiple domains for a single organization, but all domains must
6. Enter your domain in the text box and click “Continue”:
-
+
7. The setup screen displays a TXT record. **Copy the full Value using the copy button**—it begins with `anthropic-domain-verification-` and is longer than what's visible in the box. In your DNS provider, add a TXT record to your domain and **Value** set to the copied string. The domain must match exactly what you entered in the previous step, including any subdomains. Add it alongside any existing TXT records; don't replace them. The value is case-sensitive, so paste it exactly. Please refer to your DNS provider's documentation on this topic.
@@ -76,7 +76,7 @@ Clicking "Refresh" re-checks your DNS; it won't show Verified until the publishe
If the record is correct and propagated but the status still shows Pending, contact Support.
-
+
**Note:** Once your domain is verified, you'll see a **Restrict organization creation** toggle under **Security** on the Organization and access organization settings page. Enable this if you want to prevent users from creating new Claude or Console organizations—including personal accounts—using your verified domains.
@@ -116,7 +116,7 @@ For IdP-specific setup instructions, see:
You can now choose to toggle on **Require SSO for Console** and/or **Require SSO for Claude,** on the **Organization and access** page, under the **Authentication** section:
-
+
When SSO is required, users must use the “Continue with SSO” option to log in to their Claude/Console accounts. When SSO is not required, they will have the option to choose “Continue with SSO” or “Continue with email.”
diff --git a/content/support/13133195-set-up-jit-or-scim-provisioning.md b/content/support/13133195-set-up-jit-or-scim-provisioning.md
index faa6e3f558..e791ed9b1d 100644
--- a/content/support/13133195-set-up-jit-or-scim-provisioning.md
+++ b/content/support/13133195-set-up-jit-or-scim-provisioning.md
@@ -36,7 +36,7 @@ Use this table to help decide which provisioning mode is right for your organiza
Both JIT and SCIM can be combined with **Enable group mappings** to control role or seat tier assignment based on IdP group membership. If you select either of these options for your provisioning mode, **Enable group mappings** will appear within the **User provisioning** section:
-
+
**Important:** Group mappings set a user’s role type and seat tier only. Users with the Custom role get their permissions from groups in Claude, and those groups sync from your IdP only when your provisioning mode is SCIM directory sync. With JIT, you need to create groups and add users to them manually in **[Organization settings > Groups](https://claude.ai/admin-settings/groups)**. If you map an IdP group to the Custom role under JIT without doing this, those users have no permissions when they log in. Learn more about **[managing groups on Enterprise plans](https://support.claude.com/en/articles/13799932)**.
@@ -122,7 +122,7 @@ Once your IdP is connected, continue to Step 3.
4. Toggle **Enable group mappings** on (if it’s not already):
- 
+ 
5. In the **Enable group mappings** section, click “Add” next to each role and select the corresponding group from your IdP in the dropdown.
@@ -174,7 +174,7 @@ Verify you have enough seats purchased and available to add members to your org.
4. **For SCIM:** Click "Sync" to prompt an immediate sync, or wait for the automatic sync cycle:
- 
+ 
### Users mapped to the Custom role can't access anything after logging in
diff --git a/content/support/13163631-configuring-session-security-settings.md b/content/support/13163631-configuring-session-security-settings.md
index a70321e44c..bb30791b7d 100644
--- a/content/support/13163631-configuring-session-security-settings.md
+++ b/content/support/13163631-configuring-session-security-settings.md
@@ -18,7 +18,7 @@ Session duration controls allow Enterprise and Console Admins to set a maximum s
5. Confirm your selection by clicking “Enable.”
-
+
### For Console Admins
@@ -32,7 +32,7 @@ Session duration controls allow Enterprise and Console Admins to set a maximum s
5. Confirm your selection by clicking “Enable.”
-
+
### What happens after enabling shortened session length?
@@ -50,7 +50,7 @@ You can change the session duration at any time by selecting a new value from th
- Sessions scheduled to expire beyond the new duration will have their expiration shortened accordingly.
-
+
## Disabling session length settings
diff --git a/content/support/13189465-log-in-to-your-claude-account.md b/content/support/13189465-log-in-to-your-claude-account.md
index e7c55dbf12..6a8f119fc2 100644
--- a/content/support/13189465-log-in-to-your-claude-account.md
+++ b/content/support/13189465-log-in-to-your-claude-account.md
@@ -2,7 +2,7 @@
When you open Claude on a web browser ([claude.ai](http://claude.ai)), the desktop app, or a mobile app, you will see two different options for logging in to your Claude account.
-
+
## Continue with Google
diff --git a/content/support/13325567-account-management-faqs.md b/content/support/13325567-account-management-faqs.md
index 040639e056..0ec1075172 100644
--- a/content/support/13325567-account-management-faqs.md
+++ b/content/support/13325567-account-management-faqs.md
@@ -44,6 +44,6 @@ The email domain that was used to create your Team or Enterprise plan organizati
Owners can remove domains by opening up the same modal and clicking the trash can icon to the right of the domain:
-
+
While the account creator must use a business email address, you can add public domains like @gmail.com, @yahoo.com, and @hotmail.com as allowed domains for other members of your organization.
\ No newline at end of file
diff --git a/content/support/13345190-get-started-with-claude-cowork.md b/content/support/13345190-get-started-with-claude-cowork.md
index b88bdaaeeb..5f5fbd6e3f 100644
--- a/content/support/13345190-get-started-with-claude-cowork.md
+++ b/content/support/13345190-get-started-with-claude-cowork.md
@@ -178,7 +178,7 @@ To set global instructions:
3. Type your instructions in the text box and click "Save":
-
+
### Folder instructions
diff --git a/content/support/13346458-customizing-your-console-appearance-settings.md b/content/support/13346458-customizing-your-console-appearance-settings.md
index 6b930cbe8d..de7f3eda3f 100644
--- a/content/support/13346458-customizing-your-console-appearance-settings.md
+++ b/content/support/13346458-customizing-your-console-appearance-settings.md
@@ -8,4 +8,4 @@
3. Select from Light, System, or Dark under **Color mode**.
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/content/support/13371040-log-in-to-your-console-account.md b/content/support/13371040-log-in-to-your-console-account.md
index 197151eb39..067491c2ef 100644
--- a/content/support/13371040-log-in-to-your-console-account.md
+++ b/content/support/13371040-log-in-to-your-console-account.md
@@ -2,7 +2,7 @@
When you navigate to the **[Claude Console](https://platform.claude.com)**, you will see two different options for logging in to your Console account.
-
+
## Continue with Google
diff --git a/content/support/13641943-visual-and-interactive-content.md b/content/support/13641943-visual-and-interactive-content.md
index 8949fa3642..13e8d95e50 100644
--- a/content/support/13641943-visual-and-interactive-content.md
+++ b/content/support/13641943-visual-and-interactive-content.md
@@ -18,7 +18,7 @@ Claude can show current weather conditions and forecasts when you ask about the
Claude automatically displays temperatures in Fahrenheit for US locations and Celsius for everywhere else.
-
+
Weather is powered by Google Maps ().
@@ -28,7 +28,7 @@ When you ask about recipes, Claude can display formatted recipe cards that are e
**Note:** Visual recipe cards are available on web and desktop only. On mobile, Claude provides recipe information as text in the conversation.
-
+
### Custom visuals
@@ -76,7 +76,7 @@ For example, if you ask Claude to help you plan a trip, it might ask you to:
This content appears at the bottom of the chat. You can still type a response if you prefer.
-
+
---
diff --git a/content/support/13756069-public-sector-faqs.md b/content/support/13756069-public-sector-faqs.md
index 56b7b623d6..e7d85c6039 100644
--- a/content/support/13756069-public-sector-faqs.md
+++ b/content/support/13756069-public-sector-faqs.md
@@ -6,7 +6,7 @@
Select your product based on both your technical/functional requirements, and also your compliance/security/deployment environment requirements. Here is a list of options:
-
+
### What is Claude for Government (C4G)?
diff --git a/content/support/13837433-manage-plugins-for-your-organization.md b/content/support/13837433-manage-plugins-for-your-organization.md
index 281d9dc522..b7ae51c29f 100644
--- a/content/support/13837433-manage-plugins-for-your-organization.md
+++ b/content/support/13837433-manage-plugins-for-your-organization.md
@@ -112,7 +112,7 @@ Your personal GitHub token is verified to confirm you have access, then Cowork u
An initial sync runs automatically when you connect a repository. After that, organization owners can opt-in to continued automatic updates per marketplace by going to **[Organization settings > Plugins](https://claude.ai/admin-settings/plugins)**, clicking the menu button in the upper right corner of the marketplace, then toggling "Sync automatically" on:
-
+
Enabling automatic sync creates a webhook on the connected repository. The person turning the toggle on must have admin-level access to that repository on GitHub. This is checked through their personal GitHub connection, which is separate from the Claude GitHub App installation. Without admin access, the page shows "Cannot access repository. Ensure the repository exists and the Claude GitHub App is installed," even when the App is installed correctly and manual updates work.
diff --git a/content/support/13837440-use-plugins-in-claude.md b/content/support/13837440-use-plugins-in-claude.md
index 62988d935e..a9c0c80293 100644
--- a/content/support/13837440-use-plugins-in-claude.md
+++ b/content/support/13837440-use-plugins-in-claude.md
@@ -40,7 +40,7 @@ In Cowork, open the "Cowork" tab first, then open **Customize**.
You can also upload a custom plugin file if you built one yourself. On Team and Enterprise plans, a colleague can share a plugin with you directly instead of sending you the file. See **[Use a plugin shared with you](#h_ef985546b4)** below. On Claude Desktop and in Cowork, plugins you add yourself are saved locally to your computer.
-
+
If you're on the Enterprise plan and your organization has skill scanning turned on, plugins are checked for malicious content when they're installed or updated. A plugin with malicious content is blocked, and one that may carry risk shows a caution banner. Learn more about **[skill and plugin scanning](https://support.claude.com/en/articles/15927065)**.
@@ -50,7 +50,7 @@ If you're on the Enterprise plan and your organization has skill scanning turned
Each plugin you install adds skills you can use while working with Claude. Type "/" or click the "+" button to see the available skills from your installed plugins, in chat and in Cowork. Click any skill to see its details.
-
+
---
diff --git a/content/support/13854387-schedule-recurring-tasks-in-claude-cowork.md b/content/support/13854387-schedule-recurring-tasks-in-claude-cowork.md
index 338263c58a..12ee4f19e9 100644
--- a/content/support/13854387-schedule-recurring-tasks-in-claude-cowork.md
+++ b/content/support/13854387-schedule-recurring-tasks-in-claude-cowork.md
@@ -52,7 +52,7 @@ There are two ways to create a scheduled task:
6. You can explicitly confirm you want to schedule the task when prompted by Claude by clicking “Schedule":
-
+
7. Claude will create and schedule your task, and it will be added to the **Scheduled tasks** page.
diff --git a/content/support/13947068-assign-tasks-from-anywhere-in-claude-cowork.md b/content/support/13947068-assign-tasks-from-anywhere-in-claude-cowork.md
index 4b1defe906..b729d33380 100644
--- a/content/support/13947068-assign-tasks-from-anywhere-in-claude-cowork.md
+++ b/content/support/13947068-assign-tasks-from-anywhere-in-claude-cowork.md
@@ -48,11 +48,11 @@ Follow these steps to get started:
5. You’ll land on a page describing the functionality. Click “Get started”:
-
+
6. On the next screen, you can give Claude access to your files and keep your computer awake by toggling those on:
-
+
7. Click “Finish setup.”
diff --git a/content/support/14116274-organize-your-tasks-with-projects-in-claude-cowork.md b/content/support/14116274-organize-your-tasks-with-projects-in-claude-cowork.md
index 044254dafc..5be2c01f80 100644
--- a/content/support/14116274-organize-your-tasks-with-projects-in-claude-cowork.md
+++ b/content/support/14116274-organize-your-tasks-with-projects-in-claude-cowork.md
@@ -22,23 +22,23 @@ Cowork is available for paid plans (Pro, Max, Team, Enterprise) on:
Find **Projects** in the left navigation panel and click the “+” button to see the three different ways to create a project:
-
+
### Start from scratch
Selecting “Start from scratch” allows you to set up a new folder with instructions and files:
-
+
### Import from a Claude project
After selecting “Import from project,” you’ll see a “Search projects in Chat…” field:
-
+
Clicking into the field will display a drop-down showing your recent projects, but you can also use it to search all your projects. After you select a chat project (bulk upload is not supported), you can name the new Cowork project and choose where to save it on your computer:
-
+
Clicking “Create” will transfer the files and instructions from your existing Claude project and create a new Cowork project.
@@ -46,11 +46,11 @@ Clicking “Create” will transfer the files and instructions from your existin
If you select “Use an existing folder,” you’ll be prompted to pick a file to use as context for the new Cowork project:
-
+
After selecting a folder, you can name the new Cowork project, choose where to save it on your computer, add instructions, and attach any additional files. Click “Create” to start using your new project:
-
+
---
diff --git a/content/support/14499648-how-scim-sync-works-for-enterprise-organizations.md b/content/support/14499648-how-scim-sync-works-for-enterprise-organizations.md
index 4d2613c715..3bede270e4 100644
--- a/content/support/14499648-how-scim-sync-works-for-enterprise-organizations.md
+++ b/content/support/14499648-how-scim-sync-works-for-enterprise-organizations.md
@@ -50,7 +50,7 @@ You can trigger a manual sync from two places in your admin settings.
2. Click "Check for updates" under **SCIM sync**:
-
+
3. Select whether to sync members, groups, or both.
@@ -62,7 +62,7 @@ You can trigger a manual sync from two places in your admin settings.
3. Select whether to sync members, groups, or both:
-
+
**Note:** If you trigger a manual sync while background changes are processing, your organization takes the most recent change for each member or group. If multiple changes are queued for the same member or group, you may need to resync again to make sure everything applies correctly.
diff --git a/content/support/14503613-sso-login.md b/content/support/14503613-sso-login.md
index c7f2c60340..7e0f9d3a8b 100644
--- a/content/support/14503613-sso-login.md
+++ b/content/support/14503613-sso-login.md
@@ -47,9 +47,9 @@ Before configuring your Identity Provider (IdP), you must verify ownership of yo
3. Wait for the DNS propagation. Once the platform detects the record, the domain status will update to “**Verified**.”
-
+
-
+
**Important:** Each domain can only have one identity provider. If multiple organizations share a single login domain, IT administrators from both organizations will be able to modify login settings. Contact **[Anthropic Support](https://claude.fedstart.com/support)** for assistance with multi-organization setups. For more details about multi-organization setups, see our **[SCIM provisioning guide](https://support.claude.com/en/articles/14503643-set-up-scim-in-claude-for-government)**.
@@ -77,7 +77,7 @@ Once your SAML application is set up in your IdP, provide Anthropic with the det
- Claims Information — Attribute mappings for user name and email.
-
+
**Tip:** Using a metadata XML file: Most IdPs let you download a metadata.xml file. Upload it on the identity settings page to auto-fill the Signing Certificate, IdP Entity ID, and SSO URL. Some IdPs (like Entra ID) also include claims information in the metadata file; if present, the system will suggest field mappings automatically.
diff --git a/content/support/14503643-set-up-scim-in-claude-for-government.md b/content/support/14503643-set-up-scim-in-claude-for-government.md
index 9ffd00cd42..a1c50ea9f7 100644
--- a/content/support/14503643-set-up-scim-in-claude-for-government.md
+++ b/content/support/14503643-set-up-scim-in-claude-for-government.md
@@ -41,7 +41,7 @@ With SCIM, login and provisioning are separate. Your IdP tells Anthropic who sho
**Important**: Store this key securely. It cannot be retrieved after you leave the page.
-
+
### Step 2: Configure SCIM in your Identity Provider
@@ -67,7 +67,7 @@ After enabling the integration in your IdP:
**Warning**: When you fully enable SCIM provisioning, any users who were **not** synced via SCIM will be removed from the organization. Confirm that all expected users appear in the sync before proceeding.
-
+
### Step 4: Map groups to roles and seat tiers
@@ -83,7 +83,7 @@ SCIM provisioning uses IdP groups to assign roles and seat tiers within Claude f
3. Save your mappings.
-
+
If you manage multiple organizations under a single parent (see below), each organization maintains its own role and seat tier mappings. Switch between organizations using the organization selector in the bottom-left corner of the page.
diff --git a/content/support/14503775-mcp-web-search.md b/content/support/14503775-mcp-web-search.md
index 55fd82878d..b9c8f45156 100644
--- a/content/support/14503775-mcp-web-search.md
+++ b/content/support/14503775-mcp-web-search.md
@@ -4,7 +4,7 @@ The Web Search connector gives Claude the ability to search the public internet
For questions about web search in commercial Claude, see **[Enabling and using web search](https://support.claude.com/en/articles/10684626-enabling-and-using-web-search)**.
-
+
## How Web Search differs for Claude for Government
diff --git a/content/support/14604397-set-up-your-design-system-in-claude-design.md b/content/support/14604397-set-up-your-design-system-in-claude-design.md
index e56c5e2e48..5434edad8b 100644
--- a/content/support/14604397-set-up-your-design-system-in-claude-design.md
+++ b/content/support/14604397-set-up-your-design-system-in-claude-design.md
@@ -72,7 +72,7 @@ To validate your design system, create a test project and see if the output matc
Once you’re satisfied with the design system quality, make sure the “Published” toggle is switched on. After publishing, any projects created from the Claude Design homescreen while in your organization will use your design system instead of the default.
-
+
---
diff --git a/content/support/14604406-claude-design-admin-guide-for-team-and-enterprise-plans.md b/content/support/14604406-claude-design-admin-guide-for-team-and-enterprise-plans.md
index 3fbfe79dc1..49b7c0ca9d 100644
--- a/content/support/14604406-claude-design-admin-guide-for-team-and-enterprise-plans.md
+++ b/content/support/14604406-claude-design-admin-guide-for-team-and-enterprise-plans.md
@@ -18,7 +18,7 @@ Team and Enterprise plan admins can enable this organization-wide by following t
2. Find the **Claude Design** toggle under **Anthropic Labs** and switch it on.
-
+
---
diff --git a/content/support/14604416-get-started-with-claude-design.md b/content/support/14604416-get-started-with-claude-design.md
index f85262b6ab..d2c04ccf4c 100644
--- a/content/support/14604416-get-started-with-claude-design.md
+++ b/content/support/14604416-get-started-with-claude-design.md
@@ -153,7 +153,7 @@ Use the “Export” button in the upper right corner when viewing your project
- Send to Claude Code Web
-
+
You can also share projects within your organization using a shareable link. Sharing options include view-only, comment, and edit access.
diff --git a/content/support/15330088-set-a-default-model-for-your-organization.md b/content/support/15330088-set-a-default-model-for-your-organization.md
index b914b2c97c..4e16f3d885 100644
--- a/content/support/15330088-set-a-default-model-for-your-organization.md
+++ b/content/support/15330088-set-a-default-model-for-your-organization.md
@@ -50,7 +50,7 @@ The organization default applies to every member. To set it:
4. Click “Save changes.”
-
+
---
diff --git a/content/support/15694740-manage-model-access-for-your-organization.md b/content/support/15694740-manage-model-access-for-your-organization.md
index 096324b631..d704917105 100644
--- a/content/support/15694740-manage-model-access-for-your-organization.md
+++ b/content/support/15694740-manage-model-access-for-your-organization.md
@@ -42,9 +42,9 @@ The organization setting is the ceiling. A role can't grant access to a model th
If any custom role uses the model you’re disabling as its default, you’ll be prompted to change that role’s default before the change can be saved.
-
+
-
+
---
@@ -78,7 +78,7 @@ If any custom role has an effort cap higher than the new organization cap for th
Only models the role grants access to can be selected as that role’s default model.
-
+
---
@@ -96,7 +96,7 @@ Effort limits determine how much computation members on a role can apply per res
5. Click "Save" to save your changes.
-
+
Members on the role see only effort levels at or below the cap in their model menu. Note that available effort levels differ depending on the model, and some models don’t support effort level settings at all. For an explanation of each level, see **[Change the model, effort, and thinking settings](https://support.claude.com/en/articles/8664678)**.
diff --git a/content/support/15936181-get-started-with-1password-for-claude.md b/content/support/15936181-get-started-with-1password-for-claude.md
index ae018bf9b3..971a7149a7 100644
--- a/content/support/15936181-get-started-with-1password-for-claude.md
+++ b/content/support/15936181-get-started-with-1password-for-claude.md
@@ -52,7 +52,7 @@ Once the requirements are in place, you can set up 1Password from a few places i
4. Toggle on **Password managers**:
-
+
Once enabled, eligible users will see the discovery options above. Users still need to install and set up the required apps and extensions themselves.
diff --git a/content/support/16607638-understanding-your-pro-or-max-plan-invoices.md b/content/support/16607638-understanding-your-pro-or-max-plan-invoices.md
index 278d527174..684564b381 100644
--- a/content/support/16607638-understanding-your-pro-or-max-plan-invoices.md
+++ b/content/support/16607638-understanding-your-pro-or-max-plan-invoices.md
@@ -40,7 +40,7 @@ You can also open any invoice from your account:
**Amount due.** The invoice total minus any applied balance. This is what your payment method was charged.
-
+
## Billing details on your invoice
diff --git a/content/support/16764810-assign-a-program-to-workspaces-in-claude-console.md b/content/support/16764810-assign-a-program-to-workspaces-in-claude-console.md
index cc10e1955d..46ba47eb78 100644
--- a/content/support/16764810-assign-a-program-to-workspaces-in-claude-console.md
+++ b/content/support/16764810-assign-a-program-to-workspaces-in-claude-console.md
@@ -20,27 +20,27 @@ In the Console, programs are issued to your organization and apply to workspaces
1. **[Sign in to the Console](https://platform.claude.com/)** as an organization Admin. Go to **[Organization settings > Programs](https://platform.claude.com/settings/organization/programs)**. The program card shows whether it applies automatically or needs workspaces assigned.
- 
+ 
2. Select the program to open its page. The **Workspaces** table shows each workspace's status. A workspace marked with an issue does not meet a requirement yet.
- 
+ 
Hover over the issue to see which requirement is not met.
- 
+ 
3. To give a workspace access, make it meet the requirements. Open the workspace, select "Manage," then "Programs," and check the **Qualifications** panel.
- 
+ 
4. Fix the requirement. For the Cyber Verification Program, turn on data retention under Manage, then Privacy controls. Then select "Rerun."
- 
+ 
5. The program shows **Active** for the workspace.
- 
+ 
## Troubleshooting
diff --git a/content/support/8114491-get-started-with-claude.md b/content/support/8114491-get-started-with-claude.md
index c76c52d52a..b03b7f80c4 100644
--- a/content/support/8114491-get-started-with-claude.md
+++ b/content/support/8114491-get-started-with-claude.md
@@ -36,7 +36,7 @@ You use **prompts** to communicate with Claude. The best approach is to speak to
Type your prompt into the chat interface and click the submit button to start a conversation with Claude. You can click the "+" button in the lower left or type "/" to view additional options and commands:
-
+
---
diff --git a/content/support/8230524-delete-or-rename-a-conversation.md b/content/support/8230524-delete-or-rename-a-conversation.md
index a3ba60311a..1ffd00be29 100644
--- a/content/support/8230524-delete-or-rename-a-conversation.md
+++ b/content/support/8230524-delete-or-rename-a-conversation.md
@@ -44,15 +44,15 @@ These steps apply to Claude for iOS, listed on the App Store as Claude by Anthro
4. If deleting, tap "Delete" again in the confirmation prompt.
-
+
-
+
You can also delete the conversation you have open: tap the "⋯" button in the top right corner, tap "Delete," then confirm.
-
+
-
+
## Delete or rename a conversation on Claude for Android
@@ -66,9 +66,9 @@ These steps apply to the Claude for Android, listed on Google Play as Claude by
3. If deleting, tap "Delete" again in the confirmation prompt.
-
+
-
+
**To delete multiple conversations at once:**
@@ -78,9 +78,9 @@ These steps apply to the Claude for Android, listed on Google Play as Claude by
3. Tap the trash icon, then tap "Delete" in the confirmation prompt.
-
+
-
+
## What happens when you delete a conversation
diff --git a/content/support/8325618-paid-plan-billing-faqs.md b/content/support/8325618-paid-plan-billing-faqs.md
index a13e452e29..20656ff65f 100644
--- a/content/support/8325618-paid-plan-billing-faqs.md
+++ b/content/support/8325618-paid-plan-billing-faqs.md
@@ -50,7 +50,7 @@ There's no separate option to remove a card, and updating to a new card replaces
If you want to use a name other than the one tied to your payment method, check the "Use a different name on invoices" box when adding or updating your payment method in **[Settings > Billing](https://claude.ai/settings/billing)**.
-
+
## How can I edit a paid invoice?
diff --git a/content/support/8887527-customizing-your-appearance-settings.md b/content/support/8887527-customizing-your-appearance-settings.md
index 5dca2098aa..56a40fc183 100644
--- a/content/support/8887527-customizing-your-appearance-settings.md
+++ b/content/support/8887527-customizing-your-appearance-settings.md
@@ -8,7 +8,7 @@
3. Select from Light, Match System, and Dark under **Color mode**.
-
+
## How to change your font
@@ -16,10 +16,10 @@
2. Select from Default, Match System, and Dyslexic Friendly.
-
+
## Can I disable the sidebar?
It's not currently possible to completely disable the sidebar. You can click the button on the top right of the sidebar to open or close it.
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/content/support/9267400-move-your-personal-claude-account-to-a-team-or-enterprise-organization.md b/content/support/9267400-move-your-personal-claude-account-to-a-team-or-enterprise-organization.md
index 06d94423f9..c9919321f2 100644
--- a/content/support/9267400-move-your-personal-claude-account-to-a-team-or-enterprise-organization.md
+++ b/content/support/9267400-move-your-personal-claude-account-to-a-team-or-enterprise-organization.md
@@ -126,7 +126,7 @@ For the full walkthrough of your options, deadlines, and what happens to your su
You may have both a personal account and an organization account tied to the same email address. You can switch between them by clicking your initials or name in the lower left corner of the screen.
-
+
A blue checkmark shows which account you're currently using. Click the other account to switch to it and access its separate conversations and projects.
diff --git a/content/support/9519177-how-can-i-create-and-manage-projects.md b/content/support/9519177-how-can-i-create-and-manage-projects.md
index 7ba4f8859d..256cdf4a0b 100644
--- a/content/support/9519177-how-can-i-create-and-manage-projects.md
+++ b/content/support/9519177-how-can-i-create-and-manage-projects.md
@@ -104,15 +104,15 @@ Starring a project allows for quick access from your projects and chats list, vi
You can move a standalone chat into a project by clicking on the dropdown arrow next to the chat name, then “Add to project”:
-
+
Browse or search for the correct project in the **Move chat** modal that appears, then click on it to move the chat.
-
+
You can also remove chats from projects, or move them between projects, using the same dropdown menu within the chat:
-
+
---
diff --git a/content/support/9519189-manage-project-visibility-and-sharing.md b/content/support/9519189-manage-project-visibility-and-sharing.md
index af44875b62..ed7de920c8 100644
--- a/content/support/9519189-manage-project-visibility-and-sharing.md
+++ b/content/support/9519189-manage-project-visibility-and-sharing.md
@@ -12,7 +12,7 @@ When creating a project on a Team or Enterprise plan, you can choose between two
- **Private:** Only invited members can view and use the project.
-
+
## What are public projects?
@@ -22,11 +22,11 @@ If you choose to share a project with the rest of your organization upon creatio
Yes, you can switch the visibility of a project you created as public to private at any time by opening the project and clicking the “Share” button to the right of the project name:
-
+
Click “Everyone at [your organization]” under **General access** and select “Only people invited” to change the project from public to private:
-
+
## What are private projects?
@@ -36,11 +36,11 @@ Choosing “Only people invited” keeps your project private so that you are th
Yes, you can switch the visibility of a project you created as private to public at any time by opening the project and clicking the “Share” button to the right of the project name:
-
+
Click “Only people invited” under General access and select “Everyone at [your organization]” to change the project from private to public:
-
+
## Add and remove access to private projects
diff --git a/content/support/9534590-cost-and-usage-reporting-in-the-claude-console.md b/content/support/9534590-cost-and-usage-reporting-in-the-claude-console.md
index 07aac12fe4..4b8f5a5bdd 100644
--- a/content/support/9534590-cost-and-usage-reporting-in-the-claude-console.md
+++ b/content/support/9534590-cost-and-usage-reporting-in-the-claude-console.md
@@ -8,7 +8,7 @@ The Claude Console provides detailed cost and usage reporting to help you effect
Users with access to these reports can click into them on the left navigation menu on the Console:
-
+
---
@@ -46,9 +46,9 @@ The [Usage page](https://platform.claude.com/usage) offers a detailed breakdown
6. Use the export button to download a CSV of the displayed data.
-
+
-
+
### Rate Limit Use
@@ -88,6 +88,6 @@ The [Cost page](https://platform.claude.com/cost) helps you understand your spen
5. Use the export button to download a CSV of the cost data.
-
+
**Note**: Currently, it's not possible to break down usage or cost by individual users.
\ No newline at end of file
diff --git a/content/support/9547008-publish-and-share-artifacts.md b/content/support/9547008-publish-and-share-artifacts.md
index 8e948c2981..1bddbfb4ae 100644
--- a/content/support/9547008-publish-and-share-artifacts.md
+++ b/content/support/9547008-publish-and-share-artifacts.md
@@ -56,11 +56,11 @@ Publishing also adds the artifact to the **[Artifacts](https://claude.ai/artifac
After publishing, you'll see a “Get embed code” button.
-
+
Click it to open a modal with automatically generated code you can copy and paste to embed your artifact on another website.
-
+
You must specify which websites can embed your artifact by entering URLs in the **Allowed domains** field, separated by commas.
@@ -116,7 +116,7 @@ Artifacts created on Team or Enterprise accounts can only be shared within your
4. Click “Share & copy link” to make this version shareable.
-
+
### Who can access shared artifacts
@@ -138,7 +138,7 @@ When you share an artifact, viewers also gain access to any attachments and file
2. In the **Artifact shared** modal, click “Unshare.”
-
+
---
diff --git a/content/support/9927533-disable-public-projects-for-your-organization.md b/content/support/9927533-disable-public-projects-for-your-organization.md
index 68504e58a2..e618b6bd2e 100644
--- a/content/support/9927533-disable-public-projects-for-your-organization.md
+++ b/content/support/9927533-disable-public-projects-for-your-organization.md
@@ -10,7 +10,7 @@ Follow these steps:
2. Find **Public projects** and toggle it off
-
+
## How does disabling public projects work?
diff --git a/discovery.json b/discovery.json
index d2244a060b..0320c72eda 100644
--- a/discovery.json
+++ b/discovery.json
@@ -1,7 +1,7 @@
{
"version": 1,
"note": "What the last full run could see outside sources.json. Written by the fetcher so a new source arrives as a diff a human reviews, not as a line in an Actions log nobody reads. Stable facts only: a change here is always news. `review` is the actionable list \u2014 domains we could archive today and do not.",
- "updated": "2026-09-13",
+ "updated": "2026-09-14",
"domains": {
"anthropic.com": {
"status": "frozen",
diff --git a/tombstones.json b/tombstones.json
index 542c2c53cf..4e8a35c4a1 100644
--- a/tombstones.json
+++ b/tombstones.json
@@ -1,7 +1,7 @@
{
"version": 1,
"note": "URLs confirmed gone upstream. Kept so a page that died once does not report as a fresh failure on every later run, which would bury the failure that is actually new. An entry clears itself if the URL answers again -- but only while something still probes it. Entries whose local file was removed are no longer fetched, so they stay as a record of the restructure rather than a live check.",
- "updated": "2026-09-13",
+ "updated": "2026-09-14",
"urls": {
"https://claude.com/docs/claude-science/annotations": {
"since": "2026-09-01",