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.
Comparison table
| Transport | Config keys | Direction | Best for | Spec status |
|---|---|---|---|---|
| stdio | command + args | Client launches server | Local programs | Current standard |
| Streamable HTTP | url + "transport": "http" | Client connects to server | Hosted / remote servers | Current standard |
| SSE | url + "transport": "sse" | Client connects to server | Older remote servers | Deprecated |
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
- Local program → stdio.
- Hosted remote server → Streamable HTTP.
- Legacy remote server → SSE only if the server does not support Streamable HTTP.
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.