{
  "markdown": "<div align=\"center\">\n\n# ☀️ solar-data-mcp\n\n**US solar data, agent-accessible.**\n\n[![CI](https://github.com/hoodsy/solar-data-mcp/actions/workflows/ci.yml/badge.svg)](https://github.com/hoodsy/solar-data-mcp/actions/workflows/ci.yml)\n[![Python 3.11+](https://img.shields.io/badge/python-3.11%2B-blue)](https://github.com/hoodsy/solar-data-mcp/blob/main/pyproject.toml)\n[![License: MIT](https://img.shields.io/badge/license-MIT-green)](LICENSE)\n[![MCP](https://img.shields.io/badge/MCP-compatible-8A2BE2)](https://modelcontextprotocol.io)\n\nOne [MCP](https://modelcontextprotocol.io) server that brings US open solar data\nto Claude, ChatGPT, and anything else that speaks MCP.\n\n</div>\n\nInstall one server — `uvx solar-data-mcp` — and your agent gets all 18 tools, 11\nskills that teach it how to use them, and 4 ready-made report prompts, across four\ndata domains: production modeling, economics, market data, and forecasts. Every tool\nreturns the same envelope — `data` + `units` + `source` + `assumptions` + `warnings` —\nso the agent always knows what a number means, where it came from, and which defaults\nwere injected on its behalf.\n\n## What can you ask it?\n\n- **Thinking about solar at home** — *\"Would a 6 kW system pay off at my house?\"* ·\n  *\"Is this $21,000 quote fair?\"* · *\"What will my array generate tomorrow?\"*\n- **Selling or installing solar** — *\"Build a proposal for this customer\"* ·\n  *\"How long does permitting take in Phoenix?\"* · *\"Where should we expand next?\"*\n- **Studying the market** — *\"Brief me on the Texas solar market\"* · *\"How have\n  installed prices trended in Colorado?\"* · *\"Which big plants have batteries?\"*\n\nBehind each question the agent picks the right tools (or a skill routes it), and every\nnumber comes back with units, a source, and the assumptions made on your behalf.\n\n## Quickstart\n\n1. **Get a free NREL API key** — <https://developer.nlr.gov/signup/>\n   (or use `DEMO_KEY` to try it out — 10 requests/hour).\n\n2. **Add the server to your agent** — snippets for every major agent below; for\n   Claude Desktop, merge this into `claude_desktop_config.json`\n   (full example in [`examples/`](examples/claude_desktop_config.json)):\n\n   ```json\n   {\n     \"mcpServers\": {\n       \"solar-data\": {\n         \"command\": \"uvx\",\n         \"args\": [\"solar-data-mcp\"],\n         \"env\": {\n           \"NREL_API_KEY\": \"YOUR_KEY_HERE\",\n           \"OPENEI_API_KEY\": \"YOUR_KEY_HERE\",\n           \"EIA_API_KEY\": \"YOUR_KEY_HERE\"\n         }\n       }\n     }\n   }\n   ```\n\n   Only `NREL_API_KEY` is needed to start: the server runs with any subset of keys,\n   and a tool missing its key returns setup instructions instead of failing silently.\n\n3. **Restart your client and ask** — try\n   *\"Compare annual production for an 8 kW system in Mesa, AZ at 10° vs 25° tilt.\"*\n\nVerify keys and connectivity anytime:\n\n```console\n$ uvx solar-data-mcp doctor\n```\n\n### Add it to your agent\n\n**Claude Code**\n\n```console\n$ claude mcp add solar-data \\\n    --env NREL_API_KEY=YOUR_KEY --env OPENEI_API_KEY=YOUR_KEY --env EIA_API_KEY=YOUR_KEY \\\n    -- uvx solar-data-mcp\n```\n\n(or commit the quickstart JSON to your project's `.mcp.json`)\n\n**Codex CLI** — `~/.codex/config.toml`:\n\n```toml\n[mcp_servers.solar-data]\ncommand = \"uvx\"\nargs = [\"solar-data-mcp\"]\n\n[mcp_servers.solar-data.env]\nNREL_API_KEY = \"YOUR_KEY_HERE\"\nOPENEI_API_KEY = \"YOUR_KEY_HERE\"\nEIA_API_KEY = \"YOUR_KEY_HERE\"\n```\n\n(or `codex mcp add solar-data --env NREL_API_KEY=YOUR_KEY -- uvx solar-data-mcp`;\nuse `env_vars = [\"NREL_API_KEY\"]` to forward keys from your shell instead of\nhardcoding them)\n\n**OpenCode** — `opencode.json` in your project (or `~/.config/opencode/opencode.json`):\n\n```json\n{\n  \"$schema\": \"https://opencode.ai/config.json\",\n  \"mcp\": {\n    \"solar-data\": {\n      \"type\": \"local\",\n      \"command\": [\"uvx\", \"solar-data-mcp\"],\n      \"enabled\": true,\n      \"environment\": {\n        \"NREL_API_KEY\": \"YOUR_KEY_HERE\",\n        \"OPENEI_API_KEY\": \"YOUR_KEY_HERE\",\n        \"EIA_API_KEY\": \"YOUR_KEY_HERE\"\n      }\n    }\n  }\n}\n```\n\n**Hermes** — `~/.hermes/config.yaml`, then `/reload-mcp`:\n\n```yaml\nmcp_servers:\n  solar-data:\n    command: \"uvx\"\n    args: [\"solar-data-mcp\"]\n    env:\n      NREL_API_KEY: \"YOUR_KEY_HERE\"\n      OPENEI_API_KEY: \"YOUR_KEY_HERE\"\n      EIA_API_KEY: \"YOUR_KEY_HERE\"\n```\n\n**Claude Desktop** — the quickstart JSON above.\n\n**Anything else that speaks MCP (stdio)** — command `uvx`, args `[\"solar-data-mcp\"]`,\nkeys in the `env` block.\n\n### API keys\n\nAll free, and every one optional — the server starts with none set.\n\n| Env var | Unlocks | Get one |\n|---|---|---|\n| `NREL_API_KEY` | estimate_production, get_solar_resource, compare_orientations, size_system_for_target, estimate_roi, compare_forecast_to_model | <https://developer.nlr.gov/signup/> |\n| `OPENEI_API_KEY` | lookup_tariffs | <https://openei.org/services/api/signup/> |\n| `EIA_API_KEY` | get_electricity_prices | <https://www.eia.gov/opendata/register.php> |\n| `AHJ_REGISTRY_TOKEN` (optional) | identify_ahj | email <support@sunspec.org> |\n\nMarket tools (USPVDB, Tracking the Sun, SolarTRACE) and forecasts need no key.\nFull forecast output additionally needs the Quartz model installed into a persistent\nenvironment (see [`packages/solar-forecast/`](packages/solar-forecast/README.md));\nwithout it the forecast tools return install instructions.\n\n## Servers\n\n`uvx solar-data-mcp` — the install above — serves all four domains on one stdio entry.\nEach domain also ships as a standalone server:\n\n| Domain | Data | Standalone server |\n|---|---|---|\n| Production | PVWatts v8 modeling, NSRDB irradiance | `uvx --from solar-data-mcp-nrel nrel-solar-mcp` |\n| Economics | URDB tariffs, EIA prices, federal ITC + DSIRE | `uvx --from solar-data-mcp-economics solar-economics-mcp` |\n| Market | SolarTRACE, Tracking the Sun, USPVDB, AHJ lookup | `uvx --from solar-data-mcp-market solar-market-mcp` |\n| Forecast | Quartz open-source forecasts (OCF) | `uvx --from solar-data-mcp-forecast solar-forecast-mcp` |\n\nPer-server config:\n[`examples/claude_desktop_config.per-server.json`](examples/claude_desktop_config.per-server.json).\n\n> ⚠️ Run the combined `solar-data` server **or** the per-domain servers, not both — and\n> never `solar-economics` and `solar-market` side by side. Both open the same local\n> DuckDB bulk store, which allows only one process at a time.\n\n## Tools\n\nEighteen tools across four domains; parameter details live in each tool's docstring\nand each domain package's README.\n\n| Domain | Ask it about | Tools |\n|---|---|---|\n| [Production](packages/nrel-solar/README.md) | output, sunniness, sizing, roof orientation | `estimate_production`, `get_solar_resource`, `compare_orientations`, `size_system_for_target` |\n| [Economics](packages/solar-economics/README.md) | tariffs, electricity prices, incentives, payback | `lookup_tariffs`, `get_electricity_prices`, `get_incentives`, `estimate_roi`, `sync_incentives` |\n| [Market](packages/solar-market/README.md) | installed $/W, permitting times, utility-scale plants | `query_installed_systems`, `get_permitting_timelines`, `find_utility_scale_projects`, `identify_ahj`, `market_snapshot`, `sync_*` |\n| [Forecast](packages/solar-forecast/README.md) | tomorrow's output, \"is today unusual?\" | `forecast_generation`, `compare_forecast_to_model` |\n\n## Skills & reports\n\nSkills are procedures shipped inside the combined server that teach an agent to chain\nthe tools correctly — ordering, sync prerequisites, honest reporting. They're MCP\nresources: `skill://solar/index` routes by question shape, `skill://solar/<name>` is\nthe procedure. Grouped by who's asking:\n\n- **Homeowners** — site assessment, quote review, performance check\n- **Installers** — proposal builder, territory expansion\n- **Analysts** — market brief, pricing analysis, utility-scale scout, incentive scan\n- **Cross-cutting** — data sync (bulk snapshots), data conventions (envelope literacy)\n\nFour of these render **reports** with a fixed document shape and are also exposed as\nMCP prompts your host surfaces natively — `market_brief`, `site_assessment`,\n`quote_review`, `proposal_builder` (in Claude Code: `/mcp__solar-data__market_brief`).\n\nFull catalog, routing design, and report templates: [`docs/skills.md`](docs/skills.md).\n\n## Development\n\n```console\n$ git clone https://github.com/hoodsy/solar-data-mcp && cd solar-data-mcp\n$ uv sync                # install the workspace\n$ uv run pytest          # fixture replay only, no network\n```\n\nLayout: `packages/core` (shared HTTP client, cache, envelope), one package per domain\nserver, and `packages/solar-data-mcp` (the umbrella that mounts all four on one stdio\nentry). Smallest possible client:\n[`examples/example_client.py`](examples/example_client.py).\n\n## License\n\nMIT. Per-source data licensing/attribution is exposed as MCP resources\n(`source://<name>/license`).\n",
  "bytes": 8796,
  "sha": "d5bbd34791bc708a6acfdf3c446aa5855bfa74c070a6a61feeb57b42ab3febe2",
  "repo_slug": "hoodsy/solar-data-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_hoodsy_solar_data_mcp_c69bb314/readme"
}