gridcarbon-mcp
OfficialServer Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
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
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| get_carbon_intensityA | Return the most recently published carbon intensity for ONE electricity zone. Answers questions like "how clean is the German grid right now", "should I run this batch job in Ireland or leave it", "what is the CO2 per kWh in Texas". Data contract (read this before you report any number to a user):
Args:
Returns (structured): { "reading": { "zone": "DE", "zone_name": "Germany-Luxembourg", "source": "entsoe", "resolution_min": 60, "ts": "2026-08-26T01:00:00Z", // START of the interval, UTC "gco2eq_kwh": 371.4, "unit": "gCO2eq/kWh", "method": "computed:v1", "age_minutes": 107, "age_human": "1h 47m ago", "freshness": "normal", // fresh | normal | stale | very_stale "operational_factors_only": false, "warning": "..." // present only when something could mislead }, "as_of_statement": "As of 2026-08-26 01:00 UTC ... was 371.4 gCO2eq/kWh.", "unit": "gCO2eq/kWh", "interpretation": "371.4 gCO2eq/kWh is fossil-heavy.", "warnings": [] } How to report the answer: Quote or paraphrase "as_of_statement". Always include the timestamp or the age. Never say "currently" or "right now" about a reading whose freshness is "stale" or "very_stale", and never about any US zone without naming the time it refers to. Examples:
Errors:
|
| get_intensity_historyA | Return the interval-by-interval carbon intensity history for ONE zone over a time window. Use it for "how has the German grid varied today", "what was the cleanest hour in France yesterday", "is Ireland's grid dirtier at breakfast than at midday". Data contract (read this before you report any number to a user):
Window semantics:
Args:
Returns (structured): { "zone": "DE", "zone_name": "Germany-Luxembourg", "source": "entsoe", "resolution_min": 60, "unit": "gCO2eq/kWh", "from": "2026-08-25T18:00:00Z", "to": "2026-08-26T00:00:00Z", "count": 6, // points the API returned for the window "server_truncated": false, // TRUE means the window is INCOMPLETE, see below "points_returned": 6, "points_omitted_for_brevity": 0, "summary": { "min": 356.5, "max": 380.7, "mean": 363.6, "first": {...}, "last": {...}, "cleanest": {"ts": "...", "gco2eq_kwh": 356.5}, "dirtiest": {"ts": "...", "gco2eq_kwh": 380.7}, "change_from_first_to_last_pct": -5.3 }, "points": [ { "ts": "2026-08-25T18:00:00Z", "gco2eq_kwh": 380.7, "method": "computed:v1" } ], "operational_factors_only": false, "warnings": [] } Truncation — do not ignore this: The API caps a response at 5000 points. When it does, "server_truncated" is true and the series you received is only PART of the requested window. Never present a truncated series as a complete picture, and never compute a daily/weekly average from one. Narrow the window and call again instead. Examples:
Errors:
|
| list_zonesA | List every electricity zone gridcarbon covers, with its upstream data source, its reporting resolution, and whether its numbers are comparable with the rest. Call this whenever you are not certain a zone code exists. The data tools reject unknown codes on purpose — there is no sensible fallback, and substituting a neighbouring country's grid would be a fabrication. Coverage is 45 zones: continental Europe + Nordics + Ireland (ENTSO-E), 10 US balancing authorities plus a Lower-48 aggregate (EIA), and Great Britain (NESO). There is NO coverage of Canada, Australia, Japan, China, India, Latin America or Africa. This tool returns no measurements itself, but the values the other tools return follow one contract: the unit is gCO2eq/kWh and LOWER IS CLEANER; each value's "ts" is the START of its reporting interval in UTC; and "latest" means NEWEST PUBLISHED, NOT "now" — see typical_lag_hours below and always quote the timestamp with the number. Two things this list tells you that matter for correctness:
Args:
Returns (structured): { "count": 45, "total_covered": 45, "zones": [ { "zone": "DE", "name": "Germany-Luxembourg", "source": "entsoe", "resolution_min": 60, "factor_basis": "lifecycle", "typical_lag_hours": 4, "comparable_with_others": true }, { "zone": "GB", "name": "Great Britain", "source": "uk-neso", "resolution_min": 30, "factor_basis": "operational", "typical_lag_hours": 2, "comparable_with_others": false } ], "history_starts_at": "2026-08-21T00:00:00Z", "notes": [...] } Examples:
|
| compare_zonesA | Rank several electricity zones (or all 45) by their most recently published carbon intensity, cleanest first by default. Use it for "where should I run this training job", "is Sweden cleaner than Poland right now", "what are the five cleanest grids you cover". Data contract (read this before you report any number to a user):
Great Britain — the one thing that makes this tool easy to get wrong: GB's numbers come from NESO and use OPERATIONAL (combustion-only) factors. The other 44 zones use IPCC AR5 LIFECYCLE factors, which also count plant construction and fuel supply chains. GB therefore looks cleaner than like-for-like. GB is EXCLUDED from the ranking by default and returned in "excluded_from_ranking" WITH its value and the reason, so you can still report it — just report it separately, never as "GB is the cleanest of these". Passing include_gb_in_ranking=true ranks it anyway and flags every affected row; only do that if the user has been told why the numbers differ. Comparing different moments: Each zone's newest published interval has its own timestamp. European zones run 2-4h behind, US zones 11-28h behind, so a Europe-vs-US ranking compares observations taken up to a day apart. "observation_times.age_gap_minutes" reports that spread and a warning is added when it exceeds 6 hours. Say so when it applies. Args:
Returns (structured): { "unit": "gCO2eq/kWh", "order": "cleanest_first", "comparison_basis": "IPCC AR5 lifecycle factors (GB excluded: operational factors)", "ranked_count": 3, "omitted_by_limit": 0, "ranked": [ { "rank": 1, "zone": "FR", "zone_name": "France", "gco2eq_kwh": 48.3, "ts": "2026-08-26T00:00:00Z", "age_minutes": 168, "age_human": "2h 48m ago", "freshness": "normal", "band": "very clean", "comparable": true, "method": "computed:v1" } ], "cleanest": { ... }, "dirtiest": { ... }, "spread_gco2eq_kwh": 356.1, "excluded_from_ranking": [ { "zone": "GB", "zone_name": "Great Britain", "gco2eq_kwh": 114, "ts": "2026-08-26T01:30:00Z", "age_human": "1h 18m ago", "reason": "GB uses operational (combustion-only) factors ... not comparable ..." } ], "observation_times": { "newest_ts": "...", "oldest_ts": "...", "age_gap_minutes": 90 }, "headline": "Of 3 zone(s) ranked, FR is cleanest at 48.3 gCO2eq/kWh ...", "warnings": [ ... ] } Unknown zone codes are returned in "excluded_from_ranking" with reason "unknown zone code" instead of failing the whole call — surface them to the user, do not substitute a neighbour. Examples:
|
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/gridcarbon/clients'
If you have feedback or need assistance with the MCP directory API, please join our Discord server