Transport
The same list_tools call can travel on stdio or HTTP. Choosing the road changes latency, security, and who can connect.
stdio is walking to your kitchen. HTTP is ordering delivery. The meal (JSON-RPC) is the same; the path is not.
Visual Workflows
Start here — scroll inside each diagram frame to explore, then use + / − to zoom up to 200% if needed.
Overview
Scroll inside the frame to explore · use + / − to zoom up to 200%
Scroll inside the frame to explore · use + / − to zoom up to 200%
Decision
Scroll inside the frame to explore · use + / − to zoom up to 200%
If only your laptop should see it, stdio. If the team should share it, HTTP.
Key Takeaways
- 1.Transport is the road — the JSON-RPC messages on top stay the same. stdio is a driveway: local process, stdin and stdout, one line per message.
- 2.Streamable HTTP is the highway: one URL, remote, needs TLS and auth. Pick stdio for files on disk; pick HTTP when the team shares a server.
- 3.Older remote setups used SSE (server-sent events) plus HTTP POST. New servers should use Streamable HTTP.
- 4.Do not mix: a stdio server is not reachable at a URL unless you add a gateway.
Learn elsewhere
- →Building and testing a server — next module
- →OAuth on HTTP — previous module
Real Example
Scenario
Filesystem MCP uses stdio. A company Notion server uses Streamable HTTP behind an API gateway with OAuth.
What you would do
In Model Context Protocol, apply Transport to this scenario: Filesystem MCP uses stdio. Identify the inputs, run the technique, validate the output, and note one thing you would monitor in production.
Commands
Commands to Remember
stdio = local, one JSON-RPC lineStreamable HTTP = remote URLSSE is the older remote optionMessages are JSON-RPC either way
Cheat Sheet
Quick recap
quick ref- •Transport ≠ protocol features
- •stdio for local, HTTP for shared
- •stdout is sacred on stdio
- •HTTP needs auth and timeouts
Common Mistakes
- ✕Expecting a stdio server to have a public URL
- ✕Using stdout for logs on stdio
- ✕Treating SSE and Streamable HTTP as the same code path
