Skip to content

FavoriteProjects/weather-mcp-server

 
 

Repository files navigation

GitHub release (latest by date) GitHub issues GitHub pull requests GitHub last commit GitHub repo size GitHub language count GitHub top language

🌤️ Weather MCP Server - Clean Architecture Edition [Docker + Redis]

TypeScript Node.js PostgreSQL Redis Docker Claude AI OpenWeatherMap MCP Clean Architecture SOLID DI License: MIT PRs Welcome

Servidor MCP de Clima com Clean Architecture para Claude Desktop - Production Ready

Claude AI transformado em estação meteorológica profissional usando princípios SOLID


🎉 VERSÃO ATUAL: 2.0.0 - Clean Architecture Completa ✅ Refatoração concluída • ✅ Zero legacy code • ✅ Production ready

📊 Status do Projeto

Aspecto Status Descrição
Build Build Status TypeScript compilation + Docker build
Tests Tests Unit tests + Integration tests
Security Security Trivy vulnerability scan + npm audit
Docker Docker Multi-stage build otimizado
Deploy Deployment CI/CD pipeline automatizado

🔄 CI/CD Pipeline

Este projeto implementa um pipeline CI/CD completo com GitHub Actions:

🔍 Lint & Type Check → 🧪 Tests → 🏗️ Build → 🔒 Security → 🐳 Docker → 🚀 Deploy

Pipeline Stages:

  • 🔍 Lint & Type Check: ESLint + TypeScript compilation check
  • 🧪 Tests: Unit tests com mocks + Integration tests com PostgreSQL/Redis
  • 🏗️ Build: TypeScript compilation + artifact generation
  • 🔒 Security: Trivy vulnerability scanner + npm audit
  • 🐳 Docker: Multi-stage build + push to GitHub Container Registry
  • 🚀 Deploy: Automated deployment para staging/production

Comandos de Teste Locais:

npm run test:unit        # Tests unitários (sem dependências)
npm run test:integration # Tests de integração (requer Docker)
npm run test:ci          # Tests para CI com coverage

🎯 O que é este projeto?

O Weather MCP Server é um servidor Model Context Protocol (MCP) que expande as capacidades do Claude Desktop, permitindo que ele consulte informações meteorológicas em tempo real de qualquer lugar do mundo usando uma arquitetura limpa e profissional.

🧠 Entendendo o MCP (Model Context Protocol)

O MCP é um protocolo desenvolvido pela Anthropic que permite ao Claude AI:

  • 🔌 Conectar-se a APIs externas e bancos de dados
  • 🛠️ Usar ferramentas personalizadas criadas pela comunidade
  • 📊 Acessar dados em tempo real que não estão em seu conhecimento base
  • 🎮 Executar ações específicas através de plugins

Em outras palavras: O MCP transforma o Claude de uma IA com conhecimento limitado em uma IA que pode acessar informações atualizadas do mundo real!

🌟 Funcionalidades Disponíveis

🎯 Funcionalidade 📋 Descrição 💡 Exemplo de Uso
🌡️ Clima Atual Consulta temperatura, umidade, pressão e condições meteorológicas atuais "Qual é a temperatura atual em São Paulo?"
🔮 Previsão do Tempo Fornece previsões detalhadas para os próximos 5 dias "Como estará o clima amanhã em Londres?"
📊 Histórico Meteorológico Mantém registro de todas as consultas realizadas "Mostre-me as últimas consultas de clima que fiz"
⚡ Cache Inteligente Sistema Redis para consultas ultrarrápidas 95% das consultas vêm do cache

🚀 Demonstração Prática

Antes (Claude Desktop sem MCP):

🙋 Você: "Qual é a temperatura atual em Tóquio?"
🤖 Claude: "Desculpe, não tenho acesso a dados meteorológicos em tempo real..."

Depois (Claude Desktop com Weather MCP Server):

🙋 Você: "Qual é a temperatura atual em Tóquio?"
🤖 Claude: "🌤️ Em Tóquio agora:
           🌡️ Temperatura: 23°C (sensação térmica: 25°C)
           💧 Umidade: 68%
           🌬️ Vento: 12 km/h
           ☁️ Condições: Parcialmente nublado
           📊 Dados atualizados em tempo real via OpenWeatherMap"

🏗️ Arquitetura Clean + SOLID

graph TB
    subgraph "🎮 Presentation Layer"
        A[👤 Claude Desktop] --> B[🤖 MCP Server]
        B --> C[🎮 Weather Controller]
        B --> D[🎮 History Controller]
    end
    
    subgraph "🔧 Application Layer (Use Cases)"
        C --> E[🌤️ Get Weather Use Case]
        C --> F[🔮 Get Forecast Use Case]  
        C --> G[📊 Get Cache Stats Use Case]
        D --> H[📚 Get History Use Case]
    end
    
    subgraph "🏛️ Domain Layer"
        E --> I[⚡ Weather Entity]
        F --> I
        H --> J[📊 History Entity]
        K[🔗 Repository Interfaces]
    end
    
    subgraph "🏗️ Infrastructure Layer (Adapters)"
        E --> L[🌍 OpenWeather API Repository]
        E --> M[🗄️ PostgreSQL Repository]
        E --> N[⚡ Redis Cache Repository]
        F --> L
        F --> N
        H --> M
        L --> O[🌤️ OpenWeatherMap API]
        M --> P[🗄️ PostgreSQL Database]
        N --> Q[⚡ Redis Cache]
    end
Loading

✅ Princípios SOLID Aplicados:

🔤 Princípio Como foi aplicado 💡 Benefício
S - Single Responsibility Cada classe tem apenas uma responsabilidade Código mais limpo e focado
O - Open/Closed Extensível via interfaces, fechado para modificação Fácil adicionar novas APIs
L - Liskov Substitution Implementações intercambiáveis via contratos Flexibilidade total
I - Interface Segregation Interfaces pequenas e específicas Sem dependências desnecessárias
D - Dependency Inversion Dependências injetadas via abstrações Testabilidade e desacoplamento

📋 Pré-requisitos

🔧 Software Necessário:

📦 Software 📏 Versão Mínima 🔗 Download Verificar
Node.js 18.0+ nodejs.org node --version
Docker Desktop Mais recente docker.com docker --version
Claude Desktop Mais recente claude.ai/download Abrir aplicativo
Git Qualquer git-scm.com git --version

🔑 Chaves de API:

  1. 🌍 OpenWeatherMap API Key (GRATUITA)
    • 🔗 Acesse: openweathermap.org/api
    • 📝 Crie uma conta gratuita
    • 🗝️ Obtenha sua API key (sem custo)
    • 💡 Permite 1.000 consultas por dia grátis

📥 Instalação Completa

🗂️ Passo 1: Baixar o Projeto

# Clonar repositório
git clone https://github.com/glaucia86/weather-mcp-server.git

# Entrar na pasta
cd weather-mcp-server

# Verificar estrutura
ls -la

📦 Passo 2: Instalar Dependências

# Instalar pacotes Node.js
npm install

# Verificar instalação
npm list --depth=0

⚙️ Passo 3: Configurar Ambiente

Criar arquivo .env:

# Copiar exemplo
cp .env.example .env

Configuração do .env:

# 🌍 API do OpenWeatherMap (OBRIGATÓRIO)
WEATHER_API_KEY=sua_api_key_aqui

# 🗄️ Banco de Dados (PostgreSQL)
DATABASE_URL=postgresql://mcp_user:mcp_pass@localhost:5432/weather_mcp

# ⚡ Cache (Redis) 
REDIS_URL=redis://localhost:6379

# 🖥️ Configurações do Servidor
PORT=3000
NODE_ENV=production
LOG_LEVEL=info

🔨 Passo 4: Compilar e Iniciar

# Compilar TypeScript
npm run build

# Iniciar infraestrutura (PostgreSQL + Redis)
npm run docker:up

# Aguardar inicialização
sleep 30

# Testar sistema
npm run test:manual

🎮 Configuração do Claude Desktop

📍 Localizar Arquivo de Configuração:

🖥️ Sistema 📂 Caminho do Arquivo
Windows %APPDATA%\Claude\claude_desktop_config.json
macOS ~/Library/Application Support/Claude/claude_desktop_config.json
Linux ~/.config/Claude/claude_desktop_config.json

⚙️ Configuração:

{
  "mcpServers": {
    "weather-mcp": {
      "command": "node",
      "args": ["/caminho/completo/para/weather-mcp-server/dist/mcp-entry.js"],
      "env": {
        "WEATHER_API_KEY": "SUA_API_KEY_OPENWEATHERMAP",
        "DATABASE_URL": "postgresql://mcp_user:mcp_pass@localhost:5432/weather_mcp",
        "REDIS_URL": "redis://localhost:6379",
        "NODE_ENV": "production",
        "LOG_LEVEL": "error",
        "MCP_MODE": "true"
      }
    }
  }
}

⚠️ IMPORTANTE:

  • Substitua /caminho/completo/para/ pelo seu caminho real
  • Substitua SUA_API_KEY_OPENWEATHERMAP pela sua chave OpenWeatherMap
  • Feche COMPLETAMENTE o Claude Desktop e reabra após salvar

🎪 Como Usar

1️⃣ Consultas de Clima Atual

💬 "Qual é o clima atual em São Paulo?"
💬 "Como está o tempo em Londres agora?"
💬 "Temperatura atual no Rio de Janeiro"

2️⃣ Previsões do Tempo

💬 "Qual será a previsão do tempo para amanhã em Paris?"
💬 "Como estará o clima nos próximos 3 dias em Tokyo?"
💬 "Previsão de 5 dias para London"

3️⃣ Histórico e Análises

💬 "Me mostre o histórico de consultas meteorológicas"
💬 "Quais foram as últimas cidades que consultei?"
💬 "Histórico de clima de São Paulo dos últimos 10 registros"

4️⃣ Estatísticas do Sistema

💬 "Mostre as estatísticas do cache Redis"
💬 "Qual é a performance do sistema?"

🛠️ Scripts Disponíveis

🎯 Finalidade 💻 Comando 📋 Descrição
Start Server npm start Servidor principal
MCP Server npm run start:mcp Servidor MCP para Claude Desktop
Build npm run build Compila TypeScript
Test MCP npm run test:manual Testa servidor MCP
Dev Mode npm run dev Desenvolvimento com hot-reload
Clean npm run clean Remove builds anteriores
Docker Up npm run docker:up Inicia PostgreSQL + Redis
Docker Down npm run docker:down Para containers
Migrate npm run migrate Executa migrações de banco

🏗️ Estrutura do Projeto

src/
├── 🏛️ domain/                    # Camada de Domínio (Business Rules)
│   ├── entities/                # Entidades do domínio
│   │   └── Weather.ts          # Modelos meteorológicos
│   └── repositories/           # Contratos/Interfaces
│       └── IRepositories.ts    # Interfaces dos repositórios
│
├── 🔧 application/              # Camada de Aplicação (Use Cases)
│   └── usecases/               # Casos de uso específicos
│       ├── GetCurrentWeatherUseCase.ts
│       ├── GetWeatherForecastUseCase.ts
│       ├── GetWeatherHistoryUseCase.ts
│       └── GetCacheStatisticsUseCase.ts
│
├── 🏗️ infrastructure/          # Camada de Infraestrutura (Adapters)
│   ├── logger/                 # Sistema de logging
│   │   └── Logger.ts
│   ├── repositories/           # Implementações dos repositórios
│   │   ├── PostgreSQLWeatherRepository.ts
│   │   ├── RedisCacheRepository.ts
│   │   └── OpenWeatherMapApiRepository.ts
│   └── di/                     # Dependency Injection
│       └── DIContainer.ts
│
├── 🎮 presentation/             # Camada de Apresentação
│   ├── controllers/            # Controllers
│   │   ├── WeatherController.ts
│   │   └── HistoryController.ts
│   └── servers/               # Servidores
│       └── WeatherMCPServer.ts
│
├── 🛡️ middleware/              # Middleware de Segurança
│   └── security.ts
│
├── 📊 monitoring/              # Monitoramento
│   └── health.ts
│
├── 🧪 scripts/                 # Scripts Utilitários (3 essenciais)
│   ├── benchmark-cache.ts     # Benchmark de performance
│   ├── migrate.ts            # Migração de banco
│   └── test-mcp-server.ts    # Teste do servidor MCP
│
├── index.ts                   # Entry point principal
└── mcp-entry.ts              # Entry point MCP

Performance e Cache

📈 Métricas de Performance Reais:

📊 Métrica Com Cache 🐌 Sem Cache 🎯 Melhoria
Resposta API 23ms 315ms 13.6x mais rápido
Taxa de Acerto 95% 0% Economia massiva
Chamadas API 5 (em 50 requests) 50 90% menos

🔍 Verificar Cache:

# Ver todas as chaves do cache
docker exec weather-cache redis-cli keys "*"

# Estatísticas do Redis
docker exec weather-cache redis-cli info stats

# Ver TTL de uma chave
docker exec weather-cache redis-cli ttl "weather:sao paulo"

🚨 Solução de Problemas

❌ "Cannot find module"

# Limpeza completa
rm -rf node_modules package-lock.json
npm cache clean --force
npm install
npm run build

❌ "Connection refused" (PostgreSQL)

# Verificar containers
docker ps

# Reiniciar infrastructure
npm run docker:down
npm run docker:up

# Aguardar inicialização
sleep 30

❌ MCP não conecta no Claude Desktop

  1. ✅ Verifique se o caminho no claude_desktop_config.json está correto
  2. 📂 Confirme se dist/mcp-entry.js existe (npm run build)
  3. 🔄 Feche completamente o Claude Desktop e reabra
  4. 🧪 Teste manual: node dist/mcp-entry.js

📊 Status Atual - Agosto 2025

Clean Architecture 100% Implementada:

  • Arquitetura Completa: domain/, application/, infrastructure/, presentation/
  • Dependency Injection: Container DI funcionando perfeitamente
  • Princípios SOLID: Aplicados rigorosamente
  • 4 MCP Tools: Registradas e funcionando no Claude Desktop
  • Database + Cache: PostgreSQL + Redis operacionais
  • Zero Legacy Code: Arquivos desnecessários removidos

🎯 MCP Tools Funcionais:

🔧 Tool 📋 Função Status
get_current_weather Clima atual de qualquer cidade ✅ Funcionando
get_weather_forecast Previsão 5 dias ✅ Funcionando
get_weather_history Histórico de consultas ✅ Funcionando
get_cache_statistics Estatísticas do sistema ✅ Funcionando

🤝 Contribuindo

  1. 🍴 Fork este repositório
  2. 🌿 Crie uma branch (git checkout -b feature/MinhaFeature)
  3. 💻 Desenvolva sua funcionalidade
  4. Teste completamente
  5. 📝 Commit (git commit -m 'Adiciona MinhaFeature')
  6. 📤 Push (git push origin feature/MinhaFeature)
  7. 🔄 Abra um Pull Request

📄 Licença

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


👩‍💻 Autora

Glaucia Lemos

Software AI Engineer | ex-Microsoft

GitHub LinkedIn Twitter YouTube


⭐ Gostou do projeto? Deixe uma estrela! ⭐

Feito com ❤️ e ☕ por Glaucia Lemos

Transformando dados meteorológicos em conversas inteligentes 🌤️🤖

About

A robust Weather MCP Server in TypeScript

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • TypeScript 97.0%
  • JavaScript 2.2%
  • Dockerfile 0.8%