eia-energy-mcp-server
Browse and query the U.S. Energy Information Administration API v2 — electricity, petroleum, natural gas, coal, forecasts, and more via MCP. STDIO or Streamable HTTP.
Install / Use
claude mcp add cyanheads -- npx -y github:cyanheads/eia-energy-mcp-serverIf the server publishes to npm under a different name, use that package instead — check the repo README.
MCP Server
Model Context Protocol server
Quality Score
Category
MarketingSupported Platforms
Tags
Our assessment of eia-energy-mcp-server
eia-energy-mcp-server scores 83/100 on our quality scale, 459th of 576 Marketing skills we index.
Its MCP Server is 22 KB long, well organised into 26 sections with 11 code examples: a thorough specification that gives an agent plenty to work with.
It has 3 GitHub stars, so there is little community track record yet; judge it on its content.
Maintenance, license and trust
- The repository was last updated 2 days ago, so eia-energy-mcp-server is actively maintained.
- No license is declared. By default that means all rights are reserved: you can read it, but reusing or redistributing it is not clearly permitted. Ask the author before building on it commercially.
- Its trust signals score 80/100, with 2 cautions from licensing, adoption, age or documentation. These come from repository metadata, not a code audit — read the skill file before letting an agent act on it.
eia-energy-mcp-server compared with similar skills
All 4 of these similar skills score higher than eia-energy-mcp-server; compare them before choosing.
| Skill | Score | Stars | Updated | Format |
|---|---|---|---|---|
| eia-energy-mcp-server (this skill)by cyanheads | 83 | 3 | 2d ago | MCP Server |
| Agent-Reachby Panniantong | 100 | 107.2k | 6d ago | CLAUDE.md |
| headroomby headroomlabs-ai | 100 | 78.5k | 1d ago | CLAUDE.md |
| CowAgentby zhayujie | 100 | 47.7k | today | CLAUDE.md |
| Scraplingby D4Vinci | 100 | 90.9k | today | MCP Server |
Frequently asked questions
- How do I install eia-energy-mcp-server?
- Run
claude mcp add cyanheads -- npx -y github:cyanheads/eia-energy-mcp-server. The install tabs above show the steps for each supported agent. - Which AI agents does eia-energy-mcp-server work with?
- It is written for Claude Code and Claude Desktop, as a MCP Server file. Other agents that read the same format can often use it too.
- Is eia-energy-mcp-server safe to use?
- It declares no license and scores 80/100 on trust signals. Skills are instructions an agent will follow, so read the file before installing it and do not approve commands you do not understand.
- Is eia-energy-mcp-server still maintained?
- The repository was last updated 2 days ago, so eia-energy-mcp-server is actively maintained.
Skill content
View source on GitHubPublic Hosted Server: https://eia-energy.caseyjhand.com/mcp
</div>Overview
US energy data from the Energy Information Administration (EIA): electricity, petroleum, natural gas, coal, and forecasts. Find datasets in plain language, query time series with facet filters, and run SQL over large results.
Tools
| Tool | Description |
|:-----|:------------|
| eia_browse_routes | Lists child routes under a path in the EIA dataset taxonomy; omit path for the 14 top-level categories. |
| eia_describe_route | Returns a leaf route's facets, valid values, data columns, frequencies, and date range. |
| eia_search_routes | Fuzzy text search across route names, descriptions, STEO and SEDS series names, and facet values — including benchmark series such as Henry Hub, WTI, and Cushing. Resolves legacy APIv1 series IDs (PET.RWTC.W) to their route and filters. |
| eia_query_route | Fetches data from a leaf route with facet filters, date range, and column selection; optionally stages results for SQL. |
| eia_dataframe_describe | Lists active DataCanvas dataframes staged by eia_query_route, with schema and provenance. |
| eia_dataframe_query | Runs a read-only SQL SELECT against staged DataCanvas dataframes. |
| eia_dataframe_drop | Drops a DataCanvas dataframe, freeing its memory. |
The three eia_dataframe_* tools need DataCanvas, which is on by default; eia_dataframe_drop additionally requires EIA_DATAFRAME_DROP_ENABLED=true. With CANVAS_PROVIDER_TYPE=none, which the Claude Desktop bundle sets, they are neither callable nor listed by MCP. Disabled definitions remain in the server manifest with their enable hints. A default deployment lists the first six tools.
Capability reference
Browse accepts route as an alias for path; describe and query accept path as an alias for route. Supplying both spellings is rejected. Whitespace and slashes are normalized, then exactly one complete leading v2 segment is removed: /v2/electricity/retail-sales/ resolves to electricity/retail-sales, and /v2/ browses root. Full URLs, /data suffixes, interior v2, and case remain unchanged.
All four route tools distinguish retryable upstream failures: rate_limited for HTTP 429 or OVER_RATE_LIMIT, upstream_unreachable for transport failures, upstream_unavailable for HTTP service outages, upstream_invalid_response for unusable bodies or missing envelopes, and upstream_timeout when EIA does not answer in time — each attempt is cut at 45 s, and a call's attempts, backoffs, and chained requests share one 56 s deadline, inside the 60 s timeout MCP clients apply. Recovery hints reach both response surfaces. HTTP 501 remains definitive, 504 remains a timeout, and caller cancellation stays cancellation.
eia_browse_routes <sub>tool</sub>
- Omit
pathfor the 14 top-level categories; pass a path to browse its children. - Each child carries
isLeaf: describe and query leaves, or browse categories further. - A missing path returns
route_not_found; EIA rate-limiting, being unreachable, or not answering in time returns retryablerate_limited,upstream_unreachable, orupstream_timeout.
eia_describe_route <sub>tool</sub>
- Pass a leaf
routefor facets, data columns, frequencies, and date range. Each facet window is capped atEIA_FACET_VALUE_CAP(default 50); page withfacetandvalues_offset. - To find a value by name in a large facet (plant, entity, and mine IDs run to thousands), pass
values_query: each facet keeps the values whoseid,name, oraliascontains it, ignoring case, andvalues_offsetpages the matches.values_query: "palo verde"onelectricity/facility-fuel'splantCodereturns6008and57773in one call. date_rangeis metadata for the default frequency; another frequency may extend outside it. Both response surfaces carry this caveat beside the unchanged start/end values.value_count,values_truncated, and, withvalues_query,values_matcheddescribe each window. A facet whose values EIA did not return is listed inunavailable_facets; the next call retries it.- Errors:
route_not_found,route_not_queryable,facet_not_found, and retryablefacet_unavailable,rate_limited,upstream_unreachable,upstream_timeout.
eia_search_routes <sub>tool</sub>
- Search route names, descriptions, STEO's 1,469 and SEDS's 968 series names, and facet values. Before any describe, the facet values cover fuel, sector, technology, and coal-rank vocabularies, RTO balancing authorities (
Electric Reliability Council of Texas→respondent: ERCO), and the series and product names of the daily and weekly petroleum and natural-gas routes (Henry Hub→natural-gas/pri/fut,series: RNGWHHD); describing a route adds its own.limitdefaults to 10; a larger value returns at most 30 and says so, even on short or empty results.truncatedis true when more matches exist. Only the first 256 characters ofqueryare searched, with a notice when it is cut. - Matches carry
score(0 exact, 1 no match; above 0.72 is weak) and may carry afilter_hintforeia_query_route. CheckindexCompleteandindexGapsbefore trusting a short result set. - A legacy APIv1 series ID, as EIA's website and Excel add-in write them, is resolved through EIA's
/v2/seriesidlookup before any text search, in any case:ELEC.PRICE.TX-RES.Mreturns one result,electricity/retail-saleswithfilter_hint{sectorid: "RES", stateid: "TX"},frequency: "monthly", andcolumns: ["price"], ready foreia_query_route. A hit needs no index, so it answers in under a second even on a cold server. When EIA's own lookup reports no rows for the mapping it returns (some AEO IDs), the notice says the query will come back empty. An ID EIA does not recognize (PET.ZZZZZZ.W, orU.S.A, which only looks like one) returns the text search with a notice saying so; a lookup that times out, is rate-limited, or hits an outage does the same with a retry notice, never an error. - The first search builds the index and normally takes 20–40 s (at most 45 s); later searches answer from the built index. If EIA rate-limits, cannot be reached, or does not answer in time, the call fails with retryable
rate_limited,upstream_unreachable, orupstream_timeout.
eia_query_route <sub>tool</sub>
- Pass a leaf
route, with optional facet-IDfilters,columns,frequency,start/end, andsort. Page withoffsetandlength(default 25; a larger value returns at most 5,000 and says so). - Returns
lengthrows per page; continue atnext_offset(=offset+ returned count). - After describe has cached a complete facet vocabulary, and for 24 hours after that list was fetched, query notices name unmatched filter values and suggest case-sensitive IDs when possible. Filters and their echoes stay unchanged; diagnostics never fetch metadata or facet values.
- With effective monthly
YYYY-MMdata, a year-only bound means January:end: "2021"stops at2021-01; use2021-12for the full year. Query notices disclose this for either bound without expanding it. - EIA reads each bound as the period of the effective frequency containing its first day, so
start: "2023-01", end: "2023"returns January at monthly. A range is reported as inverted (no_data) only when EIA returns no rows andstartselects a later period thanend; the message names both periods. Atlocal-hourlyeach bound needs its hour and UTC offset (2024-02-01T02-06); one without fails asinvalid_periodbefore any request. So does a bound naming a date or hour that does not exist in the shape its frequency reads exactly —2024-02-30atdailyorweekly,2024-02-01T24athourly— since EIA answers those with an HTTP 500 rather than rows. totalreports the full match count; values remain strings and units appear as{col}-units. Errors cover invalid route, facet, column, frequency, sort, or period, inverted ranges (no_data), a filter list too long for EIA's ~8 KB request URI (uri_too_long; split the values across calls), and retryablerate_limited,upstream_unreachable, andupstream_timeout.stage: truestages up toEIA_CANVAS_MAX_ROWS(default 25000) as adatasethandle for SQL viaeia_dataframe_describeandeia_dataframe_query(hyphens in column names become underscores). If staging fails,datasetis absent and the note says so. Staging that would run past the call deadline stops before the next page, stages the rows already fetched, and the note says time ran out and gives the offset to resume from.
eia_dataframe_describe <sub>tool</sub>
- Omit
nameto list active staged dataframes; pass a handle to inspect one. A miss returnsfound: falsewithactive_names. - Entries carry
source_tool,query_params,created_at,expires_at,row_count,truncated/max_rows, andcolumn_schema. Listing does not extend expiry.
eia_dataframe_query <sub>tool</sub>
- Run one read-only SQL SELECT against staged handles. Inline rows follow
preview(default 25; a larger value returns at mostrow_limitand says so, and0returns none).row_limitdefaults to 1,000 and returns at most 10,000. Echoes (executedSql,columns) come back whole.register_asstill stages the complete result. truncated: truemeanstotalRowsis a cap, not a full count.register_asstages the complete result under an unused name with an exact count; the notice gives theLIMIT/OFFSETquery,
Truncated for display — read the full file on GitHub.
Related Skills
Agent-Reach
107.2kGive your AI agent eyes to see the entire internet. Read & search Twitter, Reddit, YouTube, GitHub, Bilibili, XiaoHongShu — one CLI, zero API fees.
headroom
78.5kCompress tool outputs, logs, files, and RAG chunks before they reach the LLM. 20% fewer tokens for coding agents, 60-95% fewer tokens for JSON, same answers. Library, proxy, MCP server.
CowAgent
47.7kOpen-source personal AI assistant & Agent Harness. Plans tasks, runs tools and skills, self-evolves with memory and knowledge. Multi-agent, multi-model, multi-channel. Lightweight, extensible, one-line install.
Scrapling
90.9k🕷️ The BEST Web Scraping framework that handles everything from a single request to a full-scale crawl! Don't be shy, join here: https://discord.gg/EMgGbDceNQ and follow here for daily tips and tricks: https://x.com/Scrapling_dev
Languages
Trust signals
From repository metadata: license, adoption, age and documentation. Not a code audit — see the Safety scan above for what the skill file itself contains.
