MCP Servers Explained & Built
Video by Tech With Tim on YouTube · 30 min · uploaded September 2026
Notes and analysis by BrainTube, written from the video. Not affiliated with Tech With Tim. Watch on YouTube
In short
Tim explains that an MCP server is a program that hands a model a list of callable functions, then builds a Python notes server with FastMCP three times: local over stdio, remote over HTTP, and remote with OAuth sign-in and scopes. The explanation of transports and the auth flow is accurate and more complete than most tutorials. The auth half is a sponsored Descope demo, so it shows one vendor's console rather than the general pattern, and it skips several security checks a public server needs.
The argument
The video's claim is that MCP is simple and the hard part is not the protocol but access control. A model only ever asks for a tool call in text; the client runs it and returns the result. MCP standardises that plumbing so a tool written once works in Claude, Cursor, ChatGPT and other clients. Local servers over stdio are fine for personal use, but anything other people or other devices reach must run remotely over HTTP, and then every request has to answer who is calling, what they may do, and on whose behalf. A shared static API key cannot answer those questions. OAuth with scopes can, and the demo shows a remote server that keeps each signed-in user's notes separate.
Key ideas, with timestamps
- 0:33
The model never calls the tool
A tool is a name, a description and parameters. The model outputs text naming the tool it wants, your code runs it, and the result goes back as text. This framing is the right starting point because it explains why MCP is about the client and server, not the model.
- 2:46
Two transports
Locally, the client launches the server as a subprocess and pipes JSON over stdio, for example running a Python file directly. Remotely, the server has a URL and clients connect over HTTP, which is how hosted servers such as GitHub, Notion and Stripe work. He says remote is the option to prefer once other people or other machines need access.
- 4:25
Three questions per request
A remote server must know who is calling, what they are allowed to do, and who they act for. He cites security audits from this year finding about a quarter of public MCP servers have no authentication, with most of the rest on a static key. With one shared key you cannot tell five agents apart or revoke just one.
- 5:29
The OAuth flow in plain steps
The spec points to OAuth 2.1 with PKCE. An unauthenticated call gets a 401 plus the address of an authorization server; the user signs in and consents there; the client receives a token and sends it on every request. The server checks the signature, that the token was issued for this server, and the scopes inside it, such as notes read and notes write. At 7:44 he adds dynamic client registration, which lets clients register themselves.
- 12:06
FastMCP and docstrings
The local server is a few Python functions over a Postgres notes table, each decorated as a tool. FastMCP builds the tool list from them. At 13:13 he stresses that the docstring becomes the tool description and the type hints become the schema, so both directly affect how well the model uses the tool.
- 14:19
Wiring it into Cursor
For stdio, the Cursor config names the server, a command (uv) and arguments pointing at the script, and Cursor shows three tools: list, add and delete a note. At 16:33 one change to the run call switches the transport to streamable HTTP with a host and port, and the client config becomes a URL that must end in /mcp.
- 19:19
Why the open remote server is a problem
With the HTTP version running, anyone with the URL can list, add or delete notes, and notes are not tied to any user. This is the honest moment of the video: the tutorial most people copy stops here, and it is not safe to expose.
- 24:54
Scopes and per-user data
In the authenticated version, each tool reads the user ID from the token's claims and checks for the needed scope before acting, and each note stores its owner. At 25:59 Cursor fetches the server's protected resource metadata, opens a login and consent screen, and at 28:46 a second Google account sees no notes, which proves the isolation works.
What it gets right
The order of the lesson is good: explain tool calling, then transports, then auth, then build each step. Most MCP tutorials end with a stdio server and a config file, and the viewer leaves thinking they can put that on the internet. This one shows the open HTTP server at 19:19 and says plainly that it is unsafe.
The auth explanation is accurate. The server does not sign anyone in; it rejects unauthenticated calls and points to an authorization server. Checking that the token was meant for this server matters, because a token issued for another service should not work here. Scoping data by the token's user ID, not just checking scopes, is the step that actually protects one user's notes from another.
The docstring and type hint advice at 13:13 is practical. Tool descriptions are the main thing the model sees, and in FastMCP they come straight from your code.
What it leaves out
- The vendor is optional. From 19:52 to the end, the auth build is a sponsored Descope demo. Any OAuth 2.1 authorization server that supports the MCP flow can play that role. The pattern to learn is the protected resource metadata, the token audience check and the scope checks, not one console's buttons.
- CIMD goes unexplained. At 22:39 he enables CIMD without saying what it is. It refers to client ID metadata documents, a newer alternative to dynamic client registration in which a client identifies itself with a URL. Readers should check the current spec, because client registration has changed across revisions.
- Binding and HTTPS. The HTTP server binds to 0.0.0.0 in the demo. On a real host that should sit behind HTTPS, and a local test server should bind to localhost only.
- Token handling rules. A server that calls other APIs for the user should not pass the user's MCP token through to them; it should use separate credentials. The connections vault at 28:46 hints at this but does not say why.
- Prompt injection. Auth stops strangers. It does not stop a signed-in user's agent from being steered by text inside a note or web page into calling delete. Destructive tools deserve separate scopes and, ideally, confirmation in the client.
- The audit numbers. The quarter-with-no-auth figure at 4:25 is cited without a source on screen. Treat it as a rough signal, not a measured fact.
How this applies to memory across AI tools
His notes server is a small version of an MCP memory server: a store of notes that any client can read and write. The move from stdio to remote HTTP is the move that matters for memory, because a local server only exists on one machine, while a remote one lets Claude, ChatGPT, Cursor and other MCP clients share the same store from any device. His per-user scoping is what makes that store private.
If you would rather not build and secure one yourself, that is the role BrainTube plays: it saves YouTube videos with their transcripts, articles, PDFs and podcasts into one compiled knowledge base and exposes it as an MCP server that those clients can search. Either way, judge a memory server by the same checklist the video gives. For the concept, see what is an MCP memory server; for setup, see give your AI memory with MCP.
Who should watch it
Watch it if you write Python and want to go from zero to a remote MCP server with real sign-in in one sitting. The explanation from 0:33 to 8:16 is worth it even if you never build anything; developers can jump to 12:06 for FastMCP, 16:33 for the HTTP switch, and 24:54 for scope checks and per-user data. Know that 19:52 onward is a sponsored segment built on one vendor. Skip it if you already run remote servers with OAuth, or if you need TypeScript, deployment or hardening details beyond a local demo.
Frequently asked
- What is the difference between a local and a remote MCP server?
- A local server is launched by the client as a subprocess on your machine and talks over standard input and output. A remote server runs at a URL and clients connect over HTTP. Local is simpler for personal tools; remote is needed when other people, other devices or web-based clients must use it.
- Does a remote MCP server need authentication?
- Yes, if it can read or change anything that matters. Without it, anyone who finds the URL can call every tool. The MCP spec points to OAuth 2.1, where users sign in through an authorization server and the client sends a token whose scopes your server checks on every call.
- How do I build an MCP server in Python?
- Install a framework such as FastMCP, write normal Python functions, and mark each one as a tool. Docstrings become tool descriptions and type hints become the input schema, so write them carefully. Run it over stdio for local clients, or switch the transport to streamable HTTP to serve it at a URL.
Keep videos like this one searchable
BrainTube saves YouTube videos with their transcripts into one compiled knowledge base that Claude, ChatGPT, Cursor and other MCP clients can search.
Go deeper
More video notes
- MCP Explained Simply — What It Is and Why It Exists · TechWorld with Nana
- How Model Context Protocol (MCP) actually works · Google Cloud Tech
- MCP Tutorial: Build Your First MCP Server and Client from Scratch (Free Labs) · KodeKloud
- Model Context Protocol (MCP) Explained for Beginners: AI Flight Booking Demo! · KodeKloud
Are you the creator and want this page changed or removed? Contact us and we will act within 48 hours.