
iusztinpaul/designing-real-world-ai-agents-workshop
Developer toolsA hands-on workshop, presented at AI Engineering Conference Europe, building a multi-agent AI system with two MCP servers: a and a . Both connected to a harness like Claude Code or Cursor.
Overview
A hands-on workshop, presented at AI Engineering Conference Europe, building a multi-agent AI system with two MCP servers: a and a . Both connected to a harness like Claude Code or Cursor.
README
Build Your Own Deep Research Agent + Technical Writer Multi-Agent System
A hands-on workshop, presented at AI Engineering Conference Europe, building a multi-agent AI system with two MCP servers: a Deep Research Agent and a LinkedIn Writing Workflow. Both connected to a harness like Claude Code or Cursor.
🎬 Full workshop available on YouTube ↓
📑 Slides here.
Whenever You’re Ready, Here’s How to Go Deeper
This workshop is a 2–4 hour taste. If you want to go from zero to shipping production-grade AI agents, check out our Agentic AI Engineering Course, built with Towards AI.
34 lessons. Three end-to-end portfolio projects. A certificate. And a Discord community with direct access to industry experts and us.
Rated 5/5 by 300+ students. The first 6 lessons are free:
How to Use This Repo
Three ways to use this repo. Pick the mode that fits the time you have. Or work through all three in order, since each builds on the last:
-
Watch the workshop and see the patterns end-to-end. Watch in ~2 hr. Start with the 2-hour YouTube workshop and the slides above. You’ll come away with a mental model of the full multi-agent system: tool-use agents, evaluator-optimizer loops, grounded search, structured LLM output, and MCP-server design.
-
Run the finished code. See it produce real artifacts. Run in ~30 min. Watch the system generate a research brief, draft a LinkedIn post through an evaluator-optimizer loop, and score itself with an LLM-as-judge. Follow the Getting Started and Running the Code sections to install the project and run the MCP servers, skills, and evaluation pipeline.
-
Implement it yourself with agentic coding. Build a 1:1 replica from scratch in ~2–4 hr. Open
implement_yourself/, a stripped-down skeleton prepared with 25 pre-groomed tickets and a custom/implementClaude Code skill that orchestrates SWE and Tester agents in a loop, ticket by ticket, until the directory matchessrc/. Seeimplement_yourself/README.mdfor the kickoff guide.No cheating, by design.
implement_yourself/is a self-contained project. Open your harness (Claude Code, Cursor, …) directly in that folder (not at the repo root) so its working directory is scoped to the skeleton. The agents can’t see the reference implementation in../src/, can’t grep it, can’t read its files. You get a real build, not a copy-paste.
What You’ll Build Today
Deep Research Agent — An MCP server that runs deep research using Gemini with Google Search grounding and native YouTube video analysis:
user topic → [deep_research] × N → analyze_youtube_video (if URLs) → [deep_research gap-fill] → compile_research → research.md
LinkedIn Writing Workflow — An MCP server that generates LinkedIn posts with an evaluator-optimizer loop:
research.md + guideline → generate post → [review → edit] × N → post.md → generate image
Both servers expose tools, resources, and prompts via the Model Context Protocol, letting any MCP-compatible harness orchestrate the workflow.
Patterns and concepts you’ll learn:
- Tool-use agents — letting the LLM decide which tools to call and when
- Evaluator-optimizer loop — generate, review, edit in cycles
- Grounded search — Gemini with Google Search grounding for factual research
- Structured LLM output — Pydantic schemas for type-safe model responses
- MCP server design — registering tools, resources, and prompts with FastMCP
- LLM-as-judge evaluation — automated quality scoring with Opik
Example: End-to-End Workflow
Here’s a real run through the full pipeline — from a topic seed to a published-ready LinkedIn post with an AI-generated image.
Final output
We planned 12 AI agents and shipped 1. It worked better. Sounds crazy, right? But it’s a common story.
A client built an AI marketing chatbot. Their initial design had dozens of agents: orchestrator, validators, spam prevention. It failed.
A single agent with tools won. Tasks were tightly coupled. One brain maintained context. Tools were still specialized.
This is the core mistake. People jump to complex multi-agent setups too fast.
Think AI system design as a spectrum:
- Workflows: You control steps.
- Single Agent + Tools: Model decides flow.
- Multi-Agent: Multiple decision-makers.
…
A single agent works for most cases. But it has limits. Too many tools? You hit “context rot.” Past ~10-20 tools, LLMs degrade at tool selection. They get overwhelmed. Information gets lost in the middle.
So, when do you actually need multi-agent?
…
The simplest system that reliably solves the problem is always the best system. Don’t overengineer your AI agents. Build simple first.
What’s the most complex agent architecture you’ve simplified? Tell me below.
Read the full post
Browse more full examples (seed, research, post drafts, reviews, final post + image) in the
examples/directory.
Tech Stack
| Component | Tool |
|---|---|
| LLM API | Google Gemini (via google-genai SDK) |
| MCP Framework | FastMCP |
| Data Validation | Pydantic |
| Settings | Pydantic Settings |
| Observability | Opik |
| Image Generation | Gemini Flash Image |
| QA | Ruff |
| Package Manager | uv |
Getting Started
Assumes working Python knowledge and basic familiarity with LLMs.
Prerequisites
| Requirement | Check | Install |
|---|---|---|
| Python 3.12+ | python --version |
uv python install 3.12 or python.org |
| uv 0.7+ | uv --version |
curl -LsSf https://astral.sh/uv/install.sh | sh (docs) |
| GNU Make | make --version |
Pre-installed on macOS/Linux. Windows: choco install make |
| Google API Key | — | aistudio.google.com/apikey (required — all LLM calls use Gemini) |
| Opik account | — | comet.com/site/products/opik (optional, for observability and evals) |
Installation
-
Clone and configure:
git clone https://github.com/iusztinpaul/designing-real-world-ai-agents-workshop.git cd designing-real-world-ai-agents-workshop cp .env.example .env # add your GOOGLE_API_KEY (+ optional OPIK_API_KEY) -
Install dependencies:
uv syncNote: If you don’t have Python 3.12+, uv can install it for you:
uv python install 3.12, then re-runuv sync. -
Verify the setup:
make test-end-to-end # runs research + writing pipeline end-to-endIf it completes without errors, you’re good to go.
Running the Code
There are four ways to run the workflows:
| Mode | Best for |
|---|---|
| MCP Servers (recommended) | Interactive use with AI harness |
| Skills | Guided slash-command workflows |
| Streamlit UI | Visual end-to-end demo with live progress |
| Scripts | Verify setup, smoke tests |
MCP Servers (recommended)
Connect the servers to an MCP-compatible harness (Claude Code, Cursor) for interactive use. This is the primary way to use the workshop.
Setup: The .mcp.json file is pre-configured. Both servers start automatically when you open the project in Claude Code or Cursor.
| Server | Tools | Prompt |
|---|---|---|
deep-research |
deep_research, analyze_youtube_video, compile_research |
research_workflow |
linkedin-writer |
generate_post, edit_post, generate_image |
linkedin_post_workflow |
Usage:
- Open the project in Claude Code or Cursor
- Invoke an MCP prompt (e.g.,
research_workflow) to get guided through the full workflow - Or call individual tools directly for fine-grained control
Manual server start (advanced):
make run-research-server # stdio transport
make run-writing-server # stdio transport
Skills
Pre-built slash commands that orchestrate the MCP tools with sensible defaults. All output goes to outputs/{topic-slug}/.
| Command | What it does |
|---|---|
/research |
Deep research on a topic → research.md |
/write-post |
Generate LinkedIn post from existing research → post.md + post_image.png |
/research-and-write |
Full pipeline: research a topic, then write a post from it |
Example:
/research-and-write
The skill will ask you for a topic and guideline, then run the full pipeline end-to-end. Check examples/ to see what each step produces.
Streamlit UI
A standalone chat UI that orchestrates both MCP servers via FastMCP — no harness required. Drop in a topic (or upload a .md / .txt seed file) and watch the pipeline run end-to-end with live per-stage progress: search counters, sources collected, evaluator-optimizer loop, and image generation.
make run-ui
Outputs land in outputs/{topic-slug}/ (same layout as the skills).
Evaluation (requires Opik)
The workshop includes an LLM-as-judge evaluation pipeline. Instead of manually reviewing each generated post, an LLM scores them against quality criteria (structure, tone, accuracy). Opik tracks these scores across runs so you can measure whether prompt or pipeline changes actually improve output quality.
make eval-dev # LLM judge on dev split
make eval-test # LLM judge on test split
make eval-online # Generate + judge posts on the fly
Each command automatically uploads the dataset to Opik before running. To upload without evaluating (e.g., to browse in the Opik UI), use
make upload-eval-dataset.
Project Structure
├── src/
│ ├── research/ # Deep Research Agent MCP server
│ │ ├── server.py # FastMCP entry point
│ │ ├── config/ # Settings, constants, prompt templates
│ │ ├── models/ # Pydantic schemas for structured LLM output
│ │ ├── app/ # Business logic handlers
│ │ ├── tools/ # MCP tool implementations
│ │ ├── routers/ # MCP tool, resource, and prompt registration
│ │ └── utils/ # Gemini client, file I/O, Opik, markdown helpers
│ └── writing/ # LinkedIn Writer MCP server
│ ├── server.py # FastMCP entry point
│ ├── profiles/ # Shipped markdown profiles (structure, terminology, character, branding)
│ ├── config/ # Settings, constants, prompt templates
│ ├── models/ # Pydantic schemas (Post, Review, Profiles)
│ ├── app/ # Business logic handlers
│ ├── evals/ # LLM judge metric, dataset upload, evaluation harness
│ ├── tools/ # MCP tool implementations
│ ├── routers/ # MCP tool, resource, and prompt registration
│ └── utils/ # Gemini client, Imagen, Opik helpers
├── datasets/ # LinkedIn posts dataset with labels and splits
├── examples/ # Full end-to-end output samples (seed → research → posts → image)
├── scripts/ # Entrypoints and test scripts
├── .mcp.json # MCP server configuration for harnesses
├── Makefile # Command center
└── .env.example # Environment variable template
Next Steps
| Resource | Description |
|---|---|
| Agentic AI Engineering Course | Our full course on shipping production-grade AI agents. 34 lessons. Three end-to-end portfolio projects. A certificate. And a Discord community. |
| Agentic AI Engineering Guide | Free 6-day email course on the mistakes that silently break AI agents in production. |
| AI Engineering Cheatsheets | Quick-reference sheets for agents, RAG, fine-tuning, and more. Ready to be plugged into Claude Code as context. |
Contributors
License
MIT License. See LICENSE for details.
Copyright © 2026 Paul Iusztin, Towards AI Inc
Install
This server does not publish a one-line install command.
Open the repository installation guide