Skip to content

Transport Types — How MCP Servers Communicate

We know what MCP servers do (Topic 12). Now let's learn how they talk to Copilot — the delivery method for those kitchen orders.


The Cloud Café Order System Analogy 📋

Your café has two ways to get orders to the kitchen:

Transport Type Café Analogy How It Works
stdio 🗣️ Shouting through the kitchen window Copilot starts the MCP server on your machine and talks to it directly
HTTP 📱 Phoning in an order from another location Copilot sends requests over the network to an MCP server running somewhere else

🗣️ stdio — "Shouting Through the Window"

stdio stands for Standard Input/Output — it's the most basic way two programs talk on the same computer.

How It Works

Copilot starts the MCP server → they talk directly through a pipe
   (like two tin cans connected by a string 🥫———🥫)
  • Copilot starts the MCP server process on your machine
  • They communicate through a direct channel (stdin/stdout)
  • When you close Copilot, the MCP server stops too
  • No network, no internet needed between them

Your MCP Servers Both Use stdio!

Server Command That Runs Transport
m365-admin-graph node server.js on your PC stdio
azure npx @azure/mcp@latest on your PC stdio

Both run on your laptop, and Copilot talks to them like coworkers sitting at the same desk.

stdio is the Default

Most MCP servers you'll encounter use stdio. It's simple, fast, and secure because everything stays on your machine. If you're configuring an MCP server and it doesn't mention transport type — it's probably stdio.


📱 HTTP (Streamable) — "Phoning In from Outside"

Sometimes the kitchen isn't in the same building. Maybe Cloud Café has a central bakery across town that makes all the pastries.

How It Works

Copilot → sends request over the internet → MCP server in the cloud
   (like placing a delivery order via phone 📞)
  • The MCP server runs somewhere else (cloud, another machine, a server room)
  • Copilot connects to it via a URL (like https://mcp.cloudcafe.com)
  • The server can be always on, serving multiple users
  • Needs authentication (can't let anyone phone in orders!)

When Would You Use HTTP?

Scenario Why HTTP?
MCP server running in Azure It's not on your laptop
Shared team MCP server Multiple people need access
Always-on service Needs to be available 24/7
Mobile or web apps Can't run local processes

Cloud Café Example

  • stdio: Dakota (trainee barista) uses Copilot CLI on her laptop → MCP server runs on her laptop → talks to the café database (personal, local)
  • HTTP: All café staff use a shared MCP server hosted in Azure → any device, any time (shared, cloud, always available)

Side-by-Side Comparison

Feature stdio 🗣️ HTTP 📱
Where it runs Your machine Anywhere (cloud, server)
Speed ⚡ Fastest (no network delay) 🌐 Slight delay (network hop)
Setup difficulty Easy — just configure and go More work — needs hosting, URL, auth
Security Very safe (stays local) Needs authentication (API keys, OAuth)
Availability Only when your PC is on Can be 24/7
Who can use it Just you, on your machine Multiple people / devices
Your servers ✅ Both of yours use this ❌ None yet
Café analogy Kitchen in the café Bakery across town

📟 SSE — The Older Phone

You might see SSE (Server-Sent Events) mentioned in MCP documentation or tutorials online.

Think of SSE as the older phone model 📟 — it worked fine for calling in orders, but HTTP Streamable is the newer smartphone 📱 that replaced it. Same idea, better technology.

SSE is Legacy

If you see "SSE" in MCP docs, just know it's the older version of HTTP transport. New MCP servers use "Streamable HTTP" instead. Both mean "over the network" — the newer one is just more efficient.

Think of it like: Dial-up internet (SSE) vs Fibre broadband (HTTP Streamable). Both get you online, but one is clearly better!


How Transport Appears in Your Config

Here's what your mcp-config.json looks like with different transport types:

stdio (what you have now)

{
  "mcpServers": {
    "my-server": {
      "type": "stdio",
      "command": "node",
      "args": ["server.js"]
    }
  }
}

HTTP (what a cloud server looks like)

{
  "mcpServers": {
    "cloud-server": {
      "type": "http", 
      "url": "https://mcp.cloudcafe.com/sse",
      "headers": {
        "Authorization": "Bearer your-api-key"
      }
    }
  }
}

Don't worry about memorising this

When we do the hands-on exercise, you'll see exactly how this config works. For now, just know that stdio = local and HTTP = remote — and the config file tells Copilot which one to use.


Quick Summary

Transport One-liner When to Use
🗣️ stdio Same machine, direct talk Personal use, local MCP servers (what you have now)
📱 HTTP Over the network Cloud hosting, shared/team servers
📟 SSE Older version of HTTP Legacy — being replaced by HTTP Streamable

💡 Remember: Transport type is just the delivery method. Whether you shout through the window or phone it in, the kitchen (MCP server) cooks the same food. The what doesn't change — only the how it gets there.