@cyanheads/eurostat-mcp-server 0.1.3 → 0.1.4
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 +39 -82
- package/Dockerfile +5 -11
- package/README.md +1 -1
- package/package.json +19 -29
- package/server.json +9 -3
- package/changelog/0.1.x/0.1.0.md +0 -20
- package/changelog/0.1.x/0.1.1.md +0 -21
- package/changelog/0.1.x/0.1.2.md +0 -17
- package/changelog/0.1.x/0.1.3.md +0 -12
- package/changelog/template.md +0 -119
package/CLAUDE.md
CHANGED
|
@@ -1,11 +1,9 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Agent Protocol
|
|
2
2
|
|
|
3
|
-
**Server:** eurostat-mcp-server
|
|
4
|
-
**Version:** 0.1.
|
|
3
|
+
**Server:** @cyanheads/eurostat-mcp-server
|
|
4
|
+
**Version:** 0.1.4
|
|
5
5
|
**Framework:** [@cyanheads/mcp-ts-core](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) `^0.9.7`
|
|
6
|
-
**Engines:** Bun ≥1.3.
|
|
7
|
-
**MCP SDK:** `@modelcontextprotocol/sdk` ^1.29.0
|
|
8
|
-
**Zod:** ^4.4.3
|
|
6
|
+
**Engines:** Bun ≥1.3.2, Node ≥24.0.0
|
|
9
7
|
|
|
10
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.
|
|
11
9
|
|
|
@@ -13,7 +11,7 @@
|
|
|
13
11
|
|
|
14
12
|
## What's Next?
|
|
15
13
|
|
|
16
|
-
When the user asks what's
|
|
14
|
+
When the user asks what to do next, what's left, or needs direction, suggest relevant options based on the current project state:
|
|
17
15
|
|
|
18
16
|
1. **Re-run the `setup` skill** — ensures CLAUDE.md, skills, structure, and metadata are populated and up to date with the current codebase
|
|
19
17
|
2. **Run the `design-mcp-server` skill** — if the tool/resource surface hasn't been mapped yet, work through domain design
|
|
@@ -236,7 +234,7 @@ src/
|
|
|
236
234
|
|
|
237
235
|
Skills are modular instructions in `skills/` at the project root. Read them directly when a task matches — e.g., `skills/add-tool/SKILL.md` when adding a tool.
|
|
238
236
|
|
|
239
|
-
**Agent skill directory:** Copy skills into the directory your agent discovers (Claude Code: `.claude/skills/`, others: equivalent).
|
|
237
|
+
**Agent skill directory:** Copy skills into the directory your agent discovers (Claude Code: `.claude/skills/`, others: equivalent). This makes skills available as context without needing to reference `skills/` paths manually. After framework updates, run the `maintenance` skill — it re-syncs the agent directory automatically (Phase B).
|
|
240
238
|
|
|
241
239
|
Available skills:
|
|
242
240
|
|
|
@@ -251,22 +249,25 @@ Available skills:
|
|
|
251
249
|
| `add-service` | Scaffold a new service integration |
|
|
252
250
|
| `add-test` | Scaffold test file for a tool, resource, or service |
|
|
253
251
|
| `field-test` | Exercise tools/resources/prompts with real inputs, verify behavior, report issues |
|
|
252
|
+
| `tool-defs-analysis` | Read-only audit of definition language: voice, leaks, defaults, recovery hints, examples |
|
|
254
253
|
| `security-pass` | Audit server for MCP-flavored security gaps: output injection, scope blast radius, input sinks, tenant isolation |
|
|
255
254
|
| `devcheck` | Lint, format, typecheck, audit |
|
|
256
255
|
| `polish-docs-meta` | Finalize docs, README, metadata, and agent protocol for shipping |
|
|
257
|
-
| `maintenance` | Investigate changelogs, adopt upstream changes, sync skills
|
|
258
|
-
| `
|
|
259
|
-
| `report-issue-local` | File a bug or feature request against this server's own repo via `gh` CLI |
|
|
256
|
+
| `maintenance` | Investigate changelogs, adopt upstream changes, and sync skills after `bun update --latest` |
|
|
257
|
+
| `release-and-publish` | Ship a release: verification gate, push commits+tags, publish to npm / MCP Registry / GHCR / `.mcpb` bundle on GitHub Releases |
|
|
260
258
|
| `api-auth` | Auth modes, scopes, JWT/OAuth |
|
|
261
259
|
| `api-canvas` | DataCanvas: register tabular data, run SQL, export, plus the `spillover()` helper for big result sets — Tier 3 opt-in |
|
|
262
260
|
| `api-config` | AppConfig, parseConfig, env vars |
|
|
263
261
|
| `api-context` | Context interface, logger, state, progress |
|
|
264
262
|
| `api-errors` | McpError, JsonRpcErrorCode, error patterns |
|
|
263
|
+
| `api-linter` | Definition lint rules reference (`format-parity`, `schema-*`, `server-json-*`, …) |
|
|
265
264
|
| `api-services` | LLM, Speech, Graph services |
|
|
265
|
+
| `api-telemetry` | OTel catalog: spans, metrics, completion logs, env config, cardinality rules |
|
|
266
266
|
| `api-testing` | createMockContext, test patterns |
|
|
267
267
|
| `api-utils` | Formatting, parsing, security, pagination, scheduling, telemetry helpers |
|
|
268
|
-
| `api-telemetry` | OTel catalog: spans, metrics, completion logs, env config, cardinality rules |
|
|
269
268
|
| `api-workers` | Cloudflare Workers runtime |
|
|
269
|
+
| `report-issue-framework` | File bug/feature request against @cyanheads/mcp-ts-core |
|
|
270
|
+
| `report-issue-local` | File bug/feature request against this server's repo |
|
|
270
271
|
|
|
271
272
|
When you complete a skill's checklist, check the boxes and add a completion timestamp at the end (e.g., `Completed: 2026-03-11`).
|
|
272
273
|
|
|
@@ -274,92 +275,48 @@ When you complete a skill's checklist, check the boxes and add a completion time
|
|
|
274
275
|
|
|
275
276
|
## Commands
|
|
276
277
|
|
|
277
|
-
**Runtime:** Scripts use `tsx` — both `npm run <cmd>` and `bun run <cmd>` work. `bun` is slightly faster for script invocation but not required.
|
|
278
|
-
|
|
279
278
|
| Command | Purpose |
|
|
280
279
|
|:--------|:--------|
|
|
281
|
-
| `
|
|
282
|
-
| `
|
|
283
|
-
| `
|
|
284
|
-
| `
|
|
285
|
-
| `bun run audit:refresh` | Delete `bun.lock`, reinstall, re-audit
|
|
286
|
-
| `
|
|
287
|
-
| `
|
|
288
|
-
| `
|
|
289
|
-
| `
|
|
290
|
-
| `
|
|
291
|
-
| `
|
|
292
|
-
| `
|
|
293
|
-
| `
|
|
280
|
+
| `bun run build` | Compile TypeScript |
|
|
281
|
+
| `bun run rebuild` | Clean + build |
|
|
282
|
+
| `bun run clean` | Remove build artifacts |
|
|
283
|
+
| `bun run devcheck` | Lint + format + typecheck + security + packaging alignment |
|
|
284
|
+
| `bun run audit:refresh` | Delete `bun.lock`, reinstall, and re-run `bun audit`. Use when `devcheck` flags a transitive advisory — `bun update` is sticky on transitive resolutions, so the advisory may be a stale-lockfile false positive. If it survives the refresh, it's real. |
|
|
285
|
+
| `bun run tree` | Generate directory structure doc |
|
|
286
|
+
| `bun run format` | Auto-fix formatting |
|
|
287
|
+
| `bun run test` | Run tests |
|
|
288
|
+
| `bun run lint:mcp` | Validate MCP definitions against spec |
|
|
289
|
+
| `bun run lint:packaging` | Validate env var alignment between `manifest.json` and `server.json` (skipped cleanly when `manifest.json` is absent) |
|
|
290
|
+
| `bun run list-skills` | List skills in `skills/` with name + description |
|
|
291
|
+
| `bun run bundle` | Build and pack as `dist/eurostat-mcp-server.mcpb` for one-click Claude Desktop install |
|
|
292
|
+
| `bun run start:stdio` | Production mode (stdio) |
|
|
293
|
+
| `bun run start:http` | Production mode (HTTP) |
|
|
294
294
|
|
|
295
295
|
---
|
|
296
296
|
|
|
297
297
|
## Bundling
|
|
298
298
|
|
|
299
|
-
`
|
|
300
|
-
|
|
301
|
-
**Adding an env var requires both files:** `server.json` (registry discovery, `environmentVariables[]`) and `manifest.json` (bundle install UX, `mcp_config.env` + `user_config`). `lint:packaging` (run by `devcheck`) verifies the env var names match.
|
|
302
|
-
|
|
303
|
-
**README install badges.** Drop these into the project README to give users one-click install paths. Fill in `<OWNER>` / `<REPO>` / `<PACKAGE_NAME>` and encode the per-server config. Cursor + VS Code badges assume the server is published to npm; Claude Desktop downloads the `.mcpb` directly so npm publishing isn't required.
|
|
304
|
-
|
|
305
|
-
| Client | Mechanism |
|
|
306
|
-
|:-------|:----------|
|
|
307
|
-
| Claude Desktop | Browser downloads the `.mcpb` from the latest GitHub Release; OS file handler routes it to Claude Desktop, which opens the install dialog. No deep-link URL scheme yet — this is the canonical path. |
|
|
308
|
-
| Cursor | Official `https://cursor.com/en/install-mcp` endpoint with base64 JSON config. |
|
|
309
|
-
| VS Code / Insiders | Official `vscode:mcp/install?...` deep link, wrapped in `https://vscode.dev/redirect?url=` so GitHub-rendered markdown doesn't strip the non-HTTP scheme. |
|
|
310
|
-
| Claude Code / Codex | CLI only (`claude mcp add` / `codex mcp add`); no URL scheme. |
|
|
311
|
-
|
|
312
|
-
```markdown
|
|
313
|
-
[](https://github.com/<OWNER>/<REPO>/releases/latest/download/<PACKAGE_NAME>.mcpb)
|
|
314
|
-
[](https://cursor.com/en/install-mcp?name=<PACKAGE_NAME>&config=<BASE64_CONFIG>)
|
|
315
|
-
[](https://vscode.dev/redirect?url=vscode:mcp/install?<URLENCODED_JSON>)
|
|
316
|
-
```
|
|
317
|
-
|
|
318
|
-
Both install links route through HTTPS endpoints (`cursor.com/en/install-mcp` and `vscode.dev/redirect`) — GitHub-rendered markdown strips non-HTTP URL schemes from anchors, so a raw `cursor://` or `vscode:` link won't click through from github.com.
|
|
319
|
-
|
|
320
|
-
Generate the encoded configs (replace `<PACKAGE_NAME>` and add env vars for any required API keys):
|
|
299
|
+
`bun run bundle` produces `dist/eurostat-mcp-server.mcpb` for one-click install in Claude Desktop. MCPB is stdio-only — HTTP and Docker deployments are unaffected. The `release-and-publish` skill attaches the bundle to the GitHub Release at a stable `releases/latest/download/eurostat-mcp-server.mcpb` URL that powers the README install badge.
|
|
321
300
|
|
|
322
|
-
|
|
323
|
-
# Cursor: base64-encoded JSON. Split command/args, add env when keys are needed.
|
|
324
|
-
echo -n '{"command":"npx","args":["-y","<PACKAGE_NAME>"],"env":{"API_KEY":"your-api-key"}}' | base64
|
|
325
|
-
# Without env (no required keys):
|
|
326
|
-
echo -n '{"command":"npx","args":["-y","<PACKAGE_NAME>"]}' | base64
|
|
327
|
-
|
|
328
|
-
# VS Code: URL-encoded JSON. Same shape plus a `name` field.
|
|
329
|
-
node -p 'encodeURIComponent(JSON.stringify({name:"<SHORT_NAME>",command:"npx",args:["-y","<PACKAGE_NAME>"],env:{API_KEY:"your-api-key"}}))'
|
|
330
|
-
# Without env:
|
|
331
|
-
node -p 'encodeURIComponent(JSON.stringify({name:"<SHORT_NAME>",command:"npx",args:["-y","<PACKAGE_NAME>"]}))'
|
|
332
|
-
```
|
|
333
|
-
|
|
334
|
-
Both clients use the same `{command, args, env}` shape (matching `mcp.json` schema). VS Code adds a top-level `name` field. Omit `env` entirely when no API keys are needed — don't include empty objects or framework-only vars like `MCP_TRANSPORT_TYPE`.
|
|
335
|
-
|
|
336
|
-
The Claude Desktop badge requires the bundle to ship with a stable filename — `bun run bundle` outputs `dist/<PACKAGE_NAME>.mcpb`, and `release-and-publish` attaches that file to the GitHub Release. `releases/latest/download/<PACKAGE_NAME>.mcpb` then redirects to the most recent release.
|
|
301
|
+
**Adding an env var requires both files**: `server.json` stdio `environmentVariables[]` (registry discovery) and `manifest.json` `mcp_config.env` (bundle install UX, plus `user_config` if user-prompted). `bun run lint:packaging` (run by `devcheck`) verifies the env var names align.
|
|
337
302
|
|
|
338
303
|
---
|
|
339
304
|
|
|
340
|
-
##
|
|
305
|
+
## Publishing
|
|
341
306
|
|
|
342
|
-
|
|
307
|
+
Run the `release-and-publish` skill after git wrapup — it runs the verification gate (`devcheck`, `rebuild`, `test`), pushes commits and tags, and publishes to npm, the MCP Registry, GHCR, and attaches the `.mcpb` bundle to the GitHub Release, halting on the first failure. For reference, the underlying commands are:
|
|
343
308
|
|
|
344
|
-
|
|
309
|
+
```bash
|
|
310
|
+
bun publish --access public
|
|
345
311
|
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
security: false # optional — true flags security fixes
|
|
351
|
-
---
|
|
312
|
+
docker buildx build --platform linux/amd64,linux/arm64 \
|
|
313
|
+
-t ghcr.io/cyanheads/eurostat-mcp-server:<version> \
|
|
314
|
+
-t ghcr.io/cyanheads/eurostat-mcp-server:latest \
|
|
315
|
+
--push .
|
|
352
316
|
|
|
353
|
-
|
|
354
|
-
...
|
|
317
|
+
mcp-publisher publish
|
|
355
318
|
```
|
|
356
319
|
|
|
357
|
-
`breaking: true` renders a `· ⚠️ Breaking` badge — use it when consumers must update code on upgrade (signature changes, removed APIs, config renames). `security: true` renders a `· 🛡️ Security` badge and pairs with a `## Security` body section. When both are set, badges render `· ⚠️ Breaking · 🛡️ Security`.
|
|
358
|
-
|
|
359
|
-
**Section order** (Keep a Changelog): Added, Changed, Deprecated, Removed, Fixed, Security. Include only sections with entries — don't ship empty headers.
|
|
360
|
-
|
|
361
|
-
**Tag annotations** render as GitHub Release bodies via `--notes-from-tag`. They must be structured markdown — never a flat comma-separated string. Subject omits the version number (GitHub prepends it). See `changelog/template.md` for the full format reference.
|
|
362
|
-
|
|
363
320
|
---
|
|
364
321
|
|
|
365
322
|
## Imports
|
|
@@ -388,4 +345,4 @@ import { getMyService } from '@/services/my-domain/my-service.js';
|
|
|
388
345
|
- [ ] If wrapping external API: tests include at least one sparse payload case with omitted upstream fields
|
|
389
346
|
- [ ] Registered in `createApp()` arrays (directly or via barrel exports)
|
|
390
347
|
- [ ] Tests use `createMockContext()` from `@cyanheads/mcp-ts-core/testing`
|
|
391
|
-
- [ ] `
|
|
348
|
+
- [ ] `bun run devcheck` passes
|
package/Dockerfile
CHANGED
|
@@ -1,16 +1,10 @@
|
|
|
1
1
|
# ==============================================================================
|
|
2
2
|
# Build Stage
|
|
3
|
-
#
|
|
4
|
-
# Uses Node.js (real node binary) so that tsx can load its CJS shims during
|
|
5
|
-
# compilation. oven/bun:1.3's node shim maps back to bun, which breaks tsx.
|
|
6
3
|
# ==============================================================================
|
|
7
|
-
FROM
|
|
4
|
+
FROM oven/bun:1.3 AS build
|
|
8
5
|
|
|
9
6
|
WORKDIR /usr/src/app
|
|
10
7
|
|
|
11
|
-
# Install bun for package management (faster installs, lockfile compat)
|
|
12
|
-
RUN npm install -g bun@1.3
|
|
13
|
-
|
|
14
8
|
# Copy dependency manifests for optimized layer caching
|
|
15
9
|
COPY package.json bun.lock ./
|
|
16
10
|
|
|
@@ -20,8 +14,8 @@ RUN bun install --frozen-lockfile
|
|
|
20
14
|
# Copy the rest of the source code
|
|
21
15
|
COPY . .
|
|
22
16
|
|
|
23
|
-
# Build the application
|
|
24
|
-
RUN
|
|
17
|
+
# Build the application
|
|
18
|
+
RUN bun run build
|
|
25
19
|
|
|
26
20
|
|
|
27
21
|
# ==============================================================================
|
|
@@ -40,8 +34,8 @@ WORKDIR /usr/src/app
|
|
|
40
34
|
ENV NODE_ENV=production
|
|
41
35
|
|
|
42
36
|
# OCI image metadata (https://github.com/opencontainers/image-spec/blob/main/annotations.md)
|
|
43
|
-
LABEL org.opencontainers.image.title="eurostat-mcp-server"
|
|
44
|
-
LABEL org.opencontainers.image.description="
|
|
37
|
+
LABEL org.opencontainers.image.title="@cyanheads/eurostat-mcp-server"
|
|
38
|
+
LABEL org.opencontainers.image.description="Search and query 8,933 Eurostat datasets — EU economy, demography, trade, health, and NUTS regional data via MCP. STDIO or Streamable HTTP."
|
|
45
39
|
LABEL org.opencontainers.image.licenses="Apache-2.0"
|
|
46
40
|
LABEL org.opencontainers.image.source="https://github.com/cyanheads/eurostat-mcp-server"
|
|
47
41
|
|
package/README.md
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
|
|
12
|
-
[](./CHANGELOG.md) [](./LICENSE) [](https://github.com/users/cyanheads/packages/container/package/eurostat-mcp-server) [](https://modelcontextprotocol.io/) [](https://www.npmjs.com/package/@cyanheads/eurostat-mcp-server) [](https://www.typescriptlang.org/) [](https://bun.sh/)
|
|
13
13
|
|
|
14
14
|
</div>
|
|
15
15
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cyanheads/eurostat-mcp-server",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.4",
|
|
4
4
|
"mcpName": "io.github.cyanheads/eurostat-mcp-server",
|
|
5
5
|
"description": "Search and query 8,933 Eurostat datasets — EU economy, demography, trade, health, and NUTS regional data via MCP. STDIO or Streamable HTTP.",
|
|
6
6
|
"type": "module",
|
|
@@ -9,35 +9,25 @@
|
|
|
9
9
|
"bin": {
|
|
10
10
|
"eurostat-mcp-server": "dist/index.js"
|
|
11
11
|
},
|
|
12
|
-
"files": [
|
|
13
|
-
"changelog/",
|
|
14
|
-
"dist/",
|
|
15
|
-
"README.md",
|
|
16
|
-
"LICENSE",
|
|
17
|
-
"CLAUDE.md",
|
|
18
|
-
"AGENTS.md",
|
|
19
|
-
"Dockerfile",
|
|
20
|
-
"server.json"
|
|
21
|
-
],
|
|
12
|
+
"files": ["dist/", "README.md", "LICENSE", "CLAUDE.md", "Dockerfile", "server.json"],
|
|
22
13
|
"scripts": {
|
|
23
|
-
"build": "
|
|
24
|
-
"rebuild": "
|
|
25
|
-
"clean": "
|
|
26
|
-
"devcheck": "
|
|
14
|
+
"build": "bun run scripts/build.ts",
|
|
15
|
+
"rebuild": "bun run scripts/clean.ts && bun run build",
|
|
16
|
+
"clean": "bun run scripts/clean.ts",
|
|
17
|
+
"devcheck": "bun run scripts/devcheck.ts",
|
|
18
|
+
"tree": "bun run scripts/tree.ts",
|
|
19
|
+
"format": "biome check --write --unsafe",
|
|
20
|
+
"test": "bunx vitest run",
|
|
27
21
|
"audit:refresh": "rm -f bun.lock && bun install && bun audit",
|
|
28
|
-
"
|
|
29
|
-
"
|
|
30
|
-
"
|
|
31
|
-
"
|
|
32
|
-
"
|
|
33
|
-
"
|
|
34
|
-
"
|
|
35
|
-
"
|
|
36
|
-
"
|
|
37
|
-
"start": "node dist/index.js",
|
|
38
|
-
"start:stdio": "MCP_TRANSPORT_TYPE=stdio node dist/index.js",
|
|
39
|
-
"start:http": "MCP_TRANSPORT_TYPE=http node dist/index.js",
|
|
40
|
-
"publish-mcp": "mcp-publisher login github -token \"$(security find-generic-password -a \"$USER\" -s mcp-publisher-github-pat -w)\" && mcp-publisher publish"
|
|
22
|
+
"list-skills": "bun run scripts/list-skills.ts",
|
|
23
|
+
"lint:mcp": "bun run scripts/lint-mcp.ts",
|
|
24
|
+
"lint:packaging": "bun run scripts/lint-packaging.ts",
|
|
25
|
+
"bundle": "bun run build && npx -y @anthropic-ai/mcpb pack . dist/eurostat-mcp-server.mcpb",
|
|
26
|
+
"changelog:build": "bun run scripts/build-changelog.ts",
|
|
27
|
+
"changelog:check": "bun run scripts/build-changelog.ts --check",
|
|
28
|
+
"publish-mcp": "mcp-publisher login github -token \"$(security find-generic-password -a \"$USER\" -s mcp-publisher-github-pat -w)\" && mcp-publisher publish",
|
|
29
|
+
"start:stdio": "MCP_TRANSPORT_TYPE=stdio bun ./dist/index.js",
|
|
30
|
+
"start:http": "MCP_TRANSPORT_TYPE=http bun ./dist/index.js"
|
|
41
31
|
},
|
|
42
32
|
"keywords": [
|
|
43
33
|
"mcp",
|
|
@@ -79,7 +69,7 @@
|
|
|
79
69
|
"license": "Apache-2.0",
|
|
80
70
|
"packageManager": "bun@1.3.2",
|
|
81
71
|
"engines": {
|
|
82
|
-
"bun": ">=1.3.
|
|
72
|
+
"bun": ">=1.3.2",
|
|
83
73
|
"node": ">=24.0.0"
|
|
84
74
|
},
|
|
85
75
|
"publishConfig": {
|
package/server.json
CHANGED
|
@@ -6,14 +6,14 @@
|
|
|
6
6
|
"url": "https://github.com/cyanheads/eurostat-mcp-server",
|
|
7
7
|
"source": "github"
|
|
8
8
|
},
|
|
9
|
-
"version": "0.1.
|
|
9
|
+
"version": "0.1.4",
|
|
10
10
|
"packages": [
|
|
11
11
|
{
|
|
12
12
|
"registryType": "npm",
|
|
13
13
|
"registryBaseUrl": "https://registry.npmjs.org",
|
|
14
14
|
"identifier": "@cyanheads/eurostat-mcp-server",
|
|
15
15
|
"runtimeHint": "bun",
|
|
16
|
-
"version": "0.1.
|
|
16
|
+
"version": "0.1.4",
|
|
17
17
|
"packageArguments": [
|
|
18
18
|
{
|
|
19
19
|
"type": "positional",
|
|
@@ -56,7 +56,7 @@
|
|
|
56
56
|
"registryBaseUrl": "https://registry.npmjs.org",
|
|
57
57
|
"identifier": "@cyanheads/eurostat-mcp-server",
|
|
58
58
|
"runtimeHint": "bun",
|
|
59
|
-
"version": "0.1.
|
|
59
|
+
"version": "0.1.4",
|
|
60
60
|
"packageArguments": [
|
|
61
61
|
{
|
|
62
62
|
"type": "positional",
|
|
@@ -89,6 +89,12 @@
|
|
|
89
89
|
"isRequired": false,
|
|
90
90
|
"default": "/mcp"
|
|
91
91
|
},
|
|
92
|
+
{
|
|
93
|
+
"name": "MCP_PUBLIC_URL",
|
|
94
|
+
"description": "Public origin override for deployments behind a TLS-terminating reverse proxy (e.g. https://mcp.example.com).",
|
|
95
|
+
"format": "string",
|
|
96
|
+
"isRequired": false
|
|
97
|
+
},
|
|
92
98
|
{
|
|
93
99
|
"name": "MCP_AUTH_MODE",
|
|
94
100
|
"description": "Authentication mode to use: 'none', 'jwt', or 'oauth'.",
|
package/changelog/0.1.x/0.1.0.md
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
summary: "Initial release — Eurostat statistical data server with 5 tools and 1 resource"
|
|
3
|
-
breaking: false
|
|
4
|
-
security: false
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# 0.1.0 — 2026-05-23
|
|
8
|
-
|
|
9
|
-
## Added
|
|
10
|
-
|
|
11
|
-
- **`eurostat_search_datasets`** — keyword search across 8,933 Eurostat datasets using the session-cached TOC TXT file
|
|
12
|
-
- **`eurostat_browse_themes`** — tree navigation of the Eurostat theme hierarchy (11 root themes, hierarchical subthemes)
|
|
13
|
-
- **`eurostat_get_dataset_info`** — dataset metadata including dimensions, valid values, time range, obs count, and last-updated date
|
|
14
|
-
- **`eurostat_get_dimension_values`** — full list of valid values for a specific dataset dimension; supports NUTS geo-level filtering
|
|
15
|
-
- **`eurostat_query_dataset`** — decoded JSON-stat 2.0 observations with dimension filters, NUTS geo-level, and time-range support
|
|
16
|
-
- **`eurostat://dataset/{dataset_code}`** resource — dataset metadata accessible by URI
|
|
17
|
-
- `EurostatCatalogueService` — fetches and parses the TOC TXT file; session-level in-memory cache for search and tree navigation
|
|
18
|
-
- `EurostatDataService` — Statistics API HTTP client with JSON-stat 2.0 stride-based decoder, async-response detection, and retry logic
|
|
19
|
-
- `EUROSTAT_BASE_URL` env var — override API base URL (default: `https://ec.europa.eu/eurostat/api/dissemination`)
|
|
20
|
-
- `EUROSTAT_REQUEST_TIMEOUT_MS` env var — HTTP request timeout in ms (default: `30000`)
|
package/changelog/0.1.x/0.1.1.md
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
summary: "First public release — 5 tools, 1 resource, full Eurostat implementation covering 8,900+ datasets and NUTS regional data"
|
|
3
|
-
breaking: false
|
|
4
|
-
security: false
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# 0.1.1 — 2026-05-23
|
|
8
|
-
|
|
9
|
-
## Added
|
|
10
|
-
|
|
11
|
-
- **`eurostat_search_datasets`** — keyword search across 8,933 Eurostat datasets using a session-cached TOC TXT file
|
|
12
|
-
- **`eurostat_browse_themes`** — hierarchical navigation of the Eurostat theme tree (11 root themes)
|
|
13
|
-
- **`eurostat_get_dataset_info`** — dataset metadata: dimensions, valid values, time range, obs count, last-updated date
|
|
14
|
-
- **`eurostat_get_dimension_values`** — full value list for a specific dataset dimension; supports NUTS geo-level filtering
|
|
15
|
-
- **`eurostat_query_dataset`** — decoded JSON-stat 2.0 observations with dimension filters, NUTS geo-level, and time-range support
|
|
16
|
-
- **`eurostat://dataset/{dataset_code}`** resource — dataset metadata accessible by URI
|
|
17
|
-
- `EurostatCatalogueService` — fetches and parses the TOC TXT file with session-level in-memory cache
|
|
18
|
-
- `EurostatDataService` — Statistics API HTTP client with JSON-stat 2.0 stride decoder, async-response polling, and retry logic
|
|
19
|
-
- `EUROSTAT_BASE_URL` env var — override API base URL (default: `https://ec.europa.eu/eurostat/api/dissemination`)
|
|
20
|
-
- `EUROSTAT_REQUEST_TIMEOUT_MS` env var — HTTP request timeout in ms (default: `30000`)
|
|
21
|
-
- 37 tests across all tools and the dataset resource
|
package/changelog/0.1.x/0.1.2.md
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
summary: "Bug fixes: depth-encoding whitespace in browse_themes, timeRange computed from observations, not_found error contract, description cleanup"
|
|
3
|
-
breaking: false
|
|
4
|
-
security: false
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# 0.1.2 — 2026-05-24
|
|
8
|
-
|
|
9
|
-
## Changed
|
|
10
|
-
|
|
11
|
-
- **`eurostat_search_datasets`**, **`eurostat_get_dataset_info`**, **`eurostat_get_dimension_values`** — tool descriptions trimmed; removed implementation-detail sentences that don't help callers
|
|
12
|
-
|
|
13
|
-
## Fixed
|
|
14
|
-
|
|
15
|
-
- **`eurostat_browse_themes`** — `unquote()` now preserves leading spaces when stripping quotes, fixing the depth-encoding whitespace that encodes NUTS hierarchy indentation
|
|
16
|
-
- **`eurostat_get_dataset_info`**, **`eurostat_query_dataset`** — `timeRange.start/end` computed from actual time dimension codes in the response; annotation-based fallback used only when no time dimension is present
|
|
17
|
-
- **`eurostat_get_dataset_info`**, **`eurostat_query_dataset`** — 404 responses from the Statistics API are now caught via `McpError` and re-thrown as `notFound` with an actionable message; previously surfaced as raw `FetchHttpError`
|
package/changelog/0.1.x/0.1.3.md
DELETED
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
summary: "Sync tagline across README, package.json, server.json, and manifest.json"
|
|
3
|
-
breaking: false
|
|
4
|
-
security: false
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# 0.1.3 — 2026-05-23
|
|
8
|
-
|
|
9
|
-
## Changed
|
|
10
|
-
|
|
11
|
-
- **Tagline** — canonical description synced across all surfaces: README header, `package.json`, `server.json`, and `manifest.json`. Full form: "Search and query 8,933 Eurostat datasets — EU economy, demography, trade, health, and NUTS regional data via MCP. STDIO or Streamable HTTP." Condensed form (server.json, manifest.json): "Search and query 8,933 Eurostat datasets — EU economy, demography, trade, and NUTS data."
|
|
12
|
-
- **`manifest.json`** — version updated from `0.1.1` to `0.1.3` (was two versions behind)
|
package/changelog/template.md
DELETED
|
@@ -1,119 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
# FORMAT REFERENCE — do not edit. Copy this file to
|
|
3
|
-
# `changelog/<major.minor>.x/<version>.md` (e.g. `changelog/0.8.x/0.8.6.md`)
|
|
4
|
-
# to author a new release. Set that file's H1 to `# <version> — YYYY-MM-DD`
|
|
5
|
-
# with a concrete date.
|
|
6
|
-
|
|
7
|
-
# Required. One-line GitHub Release-style headline. 350 character cap.
|
|
8
|
-
# Default short and scannable. Don't pad, don't stitch unrelated changes with
|
|
9
|
-
# semicolons — pick the headline. Quotes required: unquoted YAML treats `: `
|
|
10
|
-
# inside the value as a key separator and fails GitHub's strict parser.
|
|
11
|
-
summary: ""
|
|
12
|
-
|
|
13
|
-
# Set `true` when consumers must change code to upgrade: API removals,
|
|
14
|
-
# signature changes, config renames, behavior changes that break existing
|
|
15
|
-
# usage. Flagged as `Breaking` in the rollup.
|
|
16
|
-
breaking: false
|
|
17
|
-
|
|
18
|
-
# Set `true` if this release contains any security fix. Pairs with the
|
|
19
|
-
# `## Security` section below. Flagged as `Security` in the rollup so
|
|
20
|
-
# users can triage upgrade urgency at a glance.
|
|
21
|
-
security: false
|
|
22
|
-
---
|
|
23
|
-
|
|
24
|
-
# <version> — YYYY-MM-DD
|
|
25
|
-
|
|
26
|
-
<!--
|
|
27
|
-
AUTHORING GUIDE — applies to the new per-version file you create from this
|
|
28
|
-
template.
|
|
29
|
-
|
|
30
|
-
Audience: someone scanning release notes to decide what affects them. Lead
|
|
31
|
-
each bullet with the symbol or concept name in **bold** so they can skip
|
|
32
|
-
what's irrelevant and zoom in on what's not.
|
|
33
|
-
|
|
34
|
-
Tone: terse, fact-dense, not verbose. Default to one sentence per bullet —
|
|
35
|
-
name the symbol, state what changed, stop. Use a second sentence only when
|
|
36
|
-
it carries weight. If a bullet feels long, it is.
|
|
37
|
-
|
|
38
|
-
Cut: mechanism walkthroughs (those belong in JSDoc, AGENTS.md, or the
|
|
39
|
-
relevant skill), ceremonial framings ("This release introduces…",
|
|
40
|
-
backwards-compat paragraphs), file-by-file test enumerations, internal
|
|
41
|
-
implementation notes. Prefer code/symbol names over English re-explanations.
|
|
42
|
-
|
|
43
|
-
Narrative intro: skip by default. Add one short sentence only when the
|
|
44
|
-
release theme genuinely needs framing the bullets can't carry.
|
|
45
|
-
|
|
46
|
-
Sections: Keep a Changelog order — Added, Changed, Deprecated, Removed,
|
|
47
|
-
Fixed, Security. Include only sections with entries; delete the rest
|
|
48
|
-
(including the commented-out scaffolding below). Don't ship empty headers.
|
|
49
|
-
|
|
50
|
-
Include: every distinct fact a reader needs to adopt or audit the release —
|
|
51
|
-
new exports, signatures, lint rule IDs, env vars, breaking changes, version
|
|
52
|
-
bumps on shipped skills. Nothing more.
|
|
53
|
-
|
|
54
|
-
Links: link issues, PRs, docs, or skills where they help a reader jump to
|
|
55
|
-
context. Once per item per entry — don't re-link the same issue in summary,
|
|
56
|
-
narrative, and bullet. Skip links for inline symbol names; code spans speak
|
|
57
|
-
for themselves.
|
|
58
|
-
|
|
59
|
-
Issue/PR URLs: use full URLs. GitHub's bare `#NN` auto-link only resolves
|
|
60
|
-
inside its own UI, not in npm reads or local editors.
|
|
61
|
-
|
|
62
|
-
[#38](https://github.com/cyanheads/mcp-ts-core/issues/38) ← issue
|
|
63
|
-
[#42](https://github.com/cyanheads/mcp-ts-core/pull/42) ← PR
|
|
64
|
-
|
|
65
|
-
Verify numbers exist before linking (`gh issue view NN`, `gh pr view NN`).
|
|
66
|
-
Never speculate on a future number — `#42` for an upcoming PR silently
|
|
67
|
-
resolves to whatever real item already owns 42, and timeline previews pull
|
|
68
|
-
in that unrelated item's metadata.
|
|
69
|
-
|
|
70
|
-
TAG ANNOTATIONS — the annotated tag body renders as the GitHub Release body
|
|
71
|
-
via `gh release create --notes-from-tag`. The tag is a derivative of this
|
|
72
|
-
changelog entry — a condensed, scannable version, not a copy. Format:
|
|
73
|
-
|
|
74
|
-
<theme — omit version number, GitHub prepends it>
|
|
75
|
-
← blank line
|
|
76
|
-
<1-2 sentence context: what this release does>
|
|
77
|
-
← blank line
|
|
78
|
-
Dependency bumps: ← section header
|
|
79
|
-
← blank line
|
|
80
|
-
- `@cyanheads/mcp-ts-core` ^0.9.1 → ^0.9.6 ← bullet
|
|
81
|
-
← blank line
|
|
82
|
-
Changed: ← only sections with entries
|
|
83
|
-
← blank line
|
|
84
|
-
- `format()` output includes `query` in text mode
|
|
85
|
-
← blank line
|
|
86
|
-
Added:
|
|
87
|
-
← blank line
|
|
88
|
-
- `manifest.json` scaffolded for MCPB bundle support
|
|
89
|
-
- Install badges (Claude Desktop, Cursor, VS Code)
|
|
90
|
-
← blank line
|
|
91
|
-
<N> tests pass; `bun run devcheck` clean. ← footer
|
|
92
|
-
|
|
93
|
-
Never a flat comma-separated string. Always structured markdown with
|
|
94
|
-
sections. The tag must scan well as a rendered GitHub Release page.
|
|
95
|
-
-->
|
|
96
|
-
|
|
97
|
-
## Added
|
|
98
|
-
|
|
99
|
-
-
|
|
100
|
-
|
|
101
|
-
## Changed
|
|
102
|
-
|
|
103
|
-
-
|
|
104
|
-
|
|
105
|
-
<!-- ## Deprecated
|
|
106
|
-
|
|
107
|
-
- -->
|
|
108
|
-
|
|
109
|
-
<!-- ## Removed
|
|
110
|
-
|
|
111
|
-
- -->
|
|
112
|
-
|
|
113
|
-
## Fixed
|
|
114
|
-
|
|
115
|
-
-
|
|
116
|
-
|
|
117
|
-
<!-- ## Security
|
|
118
|
-
|
|
119
|
-
- -->
|