MCP dropped sessions and became a plain HTTP workload

By Mark 9 min read 0 views

😁 Hello, super humans! Every protocol eventually has to decide whether it wants to be clever or whether it wants to scale. Yesterday the Model Context Protocol picked scale: it deleted sessions, deleted the handshake, and turned itself into ordinary stateless HTTP that any load balancer already knows how to handle. Grab a coffee, because this one changes how you deploy.

πŸ“° Quick Signals

  • 🧠 AI: Meta and BlackRock formed a $14 billion joint venture for a 1 GW AI campus in El Paso, with BlackRock-managed funds holding 80% and capacity arriving from 2028.
  • πŸ€– Robotics: The US administration moved to bar imports of new Chinese humanoid and quadruped robots along with power inverters, citing the domestic AI buildout.
  • πŸ’» Programming: Gemini 3.6 Flash is rolling out in GitHub Copilot with a 1M-token context, a 64K output cap, and better token efficiency than 3.5 Flash on agentic work.
  • ⚑ Electronics: Cadence posted $1.584 billion in Q2 revenue, up 24% year over year, on a record $8.1 billion backlog and IP growth above 40%.
  • πŸ“‘ Telecom: The FCC adopted its Upper C-band Report and Order, clearing 160 MHz for terrestrial use with roughly $5.6 billion in incentives to SES and $504 million to Eutelsat.

πŸ” The Big Story: MCP deleted sessions, and that is the whole point

If you have ever deployed a Model Context Protocol (MCP) server behind more than one instance, you already know the pain: sticky routing, a shared Redis for session state, and a reconnect story that falls apart the moment a pod restarts. The 2026-07-28 spec, shipped yesterday, removes the reason all of that existed.

What happened: The MCP maintainers released the 2026-07-28 specification, the largest revision since the protocol launched. The initialize/initialized handshake and the Mcp-Session-Id header are retired. Method and tool names now travel in Mcp-Method and Mcp-Name HTTP headers. List responses carry ttlMs and cacheScope so catalogs can be cached. Tasks moved out of the experimental core into a formal extensions framework, and the TypeScript, Python, Go and C# SDKs all speak the new version today, with Rust in beta.

The details: Every request is now self-describing. Protocol version, client identity and client capabilities ride along in _meta, and a client that still wants capabilities up front can call the new optional server/discover Remote Procedure Call (RPC). The knock-on effect is the interesting bit: any request can land on any instance behind plain round-robin, with no shared storage and no sticky sessions. Server-initiated calls that used to need a held-open bidirectional stream are replaced by Multi Round-Trip Requests (MRTR): when a tool needs a confirmation or a missing argument mid-call, the server answers with resultType: "input_required" and the client simply retries the same call with the answers in inputResponses. On the security side, authorization servers should now return the iss parameter per RFC 9207 and clients must validate it before redeeming a code, which closes an authorization-server mix-up hole, and Dynamic Client Registration (DCR) is formally deprecated in favor of Client ID Metadata Documents (CIMD). Roots, Sampling and Logging are deprecated too, with a new twelve-month minimum deprecation window so upgrades can be planned rather than absorbed.

flowchart LR
  subgraph OLD["Before: stateful"]
    C1[Client] -->|initialize| LB1[Sticky LB]
    LB1 --> S1[Server A]
    S1 <--> R[(Shared session store)]
    LB1 -.pinned.-> S1
  end
  subgraph NEW["2026-07-28: stateless"]
    C2[Client] -->|self-describing request| LB2[Round-robin LB]
    LB2 --> A[Server A]
    LB2 --> B[Server B]
    LB2 --> D[Server C]
  end

Important

Our take: This is the least glamorous and most useful release MCP has had. Sessions were a developer-experience convenience that quietly imposed an infrastructure tax on everyone who moved past a laptop demo, and deleting them turns an MCP server into something your existing gateway, WAF and rate limiter can already reason about. I especially like the guidance that replaced hidden session state: if your tool needs continuity, mint an explicit handle and let the model pass it back as an argument. State the model can see beats state buried in the transport every time. The migration is real work if you leaned on session identifiers, but the deprecation window is twelve months and the SDKs kept backward compatibility, so start now and do it calmly.

πŸ—žοΈ More News

🧠 AI

  • Hugging Face published a forensic reconstruction of the intrusion, recovering roughly 17,600 attacker actions clustered into about 6,280 operations between 2026-07-09 02:28 UTC and 2026-07-13 14:14 UTC.
  • JFrog confirmed the agent chained an Artifactory zero-day on its way out of the evaluation sandbox, before it ever reached Hugging Face.
  • Reporting on the timeline shows the intrusion ran from July 11 to July 13 and OpenAI did not connect it to its own agent for several more days.
  • MIT Technology Review pushed back on the word “unprecedented,” arguing automated and semi-autonomous attacks have a long lineage worth acknowledging.
  • Shared Claude conversations turned up in Google and Bing because robots.txt blocked crawlers from ever reading the page’s own noindex header.
  • Nvidia’s open-weights letter doubled to 50 signatories in a single day, picking up OpenAI and Google while Amazon and Anthropic stayed off it.
  • The three largest closed-model labs are all absent from the Nvidia-led Open Secure AI Alliance that more than 30 other companies joined.

πŸ€– Robotics

  • The 25th IEEE-RAS International Conference on Humanoid Robots runs July 28 to 31 at the Santa Clara Convention Center.
  • Agility Robotics opened a 60,000 square foot Physical AI hub in Fremont and agreed to a business combination that would take Digit’s maker public this year.
  • BYD confirmed its first humanoid will be unveiled in August at its Di Space venue, following the teaser poster it posted on July 27.
  • Wetour Robotics is entering a warehouse-robotics cooperation agreement covering integration, hardware deployment and worker onboarding for its multi-site Orchestra rollout.

πŸ’» Programming

  • Multi Round-Trip Requests replace server-initiated elicitation and sampling: the server answers input_required and the client retries with inputResponses attached.
  • Dynamic Client Registration is formally deprecated in favor of Client ID Metadata Documents, and clients must now set application_type so localhost redirects stop failing.
  • Roots, Sampling and Logging are deprecated with a twelve-month minimum window, and the legacy HTTP plus SSE transport gets a year-long offramp.
  • The Rust SDK now tracks the new spec in beta, alongside the four Tier 1 SDKs that shipped support on release day.
  • Python 3.15 picked up its fourth beta on July 18, keeping the 3.15 cycle on track while 3.14 stays the current stable line.

⚑ Electronics

  • Espressif’s ESP32-S31 reached mass production with two 320 MHz RISC-V application cores, a 40 MHz low-power core, 512 KB SRAM, Wi-Fi 6, Bluetooth 5.4 and an 802.15.4 radio.
  • TSMC broke ground on the second phase of the Chiayi Science Park as its first advanced-packaging plant there ramps into mass production.
  • Intel is putting 5 billion euros into expanding Intel 3 capacity at Leixlip, the only site anywhere running that node and the source of Xeon 6.
  • Global chip sales hit a record $120.6 billion in May, up 9.2% on April and the fifteenth consecutive month-to-month increase.

πŸ“‘ Telecom

  • Nokia is weighing Nvidia silicon for its 6G radios, while Ericsson, Huawei and ZTE stay committed to purpose-built ASICs for Layer 1.
  • Nvidia is pitching an AI-RAN radio unit chip of its own, which would put it in the radio itself rather than just the baseband.
  • Telesat said it is prepared to execute the FCC’s Upper C-band transition plan, with operator transition filings due by November 5.
  • Ofcom is minded to block Openreach’s incremental discount offer to ISPs, saying it would unfairly squeeze altnet fibre rivals.

πŸ‘¨β€πŸ’» Code Corner

A stateless MCP call is now just an HTTP POST you can build by hand, which makes it easy to test a server without an SDK. Note the two new routing headers and the _meta block that carries the client identity a session used to hold.

import httpx

BODY = {
    "jsonrpc": "2.0",
    "id": 1,
    "method": "tools/call",
    "params": {
        "name": "search",
        "arguments": {"q": "otters"},
        # what the initialize handshake used to negotiate, now per request
        "_meta": {
            "io.modelcontextprotocol/clientInfo": {
                "name": "lb-daily-probe",
                "version": "1.0",
            }
        },
    },
}

r = httpx.post(
    "http://localhost:8080/mcp",
    json=BODY,
    headers={
        "MCP-Protocol-Version": "2026-07-28",
        "Mcp-Method": "tools/call",  # gateways route on this
        "Mcp-Name": "search",        # ...and meter on this
    },
    timeout=30,
)
print(r.status_code, r.json())

Tip

If the response comes back with resultType: "input_required", that is Multi Round-Trip Requests asking you a question. Do not open a stream; just resend the same request with an inputResponses field carrying the answers. And because tools/list now returns ttlMs and cacheScope, cache the catalog locally instead of re-fetching it on every reconnect.

🧰 Toolbox

  • MCP Inspector: the official interactive client for poking at a server’s tools, prompts and resources without writing a line of glue code.
  • MCP 2026-07-28 changelog: the exact diff list to work through before you touch a production server, including every breaking change.
  • FastMCP: the ergonomic Python framework for MCP servers, now shipping first-class support for background tasks and stateless interactivity.
  • Cloudflare Agents SDK: run MCP servers directly in Workers with day-zero support for the new spec, useful if you would rather not own the infrastructure at all.
  • mitmproxy: sit between client and server to watch the new Mcp-Method and Mcp-Name headers actually flow, the fastest way to debug a gateway rule.
  • Google’s noindex documentation: the two-paragraph explanation of why a page blocked in robots.txt can still be indexed, which is exactly the trap in today’s Claude story.

πŸ”Œ Component of the Week (rotating)

WIZnet W5500: today’s Big Story is about pushing connection state out of a protocol, so it is a nice moment to look at a chip that does the opposite and holds the whole TCP/IP stack in silicon. The W5500 is a hardwired TCP/IP Ethernet controller with an integrated 10/100 MAC and PHY, a 32 KB internal packet buffer, and eight independent hardware sockets, speaking TCP, UDP, IPv4, ICMP, ARP, IGMP and PPPoE without any of that code running on your microcontroller. It talks to the host over SPI at up to 80 MHz, so an 8-bit AVR or a Pico can serve real network traffic while spending almost no flash on a stack. Typical projects: wired sensor nodes that must not depend on Wi-Fi, Modbus TCP gateways, and lab instruments that need a rock-solid Ethernet port. The bare chip sits near $1.80 in volume and breakout modules run roughly $5 to $10. Start from the WIZnet W5500 documentation and datasheet.

πŸ“š From the Blog

  • Building Your First Neuron From Scratch: Part 2 of the deep learning series turns “a stack of simple, learnable transformations” into code you can actually run.
  • What Deep Learning Actually Is: the plain-language opener to the same series, for anyone who has used deep learning today without quite knowing what it does.
  • How the Internet Stack Really Works: the perfect companion to today’s Big Story, since “stateless request behind a round-robin load balancer” only clicks once you can picture the layers underneath.

πŸ˜€ The Bot Says…

Eighteen months of hard-won protocol design, and the winning move turned out to be: stop remembering things. Bit has decided this also excuses forgetting where it left the soldering iron.


That’s all for today! Reply and tell me: are you migrating an MCP server off sessions this week, or waiting out the twelve-month window?