weather-mcp
weather-mcp
Servidor MCP para consultar el tiempo en cualquier ciudad del mundo, usando la API gratuita de Open-Meteo. Sin registro, sin API key.
Arquitectura y componentes
┌─────────────────────────────────────────────────────────────────┐
│ Claude Code / IA │
│ (cliente MCP — cualquier host) │
└────────────────────────┬────────────────────────────────────────┘
│ stdio (JSON-RPC)
▼
┌─────────────────────────────────────────────────────────────────┐
│ weather-mcp (este servidor) │
│ │
│ ┌─────────────────────────────────────────────────────────┐ │
│ │ MCP Server │ │
│ │ @modelcontextprotocol/sdk + Zod │ │
│ │ │ │
│ │ ┌─────────────────┐ ┌─────────────────┐ │ │
│ │ │get_current_ │ │ get_forecast │ │ │
│ │ │weather │ │ (1–7 días) │ │ │
│ │ └────────┬────────┘ └────────┬────────┘ │ │
│ │ │ │ │ │
│ │ ┌────────▼────────────────────▼────────┐ │ │
│ │ │ get_uv_and_air │ │ │
│ │ │ (índice UV + calidad del aire) │ │ │
│ │ └──────────────────┬───────────────────┘ │ │
│ │ │ │ │
│ │ ┌──────────────────▼───────────────────┐ │ │
│ │ │ Geocoding helper │ │ │
│ │ │ ciudad → latitud / longitud │ │ │
│ │ └──────────────────┬───────────────────┘ │ │
│ └─────────────────────┼───────────────────────────────────┘ │
└─────────────────────────┼───────────────────────────────────────┘
│ HTTPS (fetch nativo Node 18+)
┌───────────────┼───────────────────────┐
▼ ▼ ▼
┌──────────────┐ ┌────────────────┐ ┌─────────────────────────┐
│ Geocoding │ │ Forecast │ │ Air Quality │
│ API │ │ API │ │ API │
│ open-meteo │ │ open-meteo │ │ air-quality.open-meteo │
└──────────────┘ └────────────────┘ └─────────────────────────┘Flujo de una consulta
IA: "¿Qué tiempo hace en Bogotá?"
│
▼
1. MCP llama get_current_weather({ city: "Bogotá" })
│
▼
2. geocodeCity("Bogotá")
→ GET geocoding-api.open-meteo.com/v1/search
← { latitude: 4.71, longitude: -74.07, country: "Colombia" }
│
▼
3. GET api.open-meteo.com/v1/forecast
← temperatura, humedad, viento, código WMO, precipitación
│
▼
4. Respuesta formateada en texto legible
→ IA la presenta al usuarioEstructura del proyecto
weather-mcp/
├── src/
│ ├── index.ts # Entrada: registro de herramientas MCP y arranque del servidor
│ ├── handlers.ts # Lógica de negocio de las 3 herramientas (testeable de forma aislada)
│ ├── weather.ts # Utilidades puras: geocodeCity, describeWeather, WMO_CODES
│ └── __tests__/
│ ├── weather.test.ts # Tests de geocodificación y códigos WMO (9 tests)
│ └── handlers.test.ts # Tests de herramientas con fetch mockeado (31 tests)
├── vitest.config.ts # Configuración de tests y umbrales de cobertura (≥80%)
├── tsconfig.json
└── package.jsonHerramientas utilizadas
Herramienta | Versión | Propósito |
5.8 | Lenguaje principal | |
1.13 | Protocolo MCP (servidor stdio) | |
3.24 | Validación de esquemas de herramientas | |
4.19 | Ejecución directa de TypeScript en desarrollo | |
3.x | Framework de tests unitarios | |
3.x | Cobertura de código con motor V8 | |
— | Datos meteorológicos actuales y pronóstico | |
— | Conversión ciudad → coordenadas | |
— | Índice UV y calidad del aire |
Instalación
Requisitos
Node.js 18 o superior
Claude Code CLI (
npm install -g @anthropic-ai/claude-code)
Pasos
# 1. Clonar el repositorio
git clone https://github.com/relativismofisico/weather-mcp.git
cd weather-mcp
# 2. Instalar dependencias y compilar
npm install
npm run build
# 3. Registrar en Claude Code (global — disponible en cualquier proyecto)
claude mcp add weather --transport stdio --scope user -- node /ruta/absoluta/weather-mcp/dist/index.jsEn Windows usa la ruta completa con barras normales:
node C:/Users/TuUsuario/weather-mcp/dist/index.js
Verificar la instalación
claude mcp list
# weather: node .../dist/index.js - ✔ ConnectedUso desde una IA
Una vez registrado, abre una nueva conversación en Claude Code. Las herramientas estarán disponibles automáticamente. Puedes pedirle a la IA:
Tiempo actual
"¿Qué tiempo hace en Buenos Aires?" "Dame la temperatura actual en Tokio" "¿Está lloviendo en Londres ahora mismo?"
Pronóstico
"Dame el pronóstico de 7 días para Ciudad de México" "¿Cómo va a estar el tiempo en París esta semana?"
UV y calidad del aire
"¿Cuál es el índice UV en Medellín hoy?" "¿La calidad del aire en Beijing es buena?"
Ejemplo de respuesta
📍 Buenos Aires, Ciudad Autónoma de Buenos Aires, Argentina
🕐 2026-06-29T14:00 (hora local) ☀️ Día
🌡️ Temperatura: 18°C (sensación 16°C)
💧 Humedad: 65%
🌬️ Viento: 22 km/h (dirección 180°)
🌧️ Precipitación: 0 mm
☁️ Cielo: Parcialmente nubladoHerramientas MCP expuestas
get_current_weather
Obtiene el tiempo actual de una ciudad.
Parámetro | Tipo | Descripción |
|
| Nombre de la ciudad (ej. |
Datos devueltos: temperatura, sensación térmica, humedad, velocidad y dirección del viento, precipitación, descripción del cielo (código WMO), si es de día o noche.
get_forecast
Pronóstico diario de hasta 7 días.
Parámetro | Tipo | Descripción |
|
| Nombre de la ciudad |
|
| Días del pronóstico (1–7, por defecto 5) |
Datos devueltos por día: temperatura máx/mín, lluvia acumulada, viento máximo, hora de amanecer y atardecer, descripción del cielo.
get_uv_and_air
Índice UV actual y calidad del aire.
Parámetro | Tipo | Descripción |
|
| Nombre de la ciudad |
Datos devueltos: índice UV con etiqueta (Bajo / Moderado / Alto / Muy alto / Extremo), AQI (US), PM2.5, PM10, monóxido de carbono.
Desarrollo
# Ejecutar en modo desarrollo (sin compilar)
npm run dev
# Compilar
npm run build
# Probar con MCP Inspector
npx @modelcontextprotocol/inspector
# → seleccionar "stdio", comando: node dist/index.jsTests y cobertura
El proyecto usa Vitest con cobertura por V8. Los umbrales mínimos configurados son 80% en todas las métricas; actualmente se alcanza el 100%.
# Ejecutar todos los tests
npm test
# Tests en modo watch (desarrollo)
npm run test:watch
# Tests con reporte de cobertura
npm run test:coverageResultado actual
-------------|---------|----------|---------|---------|
File | % Stmts | % Branch | % Funcs | % Lines |
-------------|---------|----------|---------|---------|
handlers.ts | 100 | 100 | 100 | 100 |
weather.ts | 100 | 100 | 100 | 100 |
-------------|---------|----------|---------|---------|
All files | 100 | 100 | 100 | 100 |Qué se testea
Módulo | Tests | Casos cubiertos |
| 9 | Todos los códigos WMO, fallback para código desconocido, geocodificación exitosa, errores HTTP, ciudad no encontrada, caracteres especiales |
| 31 | Día/noche, ubicación con y sin |
Los tests mockean fetch globalmente con vi.stubGlobal — no se realizan llamadas reales a la red.
Changelog
v0.2.0 — 2026-06-29
Refactorización: extracción de
weather.ts(utilidades puras) yhandlers.ts(lógica de herramientas) para habilitar tests unitarios sin dependencia del servidor MCP40 tests unitarios con 100% de cobertura (statements, branches, functions, lines)
Configuración de Vitest con umbrales de cobertura ≥ 80%
coverage/excluido del repositorio vía.gitignore
v0.1.0 — 2026-06-29
Implementación inicial del servidor MCP con transporte stdio
Herramienta
get_current_weather: temperatura, humedad, viento, precipitación y descripción del cieloHerramienta
get_forecast: pronóstico de 1 a 7 días con amanecer/atardecerHerramienta
get_uv_and_air: índice UV y calidad del aire (PM2.5, PM10, CO, AQI)Geocodificación automática de ciudad a coordenadas vía Open-Meteo Geocoding API
Descripciones de cielo en español usando códigos WMO
Sin API key requerida — 100% gratuito
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/relativismofisico/weather-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server