MCP server with date and web search tools - Part of MCP-Transition tutorial
Project description
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 1 | Naive Agent | Simple agent with hardcoded tools |
| ๐ง | Stage 2 | Improved Agent | Async patterns and code cleanup |
| ๐ | Stage 3 | MCP Foundation | stdio server and custom MCP client |
| ๐ | Stage 4 | Official Library | Using Anthropic's MCP Python SDK |
| ๐ | Stage 5 | Remote Services | SSE transport with ather API integration |
| ๐ | Stage 6 | Multi-Transport | Unified agent with local + remote tools |
| ๐ | Stage 7 | Streamable HTTP Migration | SSE to Streamable HTTP transport upgrade |
๐ Quick Start
Prerequisites
- Python 3.8+
- API Keys: Tavily (web search), OpenWeatherMap (weather)
- OpenAI API access
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
| Document | Purpose | Audience |
|---|---|---|
| ๐ Setup Guide | Complete installation and configuration | All users |
| ๐ Step-by-Step Tutorial | Detailed code walkthrough with highlights | Developers |
๐ 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
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
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
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
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
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
| Stage | Tools | Transport | Location |
|---|---|---|---|
| 1-2 | ๐ Date, ๐ Web Search | Direct calls | Local |
| 3-4 | ๐ Date, ๐ Web Search | stdio MCP | Local subprocess |
| 5 | ๐ค๏ธ Current Weather, ๐ Forecast, ๐บ๏ธ Coordinates | SSE MCP | Remote HTTP server |
| 6 | ๐ Date, ๐ Web Search, ๐ค๏ธ Weather Tools | stdio + SSE MCP | Local + Remote |
| 7 | ๐ค๏ธ Current Weather, ๐ Forecast, ๐บ๏ธ Coordinates | Streamable HTTP MCP | Remote 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
- Official MCP Specification - Complete protocol documentation
- Anthropic MCP Repository - Official Python SDK
- MCP Community - Community MCP servers
Related Technologies
- Pydantic AI - AI agent framework used in examples
- OpenAI API - Language model integration
- Tavily API - Web search capabilities
๐ 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
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file iflow_mcp_rachedblili_mcp_transition-0.1.0.tar.gz.
File metadata
- Download URL: iflow_mcp_rachedblili_mcp_transition-0.1.0.tar.gz
- Upload date:
- Size: 37.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.0 {"installer":{"name":"uv","version":"0.10.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"13","id":"trixie","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b30f70e026fd1f817f9f1606b7a2c6236cbda4cfa3d49754eb9e377150dd620f
|
|
| MD5 |
698685e00953292af0c74864dcfa3f7a
|
|
| BLAKE2b-256 |
c94a6448ef7ab0c1909e2160a66c6eeafde1a5351b35d88eeb731871a3dc4105
|
File details
Details for the file iflow_mcp_rachedblili_mcp_transition-0.1.0-py3-none-any.whl.
File metadata
- Download URL: iflow_mcp_rachedblili_mcp_transition-0.1.0-py3-none-any.whl
- Upload date:
- Size: 68.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.0 {"installer":{"name":"uv","version":"0.10.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"13","id":"trixie","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c7d36d22d54ca4125895a0e76d10256cebd4ff3b7754cd399a5d388c1b768806
|
|
| MD5 |
e7b558fa25224e002d7fe57c3f1711a3
|
|
| BLAKE2b-256 |
5707569226b463dca29212574e7a2e4779f800cff1398037428cbd5b3a39f896
|