← Discover MCPs and Agents
M
AgentAI & MLGitHub

MCP-Transition

Showing how to transition from a naive agent to an MCP agent in 3 steps

Links

README

From the repo.

Step by Step to MCP Glory

A Comprehensive Tutorial for Building Model Context Protocol (MCP) Enabled AI Agents


🌟 Overview

This repository provides a complete, hands-on journey from building a simple AI agent to creating sophisticated, distributed systems using the Model Context Protocol (MCP). Through 6 carefully crafted iterations, you'll master the fundamental concepts and advanced patterns of MCP architecture.

🎯 What You'll Learn

  • Agent Architecture Evolution: From monolithic to modular, protocol-driven design
  • MCP Protocol Mastery: stdio and SSE transports, tool discovery, session management
  • Production Patterns: Error handling, structured data, multi-transport composition
  • Real-world Integration: External APIs, remote services, distributed tool ecosystems

🗺️ The Journey

🏁Stage 1Naive AgentSimple agent with hardcoded tools
🔧Stage 2Improved AgentAsync patterns and code cleanup
🔌Stage 3MCP Foundationstdio server and custom MCP client
📚Stage 4Official LibraryUsing Anthropic's MCP Python SDK
🌐Stage 5Remote ServicesSSE transport with ather API integration
🌍Stage 6Multi-TransportUnified agent with local + remote tools
🔄Stage 7Streamable HTTP MigrationSSE to Streamable HTTP transport upgrade

🚀 Quick Start

Prerequisites

1-Minute Setup

# Clone and setup
git clone <repository-url>
cd MCP-Transition
pip install -r requirements.txt

# Configure environment
cp .env.example .env
# Edit .env with your API keys

# Run any stage
python naive_agent.py           # Stage 1
python improved_agent.py        # Stage 2
python mcp_agent_sse.py         # Stage 5 (requires weather server)
python mcp_agent_streamable.py  # Stage 7 (requires streamable server)

Environment Variables

# .env file
OPENAI_API_KEY=your_openai_key_here
TAVILY_API_KEY=your_tavily_key_here
OPENWEATHERMAP_API_KEY=your_weather_key_here

📖 Detailed Documentation

DocumentPurposeAudience
📋 Setup GuideComplete installation and configurationAll users
🎓 Step-by-Step TutorialDetailed code walkthrough with highlightsDevelopers

📁 Repository Structure

MCP-Transition/
├── README.md                              # This file
├── requirements.txt                       # Python dependencies
├── prompts.py                            # Shared prompt templates
│
├── 🏁 STAGE 1: Naive Implementation
│   └── naive_agent.py                    # Basic agent with hardcoded tools
│
├── 🔧 STAGE 2: Improved Architecture  
│   └── improved_agent.py                 # Async patterns and cleanup
│
├── 🔌 STAGE 3: MCP Foundation
│   ├── mcp_server_stdio.py              # Local MCP server (stdio transport)
│   └── mcp_client_stdio.py              # Custom MCP client implementation
│
├── 📚 STAGE 4: Official Library
│   └── mcp_agent_with_standard_client.py # Using official Anthropic MCP SDK
│
├── 🌐 STAGE 5: Remote Services
│   ├── mcp_server_sse.py                # Remote weather server (SSE transport)
│   └── mcp_agent_sse.py                 # SSE-based agent
│
├── 🌍 STAGE 6: Multi-Transport
│   └── mcp_agent_multi_transport.py     # Unified local + remote agent
│
├── 🔄 STAGE 7: Streamable HTTP Migration
│   ├── mcp_server_streamable.py         # Weather server (Streamable HTTP transport)
│   └── mcp_agent_streamable.py          # Streamable HTTP-based agent
│
└── docs/                                 # Detailed documentation
    ├── SETUP.md                         # Installation guide
    ├── TUTORIAL.md                      # Step-by-step code walkthrough
    ├── MCP_CONCEPTS.md                  # Protocol deep dive
    └── DEPLOYMENT.md                    # Production deployment

🎯 Stage Overview

Stage 1: Naive Implementation

File: naive_agent.py

  • Basic PydanticAI agent with hardcoded tools
  • Synchronous execution with async workarounds
  • Direct API calls without abstraction

Why PydanticAI? I chose PydanticAI as the starting framework because it provides the cleanest, non-vendor-specific approach to building AI agents. Unlike framework-specific solutions, PydanticAI offers excellent separation between conversation management and tooling, making it ideal for demonstrating MCP integration patterns.

Alternative Frameworks: This is just one of many possible implementations! For the same agent implemented across 8 different frameworks (LangChain, LangGraph, CrewAI, Llama-Index, OpenAI Assistants, Anthropic, and Atomic Agents), check out my Agent Framework Comparison Repository. You can use any of these as your starting point for MCP integration.

Key Concepts: Basic agent architecture, tool registration, conversation flow


Stage 2: Improved Architecture

File: improved_agent.py

  • Proper async/await patterns
  • Better error handling and type hints
  • Cleaner code structure and formatting

Key Concepts: Async programming, code quality, maintainable architecture

🎓 Tutorial Link


Stage 3: MCP Foundation

Files: mcp_server_stdio.py, mcp_client_stdio.py

  • First MCP implementation using stdio transport
  • Custom client with full protocol implementation
  • Tool discovery and JSON-RPC 2.0 messaging

Key Concepts: MCP protocol, stdio transport, JSON-RPC, tool discovery

🎓 Tutorial Link


Stage 4: Official Library

File: mcp_agent_with_standard_client.py

  • Replacement of custom client with official Anthropic MCP SDK
  • Simplified codebase (~100 lines reduction)
  • Production-ready protocol compliance

Key Concepts: Official libraries vs custom implementation, code simplification

🎓 Tutorial Link


Stage 5: Remote Services

Files: mcp_server_sse.py, mcp_agent_sse.py

  • HTTP-based MCP server with Server-Sent Events
  • Real-world API integration (OpenWeatherMap)
  • Remote deployment capabilities

Key Concepts: SSE transport, remote services, external API integration

🎓 Tutorial Link


Stage 6: Multi-Transport

File: mcp_agent_multi_transport.py

  • Simultaneous connection to multiple MCP servers
  • Mixed local (stdio) and remote (SSE) tools
  • Unified tool interface and session management

Key Concepts: Multi-transport architecture, tool composition, distributed systems

🎓 Tutorial Link


Stage 7: Streamable HTTP Migration

Files: mcp_server_streamable.py, mcp_agent_streamable.py

  • Migration from SSE to Streamable HTTP transport
  • Single endpoint design (/mcp vs /sse + /messages)
  • Improved scalability and infrastructure compatibility
  • Future-proof transport implementation

Key Concepts: Transport migration, protocol evolution, backward compatibility patterns


🛠️ Available Tools by Stage

StageToolsTransportLocation
1-2📅 Date, 🔍 Web SearchDirect callsLocal
3-4📅 Date, 🔍 Web Searchstdio MCPLocal subprocess
5🌤️ Current Weather, 📊 Forecast, 🗺️ CoordinatesSSE MCPRemote HTTP server
6📅 Date, 🔍 Web Search, 🌤️ Weather Toolsstdio + SSE MCPLocal + Remote
7🌤️ Current Weather, 📊 Forecast, 🗺️ CoordinatesStreamable HTTP MCPRemote HTTP server

🤝 Contributing

We welcome contributions! Here are some ways to help:

  • 🐛 Bug Reports: Found an issue? Open an issue
  • 💡 Feature Requests: Ideas for new stages or improvements
  • 📖 Documentation: Help improve guides and examples
  • 🔧 Code: Submit PRs for bug fixes or enhancements

Development Setup

# Fork and clone the repository
git clone https://github.com/yourusername/MCP-Transition.git
cd MCP-Transition

# Create a virtual environment
python -m venv venv
source venv/bin/activate  # On Windows: venv\Scripts\activate

# Install development dependencies
pip install -r requirements.txt
pip install -r requirements-dev.txt  # If available

# Run tests
python -m pytest tests/  # If tests are available

📚 Additional Resources

MCP Ecosystem

Related Technologies


📜 License

This project is licensed under the MIT License - see the LICENSE file for details.


🙏 Acknowledgments

  • Anthropic for creating the Model Context Protocol and providing excellent documentation
  • Pydantic AI team for the elegant agent framework
  • Community contributors who helped improve this tutorial

Ready to start your MCP journey?

📋 Setup Guide🎓 Tutorial🚀 Build Something Amazing

Collected info

  • 33 stars
  • 6 forks
  • Language: Python
  • Source updated: 5/27/2026