open-meteo-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@open-meteo-mcp What's the weather in Tokyo?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
This repository has been consolidated into theswiss-mcp mono-repo.
New development happens in packages/open-meteo-mcp/. This repo is kept for historical reference only.
Open Meteo MCP Server
A Model Context Protocol (MCP) server providing weather and snow condition tools via the Open-Meteo API.
Version 3.3.0 - Full type safety, automated quality checks, 90% test coverage!
Features
Core Capabilities
Geocoding: Search locations by name instead of coordinates
Weather Forecasts: Get current weather and multi-day forecasts for any location
Snow Conditions: Get snow depth, snowfall, and mountain weather data
Air Quality: Monitor AQI, pollutants, UV index, and pollen levels
MCP Resources: Weather codes, ski resort coordinates, AQI reference, Swiss locations
MCP Prompts: Guided workflows for ski trips, outdoor activities, and travel planning
Free API: No API key required - powered by Open-Meteo's free weather API
MCP Integration: Seamlessly integrates with MCP-compatible clients like Claude Desktop
Quality & Reliability (Phase 8 Complete)
Type Safety: 0 mypy errors, full type annotations across codebase
Code Quality: 100% ruff formatting and linting compliant
Error Handling: Standardized error handling decorators across all tools (Phase 8)
Automated Checks: Pre-commit hooks enforce quality on every commit
Test Coverage: 248+ tests passing, 90%+ code coverage
Production Ready: Fully tested, documented, and ready for deployment
Related MCP server: Weather MCP Server
Tools
search_location
Search for locations by name to get coordinates (NEW in v2.1).
Parameters:
name(required): Location name to searchcount(optional): Number of results (1-100, default: 10)language(optional): Language for results (default: "en")country(optional): Country code filter (e.g., "CH" for Switzerland)
Example: search_location(name="Zurich") → Returns coordinates, elevation, timezone
get_weather
Get weather forecast for a location with temperature, precipitation, humidity, and more.
Parameters:
latitude(required): Latitude in decimal degreeslongitude(required): Longitude in decimal degreesforecast_days(optional): Number of forecast days (1-16, default: 7)include_hourly(optional): Include hourly forecasts (default: true)timezone(optional): Timezone for timestamps (default: "auto")
Enhanced in v2.1: Now includes precipitation probability, apparent temperature, UV index, cloud cover, visibility, wind gusts
get_snow_conditions
Get snow conditions and forecasts for mountain locations.
Parameters:
latitude(required): Latitude in decimal degreeslongitude(required): Longitude in decimal degreesforecast_days(optional): Number of forecast days (1-16, default: 7)include_hourly(optional): Include hourly data (default: true)timezone(optional): Timezone for timestamps (default: "Europe/Zurich")
Enhanced in v2.1: Now includes wind chill, cloud cover, precipitation probability
get_air_quality
Get air quality forecast including AQI, pollutants, UV index, and pollen (NEW in v2.1).
Parameters:
latitude(required): Latitude in decimal degreeslongitude(required): Longitude in decimal degreesforecast_days(optional): Number of forecast days (1-5, default: 5)include_pollen(optional): Include pollen data (default: true, Europe only)
Returns: European/US AQI, PM10, PM2.5, O3, NO2, SO2, CO, UV index, pollen counts
Resources
The server provides MCP resources for reference data:
weather-codes
WMO weather code reference with descriptions, categories, and travel impact.
URI:
weather://codesFormat: JSON
Content: 28 weather codes with interpretations
...existing code...
swiss-locations
Popular Swiss locations with coordinates (NEW in v2.1).
URI:
weather://swiss-locationsFormat: JSON
Content: Cities, mountains, passes, and lakes
aqi-reference
Air Quality Index interpretation guide (NEW in v2.1).
URI:
weather://aqi-referenceFormat: JSON
Content: European/US AQI scales, UV index, pollen levels, health recommendations
weather-parameters
Available weather and snow parameters from Open-Meteo API.
URI:
weather://parametersFormat: JSON
Content: Hourly/daily parameters with units and categories
Prompts
The server provides MCP prompts to guide LLM workflows:
ski-trip-weather
Guide for checking snow conditions and weather for ski trips.
Arguments: resort, dates
Workflow: Resort lookup → Snow conditions → Weather → Assessment
plan-outdoor-activity
Weather-aware outdoor activity planning workflow.
Arguments: activity, location, timeframe
Workflow: Activity sensitivity → Weather check → Suitability assessment
weather-aware-travel
Integration pattern for combining weather with journey planning.
Arguments: destination, travel_dates, trip_type
Workflow: Destination weather → Packing advice → Activity suggestions
Technology Stack
Python 3.11+
FastMCP - MCP server framework
httpx - Async HTTP client
Pydantic - Data validation
structlog - Structured logging
uv - Fast Python package manager
Prerequisites
Python 3.11 or higher
uv package manager
Installation
Install uv (if not already installed)
Windows (PowerShell):
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"macOS/Linux:
curl -LsSf https://astral.sh/uv/install.sh | shInstall Dependencies
uv syncThis will install all required dependencies including FastMCP, httpx, pydantic, and testing tools.
Running Locally
Stdio Mode (for Claude Desktop)
uv run python -m open_meteo_mcp.serverTesting with MCP Inspector
npx @modelcontextprotocol/inspector uv run python -m open_meteo_mcp.serverMCP Integration
Claude Desktop Configuration
Add to your Claude Desktop configuration file:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"open-meteo": {
"command": "uv",
"args": [
"--directory",
"C:\\Users\\YourUsername\\path\\to\\open-meteo-mcp",
"run",
"python",
"-m",
"open_meteo_mcp.server"
]
}
}
}Note: Update the --directory path to match your local installation.
Development
Running Tests
# Run all tests
uv run pytest tests/ -v
# Run with coverage
uv run pytest tests/ --cov=open_meteo_mcp --cov-report=html
# Run specific test file
uv run pytest tests/test_models.py -vProject Structure
open-meteo-mcp/
├── src/
│ └── open_meteo_mcp/
│ ├── __init__.py
│ ├── server.py # FastMCP server with tools, resources, prompts
│ ├── client.py # Open-Meteo API client
│ ├── models.py # Pydantic models
│ ├── helpers.py # Utility functions
│ └── data/ # JSON resource files
│ ├── weather-codes.json
...existing code...
│ └── weather-parameters.json
├── tests/
│ ├── test_models.py
│ ├── test_client.py
│ └── test_helpers.py
├── pyproject.toml # Project configuration
└── .fastmcp/
└── config.yaml # FastMCP Cloud deployment configDeployment
FastMCP Cloud
Deploy to FastMCP Cloud for remote access:
# Login to FastMCP Cloud
fastmcp login
# Deploy the server
fastmcp deploy
# Check deployment status
fastmcp status open-meteo-mcpThe server will be available at https://open-meteo-mcp.fastmcp.cloud
Example Usage
Once connected via MCP, you can ask:
Geocoding (NEW):
"Find coordinates for Zurich"
"Where is the Matterhorn?"
"Search for Interlaken"
Weather Queries:
"What's the weather in Bern, Switzerland?"
"Show me the 7-day forecast for Zurich"
"What's the UV index tomorrow?"
"Chance of rain this weekend?"
Air Quality (NEW):
"What's the air quality in Zurich?"
"Pollen forecast for Bern?"
"Is it safe to exercise outdoors today?"
Snow Conditions:
"What are the snow conditions in Zermatt?"
"Will it snow in the Alps this week?"
"Wind conditions at Verbier?"
Ski Trip Planning (uses prompts + resources):
"Plan a ski trip to Verbier this weekend"
"Compare snow conditions across St. Moritz, Davos, and Zermatt"
Outdoor Activities (uses prompts):
"I want to hike the Eiger Trail next week, what's the weather?"
"Best days for cycling around Lake Geneva this week?"
"Can I go hiking tomorrow? I have allergies" (checks weather + pollen)
Weather Codes
The API returns WMO weather codes. See docs/WEATHER_CODES.md for the complete reference.
Migration from Java
This is version 2.0 of the Open Meteo MCP server, migrated from Java/Spring Boot to Python/FastMCP for:
Faster development and iteration
Easier deployment with FastMCP Cloud
Better integration with the MCP ecosystem
Simpler codebase and dependencies
The Java version (v1.x) is archived in the java-v1 branch.
License
MIT License
Credits
Weather data provided by Open-Meteo - Free Open-Source Weather API.
Available Tools
11 toolscompare_locationsA
Compare weather conditions across multiple locations.
Rank locations by specified weather criteria to find the best destination.
Comparison Criteria:
best_overall: Overall comfort and conditions
warmest: Highest temperature
driest: Lowest precipitation probability
sunniest: Best weather codes and visibility
best_air_quality: Lowest AQI
calmest: Lowest wind speeds
Examples:
Compare weekend weather between Zurich, Bern, and Geneva
Find the warmest location for outdoor activities
Identify the driest location for hiking
Compare air quality across multiple cities
Use this tool when:
Choosing between multiple destination options
Planning group activities
Finding optimal conditions for specific activities
Args: locations: List of location dicts with 'name', 'latitude', 'longitude' criteria: Comparison criteria (default: 'best_overall') forecast_days: Days to forecast (1-16, default: 1)
Returns: Dictionary containing: - criteria: The comparison criteria used - locations: Ranked list of locations with scores - winner: Best location based on criteria - details: Key weather metrics for each location
Inputs: locations (required), criteria, forecast_days. Returns: object
get_air_qualityA
Retrieves air quality forecast including AQI, pollutants, UV index, and pollen data.
Monitor air quality for health-aware outdoor planning, allergy management, and UV exposure assessment. Provides both European and US Air Quality Indices along with detailed pollutant measurements and health interpretations.
Examples:
"What's the air quality in Zurich?" → AQI, PM2.5, PM10, ozone levels
"Pollen forecast for Bern?" → Grass, birch, alder pollen counts
"UV index for tomorrow?" → UV radiation forecast
Provides:
European AQI (0-100+) and US AQI (0-500) with health interpretations
Particulate matter (PM10, PM2.5)
Gases (O3, NO2, SO2, CO, NH3)
UV index (current and clear sky)
Pollen data (Europe only): alder, birch, grass, mugwort, olive, ragweed
Health Guidelines:
European AQI: 0-20 (Good), 20-40 (Fair), 40-60 (Moderate), 60-80 (Poor), 80-100 (Very Poor), 100+ (Extremely Poor)
US AQI: 0-50 (Good), 51-100 (Moderate), 101-150 (Unhealthy for Sensitive), 151-200 (Unhealthy), 201-300 (Very Unhealthy), 301-500 (Hazardous)
UV Index: 0-2 (Low), 3-5 (Moderate), 6-7 (High), 8-10 (Very High), 11+ (Extreme)
Use this tool when:
Planning outdoor activities for people with asthma/allergies
Assessing air quality for exercise or sports
Checking pollen levels during allergy season
Monitoring UV exposure for sun safety
Args: latitude: Latitude in decimal degrees longitude: Longitude in decimal degrees forecast_days: Number of forecast days (1-5, default: 5) include_pollen: Include pollen data (default: true, Europe only) timezone: Timezone for timestamps (default: 'auto')
Returns: Dictionary containing: - current (dict): Current AQI with interpretations, pollutants, UV index - hourly (list[dict]): Hourly air quality forecasts with AQI interpretations - pollen (dict | None): Pollen data if include_pollen=True and location is in Europe - location (dict): Location metadata
Inputs: latitude (required), longitude (required), timezone, forecast_days, +1 more. Returns: object
get_astronomyA
Provides astronomical data for a location (sunrise, sunset, golden hour).
Useful for photography, event planning, and outdoor activity scheduling.
Data Provided:
Sunrise and sunset times
Day length
Golden hour (best lighting for photography)
Blue hour (evening twilight)
Moon phase information
Best photography windows
Use cases:
Photography location scouting
Outdoor event planning
Sunrise/sunset viewing trips
Time-lapse and video production planning
Examples:
"When is sunset in Zurich?"
"Best time for golden hour photography?"
"What's the sunrise time for hiking?"
Args: latitude: Latitude in decimal degrees longitude: Longitude in decimal degrees timezone: Timezone for timestamps (default: 'auto' tries to auto-detect)
Returns: Dictionary containing: - sunrise: Sunrise time (ISO format) - sunset: Sunset time (ISO format) - day_length_hours: Total daylight hours - golden_hour: Start and end times for optimal lighting - blue_hour: Twilight window for photography - moon_phase: Current lunar phase - best_photography_windows: Recommended times for photos
Inputs: latitude (required), longitude (required), timezone. Returns: object
get_comfort_indexA
Calculates outdoor activity comfort index (0-100). Takes latitude, longitude, and timezone parameters.
Combines weather, air quality, UV, and precipitation factors into a single comfort score for planning outdoor activities.
Score Interpretation:
80-100: Perfect for outdoor activities
60-79: Good conditions
40-59: Fair conditions, plan accordingly
20-39: Poor conditions, seek indoor alternatives
0-19: Very poor conditions
Factors Included:
Thermal comfort (temperature, humidity, wind chill)
Air quality (PM2.5, PM10, AQI)
Precipitation risk
UV safety (skin protection needs)
Weather conditions (storms, visibility)
Examples:
"Is it good weather for hiking?"
"What's the outdoor comfort level?"
"Can I do outdoor sports today?"
Args: latitude: Latitude in decimal degrees longitude: Longitude in decimal degrees timezone: Timezone for timestamps (default: 'auto')
Returns: Dictionary containing: - overall: Comfort index (0-100) - factors: Breakdown of individual factors - recommendation: Text recommendation for activities
Inputs: latitude (required), longitude (required), timezone. Returns: object
get_historical_weatherA
Retrieves historical weather data for trend analysis and research.
Access 80+ years of historical weather data from Open-Meteo archives.
Use cases:
Compare weather patterns year-over-year
Climate trend analysis
Event planning based on historical patterns
Research and academic studies
Examples:
"How was the weather in Zurich on this date last year?"
"Get average temperatures for July over the past 10 years"
"Compare winter snow patterns"
Args: latitude: Latitude in decimal degrees longitude: Longitude in decimal degrees start_date: Start date in ISO format (YYYY-MM-DD) end_date: End date in ISO format (YYYY-MM-DD) include_hourly: Include hourly historical data (default: false) timezone: Timezone for timestamps (default: 'auto')
Returns: Dictionary containing: - historical weather data with temperature, precipitation, wind, etc. - daily summaries (temperature min/max, precipitation, weather codes) - optional hourly data if requested
Inputs: end_date (required), latitude (required), longitude (required), start_date (required), +2 more. Returns: object
get_marine_conditionsA
Retrieves marine conditions for lakes and coastal areas.
Get wave height, swell, period, and wind-driven sea states for water activities.
Examples:
Check Lake Geneva conditions for sailing
Monitor Zurich Lake for water sports
Plan boating activities based on wave forecast
Provides:
Wave height (m)
Wave direction and period (seconds)
Swell characteristics
Wind-wave parameters
Hourly and daily forecasts
Use this tool when:
Planning water sports (sailing, windsurfing, kayaking)
Boating safety assessment
Recreation planning on Swiss lakes
Args: latitude: Latitude in decimal degrees longitude: Longitude in decimal degrees forecast_days: Number of forecast days (1-16, default: 7) include_hourly: Include hourly data (default: true) timezone: Timezone for timestamps (default: 'auto')
Returns: Dictionary containing: - wave_height, wave_direction, wave_period - swell wave data - wind-wave parameters - hourly and daily forecasts
Inputs: latitude (required), longitude (required), timezone, forecast_days, +1 more. Returns: object
get_snow_conditionsA
Retrieves snow conditions and forecasts for mountain locations.
Parameters:
latitude (required): Latitude in decimal degrees
longitude (required): Longitude in decimal degrees
forecast_days (optional): Number of forecast days (1-16, default: 7)
include_hourly (optional): Include hourly data (default: true)
timezone (optional): Timezone for timestamps (default: "Europe/Zurich")
Returns:
Current snow depth (meters)
Recent snowfall (cm)
Forecast snowfall
Temperature trends
Hourly and daily snow data
Enriched with ski condition assessment
Use this tool for:
Ski trip planning
Checking snow conditions at resorts
Mountain weather forecasts
Avalanche risk assessment (via snow depth trends)
Args: latitude: Latitude in decimal degrees (e.g., 45.9763 for Zermatt) longitude: Longitude in decimal degrees (e.g., 7.6586 for Zermatt) forecast_days: Number of forecast days (1-16, default: 7) include_hourly: Include hourly data (default: true) timezone: Timezone for timestamps (default: 'Europe/Zurich')
Returns: Dictionary containing: - current (dict): Current snow depth and recent snowfall with ski assessment - hourly (list[dict] | None): Hourly snow data if include_hourly=True - daily (list[dict]): Daily snow forecasts with accumulation and temperature - location (dict): Mountain location metadata
Inputs: latitude (required), longitude (required), timezone, forecast_days, +1 more. Returns: object
get_weatherA
Retrieves weather forecast for a location (temperature, rain, sunshine).
Get current weather conditions for any location in Switzerland (or worldwide).
Examples:
"What's the weather in Zürich?" → latitude: 47.3769, longitude: 8.5417
"Weather at destination" → Use coordinates from journey endpoint
"Is it raining in Bern?" → Check precipitation field
Provides:
Current temperature (°C)
Weather condition (clear, cloudy, rain, snow)
Precipitation amount (mm)
Wind speed (km/h)
Humidity (%)
Hourly and daily forecasts
Enriched with weather interpretation and formatting
Data Source: Open-Meteo API (free, no API key required)
Performance: < 200ms
Use this tool when:
User asks about weather conditions
Planning outdoor activities
Checking if weather affects travel
Combined with journey planning
Args: latitude: Latitude in decimal degrees (e.g., 46.9479 for Bern) longitude: Longitude in decimal degrees (e.g., 7.4474 for Bern) forecast_days: Number of forecast days (1-16, default: 7) include_hourly: Include hourly forecasts (default: true) timezone: Timezone for timestamps (e.g., 'Europe/Zurich', default: 'auto')
Returns: Dictionary containing: - current (dict): Current weather with temperature, weather_code, wind_speed, humidity - current_weather (dict): Enriched current conditions with interpretation, formatting - hourly (list[dict] | None): Hourly forecasts if include_hourly=True - daily (list[dict]): Daily forecasts with min/max temps, precipitation, weather codes - location (dict): Location metadata with coordinates and timezone
Inputs: latitude (required), longitude (required), timezone, forecast_days, +1 more. Returns: object
get_weather_alertsA
Generate weather alerts based on thresholds and current forecast.
Automatically identifies severe weather conditions and generates actionable alerts.
Alert Types:
Heat warnings (temperature > 30°C for 3+ hours)
Cold warnings (temperature < -10°C)
Storm warnings (wind gusts > 80 km/h or thunderstorms)
UV warnings (UV index > 8)
Wind advisories (gusts 50-80 km/h)
Severity Levels:
Advisory: Precautionary, plan accordingly
Watch: Conditions favorable for alert type
Warning: Conditions expected, take precautions
Examples:
Check for heat waves during summer
Monitor for storms before outdoor events
Plan sun protection based on UV alerts
Args: latitude: Latitude in decimal degrees longitude: Longitude in decimal degrees forecast_hours: Hours to check for alerts (1-168, default: 24) timezone: Timezone for timestamps (default: 'auto')
Returns: Dictionary containing: - latitude, longitude: Location coordinates - timezone: Timezone name - alerts (list): List of active alerts with type, severity, timing, and recommendations
Inputs: latitude (required), longitude (required), timezone, forecast_hours. Returns: object
search_locationA
Searches for locations by name to get coordinates for weather queries.
Convert location names to coordinates using fuzzy search. Essential for natural language weather queries like "weather in Zurich" instead of requiring latitude/longitude coordinates.
Examples:
"Zurich" → Returns Zurich, Switzerland with coordinates
"Bern" → Returns multiple matches (Bern CH, Bern US, etc.)
"Zermatt" → Returns ski resort with elevation data
"Lake Geneva" → Returns lake coordinates
Features:
Fuzzy matching (handles typos)
Multi-language support
Country filtering (e.g., country="CH" for Switzerland only)
Returns population, timezone, elevation
Enriched with feature type descriptions and elevation categories
Workflow:
Search for location by name
Select result (usually first is best match)
Use latitude/longitude for get_weather or get_snow_conditions
Use this tool when:
User provides location name instead of coordinates
Need to find coordinates for a city, mountain, or landmark
Want to discover locations in a specific country
Args: name: Location name to search (e.g., 'Zurich', 'Eiger', 'Lake Lucerne') count: Number of results to return (1-100, default: 10) language: Language for results (default: 'en', options: 'de', 'fr', 'it', etc.) country: Optional country code filter (e.g., 'CH' for Switzerland, 'DE' for Germany)
Returns: Dictionary containing: - results (list[dict]): List of matching locations, each with: - name (str): Location name - latitude (float): Latitude coordinate - longitude (float): Longitude coordinate - elevation (float | None): Elevation in meters - country (str): Country code - timezone (str): Timezone identifier - population (int | None): Population if applicable - feature_type_description (str): Type of location (City, Mountain, Lake, etc.) - elevation_category (str): Low, Medium, High, or Very High
Inputs: name (required), count, country, language. Returns: object
search_location_swissA
Search for locations in Switzerland with optional geographic features.
Specialized search for Swiss locations including cities, mountains, lakes, and passes.
Feature Types Supported:
PPL: Populated places (cities, towns, villages)
MT: Mountains and peaks
LK: Lakes and water bodies
PS: Mountain passes
STM: Streams and rivers
Examples:
"Find Zurich" → Zurich city
"Search for Matterhorn" → Mountain peak
"Find Lake Geneva" → Lake location
"Find Gotthard Pass" → Mountain pass
Use this tool when:
Searching specifically within Switzerland
Looking for mountains, lakes, or geographic features
Need precise coordinates for Swiss locations
Want to filter by location type
Args: name: Location name to search include_features: Include geographic features like mountains, lakes (default: false) language: Language for results (de, fr, it, en; default: en) count: Number of results (1-50, default: 10)
Returns: Dictionary containing: - results: List of matching Swiss locations with enriched metadata - total: Number of results found - country: Country code (CH) - include_features: Whether geographic features are included - language: Language of results
Inputs: name (required), count, language, include_features. Returns: object
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 11 tools
Most tools are aimed at distinct domains, but there is meaningful overlap: get_weather, get_snow_conditions, and get_marine_conditions all provide weather-type data for different contexts, and get_comfort_index/get_weather_alerts derive from the same underlying forecast data. search_location and search_location_swiss are especially easy to confuse despite the Swiss-specific scope being documented.
All tool names follow a clear lowercase snake_case verb_noun pattern: get_* for data retrieval, search_* for location lookups, and compare_locations for comparison. The style is consistent and predictable across the entire set.
Eleven tools is a reasonable size for a comprehensive weather/meteorology server. The count is not excessive, though a couple of tools (search_location_swiss, comfort_index) are arguably conveniences that overlap with or combine the functionality of other tools.
The server covers current weather, forecasts, historical data, air quality, marine conditions, astronomy, alerts, and location search, which is broad coverage for the weather domain. Minor gaps exist, such as no dedicated tool for official severe weather warnings and the lack of a reverse geocoding lookup, but agents can work around these.
Maintenance
Related MCP Connectors
Global weather via Open-Meteo: forecast, historical, marine, air quality, geocoding, elevation.
Current weather and forecast lookup as an agent tool.
Get current weather for any city and create images from your prompts. Streamline planning, reports…
Live ski snow, multi-model forecasts, powder rankings & a grounded Answer Engine for 500+ resorts.
Related MCP Servers
- AlicenseAqualityDmaintenanceProvides comprehensive access to Open-Meteo weather APIs, including forecasts, historical data, air quality, marine weather, and geocoding, enabling LLMs to retrieve weather information and location data.171,730 npmMIT
- FlicenseBqualityDmaintenanceProvides current weather conditions and forecasts for any location using the Open-Meteo API.2-
- FlicenseNot gradedqualityDmaintenanceEnables 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.34 npm-
- FlicenseNot gradedqualityDmaintenanceProvides current weather, forecasts, and travel recommendations via Open-Meteo, enabling natural language queries about weather conditions.-