# Weather

Weather from Open-Meteo with GeoNames place resolve (no LLM, no geocoding tool). Tools: now, forecast (profiles), hourly, ERA5 history, air quality/pollen, marine waves/SST for seas and wind for lakes, multi-place compare, heuristic flags. Successful data tools cost 1 credit; weather_status is free. Attribution: Open-Meteo, CC BY 4.0.

**Service id:** `weather`  
**Version:** `0.1.0`  
**Status:** `available`

**Canonical payloads:** [https://mcp.glc-rag.hu/guide/weather/payload](https://mcp.glc-rag.hu/guide/weather/payload) · [markdown](https://mcp.glc-rag.hu/guide/weather/payload.md) · `docs://weather/payload`

## Authentication

MCP endpoint: `https://mcp.glc-rag.hu/mcp` (streamable HTTP)

**Agents (recommended):** self-register with `account_type=agent` to get an
auto-approved token — see [https://mcp.glc-rag.hu/guide/agent](https://mcp.glc-rag.hu/guide/agent).

Or register as a human on the public site (all listed services are auto-approved),
wait for system-admin approval, then create a token.

```http
Authorization: Bearer mcp_...
```

Cursor `mcp.json` example:

```json
{
  "mcpServers": {
    "weather": {
      "url": "https://mcp.glc-rag.hu/mcp",
      "headers": {
        "Authorization": "Bearer mcp_YOUR_TOKEN"
      }
    }
  }
}
```

## Tools

### `weather_status`

Weather service health, cache stats, and Open-Meteo quota usage.

**Input schema:**

```json
{
  "type": "object",
  "properties": {},
  "additionalProperties": false
}
```

**Examples:**

```json
{}
```

### `weather_now` — Current conditions

Current weather at a place (GeoNames resolve). Temperature, wind, precipitation, WMO text (hu+en). 1 credit.

**Input schema:**

```json
{
  "type": "object",
  "properties": {
    "place": {
      "type": "string",
      "description": "City, lake, IATA, or country name (GeoNames)"
    },
    "geoname_id": {
      "type": "integer"
    },
    "latitude": {
      "type": "number"
    },
    "longitude": {
      "type": "number"
    },
    "country_code": {
      "type": "string",
      "description": "ISO2 filter for name resolve"
    },
    "language": {
      "type": "string",
      "enum": [
        "hu",
        "en"
      ],
      "default": "hu",
      "description": "Preferred weather_text language; both hu and en are always returned"
    }
  },
  "additionalProperties": false
}
```

**Examples:**

```json
{
  "place": "Budapest"
}
```

```json
{
  "place": "BUD"
}
```

```json
{
  "geoname_id": 3054643
}
```

### `weather_forecast` — Daily forecast

1–16 day forecast (default 7). Profiles add fields (travel/agro/solar/winter). Optional compact hourly (max 48). 1 credit.

**Input schema:**

```json
{
  "type": "object",
  "properties": {
    "place": {
      "type": "string",
      "description": "City, lake, IATA, or country name (GeoNames)"
    },
    "geoname_id": {
      "type": "integer"
    },
    "latitude": {
      "type": "number"
    },
    "longitude": {
      "type": "number"
    },
    "country_code": {
      "type": "string",
      "description": "ISO2 filter for name resolve"
    },
    "language": {
      "type": "string",
      "enum": [
        "hu",
        "en"
      ],
      "default": "hu",
      "description": "Preferred weather_text language; both hu and en are always returned"
    },
    "days": {
      "type": "integer",
      "minimum": 1,
      "maximum": 16,
      "default": 7
    },
    "profile": {
      "type": "string",
      "enum": [
        "default",
        "travel",
        "agro",
        "solar",
        "winter"
      ],
      "default": "default"
    },
    "include_hourly": {
      "type": "boolean",
      "default": false
    }
  },
  "additionalProperties": false
}
```

**Examples:**

```json
{
  "place": "Szeged",
  "days": 7
}
```

```json
{
  "place": "Wien",
  "profile": "travel"
}
```

### `weather_hourly` — Hourly forecast

Next 6–48 hours (default 24) of compact weather. 1 credit.

**Input schema:**

```json
{
  "type": "object",
  "properties": {
    "place": {
      "type": "string",
      "description": "City, lake, IATA, or country name (GeoNames)"
    },
    "geoname_id": {
      "type": "integer"
    },
    "latitude": {
      "type": "number"
    },
    "longitude": {
      "type": "number"
    },
    "country_code": {
      "type": "string",
      "description": "ISO2 filter for name resolve"
    },
    "language": {
      "type": "string",
      "enum": [
        "hu",
        "en"
      ],
      "default": "hu",
      "description": "Preferred weather_text language; both hu and en are always returned"
    },
    "hours": {
      "type": "integer",
      "minimum": 6,
      "maximum": 48,
      "default": 24
    }
  },
  "additionalProperties": false
}
```

**Examples:**

```json
{
  "place": "Debrecen",
  "hours": 12
}
```

### `weather_history` — ERA5 archive

Historical weather 1940–present. start_date+end_date, max 31 days. 1 credit.

**Input schema:**

```json
{
  "type": "object",
  "properties": {
    "place": {
      "type": "string",
      "description": "City, lake, IATA, or country name (GeoNames)"
    },
    "geoname_id": {
      "type": "integer"
    },
    "latitude": {
      "type": "number"
    },
    "longitude": {
      "type": "number"
    },
    "country_code": {
      "type": "string",
      "description": "ISO2 filter for name resolve"
    },
    "language": {
      "type": "string",
      "enum": [
        "hu",
        "en"
      ],
      "default": "hu",
      "description": "Preferred weather_text language; both hu and en are always returned"
    },
    "start_date": {
      "type": "string",
      "description": "YYYY-MM-DD"
    },
    "end_date": {
      "type": "string",
      "description": "YYYY-MM-DD"
    },
    "hourly": {
      "type": "boolean",
      "default": false
    }
  },
  "required": [
    "start_date",
    "end_date"
  ],
  "additionalProperties": false
}
```

**Examples:**

```json
{
  "place": "Debrecen",
  "start_date": "2020-03-15",
  "end_date": "2020-03-16"
}
```

### `weather_air` — Air quality and pollen

European/US AQI, PM2.5/PM10, O3, NO2, grass/birch/alder pollen, UV. 1 credit.

**Input schema:**

```json
{
  "type": "object",
  "properties": {
    "place": {
      "type": "string",
      "description": "City, lake, IATA, or country name (GeoNames)"
    },
    "geoname_id": {
      "type": "integer"
    },
    "latitude": {
      "type": "number"
    },
    "longitude": {
      "type": "number"
    },
    "country_code": {
      "type": "string",
      "description": "ISO2 filter for name resolve"
    },
    "forecast_days": {
      "type": "integer",
      "minimum": 1,
      "maximum": 7,
      "default": 5
    }
  },
  "additionalProperties": false
}
```

**Examples:**

```json
{
  "place": "Budapest"
}
```

### `weather_marine` — Waves and water

Marine/lake conditions. Seas (Adriatic): waves + SST. Lakes (Balaton): wind; waves/SST only if ocean grid ≤25 km. Inland cities without a nearby lake/coast error (no Adriatic for Budapest). 1 credit.

**Input schema:**

```json
{
  "type": "object",
  "properties": {
    "place": {
      "type": "string",
      "description": "City, lake, IATA, or country name (GeoNames)"
    },
    "geoname_id": {
      "type": "integer"
    },
    "latitude": {
      "type": "number"
    },
    "longitude": {
      "type": "number"
    },
    "country_code": {
      "type": "string",
      "description": "ISO2 filter for name resolve"
    },
    "days": {
      "type": "integer",
      "minimum": 1,
      "maximum": 7,
      "default": 3
    },
    "include_hourly": {
      "type": "boolean",
      "default": false
    }
  },
  "additionalProperties": false
}
```

**Examples:**

```json
{
  "place": "Adria"
}
```

```json
{
  "place": "Balaton"
}
```

```json
{
  "place": "Split"
}
```

### `weather_compare` — Compare places or dates

Compare 2–5 places (forecast) OR two dates at one place (history). Still 1 credit.

**Input schema:**

```json
{
  "type": "object",
  "properties": {
    "place": {
      "type": "string",
      "description": "City, lake, IATA, or country name (GeoNames)"
    },
    "geoname_id": {
      "type": "integer"
    },
    "latitude": {
      "type": "number"
    },
    "longitude": {
      "type": "number"
    },
    "country_code": {
      "type": "string",
      "description": "ISO2 filter for name resolve"
    },
    "places": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "minItems": 2,
      "maxItems": 5
    },
    "dates": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "minItems": 2,
      "maxItems": 2,
      "description": "Two YYYY-MM-DD dates at the same place"
    },
    "days": {
      "type": "integer",
      "minimum": 1,
      "maximum": 7,
      "default": 3
    },
    "language": {
      "type": "string",
      "enum": [
        "hu",
        "en"
      ],
      "default": "hu",
      "description": "Preferred weather_text language; both hu and en are always returned"
    }
  },
  "additionalProperties": false
}
```

**Examples:**

```json
{
  "places": [
    "Budapest",
    "Wien"
  ]
}
```

```json
{
  "place": "Budapest",
  "dates": [
    "2024-06-01",
    "2025-06-01"
  ]
}
```

### `weather_flags` — Heuristic weather flags

Derived flags (frost, heat, heavy_rain, thunderstorm, high_wind, high_uv, poor_air, high_pollen; marine: high_wave, strong_onshore_wind). Not official warnings. 1 credit.

**Input schema:**

```json
{
  "type": "object",
  "properties": {
    "place": {
      "type": "string",
      "description": "City, lake, IATA, or country name (GeoNames)"
    },
    "geoname_id": {
      "type": "integer"
    },
    "latitude": {
      "type": "number"
    },
    "longitude": {
      "type": "number"
    },
    "country_code": {
      "type": "string",
      "description": "ISO2 filter for name resolve"
    },
    "days": {
      "type": "integer",
      "minimum": 1,
      "maximum": 7,
      "default": 3
    }
  },
  "additionalProperties": false
}
```

**Examples:**

```json
{
  "place": "Budapest"
}
```

## Usage notes

Pass `place` (Budapest, Balaton, BUD, HU), `geoname_id`, or `latitude`+`longitude`. Do not pick a weather model — best_match is used. For lakes, `weather_marine` returns wind even when wave/SST is unavailable (ocean grid too far). Flags are not official warnings. Compare either 2–5 `places` or two `dates` at one location (still 1 credit).

## Errors / limits

Unresolved place or missing water body → `{error, is_error}` (0 credits). Open-Meteo 429/5xx or daily quota → is_error (0 credits). Lake without a nearby marine cell → success with wave_available=false (1 credit).

## Agent discovery

- Agent registration: `https://mcp.glc-rag.hu/guide/agent`
- Markdown: `https://mcp.glc-rag.hu/guide/weather.md`
- Index: `https://mcp.glc-rag.hu/llms.txt`
- MCP resource: `docs://weather`
