---
name: Model Context Protocol
slug: modelcontextprotocol
domain: modelcontextprotocol.io
description: Open protocol, created by Anthropic, for connecting AI applications to external tools, data sources and workflows. Tracks the MCP specification and the official TypeScript and Python SDKs.
category: ai
sources: 4
total_releases: 119
releases_last_30d: 9
avg_releases_per_week: 1.9
last_updated: 2026-10-24
tracking_since: 2024-11-06
canonical: https://releases.sh/modelcontextprotocol
overview_url: https://releases.sh/modelcontextprotocol/overview.md
tags:
  - llm
  - mcp
accounts:
  github: "modelcontextprotocol"
---

## Overview

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.

<Source name="Blog" slug="mcp-blog" type="feed" releases="24" latest-date="2026-08-22T09:00:00.000Z" url="https://releases.sh/modelcontextprotocol/mcp-blog" />
<Source name="Python SDK" slug="mcp-python-sdk" type="github" releases="73" latest-version="v2.3.0" latest-date="2026-10-02T22:02:27.000Z" url="https://releases.sh/modelcontextprotocol/mcp-python-sdk" />
<Source name="Specification" slug="mcp-specification" type="github" releases="9" latest-version="2026-07-28" latest-date="2026-07-28T16:47:49.000Z" primary="true" url="https://releases.sh/modelcontextprotocol/mcp-specification" />
<Source name="TypeScript SDK" slug="mcp-typescript-sdk" type="github" releases="11" latest-version="v2.4.0" latest-date="2026-10-23T18:32:25.000Z" url="https://releases.sh/modelcontextprotocol/mcp-typescript-sdk" />

## Recent Releases

_Summaries below — fetch `url` for the original source, or `canonical` for the releases.sh copy of the full content._

<Release source="mcp-typescript-sdk" version="v2.4.0" date="October 23, 2026" published="2026-10-23T18:32:25.000Z" url="https://github.com/modelcontextprotocol/typescript-sdk/releases/tag/v2.4.0" canonical="https://releases.sh/release/rel_dma349Y2VDWSmPEWCQJQh" truncated="true">
### 2.4.0

The client no longer lists tools with an x-mcp-header annotation on a number parameter and servers answer calls to them with -32020, per the 2026-07-28 spec. Also added Skills over MCP (SEP-2640) with loadSkills and SkillsClient, opt-in scopes on token refresh, and changed 2025-11-25 outputSchema results to drop the { result } wrapper.
</Release>

<Release source="mcp-typescript-sdk" version="1.32.2" date="October 23, 2026" published="2026-10-23T18:06:24.000Z" url="https://github.com/modelcontextprotocol/typescript-sdk/releases/tag/1.32.2" canonical="https://releases.sh/release/rel_Ici3EzIOixlimBMTJGB3z" truncated="true">
Handlers can now be registered after connect() when the corresponding capability was declared, and Transport optional properties now carry explicit | undefined, backported to v1.x.
</Release>

<Release source="mcp-typescript-sdk" version="v2.3.1" date="October 5, 2026" published="2026-10-05T11:54:56.000Z" url="https://github.com/modelcontextprotocol/typescript-sdk/releases/tag/v2.3.1" canonical="https://releases.sh/release/rel_54sykKVe7YNBYqB4qD8ee" truncated="true">
### 2.3.1

requireBearerAuth in @modelcontextprotocol/server-legacy now takes the optional expectedResource parameter added in @modelcontextprotocol/server 2.3.0, accepting only tokens issued for this server's audience; it is off unless set. The npm pages for the server and client packages now open with a note linking the documentation, migration guide, and issue form.
</Release>

<Release source="mcp-typescript-sdk" version="1.32.1" date="October 5, 2026" published="2026-10-05T11:42:59.000Z" url="https://github.com/modelcontextprotocol/typescript-sdk/releases/tag/1.32.1" canonical="https://releases.sh/release/rel_-JxoIn8ifdLjYVeV6ZcU6" truncated="true">
## What's Changed
* [v1.x] docs: state the principles in CLAUDE.md by @claude[bot] in https://github.com/modelcontextprotocol/typescript-sdk/pull/293...
</Release>

<Release source="mcp-python-sdk" version="v2.3.0" date="October 2, 2026" published="2026-10-02T22:02:27.000Z" url="https://github.com/modelcontextprotocol/python-sdk/releases/tag/v2.3.0" canonical="https://releases.sh/release/rel_-DblQ2pW9NCyN1a86koRq" truncated="true">
Outbound requests on 2025-11-25 and earlier connections no longer carry an empty "_meta" or empty "params", and tools with invalid x-mcp-header annotations now raise InvalidSignature at registration instead of being silently dropped by clients. Also adds a max_sse_event_size option and requires httpx2>=2.10.0.
</Release>

<Release source="mcp-typescript-sdk" version="v2.3.0" date="October 2, 2026" published="2026-10-02T17:55:03.000Z" url="https://github.com/modelcontextprotocol/typescript-sdk/releases/tag/v2.3.0" canonical="https://releases.sh/release/rel_hx1rhE8g06zdJUouEsc2k" truncated="true">
### 2.3.0

Server.connect() now rejects while the instance is already connected, and stateless Streamable HTTP transport handles one request, so the McpServer and transport must be created inside the request handler or createMcpHandler factory. HTTP client transports follow a redirect only when it stays on the same origin, and the client now requires eventsource-parser 3.0.8 or later.
</Release>

<Release source="mcp-typescript-sdk" version="1.32.0" date="October 2, 2026" published="2026-10-02T17:28:24.000Z" url="https://github.com/modelcontextprotocol/typescript-sdk/releases/tag/1.32.0" canonical="https://releases.sh/release/rel_l40lnpXg4Oj9tSkG0Ja06" truncated="true">
The HTTP client transports now follow a redirect only when it stays on the same origin, allowing http to https on the same host; deployments redirecting to another host or port must configure the final URL or set redirectPolicy: 'follow' on StreamableHTTPClientTransport or SSEClientTransport, and in browsers a redirected request fails unless that option is set. Adds opt-in maxToolInputElements on McpServer and expectedResource on requireBearerAuth, plus fixes so tools/call and prompts/get requests omitting arguments are accepted and in-memory task-store tasks stay within their creating session.
</Release>

<Release source="mcp-typescript-sdk" version="v2.2.0" date="September 28, 2026" published="2026-09-28T19:24:07.000Z" url="https://github.com/modelcontextprotocol/typescript-sdk/releases/tag/v2.2.0" canonical="https://releases.sh/release/rel_I1Mvq2LMQfKqwvP5MqwYO" truncated="true">
### 2.2.0

listTools(), listPrompts(), listResources() and listResourceTemplates() called without a cursor now follow nextCursor until the server stops sending one, with listMaxPages still capping the walk. Constructing the machine-to-machine OAuth providers without expectedIssuer is deprecated and warns, and fetchToken() now throws AuthorizationServerMismatchError when client information is bound to a different authorization server.
</Release>

<Release source="mcp-typescript-sdk" version="1.31.0" date="September 28, 2026" published="2026-09-28T18:52:02.000Z" url="https://github.com/modelcontextprotocol/typescript-sdk/releases/tag/1.31.0" canonical="https://releases.sh/release/rel_zM92GiDSKc-BXoL4vCh-Y" truncated="true">
Stored OAuth tokens and client information now include an issuer field, binding credentials to the authorization server that issued them; storage rejecting unknown fields must allow it. Pass expectedIssuer when constructing ClientCredentialsProvider, PrivateKeyJwtProvider, or StaticPrivateKeyJwtProvider, since constructing them without it is deprecated.
</Release>

<Release source="mcp-typescript-sdk" version="1.30.1" date="September 23, 2026" published="2026-09-23T15:59:38.000Z" url="https://github.com/modelcontextprotocol/typescript-sdk/releases/tag/1.30.1" canonical="https://releases.sh/release/rel_TsOeu34C25OXhNZeBYxmY" truncated="true">
The server now reads HTTP request bodies with a size limit and bounds JSON-RPC batch length, and auth resource URIs are preserved without trailing-slash rewriting.
</Release>

## Fetching more

Append `.md` (markdown), `.json` (raw data), or `.atom` (feed) to any URL on this page.

- Per-source history: `https://releases.sh/modelcontextprotocol/{source-slug}`
- Atom feed: `https://releases.sh/modelcontextprotocol.atom`
- Individual release: `https://releases.sh/release/{release-id}`
