@iflow-mcp/kitfunso-luminus 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +454 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +488 -0
- package/dist/lib/audit.d.ts +3 -0
- package/dist/lib/audit.js +66 -0
- package/dist/lib/auth.d.ts +26 -0
- package/dist/lib/auth.js +199 -0
- package/dist/lib/cache.d.ts +25 -0
- package/dist/lib/cache.js +38 -0
- package/dist/lib/cli.d.ts +1 -0
- package/dist/lib/cli.js +10 -0
- package/dist/lib/corine.d.ts +31 -0
- package/dist/lib/corine.js +137 -0
- package/dist/lib/eea-natura2000.d.ts +7 -0
- package/dist/lib/eea-natura2000.js +53 -0
- package/dist/lib/entsoe-client.d.ts +22 -0
- package/dist/lib/entsoe-client.js +69 -0
- package/dist/lib/gis-sources.d.ts +33 -0
- package/dist/lib/gis-sources.js +392 -0
- package/dist/lib/natural-england.d.ts +27 -0
- package/dist/lib/natural-england.js +105 -0
- package/dist/lib/neso-gsp.d.ts +18 -0
- package/dist/lib/neso-gsp.js +113 -0
- package/dist/lib/overpass.d.ts +13 -0
- package/dist/lib/overpass.js +193 -0
- package/dist/lib/profiles.d.ts +23 -0
- package/dist/lib/profiles.js +149 -0
- package/dist/lib/schema-guard.d.ts +22 -0
- package/dist/lib/schema-guard.js +38 -0
- package/dist/lib/tool-handler.d.ts +15 -0
- package/dist/lib/tool-handler.js +95 -0
- package/dist/lib/xml-parser.d.ts +4 -0
- package/dist/lib/xml-parser.js +34 -0
- package/dist/lib/zone-codes.d.ts +12 -0
- package/dist/lib/zone-codes.js +127 -0
- package/dist/tools/acer-remit.d.ts +60 -0
- package/dist/tools/acer-remit.js +154 -0
- package/dist/tools/agricultural-land.d.ts +31 -0
- package/dist/tools/agricultural-land.js +210 -0
- package/dist/tools/ancillary-prices.d.ts +27 -0
- package/dist/tools/ancillary-prices.js +70 -0
- package/dist/tools/auctions.d.ts +15 -0
- package/dist/tools/auctions.js +89 -0
- package/dist/tools/balancing-actions.d.ts +22 -0
- package/dist/tools/balancing-actions.js +151 -0
- package/dist/tools/balancing.d.ts +21 -0
- package/dist/tools/balancing.js +56 -0
- package/dist/tools/carbon.d.ts +21 -0
- package/dist/tools/carbon.js +68 -0
- package/dist/tools/commodity-prices.d.ts +26 -0
- package/dist/tools/commodity-prices.js +100 -0
- package/dist/tools/compare-sites.d.ts +41 -0
- package/dist/tools/compare-sites.js +237 -0
- package/dist/tools/demand-forecast.d.ts +21 -0
- package/dist/tools/demand-forecast.js +56 -0
- package/dist/tools/elexon-bmrs.d.ts +72 -0
- package/dist/tools/elexon-bmrs.js +117 -0
- package/dist/tools/energi-data.d.ts +72 -0
- package/dist/tools/energi-data.js +170 -0
- package/dist/tools/energy-charts.d.ts +103 -0
- package/dist/tools/energy-charts.js +411 -0
- package/dist/tools/entsog.d.ts +71 -0
- package/dist/tools/entsog.js +159 -0
- package/dist/tools/era5-weather.d.ts +39 -0
- package/dist/tools/era5-weather.js +117 -0
- package/dist/tools/eu-gas-price.d.ts +38 -0
- package/dist/tools/eu-gas-price.js +110 -0
- package/dist/tools/fingrid.d.ts +39 -0
- package/dist/tools/fingrid.js +158 -0
- package/dist/tools/flood-risk.d.ts +33 -0
- package/dist/tools/flood-risk.js +166 -0
- package/dist/tools/flows.d.ts +23 -0
- package/dist/tools/flows.js +61 -0
- package/dist/tools/frequency.d.ts +10 -0
- package/dist/tools/frequency.js +35 -0
- package/dist/tools/gas-storage.d.ts +18 -0
- package/dist/tools/gas-storage.js +72 -0
- package/dist/tools/generation.d.ts +17 -0
- package/dist/tools/generation.js +80 -0
- package/dist/tools/grid-connection-intelligence.d.ts +42 -0
- package/dist/tools/grid-connection-intelligence.js +122 -0
- package/dist/tools/grid-connection-queue.d.ts +64 -0
- package/dist/tools/grid-connection-queue.js +198 -0
- package/dist/tools/grid-proximity.d.ts +38 -0
- package/dist/tools/grid-proximity.js +123 -0
- package/dist/tools/hydro-inflows.d.ts +34 -0
- package/dist/tools/hydro-inflows.js +114 -0
- package/dist/tools/hydro.d.ts +18 -0
- package/dist/tools/hydro.js +85 -0
- package/dist/tools/imbalance-prices.d.ts +21 -0
- package/dist/tools/imbalance-prices.js +56 -0
- package/dist/tools/intraday-prices.d.ts +21 -0
- package/dist/tools/intraday-prices.js +57 -0
- package/dist/tools/intraday-spread.d.ts +24 -0
- package/dist/tools/intraday-spread.js +55 -0
- package/dist/tools/land-constraints.d.ts +25 -0
- package/dist/tools/land-constraints.js +148 -0
- package/dist/tools/land-cover.d.ts +18 -0
- package/dist/tools/land-cover.js +64 -0
- package/dist/tools/lng-terminals.d.ts +22 -0
- package/dist/tools/lng-terminals.js +75 -0
- package/dist/tools/net-positions.d.ts +19 -0
- package/dist/tools/net-positions.js +74 -0
- package/dist/tools/nordpool-prices.d.ts +29 -0
- package/dist/tools/nordpool-prices.js +80 -0
- package/dist/tools/outages.d.ts +28 -0
- package/dist/tools/outages.js +107 -0
- package/dist/tools/power-plants.d.ts +26 -0
- package/dist/tools/power-plants.js +224 -0
- package/dist/tools/price-spread-analysis.d.ts +27 -0
- package/dist/tools/price-spread-analysis.js +97 -0
- package/dist/tools/prices.d.ts +23 -0
- package/dist/tools/prices.js +79 -0
- package/dist/tools/realtime-generation.d.ts +19 -0
- package/dist/tools/realtime-generation.js +141 -0
- package/dist/tools/ree-esios.d.ts +78 -0
- package/dist/tools/ree-esios.js +216 -0
- package/dist/tools/regelleistung.d.ts +28 -0
- package/dist/tools/regelleistung.js +71 -0
- package/dist/tools/remit-messages.d.ts +23 -0
- package/dist/tools/remit-messages.js +110 -0
- package/dist/tools/renewable-forecast.d.ts +23 -0
- package/dist/tools/renewable-forecast.js +75 -0
- package/dist/tools/rte-france.d.ts +72 -0
- package/dist/tools/rte-france.js +147 -0
- package/dist/tools/screen-site.d.ts +50 -0
- package/dist/tools/screen-site.js +288 -0
- package/dist/tools/site-revenue.d.ts +50 -0
- package/dist/tools/site-revenue.js +147 -0
- package/dist/tools/smard-data.d.ts +34 -0
- package/dist/tools/smard-data.js +155 -0
- package/dist/tools/solar.d.ts +23 -0
- package/dist/tools/solar.js +69 -0
- package/dist/tools/stormglass.d.ts +56 -0
- package/dist/tools/stormglass.js +172 -0
- package/dist/tools/terna.d.ts +69 -0
- package/dist/tools/terna.js +159 -0
- package/dist/tools/terrain-analysis.d.ts +19 -0
- package/dist/tools/terrain-analysis.js +120 -0
- package/dist/tools/transfer-capacity.d.ts +22 -0
- package/dist/tools/transfer-capacity.js +61 -0
- package/dist/tools/transmission.d.ts +29 -0
- package/dist/tools/transmission.js +159 -0
- package/dist/tools/uk-carbon.d.ts +51 -0
- package/dist/tools/uk-carbon.js +109 -0
- package/dist/tools/uk-grid.d.ts +28 -0
- package/dist/tools/uk-grid.js +70 -0
- package/dist/tools/us-gas.d.ts +30 -0
- package/dist/tools/us-gas.js +100 -0
- package/dist/tools/verify-gis-sources.d.ts +25 -0
- package/dist/tools/verify-gis-sources.js +119 -0
- package/dist/tools/weather.d.ts +27 -0
- package/dist/tools/weather.js +120 -0
- package/package.json +62 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Keith So
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,454 @@
|
|
|
1
|
+
# Luminus
|
|
2
|
+
|
|
3
|
+
[](LICENSE)
|
|
4
|
+
[](https://www.npmjs.com/package/luminus-mcp)
|
|
5
|
+
|
|
6
|
+
Latest release: [v0.2.0 release notes](docs/releases/0.2.0.md) · [Changelog](CHANGELOG.md)
|
|
7
|
+
|
|
8
|
+
Real-time European & UK electricity grid data via MCP. 56 tools, all free.
|
|
9
|
+
|
|
10
|
+
## Tools
|
|
11
|
+
|
|
12
|
+
### Generation & Prices
|
|
13
|
+
|
|
14
|
+
| Tool | Source | Description |
|
|
15
|
+
|------|--------|-------------|
|
|
16
|
+
| `get_generation_mix` | ENTSO-E | Real-time generation by fuel type (wind, solar, gas, nuclear, etc.) |
|
|
17
|
+
| `get_day_ahead_prices` | ENTSO-E | Hourly spot prices (EUR/MWh) by bidding zone |
|
|
18
|
+
| `get_balancing_prices` | ENTSO-E | Imbalance/settlement prices per period |
|
|
19
|
+
| `get_carbon_intensity` | ENTSO-E | CO2 intensity (gCO2/kWh) from generation mix |
|
|
20
|
+
| `get_hydro_reservoir` | ENTSO-E | Reservoir filling levels (MWh) for hydro countries |
|
|
21
|
+
|
|
22
|
+
### Intraday & Balancing
|
|
23
|
+
|
|
24
|
+
| Tool | Source | Description |
|
|
25
|
+
|------|--------|-------------|
|
|
26
|
+
| `get_intraday_prices` | ENTSO-E | Continuous intraday market prices per bidding zone |
|
|
27
|
+
| `get_imbalance_prices` | ENTSO-E | Real-time settlement/imbalance prices |
|
|
28
|
+
| `get_intraday_da_spread` | Computed | Intraday minus day-ahead spread with directional signal |
|
|
29
|
+
| `get_realtime_generation` | ENTSO-E / BMRS | Actual generation by fuel type (MW), 5-15 min resolution |
|
|
30
|
+
| `get_balancing_actions` | ENTSO-E / BMRS | Activated balancing energy (up/down regulation volumes) |
|
|
31
|
+
|
|
32
|
+
### Forecasts
|
|
33
|
+
|
|
34
|
+
| Tool | Source | Description |
|
|
35
|
+
|------|--------|-------------|
|
|
36
|
+
| `get_renewable_forecast` | ENTSO-E | Day-ahead wind & solar generation forecast (MW) |
|
|
37
|
+
| `get_demand_forecast` | ENTSO-E | Day-ahead total load/demand forecast (MW) |
|
|
38
|
+
|
|
39
|
+
### Gas & LNG
|
|
40
|
+
|
|
41
|
+
| Tool | Source | Description |
|
|
42
|
+
|------|--------|-------------|
|
|
43
|
+
| `get_gas_storage` | GIE AGSI+ | European gas storage levels, fill %, injection/withdrawal |
|
|
44
|
+
| `get_lng_terminals` | GIE ALSI | LNG terminal inventory, send-out rates, capacity |
|
|
45
|
+
| `get_us_gas_data` | EIA | US gas storage (Bcf) and Henry Hub prices (USD/MMBtu) |
|
|
46
|
+
| `get_eu_gas_price` | Yahoo Finance | TTF/NBP gas prices in EUR/MWh for spark spread calculations |
|
|
47
|
+
| `get_entsog_data` | ENTSOG | Gas pipeline flows, nominations, interruptions, and capacities |
|
|
48
|
+
|
|
49
|
+
### BESS & Ancillary
|
|
50
|
+
|
|
51
|
+
| Tool | Source | Description |
|
|
52
|
+
|------|--------|-------------|
|
|
53
|
+
| `get_ancillary_prices` | ENTSO-E | FCR/aFRR/mFRR reserve procurement prices (EUR/MW) |
|
|
54
|
+
| `get_remit_messages` | ENTSO-E | REMIT urgent market messages (forced outages, capacity reductions) |
|
|
55
|
+
| `get_price_spread_analysis` | Computed | BESS arbitrage schedule with optimal charge/discharge windows |
|
|
56
|
+
| `get_regelleistung` | Regelleistung.net | FCR/aFRR/mFRR tender results and procurement prices (DE + EU) |
|
|
57
|
+
| `get_acer_remit` | ACER REMIT | Centralized UMMs and outage events from Inside Information Platforms |
|
|
58
|
+
|
|
59
|
+
### Grid Infrastructure
|
|
60
|
+
|
|
61
|
+
| Tool | Source | Description |
|
|
62
|
+
|------|--------|-------------|
|
|
63
|
+
| `get_cross_border_flows` | ENTSO-E | Physical electricity flows between zones (MW) |
|
|
64
|
+
| `get_net_positions` | ENTSO-E | Net import/export position by zone |
|
|
65
|
+
| `get_transfer_capacities` | ENTSO-E | Net transfer capacity (NTC) between zones |
|
|
66
|
+
| `get_outages` | ENTSO-E | Generation & transmission outages with reasons |
|
|
67
|
+
| `get_power_plants` | Open Power System Data | Plant database: capacity, fuel, location, year |
|
|
68
|
+
| `get_auction_results` | JAO | Cross-border capacity auction prices & allocation |
|
|
69
|
+
| `get_transmission_lines` | OpenStreetMap | HV transmission line routes (220kV+) |
|
|
70
|
+
| `get_grid_connection_queue` | NESO TEC Register | GB transmission connection-register signal: queued/contracted projects, MW, status, and dates by connection site |
|
|
71
|
+
| `get_eu_frequency` | mainsfrequency.com | Real-time grid frequency (Hz) and deviation |
|
|
72
|
+
|
|
73
|
+
### UK Specific
|
|
74
|
+
|
|
75
|
+
| Tool | Source | Description |
|
|
76
|
+
|------|--------|-------------|
|
|
77
|
+
| `get_uk_carbon_intensity` | National Grid ESO | UK carbon intensity, index, and fuel mix |
|
|
78
|
+
| `get_uk_grid_demand` | National Grid ESO | UK demand (MW) and grid frequency (Hz) |
|
|
79
|
+
| `get_elexon_bmrs` | Elexon BMRS | GB imbalance prices, generation by fuel, balancing bids, system warnings |
|
|
80
|
+
|
|
81
|
+
### Commodities
|
|
82
|
+
|
|
83
|
+
| Tool | Source | Description |
|
|
84
|
+
|------|--------|-------------|
|
|
85
|
+
| `get_commodity_prices` | Yahoo Finance | EUA carbon, Brent crude, TTF gas prices with 5-day history |
|
|
86
|
+
|
|
87
|
+
### Regional Specialists
|
|
88
|
+
|
|
89
|
+
| Tool | Source | Description |
|
|
90
|
+
|------|--------|-------------|
|
|
91
|
+
| `get_energy_charts` | energy-charts.info | European electricity prices, generation, and flows (no API key) |
|
|
92
|
+
| `get_nordpool_prices` | Nordpool | Nordic and Baltic day-ahead prices at 15-min resolution |
|
|
93
|
+
| `get_smard_data` | SMARD (Bundesnetzagentur) | High-resolution German generation, consumption, and market data |
|
|
94
|
+
| `get_rte_france` | RTE France (ODRE) | French generation (nuclear, wind, solar), consumption, and exchanges |
|
|
95
|
+
| `get_energi_data` | Energi Data Service | Danish real-time CO2, production, prices, and electricity balance |
|
|
96
|
+
| `get_fingrid_data` | Fingrid | Finnish grid data at 3-min resolution (generation, imports, frequency) |
|
|
97
|
+
| `get_terna_data` | Terna | Italian generation, demand, exchanges, and zonal market prices |
|
|
98
|
+
| `get_ree_esios` | REE ESIOS | Spanish prices, demand, generation mix, wind/solar forecast vs actual |
|
|
99
|
+
|
|
100
|
+
### Hydropower
|
|
101
|
+
|
|
102
|
+
| Tool | Source | Description |
|
|
103
|
+
|------|--------|-------------|
|
|
104
|
+
| `get_hydro_inflows` | ERA5-Land (Open-Meteo) | Hydro inflow proxy for 10 European basins (precipitation, snowmelt) |
|
|
105
|
+
|
|
106
|
+
### GIS Site Prospecting
|
|
107
|
+
|
|
108
|
+
| Tool | Source | Description |
|
|
109
|
+
|------|--------|-------------|
|
|
110
|
+
| `get_terrain_analysis` | Open-Meteo Elevation | Elevation, slope, aspect, and flatness score for a location |
|
|
111
|
+
| `get_grid_proximity` | OpenStreetMap | Nearest substations and HV lines within a radius, with distances |
|
|
112
|
+
| `get_grid_connection_queue` | NESO TEC Register | GB transmission TEC register search by connection site, host TO, technology, status, and agreement type |
|
|
113
|
+
| `get_grid_connection_intelligence` | NESO GSP + TEC + OSM | GB grid connection intelligence: nearest GSP lookup, TEC register queue at that GSP, and nearby substations |
|
|
114
|
+
| `get_land_constraints` | Natural England / EEA Natura 2000 | GB protected areas via Natural England, plus EU Natura 2000 protected sites within a radius |
|
|
115
|
+
| `get_land_cover` | CORINE Land Cover 2018 | Point land-cover classification for EU27 + EEA/EFTA sites, with conservative planning-exclusion flags for wetlands, water bodies, and woodland. GB not covered |
|
|
116
|
+
| `get_agricultural_land` | Natural England ALC | Best and Most Versatile agricultural land screening. Prefers detailed post-1988 surveys, falls back to provisional ALC |
|
|
117
|
+
| `get_flood_risk` | Environment Agency | Flood-planning screen using Flood Zone 2, Flood Zone 3, and flood storage areas |
|
|
118
|
+
| `screen_site` | Composite | PV/BESS site screening: terrain + grid + solar + constraints + agricultural land + flood risk in one pass/warn/fail verdict (GB + EU) |
|
|
119
|
+
| `compare_sites` | Composite | Compare and rank 2-10 candidate PV/BESS sites by verdict, solar resource, grid proximity, and terrain (GB + EU) |
|
|
120
|
+
| `estimate_site_revenue` | PVGIS + ENTSO-E | Estimate annual PV generation revenue or BESS arbitrage revenue for a candidate site. Requires ENTSO-E key. |
|
|
121
|
+
| `verify_gis_sources` | All GIS providers | Health check for upstream GIS data sources. Reports status, response time, and provenance metadata |
|
|
122
|
+
|
|
123
|
+
Roadmap: see [`docs/gis-roadmap.md`](docs/gis-roadmap.md).
|
|
124
|
+
|
|
125
|
+
### Weather & Climate
|
|
126
|
+
|
|
127
|
+
| Tool | Source | Description |
|
|
128
|
+
|------|--------|-------------|
|
|
129
|
+
| `get_weather_forecast` | Open-Meteo | Temperature, wind speed, solar radiation by location |
|
|
130
|
+
| `get_solar_irradiance` | PVGIS | Monthly irradiance, optimal angle, annual PV yield |
|
|
131
|
+
| `get_era5_weather` | ERA5 (Copernicus/ECMWF) | Historical reanalysis: wind at hub height, solar radiation, temperature |
|
|
132
|
+
| `get_stormglass` | Storm Glass | Offshore marine weather: wind, waves, swell, sea temperature (10 req/day) |
|
|
133
|
+
|
|
134
|
+
## Quick Start
|
|
135
|
+
|
|
136
|
+
```bash
|
|
137
|
+
npm install luminus-mcp
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
## Python SDK Preview
|
|
141
|
+
|
|
142
|
+
A notebook-friendly Python client now lives under [`python/`](python/README.md).
|
|
143
|
+
It wraps `luminus-mcp` over stdio and exposes plain Python methods like `get_day_ahead_prices()`, `get_generation_mix()`, and `screen_site()`.
|
|
144
|
+
|
|
145
|
+
```python
|
|
146
|
+
from luminus import Luminus
|
|
147
|
+
|
|
148
|
+
lum = Luminus(profile="trader")
|
|
149
|
+
prices = lum.get_day_ahead_prices(zone="DE")
|
|
150
|
+
df = prices.to_pandas()
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
### API Keys
|
|
154
|
+
|
|
155
|
+
Set keys via environment variables or `~/.luminus/keys.json`:
|
|
156
|
+
|
|
157
|
+
```bash
|
|
158
|
+
# Option 1: .env file
|
|
159
|
+
ENTSOE_API_KEY=your-key-here # Required for most ENTSO-E tools
|
|
160
|
+
GIE_API_KEY=your-key-here # Optional: gas storage & LNG
|
|
161
|
+
EIA_API_KEY=your-key-here # Optional: US gas data
|
|
162
|
+
FINGRID_API_KEY=your-key-here # Optional: Finnish grid data
|
|
163
|
+
ESIOS_API_TOKEN=your-token-here # Optional: Spanish market data
|
|
164
|
+
STORMGLASS_API_KEY=your-key-here # Optional: offshore marine weather
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
```json
|
|
168
|
+
// Option 2: ~/.luminus/keys.json (alternative to env vars)
|
|
169
|
+
{
|
|
170
|
+
"ENTSOE_API_KEY": "your-key-here",
|
|
171
|
+
"GIE_API_KEY": "your-key-here"
|
|
172
|
+
}
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
Key resolution order: environment variable first, then `~/.luminus/keys.json`. Tools with missing keys are automatically skipped at startup (they never appear in the tool list).
|
|
176
|
+
|
|
177
|
+
All keys are free:
|
|
178
|
+
|
|
179
|
+
- **ENTSO-E**: Register at [transparency.entsoe.eu](https://transparency.entsoe.eu/), then email transparency@entsoe.eu
|
|
180
|
+
- **GIE**: Register at [agsi.gie.eu](https://agsi.gie.eu/)
|
|
181
|
+
- **EIA**: Register at [eia.gov/opendata](https://www.eia.gov/opendata/)
|
|
182
|
+
- **Fingrid**: Register at [data.fingrid.fi](https://data.fingrid.fi/)
|
|
183
|
+
- **ESIOS**: Email consultasios@ree.es to request a token
|
|
184
|
+
- **Storm Glass**: Register at [stormglass.io](https://stormglass.io/)
|
|
185
|
+
|
|
186
|
+
Many tools work without any API key: energy-charts.info, ENTSOG, Elexon BMRS, RTE France, Energi Data Service, ERA5 weather, hydro inflows, Nordpool, SMARD, and more.
|
|
187
|
+
|
|
188
|
+
### Profiles
|
|
189
|
+
|
|
190
|
+
By default all 54 data tools are registered. Use `--profile` to load only what you need, cutting context window cost by 60-90%:
|
|
191
|
+
|
|
192
|
+
```bash
|
|
193
|
+
npx luminus-mcp --profile trader # 8 tools: prices, spreads, commodities
|
|
194
|
+
npx luminus-mcp --profile grid # 11 tools: flows, outages, infrastructure
|
|
195
|
+
npx luminus-mcp --profile generation # 6 tools: gen mix, forecasts, carbon
|
|
196
|
+
npx luminus-mcp --profile gas # 5 tools: storage, LNG, pipeline flows
|
|
197
|
+
npx luminus-mcp --profile renewables # 5 tools: wind/solar forecasts, hydro
|
|
198
|
+
npx luminus-mcp --profile uk # 3 tools: UK carbon, demand, Elexon
|
|
199
|
+
npx luminus-mcp --profile bess # 5 tools: arbitrage, ancillary, balancing
|
|
200
|
+
npx luminus-mcp --profile regional # 8 tools: country-specific sources
|
|
201
|
+
npx luminus-mcp --profile weather # 5 tools: forecasts, ERA5, marine
|
|
202
|
+
npx luminus-mcp --profile gis # 13 tools: solar, terrain, grid proximity, connection queue, connection intelligence, constraints, land cover, agricultural land, flood risk, site screening (GB+EU), comparison, verification
|
|
203
|
+
npx luminus-mcp --profile full # all 56 tools (default)
|
|
204
|
+
```
|
|
205
|
+
|
|
206
|
+
Two meta-tools are always registered regardless of profile:
|
|
207
|
+
- `luminus_discover` — list available tools and profiles
|
|
208
|
+
- `luminus_status` — server health: registered tool count, active profile, configured/missing API keys
|
|
209
|
+
|
|
210
|
+
### Claude Code
|
|
211
|
+
|
|
212
|
+
```bash
|
|
213
|
+
# Full tool set
|
|
214
|
+
claude mcp add luminus -- npx luminus-mcp
|
|
215
|
+
|
|
216
|
+
# With a profile (recommended for faster responses)
|
|
217
|
+
claude mcp add luminus -- npx luminus-mcp --profile trader
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
### MCP Config (Claude Desktop / OpenClaw)
|
|
221
|
+
|
|
222
|
+
```json
|
|
223
|
+
{
|
|
224
|
+
"mcpServers": {
|
|
225
|
+
"luminus": {
|
|
226
|
+
"command": "npx",
|
|
227
|
+
"args": ["luminus-mcp", "--profile", "trader"],
|
|
228
|
+
"env": {
|
|
229
|
+
"ENTSOE_API_KEY": "your-key-here"
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
## Example Queries
|
|
237
|
+
|
|
238
|
+
Ask your AI agent:
|
|
239
|
+
|
|
240
|
+
- "What's powering Germany's grid right now?"
|
|
241
|
+
- "Compare day-ahead prices across France, Spain, and Italy"
|
|
242
|
+
- "How full are Europe's gas storage facilities?"
|
|
243
|
+
- "Show me wind generation forecast for tomorrow in Denmark"
|
|
244
|
+
- "What's the carbon intensity in the UK right now?"
|
|
245
|
+
- "Are there any nuclear outages in France?"
|
|
246
|
+
- "What's the net transfer capacity between Norway and Germany?"
|
|
247
|
+
- "Show me gas pipeline flows through the Netherlands"
|
|
248
|
+
- "What are GB imbalance prices doing today?"
|
|
249
|
+
- "Get historical wind speeds at 100m for a North Sea offshore site"
|
|
250
|
+
- "What did FCR tender prices look like this week?"
|
|
251
|
+
- "How much is France exporting to Spain right now?"
|
|
252
|
+
- "What's the Danish CO2 intensity in DK1?"
|
|
253
|
+
- "Show Finnish wind production over the last 24 hours"
|
|
254
|
+
- "What are the hydro inflow conditions in Norway?"
|
|
255
|
+
- "Get offshore weather forecast for the Dogger Bank wind farm"
|
|
256
|
+
- "What's the Spanish day-ahead price curve today?"
|
|
257
|
+
|
|
258
|
+
## Data Sources
|
|
259
|
+
|
|
260
|
+
| Source | Link | Coverage |
|
|
261
|
+
|--------|------|----------|
|
|
262
|
+
| ENTSO-E Transparency Platform | [transparency.entsoe.eu](https://transparency.entsoe.eu/) | 30+ European countries |
|
|
263
|
+
| ENTSOG Transparency Platform | [transparency.entsog.eu](https://transparency.entsog.eu/) | European gas pipelines |
|
|
264
|
+
| National Grid ESO | [carbonintensity.org.uk](https://carbonintensity.org.uk/) | UK |
|
|
265
|
+
| NESO Data Portal | [api.neso.energy](https://api.neso.energy/) | GB transmission connection registers and GIS boundary datasets |
|
|
266
|
+
| Elexon BMRS | [bmrs.elexon.co.uk](https://bmrs.elexon.co.uk/) | GB balancing mechanism |
|
|
267
|
+
| GIE AGSI+ / ALSI | [agsi.gie.eu](https://agsi.gie.eu/) | European gas & LNG |
|
|
268
|
+
| EIA | [eia.gov](https://www.eia.gov/) | US natural gas |
|
|
269
|
+
| energy-charts.info | [energy-charts.info](https://energy-charts.info/) | EU electricity (Fraunhofer ISE) |
|
|
270
|
+
| Nordpool | [nordpoolgroup.com](https://www.nordpoolgroup.com/) | Nordic & Baltic markets |
|
|
271
|
+
| SMARD | [smard.de](https://www.smard.de/) | German electricity |
|
|
272
|
+
| Regelleistung.net | [regelleistung.net](https://www.regelleistung.net/) | EU balancing reserves (FCR/aFRR/mFRR) |
|
|
273
|
+
| RTE France (ODRE) | [odre.opendatasoft.com](https://odre.opendatasoft.com/) | French electricity |
|
|
274
|
+
| Energi Data Service | [energidataservice.dk](https://www.energidataservice.dk/) | Danish electricity |
|
|
275
|
+
| Fingrid | [data.fingrid.fi](https://data.fingrid.fi/) | Finnish grid (3-min) |
|
|
276
|
+
| Terna | [developer.terna.it](https://developer.terna.it/) | Italian electricity |
|
|
277
|
+
| REE ESIOS | [esios.ree.es](https://www.esios.ree.es/) | Spanish electricity |
|
|
278
|
+
| ACER REMIT | [acer-remit.eu](https://www.acer-remit.eu/) | EU market transparency |
|
|
279
|
+
| Yahoo Finance | [finance.yahoo.com](https://finance.yahoo.com/) | Energy commodities |
|
|
280
|
+
| Open-Meteo / ERA5 | [open-meteo.com](https://open-meteo.com/) | Weather forecast + ERA5 reanalysis |
|
|
281
|
+
| PVGIS | [re.jrc.ec.europa.eu](https://re.jrc.ec.europa.eu/pvg_tools/) | Global solar irradiance |
|
|
282
|
+
| Storm Glass | [stormglass.io](https://stormglass.io/) | Marine/offshore weather |
|
|
283
|
+
| Open Power System Data | [open-power-system-data.org](https://open-power-system-data.org/) | European power plants |
|
|
284
|
+
| JAO | [jao.eu](https://www.jao.eu/) | Cross-border auctions |
|
|
285
|
+
| OpenStreetMap | [openstreetmap.org](https://www.openstreetmap.org/) | Transmission lines, substations |
|
|
286
|
+
| Open-Meteo Elevation | [open-meteo.com](https://open-meteo.com/) | Terrain elevation (Copernicus EU-DEM) |
|
|
287
|
+
| Natural England Open Data | [naturalengland-defra.opendata.arcgis.com](https://naturalengland-defra.opendata.arcgis.com/) | England protected areas and agricultural land classification |
|
|
288
|
+
| EEA Natura 2000 | [bio.discomap.eea.europa.eu](https://bio.discomap.eea.europa.eu/arcgis/rest/services/ProtectedSites/Natura2000_Dyna_WM/MapServer) | EU Natura 2000 protected sites |
|
|
289
|
+
| Environment Agency Flood Map for Planning | [environment.data.gov.uk](https://environment.data.gov.uk/dataset/04532375-a198-476e-985e-0579a0a11b47) | England flood zones and flood storage areas |
|
|
290
|
+
| mainsfrequency.com | [mainsfrequency.com](https://www.mainsfrequency.com/) | European grid frequency |
|
|
291
|
+
|
|
292
|
+
## Quality and safety guardrails
|
|
293
|
+
|
|
294
|
+
Luminus is meant to be boring in the right places: typed inputs, read-only data access, small runtime dependencies, and reproducible release checks.
|
|
295
|
+
|
|
296
|
+
Current repo guardrails:
|
|
297
|
+
- CI runs `npm test`, `npm run build`, `npm audit --omit=dev`, and `npm pack --dry-run`
|
|
298
|
+
- Dependabot watches npm and GitHub Actions dependencies
|
|
299
|
+
- `dist/` is cleaned before every build, so stale files do not leak into the published tarball
|
|
300
|
+
- package runtime is pinned to supported Node versions via `.nvmrc` and `package.json` `engines`
|
|
301
|
+
- raw upstream errors stay hidden unless `LUMINUS_DEBUG=1` is enabled locally
|
|
302
|
+
- tools with missing API keys are silently excluded at startup (reduced attack surface)
|
|
303
|
+
- all tool calls are logged to `~/.luminus/audit.jsonl` with sensitive parameter redaction
|
|
304
|
+
- API keys can be stored in `~/.luminus/keys.json` instead of environment variables (with Unix permission warnings for world-readable files)
|
|
305
|
+
|
|
306
|
+
See `SECURITY.md` for the release checklist and vulnerability reporting path.
|
|
307
|
+
|
|
308
|
+
## Troubleshooting
|
|
309
|
+
|
|
310
|
+
### "Error: ENTSOE_API_KEY not set"
|
|
311
|
+
|
|
312
|
+
Most ENTSO-E tools require an API key. Set it in `.env`, `~/.luminus/keys.json`, or pass via your MCP config's `env` block. Tools with missing keys are automatically excluded from registration, so they won't appear in the tool list. Tools that don't need a key (energy-charts, Nordpool, SMARD, Elexon, etc.) always work.
|
|
313
|
+
|
|
314
|
+
### "Error: No data returned" or empty results
|
|
315
|
+
|
|
316
|
+
- **Wrong zone code**: Use two-letter country codes (`DE`, `FR`, `GB`) or ENTSO-E bidding zone codes (`10YDE-VE-------2`). See tool descriptions for valid zones.
|
|
317
|
+
- **Date range**: Some APIs only serve recent data (24-48h). Don't request dates more than a few days in the past unless the tool description says otherwise.
|
|
318
|
+
- **Weekend/holiday**: Day-ahead auction results may not exist for the current day if the auction hasn't cleared yet.
|
|
319
|
+
|
|
320
|
+
### Rate limits
|
|
321
|
+
|
|
322
|
+
| Source | Limit | What happens |
|
|
323
|
+
|--------|-------|--------------|
|
|
324
|
+
| ENTSO-E | ~400 req/min | HTTP 429 — wait and retry |
|
|
325
|
+
| Storm Glass | 10 req/day (free) | HTTP 403 after limit hit |
|
|
326
|
+
| OpenStreetMap (Overpass) | ~10k/day | Slow responses, then timeout |
|
|
327
|
+
| GIE (AGSI+/ALSI) | ~60 req/min | HTTP 429 |
|
|
328
|
+
|
|
329
|
+
If you hit a rate limit, the error message will include the HTTP status code. Wait a minute and retry.
|
|
330
|
+
|
|
331
|
+
### Build/install issues
|
|
332
|
+
|
|
333
|
+
```bash
|
|
334
|
+
# Rebuild from source
|
|
335
|
+
npm run build
|
|
336
|
+
|
|
337
|
+
# Run the small regression suite
|
|
338
|
+
npm test
|
|
339
|
+
|
|
340
|
+
# Check runtime dependency vulnerabilities
|
|
341
|
+
npm audit --omit=dev
|
|
342
|
+
```
|
|
343
|
+
|
|
344
|
+
### Error handling and debug mode
|
|
345
|
+
|
|
346
|
+
Luminus now normalises tool failures into five buckets:
|
|
347
|
+
- **Invalid parameters**: bad zone, corridor, date, or missing required input
|
|
348
|
+
- **Configuration error**: missing API key or env var
|
|
349
|
+
- **No data returned**: request was valid, but the upstream source had no matching data
|
|
350
|
+
- **Upstream source error**: timeout, 4xx/5xx, or provider-side failure
|
|
351
|
+
- **Unexpected server error**: anything else
|
|
352
|
+
|
|
353
|
+
By default, tool responses stay short and actionable. If you need raw internals while debugging locally, set:
|
|
354
|
+
|
|
355
|
+
```bash
|
|
356
|
+
LUMINUS_DEBUG=1
|
|
357
|
+
```
|
|
358
|
+
|
|
359
|
+
That adds the raw upstream error text to MCP responses and prints the underlying error to stderr.
|
|
360
|
+
|
|
361
|
+
### Audit logging
|
|
362
|
+
|
|
363
|
+
All tool calls are logged to `~/.luminus/audit.jsonl` as newline-delimited JSON. Each entry includes a timestamp, tool name, and parameters (with sensitive values like API keys automatically redacted).
|
|
364
|
+
|
|
365
|
+
```bash
|
|
366
|
+
# View recent tool calls
|
|
367
|
+
tail -20 ~/.luminus/audit.jsonl | jq .
|
|
368
|
+
|
|
369
|
+
# Log location
|
|
370
|
+
# Windows: C:\Users\<you>\.luminus\audit.jsonl
|
|
371
|
+
# macOS/Linux: ~/.luminus/audit.jsonl
|
|
372
|
+
```
|
|
373
|
+
|
|
374
|
+
Audit logging is fire-and-forget and never blocks tool execution. Logs rotate automatically at 50MB.
|
|
375
|
+
|
|
376
|
+
### Dependency hygiene
|
|
377
|
+
|
|
378
|
+
Runtime deps are intentionally small: MCP SDK, dotenv, fast-xml-parser, and zod. Transitive deps still matter, so before releases you should run:
|
|
379
|
+
|
|
380
|
+
```bash
|
|
381
|
+
npm audit --omit=dev
|
|
382
|
+
```
|
|
383
|
+
|
|
384
|
+
The package pins `path-to-regexp` via `overrides` to avoid the known vulnerable 8.0.0-8.3.0 range pulled in through the MCP SDK's Express stack.
|
|
385
|
+
|
|
386
|
+
### Scope and limitations
|
|
387
|
+
|
|
388
|
+
Luminus aggregates publicly available European energy data. It is a data-access layer, not an energy trading model. It does not provide:
|
|
389
|
+
- Trading recommendations or financial advice
|
|
390
|
+
- Sub-second or tick-level market data
|
|
391
|
+
- Historical data beyond what each upstream API offers (typically days to weeks; ERA5 is the main multi-year exception)
|
|
392
|
+
- Guaranteed uptime — upstream APIs go down independently
|
|
393
|
+
|
|
394
|
+
Data freshness depends on each source. Most update every 15-60 minutes. Check the `timestamp` or `updated_at` field in tool responses.
|
|
395
|
+
|
|
396
|
+
## Licence
|
|
397
|
+
|
|
398
|
+
MIT. See [LICENSE](LICENSE).
|
|
399
|
+
|
|
400
|
+
## GIS roadmap
|
|
401
|
+
|
|
402
|
+
See [`docs/gis-roadmap.md`](docs/gis-roadmap.md) for the shipped sprint baseline, current tranche, next actions, and hard caveats.
|
|
403
|
+
|
|
404
|
+
## UK/EU GIS data sources, API keys, and registration
|
|
405
|
+
|
|
406
|
+
The current GIS tranche is built to favour keyless or low-friction public sources for a UK/EU MVP.
|
|
407
|
+
|
|
408
|
+
| Source | What we use it for | API key needed? | Registration needed? | Notes |
|
|
409
|
+
|---|---|---:|---:|---|
|
|
410
|
+
| PVGIS | solar resource / yield context | No | No | Public HTTP access, good fit for UK/EU MVP |
|
|
411
|
+
| Open-Meteo elevation | terrain and elevation context | No | No | Public HTTP access, lightweight for point lookups |
|
|
412
|
+
| OpenStreetMap / Overpass / OpenInfraMap-derived queries | substations, lines, coarse grid proximity | No | No | Keyless but public endpoints can be slow or flaky, so fallback logic matters |
|
|
413
|
+
| NESO Data Portal TEC register | GB transmission connection-register signal | No | No | Public CKAN datastore API, updated twice weekly, but it is transmission-only and not a DNO headroom map |
|
|
414
|
+
| Natural England / UK open GIS services | protected areas, constraint screening, agricultural land classification | Usually no | Usually no | Public access, but service quality and endpoint shape can be inconsistent |
|
|
415
|
+
| EEA Natura 2000 | EU protected-area screening | No | No | Good first EU-wide layer, but it is not the full national planning-constraints stack in each country |
|
|
416
|
+
| Environment Agency Flood Map for Planning | Flood Zone 2/3 and flood storage area screening | No | No | Public ArcGIS service for England planning layers, but still not a substitute for a site-specific FRA |
|
|
417
|
+
| CORINE / Copernicus-style open data | land-cover and broader EU layers | No | Usually no for basic access/downloads | Better suited to staged ingestion or pre-processing than naive live API calls |
|
|
418
|
+
|
|
419
|
+
### What this means in practice
|
|
420
|
+
|
|
421
|
+
- Most of the MVP stack is **keyless**.
|
|
422
|
+
- You do **not** need to register just to use the current GIS tool set.
|
|
423
|
+
- Public GIS endpoints are still not the same thing as production-grade infrastructure.
|
|
424
|
+
- For the first version, we should prove usefulness with public sources first, then decide later whether to cache, mirror, or formalise any upstream dependencies.
|
|
425
|
+
|
|
426
|
+
### How we check a source is really working
|
|
427
|
+
|
|
428
|
+
We do not treat docs as proof. We check sources by:
|
|
429
|
+
|
|
430
|
+
1. live sample calls from the code
|
|
431
|
+
2. tests around parsing and failure handling
|
|
432
|
+
3. clean upstream-specific error messages
|
|
433
|
+
4. fallback logic for brittle public services where it is worth it
|
|
434
|
+
5. build + audit + real tool proofs before locking a sprint
|
|
435
|
+
6. `verify_gis_sources` tool — pings each upstream provider and reports ok/degraded/unreachable with response times
|
|
436
|
+
|
|
437
|
+
### Source metadata and provenance
|
|
438
|
+
|
|
439
|
+
Every GIS tool response includes a `source_metadata` block with:
|
|
440
|
+
- **provider** and **licence** — where the data comes from and under what terms
|
|
441
|
+
- **coverage** — geographic and temporal scope
|
|
442
|
+
- **reliability** — high/medium/low, based on observed uptime and endpoint quality
|
|
443
|
+
- **caveats** — known limitations specific to that source
|
|
444
|
+
- **attribution** — required credit line
|
|
445
|
+
|
|
446
|
+
This metadata is not marketing. It is there so callers can judge how much to trust a response, especially when making decisions that matter (site acquisition, planning applications, grid connection quotes).
|
|
447
|
+
|
|
448
|
+
### Registration stance
|
|
449
|
+
|
|
450
|
+
Right now the right approach is:
|
|
451
|
+
|
|
452
|
+
- use keyless public sources where possible
|
|
453
|
+
- avoid signing up for unnecessary services too early
|
|
454
|
+
- only add registration-based or commercial sources later if reliability or coverage genuinely demands it
|
package/dist/index.d.ts
ADDED