You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Finishes the toolchain swap started with the 1.3.9 release. The manifest now
declares manifest_version 0.4 — the schema marks dxt_version as deprecated —
and the build emits .mcpb only.
- scripts/build-dxt.sh -> scripts/build-mcpb.sh, npm run build:dxt ->
build:mcpb
- README and CLAUDE.md describe the bundle rather than the Desktop Extension,
including why it must be packed from the staging copy: packing the working
tree bundles every devDependency (~290 packages, 81 MB unpacked)
- .gitignore covers *.mcpb alongside the legacy *.dxt
The v1.3.9 release keeps both files attached, as a one-off, so anyone on a
Claude Desktop build predating the rename is not stranded by a security
release. Later releases carry .mcpb only, and the README says so.
Verified: manifest validates against mcpb 2.1.2, and the rebuilt bundle
unpacks and answers initialize outside the repository.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: CHANGELOG.md
+1Lines changed: 1 addition & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -12,6 +12,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
12
12
- The bundle no longer ships devDependencies. It was packed from the working tree, so it carried vitest, TypeScript, ESLint and the packer itself: ~290 packages, 81 MB unpacked. It is now packed from a staging copy with production dependencies only — 116 packages, 3.7 MB. An extension that reaches SSH credentials should not carry a test runner around.
13
13
-`manifest.json` was on 1.0.4 while the package was on 1.3.9, so a bundle could not be matched to a release. The versions are now kept in step, and the build fails if they drift.
14
14
- The publish workflow no longer fails when a release is created for a version that was already published by hand; it checks npm first and skips.
15
+
- The manifest now declares `manifest_version: "0.4"`; `dxt_version` is deprecated in the schema. The build script is `scripts/build-mcpb.sh` (`npm run build:mcpb`) and emits `.mcpb` only — v1.3.9 carries both extensions as a one-off so users on older Claude Desktop builds are not stranded.
15
16
-**Ported to TypeScript.** The single self-contained `server.mjs` is now seven typed modules under `src/`, compiled to `dist/` by `tsc`: `server.ts` (MCP wiring and `main()`), `tools.ts` (tool schemas and dispatch), `ssh-client.ts`, `ssh-config-parser.ts`, `config-values.ts`, `platform.ts` (everything with module-load side effects) and `types.ts`. `bin/mcp-ssh.js` and the DXT package load `dist/server.js`; `dist/` is generated, not tracked in git, and built by the `prepare` script on install.
16
17
-`tsconfig.json` runs `strict` plus `noUncheckedIndexedAccess`, `exactOptionalPropertyTypes`, `noImplicitOverride`, `noFallthroughCasesInSwitch`, `noPropertyAccessFromIndexSignature` and `verbatimModuleSyntax`. Test files are checked under a lighter config (`tsconfig.test.json`).
17
18
- Added ESLint with `typescript-eslint` type-aware rules (`strictTypeChecked` + `stylisticTypeChecked`). Relaxations are documented in place; notably `prefer-nullish-coalescing` exempts strings and numbers, because `??` is *not* equivalent to `||` for a stripped launcher environment (an empty `%ProgramData%` must fall through, see #10) or for `timeout || DEFAULT`.
The project supports Desktop Extensions (.dxt) for easy installation in Claude Desktop:
197
+
The project ships an installable bundle for Claude Desktop:
198
198
199
-
-`manifest.json` - DXT package manifest with server configuration
200
-
-`scripts/build-dxt.sh` - Build script that creates .dxt packages in `build/` directory
201
-
-`.dxt` files are ZIP archives containing the manifest and server files
199
+
-`manifest.json` - Bundle manifest. Uses `manifest_version` (the older `dxt_version` is deprecated in the schema), and its `version` must match `package.json` — the build fails on drift
200
+
-`scripts/build-mcpb.sh` - Build script that writes `build/mcp-ssh-<version>.mcpb`
201
+
-`.mcpb` files are ZIP archives containing the manifest, `dist/`, `bin/` and production `node_modules`
202
+
-**Pack from the staging copy, never the working tree.** Packing the tree directly bundles every devDependency (~290 packages, 81 MB unpacked). An extension that reaches SSH credentials should not carry a test runner
203
+
- The format was renamed from Desktop Extension (`.dxt`); `@anthropic-ai/dxt` is deprecated in favour of `@anthropic-ai/mcpb`
202
204
- Built packages are excluded from git via `.gitignore` but can be uploaded to GitHub releases
203
205
204
206
## Threat Model
@@ -217,4 +219,4 @@ The LLM driving this MCP server is **not trusted** — its tool arguments can be
217
219
- Production code is TypeScript in `src/`, compiled to `dist/`. Never edit `dist/` — it is regenerated on every build.
0 commit comments