aeso-mcp
This server provides agent-native, typed access to Alberta's electricity market data and analytics using official AESO data.
Market snapshot: current price, load, generation mix, interchange, and reserves.
Historical prices: hourly pool prices and minute-level system marginal prices (CAD/MWh).
Load: Alberta Internal Load (MW) with optional forecast.
Generation: real-time fuel mix and historical wind/solar output.
Interchange: current path flows and net interchange (MW).
Operating reserves: contingency reserve and related indicators.
Generator outages: hourly outage capacity by fuel/technology.
Asset registry: searchable AESO market assets.
Analytics: compare market periods, detect sustained high-price events, explain conditions with structured evidence, and evaluate load forecast accuracy with error metrics.
Resources: glossary, dataset catalog, and methodology notes for key prices.
All tools are read‑only, use Mountain time timestamps, return provenance metadata, and require an AESO APIM API key.
Fetches official individual-asset Historical CSD Generation Data from AESO's Box-hosted archive, providing hourly and five-minute generation records.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@aeso-mcpWhat is Alberta's current grid situation?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
aeso-mcp
Agent-native, strongly typed access and analytics for Alberta's electricity market using official AESO data.
Independent open-source project. Not affiliated with or endorsed by the Alberta Electric System Operator (AESO).
What it is
aeso-mcp is a Model Context Protocol (MCP) server that exposes Alberta electricity-market observations and deterministic analytics to AI clients. It is designed for energy analysts, researchers, developers, journalists, market participants, and AI agents that need reliable, structured AESO data—not a thin REST decorator layer.
Related MCP server: EnergyAtIt MCP Server
Features
Typed MCP tools with Pydantic inputs/outputs and structured results
Current market snapshot combining price, load, generation, interchange, and reserves
Paginated historical Pool Price, System Marginal Price, load, and generation retrieval
Official individual-asset Historical CSD Generation Data at hourly and five-minute resolution
Optional incremental DuckDB index and partitioned Parquet snapshots for repeatable research
Official AIL, Pool Price, wind, solar, and combined wind/solar forecast publications through one typed
get_forecastcontract, with persisted publication vintages and point-in-timeas_ofselection that excludes unknown publication chronologyOfficial supply-adequacy, supply-surplus, FFR Net Schedule, Dispatch Down Service, TMR reference-price, and AIES system-event reports
Official historical adequacy/cushion web codes, transmission outages, planning-area hourly load/generation, constrained volume, EEA events, operating-reserve directives, and the current Pool Participant registry through one typed research-archive contract
Authenticated APIM reports for merit order, commitments, capability/outages, interties, metered volumes, and operating-reserve offer control
Deterministic analytics: compact history summaries, period comparison, event detection, condition evidence, price distributions, capture price, net load, supply stack, generation, outage association, generalized forecast accuracy, asset gross energy revenue, CSD-versus- metered comparisons, ramps, supply-surplus associations, and transparent supply-tightness indicators, plus participant concentration, regional, constrained-volume, scarcity, and compact system-frequency analysis
Deterministic research manifests identify exact input publications, parameters, methodology, completeness, and degradation warnings for multi-source market-event analysis
Public operating-reserve active/standby prices, seven-day forecasts, activations, and summaries
One complete server package and startup path:
AESO_API_KEYis always required; there is no reduced credential-free server modeQuery bounds, cache provenance, completeness metadata, upstream
Retry-Afterhandling, and secret-safe machine-readable errorsHardened HTTP transport with Host/Origin validation, bearer authentication required for non-loopback binds by default, rate/concurrency limits, request-size bounds, probes, and correlation IDs
Reusable MCP prompts plus glossary, capability, dataset, and methodology resources
Implemented datasets
Dataset | Tool | Notes |
Market snapshot |
| Current cohesive view |
Pool Price |
| Hourly CAD/MWh |
System Marginal Price |
| Minute-level CAD/MWh |
Alberta Internal Load |
| MW; optional forecast |
Generation / fuel mix |
| Current all fuels; historical wind/solar |
Interchange |
| Current path flows MW |
Operating reserves |
| Current MW indicators |
Generator outages |
| Hourly outage capacity by fuel/technology |
AIES capacity/outages |
| Hourly MC, AC, operating, and mothball outage MW |
Load outage forecast |
| Hourly forecast MW |
Energy Merit Order |
| Historical blocks; 60-day publication delay |
Unit commitments |
| Generating-unit commitment directives |
Intertie capability |
| Import/export ATC, TTC, margins, gross offers |
Intertie capability outages |
| Outages affecting interties/flowgates |
Metered volumes |
| Hourly MWh by asset; optional ID filters |
OR offer control |
| Historical reserve offer blocks; 60-day delay |
Approved Tx outages |
| AESO-approved planned transmission outages |
Long-range Tx outages |
| Tentative ~24-month significant outages |
MCSINR |
| Cumulative net revenue vs offer-cap trigger |
Secondary offer limit |
| Whether secondary offer cap is in effect |
Assets |
| Registry with filters |
Historical CSD generation |
| Individual assets; hourly / five-minute operational MW |
Official forecasts |
| AIL / Pool Price / wind / solar; source-specific horizons and cadence |
Official research archive |
| Historical adequacy/cushion, transmission, planning-area, constraint, EEA, OR-directive, and current participant records |
Supply adequacy / cushion |
| Official hourly categorical status bands |
Supply surplus |
| Official hourly zero-price forecast status |
FFR Net Schedule |
| Hourly scheduled imports (negative) / exports (positive) MW |
Dispatch Down Service |
| Published DDS availability MW |
TMR reference price |
| Published CAD/MWh value by effective date |
AIES system events |
| Bounded event-log comments; no inferred event end |
UC settlement summary |
| Hourly CAD amount and charged MW |
OR prices |
| Active and standby price components and volumes |
OR forecast |
| Current seven-day hourly MW forecast |
OR activations |
| Hourly standby volume and activation price |
Analytics: summarize_market_history, assess_supply_tightness, compare_market_periods,
find_price_events, explain_market_conditions, compare_forecast_to_actual,
get_price_statistics, get_price_duration_curve, analyze_market_event,
calculate_capture_prices, analyze_net_load, analyze_supply_stack,
analyze_intertie_utilization, analyze_generation_mix, analyze_asset_dispatch,
analyze_outage_impact, analyze_forecast_error, calculate_asset_energy_revenue,
compare_csd_to_metered, analyze_ramps, analyze_supply_surplus_events,
summarize_operating_reserve_market, analyze_participant_concentration,
analyze_regional_load_generation, analyze_constrained_volume, analyze_scarcity, and
analyze_system_frequency.
Architecture
The documentation site includes a full architecture and MCP Inspector walkthrough.
MCP clients
|
v
FastMCP adapter (aeso_mcp/mcp)
|
v
Domain services (market, grid, history, forecasts, reports, research, reserves, operations)
|
+---------------+----------------+----------------+----------------+
| | | |
v v v v
GridStatus Direct APIM Public reports CSD archive
| | (ets.aeso.ca) (Box)
+-------+-------+
|
v
AESO APIM gatewayDomain code does not depend on FastMCP. Framework changes should stay in aeso_mcp/mcp/.
All upstream clients are implementation details of this single server: the APIM key is sent only
to apimgw.aeso.ca and is never sent to the allow-listed ETS or Box hosts.
Requirements
Python 3.13+
AESO APIM API key from developer-apim.aeso.ca
uvrecommended
Installation
See LIMITATIONS.md for an honest gap inventory.
From PyPI (recommended)
export AESO_API_KEY=your-key
uvx aeso-mcpFor incremental DuckDB/Parquet historical storage:
uvx --from 'aeso-mcp[analytics]' aeso-mcpFrom GitHub
To run the current repository version directly:
export AESO_API_KEY=your-key
uvx --from git+https://github.com/bchoi-qwe/aeso-mcp.git aeso-mcpDevelopment
git clone https://github.com/bchoi-qwe/aeso-mcp.git
cd aeso-mcp
uv sync --group dev
cp .env.example .env # set AESO_API_KEY
uv run aeso-mcpDocker
docker build -t aeso-mcp .
docker run --rm \
-e AESO_API_KEY=your-key \
-e AESO_MCP_HTTP_BEARER_TOKEN=replace-with-a-long-random-token \
-p 8000:8000 \
aeso-mcpSend the same token in the MCP client's Authorization: Bearer ... header. The image binds to
0.0.0.0, so it intentionally requires bearer authentication by default.
Obtaining an AESO API key
Register at the AESO developer portal
Subscribe to the AESO public API product
Copy the primary/secondary subscription key
Set
AESO_API_KEYin your environment (never commit it)
Missing credentials produce an actionable startup error. The key is never returned through MCP tools or logged.
Example MCP client configuration
See the documentation site's MCP client configurations for maintained Codex, ChatGPT desktop app, Claude Desktop, Claude Code, and Cursor setup instructions.
Cursor / Claude Desktop style (stdio)
{
"mcpServers": {
"aeso": {
"command": "uvx",
"args": ["aeso-mcp"],
"env": {
"AESO_API_KEY": "your-key"
}
}
}
}HTTP transport
uv run aeso-mcp --transport http --host 127.0.0.1 --port 8000HTTP always validates Host and Origin. A non-loopback bind now refuses to start unless
AESO_MCP_HTTP_BEARER_TOKEN is configured. An explicit
AESO_MCP_HTTP_ALLOW_INSECURE_REMOTE=true override exists for isolated environments that accept
the risk; it is never the default. Also set AESO_MCP_HTTP_ALLOWED_HOSTS and
AESO_MCP_HTTP_ALLOWED_ORIGINS for the deployment. /healthz and /readyz contain no market data
or secrets. See .env.example for all bounded runtime settings.
Example prompts
What is Alberta's current grid situation?
What is the current pool price?
Show Alberta pool prices over the last 24 hours.
Compare today's pool prices with yesterday's.
Which hours had the highest prices this week?
How much wind and solar are producing right now?
What happened during the largest price spike this week?
How inaccurate was the seven-day wind forecast during that event?
Was AESO publishing a supply-surplus or tight supply-cushion status at the time?
What gross Pool Price energy revenue did this asset's metered MWh earn?
Explain the evidence associated with today's price increase.
Tools
Tool | Purpose |
| Current market overview |
| Hourly Pool Price history |
| Minute-level SMP history |
| Alberta Internal Load |
| Fuel mix / renewable history |
| Intertie flows |
| Operating reserve indicators |
| Hourly generator outage capacity by fuel |
| AIES capability and outage grouping by fuel |
| Hourly load-outage forecast |
| Historical energy merit-order blocks |
| Generating-unit commitment directives |
| Intertie/flowgate ATC, TTC, and margins |
| Outages affecting intertie capability |
| Metered energy by asset |
| Historical reserve offer-control blocks |
| Approved planned transmission outages |
| Tentative long-range transmission outages |
| Asset registry |
| Current MCSINR publication |
| Current secondary offer-cap status |
| Aggregate period comparison |
| High-price event detection |
| Structured evidence (not causal prose) |
| AIL forecast vs actual accuracy |
| Compact hourly/daily/weekly/monthly price and load summaries |
| Transparent reserve-adjusted supply-margin screening |
| Official individual-asset CSD archive history |
| Incremental local DuckDB/Parquet ingestion |
| Local coverage, manifests, and partition status |
| Official AIL, Pool Price, wind, solar, and combined wind/solar forecasts |
| Bounded page from one verified official historical/spatial/reliability archive |
| Official supply-adequacy and market-supply-cushion status bands |
| Official hourly supply-surplus forecast status |
| Historical scheduled FFR intertie transfer |
| Dispatch Down Service availability report |
| Published TMR reference price |
| Bounded AIES Event Log messages |
| Public hourly UC amount and charged volume |
| Price distribution and volatility statistics |
| Pool Price exceedance curve |
| Focus versus baseline multi-series associations |
| Generation-weighted price and capture rate |
| AIL minus selected renewable generation |
| Historical offer-stack analysis |
| Gross-offer to capability proxy |
| CSD energy and share by fuel |
| Asset output, capacity factor, and ramps |
| Hourly outage-price association |
| General forecast error, percentiles, market-hour and lead-time profiles |
| Metered MWh × Pool Price gross energy revenue |
| Operational CSD output versus metered MWh |
| Cadence-aware AIL, net-load, renewable, or asset ramps |
| Price/load/renewable associations during explicit surplus states |
| Active/standby price components and volumes |
| Seven-day reserve-volume forecast |
| Hourly standby activations |
| Product price/volume/activation summary |
| Offered-volume shares and HHI using current participant mapping |
| Planning-area and regional load/generation aggregates |
| Planning-area/fuel constrained MWh and optional price association |
| Historical adequacy/cushion web codes, EEA, and price context |
| Compact six-hour 10-second frequency statistics; no raw row output |
Market and research tools are read-only. sync_historical_store writes only to the configured
local historical-store root; it does not mutate AESO or another external system.
Resources
URI | Content |
| Market terminology |
| Dataset catalog |
| Pool Price interpretation |
| SMP interpretation |
| Complete tool, prompt, and resource surface |
| Dataset-specific interpretation and caveats |
Prompts: daily_market_brief, investigate_price_event, and compare_market_days.
Data semantics
Timezone:
America/Edmonton(AESO market time). DST days may have 23 or 25 local hours.Intervals: Explicit
interval_start/interval_end(half-open ranges in requests).Units: Pool Price / SMP → CAD/MWh; load / generation / interchange / reserves → MW.
Status: Metadata includes
actual/forecast/ etc. Forecasts are never implied to be settled actuals.Finality: Operational feeds may be preliminary; do not assume final settlement.
Point-in-time forecasts:
as_ofselects only vintages with known issue/publication times at or before the boundary. Unknown chronology is excluded; target intervals absent from persisted history remain unobserved rather than being backfilled from a later publication.Completeness: Metadata reports available/missing series and expected/missing observations where the source cadence is known. Optional enrichment failures are surfaced as partial or degraded results with warnings.
Pagination: Raw price, SMP, load, generation, and operational reports return
pagemetadata withnext_offset. Usesummarize_market_historybefore retrieving long raw series.Cache timing:
retrieved_atidentifies the upstream fetch;served_at,cache_hit, andcache_ageidentify when and how the response was served.Research identity:
analyze_market_event.analysis_manifestrecords exact sources, parameters, methodology version, warnings, and a deterministic SHA-256analysis_id.
Development
uv sync --group dev
uv run ruff check src tests scripts
uv run pyright src
uv run pytest tests/unit tests/contract tests/mcp tests/evals --cov=aeso_mcp
uv run python scripts/generate_catalog.py --check
uv run mkdocs build --strict
uv buildOptional live tests:
AESO_API_KEY=... uv run pytest tests/integration -m integrationMCP Inspector:
# Prefer the console entrypoint; or point Inspector at:
# uv run aeso-mcp
npx @modelcontextprotocol/inspector uv run aeso-mcpTests
tests/unit— time, bounds, analytics, configtests/contract— AESO APIM fixtures viarespxtests/mcp— tool/resource discovery and structured outputstests/integration— opt-in live AESO calls
Security
See SECURITY.md. Highlights: no arbitrary URL/shell/SQL tools, host allow-list, secret hygiene, bounded queries, stderr logging for stdio.
Development status
Version 0.3.0 includes the historical store, full CSD generation adapter, official forecast/report providers, general research analytics, operating-reserve market surface, eval suite, and documentation site. Unreleased work adds point-in-time forecast vintages, reproducibility manifests, release-policy hardening, and the verified official research-data archive.
Contributing
See CONTRIBUTING.md.
License
MIT — see LICENSE.
Disclaimer
This project is an independent open-source interface to publicly documented AESO APIs. It is not an official AESO product and is not affiliated with or endorsed by AESO. Market data may be preliminary or incomplete; verify critical decisions against official AESO publications.
Available Tools
57 toolsanalyze_asset_dispatchAnalyze Asset DispatchBRead-onlyIdempotent
Summarizes official hourly CSD dispatch for selected assets: energy, average/peak generation, available capacity factor, and hourly ramp extremes.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | Yes | |
| metadata | Yes | Provenance and semantic metadata attached to dataset responses. |
| warnings | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the read-only, idempotent, non-destructive profile, so the description does not need to restate safety. It adds some context by specifying the source ('official hourly CSD dispatch') and the aggregation focus, but it does not disclose edge-case behavior, data-availability assumptions, or how the time interval is handled beyond what the schema already notes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that front-loads the verb, resource, and scope, then lists the metrics. Every phrase contributes; there is no filler or repetition of annotation fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description plus annotations and output schema give a fairly complete picture for a straightforward summarization tool. However, the lack of asset-ID provenance or any usage routing leaves an agent to infer how to populate the request correctly, especially given the large sibling set.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% at the top level, and the description does not compensate: it only says 'selected assets', which maps loosely to asset_ids, and 'hourly' implies a time window, but it does not explain the request object, the format or source of asset IDs, or the interval semantics. The nested start/end descriptions do some work, but the top-level request parameter is undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb, 'Summarizes', ties it to a concrete resource ('official hourly CSD dispatch'), and enumerates the derived metrics (energy, generation, capacity factor, ramp extremes). This distinguishes it from raw-data siblings like get_generation and get_metered_volumes by signaling an aggregated analysis over dispatch data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given about when to choose this tool over siblings such as analyze_ramps, get_generation, or compare_csd_to_metered. The description implies a use case but never states exclusions, prerequisites, or context where an alternative would be better.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyze_forecast_errorAnalyze Forecast ErrorARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes | Generic forecast-error request for supported actual/forecast pairs. |
Output Schema
| Name | Required | Description |
|---|---|---|
| series | Yes | |
| metadata | Yes | Provenance and semantic metadata attached to dataset responses. |
| warnings | No | |
| intervals | No | |
| mean_error | No | |
| by_lead_time | No | |
| by_market_hour | No | |
| error_percentiles | No | |
| observation_count | Yes | |
| mean_absolute_error | No | |
| missing_actual_count | No | |
| missing_forecast_count | No | |
| root_mean_squared_error | No | |
| mean_absolute_percentage_error | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and non-destructive behavior, so the safety profile is fully covered. The description adds meaningful behavioral nuance: it computes denominator-aware MAPE (not plain MAPE) and only operates 'when the official source provides paired values', which is an operational constraint not present in annotations. There is no contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, information-dense sentence that front-loads the action ('Calculates') and enumerates all key metrics before the conditional caveat. Every clause earns its place with no wasted wording, and the structure is easy to parse despite the long list.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a full input schema, complete parameter descriptions, annotations, and an output schema present, the description is largely sufficient to understand the tool's scope and output. The only real gap is the unstated behavior when paired values are not available—the description flags the condition but does not explain what the tool would do in that case.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents start/end timezone handling, series enum values, and the percentiles array. The description adds a natural-language mapping of the series names to supported forecast types, but does not provide deeper parameter semantics than the schema already supplies. The baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names the exact metrics calculated (forecast-minus-actual bias, MAE, RMSE, denominator-aware MAPE, error percentiles) and the scope of supported resources (AIL, Pool Price, wind, solar, wind_solar), with a conditional qualifier. This is a specific verb+resource definition and clearly differentiates it from generic forecast/comparison tools by enumerating the analytical output.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear context: use it for supported forecast/actual pairs and when the official source provides paired values, listing the series types it can handle. However, it does not name alternatives such as compare_forecast_to_actual or get_forecast, nor does it state when not to use this tool, leaving routing decisions to the agent's inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyze_generation_mixAnalyze Generation MixARead-onlyIdempotent
Aggregates official hourly individual-asset CSD generation into energy, share, average MW, and peak MW by fuel type.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | Yes | |
| metadata | Yes | Provenance and semantic metadata attached to dataset responses. |
| warnings | No | |
| total_generation_mwh | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is well covered. The description adds modest context (aggregation of CSD data into time-window metrics) but does not disclose edge behavior such as how 'peak MW' is computed over the interval or how hourly records are aggregated. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One 19-word sentence with the verb and resource front-loaded and every word carrying information. No filler, no redundancy, and the output metrics are enumerated compactly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and annotations covering the safety profile, the core call contract is largely complete. The notable gaps are the undocumented fuel_types value domain/default behavior and the lack of sibling differentiation, both of which matter given the crowded tool family.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The nested start/end parameters are thoroughly documented in the schema (inclusive/exclusive, timezone behavior), but the top-level request object and fuel_types have no schema descriptions. The description's 'by fuel type' clarifies that fuel_types is the grouping/filtering dimension, yet valid fuel type values and the default when fuel_types is omitted remain undocumented in both schema and description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('aggregates'), a precise resource ('official hourly individual-asset CSD generation'), and the exact derived output metrics (energy, share, average MW, peak MW by fuel type). This distinguishes it from siblings like get_generation (raw data) and analyze_supply_stack without opening their schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to choose this tool over alternatives. With over 50 siblings including get_generation, get_historical_generation, and analyze_supply_stack, the agent must infer selection solely from the name and output metrics; there are no explicit selection conditions, exclusions, or alternative references.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyze_intertie_utilizationAnalyze Intertie UtilizationARead-onlyIdempotent
Summarizes gross offers relative to available intertie transfer capability by path and direction. This is an offer-to-capability proxy, not metered flow.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | Yes | |
| metadata | Yes | Provenance and semantic metadata attached to dataset responses. |
| warnings | No | |
| methodology | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and non-destructive. The description adds useful behavioral nuance by clarifying that the output is a proxy (gross offers vs capability) and not metered flow, which helps set expectations about what the metric means. No annotation contradiction exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core purpose, followed by an important caveat. There is no redundancy or filler; every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With output schema present and annotations covering read-only safety, the description need not explain return values or idempotency. It communicates the analytical intent and distinguishes the tool from metered-flow alternatives. However, the optional interties parameter's semantics are not explicitly tied to 'path and direction', leaving a minor gap in fully instructing invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description does not explain start_date, end_date, or the optional interties parameter. Although the schema provides types and requiredness, the description leaves the meaning of interties and the behavior when omitted implicit, forcing the agent to infer domain knowledge rather than providing clear parameter guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Summarizes') and a precise resource ('gross offers relative to available intertie transfer capability by path and direction'). It also clearly distinguishes itself from metered-flow tools by stating it is an offer-to-capability proxy, not metered flow, which separates it from sibling tools like get_metered_volumes and get_interchange.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool: when the user wants an offer-to-capability proxy rather than actual metered flow. However, it does not explicitly name alternatives or state when not to use it, so an agent must infer the usage boundary from the phrase 'not metered flow' rather than receive explicit routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyze_market_eventAnalyze Market EventARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| metrics | Yes | |
| evidence | Yes | |
| metadata | Yes | Provenance and semantic metadata attached to dataset responses. |
| warnings | No | |
| focus_end | Yes | |
| focus_start | Yes | |
| methodology | Yes | |
| baseline_end | Yes | |
| baseline_start | Yes | |
| ranked_associations | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, non-destructive behavior. The description adds value by disclosing that output is descriptive rather than causal and that the baseline may be supplied or automatically taken from the immediately preceding period. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences with no filler: the first front-loads the comparison behavior and evidence scope, the second states the output limitation. Every phrase earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex analytical tool, the description captures the input window, baseline handling, evidence dimensions, and output nature; an output schema exists so return structure need not be repeated. It could be more explicit about how baseline parameters relate to the focus window, but the core call semantics are adequately conveyed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning, but it only glosses a 'focus window' and 'baseline' without explaining baseline_start/end semantics or how the preceding baseline is selected. The schema gives timezone notes for start/end, but baseline fields remain underdocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('compares') with a clearly enumerated evidence scope (price, demand/forecast, supply, merit-order, intertie, commitment, operating reserve) and states the output type ('descriptive associations, not causal claims'). This distinguishes it from single-source getters and from causal explanation tools in the sibling list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool (multi-domain comparison in a focus window) and cautions against causal interpretation, but it does not explicitly compare against close siblings like compare_market_periods or explain_market_conditions. It provides clear context without explicit alternatives or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyze_net_loadAnalyze Net LoadARead-onlyIdempotent
Calculates hourly Alberta Internal Load minus selected CSD renewable generation (wind and solar by default), including average, peak, and minimum net load.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| metadata | Yes | Provenance and semantic metadata attached to dataset responses. |
| warnings | No | |
| intervals | Yes | |
| peak_net_load_mw | No | |
| average_net_load_mw | No | |
| minimum_net_load_mw | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint, idempotentHint, and destructiveHint false. The description adds useful behavioral context beyond those annotations: the calculation is hourly, defaults to wind and solar, allows selecting renewable fuels, and produces average, peak, and minimum net load values. This helps the agent understand the tool's output shape and configurable behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence packs the action, resource, formula, defaults, and output statistics without redundancy. The most important information is front-loaded, and every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema provided and read-only annotations covering safety, the description supplies the core calculation logic, defaults, and output metrics. The main minor gap is that 'CSD' is not explained, but this is a domain acronym rather than a missing behavioral requirement. Overall, an agent has enough to understand what the tool computes and how to invoke it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema documents start and end semantics, but renewable_fuels has no description. The description partially compensates by indicating that renewable generation is selectable and defaults to wind and solar, but it does not specify accepted fuel values, string formats, or how the request object maps to the calculation. Parameter semantics are therefore adequate but incomplete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Calculates') and clearly identifies the resource and formula: hourly Alberta Internal Load minus selected CSD renewable generation, with wind and solar as defaults. It also lists the computed statistics (average, peak, minimum), which distinguishes it from generic load or generation retrieval tools among the siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this tool is for net-load analysis after subtracting renewable generation, but it gives no explicit when-to-use guidance, no conditions, and no mention of alternatives. An agent can infer the purpose but is not told when to choose this over get_load, get_generation, or other analysis tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyze_outage_impactAnalyze Outage ImpactBRead-onlyIdempotent
Joins hourly generator outage capacity to Pool Price and reports high-outage versus other-hour price differences plus Pearson correlation as non-causal associations.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| metadata | Yes | Provenance and semantic metadata attached to dataset responses. |
| warnings | No | |
| methodology | Yes | |
| threshold_mw | No | |
| matched_observations | Yes | |
| high_outage_observations | Yes | |
| outage_price_correlation | No | |
| price_difference_cad_per_mwh | No | |
| average_price_high_outage_cad_per_mwh | No | |
| average_price_other_hours_cad_per_mwh | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint=true, idempotentHint=true, destructiveHint=false). The description adds a valuable interpretation caveat by labeling the Pearson correlation as non-causal, but it adds no context on data completeness, missing-hour handling, or the meaning of the default threshold behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One dense sentence that front-loads the core operation (the join), then the outputs, then the caveat. Every clause earns its place, though splitting the causality caveat into its own sentence would improve scannability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The analytical intent, output schema, and safety annotations cover the tool's core well. However, high_outage_threshold_mw semantics and default-null behavior are undocumented in both schema and description, leaving an agent to guess what counts as a high-outage hour. For an analysis tool of moderate complexity this is adequate but with clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description names no parameters. The schema documents start/end timezone handling but leaves high_outage_threshold_mw with no description; the phrase 'high-outage' is only a weak hint, and the nested request wrapper is never mentioned. The description fails to compensate for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses specific verbs and resources: it 'joins hourly generator outage capacity to Pool Price' and 'reports high-outage versus other-hour price differences plus Pearson correlation.' This makes the analytic purpose clear and distinguishes it from siblings like get_outages or get_pool_prices, though it never names a sibling explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The 'as non-causal associations' qualifier is an implied usage constraint, telling the agent how to frame results, but there is no explicit when-to-use guidance, no exclusions, and no routing to alternatives like get_outages for raw outage lists or analyze_market_event for broader event analysis.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyze_rampsAnalyze RampsARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes | Request cadence-aware ramp statistics for one supported market series. |
Output Schema
| Name | Required | Description |
|---|---|---|
| series | Yes | |
| cadence | Yes | |
| metadata | Yes | Provenance and semantic metadata attached to dataset responses. |
| warnings | No | |
| largest_ramps | No | |
| cadence_minutes | Yes | |
| observation_count | Yes | |
| maximum_up_ramp_mw | No | |
| ramp_percentiles_mw | No | |
| maximum_down_ramp_mw | No | |
| ramp_observation_count | Yes | |
| maximum_up_ramp_mw_per_hour | No | |
| maximum_down_ramp_mw_per_hour | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly and idempotent annotations, the description discloses meaningful behaviors: it supports hourly and five-minute cadence where available, skips non-consecutive observations, reports MW per interval and MW/hour, and never fills missing values. This gives an agent a clear model of how the tool processes data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two dense sentences with no filler. The primary action is front-loaded, and each clause adds a distinct behavioral fact without repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich input schema, annotations, and the presence of an output schema, the description covers the essential behavioral gaps: cadence handling, missing-value policy, non-consecutive observation handling, and output units. Nothing critical for invoking the tool correctly appears to be missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3 even though the description does not add much per-parameter detail. The high-level mention of series types and cadence aligns with the schema but does not deepen understanding beyond what the parameter descriptions already provide.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific analysis ('Calculates cadence-aware up/down ramps') and enumerates the applicable resources: AIL, net load, wind, solar, or asset CSD generation. This clearly distinguishes it from sibling analysis tools like analyze_net_load or analyze_generation_mix.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage through its capability statement, but it does not explicitly say when to choose this tool over alternatives or when not to use it. It provides some context about cadence support and data handling, but no exclusionary guidance relative to sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyze_supply_stackAnalyze Supply StackBRead-onlyIdempotent
Analyzes one historical Energy Merit Order hour: price-sorted offer blocks, offered and dispatched MW, and the highest dispatched offer price.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| blocks | Yes | |
| metadata | Yes | Provenance and semantic metadata attached to dataset responses. |
| warnings | No | |
| offered_mw | Yes | |
| hour_ending | Yes | |
| report_date | Yes | |
| dispatched_mw | Yes | |
| marginal_offer_cad_per_mwh | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint=false, so the safety profile is covered. The description adds scope context (one historical hour and its key outputs) but no further behavioral traits such as data availability, error behavior, or edge cases. This is acceptable but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one concise sentence with no filler. It front-loads the core action and resource, then lists key outputs efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description, annotations, and output schema together provide a minimally viable picture for a read-only analysis tool. It clearly states what the tool does, but omits usage guidance and parameter-level detail, leaving some context for the agent to infer.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description never names report_date, hour_ending, or limit. It only weakly implies a historical hour input, so it does not compensate for the schema gap enough to help an agent map the textual description to the required parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Analyzes') and identifies a clear resource: one historical Energy Merit Order hour, and it lists distinctive outputs such as price-sorted offer blocks and highest dispatched offer price. It does not explicitly contrast itself with sibling tools like get_energy_merit_order, so it lacks full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance about when to use this tool instead of nearby alternatives such as get_energy_merit_order or analyze_supply_surplus_events. It implies a focus on a single historical hour, but no exclusions or alternative conditions are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyze_supply_surplus_eventsAnalyze Supply Surplus EventsARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes | Bounded descriptive analysis of officially published surplus events. |
Output Schema
| Name | Required | Description |
|---|---|---|
| events | Yes | |
| metadata | Yes | Provenance and semantic metadata attached to dataset responses. |
| warnings | No | |
| event_count | Yes | |
| total_explicit_duration_hours | Yes | |
| explicitly_bounded_event_count | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the read-only and idempotent annotations, the description adds important behavioral caveats: durations are only reported when the official sequence provides an explicit end boundary, and results are descriptive associations, not causation. These are meaningful constraints for interpreting the output.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences carry the core purpose and key caveats with no filler. The primary operation is front-loaded, and each sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a complete input schema and an output schema, the description covers the central purpose and the main behavioral caveats. It does not detail how missing official sequences affect the overall result beyond duration reporting, but this is a minor gap for an analysis tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%: both start and end parameters are fully described with timezone and inclusivity/exclusivity semantics. The description adds no parameter-specific detail, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific analytical operation: aligning official AESO supply-surplus status runs with observed Pool Price, AIL, and wind/solar generation. This clearly distinguishes the tool from raw data retrieval siblings like get_supply_surplus and other market analysis tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear context: use when a bounded descriptive comparison of official surplus status against observed market and generation data is needed. It does not explicitly name alternatives or state when not to use the tool, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
assess_supply_tightnessAssess Supply TightnessARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| metadata | Yes | Provenance and semantic metadata attached to dataset responses. |
| warnings | No | |
| methodology | Yes | |
| observed_at | Yes | |
| tightness_signal | Yes | |
| mothball_outage_mw | No | |
| net_interchange_mw | No | |
| operating_outage_mw | No | |
| aeso_supply_cushion_mw | No | |
| gross_supply_margin_mw | No | |
| aeso_supply_cushion_code | No | |
| alberta_internal_load_mw | No | |
| aeso_supply_cushion_status | No | |
| reserve_adjusted_margin_mw | No | |
| aeso_supply_adequacy_status | No | |
| contingency_reserve_required_mw | No | |
| aeso_supply_adequacy_status_code | No | |
| maximum_generation_capability_mw | No | |
| available_generation_capability_mw | No | |
| reserve_adjusted_margin_pct_of_load | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already mark the tool as readOnly, idempotent, and openWorld. The description adds useful behavioral context by emphasizing the output is deterministic and transparent arithmetic, and clarifying it carries no official AESO status. This goes beyond the structured annotations and sets correct expectations for downstream use.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core computation and return type, plus a clarifying exclusion. Every sentence contributes meaning and no length is wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter tool with an output schema and safety annotations, the description adequately covers what the tool computes, what kind of signal it returns, and the caveat about non-official status. It could be more explicit about exactly when to choose it over sibling supply-analysis tools, but the core context is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With zero parameters, there is no schema burden for the description to carry, and the baseline for 0-param tools is 4. The description also names the implicit inputs (market snapshot, generation capability, outages) which helps an agent conceptualize what the tool evaluates.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states exactly what the tool does: it combines market snapshot, generation capability, and outages to compute supply-margin arithmetic and a deterministic screening signal. It also distinguishes the output from an AESO declaration or causal price explanation, so an agent can tell it apart from analytical siblings like explain_market_conditions or get_supply_adequacy.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use the tool: when a transparent, deterministic supply-tightness screening signal is needed. It explicitly states what it is not for (not an AESO declaration, not a causal price explanation), but does not name alternative tools or provide an explicit 'when to use vs get_supply_adequacy' routing statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calculate_asset_energy_revenueCalculate Asset Energy RevenueARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes | Join hourly metered energy to hourly Pool Price for selected assets. |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | Yes | |
| metadata | Yes | Provenance and semantic metadata attached to dataset responses. |
| warnings | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as read-only, open-world, idempotent, and non-destructive, so the description does not need to restate safety. It adds useful behavioral detail beyond annotations: the join methodology, the inclusive/exclusive interval behavior, and the promise of explicit missing intervals, which is important for a calculation tool that might silently drop data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: it opens with the core join, lists the key output metrics, and finishes with a concise caveat. Every sentence earns its place without restating the tool name or repeating the schema verbosely.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a computation tool with a rich input schema, an output schema, and safety annotations, the description is largely complete. It names the calculation inputs, the outputs, missing-interval handling, and the key settlement caveat. It could slightly improve by distinguishing itself from calculate_capture_prices, but that is more usage guidance than core completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with the input schema already documenting start/end date-time behavior and asset_ids selection. The description reinforces that the operation is a join by selected asset over [start, end), but it adds little parameter-level meaning not already present in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a precise operation — joining hourly metered energy by asset with hourly AESO Pool Price — and specifies the returned metrics (gross revenue, capture price, capture rate, matched hours, missing intervals). It also explicitly delimits its scope with 'This is not total settlement revenue,' which distinguishes it from settlement-related siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies a clear use case — calculating Pool Price energy revenue from matched metered and price data — and provides an explicit exclusion by stating it is not total settlement revenue. However, it does not specify when to choose this tool over nearby alternatives such as calculate_capture_prices or get_monthly_cumulative_net_revenue, so usage routing remains partially inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
calculate_capture_pricesCalculate Capture PricesARead-onlyIdempotent
Joins hourly Pool Price to official CSD generation and calculates generation-weighted capture price and capture rate by requested asset and/or fuel group.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | Yes | |
| metadata | Yes | Provenance and semantic metadata attached to dataset responses. |
| warnings | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the operation as read-only, non-destructive, and idempotent. The description adds meaningful behavioral context beyond that: it identifies the data sources (hourly Pool Price, official CSD generation), the join operation, and the generation-weighting methodology, giving the agent a clearer model of what happens when invoked.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that front-loads the core action and data source. Every phrase adds information, with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema and annotations covering safety, the description is largely adequate. It explains the data sources, the computation approach, and the available filter dimensions. Minor gaps remain around whether filters are optional and how results are grouped when both asset_ids and fuel_types are provided, but these are not critical.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does partially by explaining that filtering is by 'asset and/or fuel group,' which maps to asset_ids and fuel_types, and that the time window is required. However, it does not add details about accepted ID formats, fuel group values, or behavior when no asset/fuel filter is provided.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action: joining hourly Pool Price to CSD generation and calculating generation-weighted capture price and capture rate. This distinguishes it from sibling tools like get_pool_prices and get_generation, which retrieve raw inputs rather than perform the analytic calculation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool — when capture prices/rates by asset or fuel group are needed — but it does not explicitly state exclusions or alternative tools. There is no direct guidance on when to prefer this over related calculation tools such as calculate_asset_energy_revenue.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_csd_to_meteredCompare Csd To MeteredARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes | Compare hourly operational CSD generation with hourly metered energy. |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | Yes | |
| metadata | Yes | Provenance and semantic metadata attached to dataset responses. |
| warnings | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, openWorld, and idempotent hints. The description adds meaningful behavioral context: the MW-to-interval-MWh conversion, the matched-hour methodology, percentage errors, missing-source counts, and the explicit warning that CSD operational output and metered settlement energy are distinct source concepts.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences front-load the core comparison and output, followed by a one-sentence conceptual clarification. No filler or redundancy; every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers inputs, comparison logic, output contents, and source-concept distinction, and an output schema exists for return-value details. It is complete for a read-only comparison tool, though explicit sibling differentiation would make it fully comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with start and end timezone handling and asset_ids constraints already documented. The description contributes context like 'hourly' and 'by asset', but does not need to add much because the schema already carries the parameter meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: compares hourly operational Historical CSD generation against hourly settlement-metered energy by asset. It also specifies what is returned (matched-hour differences, percentage errors, missing-source counts), making the tool's purpose unmistakable and distinguishing it from generic compare tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is implied through the comparison of CSD operational output versus metered settlement energy, but no explicit when-to-use or when-not-to-use guidance is given. Given many sibling comparison tools like compare_forecast_to_actual and compare_market_periods, explicit alternatives would strengthen this dimension.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_forecast_to_actualCompare Forecast To ActualARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes | Compare Alberta Internal Load forecast versus actual over a range. |
Output Schema
| Name | Required | Description |
|---|---|---|
| rmse_mw | No | |
| metadata | Yes | Provenance and semantic metadata attached to dataset responses. |
| warnings | No | |
| intervals | No | Paired intervals (may be truncated for large ranges). |
| mean_error_mw | No | |
| max_abs_error_mw | No | |
| mean_abs_error_mw | No | |
| observation_count | Yes | |
| mean_abs_pct_error | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, and non-destructive behavior. The description adds valuable behavioral context beyond annotations by clarifying half-open interval boundaries ([start, end)) and the timezone interpretation (America/Edmonton), which materially affect how inputs are interpreted and results are produced.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two efficient sentences front-load the core function, then list outputs and timezone context. Every clause adds value and nothing is redundant or speculative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simple structure, complete parameter schemas, rich annotations, and existing output schema, the description provides sufficient context. It covers what data is compared, the interval, the units, the returned metrics, and the timezone behavior—no critical gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, with start/end inclusivity and timezone handling already documented in the schema. The description's interval notation and timezone note largely restate this information, adding only minimal extra meaning such as the MW unit context for the comparison.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Compares'), the exact resource ('Alberta Internal Load forecast versus actual'), the interval semantics, units, and the expected outputs. This clearly differentiates the tool from siblings like get_forecast or get_load, and its metric-focused output distinguishes it from analyze_forecast_error.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the use case: when you need forecast-versus-actual error metrics over a time range. However, it does not explicitly name alternatives or state when not to use this tool, especially given closely related siblings like analyze_forecast_error and compare_market_periods.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_market_periodsCompare Market PeriodsARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes | Compare aggregate pool-price and load statistics across two periods. |
Output Schema
| Name | Required | Description |
|---|---|---|
| metadata | Yes | Provenance and semantic metadata attached to dataset responses. |
| period_a | Yes | Aggregate statistics for one market period. |
| period_b | Yes | Aggregate statistics for one market period. |
| warnings | No | |
| load_avg_delta_mw | No | |
| load_avg_pct_change | No | |
| price_avg_pct_change | No | |
| price_avg_delta_cad_per_mwh | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds meaningful behavioral context beyond the annotations by specifying the aggregate nature of the statistics, the inclusion of deltas, and the important caveat that the tool 'does not assert causation.'
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences. The first sentence front-loads the core action and scope, and the second adds a valuable interpretative caveat without unnecessary detail. Every phrase earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description does not need to explain return values. It provides the essential information needed to invoke the tool correctly: the comparison target, the market area, the statistic types, and the causal limitation. No critical information for selecting or calling the tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds value by identifying the timezone 'America/Edmonton' and clarifying that the comparison is about pool-price and load statistics, which helps the agent understand the semantic context of the four date-time parameters even though the schema already defines their types and required status.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's specific action: 'Compares aggregate pool-price and load statistics between two America/Edmonton market periods.' It names the exact resource and scope, and the comparison-of-two-periods framing distinguishes it from sibling tools like get_price_statistics or get_pool_prices, which do not emphasize dual-period comparison.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies a clear use case: comparing aggregate pool-price and load statistics across two distinct historical periods. It does not explicitly name alternatives or exclusions, but the context is sufficiently clear that an agent would know when to select this tool over single-period or forecast-related siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
explain_market_conditionsExplain Market ConditionsARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes | Request structured evidence for market conditions around a time window. |
Output Schema
| Name | Required | Description |
|---|---|---|
| metadata | Yes | Provenance and semantic metadata attached to dataset responses. |
| warnings | No | |
| focus_end | Yes | |
| focus_start | Yes | |
| baseline_end | Yes | |
| baseline_start | Yes | |
| notable_movements | Yes | |
| associated_changes | Yes | |
| observed_conditions | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, open-world, and non-destructive behavior. The description adds meaningful behavioral context beyond annotations by disclosing that the tool returns observed metrics and associated_changes without asserting causation, and that the calling model must generate any natural-language explanation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each carrying distinct information: the comparison and default baseline, the output components, and the critical limitation/caveat. There is no repetition or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with a fully described schema and an output schema, the description covers the default baseline and the non-causal nature of the output. It could add a little more context about what 'market conditions' evidence is intended to support, but the output schema likely supplies that detail.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents request.start, request.end, and the optional baseline window. The description's mention of the default preceding equal-length baseline restates information already present in the schema (baseline_start's default), adding no new semantic detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Returns') and resource ('structured evidence for market conditions in a focus window versus a baseline window'), clearly conveying the comparison task. It distinguishes the tool from a natural-language analyst by stating it does not claim causation, though it does not explicitly name or contrast a sibling tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: use it when structured market-condition evidence is needed and a baseline comparison is desired, with a default baseline if none is supplied. It does not enumerate exclusions or explicitly name alternatives, but the boundary between this tool and a natural-language explainer is stated via the final sentence.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_price_eventsFind Price EventsARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes | Detect sustained high-price intervals in pool price history. |
Output Schema
| Name | Required | Description |
|---|---|---|
| events | Yes | |
| metadata | Yes | Provenance and semantic metadata attached to dataset responses. |
| warnings | No | |
| threshold_cad_per_mwh | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, non-destructive, idempotent behavior, so the description's job is to add context. It does so by disclosing the threshold mechanism (absolute or percentile, default 90th) and the nature of the result (event boundaries and load context when available). This adds meaningful behavioral context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The core detection behavior is front-loaded, followed by threshold semantics and the return value summary, so every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that an output schema exists, the description need not enumerate return fields in detail. It covers the interval, threshold modes, default behavior, and output categories, which is sufficient for an agent to select and invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3 and the description does not need to compensate. It does restate the threshold alternatives and default percentile, which is helpful, but it does not add material meaning beyond the schema's already detailed parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Detects'), a clear resource ('sustained high Pool Price events'), and an explicit interval ('[start, end)'), which distinguishes it from sibling tools that return raw prices or market snapshots. It also states the output shape ('event boundaries, duration, peak/average price'), leaving no ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for detecting sustained high-price events, but it does not explicitly state when to use this tool versus alternatives such as analyze_market_event, get_price_statistics, or get_pool_prices. No exclusions or alternative routing guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_approved_transmission_outagesGet Approved Transmission OutagesARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes | Request approved transmission planned outages. Omit ``start``/``end`` for the current AESO publication. When provided, the range selects historical *publication* windows (not outage intervals) and is tightly bounded because upstream navigation walks archive pages. |
Output Schema
| Name | Required | Description |
|---|---|---|
| outages | Yes | |
| metadata | Yes | Provenance and semantic metadata attached to dataset responses. |
| warnings | No | |
| approval_status | Yes | |
| publication_time | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, and open-world, so the safety profile is covered. The description adds behavior beyond annotations: start/end select publication windows, not outage intervals, and lookups are tightly bounded because upstream navigation walks archive pages.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with purpose first, usage second, and differentiation third. Every sentence adds information and there is no filler or redundant elaboration.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple parameter surface, rich annotations, and presence of an output schema, the description covers what the tool returns, how to request current vs historical data, and how it differs from related outage tools. Nothing essential for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents start as optional inclusive and end as optional exclusive, and schema coverage is 100%. The description repeats this at a high level and adds the 'current public publication' and 'tightly bounded' nuance, but it doesn't carry substantial meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Returns AESO-approved planned transmission outages (approval_status=approved)', giving a specific verb, resource, and filter. It also explicitly differentiates from generator outages and long-range tentative outages, which maps to sibling tools and prevents confusion.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It tells the agent to omit start/end for the current public publication and to use them for tightly bounded historical publication windows. It doesn't explicitly name the exact sibling tool for generator or tentative outages, so alternative routing is implied rather than fully explicit, but the usage cases are clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_assetsGet AssetsARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes | Filterable asset list request. |
Output Schema
| Name | Required | Description |
|---|---|---|
| assets | Yes | |
| metadata | Yes | Provenance and semantic metadata attached to dataset responses. |
| warnings | No | |
| truncated | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The truncation caveat ('Results may be truncated by the limit parameter') adds genuine behavioral context beyond the annotations' readOnly/openWorld/idempotent hints — it warns the agent that a query may return an incomplete result set, which affects downstream reasoning. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, zero filler. The primary action and filter scope are front-loaded in the first sentence, and the truncation caveat earns its place in the second.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with a rich annotation profile and an output schema, the description covers purpose, filter scope, and the key truncation behavior. Minor omissions like default limit and ordering are already visible in the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and property names are self-explanatory, so the baseline is 3. The description adds marginal value by mapping natural-language filters (e.g., 'pool participant') to schema parameters and noting that limit can truncate results.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Returns') and resource ('AESO market asset registry records'), and enumerates the filter dimensions. Among the ~60 sibling tools, none other targets the asset registry, so the tool is clearly distinguishable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The usage context is implied — use this to fetch asset registry records with optional filters — but no explicit when-to-use guidance, exclusions, or alternative tool routing is given. With many sibling tools, explicit routing would help, though the purpose is self-evident enough to infer appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_dispatch_down_serviceGet Dispatch Down ServiceARead-onlyIdempotent
Returns bounded official AESO Dispatch Down Service availability publications. DDS is distinct from energy-market dispatch and metered generation.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes | Request point-in-time Dispatch Down Service availability records. |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | Yes | Pagination state for a stable in-memory report result. |
| records | Yes | |
| metadata | Yes | Provenance and semantic metadata attached to dataset responses. |
| warnings | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false. The description adds complementary context: results are 'bounded official AESO publications', and DDS is conceptually distinct from related market data. This helps an agent interpret the data source and scope, though pagination behavior is left to the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no wasted words. It front-loads the core return behavior, then adds a single clarifying distinction. It avoids repeating information already present in annotations or the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The schema fully documents the required request object, start/end semantics, timezone handling, and optional limit/offset. Annotations cover the safety and idempotency profile, and an output schema exists. The only minor ambiguity is the word 'bounded', but the limit/offset parameters and schema constraints resolve it sufficiently.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% at the request parameter level, with nested start/end descriptions including timezone interpretation and limit/offset constraints/defaults. The tool description itself adds no parameter-specific meaning beyond the schema, so the baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Returns') and names a precise resource ('AESO Dispatch Down Service availability publications'). It also explicitly distinguishes DDS from energy-market dispatch and metered generation, which helps the agent differentiate it from siblings like get_generation or get_metered_volumes without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this tool is for Dispatch Down Service availability data and warns against confusing it with energy-market dispatch or metered generation. However, it does not provide explicit when-to-use guidance or name an alternative tool to prefer in other cases; the usage context is suggestive rather than prescriptive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_energy_merit_orderGet Energy Merit OrderARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes | Request one AESO report date with bounded output pagination. |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | Yes | Pagination state for a stable in-memory report result. |
| blocks | Yes | |
| metadata | Yes | Provenance and semantic metadata attached to dataset responses. |
| warnings | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, open-world, and non-destructive behavior. The description adds valuable behavioral context beyond those annotations: the 60-day publication delay, the units (CAD/MWh, MW), and the timezone (America/Edmonton), which materially affect interpretating results. No contradiction with annotations exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three short sentences, each adding necessary information: the primary purpose, the data recency constraint, and the unit/timezone context. There is no fluff or repetition of schema details, and the most important purpose is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists and annotations cover side effects, the description supplies the remaining critical contextual facts: history-only scope, 60-day delay, units, timezone, and paginated offer-block format. An agent has enough to select and use the tool correctly without additional description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already fully documents report_date, limit, and offset with defaults and bounds. The description adds only general context about report units and pagination, which does not need to replace the schema's parameter documentation. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns one historical AESO Energy Merit Order report date as paginated offer blocks, which is a specific verb, resource, and scope. This distinguishes it from sibling tools like get_system_marginal_prices or get_pool_prices, which serve different market data purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: it is for historical merit order data, with a 60-day release delay, so agents can infer it is not for real-time queries. It does not explicitly name alternative tools or exclusions, but the historical qualifer and report type provide sufficient routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ffr_net_scheduleGet Ffr Net ScheduleARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes | Request the bounded official FFR Net Schedule archive. |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | Yes | Pagination state for a stable in-memory report result. |
| metadata | Yes | Provenance and semantic metadata attached to dataset responses. |
| warnings | No | |
| intervals | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive, so the safety profile is handled. The description adds genuine value beyond annotations by disclosing the AESO sign convention (imports negative, exports positive) and by drawing a boundary against offered/dispatched data, both essential for correct interpretation. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero filler: the first delivers the core purpose, the second delivers the critical sign convention and scope boundary. Content is front-loaded and every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema carries return-value documentation, annotations carry the safety profile, and the schema carries parameters at 100% coverage. The description supplies the one non-obvious interpretive fact (sign convention) and a scope boundary. Nothing an agent needs to call it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with start, end, limit, and offset all documented including timezone semantics for naive datetimes. The description adds no parameter-level detail beyond the schema; the word 'bounded' loosely echoes the limit/offset mechanism but contributes nothing new. Baseline 3 applies since the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Returns') and a well-scoped resource ('bounded official FFR Net Schedule archive'), with qualifiers 'bounded' and 'official' pinning down scope. The explicit clarification ('this is not FFR offered or dispatched') further distinguishes it from adjacent data categories an agent might confuse it with.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use conditions and no named sibling alternatives. The negative clause ('not FFR offered or dispatched') gives a partial when-not signal, but it stops short of routing the agent to the correct alternative or stating the situation in which this tool is preferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_forecastGet ForecastARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes | Bounded request for an official AESO forecast series. ``horizon`` is required by current renewable files (the 12-hour and seven-day reports have different cadence and revision behaviour), while historical actual-vs-forecast files use ``historical``. The field is optional to keep callers able to request the shared AIL/pool-price series; providers choose the only valid source for those products. |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | Yes | Pagination state for a stable in-memory report result. |
| metadata | Yes | Provenance and semantic metadata attached to dataset responses. |
| warnings | No | |
| intervals | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey read-only, idempotent, open-world, and non-destructive behavior. The description adds useful context beyond annotations: the half-open [start, end) interval semantics and the conditional "where the requested source horizon exists", which alerts the agent that data availability is not guaranteed. This goes beyond the annotation baseline without contradicting it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that packs in the resource, scope, interval semantics, series options, and a data-availability caveat. There is no filler or unnecessary repetition of schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich input schema, output schema, and annotations, the description provides enough orienting context for an agent to decide whether this tool fits the request. It covers what data is returned, for which series, over what interval, and notes the horizon-existence condition; return-value details are covered by the output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already documents the request object, start/end timezone interpretation, horizon requirements, series enum, and pagination fields. The tool description adds little parameter-level meaning beyond restating the series and interval, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb, "Returns", and identifies the resource as "typed official AESO actual and forecast observations" over a defined interval. It further specifies the supported series (AIL, Pool Price, wind, solar, combined wind/solar), making it easy to distinguish from forecast-related siblings like get_operating_reserve_forecast or get_load_outage_forecast.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies its use for retrieving official AESO forecast/actual observations for the listed series, but it does not explicitly state when to use this tool versus alternatives. No exclusions or alternative tool names are mentioned, so the guidance relies on inference from the tool name and scope.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_generationGet GenerationARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes | Request generation / fuel-mix data. Without a date range, returns the current CSD fuel mix (all fuels). With a date range, returns historical wind and solar generation where available. |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | Yes | Pagination state for a stable in-memory report result. |
| metadata | Yes | Provenance and semantic metadata attached to dataset responses. |
| snapshot | No | |
| warnings | No | |
| intervals | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, non-destructive behavior. The description adds useful behavioral context: the snapshot includes all fuels in MW, historical data is hourly wind/solar, and renewable share is computed as wind + solar + hydro over total generation. Pagination and limit behavior are not mentioned but are available in the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences with no wasted words: purpose first, then conditional usage, then a metric definition. Front-loaded and every sentence contributes to the caller's understanding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with a nested request schema and an output schema, the description covers the key behavioral modes and the renewable-share definition. It does not explain pagination or the exact output structure, but the schema and annotations fill those gaps, so nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the nested request schema already explains the two date-range modes. The description enhances this by explicitly telling the user to omit or provide start/end and by defining the renewable-share calculation. Limit and offset are left to schema defaults, which is acceptable.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Returns Alberta generation data') and clearly distinguishes the two operating modes: current fuel-mix snapshot vs historical wind/solar hourly generation. This makes it separable from sibling tools like get_generation_capacity or analyze_generation_mix without needing to inspect them.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit, actionable usage guidance: omit start/end for the current fuel-mix snapshot, and provide them for historical wind and solar generation. It does not explicitly contrast with sibling tools such as get_historical_generation, but the parameter-based conditions are unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_generation_capacityGet Generation CapacityARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes | Request an inclusive AESO report-date range with bounded output pagination. |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | Yes | Pagination state for a stable in-memory report result. |
| metadata | Yes | Provenance and semantic metadata attached to dataset responses. |
| warnings | No | |
| intervals | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description goes further by adding the inclusive 31-day date bound, MW units, hourly granularity, fuel-class breakdown, and paginated output, all of which are meaningful operational details beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no redundant phrasing. The core return value is stated first, followed by key operational constraints (date bound, units, pagination). Every phrase contributes to the agent's understanding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema and annotations, the description supplies the necessary operational context: data resolution (hourly), scope (AIES), content (capacity and outages by fuel class), date restriction (31 days), units (MW), and pagination. Nothing critical for correct invocation appears to be missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description already covers 100% of parameters, including the request object description of an inclusive report-date range with bounded pagination. The description adds value by explicitly stating the 31-day maximum inclusive range and confirming that output is paginated, which directly relates to start_date, end_date, limit, and offset semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies a specific verb ('Returns'), a specific resource ('hourly AIES maximum and available generation capability plus operating and mothball outages by fuel class'), and clarifies units and pagination. It is clearly distinguishable from sibling tools like get_generation or get_outages because it focuses on capacity capability rather than actual generation or general outages.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear context of what data is returned (capacity and outage status by fuel class) and constraints (31-day limit, MW, paginated), so an agent can infer when it is appropriate. However, it does not explicitly state when to prefer this tool over alternatives such as get_generation, get_outages, or get_historical_generation, nor does it mention exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_historical_generationGet Historical GenerationARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes | Retrieve individual-asset CSD generation from the AESO archive. |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | Yes | Pagination state for a stable in-memory report result. |
| metadata | Yes | Provenance and semantic metadata attached to dataset responses. |
| warnings | No | |
| intervals | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds meaningful behavioral context: the '[start, end)' half-open interval, the timezone-naive interpretation as America/Edmonton market time, the optional refresh behavior, and the caveat that the archive is not settlement-metered data. These go beyond what annotations provide.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences: the first packs the core semantics (resource, interval, resolution, filters, pagination), and the second adds a critical caveat. Every clause earns its place, and the key constraints are front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich schema, output schema, and annotations, the description covers the essential operational semantics: interval bounds, resolution choice, filtering, pagination, and the non-settlement caveat. Minor gaps like pagination details and the refresh mechanism's behavior are not fully explained, but the schema and output schema already carry much of that load.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents parameters thoroughly. The description adds semantic value by explaining that filters are bounded ('Bounded asset/fuel filters'), that the interval is half-open, and that the data is operational CSD not settlement-metered. This is enough to elevate above the baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Returns'), a specific resource ('AESO CSD individual-asset generation'), a precise interval semantics ('[start, end)'), and two resolution options. It also distinguishes this from settlement-metered data, which helps differentiate it from sibling tools like get_csd_to_metered.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use for historical official CSD generation queries and notes that this archive is not settlement-metered, giving a useful exclusion. It doesn't explicitly name sibling alternatives like compare_csd_to_metered or summarize_market_history, but the interval and filter scope make the usage context reasonably clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_historical_store_statusGet Historical Store StatusARead-onlyIdempotent
Reports local DuckDB/Parquet coverage, detected cadence gaps, source-file and partition counts, schema version, and whether optional storage dependencies are installed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| enabled | Yes | |
| datasets | Yes | |
| metadata | Yes | Provenance and semantic metadata attached to dataset responses. |
| warnings | No | |
| store_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is fully covered. The description adds valuable behavioral context by specifying exactly what diagnostic information is reported (coverage, cadence gaps, counts, schema version, dependency checks), which goes beyond the structured annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that front-loads the core purpose ('Reports local DuckDB/Parquet coverage') and then efficiently enumerates each reported item. Every clause earns its place without any redundant wording or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter status-reporting tool with an output schema present, this description is complete. It covers all relevant dimensions of the tool's behavior—coverage, gaps, counts, schema version, and dependency checks—and the output schema handles return-value details, so no necessary information is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters and the input schema is empty, so the baseline of 4 applies. The description doesn't need to explain parameter semantics since there are none, and the schema coverage is already 100%, leaving nothing undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific reporting verb and names the exact resource ('local DuckDB/Parquet coverage') plus a detailed list of what it reports, including cadence gaps, counts, schema version, and dependency status. This clearly differentiates it from sibling data retrieval tools like get_historical_generation, which report market data rather than storage health.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies when this tool should be used: whenever an agent needs to assess the completeness or health of the local historical data store, such as before running sync_historical_store. It provides clear context for the tool's purpose, though it does not explicitly name alternatives or exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_interchangeGet InterchangeARead-onlyIdempotent
Returns current Alberta interchange flows by path in MW, including net interchange. Positive/negative path signs follow AESO Current Supply Demand conventions.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| paths | Yes | |
| metadata | Yes | Provenance and semantic metadata attached to dataset responses. |
| warnings | No | |
| observed_at | Yes | |
| net_interchange_mw | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so the description is not responsible for side-effect disclosure. It adds meaningful behavioral context by explaining the AESO sign convention and that results are current flows, going beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences. The first states the core purpose and measurement unit; the second adds the sign convention. No wasted words or redundant schema repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read-only tool with an output schema, this description is complete. It specifies the resource, units, temporal scope, and a key interpretive detail. Nothing else is needed for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema fully covers input semantics. The description's mention of 'by path' refers to output granularity, not a parameter, so no additional parameter guidance is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns current Alberta interchange flows by path in MW and includes net interchange. It also specifies the sign convention, distinguishing it from intertie capability and outage tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance on when to use this tool versus alternatives like get_intertie_capability or get_intertie_outages. The description implies current flow retrieval but does not state exclusions or conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_intertie_capabilityGet Intertie CapabilityARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes | Request hourly intertie capability, optionally including revision history. |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | Yes | Pagination state for a stable in-memory report result. |
| metadata | Yes | Provenance and semantic metadata attached to dataset responses. |
| warnings | No | |
| intervals | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the description's added value lies in disclosing operational constraints: hour-ending bounds, versioned reports, 100-day date range limit, and paginated output. These go beyond the annotations and help the agent anticipate response size and filtering behavior, though it does not detail error handling or exact response structure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with zero filler. The first sentence front-loads the core purpose and data content; the second efficiently covers operational constraints. Every phrase provides information needed for correct invocation, making it an ideal size for an agent-facing tool description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema and thorough annotations, the description adequately covers the essential operational context: data type, constraints, and pagination. It does not explicitly address when to use this tool versus sibling tools, but the detailed resource scope makes the use case reasonably clear. A small gap remains around differentiating from related intertie tools, but this is not critical for basic invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
While schema description coverage is high and defaults/min/max exist, the tool description adds meaning by translating 'hour-ending bounds' to the start_hour_ending/end_hour_ending parameters, 'optional versioned reports' to include_versions, and 'paginated' to limit/offset. This clarifies how the nested parameters are intended to be used, which is not obvious from the schema alone.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Returns') and a clear resource ('hourly import/export ATC, TTC, reliability margins, and gross offers for AESO interties and flowgates'). This is far more specific than the tool name and clearly defines the scope of data returned, distinguishing it from likely siblings like get_interchange or get_intertie_outages by its precise data content.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool through its detailed resource and data output, but does not provide explicit guidance on when to prefer it over alternatives or when not to use it. It mentions constraints like the 100-day limit and pagination, which affect usage, but does not name alternative tools or exclusion criteria, leaving usage decisions to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_intertie_outagesGet Intertie OutagesARead-onlyIdempotent
Returns outages affecting AESO interties or flowgates for an inclusive date range. Includes affected paths and event boundaries in America/Edmonton; output is paginated.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes | Request an inclusive AESO report-date range with bounded output pagination. |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | Yes | Pagination state for a stable in-memory report result. |
| outages | Yes | |
| metadata | Yes | Provenance and semantic metadata attached to dataset responses. |
| warnings | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and non-destructive behavior. The description adds useful behavioral context by stating output is paginated and that affected paths and event boundaries are reported in America/Edmonton timezone. This goes beyond annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense sentence front-loads the action and scope, then appends output details and pagination. There is no filler or redundancy, making it easy for an agent to parse quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with one nested parameter, a rich output schema, and strong annotations, the description covers the core purpose, domain, timezone, and pagination behavior. The only minor gap is the lack of explicit differentiation from the many sibling outage-related tools, but the 'interties or flowgates' scope makes the intended use clear.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already covers parameter semantics at 100% with the request description 'inclusive AESO report-date range with bounded output pagination.' The tool description repeats the ideas of 'inclusive' and 'paginated' but does not add new parameter-level meaning. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Returns'), resource ('AESO interties or flowgates'), and scope ('inclusive date range'). The description also mentions affected paths and event boundaries, adding precision beyond the title. It does not explicitly distinguish itself from siblings like get_outages, so it stops short of a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly implies its use case: retrieving outages that affect interties/flowgates. However, it offers no direct guidance about when to choose this over alternative outage tools such as get_outages or get_approved_transmission_outages. The inclusive date range and pagination are operational details rather than usage conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_loadGet LoadARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes | Request Alberta Internal Load (AIL) observations. |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | Yes | Pagination state for a stable in-memory report result. |
| metadata | Yes | Provenance and semantic metadata attached to dataset responses. |
| warnings | No | |
| intervals | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already convey read-only, idempotent, non-destructive behavior. The description adds valuable behavioral context beyond that: exact interval semantics, timezone handling, a 90-day maximum range, and the caveat that forecast values are included only 'when available'. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core purpose, and every sentence adds necessary information: units, interval, timezone, maximum range, and optional forecast inclusion. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a straightforward read-only data retrieval tool, the description plus rich schema and annotations cover what an agent needs to call it correctly: interval semantics, timezone, range limit, and optional behavior. Output schema exists, so return structure does not need to be described.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema descriptions already document start/end inclusivity and timezone interpretation, and include_forecast is explained. The description mostly restates these semantics rather than adding new meaning. Limit and offset are not described in the description, but their defaults and bounds are clear from schema metadata, so the schema carries the burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Returns Alberta Internal Load (AIL) observations in MW'. Clearly defines the data type, unit, and interval [start, end), making the tool distinguishable from related market and generation tools even without naming a sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for retrieving AIL observations, with interval and forecast inclusion guidance, but it does not explicitly state when to prefer this over sibling tools like get_forecast or get_load_outage_forecast. No exclusions or alternatives are given, so usage context is clear but selection guidance is absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_load_outage_forecastGet Load Outage ForecastARead-onlyIdempotent
Returns AESO hourly load-outage forecast observations in MW for an inclusive, maximum 31-day range. Timestamps use America/Edmonton and output is paginated.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes | Request an inclusive AESO report-date range with bounded output pagination. |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | Yes | Pagination state for a stable in-memory report result. |
| metadata | Yes | Provenance and semantic metadata attached to dataset responses. |
| warnings | No | |
| intervals | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint false. The description adds valuable behavioral context beyond those: the data is hourly, in MW, the date range is inclusive and capped at 31 days, timestamps use America/Edmonton, and output is paginated. These are exactly the kind of operational details annotations don't convey, so the description meaningfully supplements them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no wasted words. The first sentence front-loads what the tool returns, the unit, and the range; the second covers timezone and pagination. Every piece of information is essential for calling the tool correctly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich input schema, output schema, and annotations, the description is nearly complete. It covers the critical constraints an agent must know: inclusive dates, 31-day max, timezone, and pagination. The only minor gap is the behavior when the range exceeds 31 days (whether it errors or truncates), but this is not crucial because the cap is explicit.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description covers 100% of parameters (100% coverage), so baseline is 3. The description adds meaning beyond the schema by explaining that start_date and end_date form an inclusive range capped at 31 days, and that pagination applies (aligned with limit/offset). This directly enriches the parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Returns', the resource 'AESO hourly load-outage forecast observations in MW', and the date range constraint, which is specific and distinguishes this from generic tools like get_load or get_outages. However, it does not explicitly name a sibling tool or contrast itself with alternatives, so it stops short of full differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus the many sibling tools (e.g., get_load, get_outages, get_forecast). It does not mention conditions, exclusions, or alternatives, leaving the agent to infer the use case from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_long_range_transmission_outagesGet Long Range Transmission OutagesARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes | Request the current Long Range Significant Transmission Outages publication. |
Output Schema
| Name | Required | Description |
|---|---|---|
| outages | Yes | |
| metadata | Yes | Provenance and semantic metadata attached to dataset responses. |
| warnings | No | |
| approval_status | Yes | |
| publication_time | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and non-destructive behavior, so the description doesn't need to restate those. It adds useful context beyond annotations: the ~24-month forward-looking horizon and the fact that entries may be tentative with approval_status=tentative and not AESO-approved.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The core function and key caveat are front-loaded, and the sibling disambiguation is placed at the end without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists and annotations cover safety/idempotency, the description supplies the remaining essential selection context: temporal horizon, tentative approval status, and sibling differentiation. Nothing critical for an agent to call this tool correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the single parameter's description already explains that long-range reports are tentative/coordination listings and that only the current publication is supported. The tool description adds no further parameter-specific detail, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Returns'), names the exact resource ('Long Range Significant Transmission Outages'), and adds a temporal scope (~24 months ahead). It also distinguishes itself from the sibling get_approved_transmission_outages by flagging the tentative, non-AESO-approved nature of the data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly warns not to confuse this tool with get_approved_transmission_outages, providing a clear exclusion and identifying the alternative. It conveys that this tool is for tentative, not-yet-approved long-range outages, though it doesn't fully spell out when the approved tool should be preferred beyond the name and contrast.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_market_snapshotGet Market SnapshotARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| metadata | Yes | Provenance and semantic metadata attached to dataset responses. |
| warnings | No | |
| observed_at | Yes | |
| renewable_share | No | |
| interchange_paths | No | |
| generation_by_fuel | No | |
| net_interchange_mw | No | |
| wind_generation_mw | No | |
| solar_generation_mw | No | |
| total_generation_mw | No | |
| pool_price_cad_per_mwh | No | |
| alberta_internal_load_mw | No | |
| contingency_reserve_required_mw | No | |
| system_marginal_price_cad_per_mwh | No | |
| dispatched_contingency_reserve_total_mw | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, so the description adds value by explaining that the view is 'cohesive' and 'current-state', and by specifying units (CAD/MWh, MW) and timezone (America/Edmonton). It does not define exactly how 'recent' is measured, but the output schema mitigates that gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded, with two sentences that state the core purpose, enumerate included data, and add units and timezone. Every sentence earns its place with no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a zero-parameter snapshot tool with an output schema, so the description is complete for invocation. It names the market and geographic scope, lists the major bundled metrics, and provides essential interpretation details such as units and timezone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, so there are no parameter semantics for the description to clarify. The baseline for no-parameter tools is satisfied, and the description appropriately focuses on output content instead.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Returns') and names a precise resource ('Alberta electricity market'), then enumerates the metrics included, such as pool price, system marginal price, Alberta Internal Load, generation, net interchange, and operating reserves. This clearly distinguishes it from the granular sibling getters by positioning it as a cohesive current-state snapshot.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: use this tool for a cohesive current-state view of multiple market metrics at once. It does not explicitly name alternatives or say when not to use it, but the snapshot framing makes the use case obvious relative to the granular sibling tools like get_pool_prices or get_generation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_metered_volumesGet Metered VolumesARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes | Request metered volumes, optionally filtered by assets or participants. |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | Yes | Pagination state for a stable in-memory report result. |
| metadata | Yes | Provenance and semantic metadata attached to dataset responses. |
| warnings | No | |
| intervals | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent annotations, the description discloses the mutual exclusivity of filters, the 16-day limit on unfiltered requests, and pagination behavior. These are non-obvious execution traits the agent needs to know.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler. The main result is front-loaded, and constraints are packed efficiently.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With output schema and rich annotations present, the description covers essential invocation details: unit, granularity, filter constraints, date-window limitation, and pagination. Nothing critical is missing for an agent to select and call the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already covers the request object with property names and limits, so baseline is 3 at high coverage. The description adds semantic meaning by clarifying that asset_ids and pool_participant_ids cannot be combined and that omitting filters restricts the date window.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Returns') and resource ('hourly AESO metered energy in MWh by asset'), making it easy to distinguish from sibling tools like get_load or get_generation. The unit and granularity are explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context: filters can be up to 20 asset IDs or pool-participant IDs but not both, unfiltered requests are limited to 16 days, and output is paginated. It does not explicitly name alternative tools or conditions for choosing them, so a full score is not warranted.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_monthly_cumulative_net_revenueGet Monthly Cumulative Net RevenueARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes | Request the current market-power mitigation public reports. |
Output Schema
| Name | Required | Description |
|---|---|---|
| metadata | Yes | Provenance and semantic metadata attached to dataset responses. |
| warnings | No | |
| intervals | Yes | |
| report_time | No | |
| headroom_to_trigger_cad | No | |
| latest_cumulative_net_revenue_cad | No | |
| secondary_offer_price_limit_triggered | No | |
| one_sixth_annualized_unavoidable_costs_cad | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, non-destructive behavior. The description adds useful behavioral context: the report is the current public report, includes cumulative CAD vs 1/6 annualized unavoidable costs, includes the trigger status, and uses America/Edmonton hour-ending interval timestamps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences with no filler. The first sentence identifies the tool's output; the second adds content and timezone details. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple one-parameter schema, the existing output schema, and the comprehensive annotations, the description is nearly complete. It clearly identifies what is returned and key formatting details. It lacks explicit usage-scenario guidance, but that is a relatively minor gap for this read-only report tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description does not add anything about the 'request' or 'current_only' parameters beyond what the schema already states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Returns'), a specific resource ('AESO Monthly Cumulative Settlement Interval Net Revenue (MCSINR) public report'), and clarifies the report's key contents. This makes it easy to distinguish from the many sibling market-report tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided about when to use this tool versus alternatives. For example, it mentions the secondary offer price limit trigger, but does not direct agents to a dedicated sibling tool like get_secondary_offer_price_limit when that is the only needed value.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_operating_reserve_activationsGet Operating Reserve ActivationsARead-onlyIdempotent
Returns hourly standby operating-reserve activation volume and volume-weighted activation price for an inclusive market-date range.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | Yes | Pagination state for a stable in-memory report result. |
| metadata | Yes | Provenance and semantic metadata attached to dataset responses. |
| warnings | No | |
| intervals | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already disclose read-only, idempotent, open-world, and non-destructive behavior. The description adds useful semantics like 'inclusive market-date range' and 'hourly', but it does not go into potential pagination behavior or data availability, which is acceptable given the annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler. Every word contributes meaning, making it appropriately concise for this tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema and annotations cover return shape and safety/idempotence, while the description provides the important inclusive-market-date-range semantics. It does not explain how to choose this tool over siblings or describe optional filters, but those are discoverable from the schema, so the definition is mostly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for parameter meaning. It clarifies that the date range is inclusive and market-date based, but says nothing about reserve_types, limit, or offset. This is only partial compensation for the missing parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Returns'), the resource ('standby operating-reserve activation volume' and 'volume-weighted activation price'), granularity ('hourly'), and the date-range scope. This clearly distinguishes it from sibling tools like get_operating_reserve_prices and get_operating_reserve_forecast by focusing on activations rather than prices or forecasts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance about when to use this tool versus sibling alternatives. An agent must infer from the name and wording that it is about activations, and no conditions, exclusions, or alternative tool references are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_operating_reserve_forecastGet Operating Reserve ForecastARead-onlyIdempotent
Returns the current public seven-day hourly forecast of active and standby regulating, spinning, and supplemental operating-reserve volumes in MW.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | Yes | Pagination state for a stable in-memory report result. |
| metadata | Yes | Provenance and semantic metadata attached to dataset responses. |
| warnings | No | |
| intervals | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld, and non-destructive, and the description adds valuable context: data is current, public, seven-day, hourly, reported in MW, and covers active and standby volumes. It does not describe pagination or public-api limis, but no annotation contradiction exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single focused sentence with no filler. It front-loads the action and most important scope facts, making every phrase informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With rich annotations, an output schema, and only one nested input parameter, the description conveys the essential data scope well. It could be more complete about request-field semantics and sibling differentiation, but the schema and annotation context make the tool callable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, yet the description only names the reserve types, which are already shown in the schema enum. It does not explain the required 'request' container or the limit/offset pagination controls, so the description fails to compensate for the low schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with 'Returns' and clearly identifies the resource: a current public seven-day hourly forecast of active and standby regulating, spinning, and supplemental operating-reserve volumes in MW. It is specific and easily understood, though it does not explicitly distinguish itself from siblings like get_reserves or get_operating_reserve_prices.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The terms 'forecast' and 'seven-day' imply use for near-term forecasted reserve volumes, but the description provides no explicit when-to-use or when-not-to-use guidance. It does not mention that get_operating_reserve_prices or get_operating_reserve_actives should be used for prices or actual activations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_operating_reserve_offer_controlGet Operating Reserve Offer ControlARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes | Request one AESO report date with bounded output pagination. |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | Yes | Pagination state for a stable in-memory report result. |
| blocks | Yes | |
| metadata | Yes | Provenance and semantic metadata attached to dataset responses. |
| warnings | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, and non-destructive behavior. The description adds valuable beyond-annotation context: the 60-day delay, units (CAD/MWh and MW), timezone (America/Edmonton), and paginated delivery, which help the agent interpret results and set expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. It front-loads the action and resource, then packs essential constraints (delay, units, timezone, pagination) into the remaining sentence. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, rich annotations, and a single required parameter, the description covers the key operational constraints: historical scope, delay, units, timezone, and pagination. A minor gap is that it does not define what 'Operating Reserve Offer Control' means, but the title and sibling context provide enough orientation for an agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the request object description already explains bounded output pagination. The main tool description adds units and timezone but does not add parameter-specific semantics beyond what the schema already documents; the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('Returns'), a specific resource ('one historical AESO Operating Reserve Offer Control report date'), and a distinguishing behavior ('as paginated blocks'). It is easily distinguishable from sibling operating reserve tools, which cover prices, forecasts, or activations rather than offer control report dates.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for historical report dates and notes the 60-day release delay, giving useful context about when data will be available. However, it does not explicitly state when to prefer this tool over alternatives such as get_operating_reserve_prices or get_operating_reserve_forecast, nor does it mention any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_operating_reserve_pricesGet Operating Reserve PricesARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | Yes | Pagination state for a stable in-memory report result. |
| metadata | Yes | Provenance and semantic metadata attached to dataset responses. |
| warnings | No | |
| intervals | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld, and non-destructive behaviors, so the bar is lower. The description adds useful interpretive context: that active price, standby premium, activation strike, and clearing blended price remain distinct. This prevents an agent from incorrectly aggregating or conflating these components.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences carry exactly the needed information: the first defines the scope and outputs, the second clarifies an important semantic distinction. There is no wasted wording or repetition of schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema and rich annotations, the description covers the core domain and return semantics, but lacks usage guidance and pagination behavior. It also does not specify allowed date ranges or timezone conventions, which an agent would need for correct invocation. It is adequate but not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for parameter documentation. It references the reserve_types enum values ('regulating, spinning, or supplemental') and 'time block' which loosely maps to start_date/end_date and the product dimension. However, it does not explain the request wrapper, limit/offset pagination, or date format, leaving a meaningful gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Returns') and resource ('operating-reserve price components and volumes') and identifies the key dimensions (regulating/spinning/supplemental product, time block, active versus standby). This makes it clearly distinguishable from siblings like get_operating_reserve_activations, get_operating_reserve_forecast, and summarize_operating_reserve_market.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance about when to use this tool versus alternatives. The description implies it is for daily reserve price data, but it does not mention exclusions, preferred scenarios, or sibling tools. An agent would have to infer usage from the resource name and content.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_outagesGet OutagesARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes | Request hourly generator outage capacity by fuel/technology. |
Output Schema
| Name | Required | Description |
|---|---|---|
| outages | Yes | |
| metadata | Yes | Provenance and semantic metadata attached to dataset responses. |
| warnings | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint false. The description adds valuable behavioral context beyond annotations: hourly granularity, half-open interval semantics, timezone (America/Edmonton), and that the response is a total with per-fuel breakdowns. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences deliver the essential purpose, interval behavior, timezone, and routing to alternatives. Every clause earns its place, and the most decision-relevant information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema exists, annotations cover safety traits, and the parameter schema documents the two inputs completely, the description adds the remaining needed semantics (hourly aggregation, interval boundaries, per-fuel components, timezone, and sibling differentiation). Nothing critical is missing for an agent to select and call this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and both parameters already have thorough descriptions including timezone handling and inclusive/exclusive semantics. The description reinforces hourly interval behavior but does not need to add parameter-level detail; the schema does the heavy lifting, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Returns'), a precise resource ('hourly AESO generator outage capacity by technology/fuel'), and the interval semantics ('[start, end)'). It also clarifies the output composition ('Total Outage MW plus per-fuel components'), which makes the tool's purpose unambiguous and distinct from the transmission outage tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use alternatives: 'For transmission planned outages use get_approved_transmission_outages or get_long_range_transmission_outages.' This directly differentiates generator outages from transmission outages, giving an agent clear routing guidance without needing to inspect sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pool_pricesGet Pool PricesARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes | Request hourly Alberta Pool Price observations. |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | Yes | Pagination state for a stable in-memory report result. |
| metadata | Yes | Provenance and semantic metadata attached to dataset responses. |
| warnings | No | |
| intervals | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and non-destructive behavior, so the description does not need to repeat those. It adds valuable context: data is actual observed hourly Pool Price (not forecast), timestamps are America/Edmonton, and the range is capped at 366 days.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, each carrying necessary information: what is returned, how to choose the sibling, and the key time/range constraints. No filler or redundant restatement of the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich input schema, output schema, and annotations, the description covers all practical call constraints: timezone, range limit, interval semantics, and unit. The alternative-tool guidance closes the main ambiguity among siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3 even without description-level parameter detail. The description adds meaning beyond the schema by specifying units (CAD/MWh), the [start, end) interval convention, timezone handling, and the maximum allowed range, which helps agents set correct parameter values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Returns') and identifies the exact resource: actual AESO hourly Pool Price observations in CAD/MWh over a market interval [start, end). It names the sibling tool get_system_marginal_prices as the distinct alternative, so an agent can differentiate without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly directs when to use the sibling: 'Use get_system_marginal_prices for minute-level real-time pricing.' It also states a hard constraint (maximum range 366 days) that governs when this tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_price_duration_curveGet Price Duration CurveARead-onlyIdempotent
Returns an evenly sampled Pool Price duration curve sorted from highest to lowest with exceedance percentages over [start, end).
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| points | Yes | |
| metadata | Yes | Provenance and semantic metadata attached to dataset responses. |
| warnings | No | |
| observation_count | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior. The description adds valuable behavioral detail beyond annotations: the curve is evenly sampled, sorted descending, includes exceedance percentages, and operates over a half-open interval [start, end).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One crisp sentence delivers the core behavior, ordering, sampling, and interval semantics without wasted words. It is front-loaded with the action and resource, making it easy to scan.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the annotations, output schema, and nested property descriptions, the description covers the essential behavior well. The main gap is usage guidance relative to similar market-price tools, but the operational contract is adequately complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for explaining parameters. It only restates the interval boundary behavior already present in the schema's start/end descriptions and does not explain the 'points' parameter, its default, or how it affects the evenly sampled output.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the exact resource ('Pool Price duration curve') and states the verb 'Returns', along with key output traits: evenly sampled, sorted highest to lowest, and exceedance percentages. This distinguishes it from sibling price-related tools like get_pool_prices or get_price_statistics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains what the tool returns but gives no guidance on when to choose it over alternative tools or when it would be inappropriate. No exclusions, prerequisites, or sibling distinctions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_price_statisticsGet Price StatisticsARead-onlyIdempotent
Calculates count, mean, median, range, population standard deviation, negative/high price hours, and requested percentiles from complete hourly Pool Price observations.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| metadata | Yes | Provenance and semantic metadata attached to dataset responses. |
| warnings | No | |
| percentiles | Yes | |
| observation_count | Yes | |
| median_cad_per_mwh | No | |
| average_cad_per_mwh | No | |
| maximum_cad_per_mwh | No | |
| minimum_cad_per_mwh | No | |
| negative_price_hours | No | |
| standard_deviation_cad_per_mwh | No | |
| hours_at_or_above_100_cad_per_mwh | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this as read-only, open-world, and idempotent. The description adds valuable behavioral specifics: it computes population standard deviation (not sample), includes negative/high price hours, and supports requested percentiles. The 'complete observations' phrasing also hints at a data-completeness assumption, which is useful context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, dense sentence that front-loads the action and resource. Every listed statistic is relevant and contributes to understanding the tool's output. There is no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the moderate complexity of a nested request object and 0% schema description coverage, the description does not fully equip an agent to correctly structure the call. The output schema and annotations cover returns and safety, but the tool's core trigger parameters (start, end, percentiles) are only vaguely alluded to. Overall, it is minimally viable but has clear gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With schema description coverage at 0%, the description must compensate, but it only hints at one parameter ('requested percentiles') and provides no meaning for the request object's start/end properties or how percentiles should be formatted. It does not explain that the request must contain a time interval, leaving a significant gap for an agent constructing input.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'Calculates' with a clear resource ('complete hourly Pool Price observations') and enumerates the exact statistics produced. This clearly distinguishes it from sibling tools like get_pool_prices or get_price_duration_curve, which focus on raw data or distribution shapes rather than aggregate statistics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance is given on when to prefer this tool over alternatives. The phrase 'complete hourly Pool Price observations' implies a data-completeness requirement, but it does not state when to use this versus get_price_duration_curve, find_price_events, or other statistical tools. There are no exclusions or alternative references.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_reservesGet ReservesARead-onlyIdempotent
Returns current AESO operating reserve indicators in MW, including contingency reserve required/dispatched and fast frequency response volumes when published.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| metadata | Yes | Provenance and semantic metadata attached to dataset responses. |
| warnings | No | |
| observed_at | Yes | |
| long_lead_time_volume_mw | No | |
| contingency_reserve_required_mw | No | |
| fast_frequency_response_offered_mw | No | |
| dispatched_contingency_reserve_gen_mw | No | |
| fast_frequency_response_dispatched_mw | No | |
| dispatched_contingency_reserve_other_mw | No | |
| dispatched_contingency_reserve_total_mw | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, non-destructive behavior. The description adds valuable behavioral context by noting that data is current, expressed in MW, and only available 'when published.' This goes beyond the structured annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single purposeful sentence. It front-loads the core result and then adds the most important scope qualifier ('when published') without any filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple parameterless read-only tool with an output schema, the description covers the essential information: what data is returned, the units, the current-time scope, and the publication dependency. No critical calling context is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the parameter documentation burden is minimal. The description still adds useful context about units and data contents, which is more than required given the empty schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: it returns current AESO operating reserve indicators in MW. It further names exact contents (contingency reserve required/dispatched and fast frequency response volumes), which clearly differentiates it from sibling tools focused on prices, forecasts, or activations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context: this tool is for current operating reserve indicators, not forecasts, activations, or prices. The phrase 'when published' also signals timing constraints. It does not explicitly name alternatives or exclusion conditions, but the context is strong enough for an agent to select it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_secondary_offer_price_limitGet Secondary Offer Price LimitARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes | Request the current market-power mitigation public reports. |
Output Schema
| Name | Required | Description |
|---|---|---|
| metadata | Yes | Provenance and semantic metadata attached to dataset responses. |
| warnings | No | |
| intervals | Yes | |
| report_time | No | |
| limit_in_effect | No | |
| secondary_offer_price_limit_cad_per_mwh | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false. The description adds useful behavioral context beyond annotations: it defines the meaning of a null limit (cap not in effect) and frames this as the current public report. No contradiction exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no wasted words: the operation and resource are front-loaded, and the null-limit clarification is concise and valuable. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter, read-only report with an output schema and rich annotations, the description and schema together fully specify what is returned and how to interpret it. The current-only constraint is captured in the schema, and the null semantics are explained in the description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage for the `request` object and `current_only` field, so the schema already documents the parameters. The description adds no parameter-level detail, but none is needed given the schema's clarity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource ('AESO Secondary Offer Price Limit public report') and a concrete verb ('Returns'), then specifies the exact content: whether the cap is in effect and the CAD/MWh limit when posted. It also clarifies the null-limit meaning, which distinguishes this tool from the broad sibling list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use guidance or alternative routing is provided; the description simply states what the tool returns. Use is implied by the tool's highly specific subject matter rather than contrasted with siblings, so it is adequate but not directive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_supply_adequacyGet Supply AdequacyARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes | Optional filter for the current seven-day adequacy publication. |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | Yes | Pagination state for a stable in-memory report result. |
| metadata | Yes | Provenance and semantic metadata attached to dataset responses. |
| warnings | No | |
| intervals | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds context about the source ('AESO'), granularity ('hourly'), and categorical nature of the data, but it does not describe operational behavior such as date range restrictions or pagination.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, each earning its place: the first defines the tool's output precisely, and the second disambiguates it from a sibling. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich annotations, output schema, and clear sibling distinction, the description is sufficient for an agent to understand what this read-only tool returns and how it differs from related tools. The current-seven-day scope is covered in the schema, so the description doesn't need to repeat it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already carries descriptive weight. The request parameter description ('Optional filter for the current seven-day adequacy publication') adds useful context about scope, but individual sub-parameters like start, end, limit, and offset have no description beyond their schema constraints.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Returns') and resource ('official AESO hourly Supply Adequacy and Market Supply Cushion status bands'). It also explicitly separates this tool from the derived assess_supply_tightness screening label, which distinguishes it from a key sibling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context by identifying the output as official published categorical metrics and contrasting them with the derived assess_supply_tightness label. It does not explicitly say 'use this when...' or 'use assess_supply_tightness instead for...', but the distinction offers practical routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_supply_surplusGet Supply SurplusARead-onlyIdempotent
Returns official AESO hourly Supply Surplus status observations. Zero-price states are forecasts/statuses; they are not inferred from observed Pool Price.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes | Optional filter for the current supply-surplus status publication. |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | Yes | Pagination state for a stable in-memory report result. |
| metadata | Yes | Provenance and semantic metadata attached to dataset responses. |
| warnings | No | |
| intervals | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, open-world, and non-destructive behavior, lowering the description's burden. The description adds a valuable behavioral disclosure: zero-price states must be interpreted as forecast/status values, not as inferences from observed Pool Price. This prevents a likely misinterpretation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no fluff; the first is front-loaded with verb and resource, and the second carries an essential caveat. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema is present, so return-value details are not the description's job; annotations cover safety and idempotence; the schema covers filtering/pagination. The description supplies the one non-obvious semantic caveat, giving an agent enough to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is high; the request wrapper has a descriptive comment and nested parameters carry defaults/constraints. The description adds 'hourly' and 'official' context but does not explain start/end/limit/offset semantics beyond what the schema already provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description states a specific verb ('Returns'), a concrete resource ('official AESO hourly Supply Surplus status observations'), and adds a scoping caveat (zero-price states are forecasts/statuses, not inferred from Pool Price). This distinguishes it from price-derived siblings such as get_pool_prices and from analysis-oriented tools like analyze_supply_surplus_events.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrasing implies use when official AESO Supply Surplus status observations are needed, and the pool-price caveat hints that this is not a price-inference tool. However, it does not explicitly say when to prefer this over siblings such as analyze_supply_surplus_events, nor does it give when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_system_eventsGet System EventsARead-onlyIdempotent
Returns bounded official AIES Event Log messages with a deterministic descriptive classification. Raw published comments remain authoritative and no event end is inferred.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes | Request bounded AIES Event Log entries. |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | Yes | Pagination state for a stable in-memory report result. |
| records | Yes | |
| metadata | Yes | Provenance and semantic metadata attached to dataset responses. |
| warnings | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations already declaring readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, the description adds substantial behavioral nuance: messages are 'official' and 'bounded', the classification is 'deterministic', raw published comments remain authoritative, and no event end is inferred. This communicates data provenance and interpretation caveats that annotations do not capture, and it does not contradict any annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, with the primary function in the first and the key caveats in the second. Every clause carries meaningful information, and there is no filler or repetition of schema content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has an output schema, rich annotations, and schema-described start/end parameters. The description adds the missing behavioral guarantees around data authority and event-end inference. Together, these give an agent everything needed to decide whether and how to invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is high for the top-level request parameter, and start/end carry timezone semantics in the schema itself. The description adds no parameter-level detail beyond that, which is acceptable given the schema already documents the important interval semantics. Limit and offset have no inline description, but their constraints and defaults are present in the schema, so a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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: 'Returns bounded official AIES Event Log messages'. It also adds a distinguishing behavior, 'deterministic descriptive classification', which tells an agent exactly what kind of data this tool returns and how it differs from the large set of sibling tools that fetch prices, loads, or generation data.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance on when to use this tool versus alternatives like analyze_market_event or find_price_events. The description does not mention when not to use it, what problems it is best suited for, or which sibling would be more appropriate for related event analysis. An agent must infer usage context entirely from the tool name and schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_system_marginal_pricesGet System Marginal PricesARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes | Request minute-level System Marginal Price (SMP) observations. |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | Yes | Pagination state for a stable in-memory report result. |
| metadata | Yes | Provenance and semantic metadata attached to dataset responses. |
| warnings | No | |
| intervals | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior, so the description does not need to restate those. It adds meaningful behavioral context beyond annotations: timestamps are in America/Edmonton, intervals are [start, end) with minute-level boundaries, and requests are limited to a 7-day range.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences with no filler. It front-loads the core purpose, then provides sibling differentiation, timezone, and range constraints, all of which are directly useful for invoking the tool correctly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only data retrieval tool with a rich output schema and strong annotations, the description covers everything needed: what is returned, units, interval semantics, timezone, maximum range, and how to route to a sibling tool. No critical behavioral information is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds extra meaning by clarifying the inclusive/exclusive interval semantics, the timezone interpretation, and the maximum range constraint, which supplements the schema's parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Returns'), a specific resource ('AESO System Marginal Price observations'), and clarifies the units (CAD/MWh) and interval semantics ([start, end)). It also differentiates from the closely related sibling get_pool_prices, so an agent can reliably distinguish this tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells the agent to prefer get_pool_prices when hourly settlement prices are needed, which provides a clear selection rule between the two most similar tools. It also states the timezone and maximum supported range, giving practical constraints for valid usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_tmr_reference_priceGet Tmr Reference PriceARead-onlyIdempotent
Returns the official AESO Transmission Must-Run reference price by effective date; the published value is returned without independent recomputation.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes | Optional date filter for the monthly TMR reference-price report. |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | Yes | Pagination state for a stable in-memory report result. |
| records | Yes | |
| metadata | Yes | Provenance and semantic metadata attached to dataset responses. |
| warnings | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly, openWorld, idempotent, and non-destructive behavior. The description adds meaningful context beyond those annotations: it returns the published AESO value 'without independent recomputation,' which tells the agent that the tool is authoritative and passthrough rather than calculated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that conveys the resource, scope, and a key behavioral trait without wasted words. It earns its place and avoids redundancy with the title and schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description, combined with a rich output schema, complete parameter schema coverage, and strong annotations, gives an agent everything needed to invoke this tool correctly. The monthly and effective-date context is clear, and the absence of return-value detail is acceptable because an output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents the request object and its date-filter purpose. The tool description adds the 'by effective date' framing but does not elaborate on limit/offset or date formats; with full schema coverage, the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Returns'), a specific resource ('official AESO Transmission Must-Run reference price'), and the key scoping dimension ('by effective date'). It is distinct from all siblings, which target different market data, and it clarifies that the value is the published official value rather than a recomputed estimate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for retrieving the official TMR reference price, but it does not explicitly state when to prefer this tool over alternatives or mention any exclusion criteria. The monthly report context in the schema provides some usage signal, but there is no direct when-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_uc_settlement_summaryGet Uc Settlement SummaryARead-onlyIdempotent
Returns the public AESO hourly Unit Commitment settlement amount in CAD and charged volume in MW for an inclusive market-date range.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes | Retrieve public UC settlement summary observations for a date range. |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | Yes | Pagination state for a stable in-memory report result. |
| metadata | Yes | Provenance and semantic metadata attached to dataset responses. |
| warnings | No | |
| intervals | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, openWorld, and non-destructive behavior. The description adds meaningful context beyond those: the data is public, hourly-grained, inclusive of the provided dates, and returns settlement amount plus charged volume. It does not detail pagination or timezone, but the annotations and output schema reduce the burden.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, compact sentence that front-loads the core result, granularity, units, and date-boundary semantics. There is no filler, redundancy, or unclear structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only, idempotent retrieval tool with a nested input schema, full schema coverage, and an output schema, this description is largely complete: it specifies the resource, units, data availability, granularity, and date inclusivity. It could add routing guidance relative to siblings, but the core invocation is fully actionable without it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already documents all parameters with defaults and bounds, so the baseline is 3. The description adds semantic value by specifying 'market-date' and 'inclusive' range behavior, which the bare schema fields do not convey. Limit and offset details remain in the schema, which is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Returns the public AESO hourly Unit Commitment settlement amount in CAD and charged volume in MW', bounded to an inclusive market-date range. It clearly communicates the exact metric and units, making the tool easy to distinguish from sibling market-data tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to prefer this tool over alternatives, nor does it mention the closely related get_unit_commitments or other sibling tools. The only contextual clue is the date range, which is already implied by the schema, so selection among the many siblings is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_unit_commitmentsGet Unit CommitmentsARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes | Request an inclusive AESO report-date range with bounded output pagination. |
Output Schema
| Name | Required | Description |
|---|---|---|
| page | Yes | Pagination state for a stable in-memory report result. |
| metadata | Yes | Provenance and semantic metadata attached to dataset responses. |
| warnings | No | |
| directives | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds valuable behavioral context beyond annotations: the inclusive date range, 31-day limit, pagination behavior, and the America/Edmonton timezone for timestamps. This helps an agent understand what to expect without contradicting the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, each providing necessary information: the first states the resource and core behavior, the second adds key constraints and timestamp details. There is no redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of a complete output schema and well-documented nested input schema, the description covers all essential operational details: what the tool returns, date-range handling, pagination bounds, and timestamp timezone. An agent has enough context to select and invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the nested 'request' object already describes an inclusive date range with bounded pagination. The description adds further semantic value by specifying the 31-day bound, pagination, and timezone context, which clarifies the intended use of start_date, end_date, limit, and offset beyond their basic schema definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Returns') and a specific resource ('AESO generating-unit commitment directives'), which clearly identifies what the tool does. It further distinguishes this tool from the large sibling list by focusing on commitment directives, a unique resource not covered by similarly named siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the intended use: request commitment directives within an inclusive date range, with pagination and a 31-day bound. However, it does not explicitly state when to prefer this tool over alternatives or mention any exclusions, such as when to use get_uc_settlement_summary instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
summarize_market_historySummarize Market HistoryARead-onlyIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes | Request compact server-side pool-price and load aggregation. |
Output Schema
| Name | Required | Description |
|---|---|---|
| buckets | Yes | |
| metadata | Yes | Provenance and semantic metadata attached to dataset responses. |
| warnings | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry the full safety profile (readOnlyHint=true, idempotentHint=true, destructiveHint=false), so the bar is lower. The description adds genuinely useful behavioral context beyond the annotations: the 400-bucket cap and the half-open [start, end) interval semantics. A minor gap is that the failure mode when the cap is exceeded (error vs. truncation) is not stated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with zero waste. The first sentence front-loads the core function (verb, resource, granularities, interval), and the second delivers usage guidance plus the critical cap. Every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema exists (return values needn't be explained), annotations cover safety, and schema covers 100% of parameters, the description is nearly complete. The main gaps are the unspecified cap-violation behavior and the lack of any mention of the similar sibling get_price_statistics, which an agent could confuse with this tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds meaning beyond the schema by clarifying that bucket granularity maps to Pool Price statistics, identifying 'load' as Alberta Internal Load (a detail absent from the schema's 'load aggregation' phrasing), and giving the 400-bucket constraint that bounds valid start/end spans. This modest but real added value warrants a 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb ('Returns') and names the exact resources: compact hourly/daily/weekly/monthly Pool Price statistics plus optional Alberta Internal Load statistics, with explicit [start, end) interval semantics. This clearly distinguishes it from raw-series siblings like get_pool_prices and get_load by framing it as the compact-statistics counterpart.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use this before requesting raw series for long periods' states a clear when-to-use context, and the 400-bucket cap implies the boundary condition where raw series become necessary. However, it never names the alternative tools explicitly (e.g., get_pool_prices, get_load, or the similar get_price_statistics), so the when-not guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
summarize_operating_reserve_marketSummarize Operating Reserve MarketBRead-onlyIdempotent
Summarizes active prices or standby clearing blended prices and volumes by reserve product; optionally joins standby activations using volume-weighted activation price.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | Yes | |
| metadata | Yes | Provenance and semantic metadata attached to dataset responses. |
| warnings | No | |
| methodology | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint false. The description adds meaningful behavioral context by explaining that results are aggregated by reserve product and that activations can optionally be joined using volume-weighted activation price, clarifying what the summarization actually computes.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense sentence and is mostly front-loaded with the core action. It is compact, but the phrasing is jargon-heavy and somewhat ambiguous, which prevents a top score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema and safety annotations reduce the burden of explaining return shape and side effects. However, for a nested request object with several schema-undocumented parameters and many sibling tools, the description still lacks guidance on date-range semantics and tool selection, making it only minimally complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for undocumented parameters. It partially clarifies reserve_types and include_activations, but it does not explain start_date, end_date, limit, or offset, leaving required parameters defined only by their schema types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies a specific action ('summarizes') and resource (operating_reserve_market), and specifies that it aggregates prices and volumes by reserve product. It does not explicitly distinguish itself from sibling tools such as get_operating_reserve_prices or get_operating_reserve_activations, and phrases like 'active prices or standby clearing blended prices' introduce some ambiguity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no explicit guidance on when to use this tool versus alternatives. It only implies a summarization use case, leaving the agent to infer the appropriate selection among many sibling market-data tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sync_historical_storeSync Historical StoreAIdempotent
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.
| Name | Required | Description | Default |
|---|---|---|---|
| request | Yes | Incrementally ingest supported datasets into DuckDB/Parquet. |
Output Schema
| Name | Required | Description |
|---|---|---|
| results | Yes | |
| metadata | Yes | Provenance and semantic metadata attached to dataset responses. |
| warnings | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds concrete behavioral context beyond annotations: incremental ingestion, write targets (DuckDB index and Parquet snapshots), reporting of gaps/duplicates, refreshing preliminary intervals, and a prerequisite (optional analytics dependencies). It does not contradict the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two efficient sentences with no filler: the first front-loads the core action and target, the second covers side effects and prerequisites. The first sentence is somewhat long but still scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers what the tool does, where it writes, side effects, and prerequisites. The output schema and annotations fill in return values and safety details. Minor ambiguity remains around 'refreshes preliminary intervals' and dataset specifics, but those are largely captured by the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with detailed start/end timezone and interval semantics, so the description does not need to add parameter-level detail. The description only names the dataset families, which is already reflected in the schema enum.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('incrementally ingests'), a precise resource ('AESO generation, pool-price, and load datasets into the configured local DuckDB index and partitioned Parquet snapshots'), and a distinct maintenance role. This clearly differentiates it from the read-only get_* and analyze_* sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this is the synchronization/ingestion tool for the local historical store, contrasting with the query-oriented siblings, but it never explicitly states when to use it, when not to, or that get_historical_store_status should be used to check coverage. No alternatives are named.
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.
57 tool updates
v0.3.0- Added
analyze_asset_dispatch - Added
analyze_forecast_error - Added
analyze_generation_mix - Added
analyze_intertie_utilization - Added
analyze_market_event - Added
analyze_net_load - Added
analyze_outage_impact - Added
analyze_ramps - Added
analyze_supply_stack - Added
analyze_supply_surplus_events - Changed
assess_supply_tightness6 fields changed- added
Output schema / properties / aeso_supply_adequacy_statusAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / aeso_supply_adequacy_status_codeAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / aeso_supply_cushion_codeAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / aeso_supply_cushion_mwAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / aeso_supply_cushion_statusAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null +} - changed
Output schema / properties / metadata / properties / provider / enumPrevious value: -[ - "gridstatus", - "aeso_apim", - "aeso_public_report", - "derived" -]New value: +[ + "gridstatus", + "aeso_apim", + "aeso_public_report", + "aeso_csd_archive", + "derived" +]
- Added
calculate_asset_energy_revenue - Added
calculate_capture_prices - Added
compare_csd_to_metered - Changed
compare_forecast_to_actual1 field changed- changed
Output schema / properties / metadata / properties / provider / enumPrevious value: -[ - "gridstatus", - "aeso_apim", - "aeso_public_report", - "derived" -]New value: +[ + "gridstatus", + "aeso_apim", + "aeso_public_report", + "aeso_csd_archive", + "derived" +]
- Changed
compare_market_periods1 field changed- changed
Output schema / properties / metadata / properties / provider / enumPrevious value: -[ - "gridstatus", - "aeso_apim", - "aeso_public_report", - "derived" -]New value: +[ + "gridstatus", + "aeso_apim", + "aeso_public_report", + "aeso_csd_archive", + "derived" +]
- Changed
explain_market_conditions1 field changed- changed
Output schema / properties / metadata / properties / provider / enumPrevious value: -[ - "gridstatus", - "aeso_apim", - "aeso_public_report", - "derived" -]New value: +[ + "gridstatus", + "aeso_apim", + "aeso_public_report", + "aeso_csd_archive", + "derived" +]
- Changed
find_price_events1 field changed- changed
Output schema / properties / metadata / properties / provider / enumPrevious value: -[ - "gridstatus", - "aeso_apim", - "aeso_public_report", - "derived" -]New value: +[ + "gridstatus", + "aeso_apim", + "aeso_public_report", + "aeso_csd_archive", + "derived" +]
- Changed
get_approved_transmission_outages1 field changed- changed
Output schema / properties / metadata / properties / provider / enumPrevious value: -[ - "gridstatus", - "aeso_apim", - "aeso_public_report", - "derived" -]New value: +[ + "gridstatus", + "aeso_apim", + "aeso_public_report", + "aeso_csd_archive", + "derived" +]
- Changed
get_assets1 field changed- changed
Output schema / properties / metadata / properties / provider / enumPrevious value: -[ - "gridstatus", - "aeso_apim", - "aeso_public_report", - "derived" -]New value: +[ + "gridstatus", + "aeso_apim", + "aeso_public_report", + "aeso_csd_archive", + "derived" +]
- Added
get_dispatch_down_service - Changed
get_energy_merit_order1 field changed- changed
Output schema / properties / metadata / properties / provider / enumPrevious value: -[ - "gridstatus", - "aeso_apim", - "aeso_public_report", - "derived" -]New value: +[ + "gridstatus", + "aeso_apim", + "aeso_public_report", + "aeso_csd_archive", + "derived" +]
- Added
get_ffr_net_schedule - Added
get_forecast - Changed
get_generation1 field changed- changed
Output schema / properties / metadata / properties / provider / enumPrevious value: -[ - "gridstatus", - "aeso_apim", - "aeso_public_report", - "derived" -]New value: +[ + "gridstatus", + "aeso_apim", + "aeso_public_report", + "aeso_csd_archive", + "derived" +]
- Changed
get_generation_capacity1 field changed- changed
Output schema / properties / metadata / properties / provider / enumPrevious value: -[ - "gridstatus", - "aeso_apim", - "aeso_public_report", - "derived" -]New value: +[ + "gridstatus", + "aeso_apim", + "aeso_public_report", + "aeso_csd_archive", + "derived" +]
- Added
get_historical_generation - Added
get_historical_store_status - Changed
get_interchange1 field changed- changed
Output schema / properties / metadata / properties / provider / enumPrevious value: -[ - "gridstatus", - "aeso_apim", - "aeso_public_report", - "derived" -]New value: +[ + "gridstatus", + "aeso_apim", + "aeso_public_report", + "aeso_csd_archive", + "derived" +]
- Changed
get_intertie_capability1 field changed- changed
Output schema / properties / metadata / properties / provider / enumPrevious value: -[ - "gridstatus", - "aeso_apim", - "aeso_public_report", - "derived" -]New value: +[ + "gridstatus", + "aeso_apim", + "aeso_public_report", + "aeso_csd_archive", + "derived" +]
- Changed
get_intertie_outages1 field changed- changed
Output schema / properties / metadata / properties / provider / enumPrevious value: -[ - "gridstatus", - "aeso_apim", - "aeso_public_report", - "derived" -]New value: +[ + "gridstatus", + "aeso_apim", + "aeso_public_report", + "aeso_csd_archive", + "derived" +]
- Changed
get_load1 field changed- changed
Output schema / properties / metadata / properties / provider / enumPrevious value: -[ - "gridstatus", - "aeso_apim", - "aeso_public_report", - "derived" -]New value: +[ + "gridstatus", + "aeso_apim", + "aeso_public_report", + "aeso_csd_archive", + "derived" +]
- Changed
get_load_outage_forecast1 field changed- changed
Output schema / properties / metadata / properties / provider / enumPrevious value: -[ - "gridstatus", - "aeso_apim", - "aeso_public_report", - "derived" -]New value: +[ + "gridstatus", + "aeso_apim", + "aeso_public_report", + "aeso_csd_archive", + "derived" +]
- Changed
get_long_range_transmission_outages1 field changed- changed
Output schema / properties / metadata / properties / provider / enumPrevious value: -[ - "gridstatus", - "aeso_apim", - "aeso_public_report", - "derived" -]New value: +[ + "gridstatus", + "aeso_apim", + "aeso_public_report", + "aeso_csd_archive", + "derived" +]
- Changed
get_market_snapshot1 field changed- changed
Output schema / properties / metadata / properties / provider / enumPrevious value: -[ - "gridstatus", - "aeso_apim", - "aeso_public_report", - "derived" -]New value: +[ + "gridstatus", + "aeso_apim", + "aeso_public_report", + "aeso_csd_archive", + "derived" +]
- Changed
get_metered_volumes1 field changed- changed
Output schema / properties / metadata / properties / provider / enumPrevious value: -[ - "gridstatus", - "aeso_apim", - "aeso_public_report", - "derived" -]New value: +[ + "gridstatus", + "aeso_apim", + "aeso_public_report", + "aeso_csd_archive", + "derived" +]
- Changed
get_monthly_cumulative_net_revenue1 field changed- changed
Output schema / properties / metadata / properties / provider / enumPrevious value: -[ - "gridstatus", - "aeso_apim", - "aeso_public_report", - "derived" -]New value: +[ + "gridstatus", + "aeso_apim", + "aeso_public_report", + "aeso_csd_archive", + "derived" +]
- Added
get_operating_reserve_activations - Added
get_operating_reserve_forecast - Changed
get_operating_reserve_offer_control1 field changed- changed
Output schema / properties / metadata / properties / provider / enumPrevious value: -[ - "gridstatus", - "aeso_apim", - "aeso_public_report", - "derived" -]New value: +[ + "gridstatus", + "aeso_apim", + "aeso_public_report", + "aeso_csd_archive", + "derived" +]
- Added
get_operating_reserve_prices - Changed
get_outages1 field changed- changed
Output schema / properties / metadata / properties / provider / enumPrevious value: -[ - "gridstatus", - "aeso_apim", - "aeso_public_report", - "derived" -]New value: +[ + "gridstatus", + "aeso_apim", + "aeso_public_report", + "aeso_csd_archive", + "derived" +]
- Changed
get_pool_prices1 field changed- changed
Output schema / properties / metadata / properties / provider / enumPrevious value: -[ - "gridstatus", - "aeso_apim", - "aeso_public_report", - "derived" -]New value: +[ + "gridstatus", + "aeso_apim", + "aeso_public_report", + "aeso_csd_archive", + "derived" +]
- Added
get_price_duration_curve - Added
get_price_statistics - Changed
get_reserves1 field changed- changed
Output schema / properties / metadata / properties / provider / enumPrevious value: -[ - "gridstatus", - "aeso_apim", - "aeso_public_report", - "derived" -]New value: +[ + "gridstatus", + "aeso_apim", + "aeso_public_report", + "aeso_csd_archive", + "derived" +]
- Changed
get_secondary_offer_price_limit1 field changed- changed
Output schema / properties / metadata / properties / provider / enumPrevious value: -[ - "gridstatus", - "aeso_apim", - "aeso_public_report", - "derived" -]New value: +[ + "gridstatus", + "aeso_apim", + "aeso_public_report", + "aeso_csd_archive", + "derived" +]
- Added
get_supply_adequacy - Added
get_supply_surplus - Added
get_system_events - Changed
get_system_marginal_prices1 field changed- changed
Output schema / properties / metadata / properties / provider / enumPrevious value: -[ - "gridstatus", - "aeso_apim", - "aeso_public_report", - "derived" -]New value: +[ + "gridstatus", + "aeso_apim", + "aeso_public_report", + "aeso_csd_archive", + "derived" +]
- Added
get_tmr_reference_price - Added
get_uc_settlement_summary - Changed
get_unit_commitments1 field changed- changed
Output schema / properties / metadata / properties / provider / enumPrevious value: -[ - "gridstatus", - "aeso_apim", - "aeso_public_report", - "derived" -]New value: +[ + "gridstatus", + "aeso_apim", + "aeso_public_report", + "aeso_csd_archive", + "derived" +]
- Changed
summarize_market_history1 field changed- changed
Output schema / properties / metadata / properties / provider / enumPrevious value: -[ - "gridstatus", - "aeso_apim", - "aeso_public_report", - "derived" -]New value: +[ + "gridstatus", + "aeso_apim", + "aeso_public_report", + "aeso_csd_archive", + "derived" +]
- Added
summarize_operating_reserve_market - Added
sync_historical_store
27 tool updates
v0.2.0- Added
assess_supply_tightness - Changed
compare_forecast_to_actual13 fields changed- added
Output schema / properties / metadata / properties / available_seriesAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / metadata / properties / cache_ageAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Age of the cached provider result in seconds when served." +} - added
Output schema / properties / metadata / properties / cache_hitAdded value: +{ + "default": false, + "type": "boolean" +} - added
Output schema / properties / metadata / properties / completenessAdded value: +{ + "default": "unknown", + "description": "Completeness of the requested observations or series.", + "enum": [ + "complete", + "partial", + "degraded", + "empty", + "unknown" + ], + "type": "string" +} - added
Output schema / properties / metadata / properties / expected_observation_countAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / metadata / properties / expected_observationsAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / metadata / properties / finalityAdded value: +{ + "default": "unknown", + "description": "Whether published observations are final or still preliminary.", + "enum": [ + "final", + "preliminary", + "unknown" + ], + "type": "string" +} - added
Output schema / properties / metadata / properties / missing_observation_countAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / metadata / properties / missing_observationsAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / metadata / properties / missing_seriesAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / metadata / properties / observation_typeAdded value: +{ + "default": "actual", + "description": "What kind of observation a response contains.\n\n``DataStatus`` predates this distinction and remains available for\ncompatibility. ``observation_type`` should be used when a client needs\nto distinguish an actual observation from a forecast or a derived value.", + "enum": [ + "actual", + "forecast", + "derived", + "unknown" + ], + "type": "string" +} - changed
Output schema / properties / metadata / properties / provider / enumPrevious value: -[ - "gridstatus", - "aeso_apim", - "derived" -]New value: +[ + "gridstatus", + "aeso_apim", + "aeso_public_report", + "derived" +] - added
Output schema / properties / metadata / properties / served_atAdded value: +{ + "anyOf": [ + { + "format": "date-time", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null +}
- Changed
compare_market_periods13 fields changed- added
Output schema / properties / metadata / properties / available_seriesAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / metadata / properties / cache_ageAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Age of the cached provider result in seconds when served." +} - added
Output schema / properties / metadata / properties / cache_hitAdded value: +{ + "default": false, + "type": "boolean" +} - added
Output schema / properties / metadata / properties / completenessAdded value: +{ + "default": "unknown", + "description": "Completeness of the requested observations or series.", + "enum": [ + "complete", + "partial", + "degraded", + "empty", + "unknown" + ], + "type": "string" +} - added
Output schema / properties / metadata / properties / expected_observation_countAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / metadata / properties / expected_observationsAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / metadata / properties / finalityAdded value: +{ + "default": "unknown", + "description": "Whether published observations are final or still preliminary.", + "enum": [ + "final", + "preliminary", + "unknown" + ], + "type": "string" +} - added
Output schema / properties / metadata / properties / missing_observation_countAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / metadata / properties / missing_observationsAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / metadata / properties / missing_seriesAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / metadata / properties / observation_typeAdded value: +{ + "default": "actual", + "description": "What kind of observation a response contains.\n\n``DataStatus`` predates this distinction and remains available for\ncompatibility. ``observation_type`` should be used when a client needs\nto distinguish an actual observation from a forecast or a derived value.", + "enum": [ + "actual", + "forecast", + "derived", + "unknown" + ], + "type": "string" +} - changed
Output schema / properties / metadata / properties / provider / enumPrevious value: -[ - "gridstatus", - "aeso_apim", - "derived" -]New value: +[ + "gridstatus", + "aeso_apim", + "aeso_public_report", + "derived" +] - added
Output schema / properties / metadata / properties / served_atAdded value: +{ + "anyOf": [ + { + "format": "date-time", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null +}
- Changed
explain_market_conditions13 fields changed- added
Output schema / properties / metadata / properties / available_seriesAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / metadata / properties / cache_ageAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Age of the cached provider result in seconds when served." +} - added
Output schema / properties / metadata / properties / cache_hitAdded value: +{ + "default": false, + "type": "boolean" +} - added
Output schema / properties / metadata / properties / completenessAdded value: +{ + "default": "unknown", + "description": "Completeness of the requested observations or series.", + "enum": [ + "complete", + "partial", + "degraded", + "empty", + "unknown" + ], + "type": "string" +} - added
Output schema / properties / metadata / properties / expected_observation_countAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / metadata / properties / expected_observationsAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / metadata / properties / finalityAdded value: +{ + "default": "unknown", + "description": "Whether published observations are final or still preliminary.", + "enum": [ + "final", + "preliminary", + "unknown" + ], + "type": "string" +} - added
Output schema / properties / metadata / properties / missing_observation_countAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / metadata / properties / missing_observationsAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / metadata / properties / missing_seriesAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / metadata / properties / observation_typeAdded value: +{ + "default": "actual", + "description": "What kind of observation a response contains.\n\n``DataStatus`` predates this distinction and remains available for\ncompatibility. ``observation_type`` should be used when a client needs\nto distinguish an actual observation from a forecast or a derived value.", + "enum": [ + "actual", + "forecast", + "derived", + "unknown" + ], + "type": "string" +} - changed
Output schema / properties / metadata / properties / provider / enumPrevious value: -[ - "gridstatus", - "aeso_apim", - "derived" -]New value: +[ + "gridstatus", + "aeso_apim", + "aeso_public_report", + "derived" +] - added
Output schema / properties / metadata / properties / served_atAdded value: +{ + "anyOf": [ + { + "format": "date-time", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null +}
- Changed
find_price_events13 fields changed- added
Output schema / properties / metadata / properties / available_seriesAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / metadata / properties / cache_ageAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Age of the cached provider result in seconds when served." +} - added
Output schema / properties / metadata / properties / cache_hitAdded value: +{ + "default": false, + "type": "boolean" +} - added
Output schema / properties / metadata / properties / completenessAdded value: +{ + "default": "unknown", + "description": "Completeness of the requested observations or series.", + "enum": [ + "complete", + "partial", + "degraded", + "empty", + "unknown" + ], + "type": "string" +} - added
Output schema / properties / metadata / properties / expected_observation_countAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / metadata / properties / expected_observationsAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / metadata / properties / finalityAdded value: +{ + "default": "unknown", + "description": "Whether published observations are final or still preliminary.", + "enum": [ + "final", + "preliminary", + "unknown" + ], + "type": "string" +} - added
Output schema / properties / metadata / properties / missing_observation_countAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / metadata / properties / missing_observationsAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / metadata / properties / missing_seriesAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / metadata / properties / observation_typeAdded value: +{ + "default": "actual", + "description": "What kind of observation a response contains.\n\n``DataStatus`` predates this distinction and remains available for\ncompatibility. ``observation_type`` should be used when a client needs\nto distinguish an actual observation from a forecast or a derived value.", + "enum": [ + "actual", + "forecast", + "derived", + "unknown" + ], + "type": "string" +} - changed
Output schema / properties / metadata / properties / provider / enumPrevious value: -[ - "gridstatus", - "aeso_apim", - "derived" -]New value: +[ + "gridstatus", + "aeso_apim", + "aeso_public_report", + "derived" +] - added
Output schema / properties / metadata / properties / served_atAdded value: +{ + "anyOf": [ + { + "format": "date-time", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null +}
- Added
get_approved_transmission_outages - Changed
get_assets13 fields changed- added
Output schema / properties / metadata / properties / available_seriesAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / metadata / properties / cache_ageAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Age of the cached provider result in seconds when served." +} - added
Output schema / properties / metadata / properties / cache_hitAdded value: +{ + "default": false, + "type": "boolean" +} - added
Output schema / properties / metadata / properties / completenessAdded value: +{ + "default": "unknown", + "description": "Completeness of the requested observations or series.", + "enum": [ + "complete", + "partial", + "degraded", + "empty", + "unknown" + ], + "type": "string" +} - added
Output schema / properties / metadata / properties / expected_observation_countAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / metadata / properties / expected_observationsAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / metadata / properties / finalityAdded value: +{ + "default": "unknown", + "description": "Whether published observations are final or still preliminary.", + "enum": [ + "final", + "preliminary", + "unknown" + ], + "type": "string" +} - added
Output schema / properties / metadata / properties / missing_observation_countAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / metadata / properties / missing_observationsAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / metadata / properties / missing_seriesAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / metadata / properties / observation_typeAdded value: +{ + "default": "actual", + "description": "What kind of observation a response contains.\n\n``DataStatus`` predates this distinction and remains available for\ncompatibility. ``observation_type`` should be used when a client needs\nto distinguish an actual observation from a forecast or a derived value.", + "enum": [ + "actual", + "forecast", + "derived", + "unknown" + ], + "type": "string" +} - changed
Output schema / properties / metadata / properties / provider / enumPrevious value: -[ - "gridstatus", - "aeso_apim", - "derived" -]New value: +[ + "gridstatus", + "aeso_apim", + "aeso_public_report", + "derived" +] - added
Output schema / properties / metadata / properties / served_atAdded value: +{ + "anyOf": [ + { + "format": "date-time", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null +}
- Added
get_energy_merit_order - Changed
get_generation17 fields changed- added
Input schema / properties / request / properties / limitAdded value: +{ + "default": 500, + "maximum": 2000, + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / request / properties / offsetAdded value: +{ + "default": 0, + "minimum": 0, + "type": "integer" +} - added
Output schema / properties / metadata / properties / available_seriesAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / metadata / properties / cache_ageAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Age of the cached provider result in seconds when served." +} - added
Output schema / properties / metadata / properties / cache_hitAdded value: +{ + "default": false, + "type": "boolean" +} - added
Output schema / properties / metadata / properties / completenessAdded value: +{ + "default": "unknown", + "description": "Completeness of the requested observations or series.", + "enum": [ + "complete", + "partial", + "degraded", + "empty", + "unknown" + ], + "type": "string" +} - added
Output schema / properties / metadata / properties / expected_observation_countAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / metadata / properties / expected_observationsAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / metadata / properties / finalityAdded value: +{ + "default": "unknown", + "description": "Whether published observations are final or still preliminary.", + "enum": [ + "final", + "preliminary", + "unknown" + ], + "type": "string" +} - added
Output schema / properties / metadata / properties / missing_observation_countAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / metadata / properties / missing_observationsAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / metadata / properties / missing_seriesAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / metadata / properties / observation_typeAdded value: +{ + "default": "actual", + "description": "What kind of observation a response contains.\n\n``DataStatus`` predates this distinction and remains available for\ncompatibility. ``observation_type`` should be used when a client needs\nto distinguish an actual observation from a forecast or a derived value.", + "enum": [ + "actual", + "forecast", + "derived", + "unknown" + ], + "type": "string" +} - changed
Output schema / properties / metadata / properties / provider / enumPrevious value: -[ - "gridstatus", - "aeso_apim", - "derived" -]New value: +[ + "gridstatus", + "aeso_apim", + "aeso_public_report", + "derived" +] - added
Output schema / properties / metadata / properties / served_atAdded value: +{ + "anyOf": [ + { + "format": "date-time", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / pageAdded value: +{ + "additionalProperties": false, + "description": "Pagination state for a stable in-memory report result.", + "properties": { + "limit": { + "type": "integer" + }, + "next_offset": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "offset": { + "type": "integer" + }, + "returned": { + "type": "integer" + }, + "total": { + "type": "integer" + } + }, + "required": [ + "offset", + "limit", + "returned", + "total" + ], + "type": "object" +} - changed
Output schema / requiredPrevious value: -[ - "metadata" -]New value: +[ + "page", + "metadata" +]
- Added
get_generation_capacity - Changed
get_interchange13 fields changed- added
Output schema / properties / metadata / properties / available_seriesAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / metadata / properties / cache_ageAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Age of the cached provider result in seconds when served." +} - added
Output schema / properties / metadata / properties / cache_hitAdded value: +{ + "default": false, + "type": "boolean" +} - added
Output schema / properties / metadata / properties / completenessAdded value: +{ + "default": "unknown", + "description": "Completeness of the requested observations or series.", + "enum": [ + "complete", + "partial", + "degraded", + "empty", + "unknown" + ], + "type": "string" +} - added
Output schema / properties / metadata / properties / expected_observation_countAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / metadata / properties / expected_observationsAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / metadata / properties / finalityAdded value: +{ + "default": "unknown", + "description": "Whether published observations are final or still preliminary.", + "enum": [ + "final", + "preliminary", + "unknown" + ], + "type": "string" +} - added
Output schema / properties / metadata / properties / missing_observation_countAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / metadata / properties / missing_observationsAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / metadata / properties / missing_seriesAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / metadata / properties / observation_typeAdded value: +{ + "default": "actual", + "description": "What kind of observation a response contains.\n\n``DataStatus`` predates this distinction and remains available for\ncompatibility. ``observation_type`` should be used when a client needs\nto distinguish an actual observation from a forecast or a derived value.", + "enum": [ + "actual", + "forecast", + "derived", + "unknown" + ], + "type": "string" +} - changed
Output schema / properties / metadata / properties / provider / enumPrevious value: -[ - "gridstatus", - "aeso_apim", - "derived" -]New value: +[ + "gridstatus", + "aeso_apim", + "aeso_public_report", + "derived" +] - added
Output schema / properties / metadata / properties / served_atAdded value: +{ + "anyOf": [ + { + "format": "date-time", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null +}
- Added
get_intertie_capability - Added
get_intertie_outages - Changed
get_load17 fields changed- added
Input schema / properties / request / properties / limitAdded value: +{ + "default": 500, + "maximum": 2000, + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / request / properties / offsetAdded value: +{ + "default": 0, + "minimum": 0, + "type": "integer" +} - added
Output schema / properties / metadata / properties / available_seriesAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / metadata / properties / cache_ageAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Age of the cached provider result in seconds when served." +} - added
Output schema / properties / metadata / properties / cache_hitAdded value: +{ + "default": false, + "type": "boolean" +} - added
Output schema / properties / metadata / properties / completenessAdded value: +{ + "default": "unknown", + "description": "Completeness of the requested observations or series.", + "enum": [ + "complete", + "partial", + "degraded", + "empty", + "unknown" + ], + "type": "string" +} - added
Output schema / properties / metadata / properties / expected_observation_countAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / metadata / properties / expected_observationsAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / metadata / properties / finalityAdded value: +{ + "default": "unknown", + "description": "Whether published observations are final or still preliminary.", + "enum": [ + "final", + "preliminary", + "unknown" + ], + "type": "string" +} - added
Output schema / properties / metadata / properties / missing_observation_countAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / metadata / properties / missing_observationsAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / metadata / properties / missing_seriesAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / metadata / properties / observation_typeAdded value: +{ + "default": "actual", + "description": "What kind of observation a response contains.\n\n``DataStatus`` predates this distinction and remains available for\ncompatibility. ``observation_type`` should be used when a client needs\nto distinguish an actual observation from a forecast or a derived value.", + "enum": [ + "actual", + "forecast", + "derived", + "unknown" + ], + "type": "string" +} - changed
Output schema / properties / metadata / properties / provider / enumPrevious value: -[ - "gridstatus", - "aeso_apim", - "derived" -]New value: +[ + "gridstatus", + "aeso_apim", + "aeso_public_report", + "derived" +] - added
Output schema / properties / metadata / properties / served_atAdded value: +{ + "anyOf": [ + { + "format": "date-time", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / pageAdded value: +{ + "additionalProperties": false, + "description": "Pagination state for a stable in-memory report result.", + "properties": { + "limit": { + "type": "integer" + }, + "next_offset": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "offset": { + "type": "integer" + }, + "returned": { + "type": "integer" + }, + "total": { + "type": "integer" + } + }, + "required": [ + "offset", + "limit", + "returned", + "total" + ], + "type": "object" +} - changed
Output schema / requiredPrevious value: -[ - "intervals", - "metadata" -]New value: +[ + "intervals", + "page", + "metadata" +]
- Added
get_load_outage_forecast - Added
get_long_range_transmission_outages - Changed
get_market_snapshot13 fields changed- added
Output schema / properties / metadata / properties / available_seriesAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / metadata / properties / cache_ageAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Age of the cached provider result in seconds when served." +} - added
Output schema / properties / metadata / properties / cache_hitAdded value: +{ + "default": false, + "type": "boolean" +} - added
Output schema / properties / metadata / properties / completenessAdded value: +{ + "default": "unknown", + "description": "Completeness of the requested observations or series.", + "enum": [ + "complete", + "partial", + "degraded", + "empty", + "unknown" + ], + "type": "string" +} - added
Output schema / properties / metadata / properties / expected_observation_countAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / metadata / properties / expected_observationsAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / metadata / properties / finalityAdded value: +{ + "default": "unknown", + "description": "Whether published observations are final or still preliminary.", + "enum": [ + "final", + "preliminary", + "unknown" + ], + "type": "string" +} - added
Output schema / properties / metadata / properties / missing_observation_countAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / metadata / properties / missing_observationsAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / metadata / properties / missing_seriesAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / metadata / properties / observation_typeAdded value: +{ + "default": "actual", + "description": "What kind of observation a response contains.\n\n``DataStatus`` predates this distinction and remains available for\ncompatibility. ``observation_type`` should be used when a client needs\nto distinguish an actual observation from a forecast or a derived value.", + "enum": [ + "actual", + "forecast", + "derived", + "unknown" + ], + "type": "string" +} - changed
Output schema / properties / metadata / properties / provider / enumPrevious value: -[ - "gridstatus", - "aeso_apim", - "derived" -]New value: +[ + "gridstatus", + "aeso_apim", + "aeso_public_report", + "derived" +] - added
Output schema / properties / metadata / properties / served_atAdded value: +{ + "anyOf": [ + { + "format": "date-time", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null +}
- Added
get_metered_volumes - Added
get_monthly_cumulative_net_revenue - Added
get_operating_reserve_offer_control - Changed
get_outages36 fields changed- changed
Input schema / properties / request / descriptionPrevious value: -"Request generator outage reports."New value: +"Request hourly generator outage capacity by fuel/technology." - changed
Output schema / descriptionPrevious value: -"Generator outage observations."New value: +"Hourly generator outage capacity by technology/fuel." - added
Output schema / properties / metadata / properties / available_seriesAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / metadata / properties / cache_ageAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Age of the cached provider result in seconds when served." +} - added
Output schema / properties / metadata / properties / cache_hitAdded value: +{ + "default": false, + "type": "boolean" +} - added
Output schema / properties / metadata / properties / completenessAdded value: +{ + "default": "unknown", + "description": "Completeness of the requested observations or series.", + "enum": [ + "complete", + "partial", + "degraded", + "empty", + "unknown" + ], + "type": "string" +} - added
Output schema / properties / metadata / properties / expected_observation_countAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / metadata / properties / expected_observationsAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / metadata / properties / finalityAdded value: +{ + "default": "unknown", + "description": "Whether published observations are final or still preliminary.", + "enum": [ + "final", + "preliminary", + "unknown" + ], + "type": "string" +} - added
Output schema / properties / metadata / properties / missing_observation_countAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / metadata / properties / missing_observationsAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / metadata / properties / missing_seriesAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / metadata / properties / observation_typeAdded value: +{ + "default": "actual", + "description": "What kind of observation a response contains.\n\n``DataStatus`` predates this distinction and remains available for\ncompatibility. ``observation_type`` should be used when a client needs\nto distinguish an actual observation from a forecast or a derived value.", + "enum": [ + "actual", + "forecast", + "derived", + "unknown" + ], + "type": "string" +} - changed
Output schema / properties / metadata / properties / provider / enumPrevious value: -[ - "gridstatus", - "aeso_apim", - "derived" -]New value: +[ + "gridstatus", + "aeso_apim", + "aeso_public_report", + "derived" +] - added
Output schema / properties / metadata / properties / served_atAdded value: +{ + "anyOf": [ + { + "format": "date-time", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null +} - changed
Output schema / properties / outages / items / descriptionPrevious value: -"One generator outage observation."New value: +"Aggregated hourly generator outage capacity (GridStatus AESO shape)." - removed
Output schema / properties / outages / items / properties / asset_idRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null -} - removed
Output schema / properties / outages / items / properties / asset_nameRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null -} - added
Output schema / properties / outages / items / properties / biomass_and_other_mwAdded value: +{ + "default": 0, + "type": "number" +} - added
Output schema / properties / outages / items / properties / coal_mwAdded value: +{ + "default": 0, + "type": "number" +} - added
Output schema / properties / outages / items / properties / cogeneration_mwAdded value: +{ + "default": 0, + "type": "number" +} - added
Output schema / properties / outages / items / properties / combined_cycle_mwAdded value: +{ + "default": 0, + "type": "number" +} - added
Output schema / properties / outages / items / properties / energy_storage_mwAdded value: +{ + "default": 0, + "type": "number" +} - removed
Output schema / properties / outages / items / properties / fuel_typeRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null -} - added
Output schema / properties / outages / items / properties / gas_fired_steam_mwAdded value: +{ + "default": 0, + "type": "number" +} - added
Output schema / properties / outages / items / properties / hydro_mwAdded value: +{ + "default": 0, + "type": "number" +} - removed
Output schema / properties / outages / items / properties / maximum_capability_mwRemoved value: -{ - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null -} - added
Output schema / properties / outages / items / properties / mothball_outage_mwAdded value: +{ + "default": 0, + "type": "number" +} - removed
Output schema / properties / outages / items / properties / outage_mwRemoved value: -{ - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null -} - added
Output schema / properties / outages / items / properties / publication_timeAdded value: +{ + "anyOf": [ + { + "format": "date-time", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null +} - removed
Output schema / properties / outages / items / properties / rawRemoved value: -{ - "additionalProperties": { - "anyOf": [ - { - "type": "string" - }, - { - "type": "number" - }, - { - "type": "integer" - }, - { - "type": "null" - } - ] - }, - "type": "object" -} - added
Output schema / properties / outages / items / properties / simple_cycle_mwAdded value: +{ + "default": 0, + "type": "number" +} - added
Output schema / properties / outages / items / properties / solar_mwAdded value: +{ + "default": 0, + "type": "number" +} - added
Output schema / properties / outages / items / properties / total_outage_mwAdded value: +{ + "type": "number" +} - added
Output schema / properties / outages / items / properties / wind_mwAdded value: +{ + "default": 0, + "type": "number" +} - changed
Output schema / properties / outages / items / requiredPrevious value: -[ - "interval_start" -]New value: +[ + "interval_start", + "total_outage_mw" +]
- Changed
get_pool_prices17 fields changed- added
Input schema / properties / request / properties / limitAdded value: +{ + "default": 500, + "maximum": 2000, + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / request / properties / offsetAdded value: +{ + "default": 0, + "minimum": 0, + "type": "integer" +} - added
Output schema / properties / metadata / properties / available_seriesAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / metadata / properties / cache_ageAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Age of the cached provider result in seconds when served." +} - added
Output schema / properties / metadata / properties / cache_hitAdded value: +{ + "default": false, + "type": "boolean" +} - added
Output schema / properties / metadata / properties / completenessAdded value: +{ + "default": "unknown", + "description": "Completeness of the requested observations or series.", + "enum": [ + "complete", + "partial", + "degraded", + "empty", + "unknown" + ], + "type": "string" +} - added
Output schema / properties / metadata / properties / expected_observation_countAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / metadata / properties / expected_observationsAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / metadata / properties / finalityAdded value: +{ + "default": "unknown", + "description": "Whether published observations are final or still preliminary.", + "enum": [ + "final", + "preliminary", + "unknown" + ], + "type": "string" +} - added
Output schema / properties / metadata / properties / missing_observation_countAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / metadata / properties / missing_observationsAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / metadata / properties / missing_seriesAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / metadata / properties / observation_typeAdded value: +{ + "default": "actual", + "description": "What kind of observation a response contains.\n\n``DataStatus`` predates this distinction and remains available for\ncompatibility. ``observation_type`` should be used when a client needs\nto distinguish an actual observation from a forecast or a derived value.", + "enum": [ + "actual", + "forecast", + "derived", + "unknown" + ], + "type": "string" +} - changed
Output schema / properties / metadata / properties / provider / enumPrevious value: -[ - "gridstatus", - "aeso_apim", - "derived" -]New value: +[ + "gridstatus", + "aeso_apim", + "aeso_public_report", + "derived" +] - added
Output schema / properties / metadata / properties / served_atAdded value: +{ + "anyOf": [ + { + "format": "date-time", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / pageAdded value: +{ + "additionalProperties": false, + "description": "Pagination state for a stable in-memory report result.", + "properties": { + "limit": { + "type": "integer" + }, + "next_offset": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "offset": { + "type": "integer" + }, + "returned": { + "type": "integer" + }, + "total": { + "type": "integer" + } + }, + "required": [ + "offset", + "limit", + "returned", + "total" + ], + "type": "object" +} - changed
Output schema / requiredPrevious value: -[ - "intervals", - "metadata" -]New value: +[ + "intervals", + "page", + "metadata" +]
- Changed
get_reserves13 fields changed- added
Output schema / properties / metadata / properties / available_seriesAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / metadata / properties / cache_ageAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Age of the cached provider result in seconds when served." +} - added
Output schema / properties / metadata / properties / cache_hitAdded value: +{ + "default": false, + "type": "boolean" +} - added
Output schema / properties / metadata / properties / completenessAdded value: +{ + "default": "unknown", + "description": "Completeness of the requested observations or series.", + "enum": [ + "complete", + "partial", + "degraded", + "empty", + "unknown" + ], + "type": "string" +} - added
Output schema / properties / metadata / properties / expected_observation_countAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / metadata / properties / expected_observationsAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / metadata / properties / finalityAdded value: +{ + "default": "unknown", + "description": "Whether published observations are final or still preliminary.", + "enum": [ + "final", + "preliminary", + "unknown" + ], + "type": "string" +} - added
Output schema / properties / metadata / properties / missing_observation_countAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / metadata / properties / missing_observationsAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / metadata / properties / missing_seriesAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / metadata / properties / observation_typeAdded value: +{ + "default": "actual", + "description": "What kind of observation a response contains.\n\n``DataStatus`` predates this distinction and remains available for\ncompatibility. ``observation_type`` should be used when a client needs\nto distinguish an actual observation from a forecast or a derived value.", + "enum": [ + "actual", + "forecast", + "derived", + "unknown" + ], + "type": "string" +} - changed
Output schema / properties / metadata / properties / provider / enumPrevious value: -[ - "gridstatus", - "aeso_apim", - "derived" -]New value: +[ + "gridstatus", + "aeso_apim", + "aeso_public_report", + "derived" +] - added
Output schema / properties / metadata / properties / served_atAdded value: +{ + "anyOf": [ + { + "format": "date-time", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null +}
- Added
get_secondary_offer_price_limit - Changed
get_system_marginal_prices17 fields changed- added
Input schema / properties / request / properties / limitAdded value: +{ + "default": 500, + "maximum": 2000, + "minimum": 1, + "type": "integer" +} - added
Input schema / properties / request / properties / offsetAdded value: +{ + "default": 0, + "minimum": 0, + "type": "integer" +} - added
Output schema / properties / metadata / properties / available_seriesAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / metadata / properties / cache_ageAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Age of the cached provider result in seconds when served." +} - added
Output schema / properties / metadata / properties / cache_hitAdded value: +{ + "default": false, + "type": "boolean" +} - added
Output schema / properties / metadata / properties / completenessAdded value: +{ + "default": "unknown", + "description": "Completeness of the requested observations or series.", + "enum": [ + "complete", + "partial", + "degraded", + "empty", + "unknown" + ], + "type": "string" +} - added
Output schema / properties / metadata / properties / expected_observation_countAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / metadata / properties / expected_observationsAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / metadata / properties / finalityAdded value: +{ + "default": "unknown", + "description": "Whether published observations are final or still preliminary.", + "enum": [ + "final", + "preliminary", + "unknown" + ], + "type": "string" +} - added
Output schema / properties / metadata / properties / missing_observation_countAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / metadata / properties / missing_observationsAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / metadata / properties / missing_seriesAdded value: +{ + "items": { + "type": "string" + }, + "type": "array" +} - added
Output schema / properties / metadata / properties / observation_typeAdded value: +{ + "default": "actual", + "description": "What kind of observation a response contains.\n\n``DataStatus`` predates this distinction and remains available for\ncompatibility. ``observation_type`` should be used when a client needs\nto distinguish an actual observation from a forecast or a derived value.", + "enum": [ + "actual", + "forecast", + "derived", + "unknown" + ], + "type": "string" +} - changed
Output schema / properties / metadata / properties / provider / enumPrevious value: -[ - "gridstatus", - "aeso_apim", - "derived" -]New value: +[ + "gridstatus", + "aeso_apim", + "aeso_public_report", + "derived" +] - added
Output schema / properties / metadata / properties / served_atAdded value: +{ + "anyOf": [ + { + "format": "date-time", + "type": "string" + }, + { + "type": "null" + } + ], + "default": null +} - added
Output schema / properties / pageAdded value: +{ + "additionalProperties": false, + "description": "Pagination state for a stable in-memory report result.", + "properties": { + "limit": { + "type": "integer" + }, + "next_offset": { + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null + }, + "offset": { + "type": "integer" + }, + "returned": { + "type": "integer" + }, + "total": { + "type": "integer" + } + }, + "required": [ + "offset", + "limit", + "returned", + "total" + ], + "type": "object" +} - changed
Output schema / requiredPrevious value: -[ - "intervals", - "metadata" -]New value: +[ + "intervals", + "page", + "metadata" +]
- Added
get_unit_commitments - Added
summarize_market_history
13 tool updates
v0.1.1- First observed
compare_forecast_to_actual - First observed
compare_market_periods - First observed
explain_market_conditions - First observed
find_price_events - First observed
get_assets - First observed
get_generation - First observed
get_interchange - First observed
get_load - First observed
get_market_snapshot - First observed
get_outages - First observed
get_pool_prices - First observed
get_reserves - First observed
get_system_marginal_prices
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.
Maintenance
Related MCP Connectors
Protocol-native energy infrastructure orchestration for AI data centers. Provides 46 MCP tools across 8 grid protocols (IEC-61850, DNP3, Modbus, OCPP, OpenADR, IEEE 2030.5, IEC 60870-5-104, ICCP) with 5 core API primitives: connect, dispatch, settle, comply, and intel. Enables AI agents to programmatically interact with substations, grid interfaces, and energy assets for real-time workload-grid coordination.
Query Australia's electricity market (NEM/AEMO): prices, generation, FCAS, interconnectors, bids.
Transmission market data and TSR actions (MISO/SPP OASIS) from the PowerStation trading platform.
Real-time electricity prices for AI agents. 40+ countries, 100+ zones. No auth required.
Related MCP Servers
- AlicenseAqualityBmaintenanceOne-call Australian energy-market plumbing via AEMO — cited, structured responses for market data and analysis, not a data broker.5172 PyPIMIT
- AlicenseBqualityDmaintenanceConnects AI agents to energy infrastructure with 30+ tools for managing sites, assets, dispatch, settlements, compliance, and carbon tracking.3423 npm1MIT
- AlicenseBqualityAmaintenanceProvides real-time European and GB electricity grid data via MCP, including generation, prices, carbon intensity, and grid infrastructure.4445 npm6MIT
- FlicenseNot gradedqualityCmaintenanceA read-only MCP server that exposes European day-ahead electricity prices for ~41 bidding zones via tools like hourly prices, cheapest hours, current price, and cross-zone summary, enabling AI agents to query energy market data.1-