@cyanheads/who-gho-mcp-server 0.1.3 → 0.1.5

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,11 +1,9 @@
1
- # Developer Protocol
1
+ # Agent Protocol
2
2
 
3
- **Server:** who-gho-mcp-server
4
- **Version:** 0.1.3
3
+ **Server:** @cyanheads/who-gho-mcp-server
4
+ **Version:** 0.1.5
5
5
  **Framework:** [@cyanheads/mcp-ts-core](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) `^0.9.7`
6
- **Engines:** Bun ≥1.3.0, Node ≥24.0.0
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 next or needs direction, suggest options based on the current project state. Common next steps:
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
@@ -251,21 +249,24 @@ 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 to agent dirs |
258
- | `report-issue-framework` | File a bug or feature request against `@cyanheads/mcp-ts-core` via `gh` CLI |
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 |
258
+ | `report-issue-framework` | File bug/feature request against @cyanheads/mcp-ts-core |
259
+ | `report-issue-local` | File bug/feature request against this server's repo |
260
260
  | `api-auth` | Auth modes, scopes, JWT/OAuth |
261
261
  | `api-canvas` | DataCanvas: register tabular data, run SQL, export, plus the `spillover()` helper for big result sets — Tier 3 opt-in |
262
262
  | `api-config` | AppConfig, parseConfig, env vars |
263
263
  | `api-context` | Context interface, logger, state, progress |
264
264
  | `api-errors` | McpError, JsonRpcErrorCode, error patterns |
265
+ | `api-linter` | Definition lint rules reference (`format-parity`, `schema-*`, `server-json-*`, …) |
265
266
  | `api-services` | LLM, Speech, Graph services |
267
+ | `api-telemetry` | OTel catalog: spans, metrics, completion logs, env config, cardinality rules |
266
268
  | `api-testing` | createMockContext, test patterns |
267
269
  | `api-utils` | Formatting, parsing, security, pagination, scheduling, telemetry helpers |
268
- | `api-telemetry` | OTel catalog: spans, metrics, completion logs, env config, cardinality rules |
269
270
  | `api-workers` | Cloudflare Workers runtime |
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`).
@@ -274,72 +275,53 @@ 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
- | `npm run build` | Compile TypeScript |
282
- | `npm run rebuild` | Clean + build |
283
- | `npm run clean` | Remove build artifacts |
284
- | `npm run devcheck` | Lint + format + typecheck + security + changelog sync |
285
- | `bun run audit:refresh` | Delete `bun.lock`, reinstall, re-audit. Use when `devcheck` flags a transitive advisory — stale lockfile can mask already-patched deps. If advisory survives, it's real. |
286
- | `npm run tree` | Generate directory structure doc |
287
- | `npm run format` | Auto-fix formatting |
288
- | `npm test` | Run tests |
289
- | `npm run start:stdio` | Production mode (stdio) |
290
- | `npm run start:http` | Production mode (HTTP) |
291
- | `npm run changelog:build` | Regenerate `CHANGELOG.md` from `changelog/*.md` |
292
- | `npm run changelog:check` | Verify `CHANGELOG.md` is in sync (used by devcheck) |
293
- | `npm run bundle` | Build and pack as `.mcpb` for one-click Claude Desktop install |
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/who-gho-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
- `npm run bundle` produces a `.mcpb` extension bundle for one-click install in Claude Desktop. MCPB is stdio-only — HTTP and Cloudflare Workers deployments are unaffected. Consumers who don't need it can delete `manifest.json` and `.mcpbignore`; `lint:packaging` skips cleanly.
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.
299
+ `bun run bundle` produces `dist/who-gho-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/who-gho-mcp-server.mcpb` URL that powers the README install badge.
304
300
 
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. |
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.
311
302
 
312
- ```markdown
313
- [![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/<OWNER>/<REPO>/releases/latest/download/<PACKAGE_NAME>.mcpb)
314
- [![Install in Cursor](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/en/install-mcp?name=<PACKAGE_NAME>&config=<BASE64_CONFIG>)
315
- [![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?<URLENCODED_JSON>)
316
- ```
303
+ ---
317
304
 
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.
305
+ ## Publishing
319
306
 
320
- Generate the encoded configs (replace `<PACKAGE_NAME>` and add env vars for any required API keys):
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:
321
308
 
322
309
  ```bash
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
- ```
310
+ bun publish --access public
333
311
 
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`.
312
+ docker buildx build --platform linux/amd64,linux/arm64 \
313
+ -t ghcr.io/cyanheads/who-gho-mcp-server:<version> \
314
+ -t ghcr.io/cyanheads/who-gho-mcp-server:latest \
315
+ --push .
335
316
 
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.
317
+ mcp-publisher publish
318
+ ```
337
319
 
338
320
  ---
339
321
 
340
322
  ## Changelog
341
323
 
342
- Directory-based, grouped by minor series via the `.x` semver-wildcard convention. Source of truth: `changelog/<major.minor>.x/<version>.md` (e.g. `changelog/0.1.x/0.1.0.md`) — one file per release, shipped in the npm package. At release, author the per-version file with a concrete version and date, then run `npm run changelog:build` to regenerate the rollup. `changelog/template.md` is a **pristine format reference** — never edited or moved; read it for the frontmatter + section layout when scaffolding. `CHANGELOG.md` is a **navigation index** (header + link + summary per version), regenerated by `npm run changelog:build` — devcheck hard-fails on drift; never hand-edit it.
324
+ Directory-based, grouped by minor series via the `.x` semver-wildcard convention. Source of truth: `changelog/<major.minor>.x/<version>.md` (e.g. `changelog/0.1.x/0.1.0.md`) — one file per release, shipped in the npm package. At release, author the per-version file with a concrete version and date, then run `bun run changelog:build` to regenerate the rollup. `changelog/template.md` is a **pristine format reference** — never edited or moved; read it for the frontmatter + section layout when scaffolding. `CHANGELOG.md` is a **navigation index** (header + link + summary per version), regenerated by `bun run changelog:build` — devcheck hard-fails on drift; never hand-edit it.
343
325
 
344
326
  Each per-version file opens with YAML frontmatter:
345
327
 
@@ -388,4 +370,4 @@ import { getMyService } from '@/services/my-domain/my-service.js';
388
370
  - [ ] If wrapping external API: tests include at least one sparse payload case with omitted upstream fields
389
371
  - [ ] Registered in `createApp()` arrays (directly or via barrel exports)
390
372
  - [ ] Tests use `createMockContext()` from `@cyanheads/mcp-ts-core/testing`
391
- - [ ] `npm run devcheck` passes
373
+ - [ ] `bun run devcheck` passes
package/Dockerfile CHANGED
@@ -1,8 +1,5 @@
1
1
  # ==============================================================================
2
2
  # Build Stage
3
- #
4
- # This stage installs all dependencies (including dev), builds the TypeScript
5
- # source code into JavaScript, and prepares the production assets.
6
3
  # ==============================================================================
7
4
  FROM oven/bun:1.3 AS build
8
5
 
@@ -38,7 +35,7 @@ ENV NODE_ENV=production
38
35
 
39
36
  # OCI image metadata (https://github.com/opencontainers/image-spec/blob/main/annotations.md)
40
37
  LABEL org.opencontainers.image.title="@cyanheads/who-gho-mcp-server"
41
- LABEL org.opencontainers.image.description="MCP server for the WHO Global Health Observatory — 3,059 global health indicators across 194 member states with country, region, year, and sex filters."
38
+ LABEL org.opencontainers.image.description="Query WHO Global Health Observatory data — 3,059 indicators across 194 member states with country, region, year, and sex filters via MCP. STDIO or Streamable HTTP."
42
39
  LABEL org.opencontainers.image.licenses="Apache-2.0"
43
40
  LABEL org.opencontainers.image.source="https://github.com/cyanheads/who-gho-mcp-server"
44
41
 
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.1.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/who-gho-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/who-gho-mcp-server?style=flat-square&logo=npm&logoColor=white)](https://www.npmjs.com/package/@cyanheads/who-gho-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.2-blueviolet.svg?style=flat-square)](https://bun.sh/)
10
+ [![Version](https://img.shields.io/badge/Version-0.1.5-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/who-gho-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/who-gho-mcp-server?style=flat-square&logo=npm&logoColor=white)](https://www.npmjs.com/package/@cyanheads/who-gho-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.2-blueviolet.svg?style=flat-square)](https://bun.sh/)
11
11
 
12
12
  </div>
13
13
 
package/package.json CHANGED
@@ -1,42 +1,33 @@
1
1
  {
2
2
  "name": "@cyanheads/who-gho-mcp-server",
3
- "version": "0.1.3",
3
+ "version": "0.1.5",
4
4
  "mcpName": "io.github.cyanheads/who-gho-mcp-server",
5
- "description": "MCP server for the WHO Global Health Observatory — 3,059 global health indicators across 194 member states with country, region, year, and sex filters.",
5
+ "description": "Query WHO Global Health Observatory data — 3,059 indicators across 194 member states with country, region, year, and sex filters via MCP. STDIO or Streamable HTTP.",
6
6
  "type": "module",
7
7
  "main": "dist/index.js",
8
8
  "types": "dist/index.d.ts",
9
9
  "bin": {
10
10
  "who-gho-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": "tsx scripts/build.ts",
24
- "rebuild": "tsx scripts/clean.ts && tsx scripts/build.ts",
25
- "clean": "tsx scripts/clean.ts",
26
- "devcheck": "tsx scripts/devcheck.ts",
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
- "tree": "tsx scripts/tree.ts",
29
- "list-skills": "tsx scripts/list-skills.ts",
30
- "format": "biome check --write --unsafe .",
31
- "lint:mcp": "tsx scripts/lint-mcp.ts",
32
- "lint:packaging": "tsx scripts/lint-packaging.ts",
33
- "bundle": "npm run build && npx -y @anthropic-ai/mcpb pack . dist/who-gho-mcp-server.mcpb",
34
- "changelog:build": "tsx scripts/build-changelog.ts",
35
- "changelog:check": "tsx scripts/build-changelog.ts --check",
36
- "test": "vitest run",
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"
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/who-gho-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"
40
31
  },
41
32
  "keywords": [
42
33
  "mcp",
@@ -94,7 +85,6 @@
94
85
  "depcheck": "^1.4.7",
95
86
  "ignore": "^7.0.5",
96
87
  "tsc-alias": "^1.8.17",
97
- "tsx": "^4.22.3",
98
88
  "typescript": "^6.0.3",
99
89
  "vitest": "^4.1.7"
100
90
  }
package/server.json CHANGED
@@ -1,19 +1,19 @@
1
1
  {
2
2
  "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
3
3
  "name": "io.github.cyanheads/who-gho-mcp-server",
4
- "description": "WHO Global Health Observatory MCP server — 3,059 health indicators across 194 member states.",
4
+ "description": "WHO Global Health Observatory — 3,059 indicators across 194 member states.",
5
5
  "repository": {
6
6
  "url": "https://github.com/cyanheads/who-gho-mcp-server",
7
7
  "source": "github"
8
8
  },
9
- "version": "0.1.3",
9
+ "version": "0.1.5",
10
10
  "packages": [
11
11
  {
12
12
  "registryType": "npm",
13
13
  "registryBaseUrl": "https://registry.npmjs.org",
14
14
  "identifier": "@cyanheads/who-gho-mcp-server",
15
15
  "runtimeHint": "bun",
16
- "version": "0.1.3",
16
+ "version": "0.1.5",
17
17
  "packageArguments": [
18
18
  {
19
19
  "type": "positional",
@@ -42,7 +42,7 @@
42
42
  "registryBaseUrl": "https://registry.npmjs.org",
43
43
  "identifier": "@cyanheads/who-gho-mcp-server",
44
44
  "runtimeHint": "bun",
45
- "version": "0.1.3",
45
+ "version": "0.1.5",
46
46
  "packageArguments": [
47
47
  {
48
48
  "type": "positional",
@@ -1,20 +0,0 @@
1
- ---
2
- summary: "Initial release — WHO GHO MCP server with 6 tools and 2 resources for the Global Health Observatory OData API"
3
- breaking: false
4
- security: false
5
- ---
6
-
7
- # 0.1.0 — 2026-05-23
8
-
9
- ## Added
10
-
11
- - **`who_search_indicators`** — keyword search across 3,059 GHO indicators by name substring.
12
- - **`who_list_indicators`** — paginated browse of the full indicator catalog.
13
- - **`who_get_indicator_metadata`** — batch dimension lookup for up to 10 indicator codes; strips `PUBLISHSTATE` internal dimension from output.
14
- - **`who_query_indicator_data`** — primary data tool; queries a single indicator with country/region/income-group/year/sex/dim1 filters via OData; raises `ambiguous_spatial_filter` when more than one spatial type is provided.
15
- - **`who_list_dimension_values`** — valid values for any GHO dimension type (COUNTRY, SEX, AGEGROUP, WORLDBANKINCOMEGROUP, etc.).
16
- - **`who_list_dimensions`** — full list of GHO dimension type codes and titles.
17
- - **`who://indicator/{indicatorCode}/metadata`** resource — indicator metadata by URI.
18
- - **`who://dimension/{dimensionCode}/values`** resource — dimension values by URI.
19
- - **`GhoService`** — OData API client with retry, timeout, HTML-error-page detection, and `PUBLISHSTATE` filtering.
20
- - **`GHO_BASE_URL`** / **`GHO_REQUEST_TIMEOUT_MS`** env vars for API URL override and request timeout.
@@ -1,23 +0,0 @@
1
- ---
2
- summary: "Initial public release — WHO GHO MCP server, 6 tools and 2 resources for 3,059 Global Health Observatory indicators across 194 member states"
3
- breaking: false
4
- security: false
5
- ---
6
-
7
- # 0.1.1 — 2026-05-23
8
-
9
- First npm-published release. Packages the full WHO Global Health Observatory integration: OData API client, tool and resource surface, install badges, and bundling support.
10
-
11
- ## Added
12
-
13
- - **`who_search_indicators`** — keyword search across 3,059 GHO indicators by name substring.
14
- - **`who_list_indicators`** — paginated browse of the full indicator catalog.
15
- - **`who_get_indicator_metadata`** — batch dimension lookup for up to 10 indicator codes; strips `PUBLISHSTATE` internal dimension from output.
16
- - **`who_query_indicator_data`** — primary data tool; queries a single indicator with country/region/income-group/year/sex/dim1 filters via OData; raises `ambiguous_spatial_filter` when more than one spatial type is provided.
17
- - **`who_list_dimension_values`** — valid values for any GHO dimension type (COUNTRY, SEX, AGEGROUP, WORLDBANKINCOMEGROUP, etc.).
18
- - **`who_list_dimensions`** — full list of GHO dimension type codes and titles.
19
- - **`who://indicator/{indicatorCode}/metadata`** resource — indicator metadata by URI.
20
- - **`who://dimension/{dimensionCode}/values`** resource — dimension values by URI.
21
- - **`GhoService`** — OData API client with retry, timeout, HTML-error-page detection, and `PUBLISHSTATE` filtering.
22
- - **`GHO_BASE_URL`** / **`GHO_REQUEST_TIMEOUT_MS`** env vars for API URL override and request timeout.
23
- - `manifest.json` for MCPB bundle support; install badges for Claude Desktop, Cursor, and VS Code.
@@ -1,12 +0,0 @@
1
- ---
2
- summary: "Fix indicator name resolution and document region_codes aggregate behavior"
3
- breaking: false
4
- security: false
5
- ---
6
-
7
- # 0.1.2 — 2026-05-23
8
-
9
- ## Fixed
10
-
11
- - **`who_get_indicator_metadata`** / **`who://indicator/{code}/metadata`**: `indicatorName` now reflects the actual indicator name. `GhoService.listIndicators` accepts an `indicatorCode` param that applies an `IndicatorCode eq '...'` OData filter; both call sites updated to pass the code.
12
- - **`who_query_indicator_data`**: `region_codes` description now documents that region rows are aggregates, not per-country breakdowns, and how to retrieve country-level data instead.
@@ -1,20 +0,0 @@
1
- ---
2
- summary: "Tool description fixes and metadata sync to gold standard"
3
- breaking: false
4
- security: false
5
- ---
6
-
7
- # 0.1.3 — 2026-05-23
8
-
9
- ## Fixed
10
-
11
- - **`who_list_dimensions`**: description referred to "this endpoint" — changed to "this tool".
12
- - **`who_query_indicator_data`**: sex filter description replaced the internal `Dim1Type=SEX` implementation detail with behavior-facing wording. `dim1_value` description now includes a concrete example code (`YEARS05-14`).
13
-
14
- ## Changed
15
-
16
- - **`package.json`**: added `mcpName`, `bugs`, `homepage`, `author`, `funding`, `packageManager`; keywords expanded; `repository.url` corrected to `git+https://…git` form; `engines.bun` raised to `>=1.3.2`.
17
- - **`server.json`**: `name` changed to `io.github.cyanheads/who-gho-mcp-server`; `runtimeHint` corrected from `node` to `bun`.
18
- - **`manifest.json`**: `repository`, `homepage`, `license` fields added.
19
- - **`Dockerfile`**: OCI labels updated — title uses scoped package name, description filled in, `source` label added.
20
- - **`bunfig.toml`**: added (`[install]` and `[run]` config for Bun).
@@ -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
- - -->