Skip to main content
Glama
tranducthai

MCP Weather SSE Server

by tranducthai

get_forecast

Retrieve weather forecasts for US locations by providing latitude and longitude coordinates.

Instructions

Get weather forecast for a location using NWS (US only).

Args:
    latitude: Latitude of the location
    longitude: Longitude of the location

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
latitudeYes
longitudeYes

Implementation Reference

  • The main execution logic for the 'get_forecast' tool. This async function is decorated with @mcp.tool(), which also serves as registration. It fetches the forecast grid point data from NWS API, retrieves the detailed forecast, and formats the next 5 periods into a string response.
    @mcp.tool()
    async def get_forecast(latitude: float, longitude: float) -> str:
        """Get weather forecast for a location using NWS (US only).
    
        Args:
            latitude: Latitude of the location
            longitude: Longitude of the location
        """
        print(f"get_forecast called with lat: {latitude}, lon: {longitude}", file=sys.stderr)
        # First get the forecast grid endpoint
        points_url = f"{NWS_API_BASE}/points/{latitude},{longitude}"
        points_data = await make_nws_request(points_url)
    
        if not points_data:
            return "Unable to fetch forecast data for this location."
    
        # Get the forecast URL from the points response
        forecast_url = points_data["properties"]["forecast"]
        forecast_data = await make_nws_request(forecast_url)
    
        if not forecast_data:
            return "Unable to fetch detailed forecast."
    
        # Format the periods into a readable forecast
        periods = forecast_data["properties"]["periods"]
        forecasts = []
        for period in periods[:5]:  # Only show next 5 periods
            forecast = f"""
    {period['name']}:
    Temperature: {period['temperature']}°{period['temperatureUnit']}
    Wind: {period['windSpeed']} {period['windDirection']}
    Forecast: {period['detailedForecast']}
    """
            forecasts.append(forecast)
    
        return "\n---\n".join(forecasts)
  • Input/output schema defined by function signature (latitude: float, longitude: float) -> str and docstring describing parameters.
    async def get_forecast(latitude: float, longitude: float) -> str:
        """Get weather forecast for a location using NWS (US only).
    
        Args:
            latitude: Latitude of the location
            longitude: Longitude of the location
        """
  • Supporting utility function used by get_forecast to make authenticated HTTP requests to the NWS API endpoints.
    async def make_nws_request(url: str) -> dict[str, Any] | None:
        """Make a request to the NWS API with proper error handling."""
        headers = {
            "User-Agent": USER_AGENT,
            "Accept": "application/geo+json"
        }
        async with httpx.AsyncClient() as client:
            try:
                response = await client.get(url, headers=headers, timeout=30.0)
                response.raise_for_status()
                return response.json()
            except Exception as e:
                print(f"NWS API error: {e}", file=sys.stderr)
                return None

Latest Blog Posts

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/tranducthai/mcp_protocol_weather'

If you have feedback or need assistance with the MCP directory API, please join our Discord server