Every change Wellknown observed on this MCP server, newest first, with what it was before and what it became. Tool-surface changes carry the definition diff. Nothing here is edited after the fact.
Recently observed → Live
Live → Recently observed
Certificate changed, valid to 2027-01-09
Recently observed → Live
Live → Recently observed
Added "get_rankings", "get_regional_prices" and "get_simulator_revenue"; changed the definition of "get_battery_detail", "get_battery_optimal", "get_battery_revenue" and 5 more (8 tools before, 11 now)
before
—after
Battery detail⟨15 unchanged words⟩ . Omit both for the month-to-date default.","format":"date","type":"string"},"date_to":{"description" ⟨10 unchanged words⟩ duid":{"description":"Battery DUID, e.g.HPR1HPR1. Use list_bess_units to find it from a station name.","type":"string"}},"required": ⟨3 unchanged words⟩
Recently observed → Live
Live → Recently observed
Recently observed → Live
Live → Recently observed
Recently observed → Live
Live → Recently observed
Recently observed → Live
Live → Recently observed
Changed the definition of "list_bess_units"
⟨7 unchanged words⟩ region, MW/MWh, MLF, coordinates, is_commissioning, commercial_context, unit_class, peer_comparable). rev_per_mw_yr is trailing 365-day energy + FCAS ⟨159 unchanged words⟩ Before comparing any two units' revenue, checkcommercial_contextBOTH labels oneacheach.—commercial_context (TOLLED/CONTRACTED)unitsmeansdon'tthe unit does not trade merchant
Changed the definition of "query_nem_data"
⟨35 unchanged words⟩ region, or per-day top-N across all regions)can exceedrisk the15sgeneratedquerySQLtimeout.exceeding its own 8s execution cap, which this tool's longer timeout does not extend. For per-day top-N / bottom-N questions, phrase ⟨84 unchanged words⟩
Certificate recorded, valid to 2026-11-11
Authorization not required
First tool surface recorded: 8 tools (server version 1.0.0)
Showing the latest 19 events. The API returns up to 500 and filters by kind: ?kind=tool_surface_changed
before
—after
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true,"title":"Battery detail"}before
—after
Actual vs optimal dispatch revenue⟨3 unchanged words⟩ ":{"date_from":{"description":"Start date, YYYY-MM-DD (inclusive).","format":"date","type":"string"},"date_to":{"description":"End date, YYYY-MM-DD (inclusive).","format":"date","type":"string"},"duid":{ ⟨18 unchanged words⟩
before
—after
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true,"title":"Actual vs optimal dispatch revenue"}before
—after
Battery daily revenue⟨3 unchanged words⟩ ":{"date_from":{"description":"Start date, YYYY-MM-DD (inclusive).","format":"date","type":"string"},"date_to":{"description":"End date, YYYY-MM-DD (inclusive).","format":"date","type":"string"},"duid":{"description":"Battery DUID, e.g.HPR1HPR1. Use list_bess_units to find it from a station name.","type":"string"}},"required": ⟨5 unchanged words⟩
before
—after
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true,"title":"Battery daily revenue"}before
—after
Price event detailSummaryOnestatspriceforeventonebymarketevent_id (take the id from list_events), with the response of every battery that was online, ranked by est_revenue. Event fields are as in list_events. Each battery row has duid, station, region, response (DISCH = discharging, CHRG = charging, IDLE, OFFLINE = no availability), avg_mw (positive is discharge), peak_mw, est_revenue (energy only, sum of MW times price over the event,bygross,idnot MLF-adjusted; excludes FCAS), soc_pct at start and soc_pct_end, availability_mw, fcas_mw (per-intervalaverage FCAS commitment), plus is_commissioning, unit_class and peer_comparable. Check those labels before comparing units. Per-interval dispatch during the event is notexposed).exposed.
⟨3 unchanged words⟩ ":{"id":{"description":"Event id, as returned in event_id by list_events.","type":"string"}},"required": ⟨3 unchanged words⟩
before
—after
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true,"title":"Price event detail"}before
—after
NEM battery fleet summaryFleet-wide snapshot for the NEM battery fleet:unitunit_count,countactive_unit_count,totaltotal_mw,capacitytotal_mwh,revenuefleet_rev_mtd,month-to-dateavg_efficiency_pct,averagelast_interval and spot_prices (latest price per region, $/MWh). Covers month-to-date unless date_from and date_to are given. fleet_rev_mtd is gross spotprice.revenue (energy + FCAS + FPP) over that window, whatever its length, despite the name. avg_efficiency_pct is dollar-weighted actual energy revenue as a share of the perfect-foresight optimum (a capture rate), null if the optimisation has not run for the window. Commissioning units are excluded from the efficiency figure unless include_commissioning is true. For one battery use get_battery_detail; for a ranking use get_rankings.
{"additionalProperties":false,"properties":{"date_from":{"description":"Optional. Start date YYYY-MM-DD (requires date_to). Omit both for month-to-date.","format":"date","type":"string"},"date_to":{"description":"Optional. End date YYYY-MM-DD (requires date_from).","format":"date","type":"string"},"include_commissioning":{"description":"Include units still commissioning in the efficiency figure (default false).","type":"boolean"}},"type":"object"}
before
—after
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true,"title":"NEM battery fleet summary"}before
—after
List NEM battery unitsListReference list of every NEM-registered grid-scalebatterybattery. Call this first to turn a station name into the DUID the other tools need. Returns the whole fleet in one response (no filters): DUID, station, region, MW/MWh, MLF, coordinates, is_commissioning, commercial_context, unit_class, peer_comparable)., rev_per_mw_yr. Caveats on the fields follow. rev_per_mw_yr is trailing 365-day energy + FCAS revenue ⟨264 unchanged words⟩
before
—after
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true,"title":"List NEM battery units"}before
—after
List NEM price eventsList NEM spot-price events, newest first. An event is a run of 5-minute intervals in one region where the price stays above $500/MWh or below -$200/MWh (short gaps are bridged), typed by its peak price: negative (below -$200), elevated (peak $500 to $1,000), spike ($1,000 to $5,000) or extreme ($5,000 and above). Each event has event_id,optionallyregion,filteredevent_type, started_at, ended_at, duration_min, peak_rrp, avg_rrp and is_open (still ongoing). Filter byregion.region, event_type and a date range. By default only event summaries are returned; set include_responses to true to also get how each battery behaved during each event, in which case keep limit small (response rows make the payload large and it is truncated at about 100 KB). Use get_event_detail for one event's battery responses.
{"additionalProperties":false,"properties":{"date_from":{"description":"Optional. Only events starting on or after this date, YYYY-MM-DD.","format":"date","type":"string"},"date_to":{"description":"Optional. Only events starting on or before this date, YYYY-MM-DD.","format":"date","type":"string"},"event_type":{"description":"Optional event type filter.","enum":["negative","elevated","spike","extreme"],"type":"string"},"include_responses":{"description":"Also return per-battery responses for each event (default false).","type":"boolean"},"limit":{"description":"Max events to return (default5010, max 500).","maximum":500,"minimum":1,"type":"integer"},"offset":{"description":"Skip this many events, for paging (default 0).","minimum":0,"type":"integer"},"region":{"description":"NEM region code: NSW1,e.g.QLD1, SA1 (optionalSouth Australia), TAS1 or VIC1.","enum":["NSW1","QLD1","SA1","TAS1","VIC1"],"type":"string"}},"type":"object"}
before
—after
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true,"title":"List NEM price events"}before
—after
Ask a question of the NEM dataAskLast resort for ad hoc questions the other tools cannot answer. Takes anatural-languageplain-English question,aboutgeneratesNEMSQLBESSoverdata;NEMPulse's tables, and returnsgeneratedthe SQL, the result rows and aplain-Englishshort explanation. It is the slowest tool (can take close to a minute) and it is AI-generated, so check the returned SQL before relying on a number. Scope each question toroughlyabout one region-month or less:—wider aggregatesspanning more(e.g.a full year by region, or per-day top-N across all regions) riskthe generated SQLexceedingitstheown88ssecondexecutionSQLcaplimit,which thisandtool'sa longertimeoutwait does notextend.help. For per-day top-N/or bottom-N questions,phrase them so the generated SQLaskusesfor a window function (ROW_NUMBER/RANKROW_NUMBER or RANK) rather than a per-daycorrelatedsubquery— the,latterwhich has beenobservedseen to silently return all-nullrows withrows.noQueryableerror.data:Onlydispatchdispatch_pricesprices,daily_revenuedaily revenue,optimal_dispatchoptimal dispatch,bess_price_profilebatteryandpricemarket_eventsprofilesareandreachablemarkethere;events.theThemarket_*marketcacheanalysis tables (market_monthly, market_regression,monthlymarket_corr_trackerspreads,market_daily_priceregressions,market_daily_fleetcorrelations)behind the market-analysis page live in a separate database andareNOT queryable through this tool — a question about them will be recomputed from dispatch_prices instead, which is slower and easy tonotphrasereachableincorrectly.here.
⟨3 unchanged words⟩ ":{"question":{"description":"Plain-English question,(max 500chars).characters. Name the region and date range, e.g. 'Which SA1 battery earned the most FCAS revenue in August 2026?'","maxLength":500,"type":"string"}},"required":[ ⟨3 unchanged words⟩
before
—after
{"destructiveHint":false,"idempotentHint":true,"openWorldHint":false,"readOnlyHint":true,"title":"Ask a question of the NEM data"}Battery capture-rate rankings — League table of merchant NEM batteries over a date range, ranked by capture rate by default (actual revenue as a share of the forecast-informed benchmark; capture_perfect_pct is the share of the perfect-foresight ceiling). Each row has rank, duid, station, region, capacity, duration_band, capture_fc_pct, capture_perfect_pct, rev_per_mw_day, rev_per_mwh_day, total_rev, cycles_per_day and movement against the previous period of equal length. Units still commissioning and CONTRACTED or TOLLED units are listed under excluded, not ranked, unless include_arrangement is true (their spot revenue is n…
Regional daily price summary — Daily minimum, maximum and mean regional reference price (RRP, $/MWh) for one NEM region over a date range. Daily summary only: the raw 5-minute price series is not exposed (it is published by AEMO on NEMWEB). Use it for price context around revenue or events. For individual price spikes use list_events.
Hypothetical battery revenue — Modelled revenue for a hypothetical 1 MW battery of a given duration in one region (not a real unit), from NEMPulse's optimal-dispatch model on real prices. Returns P10/P50/P90 revenue for three tiers: realistic (forecast-informed result scaled by the capture ratio real batteries achieve, the only tier to use as a project case), forecast_informed (idealised execution on AEMO's public price forecast) and perfect (an unreachable ceiling). Also energy_share and fcas_share, a monthly series, and the real-unit cohorts behind the FCAS cap and the capture ratio. Gross spot revenue only, before costs…