nasa-power-mcp-server
Provides tools for querying NASA POWER historical solar and meteorological observations: point time series (hourly/daily/monthly), point climatology, single-parameter native-grid region queries, and side-by-side comparison of 2–10 labeled locations. Also exposes parameter dictionary search, reference data (presets, communities, coverage, wind surfaces), and a staged-data workflow for describing and running read-only SQL queries over larger result sets, with source units and provenance preserved.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@nasa-power-mcp-serverget daily solar irradiance for lat 30.27, lon -97.74 in July 2023"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Overview
NASA POWER historical solar and meteorological observations for renewable energy, sustainable buildings and agroclimatology. Retrieve point time series and climatology, inspect native-grid regions, and compare labeled locations with source units and provenance. No NASA account or API key is required.
Tools
Tool | Description |
| Hourly, daily or monthly observations at one point |
| Monthly and annual point climatology, including tilted solar profiles |
| One parameter across a bounded native-grid region |
| Shared observations and seasonal summaries for 2–10 labeled points |
| Search the complete community/resolution parameter dictionary |
| Presets, communities, coverage, missing values, wind surfaces and dataframe guidance |
| Inspect staged schemas, units, expiry and provenance |
| Run bounded read-only SQL against an explicit canvas token |
| Opt-in removal of one named staged table |
Eight tools are enabled by default; NASA_POWER_DATAFRAME_DROP_ENABLED=true enables the ninth.
Related MCP server: @cyanheads/eia-energy-mcp-server
Capability reference
nasa_power_get_timeseries tool
latitude/longitude,temporalResolution(hourly,daily,monthly), and an inclusivestartDate/endDateorstartYear/endYearwindow.selectionchooses a namedpresetor explicitparameters: at most 15 effective hourly codes or 20 otherwise, including corrections.community(RE,SB,AG; defaultRE),units(metric,imperial) andtimeStandard(LST,UTC) retain the returned source units and time labels. OptionalsiteElevationaddsPSC; pairedwindElevation(10–300 meters) andwindSurface(grass,airportice) addWSC.Returns
request,metadata,parameters,expansions,omittedParameters,summaries,rows, exactrowCountand nullabledataset. Optionalcanvas_idreuses a workspace when staging is needed.
nasa_power_get_climatology tool
Point coordinates and the same parameter selection and corrections; optionally supply both
startYearandendYear, otherwise use the source product range. NotemporalResolutioninput is needed.Complete monthly and annual records remain inline; the climatology alias
SI_EF_TILTED_SURFACEpreserves returned numeric angles and orientation text throughexpansionsand parameter metadata.
nasa_power_get_region tool
One
parameter, orderedlatitudeMin/latitudeMaxandlongitudeMin/longitudeMax, each spanning 2–10 degrees; split antimeridian regions. Supports daily, monthly and climatology windows, with common community, units and time settings.Returns cell-tagged observations,
cellCountand per-periodcellSummaries. Means weight each returned grid cell equally; point correction fields and hourly regions are unsupported. Optionalcanvas_idreuses a staging workspace.
nasa_power_compare_locations tool
2–10
locations, each with coordinates and alabelof 1–120 characters, plus shared selection, corrections and window. Defaults to climatology; supports hourly, daily and monthly comparisons too.Location-tagged rows, per-site metadata and summaries, seasonal buckets,
partialandfailedpreserve operational failures alongside successes.possibleSharedGridCellflags nearby points without asserting exact grid identity.Optional
sorttakes a numeric selectedparameteranddirection(asc,desc); sorting requires known identical units. Optionalcanvas_idreuses a workspace. All-site failure returnsall_locations_failed.
nasa_power_search_parameters tool
community(defaultRE),temporalResolution(defaultdaily), optionalfilter(up to 256 characters),offsetandlimit1–100 (default 20).Case-insensitive tokens filter the complete dictionary before sorted pagination; blank filter browses it.
entries,total,hasMoreandtruncateddescribe the filtered page.
nasa_power_list_reference tool
topic:presets(default),communities,coverage,missing_data,wind_surfacesordataframes.Returns typed
entries,guidance,documentationUrlsandverifiedOn. Presets aresolar_pv,wind_turbine,building_hvac,agroclimatologyandwater_balance;building_hvacis unavailable hourly.
nasa_power_dataframe_describe tool
Required
canvas_idfrom a producing response; optionaltablelimits inspection to one table.Returns current canvas/table expiry, actual SQL columns with source units and original scientific
provenance. Only tables in the supplied canvas are visible.
nasa_power_dataframe_query tool
Required
canvas_idand one read-only SELECT insql(up to 16,384 characters);rowLimit1–1,000 (default 100). Joins and aggregates operate on tables shown by describe; files, writes and system catalogs are denied.Returns
columns,rows,rowCount,shownCount,truncatedandcountSemantics(exactormaterialized_prefix). SQL has a 10-second deadline; the complete structured and rendered outputs each must fit 40,000 characters.
nasa_power_dataframe_drop tool
Required
canvas_idand exacttable; enabled only byNASA_POWER_DATAFRAME_DROP_ENABLED=true.Returns
dropped: falsefor an absent table in a live canvas. Expired or unknown canvases returncanvas_not_found.
Features
Built on @cyanheads/mcp-ts-core: stdio and Streamable HTTP transports, pluggable auth (none / jwt / oauth), swappable storage (in-memory, filesystem, Supabase, Cloudflare KV/R2/D1), structured logging with optional OpenTelemetry tracing.
POWER-specific:
Historical gridded observations, rather than site measurements or forecasts. Meteorological coverage starts in 1981, solar in 1984 and hourly in 2001; source configuration and publication latency further constrain availability.
One active upstream request, starts at least two seconds apart, bounded retries and a 55-second overall call deadline. NASA publishes no numeric request allowance. References cache for 24 hours and observations for 10 minutes.
Source fill values become
null; zero remains a measurement. Monthly annual keys and climatologyANNremain distinct from monthly observations. LST labels have no UTC offset.
Agent-friendly output:
Scientific provenance — source API version, dataset identifiers, endpoint and access time accompany results; preserve returned units and attribute NASA POWER.
Explicit gaps —
omittedParametersdistinguishes an absent series from fill values; arithmetic observation means and calendar-season buckets are not climate normals, annual yields or water balances.Complete datasets — inline outputs each fit 40,000 characters. Larger datasets stage all rows with a preview of at most 20 rows and a
datasethandle; unsupported or oversized requests fail with narrowing guidance instead of returning a capped source prefix.
Staging requires DuckDB and supports at most 250,000 rows, 64 parameter columns and 32 MiB of serialized rows per dataset. Canvases are process-local capabilities: pass the returned token explicitly and route later calls to the same process. Tables expire after 30 minutes, canvases after one idle hour with a six-hour absolute cap; limits are eight tables per canvas, four canvases per tenant and eight per process. Engine memory is 256 MiB per canvas, not a total RSS or temporary-disk quota.
Getting started
Self-Hosted / Local
Add this to your MCP client configuration:
{
"mcpServers": {
"nasa-power-mcp-server": {
"type": "stdio",
"command": "bunx",
"args": ["@cyanheads/nasa-power-mcp-server@latest"],
"env": { "MCP_TRANSPORT_TYPE": "stdio" }
}
}
}Or with npx (no Bun required):
{
"mcpServers": {
"nasa-power-mcp-server": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@cyanheads/nasa-power-mcp-server@latest"],
"env": { "MCP_TRANSPORT_TYPE": "stdio" }
}
}
}Or with Docker:
{
"mcpServers": {
"nasa-power-mcp-server": {
"type": "stdio",
"command": "docker",
"args": ["run", "-i", "--rm", "-e", "MCP_TRANSPORT_TYPE=stdio", "ghcr.io/cyanheads/nasa-power-mcp-server:latest"]
}
}
}For Streamable HTTP from a local checkout:
MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 bun run start:http
# http://127.0.0.1:3010/mcpPrerequisites
Bun v1.4.0 or higher, or Node.js v24+.
npm and Docker install native DuckDB dependencies normally on supported platforms. Set
CANVAS_PROVIDER_TYPE=duckdbto enable staging and SQL; the default isnone.The portable Claude Desktop MCPB bundle fixes
CANVAS_PROVIDER_TYPE=noneand supports inline results. Narrow an oversized request or use npm/Docker for analytics.
Installation
git clone https://github.com/cyanheads/nasa-power-mcp-server.git
cd nasa-power-mcp-server
bun install
cp .env.example .env
bun run rebuildConfiguration
Variable | Description | Default |
| Expose explicit staged-table removal. |
|
|
|
|
| Fixed engine memory limit; not total RSS or temporary disk. |
|
| Fixed tenant canvas cap. |
|
| Fixed sliding canvas lifetime. |
|
| Fixed absolute canvas lifetime. |
|
|
|
|
| HTTP bind address and port. |
|
|
|
|
| Minimum log level. |
|
| Enable OpenTelemetry instrumentation. |
|
DuckDB startup rejects changes to the four fixed canvas settings. See .env.example for optional transport, authentication, storage, logging and telemetry settings.
Running the server
Local development
bun run rebuild
bun run start:stdio # or start:http
bun run devcheck
bun run testDocker
docker build -t nasa-power-mcp-server .
docker run --rm -p 127.0.0.1:3010:3010 -e CANVAS_PROVIDER_TYPE=duckdb nasa-power-mcp-serverThe image defaults to HTTP on port 3010. For a client outside loopback, configure authentication and TLS at the deployment boundary.
Project structure
Path | Purpose |
| Nine tool registrations, bounded canvas setup and service shutdown |
| Workload limits and server-specific environment parsing |
| Tool contracts and comparison orchestration |
| Paced NASA client, normalization, presets and scientific summaries |
| Explicit-token staging, SQL, provenance and admission limits |
| Build, validation, packaging and release tooling |
| Offline contracts and native integration tests |
Development guide
See CLAUDE.md and AGENTS.md for architectural rules.
Handlers throw, framework catches; use
ctx.logandctx.state.Register tools in the
createApp()array insrc/index.ts.Validate NASA responses before normalization; preserve sparse fields, source units and annual-period distinctions.
content[]andstructuredContentcarry the same complete data.
Contributing
Issues are welcome. Run checks and tests before submitting:
bun run devcheck
bun run testLicense
Apache 2.0. See LICENSE.
This server cannot be deployed
Maintenance
Related MCP Connectors
Query SEC EDGAR filings, XBRL financials, and company data via MCP. STDIO or Streamable HTTP.
Query, join, profile, clean and convert CSV/JSON/Parquet with server-side DuckDB over MCP.
Visual Crossing Weather MCP — wraps the Visual Crossing Weather Timeline API
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceMCP server for NASA POWER climate data, offering a climatology tool to retrieve long-term monthly averages for any coordinate. Supports natural language queries through the Pipeworx gateway.19 npmMIT
- AlicenseNot gradedqualityAmaintenanceBrowse and query the U.S. Energy Information Administration API v2 — electricity, petroleum, natural gas, coal, forecasts, and more via MCP. STDIO or Streamable HTTP.249 npm2Apache 2.0
- AlicenseNot gradedqualityAmaintenanceGeocode places, fetch global weather forecasts, ERA5 historical climate, marine conditions, air quality, and terrain elevation via MCP. Provides 11 tools over STDIO or Streamable HTTP.555 npm9Apache 2.0
- AlicenseNot gradedqualityAmaintenanceQuery NOAA SWPC space weather data including geomagnetic storm scales, Kp index, aurora forecasts, solar wind, solar activity, and alerts via MCP. Supports STDIO and Streamable HTTP transports.476 npm2Apache 2.0