How an AI Agent Answers a Grid Question: A Real Trace
A catalog-to-query trace behind an ERCOT price comparison: the dataset, the time semantics, the returned rows and the failures an agent has to keep visible.
July 23, 20267 min read
Revised October 19, 2026. Original publication date retained.
Ask a grid agent why North and West Hub prices separated on September 17 and the first useful output isn’t an explanation. It is a choice of evidence: which price product, which two locations, which dispatch run, and which records could connect the difference to a constraint.
The trace below ran through Ask the Grid’s catalog and read-only query tools using public data. It returned North Hub at $499.60/MWh and West Hub at $15.60/MWh for one SCED timestamp. The subtraction is elementary, and keeping the product, the clock and the evidence boundary intact is the hard part.
01
Step 1–2: discover the dataset, then read its contract
The research began with search_data for ERCOT real-time prices and binding constraints and selected ercot_prices_rt. describe_data then returned the exact table, atg.ercot_prices_rt, its key (event_time × location_id × kind), UTC interval-start timestamps, and price, energy and congestion columns in dollars per MWh.

The contract also says revisions are already collapsed, so adding another deduplication step wouldn’t improve the result. It distinguishes settlement-point locations from electrical buses and warns that a price difference alone doesn’t identify the facility responsible.
This series holds five-minute SCED LMPs. ERCOT’s fifteen-minute settlement point prices are a different product, and the distinction belongs in the dataset choice, before any arithmetic.
02
Step 3–4: resolve the locations and pin one dispatch run
ercot_locations returned HB_NORTH and HB_WEST as hubs, and the query uses those exact identifiers. It selects one timestamp instead of taking each location’s latest value, which could compare two different dispatch runs.
The executed request returned 74 rows, one per hub at 37 shared dispatch timestamps over three hours. The table pulls the two rows at 23:15:26 UTC. The bounded time predicate avoids scanning full price history, and nothing about customer positions or private topology is needed.
SELECT event_time, location_id, price_usd_mwh,
energy_usd_mwh, congestion_usd_mwh
FROM atg.ercot_prices_rt
WHERE event_time >= '2026-09-17 22:00:00'
AND event_time < '2026-09-18 01:00:00'
AND kind='hub'
AND location_id IN ('HB_NORTH','HB_WEST')
ORDER BY event_time,location_id
LIMIT 100| Location | SCED LMP | Energy | Congestion |
|---|---|---|---|
| HB_NORTH | $499.60 | $328.14307 | $171.45693 |
| HB_WEST | $15.60 | $328.14307 | −$312.54307 |
03
Step 5: calculate only what the rows support
The agent can compute a $484/MWh North-minus-West difference, check that energy cancels, and say the difference is congestion in ERCOT’s price decomposition. Those are direct calculations from returned records.
Naming exposure to a specific constraint takes more calls: the binding constraint and contingency records, and a completed, dated sensitivity run. The full event reconstruction keeps observed rows apart from the estimated attribution, and a nearby line on a map is no substitute for that evidence.
A useful result names its source and unit, shows its calculation, and says whether its next conclusion is observed or estimated. The tool trace is what makes those transitions inspectable.
04
Keep failures visible
The captured trace also contains failed follow-up calls: one connection timeout and one internal service error. Neither is an empty result, and neither shows the data is absent. Nor do they demonstrate an authorization refusal.
A good agent interface distinguishes a successful zero-row query, an unsupported request, an access refusal and an unavailable service. Substituting a plausible answer for any of them loses the evidence boundary.
The documented query surface is read-only and market-scoped. That limits database access, but it doesn’t on its own protect against prompt injection or disclosure through another tool, and instructions found inside documents can’t grant permission to create alerts, change saved state or send information out.
05
Historical questions need a decision clock
A forecast published at 5:55 p.m. for a 6 p.m. target can’t be used to evaluate an 8 a.m. choice. The query needs the decision cutoff, the availability boundary and the required lead time before it picks one vintage.
The forecast-vintage example shows a 653 MW difference caused by selecting later information. A catalog contract can describe these semantics, and the analyst still has to write the query that answers the intended decision.
To run this yourself, the MCP connection guide covers client setup and authorization, and the developer platform documents the integration surface.