Skip to content
Eden Engine

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.

activeper callv1

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.

agent
// 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 do

Not 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.

ChargePrice
Per call
$0.0026
Updated
Oct 20, 2026

Input and output schemas

Input schema
input_schema.json
{
  "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
output_schema.json
{
  "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
}