Try this first

Look at what stdio_client did: it started python3 notes_server.py as a subprocess of
your agent.

That has a consequence people miss. The server runs on your machine, as your user, with your
permissions, and it dies when your agent does.

The two transports

stdio HTTP
Where the server runs Your machine, as a subprocess Anywhere
Who starts it Your client Already running
Lifetime Dies with the client Long-lived
Users One Many
Authentication None — it is already you Needed
Good for Local files, git, databases on your box Hosted services, shared teams

stdio is the right default for local work

If the server touches your machine — your files, your git repo, your local database — stdio is
correct. There is no network, no port, no auth to configure, and no way for anyone else to
reach it.

The lifetime property is genuinely useful: one client, one server process, no shared state to
get confused about, and everything is cleaned up when you exit.

HTTP is for servers you did not start

A hosted service cannot be a subprocess of your agent. It is running somewhere, serving many
clients, and it needs to know who you are.

That last point is the real difference. With stdio, authentication is meaningless — the server
is already running as you. With HTTP, every request needs credentials, and you now have a
secret to store, rotate, and keep out of your transcript.

That is not a small step up in complexity. It is most of the reason hosted MCP has more moving
parts than local MCP.

The security shift

Worth stating plainly, because it changes what you are responsible for:

stdio: the server has your permissions. Its capabilities are bounded by your account, and
you are trusting the server’s code the way you trust anything you pip install.

HTTP: you send a credential to somebody else’s machine, and their server acts on your
behalf. You are trusting their code, their operations, and their retention policy. What you
send them leaves your machine.

Neither is safer in the abstract. They fail differently, and you should know which failure you
are signing up for.

Choosing

A short decision:

  • Does it touch the machine the agent runs on? → stdio
  • Do you run it yourself, for yourself? → stdio
  • Is it a service for many people? → HTTP
  • Did somebody else already host it? → HTTP, and you had no choice

Most servers you write will be stdio. Most servers you consume from vendors will be HTTP.

stdio means the server is you. HTTP means the server is someone else, and everything about
credentials and trust follows from that one difference.

Try this before the next lesson

Look at the MCP servers you already have configured, in whatever agent tool you use. For each,
work out which transport it uses and what permissions it therefore has.

If any of them is stdio and you have not read what it does, that is a pip install you made
without looking.