Great Britain Electricity Generation Mix by Fuel, Half-Hourly
nesodata/generation-mix
Great Britain's electricity supply by fuel, half hour by half hour, between two UTC timestamps, from 2009 to about an hour and a half ago: gas, coal, nuclear, wind (and embedded wind), hydro, biomass, solar, storage, other, and interconnector imports, in average megawatts, plus the total, NESO's carbon intensity in gCO2/kWh, and the low-carbon, renewable and fossil totals with their percentages. Oldest first, at most 500 rows. The total includes imports and storage, `RENEWABLE` includes storage, and the series carries no gaps. Supported by National Energy SO Open Data. Reused under the NESO Open Data Licence; Omnial is not an official NESO product and NESO does not endorse it.
Price
$0.0026 per call
You pay the price shown. If a call turns out to cost more than its quote, you pay the actual price, capped at twice the quote. No monthly minimum. Top-ups start at $5.
Data source
National Energy System Operator (NESO)
Supported by National Energy SO Open Data. Reused under the NESO Open Data Licence (https://www.neso.energy/data-portal/neso-open-licence), which permits commercial reuse provided NESO is acknowledged as the source. Served by Eden Engine; not an official NESO product, and NESO does not endorse it.
Use it
Five steps: search, inspect, learn, run, settle. No per-tool setup; your agent reaches this tool through the meta-tools it already has.
Connect once and your AI can find and run this tool, and any other it needs.
// 1. search: find the tool
omnial_search({ query: "what you need" })
// 2. inspect: price and input schema
omnial_inspect({ tool: "nesodata/generation-mix" })
// 3. learn: read the usage guide at runtime
omnial_learn({ tool: "nesodata/generation-mix" })
// 4. run: price the exact call first, then run it
omnial_execute({ tool: "nesodata/generation-mix", input: { /* see input_schema */ }, dry_run: true })
omnial_execute({ tool: "nesodata/generation-mix", input: { /* ... */ } })
// 5. settle: the call is charged when it finishes, nothing to doNot connected yet? Point your MCP client at https://mcp.eden-engine.com/mcp, then copy a config for your client.
Pricing
Every charge this tool can incur.
| Charge | Price |
|---|---|
Per call | $0.0026 |
- Updated
- Oct 20, 2026
Input and output schemas
Input schema
{
"type": "object",
"required": [
"from",
"to"
],
"properties": {
"to": {
"type": "string",
"pattern": "^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]$",
"description": "The end of the window, a UTC timestamp with no zone suffix, for example 2026-10-19T13:00:00. EXCLUSIVE: a row stamped exactly this is not returned. A `to` before `from` returns no rows, not an error."
},
"from": {
"type": "string",
"pattern": "^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])T([01][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]$",
"description": "The first half hour to return, a UTC timestamp with no zone suffix, for example 2026-10-19T11:30:00. Inclusive. Rows exist on :00 and :30 from 2009-01-01T00:00:00 to about an hour and a half ago."
},
"limit": {
"type": "integer",
"default": 96,
"maximum": 500,
"minimum": 1,
"description": "The most rows to return, 1 to 500, default 96 (two days at one row per half hour). Rows come oldest first, so a window longer than this is cut at its newest end; if the answer has exactly this many rows, ask again from the last `DATETIME`."
}
},
"additionalProperties": false
}Output schema
{
"type": "object",
"required": [
"results"
],
"properties": {
"results": {
"type": "array",
"items": {
"type": "object",
"required": [
"DATETIME",
"GAS",
"COAL",
"NUCLEAR",
"WIND",
"WIND_EMB",
"HYDRO",
"IMPORTS",
"BIOMASS",
"OTHER",
"SOLAR",
"STORAGE",
"GENERATION",
"CARBON_INTENSITY",
"LOW_CARBON",
"RENEWABLE",
"FOSSIL",
"LOW_CARBON_perc",
"RENEWABLE_perc",
"FOSSIL_perc"
],
"properties": {
"GAS": {
"type": "number",
"description": "Gas generation, average MW."
},
"COAL": {
"type": "number",
"description": "Coal generation, average MW."
},
"WIND": {
"type": "number",
"description": "Transmission-connected wind generation, average MW."
},
"HYDRO": {
"type": "number",
"description": "Hydro generation, average MW."
},
"OTHER": {
"type": "number",
"description": "Everything else, average MW; currently includes battery discharge and transmission-connected solar."
},
"SOLAR": {
"type": "number",
"description": "Embedded solar generation, average MW. Zero before 2013-01-01T08:30 because it was not counted."
},
"FOSSIL": {
"type": "number",
"description": "GAS + COAL, average MW."
},
"BIOMASS": {
"type": "number",
"description": "Biomass generation, average MW."
},
"IMPORTS": {
"type": "number",
"description": "Interconnector imports, average MW."
},
"NUCLEAR": {
"type": "number",
"description": "Nuclear generation, average MW."
},
"STORAGE": {
"type": "number",
"description": "Pumped storage, net discharge, average MW, never negative. Counted inside RENEWABLE."
},
"DATETIME": {
"type": "string",
"description": "The half hour, UTC with no zone suffix, for example 2026-10-19T12:00:00. NESO does not say whether it marks the start or the end of the half hour."
},
"WIND_EMB": {
"type": "number",
"description": "Embedded (distribution-connected) wind generation, average MW."
},
"RENEWABLE": {
"type": "number",
"description": "WIND + WIND_EMB + HYDRO + SOLAR + STORAGE, average MW."
},
"GENERATION": {
"type": "number",
"description": "Total supply in average MW: the sum of every fuel column above INCLUDING imports and storage."
},
"LOW_CARBON": {
"type": "number",
"description": "NUCLEAR + RENEWABLE + BIOMASS, average MW."
},
"FOSSIL_perc": {
"type": "number",
"description": "FOSSIL as a percent of GENERATION, one decimal."
},
"RENEWABLE_perc": {
"type": "number",
"description": "RENEWABLE as a percent of GENERATION, one decimal."
},
"LOW_CARBON_perc": {
"type": "number",
"description": "LOW_CARBON as a percent of GENERATION, one decimal."
},
"CARBON_INTENSITY": {
"type": "number",
"description": "NESO's carbon intensity for the half hour, gCO2/kWh. Not the same series as the national tool's `actual`: the two differ by 23 g on average."
}
},
"additionalProperties": true
},
"description": "One row per half hour in the window. Empty when the window holds none (after the newest row, or before 2009). Exactly `limit` rows means the window may continue."
}
},
"description": "The half-hour rows in the window, oldest first.",
"additionalProperties": true
}