learn-mcp-with-phoebe / Builder session 1 of 8
Learn MCP with Phoebe · Builder track · Session 1 of 8

What MCP actually is

Model Context Protocol is the USB-C port of AI: one open standard that lets any AI app talk to any tool or data source. Before you write a line of server code, you will watch the protocol itself - real JSON-RPC messages, one step at a time, in your browser. By session b8 you will have built, connected, secured, and published a full MCP server for Daybreak, the coffee-subscription brand you may remember from the SQL course.

🟢 Builder track Practitioners: DE · DS · AI engineers · builders Python · spec 2025-11-25 Start here
0-3 · Welcome 3-18 · The problem + architecture 18-42 · Build-along: read the wire 42-45 · Q&A
Part 0

How this track works

Eight sessions, one running project: the Daybreak MCP server - a Python server that gives any AI app safe access to a coffee brand's sales, subscriptions, catalog, and ops playbooks. Tonight you learn what the protocol actually says on the wire. By b2 you are writing the server, b5 the client, b6 you deploy it remotely, b7 you secure it, b8 you publish it to the official registry. Every session ships a working artifact.

Live - presented in session Self-study - read after class ▶ Live MCP wire - step through real messages Official sources covered
★ What you walk out with today The one-sentence pitch for MCP (and why every major AI vendor adopted it), the host / client / server architecture in your head, all six primitives mapped - three the server offers, three the client offers - and the ability to read a raw MCP conversation message by message, which most people who "use MCP" cannot do.
Part 1 · covers official "What is MCP", DLAI "Why MCP", HF Unit 1 intro

The N x M problem MCP kills 6 min live

Before MCP, every AI app that wanted to reach your database, your files, or your ticket system needed its own custom integration - and so did every other AI app, for every other tool. M apps times N tools = M x N connectors, all slightly different, all breaking separately. MCP replaces that grid with one protocol: apps implement it once, tools implement it once, everything interoperates.

BEFORE - every pair, its own connector Claude ChatGPT Your app Database Files Tickets 3 apps x 3 tools = 9 connectors. At enterprise scale: hundreds. AFTER - one protocol in the middle Claude ChatGPT Your app MCP Database Files Tickets 3 + 3 = 6 implementations of ONE standard. Add a tool once, every app gets it. The same move USB-C made for cables and HTTP made for the web: standardize the plug, not the devices. MCP shipped Nov 2024; by 2026 it is Linux Foundation governed with ~97M monthly SDK downloads.
🔍 Click to zoom - the integration grid MCP collapses
LiveWhy "just use the API" stopped scaling3 min▶

Every tool already has an API - so why a new protocol? Because the AI app cannot know, at build time, which tools YOU will need at run time. Traditional integrations are compiled in by the vendor. MCP flips it: the app discovers what a server offers at runtime (you will watch tools/list do exactly this in a minute), so anyone can extend any AI app without touching the app's code.

  • Discovery over hardcoding: servers describe their own capabilities; hosts adapt on the fly.
  • Standard messages: every request and reply is JSON-RPC 2.0 - one grammar for every integration.
  • Separation of trust: the host app stays in control of what the model may touch - the server never reaches in.
Real world

The connector team that disappeared. A fintech's platform team maintained 23 bespoke "AI plugin" integrations - each with its own auth, retry logic, and breakage schedule. After moving to MCP servers, new integrations became config, not code: point the host at a server URL, approve the scopes, done. The team now maintains servers (their domain logic), not glue.

Self-studyWho owns MCP now - and why that matters2 min read▶

Anthropic open-sourced MCP in November 2024, and in December 2025 donated it to the Agentic AI Foundation under the Linux Foundation, with OpenAI and Block as co-founders. Changes now flow through a public SEP process (like Python's PEPs). Translation for you: MCP is not a vendor lock-in bet - OpenAI adopted it in March 2025, Google DeepMind in April 2025, Microsoft across Copilot and VS Code.

  • Spec versions are dates: current is 2025-11-25; the next revision lands 2026-07-28 (this course flags every change it brings).
  • Ten official SDKs: Tier 1 = TypeScript, Python, C#, Go. This track uses Python.
  • An official registry (since Sept 2025) lists ~10k active servers - you publish yours there in b8.
Part 2 · covers official "Architecture overview", DLAI "MCP Architecture", Academy "Introducing MCP"

Host, client, server - who is who 6 min live

Three roles, constantly confused, worth getting exactly right tonight. The host is the AI application the human uses (Claude Desktop, Claude Code, your chatbot). Inside it, the host runs one client per connection. Each client talks to exactly one server - the program that exposes tools and data. Host contains clients; clients pair with servers; 1:1 each.

HOST - the AI app the human uses Claude Desktop · Claude Code · your chatbot MCP client 1 MCP client 2 one client per server connection daybreak-mcp · local · stdio github-mcp · remote · HTTP stdio: server runs on YOUR machine, messages over stdin/stdout Streamable HTTP: server runs anywhere, messages over plain HTTP POST Two transports total. The old HTTP+SSE transport was deprecated in March 2025 - if a tutorial teaches it, close the tab.
🔍 Click to zoom - the three roles and the two transports between them
LiveThe wire itself: JSON-RPC 2.0, three message shapes5 min▶

Everything between client and server is JSON-RPC 2.0: a request (has an id, expects a reply), a response (carries the same id back, with result or error), or a notification (no id, fire-and-forget). That is the entire grammar. Step through a real session opening below - press Next and read each message before advancing.

Changes 2026-07-28 The next spec revision makes the core stateless: this handshake disappears and capabilities travel in _meta on each request instead. We teach the current spec (2025-11-25) and flag every such change - b8 walks the full delta.
Self-studystdio vs Streamable HTTP - when each3 min read▶

You will build both in this track. The decision is simpler than it looks:

  • stdio - the host launches your server as a subprocess and pipes JSON over stdin/stdout. Zero network, zero auth to design, perfect for personal and local tools. Daybreak starts here in b2.
  • Streamable HTTP - your server is a web service; clients POST messages to one endpoint, and the server may stream responses. This is how teams and products ship MCP - b6 moves Daybreak onto it.
  • Rule of thumb: your machine only → stdio. Anyone else, ever → Streamable HTTP.
Part 3 · covers official "Understanding servers/clients", DLAI lessons 5-8 concepts

Six primitives: three each way 6 min live

Everything MCP can do is six capabilities. The server offers three - tools, resources, prompts. The client offers three back - sampling, roots, elicitation. The pattern to memorize is who controls each: tools are for the model, resources are for the app, prompts are for the user.

THE SERVER OFFERS Tools actions · model-controlled Resources context · app-controlled Prompts templates · user-controlled query_sales, top_products the catalog, refund policy /monthly_report for March THE CLIENT OFFERS BACK Elicitation server asks the user mid-task Sampling server borrows the host's LLM Roots which folders the server may see Heads-up: sampling and roots are deprecated in the 2026-07-28 revision. Elicitation stays - b7 builds with it.
🔍 Click to zoom - the complete MCP capability map, with who controls what
LiveTools - discovery, then action5 min▶

Tools are the primitive you will use most. Two methods carry everything: tools/list (what can you do?) and tools/call (do it). Watch discovery first - notice each tool ships a JSON Schema so the model knows exactly what arguments to supply.

The descriptions you see are not documentation garnish - they are the interface the model reads to decide what to call. Writing them well is half of server craft, and b2 drills it.

LiveResources and prompts - context and playbooks4 min▶

Tools act; resources inform. A resource is read-only content with a URI - Daybreak's catalog, its refund policy - that the app attaches to conversations. Prompts are server-authored templates the user picks explicitly, slash-command style. Different control, different primitive: model → tools, app → resources, user → prompts.

Self-studyThe client-side three, honestly3 min read▶

Most intros skip the client-side primitives; most older courses teach two of them as if they were forever. The honest 2026 picture:

  • Elicitation (since 2025-06-18): the server pauses and asks the user a structured question - "which store?". Alive, growing, and in b7 you build with it.
  • Sampling: the server asks the host's model to complete a prompt, so servers do not need their own API keys. Clever, rarely implemented by hosts - and deprecated 2026-07-28.
  • Roots: the client tells the server which directories it may touch. Also deprecated 2026-07-28.

We teach you to recognize all three on the wire, and to build only on the one with a future.

Demo 1 of 2

Read a full tool call, message by message ★ 12 min · everyone reads the wire

A user asks Daybreak's assistant: "How did March look - is the dip real?" Here is every message that puts the answer on screen. Step through it and say each message's job out loud - if you can narrate this exchange, you understand MCP better than most people shipping servers.

Step the handshake box in Part 2 again if you skipped it - sessions start there, versions and capabilities agreed.

Step the tools/list box in Part 3 - the host discovers query_sales and hands the model its schema.

Now step tools/call below - the model filled store and week from the user's question; the server does the work and returns content.

Find the id fields pairing each request to its response. Requests have ids; the notifications/initialized message did not. That distinction is the whole message grammar.

Real world

Why wire-literacy pays. When an MCP integration misbehaves in production, the difference between a 10-minute fix and a lost afternoon is being able to read the traffic: was the tool never listed (capability problem)? Called with bad arguments (schema problem)? Returned isError:true (server-side failure) or a JSON-RPC error (protocol failure)? You now know the difference - and the Inspector you meet in b2 shows you this same traffic for any real server.

Demo 2 of 2

Your turn: two flows most people never see ★ 10 min · explore

Two more scenarios, no narration this time. Step through each and answer the question above it before reading the note under the last message.

LiveQ1 · Prompts: who chose to run this - the model or the user?4 min▶
LiveQ2 · Errors: how does a protocol error differ from a failed tool?3 min▶
Self-studyQ3 · Elicitation: which side starts this exchange?3 min▶

One flow flips the usual direction entirely - the server asks first. You will build this in b7; for tonight, just notice who holds the id.

Homework

Try it yourself - this week ◐ 20-30 min total

Source material

Official sources covered

This track teaches the working core of the official MCP documentation and the major MCP courses, with the protocol itself made steppable on every page. Certificates, videos, and graded assessments stay on the official sites (linked each session). This page covers:

✓modelcontextprotocol.io - "What is MCP" + Architecture overviewParts 1-3 · roles, transports, all six primitives, message types
✓DeepLearning.AI "MCP: Build Rich-Context AI Apps" - lessons 1-3Why MCP + MCP Architecture · taught here on live wire traffic
✓Anthropic Academy "Introduction to MCP" - Introduction sectionIntroducing MCP + MCP clients · host/client/server framing
◐Hugging Face MCP course - Unit 1 (Fundamentals)Concepts covered; HF's Gradio examples stay official
◐MCP spec 2025-11-25 - Basic: Overview, Lifecycle, TransportsRead on the wire here; full spec text linked for depth
Check yourself

Three questions before you go 🎯 ◐ 90 seconds

1 · In MCP, the "host" is...

Host = the AI app (Claude Desktop, Claude Code, your chatbot). It contains MCP clients; each client pairs 1:1 with one server - the program offering tools and data.

2 · Tools, resources, prompts - who controls each?

The control triangle: the model decides when to call tools, the app decides which resources enter context, the user explicitly picks prompts. The server only offers.

3 · A reply comes back with an "error" object instead of a "result". What happened?

JSON-RPC error = the protocol itself rejected the request (unknown tool, bad params). A tool that ran but failed returns a normal result with isError:true. Different layers, different fixes.

Builder session 1 cheat sheet · pin this

MCP in one lineOne open protocol between AI apps and tools/data - implement once, interoperate with everything. The USB-C move.
The three rolesHost (AI app) contains clients; each client pairs 1:1 with a server (the program offering capabilities).
The wireJSON-RPC 2.0: request (id, expects reply), response (same id, result or error), notification (no id).
Two transportsstdio (local subprocess) and Streamable HTTP (remote). HTTP+SSE is deprecated - do not learn it.
Server primitivesTools (model-controlled actions) · Resources (app-controlled context) · Prompts (user-controlled templates).
Client primitivesElicitation (server asks user - alive) · Sampling + Roots (deprecated in 2026-07-28 revision).
Spec + governanceCurrent spec 2025-11-25 · Linux Foundation (AAIF) governed · 10 SDKs, Python is Tier 1.
Running projectDaybreak MCP server: b2 builds tools, b3 resources+prompts, b5 a client, b6 remote, b7 auth, b8 registry.