Your client picked an era. Your servers picked another.
MCP protocol revisions are not always backward compatible. A client can upgrade before the servers it connects to, even when you control neither side.
The 2026-07-28 revision replaced the handshake, removed sessions, and is not backward compatible in either direction.
today
same era → ok
different era → fails
through ray.run
every combination → ok
Neither end is yours to fix.
You cannot patch a client you do not ship or a server you do not maintain.
Keeping your own dependencies current does not settle it either. SDKs may ship different protocol defaults, so updating dependencies alone does not guarantee compatibility.
One endpoint, two independent sides.
ray.run answers each client using its protocol version and connects to each upstream using the version that server supports. Your endpoint URL stays the same.
Translation must preserve catalog completeness. A gateway should not report a partial set of tools as complete because a client and server speak different revisions.
Test any gateway with clients from both protocol eras and compare the tool counts.