@cyanheads/nws-weather-mcp-server 0.5.10 → 0.5.12

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,7 +1,7 @@
1
1
  # Agent Protocol
2
2
 
3
3
  **Server:** nws-weather-mcp-server
4
- **Version:** 0.5.10
4
+ **Version:** 0.5.12
5
5
  **Framework:** [@cyanheads/mcp-ts-core](https://www.npmjs.com/package/@cyanheads/mcp-ts-core)
6
6
 
7
7
  > **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.
@@ -65,6 +65,7 @@ Tailor suggestions to what's actually missing or stale — don't recite the full
65
65
  - **Use `ctx.state`** for tenant-scoped storage. Never access persistence directly.
66
66
  - **Check `ctx.elicit` / `ctx.sample`** for presence before calling.
67
67
  - **Secrets in env vars only** — never hardcoded.
68
+ - **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.
68
69
 
69
70
  ---
70
71
 
@@ -277,11 +278,15 @@ Available skills:
277
278
  | `report-issue-framework` | File a bug or feature request against `@cyanheads/mcp-ts-core` via `gh` CLI |
278
279
  | `report-issue-local` | File a bug or feature request against this server's own repo via `gh` CLI |
279
280
  | `tool-defs-analysis` | Read-only audit of tool/resource/prompt language: voice, leaks, defaults, recovery hints, sparsity |
281
+ | `code-simplifier` | Post-session cleanup against `git diff` — modernize syntax, consolidate duplication, align with the codebase |
282
+ | `git-wrapup` | Land working-tree changes as a versioned commit + annotated tag — version bump, changelog, verify, tag. Local only. |
283
+ | `release-and-publish` | Push + npm + MCP Registry + GH Release + Docker. Picks up from `git-wrapup` |
280
284
  | `api-auth` | Auth modes, scopes, JWT/OAuth |
281
285
  | `api-canvas` | DataCanvas: register tabular data, run SQL, export, plus the `spillover()` helper for big result sets — Tier 3 opt-in |
282
286
  | `api-config` | AppConfig, parseConfig, env vars |
283
287
  | `api-context` | Context interface, logger, state, progress |
284
288
  | `api-errors` | McpError, JsonRpcErrorCode, error patterns |
289
+ | `api-linter` | Definition linter rule catalog — invoked by `bun run lint:mcp` and `devcheck` |
285
290
  | `api-services` | LLM, Speech, Graph services |
286
291
  | `api-telemetry` | OTel catalog: spans, metrics, completion logs, env config, cardinality rules |
287
292
  | `api-testing` | createMockContext, test patterns |
@@ -304,12 +309,38 @@ When you complete a skill's checklist, check the boxes and add a completion time
304
309
  | `bun run tree` | Generate directory structure doc |
305
310
  | `bun run format` | Auto-fix formatting |
306
311
  | `bun run lint:mcp` | Validate MCP tool/resource definitions |
312
+ | `bun run changelog:build` | Regenerate `CHANGELOG.md` from `changelog/*.md` source files |
313
+ | `bun run changelog:check` | Verify `CHANGELOG.md` is in sync with `changelog/*.md` (run by devcheck) |
307
314
  | `bun run test` | Run tests |
308
315
  | `bun run start:stdio` | Production mode (stdio) |
309
316
  | `bun run start:http` | Production mode (HTTP) |
310
317
 
311
318
  ---
312
319
 
320
+ ## Bundling
321
+
322
+ `bun run bundle` produces a `.mcpb` extension bundle for one-click install in Claude Desktop. MCPB is stdio-only — HTTP deployments are unaffected.
323
+
324
+ **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.
325
+
326
+ **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:
327
+
328
+ | Client | Mechanism |
329
+ |:-------|:----------|
330
+ | Claude Desktop | Browser downloads the `.mcpb` from the latest GitHub Release; OS file handler routes it to Claude Desktop. |
331
+ | Cursor | Official `https://cursor.com/en/install-mcp` endpoint with base64 JSON config. |
332
+ | 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. |
333
+
334
+ ```bash
335
+ # Cursor: base64-encoded JSON
336
+ echo -n '{"command":"npx -y <PACKAGE_NAME>"}' | base64
337
+
338
+ # VS Code: URL-encoded JSON
339
+ node -p 'encodeURIComponent(JSON.stringify({name:"<PACKAGE_NAME>",command:"npx",args:["-y","<PACKAGE_NAME>"]}))'
340
+ ```
341
+
342
+ ---
343
+
313
344
  ## Publishing
314
345
 
315
346
  After a version bump and final commit, publish to both npm and GHCR:
@@ -351,4 +382,7 @@ import { getNwsService } from '@/services/nws/nws-service.js';
351
382
  - [ ] NWS API wrap: tests include at least one sparse payload case with omitted upstream fields
352
383
  - [ ] Registered in `createApp()` arrays (directly or via barrel exports)
353
384
  - [ ] Tests use `createMockContext()` from `@cyanheads/mcp-ts-core/testing`
385
+ - [ ] `.codex-plugin/plugin.json` populated — `name`, `version`, `description`, `repository`, `license` from `package.json`; `interface.displayName` = package name; `interface.shortDescription` from `package.json` description
386
+ - [ ] `.codex-plugin/mcp.json` updated — server name key matches `package.json` name; env vars added for any required API keys
387
+ - [ ] `.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
354
388
  - [ ] `bun run devcheck` passes
package/README.md CHANGED
@@ -7,13 +7,13 @@
7
7
 
8
8
  <div align="center">
9
9
 
10
- [![Version](https://img.shields.io/badge/Version-0.5.10-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/nws-weather-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/nws-weather-mcp-server?style=flat-square&logo=npm&logoColor=white)](https://www.npmjs.com/package/@cyanheads/nws-weather-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+-blueviolet.svg?style=flat-square)](https://bun.sh/)
10
+ [![Version](https://img.shields.io/badge/Version-0.5.12-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/nws-weather-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/nws-weather-mcp-server?style=flat-square&logo=npm&logoColor=white)](https://www.npmjs.com/package/@cyanheads/nws-weather-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+-blueviolet.svg?style=flat-square)](https://bun.sh/)
11
11
 
12
12
  </div>
13
13
 
14
14
  <div align="center">
15
15
 
16
- [![Install in Cursor](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/en/install-mcp?name=nws-weather-mcp-server&config=eyJjb21tYW5kIjoibnB4IC15IEBjeWFuaGVhZHMvbndzLXdlYXRoZXItbWNwLXNlcnZlciJ9) [![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%22nws-weather-mcp-server%22%2C%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22%40cyanheads/nws-weather-mcp-server%22%5D%7D)
16
+ [![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/nws-weather-mcp-server/releases/latest/download/nws-weather-mcp-server.mcpb) [![Install in Cursor](https://cursor.com/deeplink/mcp-install-dark.svg)](https://cursor.com/en/install-mcp?name=nws-weather-mcp-server&config=eyJjb21tYW5kIjoibnB4IiwiYXJncyI6WyIteSIsIkBjeWFuaGVhZHMvbndzLXdlYXRoZXItbWNwLXNlcnZlciJdfQ==) [![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%22nws-weather-mcp-server%22%2C%22command%22%3A%22npx%22%2C%22args%22%3A%5B%22-y%22%2C%22%40cyanheads/nws-weather-mcp-server%22%5D%7D)
17
17
 
18
18
  [![Framework](https://img.shields.io/badge/Built%20on-@cyanheads/mcp--ts--core-67E8F9?style=flat-square)](https://www.npmjs.com/package/@cyanheads/mcp-ts-core)
19
19
 
package/dist/index.js CHANGED
@@ -17,6 +17,8 @@ await createApp({
17
17
  ],
18
18
  resources: [alertTypesResource],
19
19
  instructions: 'Use the nws_* tools for real-time US weather data from the National Weather Service: forecasts, active alerts, current observations, and station discovery. Coverage is the 50 states, US territories, and adjacent marine areas; the API does not geocode, so resolve place names to latitude/longitude before calling.',
20
+ // Public catalog — serve the full landing page inventory regardless of auth mode.
21
+ landing: { requireAuth: false },
20
22
  setup() {
21
23
  initNwsService();
22
24
  },
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,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,6CAA6C,CAAC;AACjF,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D,MAAM,SAAS,CAAC;IACd,KAAK,EAAE;QACL,eAAe;QACf,gBAAgB;QAChB,mBAAmB;QACnB,gBAAgB;QAChB,kBAAkB;KACnB;IACD,SAAS,EAAE,CAAC,kBAAkB,CAAC;IAC/B,YAAY,EACV,0TAA0T;IAC5T,KAAK;QACH,cAAc,EAAE,CAAC;IACnB,CAAC;CACF,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,6CAA6C,CAAC;AACjF,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,mBAAmB,EACnB,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,yCAAyC,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D,MAAM,SAAS,CAAC;IACd,KAAK,EAAE;QACL,eAAe;QACf,gBAAgB;QAChB,mBAAmB;QACnB,gBAAgB;QAChB,kBAAkB;KACnB;IACD,SAAS,EAAE,CAAC,kBAAkB,CAAC;IAC/B,YAAY,EACV,0TAA0T;IAC5T,kFAAkF;IAClF,OAAO,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE;IAC/B,KAAK;QACH,cAAc,EAAE,CAAC;IACnB,CAAC;CACF,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cyanheads/nws-weather-mcp-server",
3
- "version": "0.5.10",
3
+ "version": "0.5.12",
4
4
  "description": "Get US weather forecasts, active alerts, and current observations via the National Weather Service API. STDIO or Streamable HTTP.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -18,12 +18,15 @@
18
18
  "format": "biome check --write --unsafe .",
19
19
  "lint:mcp": "bun scripts/lint-mcp.ts",
20
20
  "lint:packaging": "bun scripts/lint-packaging.ts",
21
+ "changelog:build": "bun scripts/build-changelog.ts",
22
+ "changelog:check": "bun scripts/build-changelog.ts --check",
21
23
  "audit:refresh": "rm -f bun.lock && bun install && bun audit",
22
24
  "test": "vitest run",
23
25
  "list-skills": "bun scripts/list-skills.ts",
24
26
  "start": "node dist/index.js",
25
27
  "start:stdio": "MCP_TRANSPORT_TYPE=stdio node dist/index.js",
26
28
  "start:http": "MCP_TRANSPORT_TYPE=http node dist/index.js",
29
+ "bundle": "bun run build && npx -y @anthropic-ai/mcpb pack . dist/nws-weather-mcp-server.mcpb",
27
30
  "publish-mcp": "mcp-publisher login github -token \"$(security find-generic-password -a \"$USER\" -s mcp-publisher-github-pat -w)\" && mcp-publisher publish"
28
31
  },
29
32
  "mcpName": "io.github.cyanheads/nws-weather-mcp-server",
@@ -37,7 +40,10 @@
37
40
  "forecast",
38
41
  "alerts",
39
42
  "observations",
40
- "typescript"
43
+ "typescript",
44
+ "bun",
45
+ "stdio",
46
+ "streamable-http"
41
47
  ],
42
48
  "repository": {
43
49
  "type": "git",
@@ -68,13 +74,13 @@
68
74
  "access": "public"
69
75
  },
70
76
  "dependencies": {
71
- "@cyanheads/mcp-ts-core": "^0.9.4",
77
+ "@cyanheads/mcp-ts-core": "^0.9.13",
72
78
  "@opentelemetry/api": "^1.9.1",
73
79
  "pino-pretty": "^13.1.3",
74
80
  "zod": "^4.4.3"
75
81
  },
76
82
  "devDependencies": {
77
- "@biomejs/biome": "^2.4.15",
83
+ "@biomejs/biome": "^2.4.16",
78
84
  "@types/node": "^25.9.1",
79
85
  "@vitest/coverage-istanbul": "^4.1.7",
80
86
  "depcheck": "^1.4.7",
package/server.json CHANGED
@@ -6,7 +6,7 @@
6
6
  "url": "https://github.com/cyanheads/nws-weather-mcp-server",
7
7
  "source": "github"
8
8
  },
9
- "version": "0.5.10",
9
+ "version": "0.5.12",
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/nws-weather-mcp-server",
21
21
  "runtimeHint": "bun",
22
- "version": "0.5.10",
22
+ "version": "0.5.12",
23
23
  "packageArguments": [
24
24
  { "type": "positional", "value": "run" },
25
25
  { "type": "positional", "value": "start:stdio" }
@@ -49,7 +49,7 @@
49
49
  "registryBaseUrl": "https://registry.npmjs.org",
50
50
  "identifier": "@cyanheads/nws-weather-mcp-server",
51
51
  "runtimeHint": "bun",
52
- "version": "0.5.10",
52
+ "version": "0.5.12",
53
53
  "packageArguments": [
54
54
  { "type": "positional", "value": "run" },
55
55
  { "type": "positional", "value": "start:http" }