Un proyecto template para aprender a crear e integrar servidores y clientes MCP (Model Context Protocol) siguiendo buenas prácticas y el SDK oficial de Python.
Este proyecto sirve como template de aprendizaje para entender cómo:
- Crear un servidor MCP con herramientas usando FastMCP y Pydantic.
- Implementar un cliente MCP que se conecte via HTTP streamable.
- Adaptar herramientas MCP al formato requerido por SDKs de modelos de lenguaje (Gemini).
- Gestionar sesiones y mantener contexto conversacional.
- Estructurar una API backend que orquesta todo el flujo.
Important
Este es un toy example con fines educativos. No está diseñado para producción sin mejoras adicionales en seguridad, autenticación y gestión de estado.
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ FastAPI │ │ MCP Client │ │ MCP Server │
│ Backend │◄───┤ (Cliente) │◄───┤ (FastMCP) │
│ (Orchestador) │ │ │ │ │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│ │ │
┌─────────┐ ┌─────────┐ ┌─────────┐
│ Session │ │ Gemini │ │ File │
│ Manager │ │ 2.5 │ │ Tools │
│(In-Mem) │ │ Flash │ │(Pydantic)│
└─────────┘ └─────────┘ └─────────┘
- Uso del transport
streamable-httpsiguiendo el SDK oficial. - Definición de herramientas con schemas Pydantic.
- Manejo de contexto con logging y mensajes informativos.
- Simulación de procesos "lentos" con
asyncio.sleep().
- Inicialización correcta con context managers.
- Gestión del ciclo de vida de conexiones (connect/disconnect).
- Adaptación de herramientas MCP al formato Google Gemini SDK.
- Mantenimiento de historial conversacional con contexto.
- Conversión de schemas MCP a formato
Toolde Gemini. - Construcción de contexto conversacional para el LLM.
- Manejo de respuestas mixtas (texto + function calls).
- Ejecución de herramientas y procesamiento de resultados.
Note
Requiere Python 3.8+ y un token de Gemini API
# 1. Crear y activar entorno
python -m venv venv
venv\Scripts\activate # Windows
# 2. Instalar dependencias
pip install "mcp[cli]" google-genai fastapi uvicorn python-dotenv pydantic-settings
# 3. Configurar token
echo "GEMINI_TOKEN=tu_token_aqui" > .envTip
Obtén tu token de Gemini en Google AI Studio
Terminal 1 - Servidor MCP:
python server.pyTerminal 2 - API Backend:
python backend.py# Crear sesión
curl -X POST "http://localhost:8080/session/new"
# Hacer consulta (usa el session_id devuelto)
curl -X POST "http://localhost:8080/session/{session_id}/query" \
-H "Content-Type: application/json" \
-d '{"query": "¿Qué directorios principales tiene el usuario adrian.rico?"}'Implementa dos herramientas de ejemplo siguiendo FastMCP
Demuestra la inicialización correcta siguiendo el SDK oficial
Template de orchestación con:
- Gestión de sesiones en memoria.
- Endpoints RESTful completos.
- Manejo de errores y logging.
- CORS configurado (muy permisivo para desarrollo).
- Input:
usuario: str - Output:
List[Directorio]. - Demuestra: Schemas tipados, logging contextual, simulación de latencia.
- Input: Múltiples parámetros con filtros.
- Output:
List[Archivo]. - Demuestra: Herramienta compleja, manejo de errores, logging progresivo.
Caution
Este template tiene limitaciones intencionadas para simplicidad educativa
- Sesiones en memoria: Se pierden al reiniciar.
- Sin persistencia: Historial no se guarda automáticamente.
- Limpieza básica: Solo por timeout, sin métricas avanzadas.
- CORS amplio: Permite cualquier origen (
*) - Sin autenticación: Endpoints públicos sin protección
- Sin rate limiting: Vulnerable a abuso de recursos
- Logs verbosos: Pueden filtrar información sensible
- Sin seguridad del server: Algunas herramientas pueden suponer una seguridad adicional a implementar en el server así como límites de calls.
- Single-threaded: Una instancia por servidor MCP
- Sin load balancing: No distribuye carga
Tip
Áreas de mejora para convertir en aplicación de producción
- Implementar autenticación JWT.
- Rate limiting con Redis.
- CORS restrictivo por dominio.
- Sanitización de inputs.
- Base de datos para sesiones (Redis/PostgreSQL).
- Almacenamiento de conversaciones.
- Backup y recuperación de estado.
- Métricas.
- Health checks avanzados.
- Tracing distribuido.
- Alertas automáticas.
- Load balancer para múltiples instancias.
- Queue system para herramientas pesadas.
- Caching inteligente.
mcp-template/
├── server.py # Servidor MCP con FastMCP
├── mcp_client.py # Cliente MCP completo
├── backend.py # API FastAPI orchestador
├── session_manager.py # Gestión de sesiones
├── models.py # Schemas Pydantic
├── config.py # Configuración centralizada
├── .env # Variables de entorno
└── README.md # Esta documentación
Este template mejora con la comunidad:
- Fork del repositorio
- Experimenta con mejoras
- Documenta tus hallazgos
- Comparte via Pull Request
Important
Mantén el enfoque educativo - prioriza claridad sobre eficiencia
Un template educativo para dominar MCP Protocol con Python