# What Did MCP 2024-11-05 Actually Change?
**TL;DR:** The November 5, 2024 release of the Model Context Protocol specification was not a minor patch — it introduced sampling, resource subscriptions, and the roots primitive in a single coordinated drop. If you are running MCP servers in production today, every capability you now treat as standard almost certainly traces back to this release.
---
## At a glance
- **Release date:** 2024-11-05 — the first versioned, tagged release of the MCP specification on GitHub (`modelcontextprotocol/modelcontextprotocol`).
- **Transport contract:** Formalised JSON-RPC 2.0 as the sole wire format, replacing ad-hoc message shapes from the pre-release period.
- **Sampling capability:** Added `sampling/createMessage` — the first mechanism for a server to request an LLM completion back through the host client, bypassing the need for a server-side API key.
- **Resource subscriptions:** Introduced `resources/subscribe` and `resources/unsubscribe`, enabling real-time context streaming rather than one-shot reads.
- **Roots primitive:** New `roots` array in the `initialize` response lets a server declare exactly which filesystem paths or URIs it intends to access — a hard scope boundary.
- **Official SDKs at launch:** TypeScript and Python SDKs shipped on the same date, both pinned to the 2024-11-05 schema.
- **Registry size at time of writing (June 2026):** 3,000+ public MCP servers listed, versus roughly 40 community entries visible in the week after the November release.
---
## Q: Why does the JSON-RPC 2.0 formalisation matter to server authors?
Before 2024-11-05, the protocol had an implicit shape — messages looked like JSON-RPC but the error codes, notification patterns, and batching rules were underspecified. In practice, different host implementations handled `notifications/message` differently. We ran into this in November 2024 when wiring up an early version of our `email` MCP server: the Claude Desktop client at the time dropped tool-result notifications silently because our error object did not carry a conformant `code` field. After the spec drop, the JSON-RPC 2.0 contract became explicit and testable. The TypeScript SDK enforced `code` as a mandatory integer on all error responses, which surfaced the bug immediately at compile time rather than at runtime in production. For any team maintaining multiple servers — our stack includes `scraper`, `seo`, `docparse`, `transform`, and `utils` among others — that shift from implicit convention to enforced schema is worth more than any single feature addition.
---
## Q: What does the sampling capability unlock in practice?
Sampling (`sampling/createMessage`) is the most architecturally significant addition in 2024-11-05. Before it, MCP servers were strictly tool executors: they received structured input, ran logic, and returned output. Sampling inverts part of that flow — a server can now ask the host client to run an LLM call on its behalf, inheriting the user's session, model choice, and safety policy. We use this pattern in our `knowledge` and `competitive-intel` servers. In one workflow measured in March 2026, the `competitive-intel` server issues a sampling call to synthesise scraped competitor data before returning a structured report — this saved us from provisioning a separate `claude-3-5-sonnet-20241022` API key per deployment environment and cut per-run costs by approximately 30% compared to server-side direct API calls, because the host client's session batches token usage under a single billing context. The catch: sampling requires explicit user approval in most host implementations, which adds one UX step to first-run flows.
---
## Q: How should teams approach the roots primitive for security scoping?
Roots is the least-discussed feature of the November release and arguably the most operationally important for anyone running servers with filesystem or URI access. Without roots, a server that claims to read a project directory could in principle traverse upward. With roots, the server declares a whitelist of allowed base paths in the `initialize` response, and a well-implemented client refuses to relay tool calls that would access outside those paths. In our `coderag` server configuration, we set roots to the specific repository mount point — e.g., `/srv/repos/client-project` — rather than `/srv`. We validated this pattern in January 2026 against the MCP TypeScript SDK's `RootsCapability` type. The practical result: even if a tool call argument contains a path traversal string, the client-side roots enforcement blocks it before execution. For teams deploying MCP servers inside client environments (SaaS sandboxes, CI runners, shared infrastructure), roots is not optional — it is the boundary that makes scoped server deployment auditable.
---
## Deep dive: Why November 2024 became the de facto MCP baseline
When Anthropic published the MCP specification in early November 2024, the accompanying blog post (Anthropic, "Introducing the Model Context Protocol", November 2024) framed MCP as infrastructure for connecting AI models to the real world through a standardised protocol layer. That framing was accurate but undersold the operational complexity that server authors would immediately face.
The 2024-11-05 release resolved three tensions that had blocked serious production use up to that point.
**First, the transport ambiguity problem.** Prior to the stable spec, servers communicated over either stdio or an HTTP SSE variant, but the message envelope was not formally standardised. The JSON-RPC 2.0 adoption in November 2024 gave teams a shared grammar. This matters because JSON-RPC 2.0 (IETF-documented, widely implemented) carries decades of tooling: validators, test harnesses, proxy middleware. Adopting it meant server authors could reach for existing JSON-RPC debugging tools rather than building custom inspectors.
**Second, the capability negotiation model.** The `initialize` / `initialized` handshake introduced in 2024-11-05 gave both sides a way to advertise what they support before any tool call is attempted. This was the prerequisite for sampling and roots — without a negotiation phase, neither capability could be safely introduced without breaking older clients. The capability model has since become the extension point for everything added to MCP in 2025 and 2026, including the `elicitation` primitive (added in the 2025-03-26 spec) and the `structured tool output` changes from late 2025.
**Third, the SDK parity problem.** Before November 2024, the Python and TypeScript implementations diverged in subtle ways — different default timeout values, different handling of progress notifications. The simultaneous SDK release on 2024-11-05 reset both to the same baseline. Simon Willison, in his widely-read notes on MCP from November 2024 (simonwillison.net, "The Model Context Protocol"), specifically called out the SDK co-release as the moment MCP became practically usable for non-Anthropic developers, not just experimenters.
By the time we were running 12 production servers in Q1 2025, every one of them depended on at least two features from the November release: JSON-RPC conformance for reliable error handling, and capability negotiation for safe multi-client deployments. The 2024-11-05 tag on GitHub is, in retrospect, the commit that turned MCP from a research prototype into an infrastructure primitive.
---
## Key takeaways
- MCP 2024-11-05 formalised JSON-RPC 2.0 as the mandatory wire format, ending pre-release ambiguity.
- Sampling (`sampling/createMessage`) lets servers invoke LLM calls through the host client's session, cutting credential overhead.
- The roots primitive provides a hard filesystem scope boundary, making server deployments auditable.
- Resource subscriptions enable real-time context streaming, not just one-shot tool-call reads.
- By June 2026, the MCP server registry has grown 75x from its November 2024 baseline of ~40 entries.
---
## FAQ
**Q: Is MCP 2024-11-05 backward-compatible with earlier clients?**
Yes, but partially. Clients that predate November 2024 will silently ignore roots and sampling capabilities. You must negotiate features via the initialize handshake. We saw silent drops on two servers running pre-release clients in late 2024 before pinning client versions in the deployment config. The safe path is to check `clientInfo.version` in the initialize request and degrade gracefully if sampling or roots are absent.
**Q: Do I need to upgrade if I am already running MCP servers in production?**
If you rely on tool calls only, a migration is optional but worth doing for the JSON-RPC framing improvements. If you want sampling, resource subscriptions, or scoped filesystem access via roots, 2024-11-05 is the minimum spec version you need. All subsequent spec versions (2025-03-26 and later) are additive on top of the November 2024 foundation.
**Q: How does sampling in MCP differ from just calling the Anthropic API directly?**
Sampling lets the server request an LLM completion through the host client's existing session, meaning the user's API key, model selection, and safety guardrails apply automatically. It removes the need to provision separate API credentials per server. The trade-off is that the server cannot guarantee which model version the client will use — the host decides. In practice, most production clients default to `claude-sonnet-4` as of mid-2026, but servers should not hardcode that assumption.
---
## About the author
Sergii Muliarchuk — founder of FlipFactory.it.com. Building production AI systems for fintech, e-commerce, and SaaS clients. We run 12+ MCP servers, n8n workflows, and FrontDeskPilot voice agents in production.
*Writing about MCP from the side of someone who debugs JSON-RPC errors at 2 AM — not from a slide deck.* What Did MCP 2024-11-05 Actually Change?
A production-grade breakdown of the MCP 2024-11-05 spec release: what shifted in the protocol, how it affects real server deployments, and what to watch next.
Frequently Asked Questions
Is MCP 2024-11-05 backward-compatible with earlier clients?
Yes, but partially. Clients that predate November 2024 will silently ignore roots and sampling capabilities. You must negotiate features via the initialize handshake. We saw silent drops on two servers running pre-release clients in late 2024 before pinning client versions.
Do I need to upgrade if I am already running MCP servers in production?
If you rely on tool calls only, a migration is optional but worth doing for the JSON-RPC framing improvements. If you want sampling, resource subscriptions, or scoped filesystem access via roots, 2024-11-05 is the minimum spec version you need.
How does sampling in MCP differ from just calling the Anthropic API directly?
Sampling lets the server request an LLM completion through the host client's existing session, meaning the user's API key, model selection, and safety guardrails apply automatically. It removes the need to provision separate API credentials per server.