# Protocol versions

Every MCP endpoint here, hosted servers and docs servers alike, speaks MCP over Streamable HTTP, stateless: each request stands alone, and every answer is JSON, never a stream. A `GET` asking for a stream gets `405`.

## The current revision

| Version | How it's used |
| --- | --- |
| 2026-07-28 | No handshake. Every request carries its version and client in `_meta`, mirrored in the `MCP-Protocol-Version`, `Mcp-Method` and, for a tool call, `Mcp-Name` headers. |

A request whose headers don't match its body gets a header-mismatch error, and one naming a version we don't serve gets the list of versions we do.

## The legacy versions

These start with `initialize`, as they always did:

| Version |
| --- |
| 2025-11-25 |
| 2025-06-18 |
| 2025-03-26 |
| 2024-11-05 |
| 2024-10-07 |

The two from 2024 still work on `initialize`, but they aren't offered in a version error or in `server/discover`.

## Where this comes from

- `app/mcp/_lib/modern.ts`
- `app/mcp/_lib/handler.ts`
