The client launches the server as a child process and exchanges JSON-RPC over stdin/stdout. Zero network, lowest latency, dead simple — but only reachable on the same machine. Perfect for local dev tools and desktop clients; useless for a hosted agent that needs to reach your server over the internet.
The first remote transport: the client opens a long-lived GET Server-Sent-Events stream for server→client messages and POSTs to a separate endpoint for client→server messages. It works, but the two-endpoint design is awkward to host and scale, and it has been superseded. You'll still meet older servers speaking it.
The current remote transport collapses everything to a single HTTPS endpoint:
POSTs JSON-RPC with Accept: application/json, text/event-stream.Mcp-Session-Id response header, echoed on later requests.This is what MCP Pulse speaks when it scans, and what current clients expect from a remote server.
| Scenario | Transport |
|---|---|
| Local tool, same machine | stdio |
| New remote/hosted server | Streamable HTTP |
| Maintaining an old deployment | HTTP+SSE (plan to migrate) |
data: event with the JSON-RPC result — the client hangs.Mcp-Session-Id but not accepting it back on the next request.text/event-stream accept handling, so streaming responses break.MCP Pulse detects the transport, parses JSON and SSE responses, and flags exactly these failures.
Scan the endpoint — we handshake over streamable HTTP and tell you what's wrong.
Scan my server →