MCP Transports: stdio vs SSE vs Streamable HTTP

An MCP transport is the communication channel between an AI client and an MCP server. stdio is the default for most open-source MCP servers, Streamable HTTP is the current standard for remote servers, and SSE is deprecated by the MCP spec but still seen in older configs.

MCP transport comparison: stdio, Streamable HTTP, and SSEDiagram comparing three MCP transports. stdio uses command and args, is best for local programs, and is a current standard. Streamable HTTP uses url plus transport http, is best for remote servers, and is a current standard. SSE uses url plus transport sse, is best for older remote servers, and is deprecated by the MCP spec.TransportConfig it usesBest forSpec statusstdio"command" + "args"launches a local processLocal programsthe client starts the serverCurrent standardStreamable HTTP"url" + "transport": "http"connects to an HTTP endpointHosted / remote serversthe client connects to a URLCurrent standardSSE"url" + "transport": "sse"Server-Sent Events channelOlder remote serverslegacy endpoints onlyDeprecated
Visual comparison of the three MCP transports. stdio and Streamable HTTP are current standards; SSE is deprecated by the MCP spec.

Comparison table

TransportConfig keysDirectionBest forSpec status
stdiocommand + argsClient launches serverLocal programsCurrent standard
Streamable HTTPurl + "transport": "http"Client connects to serverHosted / remote serversCurrent standard
SSEurl + "transport": "sse"Client connects to serverOlder remote serversDeprecated

stdio

With stdio, the AI client starts a local process and exchanges JSON-RPC messages over its standard input and output. This is the default transport for most open-source MCP servers. The config only needs a command and an argument array.

{
  "mcpServers": {
    "filesystem": {
      "command": "npx",
      "args": ["-y", "@modelcontextprotocol/server-filesystem", "/Users/me/projects"]
    }
  }
}

Streamable HTTP

Streamable HTTP lets the client talk to a server over HTTP. Use this when the server is hosted elsewhere, such as on a cloud service or another machine. The config uses a full URL and sets transport to http.

{
  "mcpServers": {
    "hosted": {
      "url": "https://mcp.example.com/v1",
      "transport": "http"
    }
  }
}

SSE (deprecated)

SSE was an early remote transport that used Server-Sent Events for one-way streaming. The MCP spec has deprecated SSE in favor of Streamable HTTP. Some clients still accept it for backward compatibility, but new integrations should use Streamable HTTP.

{
  "mcpServers": {
    "legacy": {
      "url": "https://mcp-legacy.example.com/sse",
      "transport": "sse"
    }
  }
}

How to choose

Common transport mistakes

Setting transport on a stdio server

stdio servers use command and args; adding "transport": "stdio" is unnecessary and can confuse strict clients.

Forgetting http(s):// in a URL

Remote URLs must include the scheme. A bare host like example.com/mcp fails validation in every MCP client.

Mixing SSE and Streamable HTTP

The server and client must agree on the transport. Setting "transport": "http" against an SSE-only endpoint results in silent connection failures.

Frequently asked questions

What is the default MCP transport?

stdio is the default for most open-source MCP servers. The client launches a local command and communicates over standard input and output.

When should I use Streamable HTTP instead of stdio?

Use Streamable HTTP when the MCP server is hosted remotely and exposes an HTTP endpoint. The client connects to a URL instead of starting a local process.

Is SSE still supported?

SSE is supported by some older servers and clients, but it has been deprecated by the MCP spec in favor of Streamable HTTP. Prefer Streamable HTTP for new setups.

Why is my remote MCP server not connecting?

Check that the URL includes http:// or https://, that the transport value matches what the server speaks, and that firewalls or CORS rules allow the client to reach the endpoint.

Ready to build a config? Use the MCP Config Generator, or learn what an MCP config is.