ERA5 SMI
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@ERA5 SMICalculate the monthly soil moisture index for Berlin from ERA5-Land data."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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
A CDS account and API key in
~/.cdsapirc(see https://cds.climate.copernicus.eu/api-how-to)
Related MCP server: DMAP-AI MCP Server
Setup
cd mcp/era5-mcp && uv sync && cd ../..
uv syncTo use the MCP server, point your client at mcp.json in the root.
Run the MCP server in VS Code
Install the environments (first time only):
cd mcp/era5-mcp && uv sync && cd ../.. uv syncMake the launcher executable (first time only):
chmod +x mcp/era5-mcp/start_era5_mcp.shRegister the server: create
.vscode/mcp.jsonin 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:{ "servers": { "era5": { "type": "stdio", "command": "/absolute/path/to/era5-smi-project/mcp/era5-mcp/start_era5_mcp.sh", "args": [] } } }Reload the window:
Ctrl+Shift+P→ "Developer: Reload Window". The server is listed under "MCP: Manage Servers" and should show as running (green).Use it: ask the agent to call the tools
fetch_era5_land_soil_moistureandextract_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
Download data with the MCP tool
fetch_era5_land_soil_moisture.Extract your point with
extract_point_timeseries.Use the
calculate-smiskill to compute the index (seeskills/calculate-smi/SKILL.md).Use the
plot-smiskill to make the figures (seeskills/plot-smi/SKILL.md).
The skills are the interface; never run the scripts under
skills/*/scripts/ directly.
Layout
AGENTS.md— instructions for running the pipelinepyproject.toml— environment for the skills (numpy, pandas, scipy, ...)mcp.json— config to connect an MCP client to the era5 servermcp/era5-mcp/— MCP server, the only thing that talks to the CDS APIera5_server.py— the server and its MCP toolsstart_era5_mcp.sh— launcher for the serverpyproject.toml— server environment (cdsapi, fastmcp, xarray)
skills/calculate-smi/— turns a soil moisture CSV into an SMI seriesSKILL.md— docs for the skillscripts/calculate_smi.py— the script
plot-smi/— turns an SMI CSV into figuresSKILL.md— docs for the skillscripts/plot_smi.py— the script
data/raw/— downloaded NetCDF filesprocessed/— extracted CSVs and SMI CSVsfigures/— output PNGs
Available Tools
7 toolsextract_point_timeseriesA
Extracts the nearest-pixel monthly time series from a downloaded NetCDF
file and writes it as a CSV with columns year,month,date,.
This CSV is the expected input format for the calculate-smi skill.
| Name | Required | Description | Default |
|---|---|---|---|
| lat | Yes | Latitude of the target point (degrees north). | |
| lon | Yes | Longitude of the target point (degrees east). | |
| filepath | Yes | Path to the source NetCDF file (e.g., output of fetch_era5_land_soil_moisture). | |
| variable | No | Variable name to extract. If omitted and the file has exactly one data variable, that one is used automatically. Example: extract_point_timeseries('data/raw/era5land_sm_layer1_1950_2020.nc', 50.9, 6.4, 'data/processed/juelich_sm_layer1.csv') | |
| output_csv | Yes | Path to write the output CSV (e.g., 'data/processed/point_sm.csv'). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It discloses the extraction method (nearest-pixel), temporal resolution (monthly), and output format. However, it does not mention overwrite behavior, error handling, or explicit file existence prerequisites beyond 'downloaded', leaving some gaps in side-effect transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the main action, and includes a purposeful reference to the downstream skill. Every sentence contributes, with no fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description, combined with the high schema coverage and presence of an output schema, gives sufficient context for correct usage. It explains the exact CSV format and ties to the calculate-smi skill. Minor gaps like multi-variable handling are already addressed by the schema's optional variable parameter and examples.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 100% coverage for all parameters with clear descriptions, so the baseline is 3. The description adds context about the output columns and nearest-pixel selection, but it does not elaborate on parameter specifics beyond what the schema already provides. Thus, minimal added value over the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action (extracts nearest-pixel monthly time series) and a specific output (CSV with columns year,month,date,<variable>). It distinguishes itself from sibling fetch/inspect tools by operating on a downloaded NetCDF file and producing a CSV, making its purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies it should be used after a NetCDF file is downloaded and its output is intended for the calculate-smi skill. It does not explicitly exclude other tools, but given the sibling tools are fetching or inspecting, the context is clear. It lacks direct alternative naming but provides sufficient contextual workflow guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fetch_era5_hourly_pressure_levelsB
Downloads ERA5 hourly data on specific pressure levels.
| Name | Required | Description | Default |
|---|---|---|---|
| day | Yes | The day(s) for the data (e.g., '15' or ['01','02','03']) | |
| east | No | Eastern longitude (e.g., 20 for 20E) Example: fetch_era5_hourly_pressure_levels('temperature', 850, '2023', '01', '15', 'temp_850hpa_2023_01_15.nc') fetch_era5_hourly_pressure_levels('geopotential', 500, '2023', '01', '15', 'z500_europe.nc', north=70, west=-25, south=30, east=40) | |
| west | No | Western longitude (e.g., -10 for 10W) | |
| year | Yes | The year for the data (e.g., '2023') | |
| month | Yes | The month for the data (e.g., '01', '12') | |
| north | No | Northern latitude (e.g., 60 for 60N) | |
| south | No | Southern latitude (e.g., 30 for 30N) | |
| variable | Yes | The variable to download (e.g., 'geopotential', 'temperature', 'u_component_of_wind') | |
| pressure_level | Yes | The pressure level in hPa (e.g., 500, 850, 1000) | |
| output_filename | Yes | The local filename for the downloaded data (e.g., 'data/raw/geopotential_850hpa_2023_01_15.nc') |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full burden of behavioral disclosure. It only states the download action, without disclosing whether existing files are overwritten, network dependencies, data size implications, or any side effects beyond creating a file.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no filler; every word adds meaning. It is appropriately sized for the simple action it names and avoids redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite rich schema coverage, the tool has 10 parameters, no annotations, and an output schema, yet the description offers no context on prerequisites, when to use it, or caveats. The one-sentence description is too minimal to fully support selection and invocation in context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and each parameter has descriptive text with examples (e.g., 'east' includes full usage examples). The tool description itself adds no parameter semantics, but the schema fully covers them, so the baseline score applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Downloads') and names the resource ('ERA5 hourly data on specific pressure levels'), which clearly differentiates it from sibling tools like fetch_era5_single_levels and fetch_era5_pressure_levels by specifying both hourly and pressure level dimensions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No usage guidance is provided. It does not state when to choose this over fetch_era5_pressure_levels or fetch_era5_hourly_single_levels, nor mention prerequisites like CDS authentication, optional bounding-box usage, or the ability to specify multiple days.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fetch_era5_hourly_single_levelsB
Downloads ERA5 hourly surface data.
| Name | Required | Description | Default |
|---|---|---|---|
| day | Yes | The day(s) for the data (e.g., '15' or ['01','02','03']) | |
| east | No | Eastern longitude (e.g., 20 for 20E) Example: fetch_era5_hourly_single_levels('2m_temperature', '2023', '01', '15', 'temp_2023_01_15.nc') fetch_era5_hourly_single_levels('total_precipitation', '2023', '01', ['01','02','03'], 'precip_jan_1_3.nc', north=44, west=-10, south=36, east=4) | |
| west | No | Western longitude (e.g., -10 for 10W) | |
| year | Yes | The year for the data (e.g., '2023') | |
| month | Yes | The month for the data (e.g., '01', '12') | |
| north | No | Northern latitude (e.g., 60 for 60N) | |
| south | No | Southern latitude (e.g., 30 for 30N) | |
| variable | Yes | The surface variable to download (e.g., '2m_temperature', 'total_precipitation') | |
| output_filename | Yes | The local filename for the downloaded data (e.g., 'data/raw/2m_temp_2023_01_15.nc') |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description must carry the burden of disclosing side effects. It only says 'Downloads' and does not mention that it writes a local file (output_filename), requires CDS credentials, or imposes API/rate limits. This leaves the agent with little beyond the action verb.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single front-loaded sentence with no filler. It loses one point for being terse to the point of under-specification for a tool with nine parameters.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With nine parameters, a rich schema, and multiple sibling tools, a one-sentence description is not complete enough. It omits when to use this tool, how output is delivered, and any operational caveats, despite the schema covering parameters well.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and all nine parameters have descriptions and examples. The tool description adds no parameter-level meaning, so it does not exceed the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Downloads' and names a clear resource, 'ERA5 hourly surface data,' which distinguishes this from sibling pressure-level and soil-moisture tools. The 'hourly surface' qualifier disambiguates from fetch_era5_single_levels and fetch_era5_pressure_levels.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance about when to choose this tool over siblings such as fetch_era5_single_levels or fetch_era5_hourly_pressure_levels. It neither states explicit conditions nor mentions alternatives or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fetch_era5_land_soil_moistureA
Downloads ERA5-Land monthly mean volumetric soil water content for one soil layer. This is the primary data source for the SMI pipeline (see skills/calculate-smi).
| Name | Required | Description | Default |
|---|---|---|---|
| east | No | Eastern longitude (e.g., 10 for 10E) Example: fetch_era5_land_soil_moisture(1, [str(y) for y in range(1950, 2021)], [f"{m:02d}" for m in range(1, 13)], 'data/raw/era5land_sm_layer1_1950_2020.nc', north=51.5, west=5.5, south=50.5, east=7.0) | |
| west | No | Western longitude (e.g., 5 for 5E) | |
| year | Yes | Year(s) as string or list (e.g., '2023' or ['1950', ..., '2020']). | |
| layer | Yes | Soil layer 1-4 (1: 0-7cm, 2: 7-28cm, 3: 28-100cm, 4: 100-289cm). Default use: 1. | |
| month | Yes | Month(s) as string or list (e.g., '01' or ['01', ..., '12']). | |
| north | No | Northern latitude (e.g., 51 for 51N) | |
| south | No | Southern latitude (e.g., 48 for 48N) | |
| output_filename | Yes | Local NetCDF path (e.g., 'data/raw/era5land_sm_layer1_1950_2020.nc'). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. The description only says 'Downloads' and does not disclose potential side effects like network dependency, overwriting existing files, required API credentials, or failure modes. It adds no behavioral context beyond what the tool name and schema imply.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the action verb and resource. There is no redundant or filler content. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description provides a clear purpose and usage context, and the schema is comprehensive. However, it lacks any note about prerequisites (e.g., CDS API key, network availability) or potential pitfalls, which would be important for a data download tool. Given the schema and output schema, this is a decent but not fully complete description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% coverage, with detailed parameter descriptions including examples and soil layer depth ranges. The description adds no additional parameter semantics beyond hints like 'one soil layer' and 'monthly mean,' which are already captured implicitly. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Downloads' and clearly identifies the exact resource: 'ERA5-Land monthly mean volumetric soil water content for one soil layer.' This distinguishes it from sibling tools like fetch_era5_single_levels or fetch_era5_hourly_pressure_levels, which target different datasets. Mentioning the SMI pipeline adds useful context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states 'This is the primary data source for the SMI pipeline (see skills/calculate-smi)', which gives a clear context for when to use it. However, it does not explicitly state when not to use it or name alternative tools, though sibling names are available. That prevents a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fetch_era5_pressure_levelsA
Downloads ERA5 monthly mean data on specific pressure levels for a given month across one or more years.
| Name | Required | Description | Default |
|---|---|---|---|
| east | No | Eastern longitude (e.g., 20 for 20E) Example: fetch_era5_pressure_levels('temperature', 500, '2023', '01', 'temp_500hpa.nc', north=44, west=-10, south=36, east=4) | |
| west | No | Western longitude (e.g., -10 for 10W) | |
| year | Yes | The year(s) for the data (e.g., '2023' or ['2021', '2022', '2023']). | |
| month | Yes | The month for the data (e.g., '01', '12'). | |
| north | No | Northern latitude (e.g., 60 for 60N) | |
| south | No | Southern latitude (e.g., 30 for 30N) | |
| variable | Yes | The variable to download (e.g., 'geopotential', 'temperature'). | |
| pressure_level | Yes | The pressure level in hPa (e.g., 500, 850, 1000). | |
| output_filename | Yes | The local filename for the downloaded data (e.g., 'data/raw/geopotential_500hpa.nc'). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It clearly identifies the operation as a download (non-destructive retrieval), which is helpful. However, it does not disclose potential behavioral traits such as overwrite behavior, download size/time, authentication needs, or return format beyond what the output schema implies.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, well-structured sentence that is front-loaded with the core action and resource. No redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool complexity (9 params) and presence of an output schema, the description provides the essential distinction (monthly mean, pressure levels) and the temporal scope. It could mention the alternative hourly/single-level options, but the description is adequate for a straightforward download tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds minimal semantics beyond the schema, only reinforcing that the data is monthly mean and spans years. No new parameter-level meaning is introduced.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Downloads') and identifies the exact resource (ERA5 monthly mean data) with key qualifiers (specific pressure levels, given month, one or more years). It clearly distinguishes from sibling tools that fetch hourly data or single levels.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use for monthly mean pressure-level data but does not explicitly state when to choose this over alternatives like fetch_era5_hourly_pressure_levels or fetch_era5_single_levels. No exclusions or specific use cases are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fetch_era5_single_levelsB
Downloads ERA5 monthly mean surface data.
| Name | Required | Description | Default |
|---|---|---|---|
| east | No | Eastern longitude (e.g., 20 for 20E) Example: fetch_era5_single_levels('2m_temperature', '2023', '01', 'spain_temp.nc', north=44, west=-10, south=36, east=4) | |
| west | No | Western longitude (e.g., -10 for 10W) | |
| year | Yes | The year for the data (e.g., '2023'). | |
| month | Yes | The month for the data (e.g., '01', '12'). | |
| north | No | Northern latitude (e.g., 60 for 60N) | |
| south | No | Southern latitude (e.g., 30 for 30N) | |
| variable | Yes | The surface variable to download (e.g., '2m_temperature'). | |
| output_filename | Yes | The local filename for the downloaded data (e.g., 'data/raw/2m_temp_2023_01.nc'). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of disclosing behavioral traits. It only states 'Downloads' without mentioning side effects like writing to a local file, requiring network access, or potential authentication/rate limits. The tool's behavior beyond the core download action is opaque, which is insufficient for a data-fetching operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with zero wasted words. It efficiently communicates the tool's core purpose, and no additional content is needed for clarity at the level of intent; other dimensions cover missing depth.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite a moderately complex parameter set (8 params) and no annotations, the description fails to provide broader context: it does not explain that it supports spatial bounding boxes, what output format is returned (though an output schema may exist), or how downloads are handled (e.g., file overwrite behavior). The description is too sparse to be considered complete for an agent to confidently invoke the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with each of the 8 parameters having a description in the schema. The tool description itself adds no additional parameter semantics, so it does not improve on the schema. Baseline 3 is appropriate because the schema fully documents parameters, though the description misses opportunities to clarify relationships between coordinates or variable naming.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Downloads ERA5 monthly mean surface data' uses a specific verb ('downloads'), names the exact resource ('ERA5 monthly mean surface data'), and the phrase 'monthly mean' clearly distinguishes this tool from hourly siblings like fetch_era5_hourly_single_levels. It also contrasts with pressure-level and soil-moisture tools, providing clear scoping.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for monthly mean surface data but does not explicitly state when to prefer it over alternatives (e.g., hourly or pressure-level tools). There is no mention of when not to use it or which sibling to choose for different temporal/spatial needs, so guidance is only implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inspect_netcdfA
Inspects a NetCDF file and returns a summary of its contents (dimensions, variables, coordinates).
| Name | Required | Description | Default |
|---|---|---|---|
| filepath | Yes | The absolute path to the .nc file to inspect. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral disclosure. It states the tool inspects the file and returns a summary, which is a read-only action. However, it does not mention potential errors (e.g., invalid filepath, unsupported format) or any side effects, though for a simple inspection tool this is somewhat acceptable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence that directly states the action and expected output. No filler or redundancy; every word adds value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (one parameter) and has an output schema, so the description does not need to explain return structure. It adequately covers the tool's purpose and result. The only minor gap is lack of explicit usage context relative to sibling tools, but that is not critical for a straightforward inspection tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with the single 'filepath' parameter adequately described as 'The absolute path to the .nc file to inspect.' The description does not add additional parameter detail, but the schema already provides sufficient semantics, so a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Inspects') with a clear resource ('a NetCDF file') and states the expected output ('summary of its contents (dimensions, variables, coordinates)'). It clearly distinguishes this tool from siblings like fetch_era5_* and extract_point_timeseries, which are data retrieval/extraction tools rather than file inspection.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this tool is used to preview or summarize a NetCDF file, but it does not explicitly state when to use it versus the sibling fetch/extract tools. No exclusions or alternative recommendations are provided, so the usage context is only implicitly clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
7 tool updates
v0.1.0- First observed
extract_point_timeseries - First observed
fetch_era5_hourly_pressure_levels - First observed
fetch_era5_hourly_single_levels - First observed
fetch_era5_land_soil_moisture - First observed
fetch_era5_pressure_levels - First observed
fetch_era5_single_levels - First observed
inspect_netcdf
TDQS
Scored across 7 tools
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.
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.
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.
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
Related MCP Connectors
Climate MCP — wraps Open-Meteo Climate API (free, no auth)
Visual Crossing Weather MCP — wraps the Visual Crossing Weather Timeline API
Open-Meteo MCP — weather forecast + historical reanalysis + sister APIs
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEU Crop Intelligence MCP Server — Yield forecasts, weather analysis, and phenology models for 15 countries. AI agent-native, multi-source intelligence (NASA POWER, Eurostat, Open-Meteo).MIT
- FlicenseNot gradedqualityCmaintenanceMCP server for DMAP-AI drought monitoring and SPI drought analysis using NASA POWER and ERA5-Land/CDS data.-
- AlicenseNot gradedqualityDmaintenanceEnables natural language access to ERA5 climate data from the Copernicus Climate Data Store. Supports downloading monthly means and inspecting NetCDF files.12MIT
- AlicenseNot gradedqualityCmaintenanceMCP server for NASA POWER climate data, offering a climatology tool to retrieve long-term monthly averages for any coordinate. Supports natural language queries through the Pipeworx gateway.3 npmMIT