The transport decides how you install, run and secure a server.
A transport is the pipe that carries MCP messages between client and server. The messages are the same on every transport; only the delivery changes. The current spec defines two.
stdio (standard input/output). Every program has an input stream it reads from and an output stream it writes to; that is what a terminal uses. With stdio, the host starts the server program itself as a child process and talks to it by writing messages to its input and reading replies from its output, one JSON message per line.
- Used for local servers on your own machine.
- No network, no port, no URL. Installing it means telling the host the command to run.
- The server runs with your user's permissions, so only install servers you trust.
- Rule for server authors: never
print()to standard output, because that is the wire. Log to standard error instead.
Streamable HTTP. The server is a normal web service with one endpoint, for example https://example.com/mcp. The client sends each message as an HTTP POST. The server answers with plain JSON, or with an SSE stream (Server-Sent Events: a way to send several messages back over one HTTP response, useful for progress updates before the final answer).
- Used for remote, shared servers.
- Supports many users, needs authentication.
You may still see an older "HTTP+SSE" transport in old guides. It was replaced by Streamable HTTP in 2025 and is formally deprecated; don't build new servers on it.
Remember
- stdio: host launches the server locally and talks through its input/output
- Streamable HTTP: remote server, one /mcp endpoint, POST per message
- Never print to stdout in a stdio server
- The old HTTP+SSE transport is deprecated