Skip to main content
Glama
geosphere-mcp-server

geosphere-mcp-server

by slettmayer

geosphere-mcp-server

PyPI Python License: MIT

MCP server for weather: current conditions, hourly forecasts, storm outlooks, and air quality for Austria and the Alpine region, via the Model Context Protocol.

It serves high-resolution GeoSphere Austria data — the 1 km numerical forecast (nwp-v2-1h-1km, the deterministic run of the C-LAEF AlpeAdria ensemble, called AROME here), the INCA analysis/nowcast, the C-LAEF ensemble for the precipitation-chance estimate and a thunderstorm signal, and the WRF-Chem air-quality forecast. There is no worldwide fallback: a point outside the AROME grid returns an out-of-coverage notice, so pair this with a global weather source if you need one. Every response states which datasets produced it.

Output is compact emoji-markdown with metric units — built for smart-home and voice-assistant LLM pipelines where a terse, readable answer beats a JSON blob. Weather conditions follow GeoSphere's own weather symbol and are reported with the Home Assistant condition vocabulary (sunny, clear-night, partlycloudy, cloudy, fog, rainy, pouring, snowy, snowy-rainy, lightning-rainy); for the current condition, observations decide whether and what is falling.

Coverage

Where

get_current_weather

get_hourly_forecast

get_storm_outlook

get_air_quality

Austria

INCA + nowcast + AROME

AROME (≤60 h) + C-LAEF chance estimate

AROME symbol + C-LAEF ensemble

WRF-Chem (3 km)

Alps (non-AT)

AROME only

AROME (≤60 h) + C-LAEF chance estimate

AROME symbol + C-LAEF ensemble

WRF-Chem (3 km)

Rest of world

not served

not served

not served

not served

Coverage is decided by the API, not by a bounding box you configure: GeoSphere answers HTTP 400 for a point outside the grid, and the server renders that as

⚠️ Outside coverage — this server only serves Austria and the Alpine region.

That line is deliberately distinct from the transient failures (⚠️ Timeout…, ⚠️ No weather data available): being outside coverage is a permanent property of the location, so retrying will never help. It names no grid on purpose — the forecast tools query the 1 km forecast grid and get_air_quality queries WRF-Chem (3 km), so a point can be inside one and outside the other.

There is no multi-day forecast. GeoSphere publishes nothing beyond the forecast run's ~60 h, and a run is only available several hours after its start, so the longest answer this server can give is typically 52–55 hours of hourly rows.

Related MCP server: wetter-mcp-server

Installation

Pass decimal latitude/longitude to every tool. There is no geocoder in the server — the calling LLM geocodes city names to coordinates itself.

Claude Desktop

Add to your Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json):

{
  "mcpServers": {
    "geosphere": {
      "command": "uvx",
      "args": ["geosphere-mcp-server"]
    }
  }
}

Claude Code

claude mcp add geosphere -- uvx geosphere-mcp-server

From source (development)

{
  "mcpServers": {
    "geosphere": {
      "command": "uvx",
      "args": ["--from", "/path/to/geosphere-mcp-server", "geosphere-mcp-server"]
    }
  }
}

Home Assistant

It is a standard stdio MCP server, so it runs anywhere an stdio MCP server can be hosted — including alongside Home Assistant's Assist pipeline (register it the same way as any other stdio MCP server). Give the voice agent the coordinates of the places it should answer for, or let it geocode names.

Tools

get_current_weather

Current conditions for a point, from INCA, the 15-minute nowcast, and AROME. The nowcast decides whether and what is falling; the rest of the condition is GeoSphere's weather symbol for the current hour, so with nothing falling under a rain or thunder symbol it reads cloudy.

Parameter

Type

Default

Description

latitude

float

required

Decimal latitude (e.g. 48.2208)

longitude

float

required

Decimal longitude (e.g. 16.3738)

# Current Weather at 48.2208, 16.3738

🌡️ Temperature: 24.7°C (feels like 24.2°C)
🌤️ Condition: partlycloudy
💧 Humidity: 52%
💨 Wind: 2.9 m/s from 135° (gusts 7 m/s)
🌧️ Precipitation (last hour): 0 mm
📊 Pressure: 1016 hPa
☁️ Cloud cover: 30%
🕐 Timezone: Europe/Vienna (CEST)
📡 Source: GeoSphere (INCA + nowcast + AROME) — observed 15:20

get_hourly_forecast

Hour-by-hour forecast from AROME, up to ~60 h. Each hour's condition is GeoSphere's weather symbol; the precipitation chance is an estimate derived from the C-LAEF ensemble percentiles (stepped 0/30/70/95 %), not a probability GeoSphere publishes.

Parameter

Type

Default

Description

latitude

float

required

Decimal latitude (e.g. 48.2208)

longitude

float

required

Decimal longitude (e.g. 16.3738)

hours

int

24

Forecast hours (clamped to 1–60)

start

string

now

Optional ISO 8601 start (e.g. 2026-07-22T15:00); forecast begins at/after this instant. Without an offset it is Vienna local time, like the output

# 3-Hour Forecast for 48.2208, 16.3738

AROME model, reference 2026-07-22 12:00 CEST · Source: GeoSphere (AROME + C-LAEF ensemble)

Wed 2026-07-22
  15:00: 24.7°C — partlycloudy, wind 3 m/s, snow limit 3410 m
  16:00: 23.9°C — rainy, 1.2 mm (70% chance), wind 4 m/s, snow limit 3380 m
  17:00: 22.5°C — cloudy, wind 3 m/s, snow limit 3350 m

Precipitation chance is an estimate derived from the C-LAEF ensemble percentiles (0/30/70/95 %), not a probability GeoSphere publishes.

The hours are grouped under a day-divider header (%a %Y-%m-%d in the point's local timezone) that repeats whenever the local date changes, so a window crossing midnight stays unambiguous. Requesting more hours than the AROME horizon provides appends a note naming where the horizon ends — there is nothing further ahead to reach for. Dry hours, and hours whose amount rounds to 0 mm, omit the precipitation and chance parts; the estimate note appears only when a chance is shown. Each hour ends with the forecast snow limit in metres, omitted when the run has none.

get_storm_outlook

Severe-weather outlook: peak gusts and thunderstorm timing. Reports figures, never a severity verdict — what counts as dangerous is the caller's judgement.

Parameter

Type

Default

Description

latitude

float

required

Decimal latitude (e.g. 48.2208)

longitude

float

required

Decimal longitude (e.g. 16.3738)

# Storm Outlook for 48.2208, 16.3738

AROME model, reference 2026-08-10 14:00 CEST · Source: GeoSphere (AROME + C-LAEF ensemble)

💨 Max gust next 1 h: 12 m/s (at Mon 2026-08-10 17:00)
💨 Max gust next 12 h: 24 m/s (at Mon 2026-08-10 20:00)
⛈️ Thunderstorm expected next 1 h: no
⚡ Next thunderstorm: Mon 2026-08-10 20:00 (signal: symbol)
🌡️ Max CAPE next 12 h: 1800 J/kg
🕐 Timezone: Europe/Vienna (CEST)

Horizons round up to whole hours: the "1 h" window covers the hour already under way plus the next one. A thunderstorm timestamp at or before now means one is already in progress.
A thunderstorm hour is one whose GeoSphere weather symbol is a thunderstorm, or where the C-LAEF ensemble's 90th percentiles reach 1000 J/kg CAPE and 0.1 mm precipitation; `signal` names which fired (symbol, ensemble or both). Max CAPE is a diagnostic and decides nothing.

Three behaviours are worth knowing before you build on this:

  • Horizons round up to whole hours. The window starts at the top of the current hour, so the "next 1 h" figure covers the hour already under way plus the next one, and can report an event up to ~2 h out. Compare the returned timestamps yourself if you need a strict 60-minute answer.

  • Next thunderstorm can be in the past, by up to 59 minutes, when the storm hour is the one already under way. That means a storm is in progress — clamp a negative lead time to zero rather than assuming the stamp is in the future.

  • An all-clear names its horizon (none in the next 54 h). The run nominally covers ~60 h, but it is published hours after its start and a stale or truncated run reaches less far, so the span is measured from the rows actually returned. It is not an all-clear beyond the stated span.

A thunderstorm hour is one whose GeoSphere weather symbol is a thunderstorm (codes 26–32), or one where the C-LAEF ensemble's 90th percentiles reach 1000 J/kg CAPE and 0.1 mm of precipitation — the ensemble counts only while its run is less than 12 h old. Either signal suffices, and every thunderstorm answer names it: signal: symbol, ensemble or both. Without a current ensemble run the outlook says so (ℹ️ Ensemble signal: unavailable …) and rests on the symbol alone. Thunderstorm expected reads unknown (no forecast hours in the window) only when no forecast hour falls in the window; an hour with a missing symbol counts as no storm. Max CAPE is the deterministic run's CAPE, a diagnostic that decides nothing.

get_air_quality

Pollutant concentrations now, plus the European Air Quality Index for today, tomorrow and in two days.

Parameter

Type

Default

Description

latitude

float

required

Decimal latitude (e.g. 48.2208)

longitude

float

required

Decimal longitude (e.g. 16.3738)

# Air Quality at 48.2208, 16.3738

🏷️ European AQI: 2 (fair) today · 3 (moderate) tomorrow · 2 (fair) in 2 days
🌫️ Concentrations (16:00): NO₂ 18 µg/m³ · O₃ 92 µg/m³ · PM10 21 µg/m³ · PM2.5 12 µg/m³
🕐 Timezone: Europe/Vienna (CEST)
📡 Source: GeoSphere (WRF-Chem + daily AQI, 3 km)

The AQI is reported as its 1–6 EEA band (1 good … 6 extremely poor), which is what GeoSphere publishes — there is no underlying numeric index to show alongside it. These are model forecasts, not station measurements — expect them to track a nearby monitoring station without matching it.

A point inside the 3 km grid can still come back empty when a WRF-Chem run is stale or incomplete; the response then says No air-quality data available for this location and still names the source, which is a different answer from being out of coverage.

Data sources & attribution

  • GeoSphere Austria Dataset API — the 1 km forecast (nwp-v2-1h-1km) and C-LAEF ensemble (ensemble-v2-1h-1km), INCA analysis/nowcast, WRF-Chem air quality. Data licensed under CC-BY 4.0. © GeoSphere Austria.

The API is keyless and intended for non-commercial use. When you redistribute its data, keep the attribution.

Rate limits

The GeoSphere Dataset API allows 5 requests/second and 240 requests/hour. Each call issues a small burst of concurrent requests (three for current weather, two each for the hourly forecast, the storm outlook and air quality); on an HTTP 429 the server retries once (when the API asks for a short wait) and otherwise returns a rate-limit notice.

Development

# Install dependencies (creates .venv from the locked versions)
uv sync

# Lint & format
ruff check .
ruff format .

# Run unit tests
pytest -m "not integration"

# Run integration tests (hits the live GeoSphere API)
pytest -m integration

License

MIT

Available Tools

4 tools
get_air_qualityA

Get air quality for a location: pollutants now and the AQI outlook.

Reports current NO₂, O₃, PM10 and PM2.5 surface concentrations plus the
European Air Quality Index (1-6 EEA bands) for today, tomorrow and in two
days.

GeoSphere's WRF-Chem forecast (3 km) serves Austria and the Alpine region
only; a point outside that grid returns an out-of-coverage notice. These
are model forecasts, not station measurements.

An in-coverage point can still come back empty when a WRF-Chem run is
stale or incomplete — the response then says so and names the source that
drew the blank, which is a different answer from being out of coverage.

Args:
    latitude: Decimal latitude (e.g. 48.2208 for Vienna). Geocode city
        names to coordinates yourself.
    longitude: Decimal longitude (e.g. 16.3738 for Vienna).
NameRequiredDescriptionDefault
latitudeYes
longitudeYes

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden and excels: it discloses the geographic coverage limitation, the model-forecast nature, the possibility of an empty response due to stale/incomplete runs, and that an out-of-coverage notice differs from a blank response. This goes well beyond basic behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but well-structured: a one-line summary, followed by output specifics, coverage/limitations, edge-case behavior, and parameter notes. Every sentence adds relevant information without redundancy, achieving conciseness through organization rather than brevity for its own sake.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity and the existence of an output schema (which covers return values), the description covers all necessary context: what it returns, geographic coverage, data source caveats, how to handle edge cases, and parameter preparation. It leaves no obvious gaps for an agent to misuse the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate. The Args section provides decimal examples for latitude/longitude (Vienna coordinates) and explicitly states 'Geocode city names to coordinates yourself,' giving meaningful semantic guidance beyond the bare number type in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Get air quality for a location: pollutants now and the AQI outlook.' It further details the exact pollutants (NO₂, O₃, PM10, PM2.5) and the European Air Quality Index bands, making it unmistakably distinct from sibling weather/storm tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides clear context and restrictions: 'serves Austria and the Alpine region only,' 'model forecasts, not station measurements,' and instructs users to geocode city names themselves. However, it does not explicitly name alternatives or state when not to use this tool versus its siblings, stopping short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_current_weatherA

Get current weather conditions for a location.

High-resolution GeoSphere Austria data (AROME/INCA/nowcast). Serves Austria
and the Alpine region only; a point outside that grid returns an
out-of-coverage notice. The response states which datasets served it.

Observations decide whether and what is falling; the rest of the condition
comes from GeoSphere's weather symbol for the current hour.

Args:
    latitude: Decimal latitude (e.g. 48.2208 for Vienna). Geocode city
        names to coordinates yourself.
    longitude: Decimal longitude (e.g. 16.3738 for Vienna).
NameRequiredDescriptionDefault
latitudeYes
longitudeYes

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does well: it names the underlying datasets (AROME/INCA/nowcast), discloses that out-of-grid requests yield an out-of-coverage notice rather than an error, and says the response states which datasets served it. It omits latency, caching, or rate-limit behavior, which keeps it below a 5.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loads the verb and resource, then layers scope, provenance, and semantics in short paragraphs; each block is load-bearing. The brief note on how falling precipitation is decided is slightly tangential but reinforces trust in the result, so it earns most of its space.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter read tool with an output schema already present, the description covers everything an agent needs: what it returns conceptually, geographic limits, failure mode outside coverage, and parameter format. Nothing material is left to inference.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and the schema supplies only bare 'number' types, so the description does the real work: it specifies decimal latitude/longitude semantics, gives concrete Vienna values for both fields, and tells the agent to resolve place names itself. Without this text the parameters would be effectively undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('Get current weather conditions') and immediately scopes it by data source and geography. The word 'current' plus the observation/symbol explanation clearly separates it from siblings like get_hourly_forecast and get_air_quality without needing to name them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives a hard applicability rule (Austria and the Alpine region only, out-of-coverage point returns a notice) and an explicit responsibility for the caller (geocode city names to coordinates yourself). It stops short of routing advice such as when to prefer get_hourly_forecast or get_storm_outlook instead.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_hourly_forecastA

Get an hour-by-hour weather forecast for a location.

High-resolution GeoSphere AROME data (1 km, up to ~60 h). Each hour's
condition is GeoSphere's own weather symbol; the precipitation chance is an
estimate derived from C-LAEF ensemble percentiles (0/30/70/95 %), not a
probability GeoSphere publishes. Serves Austria and the Alpine region only;
a point outside that grid returns an out-of-coverage notice.

Args:
    latitude: Decimal latitude (e.g. 48.2208 for Vienna). Geocode city
        names to coordinates yourself.
    longitude: Decimal longitude (e.g. 16.3738 for Vienna).
    hours: Number of forecast hours (default 24, clamped to 1–60).
    start: Optional ISO 8601 start time (e.g. "2026-07-22T15:00"); the
        forecast begins at/after this instant instead of now. Without
        an offset it is Vienna local time, like the times in the output.
NameRequiredDescriptionDefault
hoursNo
startNo
latitudeYes
longitudeYes

Output Schema

NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations at all, the description carries the full behavioral burden, and it does disclose valuable non-obvious traits: the precipitation chance is a C-LAEF ensemble-derived estimate (0/30/70/95 %) rather than a published probability, coverage is limited and out-of-grid points yield a notice, and times are Vienna local. It does not describe errors, ordering, or rate behavior, so it is solid but not exhaustive for an annotation-free tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the one-line purpose, then a compact paragraph of caveats, then per-argument notes in a conventional Args block. The provenance paragraph is long but each sentence (resolution, symbol source, precipitation derivation, coverage, timezone) carries information an agent cannot get from the schema.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 4-parameter read tool with an output schema (so return fields needn't be explained), the description covers the remaining unknowns: data source and resolution, forecast horizon, geographic coverage and failure mode, timezone convention, and clamping. Nothing material is left for the agent to guess.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description fully compensates: it explains latitude/longitude with concrete Vienna examples, hours with its default and 1–60 clamp, and start as an optional ISO 8601 instant with the crucial detail that a missing offset means Vienna local time matching output times.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource ('hour-by-hour weather forecast for a location') and immediately narrows the product: GeoSphere AROME at 1 km resolution, up to ~60 h. Combined with sibling names like get_current_weather, an agent can tell this is the multi-hour forecast tool rather than a current-conditions or air-quality tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives the operative preconditions for calling it: coordinates must be supplied by the caller ('Geocode city names to coordinates yourself') and the point must fall in the Austria/Alpine grid or an out-of-coverage notice is returned. It does not explicitly say 'use get_current_weather instead when you only need present conditions', so routing to siblings is left implied by names.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_storm_outlookA

Get the severe-weather outlook for a location: gusts and thunderstorms.

Reports the peak wind gust within the next hour and the next 12 hours,
whether a thunderstorm is expected within the next hour, when the next
thunderstorm is expected across the whole forecast horizon, and the peak
CAPE over the next 12 hours as a diagnostic. Deliberately reports no
severity verdict — what counts as dangerous is the caller's judgement.

An hour counts as a thunderstorm when GeoSphere's weather symbol for it is
a thunderstorm, or when the C-LAEF ensemble's 90th percentiles reach
1000 J/kg CAPE and 0.1 mm precipitation (only from an ensemble run less
than 12 h old). Each thunderstorm answer names its signal: symbol,
ensemble or both. CAPE does not decide anything on its own.

High-resolution GeoSphere AROME data (1 km) and the C-LAEF ensemble. Serves
Austria and the Alpine region only; a point outside that grid returns an
out-of-coverage notice.

The thunderstorm scan covers the forecast horizon, nominally ~60 h but
shorter after publication lag or when a run is stale or truncated. A "none
in the next N h" answer names the horizon it actually covered; it is not
an all-clear beyond that. "Thunderstorm expected" is unknown only when no
forecast hour falls in its window.

Horizons round up to whole hours: the "next hour" window covers the hour
already under way plus the next one. A thunderstorm timestamp at or before
the current time means one is already in progress.

Args:
    latitude: Decimal latitude (e.g. 48.2208 for Vienna). Geocode city
        names to coordinates yourself.
    longitude: Decimal longitude (e.g. 16.3738 for Vienna).
NameRequiredDescriptionDefault
latitudeYes
longitudeYes

Output Schema

NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does substantially well: it discloses the coverage boundary and the out-of-coverage notice, the definition logic for a thunderstorm hour, stale-run handling, truncated horizons, and the "already in progress" timestamp semantics. It omits units for peak gust and CAPE (km/h vs m/s, J/kg is stated only for CAPE thresholds) and says nothing about error or failure behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with a one-line summary, then structured into return content, detection logic, data sources/coverage, horizon semantics, and args. It is on the long side, and the opening enumeration of return values partly duplicates what the output schema already declares — that portion is the weakest use of space.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter tool with an output schema, the description covers what the schema cannot: detection criteria, coverage limits, horizon rounding, staleness, and the deliberately verdict-free contract. Missing units and any error-mode detail are the remaining gaps, but nothing needed to call it correctly is absent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description is the only source of parameter meaning — and it supplies it: decimal degrees with concrete Vienna examples, plus the explicit instruction to geocode city names to coordinates yourself, and a note that points outside the grid are rejected. It does not state valid ranges or what happens with malformed input, but the essential semantics are covered.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

Opens with a specific verb and resource ("Get the severe-weather outlook") and immediately enumerates the distinct outputs — peak gust, thunderstorm presence/timing, peak CAPE — which separates it from get_current_weather and get_hourly_forecast in substance. It never names the siblings explicitly, so an agent must infer that this is the gust/storm-specific tool rather than a general forecast.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage context is implied rather than stated: it makes clear the tool is diagnostic-only ("Deliberately reports no severity verdict") and geographically restricted to Austria/Alpine, which does route some callers away. But there is no explicit comparison to get_hourly_forecast or get_current_weather — the agent is left to infer that hourly conditions belong to the sibling and storm/convective signals belong here.

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.

  1. 3 tool updatesv0.4.0
    • Addedget_air_quality
    • Removedget_daily_forecast
    • Addedget_storm_outlook
  2. 3 tool updatesv0.1.0
    • First observedget_current_weather
    • First observedget_daily_forecast
    • First observedget_hourly_forecast

TDQS

A4.2/5.0

Scored across 4 tools

Disambiguation5/5

Each tool has a distinct role: current conditions, air quality, general hourly forecasts, or specialized severe-weather diagnostics. Although the forecast tools share underlying data and overlapping time windows, their outputs and intended uses are clearly differentiated.

Naming Consistency5/5

All four tools use consistent snake_case names with the same get_ prefix. The remaining name components clearly identify the weather product being retrieved.

Tool Count5/5

Four tools are appropriate for this tightly scoped Austria and Alpine weather service. Each addresses a meaningful workflow without adding redundant or overly granular operations.

Completeness4/5

The set covers current weather, short-range hourly forecasting, severe-weather outlooks, and air quality, which supports the core read-only workflows well. Coordinate-only location inputs require external geocoding, and there is no longer-range or daily forecast summary, but these are minor limitations that agents can work around.

Maintenance

ActivityNo data
ResponsivenessSyncing

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    MCP server providing weather data via the Open-Meteo API, including geocoding, current conditions, daily and hourly forecasts, and city lookup. No API key required, with support for multiple units and transport types.
    1
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    MCP server that provides current weather, multi-day forecasts, umbrella recommendations, severe weather alerts (US), and side-by-side city comparisons using Open-Meteo and NWS APIs, with no API key required.
    -