Query the AEMO NEM in plain English — 5-min prices, demand, generation, rooftop PV.
io.ausdata/aemo-mcp — Model Context Protocol Server
This MCP server is described as “Query the AEMO NEM in plain English — 5-min prices, demand, generation, rooftop PV.” It targets Australian electricity-market data via Model Context Protocol tooling for LLM or AI-agent integrations, using the server name io.ausdata/aemo-mcp.
🛠️ Key Features
Plain-English queries for the AEMO NEM
Provides 5-minute prices
Retrieves demand and generation information
Includes rooftop PV data
🚀 Use Cases
Build AI agents that answer questions about recent electricity prices
Support analysis of demand and generation trends from AEMO NEM
Provide rooftop PV–related queries for Australian energy contexts
⚡ Developer Benefits
MCP server for integrating AEMO NEM data into agent workflows
Topics indicate alignment with model-context-protocol and LLM usage
⚠️ Limitations
Only the documented categories (prices, demand, generation, rooftop PV) are explicitly supported in the provided description
Ask Claude about Australia's electricity market and get real, current
numbers — 5-minute spot prices, regional demand, generation by fuel,
interconnector flows, rooftop solar — not "I don't have access to that data."
This MCP server gives Claude (and other MCP clients like Cursor) live access
to the Australian Energy Market Operator (AEMO) NEMWEB
feeds, with curated mappings for the most-asked indicators.
Hosted access? For cross-source queries, webhooks, an always-on REST API, and a uniform response envelope across all 9 sources, see ausdata.io — free tier available (500 calls/mo, no card).
Companion to abs-mcp (ABS macro stats),
rba-mcp (RBA interest + FX rates),
ato-mcp (ATO tax + ACNC charity),
apra-mcp (banking + superannuation),
aihw-mcp (health & welfare),
asic-mcp (companies + financial advisers),
and au-weather-mcp (Australian
weather) — together they cover the most-asked Australian official data.
What you can ask
Once installed, your LLM can answer questions like:
Every answer comes with the interval timestamp (AEMO market time, UTC+10),
units (MW, $/MWh), and a link back to the NEMWEB source. The MCP wraps
NEMWEB's CSV/ZIP feeds and exposes them through 5 plain-English tools.
Install
bash
# After publish:
uvx --upgrade aemo-mcp
# Local dev:
uv pip install -e .
Claude Desktop
Add to ~/Library/Application Support/Claude/claude_desktop_config.json:
Why --upgrade?uvx aemo-mcp (without the flag) uses whatever wheel
is cached and never adopts new PyPI releases on its own. --upgrade makes
uvx check PyPI on each launch and pull a newer release if one exists.
Recommended for everyone except offline-first / pinned-version workflows.
To verify which version is currently serving you, look at the
server_version field on any DataResponse.
If you also have rba-mcp / abs-mcp installed, all servers run side-by-side.
Claude disambiguates with the server prefix (aemo:get_data, rba:get_data,
abs:get_data).
Most recent 5-min or 30-min interval for time-series feeds.
list_curated()
The 7 curated dataset IDs.
Curated datasets
The 7 datasets cover ~95% of typical NEM analytic queries:
dataset_id
Cadence
Source
Use case
dispatch_price
5 min
DispatchIS / DISPATCHPRICE
Current spot price per region; negative-pricing detection
dispatch_region
5 min
DispatchIS / DISPATCHREGIONSUM
Demand + scheduled + semi-scheduled gen + net interchange
interconnector_flows
5 min
DispatchIS / DISPATCHINTERCONNECTORRES
MW flow + losses across NEM interconnectors
generation_scada
5 min
Dispatch_SCADA
DUID-level MW (every unit), aggregable by fuel
rooftop_pv
30 min
ROOFTOP_PV/ACTUAL + FORECAST
Regional rooftop solar (actual + forecast)
predispatch_30min
30 min
PredispatchIS
30-min forecast, ~40h horizon
daily_summary
Daily
Daily_Reports
Yesterday's full data in one drop
Use list_curated() to enumerate, describe_dataset(dataset_id) to learn
the filters available on each.
Regions
NSW1 (New South Wales), QLD1 (Queensland), SA1 (South Australia), TAS1
(Tasmania), VIC1 (Victoria). Western Australia (WEM) and the Northern
Territory are not on the NEM and are out of scope.
The AEMO data it fetches is published under AEMO's Copyright Permissions
policy: AEMO grants general permission to use AEMO Material for any purpose
(commercial included) on the sole condition of accurate attribution of the
relevant material and AEMO as its author. See
https://aemo.com.au/privacy-and-legal-notices/copyright-permissions.
End-users redistributing data fetched via this server must credit AEMO.
The canonical attribution string is on every DataResponse.attribution.
→ DUID-level rows with fuel attribution; the LLM aggregates by fuel.
How it works
Live-fetch only. No NEMWEB archives in the wheel. Every request goes
through the cache.
Cache TTLs tuned per cadence. 60s for 5-min feeds, 5min for 30-min
feeds, 1h forecasts, 24h daily archive. Timestamped historical files are
immutable in NEMWEB and cache effectively forever.
In-flight request deduplication. Concurrent callers for the same URL
share one HTTP request. Critical at 5-min cadence with many users.
Latest-file detection is purely lexicographic on the NEMWEB directory
listing — AEMO embeds the interval timestamp in every filename
(PUBLIC_DISPATCHIS_YYYYMMDDHHmm_<seq>.zip), so max() is enough.
Multi-section CSV parser handles AEMO's I,/D, row format where a
single ZIP holds several tables (DISPATCHPRICE, DISPATCHREGIONSUM,
DISPATCHINTERCONNECTORRES, etc.).
Development
bash
git clone https://github.com/Bigred97/aemo-mcp
cd aemo-mcp
uv sync --extra dev
uv pip install -e .
uv run pytest -q
Run live tests (hit NEMWEB):
bash
uv run pytest -q -m live
Zero-flake validation:
bash
for i in $(seq 1 10); do uv run pytest -q || break; done
Sister MCPs (Australian Public Data portfolio)
Want all 9 sources behind one REST API? The hosted gateway at ausdata.io adds cross-source joins, full history, webhooks, and HMAC-signed responses on top of these MCPs — free tier (500 calls/mo, no card).
abs-mcp — Australian Bureau of Statistics (CPI, unemployment, ERP, building approvals)
rba-mcp — Reserve Bank of Australia (cash rate, lending stats, exchange rates)
ato-mcp — Australian Taxation Office (tax stats, ACNC charities)
apra-mcp — Australian Prudential Regulation Authority (banking, insurance, super)
aihw-mcp — Australian Institute of Health and Welfare
asic-mcp — Australian Securities and Investments Commission (company registers)
aemo-mcp — this one. Australian Energy Market Operator (NEM dispatch, spot prices, generation).
au-weather-mcp — Open-Meteo (Bureau of Meteorology aggregator)