
enkrateialucca/mcp-course
Developer toolsMCP Course OReilly
Обзор
A hands-on O'Reilly Live Training on the — the open standard (now under the Linux Foundation's Agentic AI Foundation) for connecting AI agents to tools, data, and external systems. The course used to ask "The HTTP Moment of AI?" — the question has been answered. MCP was donated to the Linux Foundation in Dec 2025 with every major vendor (Anthropic, OpenAI, Google, Microsoft, AWS…) on board. This course teaches you to build with the settled standard: from the agent loop up to deployed, secured, production servers. - — the server you write in module 01 is consumed unmodified by Claude Desktop, Claude Code, the Claude Agent SDK, Cursor, and (deployed) Claude web. - — first-class primitives, discoverable at runtime. (interactive UIs) shipped as the first official extension in Jan 2026. - — stdio for development, streamable-http (stateless) for production. One coherent artifact — a — grows a layer at a time. Every module ends on "why this is the current way.
README
Building AI Agents with MCP
From Agent Loop to Production Servers
A hands-on O’Reilly Live Training on the Model Context Protocol (MCP) — the open standard (now under the Linux Foundation’s Agentic AI Foundation) for connecting AI agents to tools, data, and external systems.
The course used to ask “The HTTP Moment of AI?” — the question has been answered. MCP was donated to the Linux Foundation in Dec 2025 with every major vendor (Anthropic, OpenAI, Google, Microsoft, AWS…) on board. This course teaches you to build with the settled standard: from the agent loop up to deployed, secured, production servers.
🎯 What is MCP?
- One protocol, many hosts — the server you write in module 01 is consumed unmodified by Claude Desktop, Claude Code, the Claude Agent SDK, Cursor, and (deployed) Claude web.
- Tools, resources, prompts — first-class primitives, discoverable at runtime. MCP Apps (interactive UIs) shipped as the first official extension in Jan 2026.
- Local or remote —
stdiofor development,streamable-http(stateless) for production.
📚 The arc — 7 modules, one use case
One coherent artifact — a personal research assistant — grows a layer at a time. Every module ends on “why this is the current way.”
| Module | The move | Day |
|---|---|---|
00 |
Agents are loops. Hand-rolled loop, tools = plain Python functions | 1 |
01 |
Tools move out of the process. Same tools behind an MCP server; thin client; connect Claude Code & Claude Desktop | 1 |
02 |
The Agent SDK is an MCP host. Loop collapses to ~15 lines; in-process servers | 1 |
03 |
Skills vs MCP. Access vs know-how — then an agent builds an MCP server via the mcp-builder skill | 1 |
04 |
Production shape. Remote HTTP, auth seam, intent-grouped tools, hooks, evals, structured outputs | 2 |
05 |
Deploy it. Remote server on Vercel, connected from multiple hosts — plus your first MCP App | 2 |
06 |
Defend & scale. Tool-poisoning attack/defense lab; multi-server composition, subagents, sessions | 2 |
Take-home: demos/exercises/link-checker/. Retired material: demos/archive/.
🚀 Quick start
Every script carries uv inline metadata — no environment juggling:
curl -LsSf https://astral.sh/uv/install.sh | sh
git clone https://github.com/EnkrateiaLucca/mcp-course.git
cd mcp-course
# run anything directly
uv run demos/01-introduction-to-mcp/mcp_server.py
# inspect any MCP server
mcp dev demos/01-introduction-to-mcp/mcp_server.py
Traditional setup: python -m venv venv && source venv/bin/activate && pip install -r requirements/requirements.txt
Environment
# .env at the repo root
ANTHROPIC_API_KEY=sk-... # all agent demos (console: platform.claude.com)
MCP_AUTH_TOKEN=demo-secret # module 04 (and optionally 05)
Version pins that matter (July 2026):
mcp>=1.12,<2— the official Python SDK, pinned to v1. v2 (tracking the 2026-07-28 spec) renamesFastMCP→MCPServer; the standalone “FastMCP 3” is a separate Prefect-backed project. Concepts identical.claude-agent-sdk0.2.x — bundles the Claude Code CLI; Python ≥3.10.
📁 Modules
00 — Agents are loops
demos/00-intro-agents/ · Build the research assistant with the bare
Claude API: web_search (DuckDuckGo) + sandboxed filesystem tools in a
hand-rolled loop. You’ll never write this loop again — but you’ll know
what every framework is doing.
jupyter lab demos/00-intro-agents/intro-agents-cld.ipynb
uv run demos/00-intro-agents/basic_personal_agent.py "Research MCP and save a brief."
01 — Introduction to MCP
demos/01-introduction-to-mcp/ · Same tools behind a FastMCP server.
Inspect with MCP Inspector, watch the raw protocol via the thin client,
then connect Claude Code and Claude Desktop to it — two hosts, one
server, zero changes.
cd demos/01-introduction-to-mcp
mcp dev ./mcp_server.py # inspector
uv run mcp_client.py ./mcp_server.py # the protocol, demystified
claude mcp add research -- uv run $PWD/mcp_server.py
02 — The Agent SDK is an MCP host
demos/02-research-agent-sdk/ · The loop disappears:
options = ClaudeAgentOptions(
system_prompt=SYSTEM_PROMPT,
mcp_servers={"research": {"command": "uv", "args": ["run", "mcp_server.py"]}},
allowed_tools=["mcp__research__*"],
)
async for message in query(prompt=user_prompt, options=options): ...
Plus the in-process pattern (create_sdk_mcp_server) — tools as plain
async functions, no subprocess, ideal for serverless.
03 — Skills vs MCP
demos/03-skills-and-mcp/ · The 2026 question, answered: MCP =
access, skills = know-how, plugins bundle both. Then the wow moment:
the mcp-builder skill scaffolds a working MCP server from one prompt —
the workflow the official MCP docs now recommend.
04 — Production-shaped research agent
demos/04-production-research-agent/ · Intent-grouped tools (7→3),
streamable-http, a real auth seam (bearer → OAuth 2.1/CIMD ladder),
PreToolUse/PostToolUse hooks, telemetry vs evals, structured outputs.
export MCP_AUTH_TOKEN=demo-secret
uv run demos/04-production-research-agent/research_server.py # terminal 1
uv run demos/04-production-research-agent/research_agent.py "Research MCP auth"
05 — Deploy a remote MCP server (+ MCP Apps)
demos/05-deploy-remote-mcp/ · The 2026 deployment story: don’t wrap
your agent in a web framework — deploy the server (stateless
streamable HTTP) and connect every host to it. Ships an MCP App: an
interactive research explorer rendered inside the Claude conversation.
cd demos/05-deploy-remote-mcp
uv run server.py # terminal 1
uv run test_client.py # pre-flight
npx cloudflared tunnel --url http://localhost:8000 # → Claude custom connector
vercel deploy --prod # → permanent
06 — Security & composition
demos/06-security-and-composition/ · security-lab/: a runnable
tool-poisoning attack and its PreToolUse defense. composition/:
third-party servers (Playwright, Git), a fact-checker subagent, and
session resume/fork.
🎨 The five architecture patterns
- External stdio server (01) —
mcp.run(transport="stdio"); subprocess, language-agnostic. - Agent SDK as host (02) —
mcp_servers={...},allowed_tools=["mcp__x__*"]. - In-process server (02b) —
create_sdk_mcp_server(tools=[...]); no transport. - Remote HTTP + auth (04) —
mcp.run(transport="streamable-http")+ bearer/OAuth on the wire. - Stateless remote + MCP Apps (05) —
stateless_http=True; tool_meta.ui.resourceUri→ui://HTML.
🛠️ Development tools
mcp dev path/to/server.py # MCP Inspector — call tools in a web UI
claude mcp add -- uv run /abs/path/server.py # Claude Code (stdio)
claude mcp add --transport http # Claude Code (remote)
Claude Desktop config: ~/Library/Application Support/Claude/claude_desktop_config.json
(macOS) / %APPDATA%\Claude\claude_desktop_config.json (Windows) — absolute
paths, restart after editing.
🐛 Troubleshooting
mcpmodule not found →uvreads each script’s inline metadata; for manual envspip install "mcp[cli]>=1.12,<2".- Claude Desktop doesn’t see the server → absolute paths,
which uv, run the server standalone first, restart the app. - Module 04 401s →
MCP_AUTH_TOKENmust be set in both terminals. - DDGS returns nothing → DuckDuckGo throttles; the tools degrade gracefully — retry, or swap in your favorite search API.
- Rate limits → iterate on
claude-haiku.
📖 Resources
Official: MCP docs · Spec (2025-11-25) · 2026-07-28 release candidate · Python SDK · Claude Agent SDK · MCP Apps · Agent Skills standard
The production canon (read in this order): Building effective agents → Writing tools for agents → Equipping agents with Agent Skills → Code execution with MCP → Advanced tool use → Building agents that reach production systems with MCP
Community: Official MCP Registry · Awesome MCP servers · PulseMCP
Course materials: presentation/presentation.html ·
presentation/code-execution-with-mcp.html ·
demos/assets-resources/MCP_TECHNICAL_CHEATSHEET.md
🎓 Instructor
Lucas Soares — Blog · LinkedIn · X · YouTube — Automata Learning Lab · [email protected]
Happy building. 🎉
Установка
npx cloudflared tunnel --url http://localhost:8000 # → Claude custom connector