---
scope: org
organization: modelcontextprotocol
release_count: 9
last_release: 2026-10-23
generated: 2026-10-24
canonical: https://releases.sh/modelcontextprotocol/overview.md
---

Recently shipped TypeScript SDK 2.4.0 and Python SDK 2.3.0, tightening `x-mcp-header` validation to the 2026-07-28 spec.

**Tool header annotations are now enforced on both SDKs.**
- TypeScript rejects `x-mcp-header` on a `number` parameter: the client drops the tool from its listing, and the server answers calls to it with `-32020`. Use `z.int()` instead.
- Python raises `InvalidSignature` at registration for anything but a plain `str`, `int`, or `bool` parameter — including `str | None`, `float`, lists, and enums — where previously the server started and clients silently omitted the tool.
- Header names must be valid tokens and unique case-insensitively.

**OAuth credentials are bound to the server that issued them.**
- Machine-to-machine providers now want `expectedIssuer`; constructing them without it is deprecated and logs a warning.
- `expectedResource` on `requireBearerAuth` accepts only tokens issued for this server, and `fetchToken()` throws `AuthorizationServerMismatchError` before sending anything when client information belongs elsewhere.
- Stored tokens and client information gained an `issuer` field — storage that rejects unknown fields must allow it.

**Stateless servers and stricter transport defaults.** `Server.connect()` now rejects while already connected, and a stateless Streamable HTTP transport handles one request, so build the server inside the handler. List calls return the whole list. HTTP transports follow redirects only within the same origin unless `redirectPolicy: 'follow'` is set.

**Schema output and validation changed shape.** On a 2025-11-25 connection, `outputSchema` from `z.object(...).meta({ id })` is no longer wrapped: read `structuredContent`, not `structuredContent.result`. The bundled Ajv validator (fast-uri 3.1.8) rejects `$id` or `$ref` values with invalid URI schemes such as `my_tool:output`.

**New opt-in limits.** `maxToolInputElements` caps array elements and object members in tool arguments, and Python's `max_sse_event_size` ships alongside a raised floor of `httpx2>=2.10.0`.

The 1.x line still receives backports — same-origin redirect handling, `expectedIssuer`, and late registration of declared capabilities — with its README now pointing at v2.
