
Weather Tools
STDIOMCP server providing weather information tools using National Weather Service API.
MCP server providing weather information tools using National Weather Service API.
Criado para fins educacionais no canal Código Fonte TV, este projeto demonstra como construir um servidor MCP com integração a APIs externas e validação de dados.
Este repositório contém um exemplo de implementação de um servidor MCP (Model Context Protocol) em Node.js/TypeScript, que fornece duas ferramentas para obter informações meteorológicas usando a API do National Weather Service (NWS) dos EUA.
CA
, NY
).fetch
(camada de infraestrutura).@modelcontextprotocol/sdk
).O projeto segue uma arquitetura em camadas inspirada em padrões de Domain-Driven Design (DDD):
Domain (src/domain
):
Definição de interfaces e tipos que representam as estruturas de dados (ex: AlertFeature
, ForecastPeriod
, AlertsResponse
).
Infrastructure (src/infrastructure
):
Implementação de serviços externos, como o NWSApiService
, responsável por realizar as chamadas HTTP à API do NWS.
Application (src/application
):
Contém a lógica de negócio no WeatherService
, que processa e formata os dados vindos da infraestrutura.
Interface (src/interface
):
Inclui controladores (WeatherToolsController
) que registram as ferramentas no servidor MCP, definem schemas de validação e retornam os resultados.
Entry Point (src/main.ts
):
Inicializa o McpServer
, configura o transporte (StdioServerTransport
), instancia serviços e controladores, e inicia escuta em stdio.
A estrutura de pastas é a seguinte:
src/
├── domain/
│ └── models/ # Interfaces de domínio
├── infrastructure/
│ └── services/ # Implementações da API externa (NWS)
├── application/
│ └── services/ # Lógica de negócio e formatação de dados
├── interface/
│ └── controllers/ # Registro das ferramentas MCP e validação
└── main.ts # Ponto de entrada do servidor
build/ # Código JavaScript compilado
git clone <REPOSITÓRIO_URL> cd mcp-server-sample npm install npm run build
Após o build, você pode executar o servidor diretamente:
node build/main.js
Ou, se registrado como binário (weather
):
npm link weather
O servidor iniciará na saída padrão (stdio) e aguardará requisições MCP.
Pull requests são bem-vindos! Sinta-se à vontade para abrir issues e discutir melhorias.
Para mais detalhes sobre a implementação, assista ao vídeo no canal Código Fonte TV.