loading…
Search for a command to run...
loading…
Model Context Protocol server for Open-Meteo weather APIs
npm version GitHub release Docker Image
A comprehensive Model Context Protocol (MCP) server that provides access to Open-Meteo weather APIs for use with Large Language Models.
This MCP server provides complete access to Open-Meteo APIs, including:
weather_forecast) - 7-day forecasts with hourly and daily resolutionweather_archive) - Historical ERA5 data from 1940 to presentair_quality) - PM2.5, PM10, ozone, nitrogen dioxide, pollen, European/US AQI indices, UV index and other pollutantsmarine_weather) - Wave height, wave period, wave direction and sea surface temperatureelevation) - Digital elevation model data for given coordinatesgeocoding) - Search locations worldwide by name or postal code, get coordinates and detailed location informationdwd_icon_forecast) - German weather service high-resolution model for Europegfs_forecast) - US weather service global model with high-resolution North America datameteofrance_forecast) - French weather service AROME and ARPEGE modelsecmwf_forecast) - European Centre for Medium-Range Weather Forecastsjma_forecast) - Japan Meteorological Agency high-resolution model for Asiametno_forecast) - Norwegian weather service for Nordic countriesgem_forecast) - Canadian weather service modelflood_forecast) - River discharge and flood forecasts from GloFAS (Global Flood Awareness System)seasonal_forecast) - Long-range forecasts up to 9 months aheadclimate_projection) - CMIP6 climate change projections for different warming scenariosensemble_forecast) - Multiple model runs showing forecast uncertaintyNo installation required! The server will run directly via npx.
npm install -g open-meteo-mcp-server
# Clone the repository
git clone https://github.com/cmer81/open-meteo-mcp.git
cd open-meteo-mcp
# Install dependencies
npm install
# Build the project
npm run build
Add the following configuration to your Claude Desktop config file:
{
"mcpServers": {
"open-meteo": {
"command": "npx",
"args": ["-y", "-p", "open-meteo-mcp-server", "open-meteo-mcp-server"]
}
}
}
{
"mcpServers": {
"open-meteo": {
"command": "npx",
"args": ["-y", "-p", "open-meteo-mcp-server", "open-meteo-mcp-server"],
"env": {
"OPEN_METEO_API_URL": "https://api.open-meteo.com",
"OPEN_METEO_AIR_QUALITY_API_URL": "https://air-quality-api.open-meteo.com",
"OPEN_METEO_MARINE_API_URL": "https://marine-api.open-meteo.com",
"OPEN_METEO_ARCHIVE_API_URL": "https://archive-api.open-meteo.com",
"OPEN_METEO_SEASONAL_API_URL": "https://seasonal-api.open-meteo.com",
"OPEN_METEO_ENSEMBLE_API_URL": "https://ensemble-api.open-meteo.com",
"OPEN_METEO_GEOCODING_API_URL": "https://geocoding-api.open-meteo.com",
"OPEN_METEO_FLOOD_API_URL": "https://flood-api.open-meteo.com",
"OPEN_METEO_CLIMATE_API_URL": "https://climate-api.open-meteo.com"
}
}
}
}
If you're developing locally or installed from source:
{
"mcpServers": {
"open-meteo": {
"command": "node",
"args": ["/path/to/open-meteo-mcp/dist/index.js"],
"env": {
"OPEN_METEO_API_URL": "https://api.open-meteo.com",
"OPEN_METEO_AIR_QUALITY_API_URL": "https://air-quality-api.open-meteo.com",
"OPEN_METEO_MARINE_API_URL": "https://marine-api.open-meteo.com",
"OPEN_METEO_ARCHIVE_API_URL": "https://archive-api.open-meteo.com",
"OPEN_METEO_SEASONAL_API_URL": "https://seasonal-api.open-meteo.com",
"OPEN_METEO_ENSEMBLE_API_URL": "https://ensemble-api.open-meteo.com",
"OPEN_METEO_GEOCODING_API_URL": "https://geocoding-api.open-meteo.com",
"OPEN_METEO_FLOOD_API_URL": "https://flood-api.open-meteo.com",
"OPEN_METEO_CLIMATE_API_URL": "https://climate-api.open-meteo.com"
}
}
}
}
If you're using your own Open-Meteo instance:
{
"mcpServers": {
"open-meteo": {
"command": "npx",
"args": ["-y", "-p", "open-meteo-mcp-server", "open-meteo-mcp-server"],
"env": {
"OPEN_METEO_API_URL": "https://your-meteo-api.example.com",
"OPEN_METEO_AIR_QUALITY_API_URL": "https://air-quality-api.example.com",
"OPEN_METEO_MARINE_API_URL": "https://marine-api.example.com",
"OPEN_METEO_ARCHIVE_API_URL": "https://archive-api.example.com",
"OPEN_METEO_SEASONAL_API_URL": "https://seasonal-api.example.com",
"OPEN_METEO_ENSEMBLE_API_URL": "https://ensemble-api.example.com",
"OPEN_METEO_GEOCODING_API_URL": "https://geocoding-api.example.com",
"OPEN_METEO_FLOOD_API_URL": "https://flood-api.example.com",
"OPEN_METEO_CLIMATE_API_URL": "https://climate-api.example.com"
}
}
}
}
The server also supports Streamable HTTP transport for remote deployments. Set the TRANSPORT environment variable to http:
TRANSPORT=http PORT=3000 npx open-meteo-mcp-server
This starts an Express server on the specified port (default: 3000) with the MCP endpoint at /mcp. The HTTP transport supports session management with unique session IDs per client.
For production deployments, enable authentication and rate limiting:
API_KEY=your-secret-key RATE_LIMIT_RPM=60 TRANSPORT=http PORT=3000 npx open-meteo-mcp-server
Clients must then include the key in every request:
Authorization: Bearer your-secret-key
# or
X-API-Key: your-secret-key
# Start in HTTP mode (production)
npm run start:http
# Development with auto-reload in HTTP mode
npm run dev:http
The server can be easily deployed using Docker.
Pull and run the official image:
# Pull the latest image
docker pull ghcr.io/cmer81/open-meteo-mcp:latest
# Run the container
docker run -d \
--name open-meteo-mcp \
-p 3000:3000 \
ghcr.io/cmer81/open-meteo-mcp:latest
# Check health
curl http://localhost:3000/health
Available tags:
latest - Latest stable releasev1.x.x - Specific version (e.g., v1.1.3)1 - Latest v1.x.x release1.1 - Latest v1.1.x releaseThe repository includes two Docker Compose configurations:
Production (uses pre-built image):
# Start with pre-built image from GitHub Container Registry
docker compose up -d
# View logs
docker compose logs -f
# Stop the server
docker compose down
Development (builds from source):
# Build and start from local source
docker compose -f docker-compose.dev.yml up -d
# Rebuild after code changes
docker compose -f docker-compose.dev.yml up -d --build
If you prefer to build the image yourself:
# Build the image
npm run docker:build
# or
docker build -t open-meteo-mcp-server .
# Run the container
npm run docker:run
# or
docker run -p 3000:3000 open-meteo-mcp-server
Copy .env.example to .env and customize as needed:
cp .env.example .env
# Edit .env with your configuration
Then update docker-compose.yml to use the .env file or pass environment variables directly.
The HTTP server includes a health check endpoint:
curl http://localhost:3000/health
# Response: {"status":"ok"}
This endpoint is used by Docker's HEALTHCHECK and can be integrated with container orchestration platforms (Kubernetes, Docker Swarm, etc.).
All environment variables are optional and have sensible defaults:
OPEN_METEO_API_URL - Base URL for Open-Meteo forecast API (default: https://api.open-meteo.com)OPEN_METEO_AIR_QUALITY_API_URL - Air quality API URL (default: https://air-quality-api.open-meteo.com)OPEN_METEO_MARINE_API_URL - Marine weather API URL (default: https://marine-api.open-meteo.com)OPEN_METEO_ARCHIVE_API_URL - Historical data API URL (default: https://archive-api.open-meteo.com)OPEN_METEO_SEASONAL_API_URL - Seasonal forecast API URL (default: https://seasonal-api.open-meteo.com)OPEN_METEO_ENSEMBLE_API_URL - Ensemble forecast API URL (default: https://ensemble-api.open-meteo.com)OPEN_METEO_GEOCODING_API_URL - Geocoding API URL (default: https://geocoding-api.open-meteo.com)OPEN_METEO_FLOOD_API_URL - Flood forecast API URL (default: https://flood-api.open-meteo.com)OPEN_METEO_CLIMATE_API_URL - Climate projection API URL (default: https://climate-api.open-meteo.com)TRANSPORT - Transport mode: http for Streamable HTTP, omit for stdio (default: stdio)PORT - HTTP server port when using HTTP transport (default: 3000)API_KEY - When set, all requests to /mcp must include this key via Authorization: Bearer <key> or X-API-Key: <key>. Leave unset for open access (local/dev mode).RATE_LIMIT_RPM - Maximum requests per minute per IP (default: 60). HTTP transport only.TRUSTED_PROXIES - Comma-separated list of trusted proxy IPs or CIDR ranges (e.g. 10.0.0.0/8,172.16.0.0/12). When set, X-Forwarded-For is honoured only for requests originating from these addresses. Leave unset to always use the direct connection IP.The skills/ directory contains SKILL.md files that help AI assistants use this MCP server effectively. They act as contextual guides — the AI reads the relevant skill to know which tool to call and how to use its parameters.
| Skill | File | Best for |
|---|---|---|
open-meteo |
skills/open-meteo/SKILL.md |
Everyday weather: forecasts, historical data, air quality, marine conditions, elevation |
open-meteo-advanced |
skills/open-meteo-advanced/SKILL.md |
Specific models (ECMWF, GFS, DWD ICON…), ensemble uncertainty, seasonal outlooks, climate projections |
Copy the skill(s) to your Claude skills directory:
cp -r skills/open-meteo ~/.claude/skills/
cp -r skills/open-meteo-advanced ~/.claude/skills/
This installs them at ~/.claude/skills/open-meteo/SKILL.md and ~/.claude/skills/open-meteo-advanced/SKILL.md. Claude Code will load the relevant skill automatically when you ask weather-related questions.
Upload the SKILL.md file directly as a document in your Claude Desktop conversation:
skills/open-meteo/SKILL.mdskills/open-meteo-advanced/SKILL.mdUpload one skill per conversation. The AI will use it as a reference guide throughout the session.
Find the coordinates for Paris, France
Search for locations named "Berlin" and return the top 5 results
What are the coordinates for postal code 75001?
Search for "Lyon" in France only (countryCode: FR) with results in French (language: fr)
Find all cities named "London" in the United Kingdom with English descriptions
Can you get me the weather forecast for Paris (48.8566, 2.3522) with temperature, humidity, and precipitation for the next 3 days?
What were the temperatures in London during January 2023?
What's the current air quality in Beijing with PM2.5 and ozone levels?
Get me the wave height and sea surface temperature for coordinates 45.0, -125.0 for the next 5 days.
Check the river discharge forecast for coordinates 52.5, 13.4 for the next 30 days.
Show me temperature projections for New York from 2050 to 2070 using CMIP6 models.
latitude : Latitude in WGS84 coordinate system (-90 to 90)longitude : Longitude in WGS84 coordinate system (-180 to 180)temperature_2m : Temperature at 2 metersrelative_humidity_2m : Relative humidityprecipitation : Precipitationwind_speed_10m : Wind speed at 10 meterswind_direction_10m : Wind directionpressure_msl : Mean sea level pressurecloud_cover : Cloud cover percentageweather_code : Weather condition codevisibility : Visibilityuv_index : UV indextemperature_2m_max/min : Maximum/minimum temperaturesprecipitation_sum : Total precipitationwind_speed_10m_max : Maximum wind speedsunrise/sunset : Sunrise and sunset timesweather_code : Weather condition codeuv_index_max : Maximum UV indexpm10 : PM10 particlespm2_5 : PM2.5 particlescarbon_monoxide : Carbon monoxidenitrogen_dioxide : Nitrogen dioxideozone : Ozonesulphur_dioxide : Sulfur dioxideammonia : Ammoniadust : Dust particlesalder_pollen : Alder pollen (Europe only)birch_pollen : Birch pollen (Europe only)grass_pollen : Grass pollen (Europe only)mugwort_pollen : Mugwort pollen (Europe only)olive_pollen : Olive pollen (Europe only)ragweed_pollen : Ragweed pollen (Europe only)european_aqi : European Air Quality Indexeuropean_aqi_pm2_5 : European AQI for PM2.5european_aqi_pm10 : European AQI for PM10european_aqi_nitrogen_dioxide : European AQI for NO₂european_aqi_ozone : European AQI for ozoneeuropean_aqi_sulphur_dioxide : European AQI for SO₂us_aqi : US Air Quality Indexus_aqi_pm2_5 : US AQI for PM2.5us_aqi_pm10 : US AQI for PM10us_aqi_nitrogen_dioxide : US AQI for NO₂us_aqi_ozone : US AQI for ozoneus_aqi_sulphur_dioxide : US AQI for SO₂us_aqi_carbon_monoxide : US AQI for COuv_index : UV indexuv_index_clear_sky : UV index under clear sky conditionswave_height : Wave heightwave_direction : Wave directionwave_period : Wave periodwind_wave_height : Wind wave heightswell_wave_height : Swell wave heightsea_surface_temperature : Sea surface temperaturetemperature_unit : celsius, fahrenheitwind_speed_unit : kmh, ms, mph, knprecipitation_unit : mm, inchtimezone : Europe/Paris, America/New_York, etc.forecast_days : Number of forecast days (varies by API)past_days : Include past days datastart_date / end_date : Date range for historical data (YYYY-MM-DD format)# Development with auto-reload
npm run dev
# Build TypeScript
npm run build
# Start production server
npm start
# Run tests
npm test
# Type checking
npm run typecheck
# Linting
npm run lint
src/
├── index.ts # MCP server entry point
├── client.ts # HTTP client for Open-Meteo API
├── tools.ts # MCP tool definitions
├── types.ts # Zod validation schemas
└── security.ts # Auth middleware, rate limiter, IP extraction
This server provides access to all major Open-Meteo endpoints:
The server provides comprehensive error handling with detailed error messages for:
For detailed API documentation, refer to the openapi.yml file and the Open-Meteo API documentation.
Contributions are welcome! Please feel free to submit a Pull Request.
git clone https://github.com/your-username/open-meteo-mcp.gitnpm installgit checkout -b feature/amazing-featurenpm testgit commit -m 'Add amazing feature'git push origin feature/amazing-featureThis project uses automated releases via GitHub Actions. To create a new release:
# For a patch release (1.0.0 -> 1.0.1)
npm run release:patch
# For a minor release (1.0.0 -> 1.1.0)
npm run release:minor
# For a major release (1.0.0 -> 2.0.0)
npm run release:major
The GitHub Action will automatically:
MIT
Добавь это в claude_desktop_config.json и перезапусти Claude Desktop.
{
"mcpServers": {
"open-meteo-mcp-server": {
"command": "npx",
"args": [
"-y",
"open-meteo-mcp-server"
]
}
}
}pro-tip
Поставил Open Meteo Mcp Server? Скажи Claude: «запомни почему я установил Open Meteo Mcp Server и что хочу попробовать» — попадёт в твой Vault.
как это работает →