NREL MCP — wraps the US National Renewable Energy Laboratory developer API
Four tools with complete input schemas and clear descriptions. All tools are read-only, well-scoped, and follow verb_noun naming (pvwatts, solar_resource, alt_fuel_stations, utility_rates). Descriptions are 150 - 250 chars, within the 10 - 1024 baseline. However, output schemas are not documented, LLMs cannot predict response structure for downstream planning. Parameters lack enums where appropriate (fuel_type, array_type, module_type are numeric codes but not constrained). Error handling is minimal: nrelGet returns error objects but provides no recovery guidance. No tool annotations (readOnlyHint, idempotentHint) despite all being read-only. Missing parameter constraints (e.g., lat/lon ranges, radius bounds, limit max=50).
EV charging / alternative fuel stations near a point (lat/lon + radius) or within a state. Filter by fuel type (ELEC, E85, LPG, CNG, HY, etc.). Returns station names, addresses, EV connectors/network, access hours, and distance. Example: alt_fuel_stations({ lat: 40.0, lon: -105.25, fuel_type: "ELEC", radius: 25 })
Solar energy production estimate (PVWatts v8) for a photovoltaic system at a lat/lon. Returns estimated annual AC energy (kWh), capacity factor, solar radiation, and monthly production. Example: pvwatts({ lat: 40.0, lon: -105.25, system_capacity: 4 })
Solar resource (sunlight) for a location: average direct normal irradiance (DNI), global horizontal irradiance (GHI), and tilt-at-latitude radiation, annual plus monthly. Example: solar_resource({ lat: 40.0, lon: -105.25 })
Electricity utility rates ($/kWh) for a location: the serving utility plus average residential, commercial, and industrial rates. Example: utility_rates({ lat: 40.0, lon: -105.25 })
Output schemas not documented. LLMs cannot predict response structure (e.g., pvwatts returns ac_annual, capacity_factor, ac_monthly array), forces trial-and-error extraction and wastes tokens.
Numeric parameters (array_type: 0 - 4, module_type: 0 - 2, fuel_type codes) lack enum constraints. LLMs may hallucinate invalid values (e.g., array_type=5). Descriptions list options but JSON Schema should enforce them.
Error handling returns bare error objects ({error, message}) with no recovery guidance. 'api_key_required' tells LLM nothing about next steps. Should suggest 'Pass _apiKey parameter or configure NREL_API_KEY env var.'
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 57 | 2026-07-28+ | v2 |
No tool annotations despite all tools being read-only. Adding readOnlyHint=true signals to agents these are safe to call speculatively without user confirmation.
Parameter constraints missing: lat/lon ranges (±90/±180), radius bounds (1 - 100 miles), limit max (50), system_capacity min (0.1 kW). Descriptions mention defaults but not bounds, LLMs may pass invalid values.