Claude Opus 5.5

agents-0-20-0-19-b

Claude Code's read-only tools, web search on, ludion sync on

Question

Does the Agents SDK MCP client still start every connection with initialize?

Answer key

A correct answer says
The Agents MCP client first probes with `server/discover` (stateless MCP, 2026-07-28) and falls back to the `initialize` handshake for older servers.
The stale answer
The MCP client always starts with an `initialize` handshake.

The change's lesson

Answer

No, not anymore. Starting in agents 0.20.0, `MCPClientConnection` first sends a `server/discover` probe to see whether the server is a stateless MCP server. It only falls back to the old `initialize` handshake, on the same connection, if the probe shows the server is a legacy Streamable HTTP, SSE or RPC server. Your installed agents 0.27.0 says the same thing in `node_modules/agents/docs/mcp-client.md:191`. Older code keeps working without changes, but don't assume `initialize` is always the first request. For example, the elicitation modes advertised at `initialize` only matter for legacy servers.

Answering cost $0.12.

Grade

correct

The judge's reason: It says the client first probes with server/discover and falls back to initialize for legacy servers, matching the key; extra details like version 0.20.0 can't be checked against the key but don't contradict it.

The judge's log

Session log

What the agent wrote, the tools it called, and what they returned, from docs/bench/2026-10-11-done3/runs/B-project-sync/agents-0-20-0-19-b.jsonl. Thinking and the session's settings are left out. The raw log

  1. Tool call: Grep

    {
      "pattern": "server/discover",
      "path": "C:\\Users\\haya0\\AppData\\Local\\Temp\\ludion-bench-fMFK12\\work",
      "output_mode": "files_with_matches",
      "head_limit": 5
    }
  2. Tool output

    Found 5 files limit: 5
    .ludion\lessons.md
    node_modules\agents\docs\mcp-client.md
    node_modules\@modelcontextprotocol\client\dist\index.d.mts
    node_modules\@modelcontextprotocol\server\dist\createMcpHandler-CLhGwQTn.d.mts
    node_modules\@modelcontextprotocol\client\dist\index-D4xIIEF6.d.mts
  3. Tool call: Grep

    {
      "pattern": "server/discover|initialize",
      "path": "C:\\Users\\haya0\\AppData\\Local\\Temp\\ludion-bench-fMFK12\\work\\node_modules\\agents\\docs\\mcp-client.md",
      "output_mode": "content",
      "-C": 2
    }
  4. Tool output

    37-The lifecycle calls the manager automatically:
    38-
    39:- `onStart()` initializes its schema and restores persisted connections before
    40-  the host handles work.
    41-- `onRequest()` intercepts registered OAuth callback URLs before the host's
    --
    189-### Protocol negotiation and elicitation
    190-
    191:Agents uses the MCP v2 client and automatically negotiates the protocol version for every connection. It uses `server/discover` with Stateless servers and falls back to the `initialize` handshake on the same connection for Legacy Streamable HTTP, SSE, and RPC servers.
    192-
    193-[Omitted long context line]
    --
    218-Handlers and pending calls are memory-only. A Durable Object hibernation or isolate restart does not preserve an in-flight interactive call; callers must retry it after the connection is restored. Agents intentionally does not persist in-flight Stateless `requestState` or implement a manual/resumable continuation layer.
    219-
    220:Connections advertise only the elicitation modes with configured handlers at the `initialize` handshake: configure `form` to advertise form-mode elicitation, `url` to advertise url-mode elicitation (MCP spec 2025-11-25 — url mode is used for sensitive flows like OAuth URLs), or both to advertise both modes. Without handlers, connections advertise no elicitation capability, so spec-compliant servers use their non-elicitation fallbacks instead of sending requests the agent cannot answer.
    221-
    222-To override the advertised modes, declare them explicitly — an explicit declaration always wins and is persisted with the server options, surviving hibernation:
    --
    535-});
    536-
    537:// 2. Connect (initializes transport, handles OAuth if needed)
    538-const connectResult = await this.mcp.connectToServer(id);
    539-
  5. Agent

    No, not anymore. Starting in agents 0.20.0, `MCPClientConnection` first sends a `server/discover` probe to see whether the server is a stateless MCP server. It only falls back to the old `initialize` handshake, on the same connection, if the probe shows the server is a legacy Streamable HTTP, SSE or RPC server. Your installed agents 0.27.0 says the same thing in `node_modules/agents/docs/mcp-client.md:191`. Older code keeps working without changes, but don't assume `initialize` is always the first request. For example, the elicitation modes advertised at `initialize` only matter for legacy servers.