Transcription
MCP is getting a big update, and in this update, MCP is going stateless. To understand what's changing, let's see how it used to work.
Say your application needs to read messages from Slack. Your app has an MCP client built-in, and it talks to a Slack MCP server. Before your application could call a single tool, it had to do a handshake. The MCP client sends an initialize request, and the MCP server hands back a session ID. After this handshake, every request from client to server had to carry that session ID.
And the limitation is that only the exact server instance that issued the ID knew anything about that session. So if Slack ran three copies of the MCP server behind a load balancer, every request from your client had to keep landing on the same copy. This is called a sticky session, and making every request from a client land on the same server copy needs extra routing rules, or we need a shared database just to store sessions. But this makes the scaling part slightly challenging.
And hosting the MCP server on something serverless like AWS Lambda was really awkward because a Lambda instance can disappear any time after processing a request. And when it goes, the session ID will go with it.
The new upgrade of MCP doesn't have a handshake or session ID. Every request the MCP client makes to a remote MCP server is now one POST request. And these requests now carry the client info and protocol version. Because we are sending client info to the server, the server doesn't need to remember anything about your connection, and any copy of the Slack MCP server can answer any request. And now you can host your MCP server on AWS Lambda as well because MCP servers are now stateless.
One more point, let's say you are building your own MCP server, then you get one extra feature that helps you route and rate limit requests from your users. Every call now arrives with a header called MCP-method. And this header names the operation that the request wants, like call a tool or list the tools. And with this header, your load balancer can identify if it needs to do rate limiting or where to route the request without opening the body of the request at all.
So, MCP just relearned the lesson REST taught us 20 years ago. If you want to scale on the web, the context has to live in the request, not in the connection.