weather-mcp
Enables querying current weather, 7-day forecast, UV index, and air quality for any city using the free Open-Meteo API, without requiring an API key.
README
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 usuario
Estructura 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.json
Herramientas utilizadas
| Herramienta | Versión | Propósito |
|---|---|---|
| TypeScript | 5.8 | Lenguaje principal |
| @modelcontextprotocol/sdk | 1.13 | Protocolo MCP (servidor stdio) |
| Zod | 3.24 | Validación de esquemas de herramientas |
| tsx | 4.19 | Ejecución directa de TypeScript en desarrollo |
| Vitest | 3.x | Framework de tests unitarios |
| @vitest/coverage-v8 | 3.x | Cobertura de código con motor V8 |
| Open-Meteo Forecast API | — | Datos meteorológicos actuales y pronóstico |
| Open-Meteo Geocoding API | — | Conversión ciudad → coordenadas |
| Open-Meteo Air Quality API | — | Í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.js
En 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 - ✔ Connected
Uso 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 nublado
Herramientas MCP expuestas
get_current_weather
Obtiene el tiempo actual de una ciudad.
| Parámetro | Tipo | Descripción |
|---|---|---|
city |
string |
Nombre de la ciudad (ej. "Madrid", "New York") |
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 |
|---|---|---|
city |
string |
Nombre de la ciudad |
days |
number |
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 |
|---|---|---|
city |
string |
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.js
Tests 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:coverage
Resultado 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 |
|---|---|---|
weather.ts |
9 | Todos los códigos WMO, fallback para código desconocido, geocodificación exitosa, errores HTTP, ciudad no encontrada, caracteres especiales |
handlers.ts |
31 | Día/noche, ubicación con y sin admin1, todos los rangos UV (Bajo→Extremo) y AQI (Buena→Insalubre), extracción de amanecer/atardecer, precipitación, propagación de errores HTTP en cada API |
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 MCP - 40 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 cielo - Herramienta
get_forecast: pronóstico de 1 a 7 días con amanecer/atardecer - Herramienta
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
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。