io.ausdata/au-weather-mcp
PYPI · AU-WEATHER-MCP · SCANNED SEP 20
Query Australian weather + air quality — forecasts, current obs, 80yr archive (BOM).
Available components
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →
Supply Chain Security100
- No malware found by supply-chain analysis.Pass
- No known CVEs affecting this package version or its production dependencies.Pass
- Runs hatchling.build at install time, a recognised native-build step with no shell scripting around it. View diagnostics → Pass
- 1 of 25 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency48
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
- Clear OSI-approved license (MIT).Pass
- Actively maintained (last published 36 days ago).Pass
- Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability63
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 2538 tokens (~362/item across 7 items; 7 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management97
- Stability observed for 29 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
- Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- We read all 7 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
- An AI judge read all 7 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
How do I install the io.ausdata/au-weather-mcp server?
io.ausdata/au-weather-mcp runs locally as a PyPI package, launched with uvx au-weather-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
pypi · au-weather-mcp
claude mcp add io-ausdata-au-weather-mcp -- uvx au-weather-mcp
{
"mcpServers": {
"io-ausdata-au-weather-mcp": {
"command": "uvx",
"args": [
"au-weather-mcp"
]
}
}
} {
"servers": {
"io-ausdata-au-weather-mcp": {
"command": "uvx",
"args": [
"au-weather-mcp"
]
}
}
} codex mcp add io-ausdata-au-weather-mcp -- uvx au-weather-mcp
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"io-ausdata-au-weather-mcp": {
"type": "local",
"command": [
"uvx",
"au-weather-mcp"
],
"enabled": true
}
}
} openclaw mcp add io-ausdata-au-weather-mcp --command uvx --arg au-weather-mcp
mcp_servers:
io-ausdata-au-weather-mcp:
command: "uvx"
args: ["au-weather-mcp"] {
"McpServers": {
"io-ausdata-au-weather-mcp": {
"Transport": "stdio",
"Command": "uvx",
"Arguments": [
"au-weather-mcp"
]
}
}
} assistant mcp add io-ausdata-au-weather-mcp -t stdio -c uvx -a au-weather-mcp
{
"mcpServers": {
"io-ausdata-au-weather-mcp": {
"command": "uvx",
"args": [
"au-weather-mcp"
]
}
}
} Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 20 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 93 to 97. That category is still filling its 30-day observation window: 28 days of observed history at the previous scan, 29 at this one. The score rises as the window fills, whether or not the server changes.
- 18 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 87 to 90. That category is still filling its 30-day observation window: 26 days of observed history at the previous scan, 27 at this one. The score rises as the window fills, whether or not the server changes.
- 16 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 80 to 83. That category is still filling its 30-day observation window: 24 days of observed history at the previous scan, 25 at this one. The score rises as the window fills, whether or not the server changes.
- 15 Sept 26 −3
- Stability: pass → 0.80 functional
- 14 Sept 26 0
- Stability: 0.97 → pass security
- 13 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 93 to 97. That category is still filling its 30-day observation window: 28 days of observed history at the previous scan, 29 at this one. The score rises as the window fills, whether or not the server changes.
- 11 Sept 26 −1
- Stability: pass → 0.90 functional
- 10 Sept 26 0
- Stability: 0.97 → pass security
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 20 Sept 2026 · Analysed pypi/au-weather-mcp@0.4.10
Provenance No attestation
The registry publishes no build provenance for this version, so there is nothing to verify.
| Result | No attestation |
|---|---|
| Ecosystem | pypi |
Background: How many MCP packages publish verified provenance →
Install scripts 1 script
| Hook | Tier | Command |
|---|---|---|
| build_backend | allowlisted | hatchling.build |
Background: Why install scripts are a supply-chain risk →
Dependencies 25 packages
| Packages resolved | 25 |
|---|---|
| Stale | 1 |
| Tree resolution | Complete |
Background: SBOMs and build attestations, explained →
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
air_quality ~370
Return current air-quality readings for any Australian location. Sourced from Open-Meteo's air-quality API, which merges Copernicus CAMS European + global air-composition models. Returns PM2.5, PM10, ozone, nitrogen dioxide, sulphur dioxide, carbon monoxide (all µg/m³), plus the European and US AQI indices with plain-English labels. Especially useful during AU bushfire season (Oct–Mar) when smoke can push PM2.5 above safe levels across whole regions. Examples: # Current Sydney air quality resp = await air_quality("sydney") # resp.current.pm2_5_ugm3 == 8.8 # resp.current.european_aqi == 21 # resp.current.european_aqi_label == 'Good' # resp.current.us_aqi == 39 # resp.current.us_aqi_label == 'Good' # Bushfire smoke check for the Blue Mountains resp = await air_quality("-33.7,150.3") # Brisbane CBD via postcode resp = await air_quality("4000") When to use: - "Is the air clean enough to go for a run in <city>?" - Bushfire smoke or burn-off impact checks - Asthma / allergy planning - Long-term air quality monitoring (call periodically and chart) Returns: AirQualityResponse with `current` populated (pollutants + AQI scales), plus location metadata, source_url, attribution, and server_version.
| Name | Type | Req | Description |
|---|---|---|---|
| location | string | yes | Any Australian location. Same accepted shapes as latest(): curated ID, place name, state code/name, postcode, or 'lat,lng' coordinates. |
| Name | Type | Req | Description |
|---|---|---|---|
| attribution | string | – | – |
| current | – | – | – |
| latitude | number | yes | – |
| location_id | – | yes | – |
| location_input | string | yes | – |
| location_name | string | yes | – |
| location_resolution | string | yes | – |
| longitude | number | yes | – |
| retrieved_at | string | yes | – |
| server_version | string | yes | – |
| source | string | – | – |
| source_url | string | yes | – |
| stale | boolean | – | – |
| stale_reason | – | – | – |
| state | – | yes | – |
| timezone | string | yes | – |
No examples provided.
compare_locations ~317
Compare current weather across multiple Australian locations in one call. Fans out concurrently via asyncio.gather, so all locations come back in roughly the time of a single call (after the cache is warm). Each location is independently resolved (curated / state / postcode / geocode / etc.) and independently fetched. If one location fails (e.g. geocoder can't find it), that row gets an `error` field while the rest still return. Examples: # Capital-city dashboard resp = await compare_locations(["sydney","melbourne","brisbane","perth"]) for row in resp.locations: print(row.location_name, row.current.temperature_c) # Tropical north today resp = await compare_locations(["Cairns","Darwin","Townsville","Broome"]) # Mixed input shapes work resp = await compare_locations(["sydney","NSW","2026","-33.87,151.21"]) When to use: - "Compare weather in <several cities>" — the canonical use case - Build a multi-region dashboard in one tool call - Plan a holiday across regions Returns: ComparisonResponse with one ComparisonRow per input location. Successful rows have `current` populated; failed rows have `error`.
| Name | Type | Req | Description |
|---|---|---|---|
| locations | array | yes | Two to ten Australian locations to compare side-by-side. Each entry accepts the same shapes as latest(): curated ID, place name, state, postcode, or 'lat,lng'. |
| Name | Type | Req | Description |
|---|---|---|---|
| attribution | string | – | – |
| locations | array | yes | – |
| metric | string | yes | – |
| retrieved_at | string | yes | – |
| server_version | string | yes | – |
| source | string | – | – |
| source_url | string | – | – |
| stale | boolean | – | – |
| stale_reason | – | – | – |
No examples provided.
describe_location ~381
Return metadata for an Australian location — name, lat/lng, timezone, elevation, and (for curated locations) the nearest BOM station ID. Accepts a wide range of input shapes for compatibility — see the `location` parameter description. The returned `id` is None for non-curated lookups (geocoded place names, raw coordinates) and a snake_case curated key when the input matched the curated set. Examples: await describe_location("sydney") # → curated path await describe_location("Sydney") # → curated path (case-insensitive) await describe_location("NSW") # → state capital (Sydney) await describe_location("Margaret River") # → geocoded (Western Australia) await describe_location("-33.87,151.21") # → raw coordinates When to use: - Before calling get_weather, to confirm coordinates and timezone - To cross-reference with BOM's own observation network (for curated) - To verify how the server resolved an ambiguous customer input Returns: LocationDetail with id (or None), name, state, lat/lng, timezone, elevation, nearest BOM station ID (curated only), the Open-Meteo URL, and the CC-BY attribution.
| Name | Type | Req | Description |
|---|---|---|---|
| location | string | yes | Any Australian location, in any of these shapes: (1) curated ID like 'sydney', 'gold_coast'; (2) place name in any case like 'Sydney', 'Gold Coast', 'Margaret River', 'Byron Bay'; (3) state code or n… |
| Name | Type | Req | Description |
|---|---|---|---|
| attribution | string | yes | – |
| description | – | – | – |
| elevation_m | – | – | – |
| id | – | yes | – |
| latitude | number | yes | – |
| longitude | number | yes | – |
| name | string | yes | – |
| nearest_bom_station | – | – | – |
| open_meteo_url | string | yes | – |
| state | string | yes | – |
| timezone | string | yes | – |
No examples provided.
get_weather ~495
Query weather over a date range. Routes to historical archive or forecast endpoint automatically based on the date range. Routing logic: - end_date in the past (>= 5 days ago) → historical archive (1940+) - start_date in the future → forecast (today + 16 days max) - range straddles today → forecast with past_days set Examples: # Historical: how was Sydney summer 2020? resp = await get_weather( "sydney", start_date="2020-01-01", end_date="2020-01-31", granularity="daily", ) # → 31 DailyAggregate rows with temp_max, temp_min, precip per day # 7-day forecast for Melbourne, hourly detail resp = await get_weather( "melbourne", start_date="2026-05-12", end_date="2026-05-19", granularity="hourly", ) # → 168 hourly WeatherObservation rows # Just today (omit both dates) resp = await get_weather("brisbane") # → today's daily aggregate When to use: - Time-series queries (forecast over the next week, or historical comparison) - Multi-day weather analysis - Climate research and historical look-backs (decade-scale via archive) Returns: WeatherResponse with either `daily` or `hourly` populated depending on `granularity`. Period bounds populated from actual returned data.
| Name | Type | Req | Description |
|---|---|---|---|
| end_date | – | – | Inclusive end date in 'YYYY-MM-DD' format. Same range rules as start_date. |
| granularity | string | – | Time resolution of the returned series. 'daily' (default) returns one row per day with max/min/sum aggregates. 'hourly' returns one row per hour with point observations — useful for intraday detail b… |
| location | string | yes | Any Australian location. Same accepted shapes as latest(): curated ID, place name (any case), state code/name, or raw 'lat,lng' coordinates. |
| start_date | – | – | Inclusive start date in 'YYYY-MM-DD' format. Open-Meteo's historical archive covers 1940-01-01 onwards (5-day lag). Forecast covers today through today + 16 days. |
| Name | Type | Req | Description |
|---|---|---|---|
| attribution | string | – | – |
| current | – | – | – |
| daily | – | – | – |
| hourly | – | – | – |
| latitude | number | yes | – |
| location_id | – | yes | – |
| location_input | string | yes | – |
| location_name | string | yes | – |
| location_resolution | string | yes | – |
| longitude | number | yes | – |
| period | object | – | – |
| query | object | – | – |
| retrieved_at | string | yes | – |
| server_version | string | yes | – |
| source | string | – | – |
| source_url | string | yes | – |
| stale | boolean | – | – |
| stale_reason | – | – | – |
| state | – | yes | – |
| timezone | string | yes | – |
No examples provided.
latest ~342
Return the current weather observation for any Australian location. Wraps Open-Meteo's `/forecast` endpoint with `current=...` parameters and a 15-minute cache TTL (matches Open-Meteo's own update cadence). Use for "what's the weather right now?" — warm-cache latency < 100 ms. Examples: resp = await latest("sydney") # curated, fast path resp = await latest("Sydney") # case-insensitive resp = await latest("Byron Bay") # geocoded resp = await latest("NSW") # state → Sydney resp = await latest("-33.87,151.21") # raw coordinates The response's `location_resolution` field tells the agent how the input was interpreted ('curated', 'state_alias', 'geocoded', 'raw_coordinates', or 'fuzzy_curated'). When to use: - "What's the weather right now in <place>?" — canonical use case - Multi-city current-conditions dashboards (call once per place) - Anchoring agent conversations to live weather context Returns: WeatherResponse with `current` populated, plus location metadata, resolution source, source_url, CC-BY attribution, and server_version.
| Name | Type | Req | Description |
|---|---|---|---|
| location | string | yes | Any Australian location. Accepted shapes: curated ID ('sydney'), place name in any case ('Sydney', 'Byron Bay', 'Margaret River'), state code or name ('NSW', 'Queensland' → returns the capital), or r… |
| Name | Type | Req | Description |
|---|---|---|---|
| attribution | string | – | – |
| current | – | – | – |
| daily | – | – | – |
| hourly | – | – | – |
| latitude | number | yes | – |
| location_id | – | yes | – |
| location_input | string | yes | – |
| location_name | string | yes | – |
| location_resolution | string | yes | – |
| longitude | number | yes | – |
| period | object | – | – |
| query | object | – | – |
| retrieved_at | string | yes | – |
| server_version | string | yes | – |
| source | string | – | – |
| source_url | string | yes | – |
| stale | boolean | – | – |
| stale_reason | – | – | – |
| state | – | yes | – |
| timezone | string | yes | – |
No examples provided.
list_curated ~386
List the 45 curated Australian location IDs supported by this MCP. The curated set covers all 8 state/territory capitals plus 37 major regional centres. Any Australian place name outside this set still works via the place-name geocoder; the curated entries just get fast-path lookup (no network call) and appear in `search_locations`. Coverage by state: - 8 capitals: sydney, melbourne, brisbane, perth, adelaide, hobart, darwin, canberra - NSW regional (10): newcastle, wollongong, tamworth, wagga_wagga, albury, orange, bathurst, dubbo, coffs_harbour, port_macquarie - VIC regional (6): geelong, ballarat, bendigo, mildura, shepparton, warrnambool - QLD regional (9): gold_coast, sunshine_coast, cairns, townsville, mackay, toowoomba, rockhampton, bundaberg, hervey_bay - WA regional (5): broome, bunbury, geraldton, albany, kalgoorlie - SA regional (2): mount_gambier, whyalla - TAS regional (3): launceston, devonport, burnie - NT regional (2): alice_springs, katherine When to use: - You want to enumerate which locations have first-class support - You're building a UI / dashboard that needs the supported set up front - You want to plan a multi-location dashboard call Returns: Sorted list of location IDs (currently 45). Adding a location is a YAML edit in src/au_weather_mcp/data/curated/locations.yaml.
Input schema present but exposes no named parameters.
| Name | Type | Req | Description |
|---|---|---|---|
| result | array | yes | – |
No examples provided.
search_locations ~247
Fuzzy-search the 45 curated Australian locations. The curated set covers all 8 state/territory capitals plus 37 major regional centres (every AU population centre over ~25k). Anything outside the curated set still resolves via place-name geocoding or postcode lookup — see `list_curated()` for the full set. Examples: results = await search_locations("sydney") # → [{id: 'sydney', name: 'Sydney', state: 'NSW', ...}] results = await search_locations("nsw") # → Newcastle, Wollongong, Sydney (all NSW locations) When to use: - Discover the location ID for a city you know by name - Find all supported locations in a state - Verify whether a place is in the curated set before calling get_weather Returns: List of LocationSummary (id, name, state, description), ranked by relevance.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Maximum number of results to return, ranked by relevance. |
| query | string | yes | Free-text search query. Matches against location IDs, names, and state codes. Case-insensitive. |
| Name | Type | Req | Description |
|---|---|---|---|
| result | array | yes | – |
No examples provided.
What is the io.ausdata/au-weather-mcp server?
io.ausdata/au-weather-mcp is listed in the public MCP registry as io.ausdata/au-weather-mcp. Query Australian weather + air quality, forecasts, current obs, 80yr archive (BOM). This page covers its PyPI package (au-weather-mcp).
Is the io.ausdata/au-weather-mcp server safe to use?
io.ausdata/au-weather-mcp scores 83 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 20 September 2026. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the io.ausdata/au-weather-mcp server expose?
io.ausdata/au-weather-mcp exposes 7 tools: search_locations, describe_location, latest, get_weather, air_quality, and 2 more. Their descriptions and schemas cost roughly 2,538 tokens of context every time the server is loaded.
Is the io.ausdata/au-weather-mcp server still maintained?
io.ausdata/au-weather-mcp is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.
What licence is the io.ausdata/au-weather-mcp server under?
io.ausdata/au-weather-mcp declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.