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

fastmcp-multi-server-mcp.webm

🚀 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

🏃‍♂️ 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,

  1. Tipo de Transporte: StreamableHTTP

  2. URLs:

  1. Haz clic en conectar, se abrirá la ventana del inspector de esta manera:

Servidor de Citas:

Inspector

Servidor de Noticias:

Inspector

Servidor de Clima:

Inspector

Servidor de Divisas:

Inspector

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:

🧪 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.)