El Muro Stateful: Por Qué MCP No Escalaba
Cuando el Model Context Protocol (MCP) se lanzó a finales de 2024, era elegante — pero construido para un solo cliente hablando con un solo servidor en una máquina local. El transporte original dependía de sesiones stateful: un handshake initialize, un header Mcp-Session-Id y estado persistente en el servidor.
Ese diseño colapsa bajo cargas cloud-native. Cuando despliegas servidores MCP detrás de un load balancer, el session pinning significa que la petición de un usuario siempre debe enrutarse al mismo pod — o recibes errores 400 Session Not Found. La escala horizontal, los despliegues continuos y las funciones serverless simplemente no funcionan con sesiones fijas.
Google chocó contra esa pared al escalar MCP en su infraestructura cloud. El fix no fue un parche — fue un rediseño a nivel de protocolo. La especificación MCP release candidate 2026-07-28 elimina la gestión de sesiones a nivel de transporte por completo. Es el cambio más grande en la spec desde el lanzamiento de MCP, y es un cambio bueno.
En resumen: si estás construyendo agentes de IA para producción, esta actualización es tu boleto a la escalabilidad real.

Qué Cambió Realmente: De Handshakes a Peticiones Autodescriptivas
Antes: El Handshake Stateful (2025-11-25)
Cada conexión requería un setup de sesión:
// POST /mcp - Handshake legado 2025-11-25
{
"jsonrpc": "2.0",
"id": 1,
"method": "initialize",
"params": {
"protocolVersion": "2025-11-25",
"capabilities": {},
"clientInfo": {
"name": "my-app",
"version": "1.0"
}
}
}
El servidor respondía con un header Mcp-Session-Id que debía incluirse en cada petición subsiguiente. ¿Sin session ID? Sin acceso.
Después: Peticiones Stateless y Autodescriptivas (2026-07-28)
El handshake initialize se fue. El header Mcp-Session-Id se fue. En su lugar, cada petición lleva su propia versión del protocolo, info del cliente y capacidades en un campo _meta:
POST /mcp HTTP/1.1
Host: mcp-server.example
MCP-Protocol-Version: 2026-07-28
Mcp-Method: tools/call
Mcp-Name: search
Content-Type: application/json
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "search",
"arguments": {
"q": "nutrias"
},
"_meta": {
"io.modelcontextprotocol/protocolVersion": "2026-07-28",
"io.modelcontextprotocol/clientCapabilities": {},
"io.modelcontextprotocol/clientInfo": {
"name": "my-app",
"version": "1.0"
}
}
}
}
Cada petición ahora es independiente. Cualquier instancia del servidor puede procesarla. Ese es el núcleo del cambio: el estado pasa de la capa de transporte a la capa de aplicación.
Headers HTTP: Haciendo el Tráfico Enrutable
El SEP-2243 introduce headers HTTP estándar que reflejan el cuerpo JSON-RPC:
Mcp-Protocol-Version: versión del protocoloMcp-Method: el método JSON-RPC (ej.:tools/call)Mcp-Name: la herramienta, prompt o recurso específico
Los proxies, gateways y load balancers ahora pueden enrutar y limitar tráfico sin inspeccionar el cuerpo de la petición. Si los headers y el cuerpo no coinciden, el servidor rechaza con un error de mismatch -32020.
Operaciones Largas: Tasks Extension
¿Y qué hay de las llamadas a herramientas que tardan 30 segundos — como un backup de base de datos o un reembolso? El modelo viejo mantenía la conexión abierta. La nueva spec devuelve un taskId inmediatamente y procesa en background:
// Ejemplo: Iniciando una task asíncrona en un servidor TypeScript
server.tool(
"process_refund",
{ orderId: z.string(), amount: z.number() },
async ({ orderId, amount }) => {
const taskId = randomUUID();
// Almacena el estado inicial de la task en un datastore compartido (ej.: Redis)
await setTaskState(taskId, { status: "trabajando" });
// Procesa el reembolso asíncronamente en background
processRefundAsync(taskId, orderId, amount);
// Devuelve inmediatamente para mantener la conversación fluyendo
return {
content: [
{
type: "text",
text: JSON.stringify({
taskId,
status: "trabajando",
message: `Reembolso de ${amount} para el pedido ${orderId} está procesándose. Task ID: ${taskId}`
})
}
]
};
}
);
El cliente hace polling con tasks/get o se suscribe vía tasks/update. Se acabaron las colas de conexión.
Mejoras de Seguridad Que Debes Conocer
La spec añade un parámetro iss en las respuestas de autorización para prevenir session hijacking. El soporte de JSON Schema ahora incluye oneOf, anyOf, allOf y definiciones locales de $ref para validación más estricta.
También hay una política formal de deprecación: las features pasan por Active → Deprecated → Removed con una ventana mínima de 12 meses. Tres features entran en deprecación hoy, incluyendo stderr para conexiones stdio — usa OpenTelemetry en su lugar.
![]()
Migración: Qué Necesitas Hacer Hoy
Los cuatro SDKs Tier-1 (TypeScript, Python, Go, C#) tienen releases beta que soportan la spec 2026-07-28. Empieza a probar en staging ahora.
Python: La API del decorador MCPServer es totalmente compatible.
pip install "mcp[cli]==2.0.0b1"
TypeScript: El v2 reemplaza el monolítico @modelcontextprotocol/sdk con paquetes modulares:
npm install @modelcontextprotocol/server@beta
npm install @modelcontextprotocol/client@beta
Usa el codemod para renames de API (como .tool() → registerTool):
npx @modelcontextprotocol/codemod@beta v1-to-v2 .
Limitaciones y Precauciones
Esta spec es un release candidate, no final. La ventana de deprecación de 12 meses significa que clientes y servidores viejos coexistirán — prueba la interoperabilidad con cuidado. Además, la gestión de estado va a tu capa de aplicación: ahora necesitas Redis o similar para el estado de las tasks, lo cual es una carga operacional nueva.
Siguientes Pasos
Si estás desplegando agentes a escala, esta es la luz verde. El core stateless hace que el load balancing sea aburrido, el autoscaling fluido y el MCP serverless una realidad. Empieza con los betas de los SDKs, actualiza tus tool servers y prueba el enrutamiento de tu gateway con los nuevos headers. Para más patrones de despliegue seguro, checa esta guía sobre progressive rollouts con feature flags. Y si también estás siguiendo el ecosistema Python, mira las novedades de Python 3.14.3.

Conclusión
MCP acaba de crecer. La spec 2026-07-28 lo transforma de una capa de integración local prometedora a la infraestructura abierta y fundamental para aplicaciones de IA enterprise. La sesión ha muerto — larga vida a la petición stateless.
Tu jugada: toma un servicio no crítico, migra al SDK beta y haz deploy detrás de un load balancer HTTP estándar. La diferencia será inmediata.