Multi Server MCP

Um aplicativo FastAPI abrangente que hospeda vários servidores MCP, cada um fornecendo acesso a diferentes APIs e serviços públicos. (Multi server MCP)

Documentação

Projeto Multi-Server MCP FastAPI

Um aplicativo FastAPI abrangente que hospeda múltiplos servidores Model Context Protocol (MCP), cada um fornecendo acesso a diferentes APIs e serviços públicos.

Demonstração de Trabalho

fastmcp-multi-server-mcp.webm

🚀 Recursos

Este projeto inclui 5 servidores MCP diferentes:

  • Servidor de Clima – Integração com a API OpenWeatherMap para dados meteorológicos
  • Servidor de Notícias – Integração com a NewsAPI para artigos de notícias recentes
  • Servidor de Moedas – Taxas de câmbio e conversão de moedas
  • Servidor de Citações – Citações inspiradoras e fatos aleatórios

📋 Pré-requisitos

  • Python 3.13+
  • Gerenciador de pacotes UV
  • Chaves de API para serviços externos (consulte a seção de Configuração)

📁 Estrutura do Projeto

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

🛠️ Instalação

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

🔧 Configuração

Crie um arquivo .env no diretório raiz com suas chaves 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

Obtendo Chaves de API

🏃‍♂️ Executando o Aplicativo

Desenvolvimento

# 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 um servidor específico ao inspector,

Defina,

  1. Tipo de Transporte: StreamableHTTP

  2. URLs:

  1. Clique em conectar, abrirá a janela do inspector assim:

Servidor de Citações:

Inspector

Servidor de Notícias:

Inspector

Servidor de Clima:

Inspector

Servidor de Moedas:

Inspector

A partir de junho de 2025, Windsurf e Cursor suportam dois tipos de transporte para servidores MCP: stdio e /sse, mas não StreamableHTTP. Portanto, usar stdio ou /sse como tipo de transporte é recomendado. Mas com o inspector, você pode conectar ao servidor MCP rodando no FastAPI com qualquer tipo de transporte.

Produção

# Using Gunicorn
gunicorn main:app -w 4 -k uvicorn.workers.UvicornWorker --bind 0.0.0.0:10000

📚 Endpoints da API

Após executar tudo com sucesso,

Seu servidor FastAPI estará disponível em: http://localhost:10000, documentação em http://localhost:10000/docs e seus servidores MCP estarão disponíveis em:

🧪 Testes

# Run all tests
pytest

# Run with coverage
pytest --cov=.

# Run specific server tests
pytest tests/test_weather.py

🛠️ Ferramentas Disponíveis por Servidor

🖼️ Clique para ver os detalhes da ferramenta

Servidor de Clima (/weather)

get_current_weather - Obter clima atual para uma cidade
get_weather_forecast - Obter previsão do tempo para 5 dias
get_weather_by_coordinates - Obter clima por latitude/longitude

Servidor de Notícias (/news)

get_top_headlines - Obter principais manchetes de notícias
search_news - Pesquisar artigos de notícias por palavra-chave
get_news_by_category - Obter notícias por categoria (negócios, tecnologia, esportes, etc.)

Servidor de Moedas (/currency)

get_exchange_rates - Obter taxas de câmbio atuais
convert_currency - Converter entre moedas
get_supported_currencies - Listar todas as moedas suportadas

Servidor de Citações (/quotes)

get_random_quote - Obter uma citação inspiradora aleatória
get_quote_by_category - Obter citações por categoria
get_random_fact - Obter um fato interessante aleatório

🚀 Implantação

Docker

Você pode implantar este projeto usando Docker. Um exemplo de Dockerfile está incluído:

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"]

Variáveis de Ambiente para Produção

PORT=10000
HOST=0.0.0.0
LOG_LEVEL=info
WORKERS=4

📝 Licença

Este projeto está licenciado sob a Licença MIT - consulte o arquivo LICENSE.md para detalhes.

📚 Suporte e Documentação

  • Consulte a documentação no diretório docs/
  • Revise os arquivos de teste para exemplos de uso

🔄 Atualizações e Roteiro

  • Adicionar suporte a WebSocket para dados em tempo real
  • Implementar cache para respostas de API
  • Adicionar limitação de taxa e autenticação
  • Criar painel web para monitoramento
  • Adicionar mais integrações de API (Spotify, Twitter, etc.)