Great Britain Grid Carbon Intensity, Actual and Forecast
nesodata/national-carbon-intensity
Carbon intensity of Great Britain's electricity grid, half hour by half hour, between two UTC timestamps: the modelled `forecast`, the `actual` estimated from metered generation (null for half hours not yet settled), and NESO's relative `index` (very low to very high), all in grams of CO2 per kilowatt hour. History runs from 2018-01-01 and the forecast reaches about two days ahead of the newest actual. Oldest first, at most 500 rows. The `index` bands are reset every January, so compare the numbers, not the words; the 2018-2019 forecast column holds a few impossible values, passed through unchanged. 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/national-carbon-intensity" })
// 3. learn: read the usage guide at runtime
omnial_learn({ tool: "nesodata/national-carbon-intensity" })
// 4. run: price the exact call first, then run it
omnial_execute({ tool: "nesodata/national-carbon-intensity", input: { /* see input_schema */ }, dry_run: true })
omnial_execute({ tool: "nesodata/national-carbon-intensity", 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-19T19: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-19T16:00:00. Inclusive. Rows exist on :00 and :30. Data starts 2018-01-01T00:00:00; the forecast ends about two days after the newest actual."
},
"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",
"forecast",
"actual",
"index"
],
"properties": {
"index": {
"enum": [
"very low",
"low",
"moderate",
"high",
"very high",
null
],
"type": [
"string",
"null"
],
"description": "NESO's relative band for the half hour, taken from `actual` when present and `forecast` otherwise. The cut-points reset each January (2026: very low under about 25, low to 89, moderate to 169, high to 229, very high above), so never compare it across years."
},
"actual": {
"type": [
"number",
"null"
],
"description": "Carbon intensity in gCO2/kWh estimated from metered generation. Null for half hours after the newest settled one (stamped about an hour and a half behind real time) and on a few historic rows."
},
"datetime": {
"type": "string",
"description": "The half hour, UTC with no zone suffix, for example 2026-10-19T17:00:00. NESO does not say whether it marks the start or the end of the half hour."
},
"forecast": {
"type": [
"number",
"null"
],
"description": "Modelled national carbon intensity in gCO2/kWh. Null on a few historic rows. Rows from 2018-12-14 to 2019-07-24 can hold impossible values up to 13,579; discard anything above about 600."
}
},
"additionalProperties": true
},
"description": "One row per half hour that has a forecast or an actual. Empty when the window holds none. Exactly `limit` rows means the window may continue."
}
},
"description": "The half-hour rows in the window, oldest first.",
"additionalProperties": true
}