Follow Discord
Sweep 29 Sep 2026 · 18:10Z Build v2.1.285 506 read Stable v2.1.280 Latest v2.1.285 Next v2.1.285 Feeds RSS JSON llms.txt llms-full.txt Unofficial
One change · mcp

SEP-2106: Tools `inputSchema` & `outputSchema` Conform to JSON Schema 2020-12 changedseps/2106-json-schema-2020-12

Upstream edited this page at 29 Jul 2026 22:46 UTC, give or take a minute or two: the time comes from Anthropic’s own sitemap rather than from a commit. This site recorded the change at 28 Sep 2026 22:07 UTC.

Upstream edited
Recorded here
Lines+19added
Lines−19removed
From line 20 where the diff opens
First seen 14 Aug 2026 this site's first read of the page
Recorded edits2to this page, all time

The whole hunk

from line 20, old and new numbered
/
lines
from line 20
2020 requirements.
2121</Note>
2222 
23| Field | Value |
24| ------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
25| **SEP** | 2106 |
26| **Title** | Tools `inputSchema` & `outputSchema` Conform to JSON Schema 2020-12 |
27| **Status** | Final |
28| **Type** | Standards Track |
29| **Created** | 2026-01-06 |
23| Field | Value |
24| - | - |
25| **SEP** | 2106 |
26| **Title** | Tools `inputSchema` & `outputSchema` Conform to JSON Schema 2020-12 |
27| **Status** | Final |
28| **Type** | Standards Track |
29| **Created** | 2026-01-06 |
3030| **Author(s)** | John McBride ([@jpmcb](https://github.com/jpmcb)) — original proposal; Ola Hungerford ([@olaservo](https://github.com/olaservo)) — current shepherd, post-SEP-1850 conversion |
31| **Sponsor** | Ola Hungerford ([@olaservo](https://github.com/olaservo)) |
32| **PR** | [#2106](https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2106) |
31| **Sponsor** | Ola Hungerford ([@olaservo](https://github.com/olaservo)) |
32| **PR** | [#2106](https://github.com/modelcontextprotocol/modelcontextprotocol/pull/2106) |
3333 
3434***
3535 
from line 310
310310 
311311OpenAPI 3.1 made the strategic decision to fully align with JSON Schema 2020-12, accepting breaking changes to eliminate the friction. The result: better tooling compatibility and less ecosystem confusion.
312312 
313| OpenAPI's Problem | MCP's Parallel |
314| ----------------------------------- | ----------------------------------------- |
315| `type` must be string, not array | `inputSchema` only allows specific fields |
316| Couldn't use standard null handling | Can't use `oneOf`/`anyOf` in schemas |
317| Custom `nullable` keyword | Object-only `structuredContent` |
318| Caused tooling confusion | Causes SDK workarounds |
313| OpenAPI's Problem | MCP's Parallel |
314| - | - |
315| `type` must be string, not array | `inputSchema` only allows specific fields |
316| Couldn't use standard null handling | Can't use `oneOf`/`anyOf` in schemas |
317| Custom `nullable` keyword | Object-only `structuredContent` |
318| Caused tooling confusion | Causes SDK workarounds |
319319 
320320MCP can learn from OpenAPI's experience rather than repeating the same evolution over several years.
321321 
from line 325
325325 
326326### Compatibility Matrix
327327 
328| | New client (post-SEP) | Old client (pre-SEP) |
329| ------------------------- | ------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------- |
330| **New server (post-SEP)** | Fully compatible. | Compatible **only when the server returns object-typed `structuredContent`**. Arrays/primitives in `structuredContent` may break. |
331| **Old server (pre-SEP)** | Fully compatible. Existing object-only schemas remain valid. | Unchanged. |
328| | New client (post-SEP) | Old client (pre-SEP) |
329| - | - | - |
330| **New server (post-SEP)** | Fully compatible. | Compatible **only when the server returns object-typed `structuredContent`**. Arrays/primitives in `structuredContent` may break. |
331| **Old server (pre-SEP)** | Fully compatible. Existing object-only schemas remain valid. | Unchanged. |
332332 
333333The asymmetry: a new server that takes advantage of array or primitive `structuredContent` (or composition keywords in `inputSchema`) cannot assume an old client will accept the response. Old clients written against the previous wire format may reject `structuredContent` that is not a JSON object, or fail to validate `inputSchema` containing keywords beyond `type`/`properties`/`required`.
334334 
Feedback