Create a new directory for our project
mkdir weather cd weather
Initialize a new npm project
npm init -y
Install dependencies
npm install @modelcontextprotocol/sdk zod npm install -D @types/node typescript
Create our files
mkdir src touch src/index.ts
SosaJuanPedro: Puedes explicar el código y para qué sirve
GitHub Copilot: Claro, el código que compartiste es una implementación de un servidor que utiliza el protocolo Model Context Protocol (MCP) para proporcionar herramientas relacionadas con el clima. Este servidor interactúa con la API del Servicio Meteorológico Nacional de EE. UU. (NWS API) para obtener datos meteorológicos como alertas y pronósticos. A continuación, te explico las partes principales del código y su propósito:
1. Configuración del servidor MCP
El servidor se crea utilizando la clase McpServer
del SDK de MCP. Este servidor tiene un nombre (weather
), una versión (1.0.0
) y capacidades definidas (aunque en este caso están vacías).
2. Función para realizar solicitudes a la API de NWS
La función makeNWSRequest
realiza solicitudes HTTP a la API de NWS, manejando encabezados específicos y errores. Devuelve los datos en formato JSON o null
si ocurre un error.
3. Herramienta get_alerts
: Obtener alertas meteorológicas
Esta herramienta permite al usuario obtener alertas meteorológicas activas para un estado específico de EE. UU. (por ejemplo, "CA" para California).
- Construye la URL de la API para las alertas.
- Realiza la solicitud a la API.
- Si hay alertas, las formatea utilizando la función
formatAlert
y las devuelve como texto.
4. Herramienta get_forecast
: Obtener pronóstico del clima
Esta herramienta permite al usuario obtener el pronóstico del clima para una ubicación específica (latitud y longitud).
- Realiza una solicitud a la API de NWS para obtener datos de puntos de cuadrícula (grid points).
- Usa esos datos para obtener la URL del pronóstico.
- Recupera los datos del pronóstico y los formatea en un texto legible.
5. Ejecución del servidor
El servidor utiliza StdioServerTransport
para comunicarse a través de la entrada/salida estándar. Esto permite que el servidor reciba solicitudes y envíe respuestas.
Propósito general
Este servidor MCP permite a los usuarios interactuar con herramientas para obtener:
- Alertas meteorológicas para un estado específico.
- Pronósticos del clima para una ubicación específica (latitud y longitud).
El servidor utiliza la API de NWS para obtener los datos y los formatea en un formato legible para el usuario. Es útil para aplicaciones que necesitan integrar datos meteorológicos en tiempo real.
SosaJuanPedro: Puedes darme la explicación en formato mark down
GitHub Copilot: ### Explicación del Código
El código proporcionado es una implementación de un servidor MCP (Model Context Protocol) que ofrece herramientas para obtener datos meteorológicos, como alertas y pronósticos, utilizando la API del Servicio Meteorológico Nacional de EE. UU. (NWS API). A continuación, se detalla la funcionalidad del fragmento de código destacado y su contexto:
Fragmento Destacado
¿Qué hace este fragmento?
- Propósito: Este código formatea los datos de los períodos del pronóstico meteorológico obtenidos de la API de NWS para que sean legibles y fáciles de interpretar.
- Entrada:
periods
: Una lista de objetos que representan los períodos del pronóstico meteorológico. Cada objeto tiene propiedades como:name
: Nombre del período (por ejemplo, "Hoy", "Esta noche").temperature
: Temperatura esperada.temperatureUnit
: Unidad de temperatura (por ejemplo, "F" para Fahrenheit).windSpeed
: Velocidad del viento.windDirection
: Dirección del viento.shortForecast
: Resumen breve del pronóstico (por ejemplo, "Soleado").
- Salida:
- Una lista de cadenas de texto formateadas, donde cada cadena representa un período del pronóstico con información como:
- Nombre del período.
- Temperatura y unidad.
- Velocidad y dirección del viento.
- Resumen breve del pronóstico.
- Una lista de cadenas de texto formateadas, donde cada cadena representa un período del pronóstico con información como:
- Manejo de Valores Faltantes:
- Si alguna propiedad no está disponible, se utiliza un valor predeterminado como
"Unknown"
o"No forecast available"
.
- Si alguna propiedad no está disponible, se utiliza un valor predeterminado como
Ejemplo de Salida
Si periods
contiene los siguientes datos:
El resultado de formattedForecast
será:
Contexto en el Código
Este fragmento forma parte de la herramienta get_forecast
, que:
- Obtiene el pronóstico meteorológico para una ubicación específica (latitud y longitud) utilizando la API de NWS.
- Formatea los datos del pronóstico (como se muestra en este fragmento) para devolverlos al usuario en un formato legible.
- Devuelve el pronóstico como una respuesta estructurada que puede ser utilizada por el cliente MCP.
Propósito General
El fragmento es clave para transformar los datos crudos de la API en un formato amigable para el usuario, asegurando que la información meteorológica sea clara y comprensible. Esto es útil para aplicaciones que necesitan mostrar pronósticos detallados de manera estructurada.
This server cannot be installed
Provides tools to fetch real-time weather data from the National Weather Service API, allowing users to retrieve weather alerts by state and detailed forecasts by coordinates.
Related MCP Servers
- -securityFlicense-qualityA lightweight microservice that fetches weather alerts and forecasts from the National Weather Service API, providing U.S. state-level alerts and location-based forecasts.Last updated -Python
- -securityFlicense-qualityA standardized API server that enables AI agents and client applications to fetch current weather information for any location without directly interacting with external weather APIs.Last updated -Python
- AsecurityFlicenseAqualityProvides real-time weather forecasts and alerts by fetching data from the National Weather Service API, allowing Claude to answer weather-related questions with up-to-date information.Last updated -2Python
- -securityFlicense-qualityProvides weather forecast and alert data for US locations through the National Weather Service API, enabling access to real-time weather alerts by state and detailed forecasts by coordinates.Last updated -JavaScript