Skip to main content
Glama
README.md
# ERA5 SMI

Calculate monthly soil moisture index (SMI) for any region based on
ERA5-Land. Data comes in via an MCP server, the index is computed with a
KDE transformation. Figures are generated using SKILLS.md files.

## What you need

- [uv](https://astral.sh/uv/)
- A CDS account and API key in `~/.cdsapirc` (see
  https://cds.climate.copernicus.eu/api-how-to)

## Setup

```bash
cd mcp/era5-mcp && uv sync && cd ../..
uv sync
```

To use the MCP server, point your client at `mcp.json` in the root.

## Run the MCP server in VS Code

1. **Install the environments** (first time only):

   ```bash
   cd mcp/era5-mcp && uv sync && cd ../..
   uv sync
   ```

2. **Make the launcher executable** (first time only):

   ```bash
   chmod +x mcp/era5-mcp/start_era5_mcp.sh
   ```

3. **Register the server**: create `.vscode/mcp.json` in the project root
   with the path to the launcher. A relative path works if you open VS Code
   from the project folder; use an absolute path otherwise:

   ```json
   {
     "servers": {
       "era5": {
         "type": "stdio",
         "command": "/absolute/path/to/era5-smi-project/mcp/era5-mcp/start_era5_mcp.sh",
         "args": []
       }
     }
   }
   ```

4. **Reload the window**: `Ctrl+Shift+P` → "Developer: Reload Window".
   The server is listed under "MCP: Manage Servers" and should show as
   running (green).

5. **Use it**: ask the agent to call the tools
   `fetch_era5_land_soil_moisture` and `extract_point_timeseries`. The
   server only starts when the agent invokes it. Logs (with `[DEBUG]`
   lines) appear in the Output panel → MCP.

To verify the server works on its own, run `bash mcp/era5-mcp/start_era5_mcp.sh`
in a terminal — it starts and waits on stdio (that's normal), `Ctrl+C` to stop.

## Usage

1. Download data with the MCP tool `fetch_era5_land_soil_moisture`.
2. Extract your point with `extract_point_timeseries`.
3. Use the **`calculate-smi` skill** to compute the index (see
   `skills/calculate-smi/SKILL.md`).
4. Use the **`plot-smi` skill** to make the figures (see
   `skills/plot-smi/SKILL.md`).

The skills are the interface; never run the scripts under
`skills/*/scripts/` directly.

## Layout

- `AGENTS.md` — instructions for running the pipeline
- `pyproject.toml` — environment for the skills (numpy, pandas, scipy, ...)
- `mcp.json` — config to connect an MCP client to the era5 server
- `mcp/era5-mcp/` — MCP server, the only thing that talks to the CDS API
  - `era5_server.py` — the server and its MCP tools
  - `start_era5_mcp.sh` — launcher for the server
  - `pyproject.toml` — server environment (cdsapi, fastmcp, xarray)
- `skills/`
  - `calculate-smi/` — turns a soil moisture CSV into an SMI series
    - `SKILL.md` — docs for the skill
    - `scripts/calculate_smi.py` — the script
  - `plot-smi/` — turns an SMI CSV into figures
    - `SKILL.md` — docs for the skill
    - `scripts/plot_smi.py` — the script
- `data/`
  - `raw/` — downloaded NetCDF files
  - `processed/` — extracted CSVs and SMI CSVs
  - `figures/` — output PNGs


TDQS

A3.7/5.0

Scored across 7 tools

Disambiguation5/5

Each tool targets a distinct data source or processing step: inspect_netcdf for inspection, the fetch tools are differentiated by time resolution (hourly vs monthly mean) and data type (pressure levels, single levels, land soil moisture), and extract_point_timeseries is the only output-writing tool. There is no meaningful overlap between tool purposes.

Naming Consistency4/5

The naming follows a consistent snake_case verb_noun pattern, with fetch_era5_* clearly grouped by data type and time resolution. Minor deviation: tools without 'hourly' are implicitly monthly mean (e.g., fetch_era5_pressure_levels), which is not explicitly reflected in the name, and inspect/extract use generic verbs rather than the fetch_ prefix.

Tool Count5/5

Seven tools cover the full data-preparation workflow for the ERA5 SMI pipeline: inspection, downloading multiple ERA5 variants, and extracting point timeseries. The count is well-scoped, not bloated or sparse, and each tool has a clear role.

Completeness4/5

The tool surface covers the main data types (pressure levels, single levels, land soil moisture) in both hourly and monthly resolutions, plus inspection and extraction. Minor gaps: there is no tool for directly listing available variables or fetching ERA5-Land hourly soil moisture, but these are not critical given the stated SMI focus.

Maintenance

ActivitySlowing
ResponsivenessNo issues