@cyanheads/who-gho-mcp-server 0.1.8 → 0.1.9

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/who-gho-mcp-server
4
- **Version:** 0.1.8
5
- **Framework:** [@cyanheads/mcp-ts-core](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) `^0.9.9`
4
+ **Version:** 0.1.9
5
+ **Framework:** [@cyanheads/mcp-ts-core](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) `^0.9.13`
6
6
  **Engines:** Bun ≥1.3.2, 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,7 +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 before moving on. The comment is for future readers — state the concrete changes, not the conversation that produced them.
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.
39
39
 
40
40
  ---
41
41
 
@@ -137,6 +137,10 @@ export function getServerConfig() {
137
137
 
138
138
  `parseEnvConfig` maps Zod schema paths → env var names so errors name the variable (`MY_API_KEY`) not the path (`apiKey`). Throws `ConfigurationError`, which the framework prints as a clean startup banner.
139
139
 
140
+ ### Server instructions
141
+
142
+ `createApp({ instructions })` — optional server-level orientation, sent to clients on every `initialize` as session-level context. Use it for deployment guidance (connection aliases, regional notes, scope hints) instead of repeating the same context across tool descriptions. Client adoption is uneven, but there's no downside when set.
143
+
140
144
  ---
141
145
 
142
146
  ## Context
@@ -163,6 +167,8 @@ Handlers throw — the framework catches, classifies, and formats.
163
167
  **Recommended: typed error contract.** Declare `errors: [{ reason, code, when, recovery, retryable? }]` on `tool()` / `resource()` to receive `ctx.fail(reason, …)` typed against the reason union. TypeScript catches typos at compile time, `data.reason` is auto-populated for observability, linter enforces conformance against the handler body. `recovery` is required descriptive metadata for the agent's next move (≥ 5 words, lint-validated); for the wire `data.recovery.hint` (mirrored into `content[]` text), pass explicitly at the throw site when dynamic context matters: `ctx.fail('reason', msg, { recovery: { hint: '...' } })`. Baseline codes (`InternalError`, `ServiceUnavailable`, `Timeout`, `ValidationError`, `SerializationError`) bubble freely and don't need declaring.
164
168
 
165
169
  ```ts
170
+ import { JsonRpcErrorCode } from '@cyanheads/mcp-ts-core/errors';
171
+
166
172
  errors: [
167
173
  { reason: 'no_match', code: JsonRpcErrorCode.NotFound,
168
174
  when: 'No item matched the query',
@@ -250,13 +256,14 @@ Available skills:
250
256
  | `add-service` | Scaffold a new service integration |
251
257
  | `add-test` | Scaffold test file for a tool, resource, or service |
252
258
  | `field-test` | Exercise tools/resources/prompts with real inputs, verify behavior, report issues |
253
- | `tool-defs-analysis` | Read-only audit of definition language: voice, leaks, defaults, recovery hints, examples |
259
+ | `tool-defs-analysis` | Read-only audit of MCP definition language across the surface — voice, leaks, defaults, recovery hints, output descriptions |
254
260
  | `security-pass` | Audit server for MCP-flavored security gaps: output injection, scope blast radius, input sinks, tenant isolation |
261
+ | `code-simplifier` | Post-session cleanup against `git diff` — modernize syntax, consolidate duplication, align with the codebase |
255
262
  | `devcheck` | Lint, format, typecheck, audit |
256
263
  | `polish-docs-meta` | Finalize docs, README, metadata, and agent protocol for shipping |
257
- | `maintenance` | Investigate changelogs, adopt upstream changes, and sync skills after `bun update --latest` |
258
- | `git-wrapup` | Version bump, changelog entry, commit, and annotated tag — the pre-release wrapup workflow |
259
- | `release-and-publish` | Ship a release: verification gate, push commits+tags, publish to npm / MCP Registry / GHCR / `.mcpb` bundle on GitHub Releases |
264
+ | `maintenance` | Investigate changelogs, adopt upstream changes, sync skills to agent dirs |
265
+ | `git-wrapup` | Land working-tree changes as a versioned commit + annotated tag — version bump, changelog, verify, tag. Local only. |
266
+ | `release-and-publish` | Push + npm + MCP Registry + GH Release + Docker. Picks up from `git-wrapup` |
260
267
  | `report-issue-framework` | File bug/feature request against @cyanheads/mcp-ts-core |
261
268
  | `report-issue-local` | File bug/feature request against this server's repo |
262
269
  | `api-auth` | Auth modes, scopes, JWT/OAuth |
@@ -264,7 +271,7 @@ Available skills:
264
271
  | `api-config` | AppConfig, parseConfig, env vars |
265
272
  | `api-context` | Context interface, logger, state, progress |
266
273
  | `api-errors` | McpError, JsonRpcErrorCode, error patterns |
267
- | `api-linter` | Definition lint rules reference (`format-parity`, `schema-*`, `server-json-*`, …) |
274
+ | `api-linter` | Definition linter rule catalog — invoked by `bun run lint:mcp` and `devcheck` |
268
275
  | `api-services` | LLM, Speech, Graph services |
269
276
  | `api-telemetry` | OTel catalog: spans, metrics, completion logs, env config, cardinality rules |
270
277
  | `api-testing` | createMockContext, test patterns |
@@ -372,4 +379,7 @@ import { getMyService } from '@/services/my-domain/my-service.js';
372
379
  - [ ] If wrapping external API: tests include at least one sparse payload case with omitted upstream fields
373
380
  - [ ] Registered in `createApp()` arrays (directly or via barrel exports)
374
381
  - [ ] Tests use `createMockContext()` from `@cyanheads/mcp-ts-core/testing`
382
+ - [ ] `.codex-plugin/plugin.json` populated — `name`, `version`, `description`, `repository`, `license` from `package.json`; `interface.displayName` = package name; `interface.shortDescription` from `package.json` description
383
+ - [ ] `.codex-plugin/mcp.json` updated — server name key matches `package.json` name; env vars added for any required API keys
384
+ - [ ] `.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
375
385
  - [ ] `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.1.8-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.9-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,6 +1,6 @@
1
1
  {
2
2
  "name": "@cyanheads/who-gho-mcp-server",
3
- "version": "0.1.8",
3
+ "version": "0.1.9",
4
4
  "mcpName": "io.github.cyanheads/who-gho-mcp-server",
5
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",
@@ -75,12 +75,12 @@
75
75
  "access": "public"
76
76
  },
77
77
  "dependencies": {
78
- "@cyanheads/mcp-ts-core": "^0.9.9",
78
+ "@cyanheads/mcp-ts-core": "^0.9.13",
79
79
  "pino-pretty": "^13.1.3",
80
80
  "zod": "^4.4.3"
81
81
  },
82
82
  "devDependencies": {
83
- "@biomejs/biome": "^2.4.15",
83
+ "@biomejs/biome": "^2.4.16",
84
84
  "@types/node": "^25.9.1",
85
85
  "depcheck": "^1.4.7",
86
86
  "ignore": "^7.0.5",
package/server.json CHANGED
@@ -12,14 +12,14 @@
12
12
  "url": "https://who-gho.caseyjhand.com/mcp"
13
13
  }
14
14
  ],
15
- "version": "0.1.8",
15
+ "version": "0.1.9",
16
16
  "packages": [
17
17
  {
18
18
  "registryType": "npm",
19
19
  "registryBaseUrl": "https://registry.npmjs.org",
20
20
  "identifier": "@cyanheads/who-gho-mcp-server",
21
21
  "runtimeHint": "bun",
22
- "version": "0.1.8",
22
+ "version": "0.1.9",
23
23
  "packageArguments": [
24
24
  {
25
25
  "type": "positional",
@@ -48,7 +48,7 @@
48
48
  "registryBaseUrl": "https://registry.npmjs.org",
49
49
  "identifier": "@cyanheads/who-gho-mcp-server",
50
50
  "runtimeHint": "bun",
51
- "version": "0.1.8",
51
+ "version": "0.1.9",
52
52
  "packageArguments": [
53
53
  {
54
54
  "type": "positional",