initialize
initialize is the first request in an MCP connection. The client sends the protocol revision it wants plus its own name and version; the server replies with the revision it will actually use, its own identity, and its capabilities. Nothing else can be called until this exchange completes.
What is the initialize request?
initialize is the handshake. The client proposes a protocol revision and identifies itself, and the server answers with the revision it is going to use, a serverInfo block naming itself, and the capabilities it supports.
The client then sends a notifications/initialized notification to confirm, and only after that is the connection considered open.
What comes back in the response?
Three useful things: protocolVersion, which may not be the one you asked for, serverInfo with a name and version, and capabilities. Many servers also send an optional instructions string.
The server's name here is the server's own claim about itself, which is why a listing built from a handshake reports what the server said rather than what a directory typed. On 5 August 2026, 8 of the 14 servers we connected to also sent a non-empty instructions string.
Why is initialize worth understanding now?
Because it is scheduled to disappear. The 2026-07-28 revision removes the initialize handshake and Mcp-Session-Id entirely, moves client info into _meta on every request, and adds a server/discover method.
That is why our own implementation keeps the whole exchange behind a versioned seam rather than a helper per message: the difference between revisions is the shape of the conversation, not one field inside it.
Example
Our tester sent initialize to https://mcp.deepwiki.com/mcp on 5 August 2026 asking for revision 2025-11-25. The server answered on 2025-11-25, named itself "DeepWiki", and the connection proceeded to tools/list, which returned 3 tools. Against https://knowledge-mcp.global.api.aws the same request came back on 2025-03-26 instead, and the client has to accept that or hang up.