Releases: cyanheads/eia-energy-mcp-server
Release list
v0.2.8: mcp-ts-core ^0.10.9 maintenance
mcp-ts-core ^0.10.9 maintenance
Framework adoption and dependency refresh. No server tool changes.
Changed:
- Adopt
@cyanheads/mcp-ts-core^0.10.9 —DuckdbProvider.describe({ tableName })ambiguous-column fix and the canvas SQL gate classifying SELECT-shaped prepare failures asinvalid_sql(both reachable viaeia_dataframe_describe/eia_dataframe_query), plus thectx.contentimage/audio collector - Add the
check-dependency-specifiersdevcheck step (new framework script) — rejects floating specifiers inpackage.json+bun.lockworkspaces - Enable plugin-manifest validation via
devcheck.config.jsonpackaging.pluginManifests; fill the empty.codex-pluginlongDescription - Re-sync 14 framework skills and 5 scripts
Dependency bumps:
@cyanheads/mcp-ts-core^0.10.6 → ^0.10.9@duckdb/node-api^1.5.3-r.3 → ^1.5.4-r.1@types/node^25.9.3 → ^26.0.0vitest^4.1.8 → ^4.1.9
165 tests pass; bun run devcheck clean.
v0.2.7: canvas spillover fix, query-input echoes, error contract
canvas spillover fix, query-input echoes, error contract
Fixes DataCanvas spillover for EIA's {col}-units columns, echoes the applied query inputs back to callers, and declares the system-catalog rejection in the error contract.
Added:
eia_query_routeechoesappliedStart,appliedEnd,appliedFrequency, andappliedColumnsvia enrichment (populated only when provided;appliedColumnsalso renders in the content[] trailer) (#23)eia_dataframe_queryechoes the executed SQL as a requiredexecutedSqloutput field and via enrichment (#23)eia_dataframe_queryerrors[]declaressystem_catalog_access(ValidationError) for the frameworkdenySystemCatalogsrejection, so agents routing ondata.reasonself-correct toward df_ tables (#21)
Fixed:
- DataCanvas spillover for EIA's
{col}-unitscompanion columns: the hyphen failed the canvas identifier gate, so registration returnedcanvas_id: nulland silently degraded to the inline preview for nearly every data query. Column identifiers are sanitized before registration ({col}-units→{col}_units); the staged table andeia_dataframe_describereport the sanitized names, while inline rows keep the hyphenated keys (#25)
165 tests pass; bun run devcheck clean.
v0.2.6: mcp-ts-core ^0.10.6, server instructions, search-routes truncation
mcp-ts-core ^0.10.6, server instructions, search-routes truncation
Adopts @cyanheads/mcp-ts-core ^0.10.6 (with skill + packaging-script sync), adds a server-level instructions string and in-code identity, surfaces truncation signal fields on eia_search_routes, and reclassifies the eia_query_route inverted-date-range error.
Added:
- Server-level
instructionsand explicitname/titleoncreateApp() eia_search_routesoutput fieldstruncated,shown,cap—truncatedflags when matches hit the requestedlimit
Changed:
eia_dataframe_querysystem-catalog denial now runs through the framework gate (denySystemCatalogs: true); behavior unchangedEIA_DATAFRAME_DROP_ENABLEDparsed withz.stringbool()sofalse/0/nodisable the flaglint:packaging+check-framework-antipatternspackaging/identity guards synced from the framework;bundlerunsscripts/clean-mcpb.ts
Removed:
sql-gate-extras.ts(bridge-layer system-catalog deny) — superseded by the framework gate
Fixed:
eia_query_routeinverted date range now returnsValidationErrorinstead ofNotFound
Dependencies:
@cyanheads/mcp-ts-core^0.9.21 → ^0.10.6fuse.js^7.4.1 → ^7.4.2@biomejs/biome^2.4.16 → ^2.5.0 (dev)@types/node^25.9.1 → ^25.9.3 (dev)
154 tests pass; bun run devcheck clean.
v0.2.5: Zero-row structured response, total/returned_count output fields
Zero-row structured response, total/returned_count output fields
eia_query_route now returns structured empty data on zero-row results instead of throwing, and surfaces total/returned_count in every response.
Fixed:
- Zero-row results from eia_query_route now return { data: [], total: 0, returned_count: 0, notice: '...' } instead of throwing -32001 NotFound (#20)
- no_data error reason narrowed to inverted-date-range path only
- Service-layer notFound() throw now includes recovery.hint, consistent with handler path (#22)
Added:
- total and returned_count required output fields on eia_query_route
- notice optional field present on zero-row results with filter-adjustment guidance
169 tests pass; bun run devcheck clean.
v0.2.4: mcp-ts-core ^0.9.21: request context, secret-stripped errors, fail-fast retry
mcp-ts-core ^0.9.21: request context, secret-stripped errors, fail-fast retry
Adopts @cyanheads/mcp-ts-core ^0.9.21. Framework changes:
Changed:
- HTTP transport per-request log context fix — per-request logs and traces carry fresh request and trace/span IDs instead of the frozen boot context.
fetchWithTimeoutstrips query-string secrets (e.g.?api_key=) from error messages and logs.withRetryfails fast on non-retryable errors;ctx.failauto-populates theretryableflag.- README client-config key renamed to
eia-energy-mcp-serverin all three client-config examples. release:githubscript added for one-command GitHub Release creation.
Dependencies:
@cyanheads/mcp-ts-core^0.9.16 → ^0.9.21@duckdb/node-api^1.5.3-r.2 → ^1.5.3-r.3fuse.js^7.3.0 → ^7.4.1vitest^4.1.7 → ^4.1.8 (dev)
169 tests pass; bun run devcheck clean.
v0.2.3: Enrichment adoption — query echoes, result totals, empty-result guidance
Enrichment adoption — query echoes, result totals, empty-result guidance
search/query/dataframe tools now surface a typed enrichment block in both structuredContent JSON and content[] markdown trailer.
Changed:
- eia_search_routes: effectiveQuery echo, totalIndexed, and empty-result notice in enrichment; total_indexed removed from output
- eia_query_route: effectiveRoute, totalCount, returnedCount, appliedFilters in enrichment; total and returned_count removed from output
- eia_dataframe_query: totalRows, returnedRows, capped-result notice in enrichment; row_count removed from output
Dependency bumps:
@cyanheads/mcp-ts-core^0.9.13 → ^0.9.16
60 tests pass; bun run devcheck clean.
v0.2.2: mcp-ts-core ^0.9.6 → ^0.9.13: HTTP transport hardening, session-init gate, quieter error logs, GET /mcp keywords
mcp-ts-core ^0.9.6 → ^0.9.13: HTTP transport hardening, session-init gate, quieter error logs, GET /mcp keywords
Adopts @cyanheads/mcp-ts-core ^0.9.13 from ^0.9.6. HTTP transport gains a configurable request-body cap (413 guard), a session-init gate for stateful mode, and quieter log levels for expected client errors. GET /mcp now surfaces package.json keywords. Explicit landing.requireAuth: false preserves the public tool inventory.
Changed:
landing: { requireAuth: false }added tocreateApp()— preserves full landing-page inventory for unauthenticated callers under the new framework defaultstdio/streamable-httpkeywords added topackage.json
Dependency bumps:
@cyanheads/mcp-ts-core^0.9.6 → ^0.9.13@duckdb/node-api^1.5.3-r.1 → ^1.5.3-r.2@biomejs/biome^2.4.15 → ^2.4.16
59 tests pass; bun run devcheck clean.
v0.2.1: Auto-fetch route metadata on cold cache
Auto-fetch route metadata on cold cache
When eia_query_route is called without a prior eia_describe_route, the service
now fetches and caches route metadata on-demand before querying, eliminating
silent data-empty results on cold start.
Fixed:
- eia_query_route auto-describes the route when the metadata cache is cold (#17)
59 tests pass; bun run devcheck clean.
v0.2.0: Repo and package rename to eia-energy-mcp-server
Repo and package rename to eia-energy-mcp-server
npm: @cyanheads/eia-energy-mcp-server (was @cyanheads/eia-mcp-server)
Docker: ghcr.io/cyanheads/eia-energy-mcp-server
Hosted: eia-energy.caseyjhand.com/mcp
Tool names (eia_*) unchanged — no breaking changes to the MCP surface.
v0.1.7: add @duckdb/node-api for canvas dataframe tools
add @duckdb/node-api for canvas dataframe tools
Adds @duckdb/node-api ^1.5.3-r.1. Set CANVAS_PROVIDER_TYPE=duckdb to enable the DuckDB-backed dataframe tools (eia_dataframe_describe, eia_dataframe_query, eia_dataframe_drop).