Extensions Overview changedextensions/overview
Nearest release: v2.1.312, published 21 hours before upstream edited the page. Shown because the two are within 24 hours of each other. Nothing here says the release caused the edit.
Upstream edited this page at 28 Oct 2026 15:57 UTC, give or take a minute or two: the time comes from Anthropic’s own sitemap rather than from a commit. This site recorded the change at 28 Oct 2026 16:07 UTC.
Upstream edited
Recorded here
Lines+63added
Lines−0removed
From line
115
where the diff opens
First seen
14 Aug 2026
this site's first read of the page
Recorded edits9to this page, all time
### Initialization-Based Versions
The whole hunk
from line 115, old and new numbered
/
from line 115
115115
116116Clients and servers advertise their support for extensions in the `extensions` field within their respective capability declarations.
117117
118The examples below use protocol version `2026-07-28` and later. For `2025-11-25` and earlier, see [Initialization-Based Versions](#initialization-based-versions).
119
118120### Client Capabilities
119121
120122Clients advertise extension support in `_meta["io.modelcontextprotocol/clientCapabilities"]` within each request:
from line 179
177179```
178180
179181Each extension specifies the schema of its settings object; an empty object indicates no settings.
182
183### Initialization-Based Versions
184
185Extensions became an official part of the protocol in version `2026-07-28`. Before that, many SDKs, clients, and servers already negotiated extensions on `2025-11-25` and earlier during the [`initialize` handshake](https://modelcontextprotocol.io/specification/2025-11-25/basic/lifecycle#initialization), using `params.capabilities.extensions` in the request and `result.capabilities.extensions` in the response. The extension identifiers and settings objects follow the same rules as above.
186
187> [!NOTE]
188>
189> The `extensions` field is not part of the published schemas for these protocol versions, and supporting it is not required for conformance. SDKs that can carry `capabilities.extensions` through `initialize` are encouraged to do so, so that extensions work consistently across protocol versions. Check that your SDK can send and receive this field, and that the extension supports the negotiated protocol version. If the other side's capabilities omit `extensions`, or omit a given extension, treat that extension as unsupported and follow [Graceful Degradation](#graceful-degradation).
190
191**Client request**
192
193Clients advertise extension support in the `initialize` request:
194
195```json theme={null}
196{
197 "jsonrpc": "2.0",
198 "id": 1,
199 "method": "initialize",
200 "params": {
201 "protocolVersion": "2025-11-25",
202 "capabilities": {
203 "roots": {
204 "listChanged": true
205 },
206 "extensions": {
207 "io.modelcontextprotocol/ui": {
208 "mimeTypes": ["text/html;profile=mcp-app"]
209 }
210 }
211 },
212 "clientInfo": {
213 "name": "ExampleClient",
214 "version": "1.0.0"
215 }
216 }
217}
218```
219
220**Server response**
221
222Servers advertise extension support in the `initialize` response:
223
224```json theme={null}
225{
226 "jsonrpc": "2.0",
227 "id": 1,
228 "result": {
229 "protocolVersion": "2025-11-25",
230 "capabilities": {
231 "tools": {},
232 "extensions": {
233 "io.modelcontextprotocol/ui": {}
234 }
235 },
236 "serverInfo": {
237 "name": "ExampleServer",
238 "version": "1.0.0"
239 }
240 }
241}
242```
180243
181244### Graceful Degradation
182245
No line in this hunk matches that.