GreenPick

io.github.bithug01Published by GitHub account bithug01v0.6.2Updated Nov 6, 2026

Greener, cheaper cloud infra decisions — carbon + cost + latency tradeoffs, in-editor.

Overview

AI-generated overview

Design-time cloud sustainability advisor that lets an assistant compare regions, time jobs and right-size workloads by carbon, cost and latency.

What you can do
  • Rank and compare cloud regions by carbon with cost and latency tradeoffs, and find greener alternatives to a chosen region
  • Estimate carbon for workloads, GPU training runs and LLM inference, and suggest greener instance families
  • Time deferrable and recurring jobs by cleanest hours, cleanest time of day and EU day-ahead forecast
  • Check right-sizing and off-hours savings, plus data-locality, egress and migration payback before moving regions
  • Draft a region-move justification paragraph and emit a Python carbon-metric scaffold for an app
  • Explain the methodology, assumptions and limits behind the numbers
When to use it
Useful when picking a cloud region, scheduling batch or training jobs, or trimming over-provisioned instances, and you want carbon weighed openly against cost and latency while still in the editor. It advises before deployment rather than measuring running systems.
Requirements
Runs locally as a Python package (Python 3.11+) over stdio, e.g. via uvx or python -m greenpick. Works offline with labelled typical values; live US and EU carbon needs the optional free EIA_API_KEY and ENTSOE_TOKEN, and ELECTRICITYMAPS_TOKEN is only used when GREENPICK_CARBON_SOURCE selects that source. Canadian regions need no key.
Before you install
Optional API keys are passed as environment variables; keep them out of shared configs. All figures are directional estimates, not audited accounting or compliance reporting, and non-live results are labelled typical, annual_average or mock — report them as such. Cost and latency are ballparks, and residency notes should be passed on before recommending a region move.

Installation

In SourceWeft

  1. Open GreenPick in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.

Other MCP clients

Follow the launch instructions in the repository.

README

[GreenPick logo — a leaf whose veins are circuit traces]

GreenPick

Write greener, cheaper cloud infrastructure — before you deploy.

[PyPI version] [License: MIT] [Tests: passing] [Python 3.11+] [MCP tools: 19]

A design-time sustainability co-pilot that runs as an MCP server inside your vibe-coding environment (Cursor / Claude Code / Kiro). Ask it where to deploy, when to run a job, or how to right-size — and it answers with an honest carbon + cost + latency tradeoff, in-editor, in seconds. (It responds when you ask; auto-nudging on infra-code changes is on the roadmap.)

Status: working — 19 tools. Live carbon for US (EIA-930), EU (ENTSO-E) and Canada (Hydro-Québec, IESO — no key needed), cross-cloud cost parity (Vantage-refreshed), per-axis R/Y/G ratings, carbon-aware scheduling + day-ahead forecast, GPU-training and LLM-inference carbon, right-sizing, serving-pattern and data-locality/residency checks — all shipped. Offline or without API keys, falls back to clearly-labelled typical values: this month's average for each grid, from a year of real data.

[Same H100 training run, ~28× the carbon depending only on region (Stockholm vs Sydney)]

The same 40-GPU-hour training run emits ~0.6 kg CO₂ in Stockholm vs ~17.5 kg in Sydney — a ~28× difference from region choice alone (typical October grids; Sydney on Ember's 2025 national figure, a lower bound for its coal-heavier state grid). Ask GreenPick and it surfaces that (with the cost and latency tradeoff) while you're still in the editor, before you commit.

▶ See the 5-minute demo — three scenarios with real tool output (training placement, the egress backfire, the forecast).

Features

  • 🧮 Right-sizing that cuts cost and carbon together — the FinOps win with a carbon twin. The money saved is the reason to run it; the carbon comes free.
  • ⏱ Carbon-aware scheduling — run deferrable jobs (ETL, batch, training) when the grid is cleanest, now or day-ahead. A decision you make for every recurring job.
  • ⚡ GPU training & LLM inference carbon — estimate a run's footprint and the greener where + when; the size/placement choices that actually move the number.
  • 🌍 Greener region picks — ranked by carbon, with the cost + latency tradeoff shown, not hidden.
  • 🛡 Backfire guards — flags when a greener move loses to egress, or crosses a data-residency line.
  • 🔌 Live US + EU grid data, with a realistic fallback built from a year of real data — no API keys required to start.

Contents

Why this exists

The same web service emits very different CO₂ depending on which region it runs in, because electricity grids differ in carbon intensity. Existing tools either rank regions in the abstract, or measure carbon after you deploy. GreenPick does it at the moment you choose, and tells you what the greener choice costs you in latency and dollars — so you can accept or reject it with eyes open.

What it is / is NOT

  • IS: directional "greener choice" guidance for a developer picking a cloud region while building. Guidance, with tradeoffs stated.
  • IS NOT: audited carbon accounting, ESG/Scope-2 reporting, or a real-time scheduler. GreenPick does not claim GHG-Protocol or ISO compliance — that's what the paid data vendors (Electricity Maps, WattTime) provide. GreenPick is for decisions, not disclosures.

How it differs from what's out there

  • Measurement tools (Cloud Carbon Footprint, CodeCarbon, Kepler) report what you already emitted, after you deploy. GreenPick advises before — at the choice.
  • Cloud providers' own tools (AWS CCFT, Azure, Google's "Low CO₂" region labels) cover one cloud and show carbon alone. GreenPick is cross-cloud and weighs carbon against cost and latency so you see the tradeoff, not just a green badge.
  • CI/CD carbon tools act at merge time on a pipeline job. GreenPick works earlier, in the editor, across more decisions (scheduling, right-sizing, training/inference, egress & residency).
  • Grid-data SDKs (Electricity Maps, WattTime, GSF Carbon Aware SDK) are building blocks; GreenPick is the decision layer on top of that kind of data.

The combination — cross-cloud, carbon + cost + latency, at design time, in the editor, with backfire guards — is the part nothing else puts together.

Scope

  • Providers: AWS, GCP, Azure — 25 regions across the US, Europe, Canada, Asia and Australia.
  • Workloads: long-running web/API services, GPU training runs, and deferrable jobs (ETL / batch / backups) — placement and timing for each.
  • Carbon = grid carbon intensity by region (directional, point-in-time; live US + EU), plus a day-ahead forecast (EU) for forward-looking scheduling.
  • Cost = compute + egress ballpark (deterministic static table, apples-to-apples across clouds; never LLM-invented).
  • Latency = geographic estimate to a stated user location.
  • Efficiency levers: greener instance family (perf-per-watt), right-sizing (cost + carbon together), and a carbon-metric scaffold to track your app over time.
  • Guardrails: data-locality / egress backfire checks and cross-jurisdiction residency flags.
  • Free data only. No flow-traced consumption accounting; carbon forecast is relative, not absolute.

Roadmap: data-format/engine efficiency advice, sub-national grid zones, CI/CD integration. See docs/user-questions-backlog.md.

MCP tools

19 tools, grouped by what you're trying to do.

Pick a region

ToolWhat it does
compare_regions_tri_axisRank candidate regions by carbon with cost + latency tradeoffs; recommend a pick, each axis rated R/Y/G. Pass regions to rank only the ones you'd actually consider.
greener_alternative_to"You picked X — the greenest region within +N ms latency is Y (−Z% carbon, Δcost)." The core nudge.
region_carbon_nowCurrent gCO₂/kWh for a region, with source + timestamp + freshness — and, when live, whether that's cleaner, dirtier or about usual for that hour this month.

Time a job (scheduling)

ToolWhat it does
cleanest_hours_to_runCleanest recent hours to time a deferrable job (ETL, backups, training), + % reduction. Pass window_hours for a job of known duration → cleanest contiguous window to start at.
cleanest_time_of_dayFor a recurring job (nightly batch): the region's cleanest time of day, averaged across recent days. A daily pattern, not a 7-day weekly one.
greenest_regions_on_averageWhich regions are cleanest on a typical day in a given month (or the whole year), ranked from last year's real data. Offline, no keys; a planning view, not today's grid.
carbon_forecastForward-looking: which upcoming hours will be cleanest, from the EU day-ahead wind+solar forecast (ENTSO-E). Relative ranking; US/uncovered zones degrade to the recent historical pattern.

Estimate a workload's carbon

ToolWhat it does
estimate_workload_carbonRough kgCO₂/month for a workload in a region (an estimate, not a measurement).
estimate_training_carbonCarbon of a GPU training run (TDP-based energy × live grid), with greener where (region ranking) + when (cleanest hours) — the two levers that compound for portable, deferrable training.
estimate_inference_carbonEnergy + CO₂ of an LLM inference workload, by model size class × output tokens × requests (× live grid). A low–high band; smaller size class is the big lever. Self-hosted-friendly; not a named-model leaderboard.

Efficiency & guardrails

ToolWhat it does
greener_instance_familyA greener same-size family in the same region via perf-per-watt (newer generation / ARM Graviton-class does the same work on less energy).
rightsizing_checkRight-sizing (the #1 FinOps win) with a carbon twin: if you're over-provisioned, a smaller size cuts both cost and carbon → the right-sized target with monthly $ and kg CO₂ saving.
offhours_checkFor dev/test/staging that doesn't need to run 24/7: the monthly $ and kg CO2 saved by running it only N hours a week. Compute only, directional.
data_locality_egress_checkWarn when running compute away from where your data lives backfires: directional egress $ + coarse transfer carbon, and whether a greener-region move is still a net win.
migration_payoffDoes moving the data to the compute's region pay off? Payback in months, one-off vs monthly egress and transfer carbon, net over 12 months. Egress only.
region_move_justificationA short paste-ready paragraph for a pull request or decision record, with the carbon, cost, latency and egress numbers and their quality labels. Says so if the move is not an improvement.
serving_pattern_adviceFor a user-facing platform: serve from one region or several? Traffic-weighted latency + carbon, with the multi-region data-sync egress and cross-jurisdiction residency catches.

Instrument & understand

ToolWhat it does
carbon_metric_scaffoldEmits paste-in instrumentation (Python) so your app reports its own estimated carbon over time — observable proxies × GreenPick's power model × live grid. Self-tracking, directional; not a runtime meter.
explain_methodology_and_limitsThe assumptions and what GreenPick explicitly does not claim.

Data sources (free; swappable behind one interface)

  • EIA-930 (US balancing authorities) and ENTSO-E (EU zones) — live grid carbon, auto-routed by region. Both also drive cleanest_hours_to_run from recent hourly history.
  • Hydro-Québec (Montreal / Québec City regions) and IESO (Toronto regions) — live hourly generation by source, public, no key needed. Hydro-Québec figures arrive 1.5–6 h late, so the latest complete hour is used and its timestamp shown.
  • Typical — the offline default and fallback: for each region, this calendar month's average intensity and average hour-of-day profile (UTC), computed from 12 months of real hourly EIA-930 / ENTSO-E data (data/typical.json, refreshed by scripts/refresh_typical.py). Labelled quality: "typical" — a realistic norm, never presented as a current reading.
  • Annual — for Singapore, Tokyo, Mumbai/Pune and Sydney, where no free hourly data exists: the country's yearly lifecycle grid intensity from Ember (via Our World in Data, CC BY 4.0), with source and year (data/annual.json). Labelled quality: "annual_average"; fine for comparing regions, but carries no timing signal.
  • Mock — a hand-set illustrative value, labelled quality: "mock", kept only as a last resort if every other source is missing. No catalog region relies on it.
  • Cost: a dated static pricing table (data/pricing.json), refreshed from live Vantage pricing via scripts/refresh_pricing.py using one matched method across all three clouds.
  • Instance-family efficiency: directional perf-per-watt multipliers (data/instance_families.json).
  • Latency: great-circle distance from region coordinates to the user's location.

Set EIA_API_KEY and ENTSOE_TOKEN (both free) for live carbon — see Turn on live data; GREENPICK_CARBON_SOURCE selects the source (auto routes US→EIA, EU→ENTSO-E, falling back to typical).

The data layer is a swappable repository (typical values by default, works offline). Nothing here invents numbers: the LLM writes the rationale, the code supplies the figures.

Honest limitations (shipped in the tool itself)

Directional, not audited. Region→grid-zone mapping is approximate. Carbon is point-in-time, not flow-traced consumption. Cost is a ballpark, not a quote. Latency is a geographic estimate. "Greener" assumes grid intensity dominates and ignores embodied/hardware carbon and provider RECs.

Quick start

bash
# Python 3.11+pip install greenpick          # from PyPIpython -m greenpick            # run the MCP server (stdio)

Or from source, for development (editable install + tests):

bash
git clone https://github.com/bithug01/greenpick.gitcd greenpickpip install -e ".[dev]"cp .env.example .env            # defaults to typical values — works offlinepython -m greenpick             # run the MCP server (stdio)pytest                          # run tests

Connect it to an MCP client (e.g. Kiro / Claude Code / Cursor) by pointing the client at python -m greenpick in this directory. See .env.example for switching the data source.

Turn on live data

GreenPick runs on labelled typical values until you give it two free keys: EIA (US grid) and ENTSO-E (EU grid). Pass them as environment variables. Canadian regions are live with just GREENPICK_CARBON_SOURCE=auto — their sources need no key. (A .env file works for a source checkout; if you installed with pip install greenpick, use one of the options below.)

In an MCP client (Kiro, Claude Desktop, Cursor…), add an env block to the server entry:

json
{  "mcpServers": {    "greenpick": {      "command": "python",      "args": ["-m", "greenpick"],      "env": {        "GREENPICK_CARBON_SOURCE": "auto",        "EIA_API_KEY": "your-eia-key",        "ENTSOE_TOKEN": "your-entsoe-token"      }    }  }}

In a Jupyter notebook or Python script, connect with the MCP client library and pass the keys in env. The library starts GreenPick as a separate process and doesn't forward the notebook's own environment variables to it:

python
import sys# "mcp" is the MCP Python SDK (installed alongside greenpick), not a greenpick module.from mcp import ClientSession, StdioServerParametersfrom mcp.client.stdio import stdio_client
params = StdioServerParameters(    command=sys.executable,    args=["-m", "greenpick"],    env={        "GREENPICK_CARBON_SOURCE": "auto",        "EIA_API_KEY": "your-eia-key",        "ENTSOE_TOKEN": "your-entsoe-token",    },)
# Keep errlog=: in Jupyter it must be a real file, because the notebook's stderr has no fileno()# (without it you get "UnsupportedOperation: fileno").with open("greenpick-server.log", "w") as errlog:    async with stdio_client(params, errlog=errlog) as (read, write):        async with ClientSession(read, write) as session:            await session.initialize()            result = await session.call_tool(                "region_carbon_now", {"provider": "aws", "region": "us-west-2"}            )            print(result.content[0].text)

Top-level await works in Jupyter. In a plain script, put the with block inside an async def and run it with asyncio.run(...).

Using an AI assistant inside a notebook? Paste the starter prompt as your first message: it sets up the connection and points the assistant at the right tool for each question.

Every carbon figure includes a quality field: live means a current reading, typical means this month's average from last year's real data, annual_average means a sourced yearly national figure (regions with no free hourly data), and mock means a hand-set value. Check it to confirm live data is on. A result that isn't live also includes a live_data_hint saying why (no key set, the source didn't respond, or no free source covers that region) and what to do about it.

FAQ

Do I need API keys? No — out of the box GreenPick uses typical values: each grid's average for the current month, from a year of real hourly data, labelled quality: "typical". For live carbon, set two free keys (EIA_API_KEY for US, ENTSOE_TOKEN for EU) and GREENPICK_CARBON_SOURCE=auto — see Turn on live data.

Why "directional" and not audited numbers? Because it's for a design-time decision, not a compliance report. "Stockholm is ~28× cleaner than Sydney" is what you need to pick a region in seconds — a certified figure is a different job for a different tool (Electricity Maps, WattTime). GreenPick is for decisions, not disclosures, and says so in every tool's limitations.

My cloud says this region is already 100% renewable — so does region even matter? That's market-based accounting (the provider matches usage with renewable certificates/PPAs over a year). GreenPick uses location-based accounting — the actual carbon intensity of the grid you physically draw from, hour to hour. Both are legitimate (the GHG Protocol asks for both), and they answer different questions: market-based is about procurement claims; location-based is about the real grid your workload leans on right now. GreenPick is deliberately location-based because that's what a placement/timing decision actually affects — you can't change the provider's annual REC portfolio, but you can choose a cleaner grid or a cleaner hour. We ignore RECs by design, not oversight.

What happens for a region with no live data? It falls back to that region's typical value for the month (or, for a region no free source covers, a hand-set mock value), and labels which — it never presents a fallback as a live reading. Forecast likewise degrades to the recent history, or the typical day, where no day-ahead feed exists (e.g. US), labelled as such.

Can it rank Claude vs GPT vs Llama for carbon? No, by design. estimate_inference_carbon works by model size class (self-hosted-friendly), not a named-model leaderboard — vendors don't disclose the serving details that would make such a ranking honest.

How do I ask it something? You don't call tools directly — you talk to your MCP client in plain language ("where's the greenest region to run this?") and it invokes the right tool. See the demo for the kinds of questions that trigger each one.

Contributing

Contributions of any kind are welcome — a bug report, a data-source correction, a sharper caveat, or code. See CONTRIBUTING.md for the short version. The one thing GreenPick asks: keep it honest and directional — no invented numbers, no precision the data can't back (that discipline is the whole point).

License

MIT — see LICENSE. © 2026 Data Science Advisers, LLC.

Source: README.md at commit 631564c

Tools

19

compare_regions_tri_axis

Rank candidate cloud regions by carbon, with cost + latency tradeoffs, and recommend one. Give the user's location (lat/lon) and the service shape (vcpu, ram_gb, egress). Pass `regions` (e.g. ["us-east-1","us-west-2","eu-west-1"]) to rank ONLY those you'd actually consider, instead of the whole catalog — your baseline is always kept in the comparison. If the pick is in a different region from where your data lives, run data_locality_egress_check before moving: cross-region/cross-cloud egress can erase the carbon/cost win. To write a chosen move up for a pull request or decision record, use region_move_justification (do not draft the text from this result).

Parametersvcpurequiredram_gbrequiredregionsuser_latrequireduser_lonrequiredprovidersoptimize_forbaseline_regionmax_added_latency_msest_monthly_egress_gb

greener_alternative_to

You picked `current_region` — find the greenest region within +max_added_latency_ms, with the carbon/cost/latency delta vs. your current choice. The core 'nudge' tool. Pass `regions` to limit the search to options you'd actually move to; your current region is always included. Before accepting a move, run data_locality_egress_check if your data stays in the current region — the egress to feed compute from afar can outweigh the greener-region win. To write a chosen move up for a pull request or decision record, use region_move_justification.

Parametersvcpurequiredram_gbrequiredregionsuser_latrequireduser_lonrequiredproviderscurrent_regionrequiredmax_added_latency_msest_monthly_egress_gb

estimate_workload_carbon

Rough kgCO2/month for a workload running in a region. An ESTIMATE (documented power model x grid intensity), not a measurement.

Parametersvcpurequiredram_gbrequiredregionrequiredproviderrequiredhours_per_month

region_carbon_now

Current grid carbon intensity for a region, with source, timestamp, and data freshness. When the reading is live, also says how it compares with what's typical for that hour this month (vs_typical: cleaner_than_usual / about_usual / dirtier_than_usual) — useful for "is now a good moment to run this?".

Parametersregionrequiredproviderrequired

cleanest_hours_to_run

Carbon-aware scheduling: given a region, report its cleanest recent hours so you can time a DEFERRABLE job (nightly ETL, batch, backups, training) when the grid is greenest. Returns the lowest-carbon hours + the % reduction vs. the dirtiest hour. Pass `window_hours` (e.g. 6) for a job of known duration — it finds the cleanest CONTIGUOUS run of that many hours to start at, since you can't split one job across scattered non-adjacent hours. Directional.

Parameterstop_nregionrequiredproviderrequiredwindow_hours

greener_instance_family

Suggest a greener SAME-SIZE instance family in the SAME region. The mechanism is performance-per-watt: a newer-generation or ARM (Graviton-class) family does the same work on less energy -> less CO2 at the region's grid intensity. Give your current family (e.g. 'm5', 'n2', 'Dv5') for a savings delta. Directional, not a measurement.

Parametersvcpurequiredram_gbrequiredregionrequiredproviderrequiredcurrent_familyhours_per_month

estimate_inference_carbon

Energy + CO2 of running an LLM INFERENCE workload (serving queries) — the inference-side sibling of estimate_training_carbon. Give the model SIZE CLASS (small | mid | large | frontier_dense | moe, or a param alias like '8b' / '70b' / 'moe'), monthly request volume, and avg OUTPUT tokens per request (output drives inference energy). Pass `region` to add CO2 at live grid intensity. Returns a LOW-HIGH kWh/CO2 band (wide on purpose — serving choices move the same model many-fold). Directional, most trustworthy for self-hosted/open models; keyed on size class, NOT a named-model leaderboard. Smaller size class is the biggest lever.

Parametersregionprovidersize_classrequiredmonthly_requestsrequiredavg_output_tokens

rightsizing_check

Right-sizing (the #1 FinOps win) with a carbon twin: if you're over-provisioned, a smaller size cuts BOTH cost and carbon — same work, less waste, no tradeoff. Give the provisioned size (vcpu, ram_gb) and observed CPU utilisation (0..1, e.g. 0.2 for 20%); optionally RAM utilisation. Returns the right-sized target (keeps ~40% headroom) with the monthly $ AND kg CO2 saving. Lead with the cost number, carbon is the twin. Directional, design-time — uses the utilisation you report, not a reading of your fleet.

Parametersvcpurequiredram_gbrequiredregionrequiredproviderrequiredcpu_utilizationrequiredhours_per_monthram_utilization

offhours_check

Non-prod / idle scheduling, the other FinOps basic next to right-sizing: "this doesn't need to run 24/7." Give the instance size and how many hours a WEEK it actually needs to be on (weekdays 9-17 is 40, weekdays 7-19 is 60, around the clock is 168). Returns the monthly $ AND kg CO2 saved by switching it off the rest of the time. Lead with the dollar number. Only for on-demand capacity that tolerates being off (dev, test, staging, demo, batch); reserved instances and savings plans are paid for regardless. Directional, compute only.

Parametersvcpurequiredram_gbrequiredregionrequiredproviderrequiredhours_per_week_onrequired

greenest_regions_on_average

Which regions are normally the cleanest in a given month (default: the current one), or over the whole year? Ranks regions by their TYPICAL average grid carbon, built from a year of real hourly data, with each region's cleanest and dirtiest month. Use it to pick a region on a monthly norm rather than a single hour; use region_carbon_now for what the grid is doing today. Carbon only (no cost or latency; compare_regions_tri_axis weighs all three). Offline, needs no keys. Regions labelled annual_average have only a yearly national figure and are not month-specific.

Parametersmonthtop_nregionsproviderswhole_year

carbon_metric_scaffold

Emit paste-in instrumentation so the user's OWN app can report an ESTIMATED carbon metric over time. Consider offering this when the user is building an app/service and wants ongoing visibility into its footprint. GreenPick returns a code snippet (Python in v1) + the power-model coefficients + a methodology note; the app measures observable proxies (CPU utilisation, vCPU/RAM, uptime) and multiplies by GreenPick's power model x the region's grid intensity. Pass `region` to bake in live grid intensity. The emitted number is a DIRECTIONAL estimate, self-labelled, NOT metered energy — and it's for SELF-tracking, not ranking against other apps. GreenPick does not run or measure anything itself.

Parametersvcpuram_gbregionlanguageprovider

serving_pattern_advice

Design-time advice for a USER-FACING PLATFORM: should you serve users from ONE region or SEVERAL? Consider calling this when the user is building a web app / dashboard / API that serves end users. Give `hubs` as where your users are — a list like [{"name":"eu","share":0.4},{"name":"us","share":0.4},{"name":"apac","share":0.2}] (known names us/eu/uk/apac/au/india/japan/sa resolve automatically, or pass lat+lon). Rough shares are fine. Scores single-region-for-all vs one-region-per-hub on weighted latency + grid carbon, and flags the multi-region catches: cross-region data-sync egress and cross-jurisdiction residency. This is design-time guidance, NOT a runtime meter — it never measures your running app.

Parametershubsrequiredvcpuram_gbproviders

data_locality_egress_check

Will running compute away from where your DATA lives backfire via egress? Give where compute runs, where the data lives (provider+region), and monthly GB crossing between them. Returns a directional egress-COST ballpark, a coarse transfer-carbon figure, and — if you pass the carbon saving the greener-region move buys — whether it's still a net win. Use this before accepting a greener-region suggestion when your data stays put. Use the user's real GB and data location; if unknown, ask rather than assume. If verdict_status is 'not_evaluated' there is NO answer yet to 'does it backfire?': say so, and get carbon_saving_kg_co2_from_move first.

Parametersdata_regionrequireddata_providerrequiredcompute_regionrequiredcompute_providerrequiredmonthly_cross_boundary_gbrequiredcarbon_saving_kg_co2_from_move

migration_payoff

Does moving the DATA to the compute's region pay off, or should it stay? Follow-on to data_locality_egress_check. Give where the data is now, where compute runs, how many GB you would migrate once, and how many GB a month cross between them today. Returns the payback in months, the one-off vs monthly egress cost and transfer carbon, and the net over the horizon (default 12 months). Egress only: storage prices, request charges, downtime and effort are not included, and it does NOT judge whether the compute should be in that region (use region_move_justification for that). Quote the FULL dollar range (low and high), not just the high end; it can straddle zero. Ask the user for the GB figures rather than assuming them.

Parametersdata_regionrequireddata_providerrequiredcompute_regionrequiredhorizon_monthscompute_providerrequireddata_gb_to_migraterequiredmonthly_cross_boundary_gbrequired

region_move_justification

A short, paste-ready paragraph justifying a region choice, for a pull request or decision record. Give the current and proposed region, the service size, and optionally the users' lat/lon (for latency) and the GB a month that would still cross to data left behind (for egress and the net carbon). Returns `pr_text` plus the underlying `facts`. If the move is not an improvement the text says so. Show the user the text and the quality labels; it formats numbers GreenPick already computes, and the wording should be reviewed before it is pasted.

Parametersvcpurequiredram_gbrequireduser_latuser_lonto_regionrequiredfrom_regionrequiredto_providerrequiredfrom_providerrequiredhours_per_monthmonthly_cross_boundary_gb

carbon_forecast

Forward-looking scheduling: which UPCOMING hours will be cleanest? Uses the EU day-ahead wind+solar forecast (ENTSO-E) to rank the greenest hours over the next `hours_ahead`. This is a RELATIVE ranking (more forecast renewables = cleaner), not an absolute gCO2/kWh forecast. EU regions get a true forecast; US/uncovered regions degrade to the recent historical pattern (labelled 'historical'). Use this to PLAN a deferrable job, vs cleanest_hours_to_run (reactive).

Parameterstop_nregionrequiredproviderrequiredhours_ahead

cleanest_time_of_day

For a RECURRING job (e.g. a nightly batch you run every day), find the region's cleanest time of day — each hour-of-day averaged across the recent days of data. Returns the cleanest/ dirtiest hour-of-day and the % gap. Honest scope: a DAILY pattern over the few days of free data, NOT a 7-day day-of-week pattern. Use `cleanest_hours_to_run` for a one-off job's timing.

Parametersregionrequiredproviderrequired

estimate_training_carbon

Carbon of a GPU training run, with greener WHERE (region) and WHEN (hours) guidance. Give the GPU (e.g. 'a100', 'h100', 'l4'), how many (gpu_count), and gpu_hours = TOTAL accelerator-hours across ALL GPUs — e.g. 8 GPUs running for 10 hours is gpu_hours=80, not 10. The output echoes wall_clock_hours (~gpu_hours / gpu_count) for reporting. Omit `region` to rank regions greenest-first; pass one to score just that region. Training is both portable and deferrable, so this combines region choice with cleanest-hours timing. Directional (TDP-based energy); GPU availability per region is NOT checked - verify your card is offered there. Training data is often large: if your dataset lives in another region, run data_locality_egress_check before shipping the job to the greenest region - the data egress can outweigh the carbon saving. `utilization` is an optional fraction of TDP (0..1, e.g. 0.6 for 60%).

Parametersgpurequiredregionprovidergpu_countrequiredgpu_hoursrequiredutilizationtop_n_regions

explain_methodology_and_limits

GreenPick's assumptions and what it explicitly does NOT claim. Read this before trusting a number.

Takes no parameters.

Version history

11
  1. v0.6.2LatestNov 6, 2026
  2. v0.6.1Nov 3, 2026
  3. v0.5.2Nov 3, 2026
  4. v0.4.2Oct 29, 2026
  5. v0.4.1Oct 26, 2026
  6. v0.1.8Oct 26, 2026
  7. v0.1.7Oct 25, 2026
  8. v0.1.6Oct 25, 2026
  9. v0.1.5Oct 23, 2026
  10. v0.1.3Oct 23, 2026
  11. v0.1.1Oct 22, 2026

Score

90% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 days25 pts
  • Auth declared10 pts

    Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.

  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts