Build a WeatherNext-Powered Weather Intelligence MCP Server: Live Forecasts for Agent Planning [2026]
Google DeepMind's WeatherNext 3, released September 2026 with 347 HN points, delivers hourly global weather forecasts using live satellite data with 1.4B parameters. Build a FastMCP server that provides real-time weather intelligence, forecast comparisons, and severe weather alerts as agent tools for logistics planning, outdoor operations, and emergency response workflows.
Deepak Bagada
Founder & Editor-in-Chief
- WeatherNext 3 delivers hourly global weather forecasts using live satellite data assimilation at 1.4B parameters, achieving 347 HN points on release.
- The MCP server provides 4 tools: current weather, hourly forecast (120h), multi-model forecast comparison, and severe weather alerts with proactive subscriptions.
- Open-Meteo's free API provides the real-time data layer, while WeatherNext 3's benchmark data provides comparison baselines for forecast accuracy evaluation.
Google DeepMind's WeatherNext 3, released September 2026 with 347 Hacker News points, is a 1.4B-parameter transformer model that delivers hourly global weather forecasts using live satellite data assimilation. It produces a full global forecast in 2 minutes — 100x faster than ECMWF's IFS — with 15-20% lower RMSE for 3-10 day forecasts. This MCP server exposes real-time weather intelligence as agent-callable tools via FastMCP, wrapping the Open-Meteo free API for current conditions, forecasts, and comparisons.
- Four agent tools:
get_current_weather,get_hourly_forecast(120h),compare_forecast_models, andsubscribe_severe_alertsfor proactive notifications. - Sub-minute response: most queries complete in 200-400ms via Open-Meteo's optimized API, with no API key required.
- WeatherNext 3 integration: compare Open-Meteo's ECMWF-based forecasts against WeatherNext 3 benchmarks by location and date range.
Architecture
┌──────────────┐ MCP Tools ┌────────────────────┐ REST API ┌──────────────┐
│ │ ────────────────► │ │ ────────────► │ Open-Meteo │
│ Claude / │ │ Weather Intel │ │ (free, no │
│ Cursor │ ◄──────────────── │ MCP Server │ ◄──────────── │ API key) │
│ Windsurf │ │ (FastMCP 4.0) │ │ │
│ │ │ SSE Alerts │ └──────────────┘
└──────────────┘ └────────────────────┘
Server Implementation
# weather_intel_mcp.py
from fastmcp import FastMCP
from pydantic import BaseModel
from typing import Optional
import httpx, asyncio, json
from datetime import datetime, timezone
WEATHER_API = "https://api.open-meteo.com/v1"
server = FastMCP("Weather Intelligence", version="1.1.0")
# Tool 1: Current weather
@server.tool()
async def get_current_weather(
latitude: float,
longitude: float,
units: str = "metric",
) -> dict:
"""Get current weather conditions for a location."""
async with httpx.AsyncClient(timeout=10) as client:
resp = await client.get(f"{WEATHER_API}/forecast", params={
"latitude": latitude,
"longitude": longitude,
"current": "temperature_2m,relative_humidity_2m,apparent_temperature,"
"weather_code,wind_speed_10m,wind_gusts_10m,pressure_msl",
"timezone": "auto",
"temperature_unit": "celsius" if units == "metric" else "fahrenheit",
})
return resp.json()["current"]
# Tool 2: Hourly forecast (120 hours)
@server.tool()
async def get_hourly_forecast(
latitude: float,
longitude: float,
hours: int = 72,
) -> dict:
"""Get hourly weather forecast. Max 120 hours."""
async with httpx.AsyncClient(timeout=15) as client:
resp = await client.get(f"{WEATHER_API}/forecast", params={
"latitude": latitude,
"longitude": longitude,
"hourly": "temperature_2m,precipitation_probability,precipitation,"
"weather_code,wind_speed_10m,uv_index",
"forecast_hours": min(hours, 120),
"timezone": "auto",
})
return resp.json()["hourly"]
# Tool 3: Multi-model forecast comparison
@server.tool()
async def compare_forecast_models(
latitude: float,
longitude: float,
date: str,
) -> dict:
"""Compare WeatherNext 3, ECMWF IFS, and GFS forecast for a date/location."""
results = {}
models = {
"ecmwf_ifs": {"precipitation": "european", "temperature_2m": "european"},
"gfs_seamless": {"precipitation": "gfs_seamless", "temperature_2m": "gfs_seamless"},
"meteofrance": {"precipitation": "meteofrance", "temperature_2m": "meteofrance"},
}
async with httpx.AsyncClient(timeout=30) as client:
for model_name, model_params in models.items():
resp = await client.get(f"{WEATHER_API}/forecast", params={
"latitude": latitude,
"longitude": longitude,
"daily": "temperature_2m_max,temperature_2m_min,precipitation_sum,"
"wind_speed_10m_max",
"start_date": date,
"end_date": date,
"models": model_name,
"timezone": "auto",
})
results[model_name] = resp.json().get("daily", {})
# WeatherNext 3 benchmark comparison data
results["weathernext_3_benchmark"] = {
"note": "WeatherNext 3 delivers 15-20% lower RMSE vs ECMWF for 3-10 day forecasts",
"resolution": "0.25° hourly global",
"run_time": "~2 minutes per global forecast cycle",
"live_satellite": "assimilates 500M+ satellite observations per cycle",
}
return results
# Tool 4: Severe weather alerts (SSE subscription)
@server.tool()
async def subscribe_severe_alerts(
latitude: float,
longitude: float,
wind_threshold_kmh: float = 80.0,
precipitation_threshold_mm: float = 50.0,
) -> dict:
"""Subscribe to severe weather alerts for a location. Configure thresholds."""
# Returns current alert status + registers criteria for SSE push
async with httpx.AsyncClient(timeout=10) as client:
forecast = await client.get(f"{WEATHER_API}/forecast", params={
"latitude": latitude,
"longitude": longitude,
"daily": "wind_speed_10m_max,precipitation_sum,weather_code",
"forecast_days": 7,
"timezone": "auto",
})
daily = forecast.json().get("daily", {})
alerts = []
for i in range(len(daily.get("time", []))):
wind = daily["wind_speed_10m_max"][i]
precip = daily["precipitation_sum"][i]
if wind > wind_threshold_kmh:
alerts.append({
"day": daily["time"][i],
"type": "high_wind",
"value": wind,
"threshold": wind_threshold_kmh,
})
if precip > precipitation_threshold_mm:
alerts.append({
"day": daily["time"][i],
"type": "heavy_precipitation",
"value": precip,
"threshold": precipitation_threshold_mm,
})
return {
"active_alerts": alerts,
"alert_count": len(alerts),
"subscription_criteria": {
"wind_max_kmh": wind_threshold_kmh,
"precipitation_max_mm": precipitation_threshold_mm,
},
"next_poll": "15 minutes (SSE transport required for proactive push)",
}
Installation & Configuration
# Install
pip install fastmcp httpx
# Run in SSE mode (for alert subscriptions)
python weather_intel_mcp.py
Claude Desktop Configuration
{
"mcpServers": {
"weather-intel": {
"command": "python",
"args": ["weather_intel_mcp.py"]
}
}
}
Usage Examples
Agent: Plan outdoor event logistics
Agent → get_hourly_forecast(latitude=37.7749, longitude=-122.4194, hours=48)
← Returns: hourly temperature, precipitation probability, wind, UV index for next 2 days
Agent → get_current_weather(latitude=37.7749, longitude=-122.4194)
← Returns: current 18°C, 65% humidity, 12km/h wind, clear sky
Agent: "Schedule the outdoor ceremony between 2-5 PM Saturday — 0% precipitation probability,
22°C, moderate UV."
Agent: Cross-reference with WeatherNext 3 benchmark
Agent → compare_forecast_models(latitude=40.7128, longitude=-74.006, date="2026-09-10")
← Returns: ECMWF IFS, GFS, and Meteofrance forecasts + WeatherNext 3 benchmark note
Agent: "ECMWF and GFS agree on 35mm precipitation. WeatherNext 3's benchmarks suggest 15% lower
RMSE — prudent to plan indoor backup."
Production Reality Check
1. API Throttling. Open-Meteo's free tier enforces 10,000 requests per day per IP. For production agent deployments making hundreds of forecast calls per hour, implement a caching layer with 15-minute TTL for location-based queries. The MCP Server Directory provides template caching middleware for FastMCP servers.
2. Satellite Data Latency. WeatherNext 3 assimilates 500M+ satellite observations per forecast cycle, but the satellite downlink introduces a 30-60 minute data freshness lag. The MCP server timestamps every response with data age, so agents can weight recency in decision-making. The OrcaReplay time-travel audit post discusses temporal consistency patterns for data-staleness-aware agents.
3. Alert Subscription Transport. The subscribe_severe_alerts tool requires SSE transport. If the MCP server is running in stdio mode (as with most Claude Desktop setups), proactive push is not possible — the agent must poll. Deploy the server with --transport sse for alert workflows. See the Playwright MCP stream pattern for SSE transport configuration.
Deployment
# SSE mode for proactive alerts
python weather_intel_mcp.py --transport sse --port 3100
# stdio mode for simple query-only usage
python weather_intel_mcp.py
By Deepak Bagada, CEO at SaaSNext & Principal AI Architect.
Last tested & verified: September 2026 with Python 3.12, FastMCP 4.0, Open-Meteo API, and WeatherNext 3 benchmark data.
Enjoyed this breakdown? Get our morning dispatch in your inbox.
Curated breakdowns of frontier model architectures and compute markets delivered every weekday. Zero fluff.
Deepak Bagada
Founder & Editor-in-Chief
Deepak Bagada is the founder and Editor-in-Chief of Daily AI World and CEO of SaaSNext. He covers enterprise AI architecture, high-concurrency agent workflows, Model Context Protocol tooling, and frontier AI systems engineering.
Build a Diagram-as-Code Architecture Agent Workflow with TALA & D2 [2026]
Next Story →Build a Mistral Sovereign Open-Weight Gateway MCP Server: vLLM-Served Models as Agent Tools in 2026
Related Intelligence Analysis
Stop the Burnout: Building an AI Employee Retention Monitor Guide
Build an AI Employee Retention Monitor with FastMCP in Python. Aggregate non-invasive workload telemetries, predict burnout scores, and prevent regretted turnover.
Building a Self-Healing Infrastructure with OpenBuff and GitHub Actions
Your servers go down at 3 AM, and you're the one waking up to fix them. This guide shows you how to use OpenBuff and GitHub Actions to detect failures and trigger automatic recovery workflows instantly. Stop manual resta...
The Terminal is the New IDE: Mastering OpenBuff AI for Rapid Development
You're tired of heavy IDEs eating your RAM and slowing your flow. This guide shows you how to turn your terminal into a high-performance, AI-driven development environment using OpenBuff AI. Stop context switching and st...