boaviztapi-mcp
Estimate the environmental footprint of IT hardware via BoaviztAPI, with units, uncertainty ranges, and caveats.
Explain impact criteria and units (e.g. gwp, adp, pe), optionally filtered by keyword.
Search the BoaviztAPI catalog for exact names of cloud providers, instances, regions, server/device archetypes, GPUs, CPUs, and countries.
Describe catalog items to inspect their specifications, components, and default assumptions.
Estimate a cloud VM's footprint by provider, instance type, region or usage location, load, and duration.
Estimate an on-premise server's footprint, optionally adding CPU, RAM, disks, and GPUs, with power/load and lifetime controls.
Estimate individual components (GPU, CPU, RAM, SSD, HDD) for a given number of units.
Estimate end-user devices such as laptops, smartphones, monitors, and IoT devices.
Compare 2–5 options over a common period, ranking them per criterion with differences and range-overlap checks.
Get embedded vs. use-phase impacts separately, plus structured results and a plain-text summary for every estimate.
boaviztapi-mcp
An MCP server that lets AI assistants answer questions about the environmental footprint of IT hardware: cloud instances, servers, GPUs and other components, and end-user devices. It asks BoaviztAPI and reports the answer with units, uncertainty ranges and caveats.
Unofficial community project. Every number comes from BoaviztAPI, built by Boavizta. See their methodology documentation for how impacts are computed.
Quick start
You need uv. The server talks to the public BoaviztAPI instance by default; see Configuration to use your own.
Claude Desktop, Cursor and other clients with an mcpServers config:
{
"mcpServers": {
"boaviztapi": {
"command": "uvx",
"args": ["boaviztapi-mcp"]
}
}
}To use your own BoaviztAPI instance, add "env": {"BOAVIZTAPI_URL": "http://localhost:5000"} next to args.
Claude Code:
claude mcp add boaviztapi -- uvx boaviztapi-mcpAdd -e BOAVIZTAPI_URL=http://localhost:5000 before -- to use your own instance.
Docker, from a clone of this repository:
docker build -t boaviztapi-mcp .
docker run -i --rm boaviztapi-mcpPass -e BOAVIZTAPI_URL=... to docker run to change the instance. Inside a container, localhost is the container itself; use host.docker.internal (Docker Desktop) to reach an instance on your machine.
From source, without installing a release:
uvx --from git+https://github.com/malikmalikayesha/boaviztapi-mcp boaviztapi-mcpTry it without a client using the MCP Inspector:
npx @modelcontextprotocol/inspector uvx boaviztapi-mcpRelated MCP server: leadgreen-mcp
What you can ask
"What is the footprint of 4 H100 SXM GPUs running for a year in Germany?"
"Compare an AWS m5.xlarge in France and in the US over a month."
"What is the embedded carbon of a typical laptop?"
"Which is greener in eu-west-3 at 50% load: m5.xlarge or c5.2xlarge?"
"What would a server with 2x Xeon Gold 6134 and 384 GB RAM emit over 5 years in France?"
"What does
adpmean and what unit is it in?"
The first question in Claude Desktop, with the server's tools doing the lookup and the estimate:
The same answer as the server returns it (the summary field of estimate_component):
4x NVIDIA H100 SXM 80GB, over 8760 h (1 year), in Germany (DEU)
Embedded = the share of manufacturing allocated to 8760 h of a 26280 h lifetime.
gwp, Total climate change (kgCO2eq):
embedded: 766.8
use: 7100 (range 1035 to 10350)
total: 7867 (range 1802 to 11120)
adp, Use of minerals and fossil ressources (kgSbeq):
embedded: 0.007776
use: 0.0015 (range 0.0002155 to 0.002155)
total: 0.009276 (range 0.007992 to 0.009931)
pe, Consumption of primary energy (MJ):
embedded: 10550
use: 270000 (range 39880 to 398800)
total: 280600 (range 50430 to 409400)
Assumptions: units 4, TDP 700 W, average power 479.5 W (range 70 to 700), load 65 % (range 0 to 100), use time ratio 1, lifetime 26280 hours, grid carbon intensity 0.422 kg CO2eq/kWh.
Note: GPU 'h100 sxm' was read as NVIDIA H100 SXM 80GB.
Note: GPU only; the host server is not included. Use estimate_server with a gpu block for a whole system.
Source: BoaviztAPI 2.6.0 at https://api.boavizta.orgA comparison (compare_estimates, first criterion shown):
Comparison over 8760 h (1 year):
- m5.xlarge: aws m5.xlarge, over 8760 h (1 year), in eu-west-3 (FRA)
- c5.2xlarge: aws c5.2xlarge, over 8760 h (1 year), in eu-west-3 (FRA)
gwp (kgCO2eq):
m5.xlarge: total 27.4 (range 22.14 to 36.68)
c5.2xlarge: total 61 (range 51.06 to 77.16), +122.6% vs m5.xlarge
Lowest: m5.xlarge (ranges do not overlap).Tools
All tools are read-only and carry the matching annotations and a display title. Each returns structured content (with an output schema) plus a plain-text summary.
The server speaks the current MCP specification, 2026-07-28 (stateless, with server/discover), and still accepts the 2025-11-25 handshake used by older clients. It uses none of the features deprecated in 2026-07-28 (logging, sampling, roots).
Tool | What it does | Key inputs |
| Explains impact criteria codes and units |
|
| Finds exact names before estimating |
|
| Shows what an instance, archetype, GPU or CPU contains |
|
| Footprint of one cloud VM |
|
| Footprint of an on-premise server, optionally with GPUs |
|
| Footprint of one GPU, CPU, RAM module, SSD or HDD |
|
| Footprint of a laptop, phone, monitor, IoT device and 9 other types |
|
| Ranks 2 to 5 options over the same period |
|
The estimate tools also take duration_hours, usage_location, criteria (default gwp, adp, pe) and detail (summary or breakdown). Every parameter, type and default is listed in the tool reference.
Names are matched carefully. "h100 sxm" finds "NVIDIA H100 SXM 80GB", and the result notes the interpretation. A name that could mean several items ("h100") or only partly matches one is refused with a list of candidates, so a missing item is never silently swapped for a similar one.
Reading the results
Embedded vs use. Embedded is manufacturing (and transport where modelled); use is the electricity consumed. They are always reported separately, with a total only when both are numbers.
Period. Without
duration_hours, figures cover the whole hardware lifetime. With it, embedded is the share of manufacturing for that period and use is the energy for that period. If the period is longer than the lifetime, BoaviztAPI counts manufacturing once; the result says so.Ranges.
(range a to b)is BoaviztAPI's min and max. When two options' ranges overlap,compare_estimatessays the ranking is not certain.Location. Use-phase impacts depend on the electricity mix. Without a location BoaviztAPI uses a European default with a wide range, and the result suggests passing a country.
"not available from BoaviztAPI for this item" means there is no data for that criterion and phase. It is never a zero.
Warnings such as "End of life is not included in the calculation" stay next to the phase they belong to.
Configuration
Variable | Default | Meaning |
|
| BoaviztAPI base URL |
|
| Seconds per request |
|
| Criteria used when a call names none |
|
| Seconds to cache list and lookup responses; |
Self-host BoaviztAPI for regular use
The public instance is a demo. For anything beyond occasional questions, run your own:
docker run -p 5000:5000 ghcr.io/boavizta/boaviztapi:latestthen set BOAVIZTAPI_URL=http://localhost:5000 in the server's environment. The server is polite either way: it identifies itself in the User-Agent, caches lists and recent estimates, sends at most four requests at a time, and retries only transient failures.
Upstream behaviour this server works around
Found while building this against BoaviztAPI 2.6.0. Each one has a live test that will start failing (on purpose) when upstream changes it.
Unknown criteria and
criteria=allreturn HTTP 500, so criteria are checked locally andallis refused.Unknown locations and cloud regions are accepted without an error and give generic results, so both are checked against the API's own lists.
name_to_gpusilently picks one GPU for an ambiguous name and returns 200 with a plain string when nothing matches, so names are resolved here and ambiguous ones are refused.An
iot_devicewithout an archetype reports 0 for manufacturing, so an archetype is required.The GPU endpoint returns 500 for some criteria on the public instance (fixed upstream in Boavizta/boaviztapi#621, not yet deployed). A failing multi-criteria request is retried one criterion at a time, and only the failing criteria are marked as errors.
Privacy
The server sends BoaviztAPI only what the tool call contains: hardware names and specifications, locations, durations and criteria. Requests go to BOAVIZTAPI_URL and nowhere else, with a User-Agent naming this package. There is no telemetry and nothing is written to disk; caches live in memory and end with the process. Logs go to stderr.
Limitations
Figures are BoaviztAPI's model estimates, with ranges that can be wide. Treat them as orders of magnitude for comparing options, not as measurements.
A cloud instance's footprint is its share of the host server; networking, storage services and data centre overheads beyond BoaviztAPI's model are not included.
Not exposed yet: custom electricity factors, workload time series, standalone motherboards, power supplies and cases, IoT functional blocks, and CPU consumption profiles.
The public BoaviztAPI instance is a demo without guaranteed availability. Self-host for anything regular.
Troubleshooting
Symptom | What to do |
"BoaviztAPI ... did not respond" | The instance is down or slow. Raise |
"Unknown GPU / CPU / instance type / location ..." | The message lists close matches. Use |
"... matches N names" | The name is ambiguous; pick one of the listed exact names. |
"BoaviztAPI failed (HTTP 500) for: ..." | Upstream cannot compute that criterion for this item. Other criteria are still returned. |
Numbers differ from another BoaviztAPI front end | Check the BoaviztAPI version in the result's last line; methods and data change between releases. |
The client shows no tools | Run |
Development
uv sync
uv run pytest # unit and tool tests, replaying recorded responses
uv run ruff check . && uv run ruff format --check . && uv run pyrightRecorded responses live in
tests/fixtures/. Re-record them after a BoaviztAPI release withuv run python scripts/record_fixtures.py --cleanand review the diff.Summaries are checked against
tests/golden/; regenerate them withUPDATE_GOLDEN=1 uv run pytest tests/unit/test_formatting.py.Live tests run against a real instance: start the Docker image above, then
BOAVIZTAPI_URL=http://localhost:5000 uv run pytest -m live -rxX.Tool reference:
docs/tools.mdis generated from the tool schemas withuv run python scripts/gen_tool_docs.py; a test fails if it is out of date.
See CONTRIBUTING.md. Security issues: see SECURITY.md.
License
Apache-2.0. BoaviztAPI itself is AGPL-3.0 and is not bundled; see NOTICE.
Available Tools
8 toolscompare_estimatesCompare estimatesARead-onlyIdempotent
Compare 2 to 5 options (cloud instances, servers, components or devices) over one common period and rank them per criterion, with each total, the difference from the first option, and whether the uncertainty ranges overlap.
Use it whenever the question is which option is greener or how options
differ; use the single estimate tools for one item. Each item has a label,
a kind, and params holding the matching estimate tool's inputs (without
duration_hours, criteria or detail). duration_hours is required so items
with different lifetimes compare on equal terms. Every item is checked
before any estimate runs, and an invalid item fails the call with its label
named. Read-only: one BoaviztAPI request per item.
Inputs: items (required), duration_hours (required), criteria. Returns: results, summary, comparison
describe_catalog_itemDescribe a catalog itemARead-onlyIdempotent
Show what a named catalog item contains: a cloud instance's vCPUs, memory and host platform; a server or device archetype's default parts and usage; or a GPU's or CPU's specifications.
Use it to explain or check the assumptions behind an estimate, or to choose
between similar items; it does not estimate impacts. name is resolved to
the exact upstream name, and an ambiguous name returns the candidates (use
search_catalog to find names). provider is required for cloud_instance and
device_type for device_archetype. Read-only; cached for a day.
Inputs: kind (required), name (required), provider, device_type. Returns: kind, name, details, summary
estimate_cloud_instanceEstimate a cloud instanceARead-onlyIdempotent
Estimate the environmental footprint of one cloud VM: its share of the host server's manufacturing (embedded) and the electricity it uses (use), per impact criterion, with units, min-max ranges and warnings.
Use it for a single instance; use compare_estimates to rank several and
estimate_server for physical servers. Give either region (the provider's
region, which fixes the electricity mix) or usage_location (a country),
not both; with neither, a wide European default is used. duration_hours
sets the period (8760 = one year); omit it for the whole hardware lifetime.
Read-only: one BoaviztAPI request, cached for an hour; if one criterion
fails upstream the others are still returned. Use
search_catalog(kind='cloud_instance', provider=...) if unsure of a name.
Inputs: provider (required), instance_type (required), detail, region, +4 more. Returns: api, notes, impacts, subject, +5 more
estimate_componentEstimate a componentARead-onlyIdempotent
Estimate the environmental footprint of one kind of component (gpu, cpu,
ram, ssd or hdd), units of it: manufacturing (embedded) and electricity
(use) impacts per criterion, with units, ranges and warnings.
Use it for parts on their own, such as eight H100 GPUs. A GPU alone excludes
its host server: for a whole machine use estimate_server with a gpu block.
name and tdp_w apply to gpu and cpu, capacity_gb to ram, ssd and hdd;
other combinations are an error. Names are resolved to BoaviztAPI's model
names and an ambiguous one (such as 'h100') returns the candidates.
Read-only: one BoaviztAPI request, cached for an hour.
Inputs: component (required), name, tdp_w, units, +8 more. Returns: api, notes, impacts, subject, +5 more
estimate_deviceEstimate an end-user deviceARead-onlyIdempotent
Estimate the environmental footprint of an end-user device: laptop, desktop, smartphone, tablet, television, box, vr_headset, vr_controller, monitor, usb_stick, external_ssd, external_hdd or iot_device. Returns manufacturing (embedded) and electricity (use) impacts per criterion, with units, ranges and warnings.
Use it for devices people use, not servers or cloud (see estimate_server and
estimate_cloud_instance). Without archetype the device type's default
profile is used, except for iot_device, which needs one; list them with
search_catalog(kind='device_archetype', device_type=...). use_time_ratio
is the share of time the device is on (0 to 1). Criteria without data are
reported as not available, never as 0. Read-only: one BoaviztAPI request,
cached for an hour.
Inputs: device_type (required), detail, criteria, archetype, +5 more. Returns: api, notes, impacts, subject, +5 more
estimate_serverEstimate a serverARead-onlyIdempotent
Estimate the environmental footprint of an on-premise server, optionally with GPUs: manufacturing (embedded) and electricity (use) impacts per criterion, with units, ranges and warnings.
Use it for physical servers; use estimate_cloud_instance for cloud VMs and
estimate_component for one part on its own. Any part you leave out (CPU,
RAM, disks, GPU, power supply, case) comes from archetype (default
'platform_compute_medium'), and the result lists which ones. The default
lifetime is 4 years (35040 h); a duration_hours longer than the lifetime
counts manufacturing once and says so. Set usage_location for a country's
electricity mix and detail='breakdown' for per-component impacts.
Read-only: one BoaviztAPI request, cached for an hour.
Inputs: cpu, gpu, ram, disks, +11 more. Returns: api, notes, impacts, subject, +5 more
list_impact_criteriaList impact criteriaARead-onlyIdempotent
List BoaviztAPI's impact criteria with their code, unit and meaning, e.g. gwp (climate change, kgCO2eq), adp (abiotic resources, kgSbeq) or pe (primary energy, MJ).
Use it to explain a code that appears in a result, or to choose criteria
for the estimate tools; it estimates nothing. query filters on code, unit
or description words such as 'water'. Read-only; the list comes from
BoaviztAPI and is cached for a day.
Inputs: query. Returns: summary, criteria
search_catalogSearch the BoaviztAPI catalogARead-onlyIdempotent
Find the exact names BoaviztAPI knows, before estimating.
Use it whenever an estimate needs a name you are unsure of: a GPU or CPU
model, a cloud instance type (needs provider), a cloud region, a server or
device archetype (needs device_type), or a country. Results are exact
upstream strings, including upstream typos such as
'platfom_gpucompute_high', best matches first and capped by limit;
total_matches says how many exist. To see what one item contains, use
describe_catalog_item instead. Read-only; lists are cached for a day.
Inputs: kind (required), limit, query, provider, +1 more. Returns: kind, names, query, summary, +1 more
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 8 tools
Each tool targets a clearly distinct step or domain: reference lookups (list_impact_criteria, search_catalog, describe_catalog_item), single-item estimates split by resource type (cloud_instance, server, component, device), and cross-option comparison. The descriptions explicitly state the boundary between neighbours ('use compare_estimates to rank several', 'search_catalog to find names'), leaving no realistic chance of misselection.
All eight tools follow a strict verb_noun snake_case pattern, with the estimate_* family forming a predictable, parallel series (estimate_cloud_instance, estimate_server, estimate_component, estimate_device). Catalog tools also pair consistently (search_catalog / describe_catalog_item).
Eight tools is well within the sweet spot and each one earns its place: three reference/lookup helpers, four estimation entry points mapping to distinct physical scopes, and one aggregation tool. Nothing appears redundant or padded.
Coverage of the domain is strong: name resolution, item introspection, criterion glossary, per-scope estimates, and multi-option comparison form a coherent end-to-end workflow with no dead ends for typical questions. Minor gaps remain — there is no direct 'list supported kinds/archetypes' or filter/search over prior results, so agents must probe via search_catalog and per-kind arguments.
Maintenance
Related MCP Connectors
Authenticated GPU/CPU/PSU lookup; beta power-budget estimate. Coverage/freshness vary by source.
Water and energy footprint of AI use: chat prompts, agent sessions, methodology and sources.
AI-powered life cycle assessment and modelling: connect to LCA databases, build and analyze systems
Carbon accounting platform. Query emission factors and create or edit draft emissions.
Related MCP Servers
- FlicenseAqualityDmaintenanceEstimates the environmental footprint of your AI use — energy (kWh), miles driven, water used for cooling, and CO₂ — plus a prompt-efficiency score, working with any AI client by measuring token usage.9-

leadgreen-mcpofficial
AlicenseNot gradedqualityBmaintenanceEnables MCP clients to query open data and a JSON API for the energy and CO2e cost of LLM tokens by model, GPU, and country.Apache 2.0- AlicenseNot gradedqualityBmaintenanceEnables querying measured GPU energy per million output tokens by model and GPU, estimating energy and CO2e for token counts and grid regions, comparing GPUs, exploring concurrency curves, and retrieving hardware and source metadata.329 npmMIT
- AlicenseNot gradedqualityBmaintenanceBridges to the hosted GreenCalculus corpus so clients can look up sourced greenhouse-gas emission factors with full audit envelopes, search or resolve factor keys from plain-language descriptions, and run deterministic calculations for activity data, embodied carbon, PCAF financed emissions, Scope 2 electricity, GLEC freight, spend-based EEIO screening, and business travel.MIT