aeso-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| AESO_API_KEY | Yes | Your AESO APIM API subscription key. Obtainable from https://developer-apim.aeso.ca/ |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| logging | {} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_market_snapshotA | Returns a cohesive current-state view of the Alberta electricity market including recent pool price, system marginal price, Alberta Internal Load, generation by fuel, net interchange, and operating reserves. Units: prices CAD/MWh, power MW. Timezone: America/Edmonton. |
| get_pool_pricesA | Returns actual AESO hourly Pool Price observations in CAD/MWh for the requested market interval [start, end). Use get_system_marginal_prices for minute-level real-time pricing. Timestamps are America/Edmonton. Maximum range: 366 days. |
| get_system_marginal_pricesA | Returns AESO System Marginal Price (SMP) observations in CAD/MWh with minute-level interval boundaries for [start, end). Prefer get_pool_prices for hourly settlement prices. Timestamps are America/Edmonton. Maximum range: 7 days. |
| get_loadA | Returns Alberta Internal Load (AIL) observations in MW for [start, end). Optionally includes load forecast values when available. Timestamps are America/Edmonton. Maximum range: 90 days. |
| get_generationA | Returns Alberta generation data. Omit start/end for the current fuel-mix snapshot (all fuels, MW). Provide start and end for historical wind and solar hourly generation. Renewable share uses wind + solar + hydro over total generation. |
| get_interchangeA | Returns current Alberta interchange flows by path in MW, including net interchange. Positive/negative path signs follow AESO Current Supply Demand conventions. |
| get_reservesA | Returns current AESO operating reserve indicators in MW, including contingency reserve required/dispatched and fast frequency response volumes when published. |
| get_outagesA | Returns hourly AESO generator outage capacity by technology/fuel for [start, end) (Total Outage MW plus per-fuel components). Timestamps: America/Edmonton. For transmission planned outages use get_approved_transmission_outages or get_long_range_transmission_outages. |
| get_approved_transmission_outagesA | Returns AESO-approved planned transmission outages (approval_status=approved). Omit start/end for the current public publication. Historical start/end select publication windows and are tightly bounded. Distinct from generator outages and from long-range tentative outages. |
| get_long_range_transmission_outagesA | Returns Long Range Significant Transmission Outages covering ~24 months ahead. Entries may be tentative and not AESO-approved (approval_status=tentative). Do not confuse with get_approved_transmission_outages. |
| get_assetsA | Returns AESO market asset registry records with optional filters for asset ID, pool participant, operating status, and asset type. Results may be truncated by the limit parameter. |
| get_monthly_cumulative_net_revenueA | Returns the current AESO Monthly Cumulative Settlement Interval Net Revenue (MCSINR) public report. Includes cumulative CAD vs 1/6 annualized unavoidable costs and whether the secondary offer price limit trigger has been reached. Timestamps: America/Edmonton hour-ending intervals. |
| get_secondary_offer_price_limitA | Returns the current AESO Secondary Offer Price Limit public report: whether the secondary offer cap is in effect and the CAD/MWh limit when posted. A null limit means the cap is not in effect. |
| compare_market_periodsA | Compares aggregate pool-price and load statistics between two America/Edmonton market periods. Returns averages, min/max/median prices, load stats, and deltas. Does not assert causation. |
| find_price_eventsA | Detects sustained high Pool Price events in CAD/MWh over [start, end). Threshold may be an absolute CAD/MWh value or a percentile (default 90th). Returns event boundaries, duration, peak/average price, and load context when available. |
| explain_market_conditionsA | Returns structured evidence for market conditions in a focus window versus a baseline window (default: immediately preceding equal-length window). Includes observed metrics and associated_changes. Does not claim causation; the calling model should produce any natural-language explanation. |
| compare_forecast_to_actualA | Compares Alberta Internal Load forecast versus actual over [start, end) in MW. Returns mean error, MAE, RMSE, MAPE, and paired intervals. Timestamps are America/Edmonton. |
| calculate_asset_energy_revenueA | Joins hourly metered energy (MWh) by selected asset to hourly AESO Pool Price (CAD/MWh) over [start, end). Returns gross Pool Price energy revenue, realized capture price, arithmetic average matched market price, capture rate, matched hours, and explicit missing intervals. This is not total settlement revenue. |
| compare_csd_to_meteredA | Compares hourly operational Historical CSD generation (MW converted to interval MWh) against hourly settlement-metered energy (MWh) by asset. Returns matched-hour differences, percentage errors, and missing-source counts. CSD operational output and metered settlement energy are distinct source concepts. |
| analyze_rampsA | Calculates cadence-aware up/down ramps for AIL, net load, wind, solar, or selected asset CSD generation. Supports hourly and five-minute cadence where the source supports it, skips non-consecutive observations, reports MW per interval and MW/hour, and never fills missing values. |
| analyze_supply_surplus_eventsA | Aligns official AESO supply-surplus status runs with observed Pool Price, AIL, and wind/solar generation. Durations are reported only when the official sequence provides an explicit end boundary. Results are descriptive associations, not causation. |
| get_energy_merit_orderA | Returns one historical AESO Energy Merit Order report date as paginated offer blocks. Reports are released with a 60-day delay. Prices are CAD/MWh and volumes are MW; timestamps use America/Edmonton. |
| get_unit_commitmentsA | Returns AESO generating-unit commitment directives for an inclusive date range, paginated and bounded to 31 days. Includes issue, begin, operation-start, and operation-end timestamps in America/Edmonton. |
| get_generation_capacityA | Returns hourly AIES maximum and available generation capability plus operating and mothball outages by fuel class. The inclusive date range is bounded to 31 days; values are MW and output is paginated. |
| get_load_outage_forecastA | Returns AESO hourly load-outage forecast observations in MW for an inclusive, maximum 31-day range. Timestamps use America/Edmonton and output is paginated. |
| get_intertie_capabilityA | Returns hourly import/export ATC, TTC, reliability margins, and gross offers for AESO interties and flowgates. Supports hour-ending bounds and optional versioned reports; date ranges are limited to 100 days and output is paginated. |
| get_intertie_outagesA | Returns outages affecting AESO interties or flowgates for an inclusive date range. Includes affected paths and event boundaries in America/Edmonton; output is paginated. |
| get_metered_volumesA | Returns hourly AESO metered energy in MWh by asset. Filter by up to 20 asset IDs or 20 pool-participant IDs (not both); unfiltered requests are limited to 16 days and all output is paginated. |
| get_operating_reserve_offer_controlA | Returns one historical AESO Operating Reserve Offer Control report date as paginated blocks. Reports are released with a 60-day delay; prices are CAD/MWh, volumes are MW, and timestamps use America/Edmonton. |
| summarize_market_historyA | Returns compact hourly, daily, weekly, or monthly Pool Price statistics and optional Alberta Internal Load statistics for [start, end). Use this before requesting raw series for long periods; summaries are capped at 400 buckets. |
| assess_supply_tightnessA | Combines the current market snapshot with hourly available generation capability and outages. Returns transparent supply-margin arithmetic plus a deterministic tight/watch/comfortable screening signal; it is not an AESO declaration or a causal price explanation. |
| get_historical_generationA | Returns official AESO CSD individual-asset generation over [start, end), at hourly or five-minute resolution. Supports bounded asset/fuel filters and pagination. This operational CSD archive is not settlement-metered data. |
| sync_historical_storeA | Incrementally ingests selected AESO generation, pool-price, and load datasets into the configured local DuckDB index and partitioned Parquet snapshots. Reports gaps and duplicate source observations and refreshes preliminary intervals. Requires the optional analytics dependencies. |
| get_historical_store_statusA | Reports local DuckDB/Parquet coverage, detected cadence gaps, source-file and partition counts, schema version, and whether optional storage dependencies are installed. |
| get_forecastA | Returns typed official AESO actual and forecast observations over [start, end) for AIL, Pool Price, wind, solar, or combined wind/solar where the requested source horizon exists. |
| get_uc_settlement_summaryA | Returns the public AESO hourly Unit Commitment settlement amount in CAD and charged volume in MW for an inclusive market-date range. |
| get_price_statisticsA | Calculates count, mean, median, range, population standard deviation, negative/high price hours, and requested percentiles from complete hourly Pool Price observations. |
| get_price_duration_curveA | Returns an evenly sampled Pool Price duration curve sorted from highest to lowest with exceedance percentages over [start, end). |
| analyze_market_eventA | Compares structured price, demand/forecast, supply, merit-order, intertie, commitment, and operating-reserve evidence in a focus window against a supplied or immediately preceding baseline. Returns descriptive associations, not causal claims. |
| calculate_capture_pricesA | Joins hourly Pool Price to official CSD generation and calculates generation-weighted capture price and capture rate by requested asset and/or fuel group. |
| analyze_net_loadA | Calculates hourly Alberta Internal Load minus selected CSD renewable generation (wind and solar by default), including average, peak, and minimum net load. |
| analyze_supply_stackB | Analyzes one historical Energy Merit Order hour: price-sorted offer blocks, offered and dispatched MW, and the highest dispatched offer price. |
| analyze_intertie_utilizationA | Summarizes gross offers relative to available intertie transfer capability by path and direction. This is an offer-to-capability proxy, not metered flow. |
| analyze_generation_mixA | Aggregates official hourly individual-asset CSD generation into energy, share, average MW, and peak MW by fuel type. |
| analyze_asset_dispatchB | Summarizes official hourly CSD dispatch for selected assets: energy, average/peak generation, available capacity factor, and hourly ramp extremes. |
| analyze_outage_impactB | Joins hourly generator outage capacity to Pool Price and reports high-outage versus other-hour price differences plus Pearson correlation as non-causal associations. |
| analyze_forecast_errorA | Calculates forecast-minus-actual bias, MAE, RMSE, denominator-aware MAPE, error percentiles, and breakdowns by market hour and lead time for AIL, Pool Price, wind, solar, or combined wind/solar when the official source provides paired values. |
| get_supply_adequacyA | Returns the official AESO hourly Supply Adequacy and Market Supply Cushion status bands. These published categorical metrics are distinct from the derived assess_supply_tightness screening label. |
| get_supply_surplusA | Returns official AESO hourly Supply Surplus status observations. Zero-price states are forecasts/statuses; they are not inferred from observed Pool Price. |
| get_ffr_net_scheduleA | Returns the bounded official FFR Net Schedule archive. AESO defines scheduled imports as negative and exports as positive; this is not FFR offered or dispatched. |
| get_dispatch_down_serviceA | Returns bounded official AESO Dispatch Down Service availability publications. DDS is distinct from energy-market dispatch and metered generation. |
| get_tmr_reference_priceA | Returns the official AESO Transmission Must-Run reference price by effective date; the published value is returned without independent recomputation. |
| get_system_eventsA | Returns bounded official AIES Event Log messages with a deterministic descriptive classification. Raw published comments remain authoritative and no event end is inferred. |
| get_operating_reserve_pricesA | Returns daily active and standby operating-reserve price components and volumes by regulating, spinning, or supplemental product and time block. Active price, standby premium, activation strike, and clearing blended price remain distinct. |
| get_operating_reserve_forecastA | Returns the current public seven-day hourly forecast of active and standby regulating, spinning, and supplemental operating-reserve volumes in MW. |
| get_operating_reserve_activationsA | Returns hourly standby operating-reserve activation volume and volume-weighted activation price for an inclusive market-date range. |
| summarize_operating_reserve_marketB | Summarizes active prices or standby clearing blended prices and volumes by reserve product; optionally joins standby activations using volume-weighted activation price. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
| daily_market_brief | Prepare a concise, evidence-based Alberta electricity market brief for a market date, using current and historical AESO tools as appropriate. |
| investigate_price_event | Investigate sustained high Alberta Pool Price events with load and market-condition context, while keeping the result observational rather than causal. |
| compare_market_days | Compare two Alberta market days using bounded Pool Price and load statistics, with optional supply and grid context. |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
| glossary | AESO market terminology used by this server. |
| datasets | Catalog of datasets exposed by AESO MCP. |
| pool_price_methodology | Interpretation notes for Pool Price data. |
| smp_methodology | Interpretation notes for System Marginal Price data. |
| methodology | |
| methodology | |
| methodology | |
| methodology | |
| methodology | |
| methodology | |
| methodology | |
| methodology | |
| methodology | |
| methodology | |
| methodology | |
| methodology | |
| methodology | |
| methodology | |
| methodology | |
| methodology | |
| methodology | |
| methodology | |
| methodology | |
| methodology | |
| methodology | |
| methodology | |
| methodology | |
| methodology | |
| capabilities |
TDQS
Scored across 57 tools
The descriptions are unusually careful about distinguishing related reports, but the 57-tool surface contains dense clusters with overlapping semantics: get_generation/historical_generation/capacity, get_outages/generation_capacity/outage_impact, and supply_adequacy/supply_surplus/assess_supply_tightness/analyze_supply_surplus_eents. An agent could easily select the wrong tool despite the disclaimers, especially among the many analyze_* and summarize_* helpers.
Every tool follows snake_case verb_noun (or verb_adjective_noun) naming: get_, analyze_, calculate_, compare_, summarize_, assess_, explain_, find_, sync_. Acronyms like uc, ffr, and tmr are used consistently within the same pattern. No camelCase or mixed verb styles appear.
57 tools is far beyond the 25+ threshold and will cause selection overhead even if the AESO domain is broad. Many tools could be consolidated behind parameters, such as one outages tool with a type flag, one operating-reserve tool with a report type, or one supply-status tool with an official/derived flag. The set feels like a full REST report catalog rather than a curated MCP surface.
The set covers the core AESO market surface very thoroughly: prices, load, generation, outages, interties, operating reserves, forecasts, settlements, and analytics. Obvious minor gaps exist, such as historical interchange flows and some single-date report lookups, but agents can usually work around these with existing tools.