Clarigrid

energy.clarigrid由 clarigrid.energy 發布官方發布者v0.2.0更新於 Oct 24, 2026

Read-only electricity, gas, and weather data with structured provenance and units.

已驗證Streamable HTTP可網頁執行位置與生活金融資料與分析

概覽

AI 產生的概覽

遠端 MCP 端點,讓助理以唯讀方式取得歐洲與美國電力、天然氣與天氣資料,並附上來源與單位資訊。

可以做什麼
  • 依區域取得電價、負載、發電量與預測資料
  • 讀取跨境潮流、裝置容量、頻率、再生能源占比與碳排放強度
  • 讀取天然氣流量、容量、需求、儲氣與 LNG 庫存
  • 依座標或區域取得天氣觀測與預報
  • 資料具備一致單位、含時區的時間戳記與結構化來源資訊
適用情境
適合需要回答歐洲或美國電力與天然氣市場、電網運轉、碳排放強度或天氣相關能源分析問題的情境,不必自行建置資料介接。
執行需求
透過 streamable HTTP 存取的遠端 MCP 端點,需要 OAuth 驗證。清單未宣告環境變數或請求標頭。README 介紹的是 Python SDK,其中受金鑰保護的來源需使用上游金鑰或 ClarigGrid 帳戶金鑰,但託管端點本身的憑證需求未在此說明。
安裝前請注意
存取需要 OAuth 登入,助理將以你的帳戶身分操作。登錄描述稱資料為唯讀,但 README 所述的本地 SDK 會把上游 API 金鑰存於磁碟,並可從廠商網站取得已存金鑰;連線前請確認託管端點可存取的範圍。部分上游資料再利用時要求標示來源。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Clarigrid,將其新增到工作區。
  2. 連接 所需的 憑證。它們會被私密儲存,絕不會在公開頁面上展示。
  3. 為需要使用其工具的對話啟用該服務。

Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。

交給代理程式安裝

把這段提示詞貼上到 Claude Code、Codex、Cursor 等代理程式,或 SourceWeft 對話中。代理程式會讀取該伺服器的安裝指南,先向你展示發布者、端點和登入方式,經你同意後再把它新增到你的客戶端。金鑰不會寫進任何命令。

閱讀 https://sourceweft.com/mcp/energy.clarigrid%2Fclarigrid/install.md,並按其中說明把這個 MCP 伺服器接入我的客戶端。修改任何設定之前,先告訴我它的發布者、端點和登入方式,等我確認。不要把 API 金鑰寫進命令或我會提交的檔案;問我金鑰應從哪裡取得。

檢視代理程式所依據的安裝指南

其他 MCP 客戶端

把它新增到你客戶端的 mcpServers 設定中。 客戶端會在首次連接時完成 OAuth 登入。

{
  "mcpServers": {
    "clarigrid": {
      "type": "http",
      "url": "https://mcp.clarigrid.energy/mcp"
    }
  }
}

README

Clarigrid

Unified Python SDK for European and U.S. energy market data.

[PyPI] [Python] [License]


What it is

Clarigrid provides a single, stable Python interface to access and normalise European and U.S. energy market data from multiple sources. All data comes back as timezone-aware pandas DataFrames with consistent column names and units.

Built-in free providers (no API key required) include Energy-Charts (Europe), Energinet (DK1/DK2), SMARD (DE), Elia (BE), NESO (GB), Elexon/BMRS (GB), ENTSOG (EU gas), and Gas Networks Ireland. Fingrid (FI), GIE AGSI/ALSI (European gas), and TenneT (NL) are also built in and use free API keys. For the United States, CAISO OASIS and NYISO provide no-auth market and system data. EIA-930 provides nationwide hourly balancing-authority load, forecasts, fuel generation, and physical interchange with a free EIA key. Global historical meteorology and solar data are available from NASA POWER without an API key; official U.S. hourly forecasts are available from NOAA/NWS. ENTSO-E and other key-protected sources can be configured as described in API key setup below.


Install

bash
pip install clarigrid

For the interactive setup wizard and CLI tools:

bash
pip install clarigrid[auth]

Quick start

python
import clarigrid as cg
# Free providers — no key required.cg.connect("smard")   # DE prices, load, generationcg.connect("elia")    # BE load, generationcg.connect("neso")    # GB load, embedded generationcg.connect("elexon")  # GB prices, generation mixcg.connect("entsog")  # EU gas flows (any TSO zone)cg.connect("energycharts")  # European prices, power, forecasts and flowscg.connect("energinet")  # DK1/DK2 prices, power, forecasts, flows and CO2cg.connect("redata")  # ES load, generation, capacity and cross-border flowscg.connect("rte")  # FR load, generation, forecasts, exchanges and CO2cg.connect("fingrid")  # FI power, forecasts, flows, balancing and CO2 (free key)cg.connect("gie")  # European gas storage and LNG inventory (free key)cg.connect("gni")  # IE daily gas demand by sector (no key)cg.connect("eia")  # US balancing-authority load, generation and flows (free key)cg.connect("caiso")  # CAISO day-ahead hub prices (no key)cg.connect("nyiso")  # NYISO prices, load, forecasts and fuel mix (no key)cg.connect("nasapower")  # Global daily/hourly weather and solar data (no key)cg.connect("nws")  # Official U.S. hourly weather forecasts (no key)
# Optional: set output timezone (default is UTC).cg.set_timezone("Europe/Brussels")
# Fetch data — provider is chosen automatically by zone.prices = cg.get_prices("DE", "2025-01-01", "2025-01-07")  # → smardload   = cg.get_load("BE",   "2025-01-01", "2025-01-07")  # → eliagen    = cg.get_generation("GB", "2025-01-01", "2025-01-07")  # → elexongas    = cg.get_gas_flows("BE-TSO-0001", "2025-01-01", "2025-01-07")  # → entsogie_gas = cg.get_gas_demand("IE", "2025-01-01", "2025-01-07")  # → gnius_load = cg.get_load("CAISO", "2025-01-01", "2025-01-07")  # → eia (CISO)np15 = cg.get_prices("CISO_NP15", "2025-01-01", "2025-01-07")  # → caisonyc = cg.get_prices("NYISO_NYC", "2025-01-01", "2025-01-07")  # → nyisoweather = cg.get_weather(    "40.7128,-74.0060",    "2025-01-01",    "2025-01-07",    source="nasapower",)nws_forecast = cg.get_weather(    "39.7456,-97.0892",    "2026-09-17",    "2026-09-18",    source="nws",)

API key setup

Some providers (ENTSO-E, TenneT) require a personal API key issued by the upstream data source. Clarigrid supports two ways to supply these keys.

Option 1 — ClarigGrid account (recommended)

Store all your provider keys in one place at clarigrid.energy/saved. The SDK then fetches them automatically using a single ClarigGrid API key.

First-time setup (interactive):

python
import clarigrid as cgcg.connect("entsoe")# Opens browser → log in at clarigrid.energy → keys fetched automatically.

Or use the CLI:

bash
clarigrid setup          # guided wizard for all providersclarigrid connect entsoe # authenticate a single provider

Headless / CI environments: set one environment variable and no browser is ever needed:

bash
export CLARIGRID_API_KEY=your-clarigrid-uuid

The SDK uses CLARIGRID_API_KEY to fetch all your stored provider keys from clarigrid.energy on the first connect() call of each session.

How to get a CLARIGRID_API_KEY:

  1. Log in at clarigrid.energy
  2. Add your provider API keys at clarigrid.energy/saved
  3. Run cg.connect("entsoe") once in an interactive terminal — the browser flow logs you in and stores your CLARIGRID_API_KEY locally.

Option 2 — Manual key entry (no account needed)

If you prefer not to use a clarigrid.energy account, set provider keys directly. Keys are stored in ~/.config/clarigrid/.env (permissions: 600).

Environment variable (recommended for CI):

bash
export ENTSOE_API_KEY=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxexport TENNET_API_KEY=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx

Config file — add to ~/.config/clarigrid/.env:

ENTSOE_API_KEY="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"TENNET_API_KEY="xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"

Zone routing

Each call to cg.connect() registers a provider and its capability-specific zone coverage in an internal router. When you call get_prices("DE"), the router picks the best connected provider for that zone and dataset automatically.

Multiple connect() calls accumulate coverage. If two providers both cover the same zone/dataset pair, the later connect() call wins.

python
cg.connect("neso")    # covers GB: load, generationcg.connect("elexon")  # covers GB: prices, generation — overwrites generation slot
# Now: GB prices → elexon, GB load → neso, GB generation → elexonprices = cg.get_prices("GB", "2025-01-01", "2025-01-02")load   = cg.get_load("GB",   "2025-01-01", "2025-01-02")

If no connected provider covers the requested zone/dataset, a helpful error is raised:

ZoneNotCoveredError: No connected provider has 'prices' data for zone 'BE'.  Consider: cg.connect('entsoe')

To bypass routing and force a specific provider:

python
df = cg.get_load("GB", "2025-01-01", "2025-01-07", source="neso")

Output format

All functions return a pandas.DataFrame with:

PropertyValue
IndexDatetimeIndex named utc_time, tz-aware
TimezoneUTC by default; change with cg.set_timezone()
Price columnprice_mwh
Load columnload_mw
Generation columnsfuel-type specific, e.g. solar_mw, wind_onshore_mw, nuclear_mw
Gas flow columnflow_kwh_d
Gas storageinventory in *_mwh; daily rates in *_mwh_d
LNG inventory*_thousand_m3; send-out in *_mwh_d
Cross-border columnssigned MW; imports positive, exports negative
Installed capacity*_capacity_mw; storage energy uses *_energy_mwh
Frequencyfrequency_hz
Renewable shares*_pct

Price currency is stored in df.attrs["currency"] (for example "EUR", "GBP", or "USD"):

python
df = cg.get_prices("DE", "2025-01-01", "2025-01-07")print(df.attrs["currency"])  # 'EUR'

European zone codes follow the ENTSO-E bidding zone convention (BE, DE_LU, FR ...). U.S. electricity uses EIA/NERC balancing-authority codes (CISO, ERCO, PJM, NYIS) and explicit market hubs (CISO_NP15). Common aliases (DE → DE_LU, CAISO → CISO, ERCOT → ERCO) resolve automatically.


Timezone

python
cg.set_timezone("Europe/Brussels")   # all subsequent calls return Brussels timecg.set_timezone("UTC")               # revert to default
df = cg.get_load("BE", "2025-01-01", "2025-01-07")# df.index is tz-aware in Europe/Brussels

Data is always fetched and cached as UTC. Timezone conversion is applied at the output boundary only.


Caching

Responses are cached locally at ~/.clarigrid/cache/ as Parquet files (requires pip install clarigrid[cache]), keyed by provider + dataset + zone + date range. Historical data is cached indefinitely; live data expires after 1 hour by default.

python
from clarigrid.core import cache
cache.info()           # DataFrame showing cached entriescache.clear()          # clear allcache.clear("smard")   # clear one providercache.set_live_ttl(1800)  # change live-data TTL to 30 min

Disable caching per call:

python
df = cg.get_prices("DE", "2025-01-01", "2025-01-07", use_cache=False)

CLI reference

Requires pip install clarigrid[auth].

bash
clarigrid setup                    # guided wizard — configure all providersclarigrid connect <source>         # authenticate a single providerclarigrid auth --show              # list configured sources (keys masked)clarigrid auth --clear <source>    # remove key for a specific sourceclarigrid auth --clear --all       # remove all stored keys

API reference

FunctionDescription
cg.connect(provider)Connect provider; handles auth for key-guarded sources
cg.set_timezone(tz)Set output timezone (IANA string, default "UTC")
cg.get_prices(zone, start, end, market="day_ahead", node=None)Electricity prices → price_mwh; optional node for nodal markets
cg.get_load(zone, start, end)Actual total load → load_mw
cg.get_generation(zone, start, end)Generation per fuel type → *_mw columns
cg.get_generation_forecast(zone, start, end)Wind/solar generation forecast → *_forecast_mw
cg.get_load_forecast(zone, start, end)Load forecast → load_forecast_mw
cg.get_physical_flows(zone, start, end)Signed cross-border physical flows in MW
cg.get_commercial_schedule(zone, start, end)Signed commercial exchanges in MW
cg.get_installed_capacity(zone, start, end)Installed power by technology in MW
cg.get_frequency(zone, start, end)System frequency → frequency_hz
cg.get_renewable_share(zone, start, end)Renewable share in percent
cg.get_co2_intensity(zone, start, end)Electricity carbon intensity in gCO2/kWh
cg.get_co2_forecast(zone, start, end)Forecast carbon intensity in gCO2/kWh
cg.get_gas_flows(zone, start, end)Gas physical flows → flow_kwh_d
cg.get_capacity(zone, start, end)Firm technical gas capacity → capacity_kwh_d
cg.get_gas_demand(zone, start, end)Daily gas demand by sector in GWh
cg.get_gas_storage(zone, start, end)Gas inventory, capacity, injection and withdrawal
cg.get_lng_inventory(zone, start, end)LNG tank inventory and terminal send-out
cg.get_weather(zone, start, end)Weather observations / forecasts
cg.status()Print connected providers, zones, capabilities
cg.set_api_key(provider, key)Store a provider key locally
cg.list_providers()List all registered provider names
cg.register_provider(name, instance)Register an external provider

All data functions accept:

  • source="name" — override the router for this call only
  • use_cache=False — bypass the local cache

Built-in providers

NameDataZonesAuth
energychartsprices, load, generation, forecasts, capacity, cross-border flows, frequency, renewable shareEuropean countries and openly licensed price zonesNone
energinetprices, load, generation, forecasts, physical flows, actual/forecast CO2DK1, DK2None
elhubhourly metered consumption and generation by production groupNO1–NO5None
pse15-minute actual and forecast power-system loadPLNone
eirgrid15-minute actual system demandIE, GB-NIRNone
sfoedaily national load forecast with 2.5%/97.5% confidence boundsCHNone
redatafive-minute load/forecast; daily-average generation, shares and physical flows; installed capacityESNone
rteload, generation, load forecasts, physical/commercial exchanges, generation shares and CO2FRNone
fingridload, generation, forecasts, flows, NTC, capacity, frequency, CO2, imbalance and balancingFIFree API key
giedaily underground gas storage and LNG terminal inventoryEurope, countries, facilitiesFree API key
gnidaily gas demand by sectorIENone
eiahourly load, forecast, fuel generation, physical interchange and generation sharesU.S. balancing authorities and regionsFree API key
caisoday-ahead LMP at NP15, SP15, ZP26 or an explicit nodeCalifornia ISONone
nyisoday-ahead zonal LBMP, actual/forecast load, fuel mix and sharesNew York ISO and NYISO load zonesNone
nasapowerdaily/hourly meteorology, precipitation, wind and solar radiationGlobal point locations (lat,lon)None
nwshourly temperature, humidity, wind, cloud and precipitation-probability forecastsU.S., territories and adjacent waters (lat,lon)None
metnotemperature, pressure, humidity, cloud, wind and precipitation forecastsGlobal point locations (lat,lon)None
smardprices, load, generationDE, AT, LU + TSO sub-zonesNone
eliaload, generationBENone
nesoload, embedded generation, actual/forecast CO2, generation sharesGBNone
elexonprices, generation mixGBNone
entsoggas flows, capacityAll ENTSOG operatorsNone
entsoeprices, load, generationAll ENTSO-E bidding zonesENTSOE_API_KEY
tennet(data fetching coming soon)NLTENNET_API_KEY

MET Norway uses the official Locationforecast 2.0 compact forecast. Pass a global point as lat,lon and optionally an integer altitude in metres. Coordinates are rounded to the upstream four-decimal limit, results are normalized to UTC, and the SDK supplies the identifying User-Agent required by MET Norway. The endpoint serves current forecasts only; historical model data is not fetched by this provider. Reuse requires MET Norway attribution.

EirGrid uses the official Smart Grid Dashboard JSON feed for 15-minute Republic of Ireland and Northern Ireland system demand. The feed is keyless, timestamps are normalized from the dashboard's UTC values, and reuse requires the attribution Supported by EirGrid Group Data under the EirGrid Group Open Data Licence. SFOE uses the Swiss Federal Office of Energy's versioned Energy Dashboard public API for the SDSC national electricity-consumption forecast. Source values are daily GWh and are exposed as DST-aware daily-average MW in load_forecast_min_mw, load_forecast_mw, and load_forecast_max_mw. Reuse is commercial and non-commercial with mandatory source attribution under the opendata.swiss terms.

Keys for entsoe and tennet are issued by the respective upstream provider. Store them via a clarigrid.energy account or set them manually as described in API key setup.


Architecture

clarigrid/├── __init__.py           # public surface: connect, get_prices, set_timezone, …├── _auth.py              # KeyState machine, auth flows, provider key registry├── _keystore.py          # ~/.config/clarigrid/.env  read/write (chmod 600)├── _browser_flow.py      # browser-based OAuth flow (localhost callback server)├── cli.py                # clarigrid CLI (setup, connect, auth)├── core/│   ├── api.py            # top-level functions — routing + normalisation│   ├── router.py         # ZoneRouter — (zone, capability) → provider│   ├── session.py        # runtime state: router, connected map, output TZ│   ├── normalise.py      # canonical column names + unit normalisation│   ├── registry.py       # register_provider / get_provider│   ├── interface.py      # DataProvider ABC ← providers implement this│   ├── cache.py          # filesystem Parquet cache│   ├── config.py         # legacy key store (~/.clarigrid/keys.toml)│   ├── exceptions.py     # exception hierarchy│   └── types.py          # shared constants, zone aliases├── providers/│   ├── smard.py          # Bundesnetzagentur SMARD (DE)│   ├── energycharts.py   # Fraunhofer ISE Energy-Charts (Europe)│   ├── energinet.py      # Energinet Energi Data Service (DK1/DK2)│   ├── redata.py         # Red Electrica REData (ES)│   ├── rte.py            # RTE Eco2mix (FR)│   ├── elia.py           # Elia Open Data (BE)│   ├── neso.py           # NESO Data Portal (GB)│   ├── elexon.py         # Elexon BMRS (GB)│   ├── eia.py            # EIA-930 balancing-authority operations (US)│   ├── caiso.py          # CAISO OASIS day-ahead prices (US)│   ├── nyiso.py          # NYISO prices, load, forecasts and fuel mix (US)│   ├── nasapower.py      # NASA POWER meteorology and solar data (global)│   ├── nws.py            # NOAA/NWS hourly grid forecasts (US)│   ├── metno.py          # MET Norway global point forecasts│   └── entsog.py         # ENTSOG Transparency Platform (EU gas)└── utils/    ├── time.py           # parse_dt, normalise_index    └── validation.py     # resolve_zone, validate_date_range

Plugin system

External providers subclass DataProvider, declare their zones() and capabilities(), and self-register on import. Providers whose capabilities have different geographical coverage can additionally override capability_zones():

python
from clarigrid.core.interface import DataProviderfrom clarigrid.core.registry import register_providerimport pandas as pd
class NordpoolProvider(DataProvider):    def zones(self) -> set[str]:        return {"NO1", "NO2", "SE1", "SE2", "DK1", "DK2", "FI"}
    def capabilities(self) -> set[str]:        return {"prices"}
    def get_prices(self, zone, start, end, **kwargs) -> pd.DataFrame: ...
register_provider("nordpool", NordpoolProvider())

After cg.connect("nordpool"), calls to cg.get_prices("NO1", …) route to this provider automatically.


Development

bash
git clone https://github.com/clarigrid/clarigridcd clarigridpip install -e ".[dev]"pytestruff check .mypy clarigrid

License

Apache 2.0 — see LICENSE.

Copyright (c) 2026 Alexander Hoogsteyn.

來源:README.md,提交 8b35102

工具

0
該伺服器需要登入,因此 SourceWeft 無法在沒有帳號的情況下讀取其工具,也未收錄。已連接帳號所能看到的內容可能因帳號及其權限而異。

版本歷史

1
  1. v0.2.0最新Sep 16, 2026

評分

已滿足適用檢查項的 75%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通必需25 分
  • 已宣告認證方式必需10 分
  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分

    請在儲存庫或註冊中心條目中宣告授權條款。