Skip to content

Windows: http-first initialize hangs 60s with no response; same server works on macOS and via a POST-only client #296

Description

@istefox

Summary

On Windows, Claude Desktop via mcp-remote 0.1.37 (transport strategy http-first) sends initialize to a StreamableHTTP server, gets no response, and times out after 60 seconds with MCP error -32001: Request timed out. The same server config answers an initialize from mcp-remote 0.1.37 in a few milliseconds on macOS, and a POST-only client answers fine against the same server on the same Windows machine. The hang also reproduces against a second, unrelated MCP server on that machine. This points at mcp-remote on Windows rather than any single server.

Reported downstream at istefox/obsidian-mcp-connector#300, which has the full user logs.

Environment (reporter, Windows)

  • mcp-remote 0.1.37
  • Claude Desktop 1.12603.1
  • Node.js under Program Files\nodejs, launched via cmd /c npx -y mcp-remote URL --header "Authorization: Bearer ..."
  • Server: stateless MCP server (StreamableHTTPServerTransport, sessionIdGenerator: undefined, enableJsonResponse: true), returns 405 on GET so the SSE stream is skipped.

Client initialize payload (from Claude Desktop)

{"method":"initialize","params":{"protocolVersion":"2025-11-25","capabilities":{"extensions":{"io.modelcontextprotocol/ui":{"mimeTypes":["text/html;profile=mcp-app"]}}},"clientInfo":{"name":"claude-ai","version":"0.1.0"}},"jsonrpc":"2.0","id":0}

Windows mcp-remote output (hang)

Using transport strategy: http-first
Connected to remote server using StreamableHTTPClientTransport
Local STDIO server running
Proxy established successfully between local STDIO and remote StreamableHTTPClientTransport
[Local→Remote] initialize
[Local→Remote] notifications/cancelled
Shutting down...

No [Remote→Local] 0 ever appears. 60 seconds elapse between initialize and notifications/cancelled.

What I could and could not reproduce

On macOS (Node 22.23.0), with the same mcp-remote 0.1.37 and a minimal server matching the config above, the handshake completes:

[Local→Remote] initialize
[Remote→Local] 0
{"jsonrpc":"2.0","id":0,"result":{...}}

in about 3 ms. I do not have a Windows machine to reproduce on, so the Windows logs are from the downstream reporter.

Ruled out

  • Not the server: a POST-only client works against it on the same Windows box, and macOS works through mcp-remote.
  • Not one server's code: the same hang appears on a second, unrelated server on the same machine.
  • Not the protocol version: 2025-11-25 negotiates fine on macOS.

Ask

Is this a known issue with http-first on Windows? Is there anything in how the StreamableHTTP POST response is read on Windows (keep-alive, chunked read, undici) that would explain a 60-second no-response on initialize specifically? I am happy to run a debug build or capture more on the reporter's machine. A minimal macOS repro (server plus driver) is available on request.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions