Multi Server MCP
Una aplicación FastAPI integral que aloja múltiples servidores MCP, cada uno proporcionando acceso a diferentes APIs y servicios públicos. (Multi server MCP)
Documentación
Proyecto FastAPI Multi-Server MCP
Una aplicación FastAPI integral que aloja múltiples servidores de Protocolo de Contexto de Modelo (MCP), cada uno proporcionando acceso a diferentes APIs y servicios públicos.
Demo de Trabajo
🚀 Características
Este proyecto incluye 5 servidores MCP diferentes:
- Servidor de Clima – Integración con la API de OpenWeatherMap para datos meteorológicos
- Servidor de Noticias – Integración con NewsAPI para artículos de noticias recientes
- Servidor de Divisas – Tipos de cambio y conversión de moneda
- Servidor de Citas – Citas inspiradoras y datos curiosos
📋 Requisitos Previos
- Python 3.13+
- UV gestor de paquetes
- Claves de API para servicios externos (ver sección de Configuración)
📁 Estructura del Proyecto
fastapi-multi-server-mcp/
├── main.py # FastAPI application entry point
├── requirements.txt # Python dependencies
├── pyproject.toml # UV project configuration
├── .env.example # Environment variables template
├── README.md # This file
├── servers/ # MCP servers directory
│ ├── __init__.py
│ ├── weather_server.py # Weather API MCP server
│ ├── news_server.py # News API MCP server
│ ├── currency_server.py # Currency API MCP server
│ └── quote_server.py # Quotes API MCP server
├── utils/ # Utility modules
│ ├── __init__.py
│ ├── api_clients.py # HTTP client utilities
│ └── config.py # Configuration management
├── tests/ # Test suite
│ ├── __init__.py
│ ├── test_weather.py
│ ├── test_news.py
│ ├── test_currency.py
│ └── test_quote.py
└── docs/ # Documentation
├── api_reference.md
└── deployment.md
🛠️ Instalación
Usando UV (Recomendado)
# Clone the repository
git clone <your-repo-url>
cd fastapi-multi-server-mcp
# Create virtual environment and install dependencies
uv venv
source .venv/bin/activate # On Windows: .venv\Scripts\activate
uv pip install -r requirements.txt
Usando pip
pip install -r requirements.txt
🔧 Configuración
Crea un archivo .env en el directorio raíz con tus claves de API:
# Weather API (OpenWeatherMap)
OPENWEATHER_API_KEY=your_openweather_api_key
# News API
NEWS_API_KEY=your_news_api_key
# Exchange Rates API
EXCHANGE_RATES_API_KEY=your_exchange_rates_api_key
# Server Configuration
PORT=10000
HOST=0.0.0.0
Obtención de Claves de API
- OpenWeatherMap: Regístrate en openweathermap.org
- NewsAPI: Obtén una clave de API gratuita en newsapi.org
- Exchange Rates: Regístrate en exchangerate-api.com
- Quote API: Obtén una clave de API gratuita en quotesapi.com
🏃♂️ Ejecutando la Aplicación
Desarrollo
# Using UV
uv run uvicorn main:app --reload --host 0.0.0.0 --port 10000 --reload
# Using `npx` to debug the running application,
npx @modelcontextprotocol/inspector uv run uvicorn main:app
Para conectar un servidor específico al inspector,
Configura,
-
Tipo de Transporte:
StreamableHTTP -
URLs:
- para noticias: http://localhost:10000/news/mcp/
- para clima: http://localhost:10000/weather/mcp/
- para divisas: http://localhost:10000/currency/mcp/
- para citas: http://localhost:10000/quotes/mcp/
- Haz clic en conectar, se abrirá la ventana del inspector de esta manera:
Servidor de Citas:

Servidor de Noticias:

Servidor de Clima:

Servidor de Divisas:

A partir de junio de 2025, Windsurf y Cursor soportan dos tipos de transporte para servidores MCP: stdio y /sse, pero no StreamableHTTP. Por lo tanto, se recomienda usar stdio o /sse como tipo de transporte. Pero con el inspector, puedes conectarte al servidor MCP que se ejecuta en FastAPI con cualquier tipo de transporte.
Producción
# Using Gunicorn
gunicorn main:app -w 4 -k uvicorn.workers.UvicornWorker --bind 0.0.0.0:10000
📚 Endpoints de la API
Una vez que todo se ejecute correctamente,
Tu servidor FastAPI estará disponible en: http://localhost:10000, documentación en http://localhost:10000/docs y tus servidores MCP estarán disponibles en:
- Servidor de Clima: http://localhost:10000/weather
- Servidor de Noticias: http://localhost:10000/news
- Servidor de Divisas: http://localhost:10000/currency
- Servidor de Citas: http://localhost:10000/quotes
🧪 Pruebas
# Run all tests
pytest
# Run with coverage
pytest --cov=.
# Run specific server tests
pytest tests/test_weather.py
🛠️ Herramientas Disponibles por Servidor
🖼️ Haz clic para ver los detalles de la herramienta
Servidor de Clima (/weather)
get_current_weather - Obtener el clima actual de una ciudad
get_weather_forecast - Obtener pronóstico del clima a 5 días
get_weather_by_coordinates - Obtener clima por latitud/longitud
Servidor de Noticias (/news)
get_top_headlines - Obtener titulares principales de noticias
search_news - Buscar artículos de noticias por palabra clave
get_news_by_category - Obtener noticias por categoría (negocios, tecnología, deportes, etc.)
Servidor de Divisas (/currency)
get_exchange_rates - Obtener tipos de cambio actuales
convert_currency - Convertir entre monedas
get_supported_currencies - Listar todas las monedas soportadas
Servidor de Citas (/quotes)
get_random_quote - Obtener una cita inspiradora aleatoria
get_quote_by_category - Obtener citas por categoría
get_random_fact - Obtener un dato curioso aleatorio
🚀 Despliegue
Docker
Puedes desplegar este proyecto usando Docker. Se incluye un ejemplo de Dockerfile:
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
EXPOSE 10000
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "10000"]
Variables de Entorno para Producción
PORT=10000
HOST=0.0.0.0
LOG_LEVEL=info
WORKERS=4
📝 Licencia
Este proyecto está licenciado bajo la Licencia MIT - consulta el archivo LICENSE.md para más detalles.
📚 Soporte y Documentación
- Consulta la documentación en el directorio
docs/ - Revisa los archivos de prueba para ejemplos de uso
🔄 Actualizaciones y Hoja de Ruta
- Agregar soporte WebSocket para datos en tiempo real
- Implementar caché para respuestas de API
- Agregar limitación de velocidad y autenticación
- Crear panel web para monitoreo
- Agregar más integraciones de API (Spotify, Twitter, etc.)