Skip to main content
Glama
mcp-edf

mcp-edf

by mgcrea

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
EDF_SITENoThe home to read, as part of its address (e.g. `LYON`). Required only if the account has several; any read refuses a mismatch.
EDF_DEBUGNo`1` logs each request to stderr.
EDF_CONFIGNoA JSON config file with the same settings (`site`, `tokenFile`, …). Defaults to `~/.config/edf/config.json`.
EDF_TIMEOUT_MSNoPer-request timeout. Default 30000.
EDF_TOKEN_FILENoWhere the login is stored. Defaults to `~/.config/edf/tokens.json`.
EDF_MAX_RETRIESNoRetries for 401 / 429 / 5xx. Default 3.
EDF_REFRESH_TOKENNoA refresh token from outside. Kept in memory only, so a login made in-session lasts until restart.

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
edf_auth_statusA

Whether the server is signed in to EDF, which home it reads (the login picks the account, and an account can hold several homes), when the login was made, and where it is stored. Signed out, returns the steps to sign in. Call this first when a data tool answers signedIn: false.

edf_auth_loginA

Sign in to EDF. On macOS this opens the EDF login in a Safari tab and catches the one-time code when EDF redirects back: if Safari is already signed in to EDF it completes in a second or two with nothing to do; otherwise Safari comes forward and the user logs in as usual. The first run triggers macOS's 'allow to control Safari' prompt. Waits up to wait_seconds, then keeps listening in the background for 5 minutes: call edf_auth_status afterwards. Elsewhere, pass redirect_url instead (see that argument). Logging in again replaces the stored login.

edf_auth_logoutA

Revoke the stored refresh token at EDF (best effort) and delete it locally. Recoverable by calling edf_auth_login again.

edf_get_contractsA

The home's EDF contracts. Electricity: the tariff option (BASE, HPHC for peak/off-peak, TEMPO…), the subscribed power in kVA and EDF's tariff code, as a history of versions, since EDF writes a new one at every price or option change; current is the one in force. For options with off-peak hours, the meter's calendar (e.g. "HC 01:30-07:00"). Gas: tariff code, consumption option and price zone, or null with no gas contract. Call it to learn the option before reading costs by tariff heading.

edf_get_electricity_consumptionA

Electricity used per day or per month, in kWh and in euros, from the Linky meter via EDF Suivi Conso. Each row has the total cost, the daily share of the subscription (standing_charge_eur), and, on a peak/off-peak or Tempo contract, the split by tariff heading. total sums the range and gives the average price per kWh. Costs are EDF's own estimate at the contract's prices, taxes included; they track the bill closely but are not the invoice. Rows flagged nature other than REAL are estimates. Use step=month for anything over a few months: a year of days is ~25 kB.

edf_get_electricity_load_curveA

The Linky load curve: energy per 30 minutes (or per hour) as compact rows of [start, kWh, average kW], with the range total and the peak interval. Use it to see when power is drawn (night vs day, a heater, a car charging); use edf_get_electricity_consumption for daily or monthly totals and costs. Paris local times. At most 7 days at 30m, 31 days at 1h, since a single day is 48 rows. The curve only exists if load-curve collection is switched on for the meter (it is on Suivi Conso's hourly view).

edf_get_electricity_max_powerA

The highest power drawn each day, in kVA, as [date, max_kva] rows, with the range maximum and the subscribed power of the current contract to compare against. Use it to decide whether the subscription (e.g. 6, 9, 12 kVA) is too high or close to tripping. The meter's history goes back years; this filters it to the range asked.

edf_get_gas_consumptionA

Gas used per day or per month from the Gazpar meter via EDF Suivi Conso: kWh, m³, the conversion factor between them, and euros (energy plus the daily share of the subscription). total sums the range. Costs are EDF's estimate at the contract's prices, taxes included. Daily figures need a communicating Gazpar meter and arrive a day or two late; months are available further back. Answers 404 on an account with no gas contract.

edf_get_weatherA

The weather at the home's weather station, as Suivi Conso shows it beside the consumption: the average outdoor temperature per day (to 0.1 °C) with the sky (sunny, sunny spells, overcast, light rain…), or per month (whole °C). Use it to read consumption against the weather: heating demand follows the temperature, cooling the heat, and a sunny day lowers heating needs. The sky is one coarse label per day; for sunshine hours or solar radiation use an external weather archive. Same Paris-time days as the consumption tools, so rows line up with edf_get_electricity_consumption and edf_get_gas_consumption.

edf_compare_yearsA

Each month of a year against the same month of the year before, from EDF's own comparison: kWh and euros both years and the change in %, for electricity or gas. total_complete_months sums only months present in both years. EDF rounds to whole kWh and euros. These are raw figures, NOT weather-adjusted: pair them with edf_get_weather (step=month) to tell a colder winter from a change in the home, or use edf_compare_periods for EDF's weather verdict on electricity.

edf_compare_periodsA

Electricity used in one period against a reference period (by default the same dates a year earlier), with EDF's weather verdict: whether the period was warmer, similar or colder than the reference, and whether consumption was higher, similar or lower. Use it to ask "did we use more this summer than last, and was it hotter?". The verdict is qualitative and reads temperature only: the kWh are NOT weather-adjusted, and in summer "colder" just means cooler, which lowers a cooling load rather than raising a heating one. Electricity only; EDF answers FLUID_NOT_SUPPORTED for gas, so use edf_compare_years with energy=gas plus edf_get_weather there.

edf_get_usage_breakdownA

EDF's ESTIMATE of where the energy went over the last 12 months, by use (heating, hot water, cooking, fridge and freezer, washing, lighting…), in kWh, euros and %. For electricity it adds EDF's estimate of electric heating per month as [month, kWh, €] rows. This is a model (model names EDF's algorithm) fed by the home profile declared on suiviconso.edf.fr, not a measurement: profile_declares_air_conditioning shows one profile field that changes it most. A profile that predates new equipment skews it, so update the profile on the site first. For measured figures use the consumption tools.

edf_requestA

Escape hatch: GET any Suivi Conso API path for this home, returning the raw JSON (cut at 60,000 characters). GET only; the same login and home headers as the other tools. Prefer the dedicated tools: their output is shaped, this one's is not. Paths seen in the Suivi Conso site include /v2/sites/-/elec-price-changes (beginTs, endTs), /v1/sites/-/billing-windows (fluids=ELEC,GAS), /v2/sites/-/elec-tariff-calendars (date=2026-11-11, a bare date), /v1/sites/-/usage-breakdowns (ts, fluid=ELEC|GAS), /v2/sites/-/forecast-consumptions (beginDate, endDate, fluid, strategy=ESTIMATION_AFTER_REAL). - stands for the current home. Some endpoints are v1 and others v2, and a wrong version answers 404.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

A4.4/5.0

Scored across 13 tools

Disambiguation5/5

Each tool targets a distinct resource or analysis: auth lifecycle, contracts, electricity consumption, load curve, max power, gas consumption, weather, two comparison modes, usage breakdown, and a raw escape hatch. The descriptions actively disambiguate the risky pairs (consumption vs load curve vs max power, compare_years vs compare_periods, estimated breakdown vs measured consumption) and frame edf_request as a fallback to be avoided. No two tools appear interchangeable.

Naming Consistency5/5

All tools share the edf_ prefix with a predictable verb_noun shape, grouped into coherent families (auth_*, get_*, compare_*). The only deviation is edf_request, the generic escape hatch, which reads naturally as a deliberate exception. An agent can guess a tool name from intent.

Tool Count5/5

13 tools is well within the ideal range and each one maps to a real capability (three auth, four electricity reads, gas, weather, two comparisons, breakdown, raw request). Nothing looks like filler or a near-duplicate.

Completeness4/5

The surface covers the full read-only lifecycle: sign-in/status/sign-out, contract discovery, measured consumption for both energies, power diagnostics, weather context, comparisons, and an escape hatch for anything else. Gaps are minor but real: no tool to list or switch among the multiple homes an account can hold, and billing/invoice or tariff-change data is reachable only through the unstructured edf_request.

Maintenance

ActivityMaintained
ResponsivenessNo recent community issues