Skip to main content
Glama
wolkwork

KNMI Weather MCP

by wolkwork
README.md
# KNMI Weather MCP

A FastMCP server that provides real-time weather data from KNMI (Royal Netherlands Meteorological Institute) weather stations. This application fetches the latest 10-minute measurements from the nearest weather station to any location in the Netherlands.

<a href="https://glama.ai/mcp/servers/xanerdcjsm">
  <img width="380" height="200" src="https://glama.ai/mcp/servers/xanerdcjsm/badge" alt="KNMI Weather MCP server" />
</a>

## Features

- Get weather data for any location in the Netherlands
- Automatically finds the nearest KNMI weather station
- Provides real-time measurements including:
  - Temperature
  - Humidity
  - Wind speed and direction
  - Precipitation
  - Visibility
  - Air pressure
- Natural language interpretation of weather conditions
- Location search functionality
- Detailed logging

## Prerequisites

- Python 3.10 or higher
- KNMI API Key (get one from [KNMI Data Platform](https://dataplatform.knmi.nl/))
- `uv` package manager

## Installation

1. Clone the repository:

   ```bash
   git clone <repository-url>
   cd knmi-mcp
   ```

2. Create a `.env` file in the project root:
   ```bash
   KNMI_API_KEY=your_api_key_here
   ```

## Running the Server

### Using Claude AI

To use this application with Claude AI, run the following command in the folder of the project:

```bash
uv run fastmcp install src/knmi_weather_mcp/server.py
```

This will add the following configuration to your Claude configuration file (typically located at `~/Library/Application Support/Claude/claude_desktop_config.json`):

```json
{
    "KNMI Weather": {
      "command": "uv",
      "args": [
        "run",
        "--with",
        "fastmcp",
        "--with",
        "httpx",
        "--with",
        "netCDF4",
        "--with",
        "numpy",
        "--with",
        "pandas",
        "--with",
        "pydantic",
        "--with",
        "python-dotenv",
        "--with",
        "xarray",
        "fastmcp",
        "run",
        "/Users/<username>/<git location>/knmi-mcp/src/knmi_weather_mcp/server.py"
      ]
    }
}
```

Note: If you see an error like this:

```
spawn uv ENOENT
```

Replace the `uv` command with the full path to the `uv` command. On *nix systems this can be found with the command `which uv`.


### Manual Running

For development or standalone usage:

```bash
uv run fastmcp run src/knmi_weather_mcp/server.py
```

## Available Tools

### 1. what_is_the_weather_like_in

Get a natural language interpretation of current weather conditions for any location in the Netherlands.

Example:

```python
await what_is_the_weather_like_in("Amsterdam")
```

### 2. get_location_weather

Get raw weather data for a location.

Example:

```python
await get_location_weather("Rotterdam")
```

### 3. search_location

Search for locations in the Netherlands.

Example:

```python
await search_location("Utrecht")
```

### 4. get_nearest_station

Find the nearest KNMI weather station to given coordinates.

Example:

```python
await get_nearest_station(52.3676, 4.9041)
```

## Logging

The application logs are stored in the `logs/knmi_weather.log` file, providing detailed information about:

- API requests and responses
- Weather data processing
- Error messages
- Debug information

## Data Sources

This application uses the KNMI Data Platform API to fetch data from the "Actuele10mindataKNMIstations" dataset, which provides 10-minute interval measurements from all KNMI weather stations in the Netherlands.

## Error Handling

The application includes robust error handling for:

- Invalid locations
- API authentication issues
- Network problems
- Data parsing errors
- Missing measurements

TDQS

B3/5.0

Scored across 4 tools

Disambiguation4/5

Tools are mostly distinct: search_location and get_nearest_station are clearly supporting, but get_location_weather and what_is_the_weather_like_in both provide current weather, albeit in different formats (data vs. natural language). This overlap could cause misselection.

Naming Consistency3/5

Three tools follow verb_noun pattern (get_location_weather, get_nearest_station, search_location), but what_is_the_weather_like_in deviates entirely into a conversational question, breaking consistency.

Tool Count5/5

With 4 tools, the server is well-scoped for a focused weather service covering location search, station lookup, and current conditions. Each tool serves a clear purpose without being excessive.

Completeness3/5

The tool set covers location search and current weather but lacks forecast, historical data, or station metadata. The domain of weather for the Netherlands has notable gaps that could hinder some agent tasks.

Maintenance

ActivityInactive
ResponsivenessNo issues