@cyanheads/eia-energy-mcp-server 0.2.1 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CLAUDE.md CHANGED
@@ -1,8 +1,8 @@
1
1
  # Agent Protocol
2
2
 
3
3
  **Server:** @cyanheads/eia-energy-mcp-server
4
- **Version:** 0.2.1
5
- **Framework:** [@cyanheads/mcp-ts-core](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) `^0.9.6`
4
+ **Version:** 0.2.2
5
+ **Framework:** [@cyanheads/mcp-ts-core](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) `^0.9.13`
6
6
  **Engines:** Bun ≥1.3.0, Node ≥24.0.0
7
7
 
8
8
  > **Read the framework docs first:** `node_modules/@cyanheads/mcp-ts-core/CLAUDE.md` contains the full API reference — builders, Context, error codes, exports, patterns. This file covers server-specific conventions only.
@@ -35,6 +35,7 @@ Tailor suggestions to what's actually missing or stale — don't recite the full
35
35
  - **Use `ctx.state`** for tenant-scoped storage. Never access persistence directly.
36
36
  - **Check `ctx.elicit` / `ctx.sample`** for presence before calling.
37
37
  - **Secrets in env vars only** — never hardcoded.
38
+ - **Close the loop on issues.** When implementing work tracked by a GitHub issue, comment on the issue with what landed and close it. Do both — a comment without a close leaves stale issues open; a close without a comment leaves no record of what shipped. The comment is for future readers — state the concrete changes, not the conversation that produced them.
38
39
 
39
40
  ---
40
41
 
@@ -245,10 +246,14 @@ Available skills:
245
246
  | `add-service` | Scaffold a new service integration |
246
247
  | `add-test` | Scaffold test file for a tool, resource, or service |
247
248
  | `field-test` | Exercise tools/resources/prompts with real inputs, verify behavior, report issues |
249
+ | `tool-defs-analysis` | Read-only audit of MCP definition language across the surface — voice, leaks, defaults, recovery hints, output descriptions |
248
250
  | `security-pass` | Audit server for MCP-flavored security gaps: output injection, scope blast radius, input sinks, tenant isolation |
251
+ | `code-simplifier` | Post-session cleanup against `git diff` — modernize syntax, consolidate duplication, align with the codebase |
249
252
  | `devcheck` | Lint, format, typecheck, audit |
250
253
  | `polish-docs-meta` | Finalize docs, README, metadata, and agent protocol for shipping |
251
- | `maintenance` | Investigate changelogs, adopt upstream changes, and sync skills after `bun update --latest` |
254
+ | `git-wrapup` | Land working-tree changes as a versioned commit + annotated tag version bump, changelog, verify, tag. Local only. |
255
+ | `release-and-publish` | Push + npm + MCP Registry + GH Release + Docker. Picks up from `git-wrapup` |
256
+ | `maintenance` | Investigate changelogs, adopt upstream changes, sync skills to agent dirs |
252
257
  | `report-issue-framework` | File a bug or feature request against `@cyanheads/mcp-ts-core` via `gh` CLI |
253
258
  | `report-issue-local` | File a bug or feature request against this server's own repo via `gh` CLI |
254
259
  | `api-auth` | Auth modes, scopes, JWT/OAuth |
@@ -256,6 +261,7 @@ Available skills:
256
261
  | `api-config` | AppConfig, parseConfig, env vars |
257
262
  | `api-context` | Context interface, logger, state, progress |
258
263
  | `api-errors` | McpError, JsonRpcErrorCode, error patterns |
264
+ | `api-linter` | Definition linter rule catalog — invoked by `bun run lint:mcp` and `devcheck` |
259
265
  | `api-services` | LLM, Speech, Graph services |
260
266
  | `api-testing` | createMockContext, test patterns |
261
267
  | `api-utils` | Formatting, parsing, security, pagination, scheduling, telemetry helpers |
@@ -345,7 +351,10 @@ import { getEiaApiService } from '@/services/eia/eia-service.js';
345
351
  - [ ] EIA wrapping: normalization and `format()` preserve uncertainty; do not fabricate facts from missing upstream data
346
352
  - [ ] EIA wrapping: tests include at least one sparse payload case with omitted upstream fields
347
353
  - [ ] Route tree and facet caches populated before use; retry/rate-limit contract declared on each tool
348
- - [ ] DataCanvas spillover via `ctx.core.canvas?` — graceful degradation when absent
354
+ - [ ] DataCanvas spillover via `getCanvas()` accessor — graceful degradation when absent
349
355
  - [ ] Registered in `createApp()` arrays (directly or via barrel exports)
350
356
  - [ ] Tests use `createMockContext()` from `@cyanheads/mcp-ts-core/testing`
357
+ - [ ] `.codex-plugin/plugin.json` populated — `name`, `version`, `description`, `repository`, `license` from `package.json`; `interface.displayName` = package name; `interface.shortDescription` from `package.json` description
358
+ - [ ] `.codex-plugin/mcp.json` updated — server name key matches `package.json` name; env vars added for any required API keys
359
+ - [ ] `.claude-plugin/plugin.json` populated — `name`, `version`, `description`, `repository`, `license` from `package.json`; inline `mcpServers` entry with server name key, env vars for any required API keys
351
360
  - [ ] `bun run devcheck` passes
package/README.md CHANGED
@@ -7,7 +7,7 @@
7
7
 
8
8
  <div align="center">
9
9
 
10
- [![Version](https://img.shields.io/badge/Version-0.2.1-blue.svg?style=flat-square)](./CHANGELOG.md) [![License](https://img.shields.io/badge/License-Apache%202.0-orange.svg?style=flat-square)](./LICENSE) [![Docker](https://img.shields.io/badge/Docker-ghcr.io-2496ED?style=flat-square&logo=docker&logoColor=white)](https://github.com/users/cyanheads/packages/container/package/eia-energy-mcp-server) [![MCP SDK](https://img.shields.io/badge/MCP%20SDK-^1.29.0-green.svg?style=flat-square)](https://modelcontextprotocol.io/) [![npm](https://img.shields.io/npm/v/@cyanheads/eia-energy-mcp-server?style=flat-square&logo=npm&logoColor=white)](https://www.npmjs.com/package/@cyanheads/eia-energy-mcp-server) [![TypeScript](https://img.shields.io/badge/TypeScript-^6.0.3-3178C6.svg?style=flat-square)](https://www.typescriptlang.org/) [![Bun](https://img.shields.io/badge/Bun-v1.3.0-blueviolet.svg?style=flat-square)](https://bun.sh/)
10
+ [![Version](https://img.shields.io/badge/Version-0.2.2-blue.svg?style=flat-square)](./CHANGELOG.md) [![License](https://img.shields.io/badge/License-Apache%202.0-orange.svg?style=flat-square)](./LICENSE) [![Docker](https://img.shields.io/badge/Docker-ghcr.io-2496ED?style=flat-square&logo=docker&logoColor=white)](https://github.com/users/cyanheads/packages/container/package/eia-energy-mcp-server) [![MCP SDK](https://img.shields.io/badge/MCP%20SDK-^1.29.0-green.svg?style=flat-square)](https://modelcontextprotocol.io/) [![npm](https://img.shields.io/npm/v/@cyanheads/eia-energy-mcp-server?style=flat-square&logo=npm&logoColor=white)](https://www.npmjs.com/package/@cyanheads/eia-energy-mcp-server) [![TypeScript](https://img.shields.io/badge/TypeScript-^6.0.3-3178C6.svg?style=flat-square)](https://www.typescriptlang.org/) [![Bun](https://img.shields.io/badge/Bun-v1.3.0-blueviolet.svg?style=flat-square)](https://bun.sh/)
11
11
 
12
12
  [![Install in Claude Desktop](https://img.shields.io/badge/Install_in-Claude_Desktop-D97757?style=for-the-badge&logo=anthropic&logoColor=white)](https://github.com/cyanheads/eia-energy-mcp-server/releases/latest/download/eia-energy-mcp-server.mcpb) [![Install in Cursor](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/en/install-mcp?name=eia-energy-mcp-server&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsIkBjeWFuaGVhZHMvZWlhLWVuZXJneS1tY3Atc2VydmVyIl0sImVudiI6eyJFSUFfQVBJX0tFWSI6InlvdXItYXBpLWtleSJ9fQ==) [![Install in VS Code](https://img.shields.io/badge/VS_Code-Install_Server-0098FF?style=for-the-badge&logo=visualstudiocode&logoColor=white)](https://vscode.dev/redirect?url=vscode:mcp/install?%7B%22name%22%3A%22eia-energy-mcp-server%22%2C%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22%40cyanheads/eia-energy-mcp-server%22%5D%2C%22env%22%3A%7B%22EIA_API_KEY%22%3A%22your-api-key%22%7D%7D)
13
13
 
@@ -0,0 +1,26 @@
1
+ ---
2
+ summary: "@cyanheads/mcp-ts-core ^0.9.6 → ^0.9.13: HTTP transport hardening, session-init gate, quieter error logs, GET /mcp keywords; dep refresh"
3
+ breaking: false
4
+ security: true
5
+ ---
6
+
7
+ # 0.2.2 — 2026-05-28
8
+
9
+ ## Added
10
+
11
+ - **`landing: { requireAuth: false }`** passed explicitly in `createApp()` — preserves the full landing-page inventory for unauthenticated callers now that the framework's default gates it behind auth when `MCP_AUTH_MODE` is `jwt` or `oauth`.
12
+ - **`stdio` / `streamable-http`** keywords added to `package.json` — both transport modes are now surfaced in `GET /mcp` keyword fields and npm search.
13
+
14
+ ## Changed
15
+
16
+ - **`@cyanheads/mcp-ts-core`** ^0.9.6 → ^0.9.13. User-facing changes picked up:
17
+ - **`MCP_HTTP_MAX_BODY_BYTES`** — configurable inbound request-body cap (default 1 MiB); oversized requests rejected with 413 before the SDK parses the body.
18
+ - **HTTP session-init gate** — stateful HTTP mode now rejects non-`initialize` requests lacking `Mcp-Session-Id` with HTTP 400.
19
+ - **Quieter error logs** — expected client errors (401, 403, 400, 404) downgraded from full `ErrorHandler` stack traces to `logger.warning`, reducing log noise.
20
+ - **`GET /mcp` keywords** — `package.json` `keywords` now surfaced on the status JSON response.
21
+ - **`@duckdb/node-api`** ^1.5.3-r.1 → ^1.5.3-r.2
22
+ - **`@biomejs/biome`** ^2.4.15 → ^2.4.16
23
+
24
+ ## Security
25
+
26
+ - Picks up **HTTP transport hardening** from `mcp-ts-core` ^0.9.13: configurable request-body cap (`MCP_HTTP_MAX_BODY_BYTES`) guards against unbounded inbound payloads, and the session-init gate prevents uninitialized sessions from being minted on first contact.
@@ -19,6 +19,14 @@ breaking: false
19
19
  # `## Security` section below. Flagged as `Security` in the rollup so
20
20
  # users can triage upgrade urgency at a glance.
21
21
  security: false
22
+
23
+ # Optional free-form notes for maintenance agents processing this release.
24
+ # Not rendered in CHANGELOG — consumed by agents running `maintenance` on
25
+ # downstream servers. Use for adoption instructions that don't fit the
26
+ # human-facing sections: new files to create, fields to populate, one-time
27
+ # migration steps. Omit the field entirely when there's nothing to say.
28
+ # agent-notes: |
29
+ # <instructions for downstream maintenance agents>
22
30
  ---
23
31
 
24
32
  # <version> — YYYY-MM-DD
@@ -66,6 +74,32 @@ security: false
66
74
  Never speculate on a future number — `#42` for an upcoming PR silently
67
75
  resolves to whatever real item already owns 42, and timeline previews pull
68
76
  in that unrelated item's metadata.
77
+
78
+ TAG ANNOTATIONS — the annotated tag body renders as the GitHub Release body
79
+ via `gh release create --notes-from-tag`. The tag is a derivative of this
80
+ changelog entry — a condensed, scannable version, not a copy. Format:
81
+
82
+ <theme — omit version number, GitHub prepends it>
83
+ ← blank line
84
+ <1-2 sentence context: what this release does>
85
+ ← blank line
86
+ Dependency bumps: ← section header
87
+ ← blank line
88
+ - `@cyanheads/mcp-ts-core` ^0.9.1 → ^0.9.6 ← bullet
89
+ ← blank line
90
+ Changed: ← only sections with entries
91
+ ← blank line
92
+ - `format()` output includes `query` in text mode
93
+ ← blank line
94
+ Added:
95
+ ← blank line
96
+ - `manifest.json` scaffolded for MCPB bundle support
97
+ - Install badges (Claude Desktop, Cursor, VS Code)
98
+ ← blank line
99
+ <N> tests pass; `bun run devcheck` clean. ← footer
100
+
101
+ Never a flat comma-separated string. Always structured markdown with
102
+ sections. The tag must scan well as a rendered GitHub Release page.
69
103
  -->
70
104
 
71
105
  ## Added
package/dist/index.js CHANGED
@@ -31,6 +31,7 @@ await createApp({
31
31
  dataframeQueryTool,
32
32
  dropTool,
33
33
  ],
34
+ landing: { requireAuth: false },
34
35
  setup(core) {
35
36
  initEiaApiService();
36
37
  initCanvasBridge(core.canvas);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,sDAAsD,CAAC;AACxF,OAAO,EAAE,qBAAqB,EAAE,MAAM,2DAA2D,CAAC;AAClG,OAAO,EAAE,iBAAiB,EAAE,MAAM,uDAAuD,CAAC;AAC1F,OAAO,EAAE,kBAAkB,EAAE,MAAM,wDAAwD,CAAC;AAC5F,OAAO,EAAE,iBAAiB,EAAE,MAAM,uDAAuD,CAAC;AAC1F,OAAO,EAAE,cAAc,EAAE,MAAM,oDAAoD,CAAC;AACpF,OAAO,EAAE,gBAAgB,EAAE,MAAM,sDAAsD,CAAC;AACxF,OAAO,EAAE,gBAAgB,EAAE,MAAM,2CAA2C,CAAC;AAC7E,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAElE,MAAM,YAAY,GAAG,eAAe,EAAE,CAAC;AAEvC,MAAM,QAAQ,GAAG,YAAY,CAAC,oBAAoB;IAChD,CAAC,CAAC,iBAAiB;IACnB,CAAC,CAAC,YAAY,CAAC,iBAAiB,EAAE;QAC9B,MAAM,EAAE,gDAAgD;QACxD,IAAI,EAAE,iCAAiC;KACxC,CAAC,CAAC;AAEP,MAAM,SAAS,CAAC;IACd,KAAK,EAAE;QACL,gBAAgB;QAChB,iBAAiB;QACjB,gBAAgB;QAChB,cAAc;QACd,qBAAqB;QACrB,kBAAkB;QAClB,QAAQ;KACT;IACD,KAAK,CAAC,IAAI;QACR,iBAAiB,EAAE,CAAC;QACpB,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;CACF,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,sDAAsD,CAAC;AACxF,OAAO,EAAE,qBAAqB,EAAE,MAAM,2DAA2D,CAAC;AAClG,OAAO,EAAE,iBAAiB,EAAE,MAAM,uDAAuD,CAAC;AAC1F,OAAO,EAAE,kBAAkB,EAAE,MAAM,wDAAwD,CAAC;AAC5F,OAAO,EAAE,iBAAiB,EAAE,MAAM,uDAAuD,CAAC;AAC1F,OAAO,EAAE,cAAc,EAAE,MAAM,oDAAoD,CAAC;AACpF,OAAO,EAAE,gBAAgB,EAAE,MAAM,sDAAsD,CAAC;AACxF,OAAO,EAAE,gBAAgB,EAAE,MAAM,2CAA2C,CAAC;AAC7E,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAElE,MAAM,YAAY,GAAG,eAAe,EAAE,CAAC;AAEvC,MAAM,QAAQ,GAAG,YAAY,CAAC,oBAAoB;IAChD,CAAC,CAAC,iBAAiB;IACnB,CAAC,CAAC,YAAY,CAAC,iBAAiB,EAAE;QAC9B,MAAM,EAAE,gDAAgD;QACxD,IAAI,EAAE,iCAAiC;KACxC,CAAC,CAAC;AAEP,MAAM,SAAS,CAAC;IACd,KAAK,EAAE;QACL,gBAAgB;QAChB,iBAAiB;QACjB,gBAAgB;QAChB,cAAc;QACd,qBAAqB;QACrB,kBAAkB;QAClB,QAAQ;KACT;IACD,OAAO,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE;IAC/B,KAAK,CAAC,IAAI;QACR,iBAAiB,EAAE,CAAC;QACpB,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;CACF,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cyanheads/eia-energy-mcp-server",
3
- "version": "0.2.1",
3
+ "version": "0.2.2",
4
4
  "mcpName": "io.github.cyanheads/eia-energy-mcp-server",
5
5
  "description": "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.",
6
6
  "type": "module",
@@ -55,6 +55,8 @@
55
55
  "model-context-protocol",
56
56
  "typescript",
57
57
  "bun",
58
+ "stdio",
59
+ "streamable-http",
58
60
  "ai-agent"
59
61
  ],
60
62
  "repository": {
@@ -86,14 +88,14 @@
86
88
  "access": "public"
87
89
  },
88
90
  "dependencies": {
89
- "@cyanheads/mcp-ts-core": "^0.9.6",
90
- "@duckdb/node-api": "^1.5.3-r.1",
91
+ "@cyanheads/mcp-ts-core": "^0.9.13",
92
+ "@duckdb/node-api": "^1.5.3-r.2",
91
93
  "fuse.js": "^7.3.0",
92
94
  "pino-pretty": "^13.1.3",
93
95
  "zod": "^4.4.3"
94
96
  },
95
97
  "devDependencies": {
96
- "@biomejs/biome": "^2.4.15",
98
+ "@biomejs/biome": "^2.4.16",
97
99
  "@types/node": "^25.9.1",
98
100
  "depcheck": "^1.4.7",
99
101
  "ignore": "^7.0.5",
package/server.json CHANGED
@@ -6,7 +6,7 @@
6
6
  "url": "https://github.com/cyanheads/eia-energy-mcp-server",
7
7
  "source": "github"
8
8
  },
9
- "version": "0.2.1",
9
+ "version": "0.2.2",
10
10
  "remotes": [
11
11
  {
12
12
  "type": "streamable-http",
@@ -19,7 +19,7 @@
19
19
  "registryBaseUrl": "https://registry.npmjs.org",
20
20
  "identifier": "@cyanheads/eia-energy-mcp-server",
21
21
  "runtimeHint": "bun",
22
- "version": "0.2.1",
22
+ "version": "0.2.2",
23
23
  "packageArguments": [
24
24
  {
25
25
  "type": "positional",
@@ -74,7 +74,7 @@
74
74
  "registryBaseUrl": "https://registry.npmjs.org",
75
75
  "identifier": "@cyanheads/eia-energy-mcp-server",
76
76
  "runtimeHint": "bun",
77
- "version": "0.2.1",
77
+ "version": "0.2.2",
78
78
  "packageArguments": [
79
79
  {
80
80
  "type": "positional",