Content
# aria-mcp-weather-dk
A [Model Context Protocol (MCP)](https://modelcontextprotocol.io) server that exposes Danish weather forecasts and severe-weather warnings to AI assistants. Built for [ARIA](https://github.com/kimhjort/aria) and shareable with the community.
**Fully keyless** — both data sources are open and require no API key.
## Data Sources
| Source | What | License / Attribution |
|---|---|---|
| [DMI Open Data](https://www.dmi.dk/friedata/) | Hourly point forecasts (Harmonie DINI SF model) | [CC BY 4.0 — requires attribution to DMI](https://www.dmi.dk/friedata/guides-til-frie-data/) |
| [MeteoAlarm](https://www.meteoalarm.org) | Severe weather warnings for Denmark | © MeteoAlarm / national met services — see [terms](https://www.meteoalarm.org/en_UK/0/0/EU012DK-Denmark.html) |
## Install & Run
```bash
npx aria-mcp-weather-dk
```
Or install globally:
```bash
npm install -g aria-mcp-weather-dk
aria-mcp-weather-dk
```
Requires Node.js 20 or later.
## Tools
### `get_forecast`
Fetch an hourly weather forecast for a geographic point (up to 72 hours).
**Parameters:**
| Name | Type | Required | Description |
|---|---|---|---|
| `lat` | number | Yes* | Latitude (WGS84 decimal degrees) |
| `lon` | number | Yes* | Longitude (WGS84 decimal degrees) |
| `hours` | number | No | Hours to forecast (1–72, default 24) |
*Not required if `DEFAULT_LAT` / `DEFAULT_LON` env vars are set.
**Returns:** Array of forecast entries:
```json
[
{
"time": "2024-06-01T12:00:00Z",
"temperatureC": 18.5,
"windSpeedMs": 4.2,
"windDirDeg": 220,
"humidityPct": 68,
"precipitationMm": 0.0,
"cloudCoverPct": 40
}
]
```
Fields are omitted when not available from the API.
---
### `get_current`
Fetch the forecast entry closest to the current time.
**Parameters:** `lat`, `lon` (same as above)
**Returns:** A single forecast entry (same shape as above).
---
### `get_warnings`
Fetch active severe weather warnings for Denmark from MeteoAlarm.
**Parameters:** None
**Returns (warnings present):**
```json
[
{
"id": "https://www.meteoalarm.org/alerts/DK-...",
"event": "Wind",
"severity": "Severe",
"urgency": "Expected",
"certainty": "Likely",
"area": "Jutland",
"onset": "2024-06-01T18:00:00Z",
"expires": "2024-06-02T06:00:00Z",
"headline": "Orange wind warning for Jutland",
"description": "Strong winds expected...",
"awarenessType": "1; Wind",
"awarenessLevel": "3; orange; Severe"
}
]
```
**Returns (no active warnings):**
```json
{
"status": "no_active_warnings",
"message": "No active severe weather warnings for Denmark.",
"checkedAt": "2024-06-01T12:00:00.000Z"
}
```
## Environment Variables
| Variable | Description |
|---|---|
| `DEFAULT_LAT` | Default latitude — makes `lat` optional in `get_forecast` and `get_current` |
| `DEFAULT_LON` | Default longitude — makes `lon` optional in `get_forecast` and `get_current` |
These are purely convenience defaults. The server remains generic — no location is hardcoded.
## ARIA MCP Config
Add to your ARIA credentials / MCP config to use with ARIA:
```json
{
"command": "npx",
"args": ["-y", "aria-mcp-weather-dk"],
"env": {
"DEFAULT_LAT": "55.6761",
"DEFAULT_LON": "12.5683"
}
}
```
Replace the coordinates with your preferred default location, or omit `env` entirely and always pass coordinates explicitly.
## Development
```bash
git clone https://github.com/kimhjort/aria-mcp-weather-dk
cd aria-mcp-weather-dk
npm install
npm run build
npm test
```
## License
MIT — see [LICENSE](LICENSE).
Data from DMI is licensed [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/). MeteoAlarm data is owned by the respective national meteorological services; see their terms before redistribution.