get_forecast
Fetch detailed weather forecasts for specific geographic locations using latitude and longitude coordinates. Retrieves prediction data from the National Weather Service for accurate local weather information.
Instructions
Get weather forecast for a location.
Args:
latitude: Latitude of the location
longitude: Longitude of the locationInput Schema
| Name | Required | Description | Default |
|---|---|---|---|
| latitude | Yes | ||
| longitude | Yes |
Implementation Reference
- weather.py:63-97 (handler)The main get_forecast tool implementation that fetches weather forecast from NWS API for a given latitude/longitude and returns formatted forecast data
@mcp.tool() async def get_forecast(latitude: float, longitude: float) -> str: """Get weather forecast for a location. Args: latitude: Latitude of the location longitude: Longitude of the location """ # 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) - weather.py:63-63 (registration)MCP tool decorator that registers get_forecast as an MCP tool with the FastMCP server
@mcp.tool() - weather.py:17-30 (helper)Helper function make_nws_request used by get_forecast to make HTTP requests to the NWS API with proper error handling
#helper function 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: return None - weather.py:64-70 (schema)Input schema definition via type hints (latitude: float, longitude: float) and docstring Args section describing the expected parameters
async def get_forecast(latitude: float, longitude: float) -> str: """Get weather forecast for a location. Args: latitude: Latitude of the location longitude: Longitude of the location """