ssh-mcp-pro 1.2.3 → 1.4.2
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/CHANGELOG.md +71 -0
- package/MIGRATION.md +2 -2
- package/README.md +34 -13
- package/SECURITY_DECISIONS.md +19 -0
- package/dist/agent-bin.js +5 -2
- package/dist/agent-bin.js.map +1 -1
- package/dist/cli.d.ts +1 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +38 -47
- package/dist/cli.js.map +1 -1
- package/dist/config-security-env.d.ts +4 -0
- package/dist/config-security-env.d.ts.map +1 -0
- package/dist/config-security-env.js +64 -0
- package/dist/config-security-env.js.map +1 -0
- package/dist/config-types.d.ts +82 -0
- package/dist/config-types.d.ts.map +1 -0
- package/dist/config-types.js +2 -0
- package/dist/config-types.js.map +1 -0
- package/dist/config.d.ts +3 -82
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +4 -67
- package/dist/config.js.map +1 -1
- package/dist/connector-profile.d.ts +1 -1
- package/dist/connector-profile.d.ts.map +1 -1
- package/dist/detect.d.ts.map +1 -1
- package/dist/detect.js +226 -192
- package/dist/detect.js.map +1 -1
- package/dist/ensure-package-service.d.ts +9 -0
- package/dist/ensure-package-service.d.ts.map +1 -0
- package/dist/ensure-package-service.js +146 -0
- package/dist/ensure-package-service.js.map +1 -0
- package/dist/ensure-pkg.js +4 -4
- package/dist/ensure-pkg.js.map +1 -1
- package/dist/ensure.d.ts.map +1 -1
- package/dist/ensure.js +15 -144
- package/dist/ensure.js.map +1 -1
- package/dist/fs-sftp.js +1 -1
- package/dist/fs-sftp.js.map +1 -1
- package/dist/fs-stat.d.ts +10 -0
- package/dist/fs-stat.d.ts.map +1 -0
- package/dist/fs-stat.js +62 -0
- package/dist/fs-stat.js.map +1 -0
- package/dist/fs-tools.d.ts.map +1 -1
- package/dist/fs-tools.js +6 -58
- package/dist/fs-tools.js.map +1 -1
- package/dist/http-security.d.ts.map +1 -1
- package/dist/http-security.js +6 -6
- package/dist/http-security.js.map +1 -1
- package/dist/http-server-runtime.d.ts.map +1 -1
- package/dist/http-server-runtime.js +41 -7
- package/dist/http-server-runtime.js.map +1 -1
- package/dist/index.js +7 -24
- package/dist/index.js.map +1 -1
- package/dist/mcp-http-web.d.ts +8 -0
- package/dist/mcp-http-web.d.ts.map +1 -0
- package/dist/mcp-http-web.js +35 -0
- package/dist/mcp-http-web.js.map +1 -0
- package/dist/mcp.d.ts +6 -2
- package/dist/mcp.d.ts.map +1 -1
- package/dist/mcp.js +22 -14
- package/dist/mcp.js.map +1 -1
- package/dist/policy.d.ts +8 -0
- package/dist/policy.d.ts.map +1 -1
- package/dist/policy.js +147 -105
- package/dist/policy.js.map +1 -1
- package/dist/process.d.ts.map +1 -1
- package/dist/process.js +11 -7
- package/dist/process.js.map +1 -1
- package/dist/remote/agent-activity-log.d.ts +26 -0
- package/dist/remote/agent-activity-log.d.ts.map +1 -0
- package/dist/remote/agent-activity-log.js +211 -0
- package/dist/remote/agent-activity-log.js.map +1 -0
- package/dist/remote/agent-cli.d.ts.map +1 -1
- package/dist/remote/agent-cli.js +153 -33
- package/dist/remote/agent-cli.js.map +1 -1
- package/dist/remote/agent-executor.d.ts.map +1 -1
- package/dist/remote/agent-executor.js +22 -10
- package/dist/remote/agent-executor.js.map +1 -1
- package/dist/remote/agent-handler.d.ts +2 -0
- package/dist/remote/agent-handler.d.ts.map +1 -1
- package/dist/remote/agent-handler.js +4 -0
- package/dist/remote/agent-handler.js.map +1 -1
- package/dist/remote/config.d.ts.map +1 -1
- package/dist/remote/config.js +12 -1
- package/dist/remote/config.js.map +1 -1
- package/dist/remote/control-plane.d.ts +12 -0
- package/dist/remote/control-plane.d.ts.map +1 -1
- package/dist/remote/control-plane.js +164 -56
- package/dist/remote/control-plane.js.map +1 -1
- package/dist/remote/crypto.d.ts +9 -4
- package/dist/remote/crypto.d.ts.map +1 -1
- package/dist/remote/crypto.js +41 -9
- package/dist/remote/crypto.js.map +1 -1
- package/dist/remote/http-util.d.ts.map +1 -1
- package/dist/remote/http-util.js +14 -7
- package/dist/remote/http-util.js.map +1 -1
- package/dist/remote/mcp-tools.d.ts +7 -0
- package/dist/remote/mcp-tools.d.ts.map +1 -1
- package/dist/remote/mcp-tools.js +28 -0
- package/dist/remote/mcp-tools.js.map +1 -1
- package/dist/remote/oauth-handler.d.ts +30 -3
- package/dist/remote/oauth-handler.d.ts.map +1 -1
- package/dist/remote/oauth-handler.js +232 -18
- package/dist/remote/oauth-handler.js.map +1 -1
- package/dist/remote/policy.js +2 -2
- package/dist/remote/policy.js.map +1 -1
- package/dist/remote/schemas.d.ts +9 -9
- package/dist/remote/schemas.js +6 -6
- package/dist/remote/schemas.js.map +1 -1
- package/dist/remote/store.d.ts +38 -1
- package/dist/remote/store.d.ts.map +1 -1
- package/dist/remote/store.js +149 -11
- package/dist/remote/store.js.map +1 -1
- package/dist/remote/types.d.ts +14 -0
- package/dist/remote/types.d.ts.map +1 -1
- package/dist/remote/types.js.map +1 -1
- package/dist/remote/web-dashboard-client-config.d.ts +77 -0
- package/dist/remote/web-dashboard-client-config.d.ts.map +1 -0
- package/dist/remote/web-dashboard-client-config.js +81 -0
- package/dist/remote/web-dashboard-client-config.js.map +1 -0
- package/dist/remote/web-dashboard-html.d.ts +2 -0
- package/dist/remote/web-dashboard-html.d.ts.map +1 -0
- package/dist/remote/web-dashboard-html.js +451 -0
- package/dist/remote/web-dashboard-html.js.map +1 -0
- package/dist/remote/web-dashboard-oauth-users.d.ts +4 -0
- package/dist/remote/web-dashboard-oauth-users.d.ts.map +1 -0
- package/dist/remote/web-dashboard-oauth-users.js +78 -0
- package/dist/remote/web-dashboard-oauth-users.js.map +1 -0
- package/dist/remote/web-dashboard-static.d.ts +4 -0
- package/dist/remote/web-dashboard-static.d.ts.map +1 -0
- package/dist/remote/web-dashboard-static.js +19 -0
- package/dist/remote/web-dashboard-static.js.map +1 -0
- package/dist/remote/web-dashboard-styles.d.ts +2 -0
- package/dist/remote/web-dashboard-styles.d.ts.map +1 -0
- package/dist/remote/web-dashboard-styles.js +206 -0
- package/dist/remote/web-dashboard-styles.js.map +1 -0
- package/dist/remote/web-dashboard.d.ts +62 -0
- package/dist/remote/web-dashboard.d.ts.map +1 -0
- package/dist/remote/web-dashboard.js +467 -0
- package/dist/remote/web-dashboard.js.map +1 -0
- package/dist/retry.d.ts.map +1 -1
- package/dist/retry.js +6 -3
- package/dist/retry.js.map +1 -1
- package/dist/safety.d.ts.map +1 -1
- package/dist/safety.js +56 -6
- package/dist/safety.js.map +1 -1
- package/dist/session-auth.js +7 -7
- package/dist/session-auth.js.map +1 -1
- package/dist/session.d.ts +1 -0
- package/dist/session.d.ts.map +1 -1
- package/dist/session.js +44 -40
- package/dist/session.js.map +1 -1
- package/dist/shell.d.ts.map +1 -1
- package/dist/shell.js +5 -4
- package/dist/shell.js.map +1 -1
- package/dist/ssh-config.d.ts +2 -2
- package/dist/ssh-config.d.ts.map +1 -1
- package/dist/ssh-config.js +24 -20
- package/dist/ssh-config.js.map +1 -1
- package/dist/telemetry.d.ts.map +1 -1
- package/dist/telemetry.js +9 -2
- package/dist/telemetry.js.map +1 -1
- package/dist/tools/connector.provider.d.ts +1 -1
- package/dist/tools/connector.provider.d.ts.map +1 -1
- package/dist/tools/ensure.provider.d.ts +1 -1
- package/dist/tools/ensure.provider.d.ts.map +1 -1
- package/dist/tools/fs.provider.d.ts +1 -1
- package/dist/tools/fs.provider.d.ts.map +1 -1
- package/dist/tools/metadata.d.ts +1 -1
- package/dist/tools/metadata.d.ts.map +1 -1
- package/dist/tools/output-schemas.d.ts +27 -135
- package/dist/tools/output-schemas.d.ts.map +1 -1
- package/dist/tools/process.provider.d.ts +1 -1
- package/dist/tools/process.provider.d.ts.map +1 -1
- package/dist/tools/registry.d.ts +1 -1
- package/dist/tools/registry.d.ts.map +1 -1
- package/dist/tools/registry.js +16 -13
- package/dist/tools/registry.js.map +1 -1
- package/dist/tools/session.provider.d.ts +1 -1
- package/dist/tools/session.provider.d.ts.map +1 -1
- package/dist/tools/system.provider.d.ts +1 -1
- package/dist/tools/system.provider.d.ts.map +1 -1
- package/dist/tools/transfer.provider.d.ts +1 -1
- package/dist/tools/transfer.provider.d.ts.map +1 -1
- package/dist/tools/tunnel.provider.d.ts +1 -1
- package/dist/tools/tunnel.provider.d.ts.map +1 -1
- package/dist/tools/types.d.ts +1 -1
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/transfer.js +2 -2
- package/dist/transfer.js.map +1 -1
- package/dist/types.js +1 -1
- package/dist/types.js.map +1 -1
- package/docs/adding-a-device.md +39 -17
- package/docs/agent-activity-monitor.md +34 -0
- package/docs/coolify.md +29 -0
- package/docs/development/dependency-management.md +1 -1
- package/docs/development/local-setup.md +1 -1
- package/docs/development/mcp-protocol-2026.md +33 -0
- package/docs/docker.md +4 -4
- package/docs/doppler-guide.md +34 -0
- package/docs/openssf-evidence.md +11 -7
- package/docs/openssf-gap-analysis.md +7 -8
- package/docs/reference/cli.md +17 -6
- package/docs/reference/compatibility.md +1 -1
- package/docs/security/dependency-audit-exceptions.md +3 -7
- package/docs/security/hosted-data-inventory.md +81 -0
- package/docs/sonarcloud-analysis.md +9 -0
- package/docs/tutorials/getting-started.md +1 -1
- package/mcp.json +1 -1
- package/package.json +26 -21
- package/registry/ssh-mcp-pro/mcp.json +1 -1
- package/server.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,77 @@ All notable changes to this project will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [1.4.2](https://github.com/oaslananka/ssh-mcp-pro/compare/ssh-mcp-pro-v1.4.1...ssh-mcp-pro-v1.4.2) (2026-11-10)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Bug Fixes
|
|
12
|
+
|
|
13
|
+
* **cli:** validate agent commands and break config import cycle ([e216b93](https://github.com/oaslananka/ssh-mcp-pro/commit/e216b9347805579918b928a43c654fc5dce48197))
|
|
14
|
+
|
|
15
|
+
## [1.4.1](https://github.com/oaslananka/ssh-mcp-pro/compare/ssh-mcp-pro-v1.4.0...ssh-mcp-pro-v1.4.1) (2026-11-10)
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
### Bug Fixes
|
|
19
|
+
|
|
20
|
+
* bind agent WebSocket to enrolled control-plane origin ([#194](https://github.com/oaslananka/ssh-mcp-pro/issues/194)) ([7ab181f](https://github.com/oaslananka/ssh-mcp-pro/commit/7ab181f474d283fb15358f467f89b42be2ba9236))
|
|
21
|
+
* harden Windows acceptance and dashboard onboarding ([#191](https://github.com/oaslananka/ssh-mcp-pro/issues/191)) ([d950b65](https://github.com/oaslananka/ssh-mcp-pro/commit/d950b65d42f4938e7b75feed94949a0d5a8e6050))
|
|
22
|
+
* make dashboard copy actions accessible and readable ([#193](https://github.com/oaslananka/ssh-mcp-pro/issues/193)) ([f6a8c94](https://github.com/oaslananka/ssh-mcp-pro/commit/f6a8c94e72b55b17296e795195710e21fe80672b))
|
|
23
|
+
|
|
24
|
+
## [1.4.0](https://github.com/oaslananka/ssh-mcp-pro/compare/ssh-mcp-pro-v1.3.0...ssh-mcp-pro-v1.4.0) (2026-11-06)
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
### Features
|
|
28
|
+
|
|
29
|
+
* **mcp:** support 2026 protocol on authenticated remote-agent endpoint ([#181](https://github.com/oaslananka/ssh-mcp-pro/issues/181)) ([8f5df37](https://github.com/oaslananka/ssh-mcp-pro/commit/8f5df3700657118d26743eebf314bdb3850cceb7))
|
|
30
|
+
* **remote:** add hosted dashboard and Coolify deployment support ([#127](https://github.com/oaslananka/ssh-mcp-pro/issues/127)) ([7a4ba63](https://github.com/oaslananka/ssh-mcp-pro/commit/7a4ba63cc8d2a3ec8080ecdddf57e854d08e1de2))
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
### Bug Fixes
|
|
34
|
+
|
|
35
|
+
* **agent:** launch Windows scheduled task with npm CMD shim ([#130](https://github.com/oaslananka/ssh-mcp-pro/issues/130)) ([cf6fdb5](https://github.com/oaslananka/ssh-mcp-pro/commit/cf6fdb511af552d0538659a8fa7420bb586cfb69))
|
|
36
|
+
* **agent:** resolve Linux npm CLI discovery and system runtime identity ([#176](https://github.com/oaslananka/ssh-mcp-pro/issues/176)) ([16b7ce3](https://github.com/oaslananka/ssh-mcp-pro/commit/16b7ce3ea57931482e46af539223e2e481d47c35))
|
|
37
|
+
* **agent:** restart service after enrollment identity changes ([#180](https://github.com/oaslananka/ssh-mcp-pro/issues/180)) ([d770763](https://github.com/oaslananka/ssh-mcp-pro/commit/d770763936a5e1c7f0c40e87414a8917f1c21b7a))
|
|
38
|
+
* **agent:** restart Windows agent after WebSocket disconnect ([#129](https://github.com/oaslananka/ssh-mcp-pro/issues/129)) ([8df07ee](https://github.com/oaslananka/ssh-mcp-pro/commit/8df07ee08a55eb665679dffc33d8701b4e063ca9))
|
|
39
|
+
* **agent:** surface Linux installer download failures ([#132](https://github.com/oaslananka/ssh-mcp-pro/issues/132)) ([79f166d](https://github.com/oaslananka/ssh-mcp-pro/commit/79f166d50ffd52d0b9253b318703486fd5a72e8a))
|
|
40
|
+
* **apps:** correct publication legal-document attestations ([#157](https://github.com/oaslananka/ssh-mcp-pro/issues/157)) ([7e8b42d](https://github.com/oaslananka/ssh-mcp-pro/commit/7e8b42d9e5032c657fd65920c004bafc3d41abf6))
|
|
41
|
+
* **auth:** restrict fixture identities to loopback test mode ([#128](https://github.com/oaslananka/ssh-mcp-pro/issues/128)) ([a0a1d19](https://github.com/oaslananka/ssh-mcp-pro/commit/a0a1d1991dc665db3be2a017ddea039d4b642803))
|
|
42
|
+
* **automation:** avoid stalled dependency PR creation ([#153](https://github.com/oaslananka/ssh-mcp-pro/issues/153)) ([209c084](https://github.com/oaslananka/ssh-mcp-pro/commit/209c084294188a46baf878bfc326676b25e49781))
|
|
43
|
+
* **dashboard:** correct Gemini and Copilot setup examples ([#161](https://github.com/oaslananka/ssh-mcp-pro/issues/161)) ([be00c8c](https://github.com/oaslananka/ssh-mcp-pro/commit/be00c8c0f77c38d08b6b68f78e6fe2118c1bfeb2))
|
|
44
|
+
* **dashboard:** correct MCP client setup examples ([#146](https://github.com/oaslananka/ssh-mcp-pro/issues/146)) ([71ed56a](https://github.com/oaslananka/ssh-mcp-pro/commit/71ed56a45f024812cf15d89f4de861cf631a65bd))
|
|
45
|
+
* **dashboard:** display host metadata and stream agent activity logs ([#183](https://github.com/oaslananka/ssh-mcp-pro/issues/183)) ([30d294a](https://github.com/oaslananka/ssh-mcp-pro/commit/30d294acb367ae06d25ec1caff9f68bad113ea2d))
|
|
46
|
+
* **dashboard:** distinguish remote MCP connector setup ([#147](https://github.com/oaslananka/ssh-mcp-pro/issues/147)) ([621948d](https://github.com/oaslananka/ssh-mcp-pro/commit/621948d03bffe62282daa96dbb41d741aca83311))
|
|
47
|
+
* **dashboard:** make navigation keyboard accessible ([#160](https://github.com/oaslananka/ssh-mcp-pro/issues/160)) ([6261f7f](https://github.com/oaslananka/ssh-mcp-pro/commit/6261f7f3b92a53b7f9e474e6159aa36c468a6ed3))
|
|
48
|
+
* **dashboard:** remove revoked devices from inventory ([#149](https://github.com/oaslananka/ssh-mcp-pro/issues/149)) ([715edb8](https://github.com/oaslananka/ssh-mcp-pro/commit/715edb8511f908d70bb2400767942cd17e3bbe21))
|
|
49
|
+
* **dashboard:** separate device revoke and remove actions ([#182](https://github.com/oaslananka/ssh-mcp-pro/issues/182)) ([1e78176](https://github.com/oaslananka/ssh-mcp-pro/commit/1e7817642ebead581435fc169d9a46eed74fa6f6))
|
|
50
|
+
* **docs:** mark Google cloud connector as not publish-ready ([#134](https://github.com/oaslananka/ssh-mcp-pro/issues/134)) ([c3889af](https://github.com/oaslananka/ssh-mcp-pro/commit/c3889afda29889dfa3cbd96b55c28fe852fc9dc6))
|
|
51
|
+
* **http:** classify invalid JSON requests as bad input ([#136](https://github.com/oaslananka/ssh-mcp-pro/issues/136)) ([7fbbee2](https://github.com/oaslananka/ssh-mcp-pro/commit/7fbbee20f8ea141b36230dd8336d16172da525da))
|
|
52
|
+
* **http:** deny browser origins with no explicit allowlist ([#135](https://github.com/oaslananka/ssh-mcp-pro/issues/135)) ([ac3bf2c](https://github.com/oaslananka/ssh-mcp-pro/commit/ac3bf2cbdd6a63d92812b07b194b0b35269a040f))
|
|
53
|
+
* **oauth:** allow configured identity provider form redirects ([#150](https://github.com/oaslananka/ssh-mcp-pro/issues/150)) ([d78c067](https://github.com/oaslananka/ssh-mcp-pro/commit/d78c0676df29066e903bc53d2244944e6d82f819))
|
|
54
|
+
* **oauth:** prevent Chromium form redirects and restore enrollment tokens ([#179](https://github.com/oaslananka/ssh-mcp-pro/issues/179)) ([19f337c](https://github.com/oaslananka/ssh-mcp-pro/commit/19f337c9161e5496313349c66317586676cbb910))
|
|
55
|
+
* **oauth:** use registered Google callback for dashboard and MCP ([#178](https://github.com/oaslananka/ssh-mcp-pro/issues/178)) ([638d3f5](https://github.com/oaslananka/ssh-mcp-pro/commit/638d3f55ba4bb462c518a3fa8af3a4262c294414))
|
|
56
|
+
* **release:** add provenance-verified v1.3.0 asset recovery ([#126](https://github.com/oaslananka/ssh-mcp-pro/issues/126)) ([42254ec](https://github.com/oaslananka/ssh-mcp-pro/commit/42254ec23e50afa75cbd0fd467898fc93ab403f8))
|
|
57
|
+
* **release:** classify pinned legacy SSE migration bridge as advisory ([#123](https://github.com/oaslananka/ssh-mcp-pro/issues/123)) ([f262e93](https://github.com/oaslananka/ssh-mcp-pro/commit/f262e93c10465a96a002ee27c8dd77e69ad62dcb))
|
|
58
|
+
* **release:** sync Gemini connector version metadata ([#141](https://github.com/oaslananka/ssh-mcp-pro/issues/141)) ([feada05](https://github.com/oaslananka/ssh-mcp-pro/commit/feada051b38b7825a2142a0c8c78eae1b37e17f1))
|
|
59
|
+
* **remote:** advertise HSTS for HTTPS endpoints ([#155](https://github.com/oaslananka/ssh-mcp-pro/issues/155)) ([1c8baac](https://github.com/oaslananka/ssh-mcp-pro/commit/1c8baacb813a1dcb441a587c7b316999517fdddb))
|
|
60
|
+
* **remote:** prune expired transient credential records ([#159](https://github.com/oaslananka/ssh-mcp-pro/issues/159)) ([a8b0dfc](https://github.com/oaslananka/ssh-mcp-pro/commit/a8b0dfc9023f7e6d31b43d1004857b6b3b4e9c44))
|
|
61
|
+
* **test:** bind SSH fixture to loopback without sudo ([#133](https://github.com/oaslananka/ssh-mcp-pro/issues/133)) ([3c0a80f](https://github.com/oaslananka/ssh-mcp-pro/commit/3c0a80ffad507ab167a5ad7bc37a0ca513b478e6))
|
|
62
|
+
|
|
63
|
+
## [1.3.0](https://github.com/oaslananka/ssh-mcp-pro/compare/ssh-mcp-pro-v1.2.3...ssh-mcp-pro-v1.3.0) (2026-11-02)
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
### Features
|
|
67
|
+
|
|
68
|
+
* **mcp:** support 2026 protocol on standard transports ([#121](https://github.com/oaslananka/ssh-mcp-pro/issues/121)) ([c975504](https://github.com/oaslananka/ssh-mcp-pro/commit/c975504f1b0d0e8ea270be3f87f6191e8bec1fa9))
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
### Bug Fixes
|
|
72
|
+
|
|
73
|
+
* **docker:** patch Alpine musl CVE-2026-107891 ([#98](https://github.com/oaslananka/ssh-mcp-pro/issues/98)) ([4186138](https://github.com/oaslananka/ssh-mcp-pro/commit/41861382dacfc3b25c6715b303f30d54f3c605bb))
|
|
74
|
+
* **quality:** remove stale lock helper and simplify safe string escaping ([#114](https://github.com/oaslananka/ssh-mcp-pro/issues/114)) ([d8d6c56](https://github.com/oaslananka/ssh-mcp-pro/commit/d8d6c565debc3cfbfb425ba16a71ad29e49c483c))
|
|
75
|
+
* **reliability:** report actual retry attempts and parallelize independent version checks ([#119](https://github.com/oaslananka/ssh-mcp-pro/issues/119)) ([bc64b36](https://github.com/oaslananka/ssh-mcp-pro/commit/bc64b36a33b15aa9a9ee418f4f06ccb4b87f33f0))
|
|
76
|
+
* **security:** reject unsafe Windows shim path characters ([#100](https://github.com/oaslananka/ssh-mcp-pro/issues/100)) ([083e133](https://github.com/oaslananka/ssh-mcp-pro/commit/083e133b81affb79a192ed6859f680ce0f79f478))
|
|
77
|
+
* **ssh:** apply multi-pattern Host options to every alias ([#120](https://github.com/oaslananka/ssh-mcp-pro/issues/120)) ([6d7b9f2](https://github.com/oaslananka/ssh-mcp-pro/commit/6d7b9f2a98712a18c6cb23002ed5a08152c0b02b))
|
|
78
|
+
|
|
8
79
|
## [1.2.3](https://github.com/oaslananka/ssh-mcp-pro/compare/ssh-mcp-pro-v1.2.2...ssh-mcp-pro-v1.2.3) (2026-10-09)
|
|
9
80
|
|
|
10
81
|
|
package/MIGRATION.md
CHANGED
|
@@ -6,8 +6,8 @@ Version `1.0.0` is the initial public baseline for this repository. There are no
|
|
|
6
6
|
|
|
7
7
|
When upgrading within `1.x`, preserve these compatibility expectations:
|
|
8
8
|
|
|
9
|
-
- Node.js must satisfy
|
|
10
|
-
- pnpm must satisfy `^11.
|
|
9
|
+
- Node.js must satisfy `>=22.22.2` (Node 24 and 26 are tested in CI).
|
|
10
|
+
- pnpm must satisfy `^11.28.10` for current development and build tooling.
|
|
11
11
|
- Existing stdio MCP client configs can continue to launch `ssh-mcp-pro` with no arguments.
|
|
12
12
|
- HTTP deployments should keep explicit authentication, allowed origins, host allowlists, strict host-key verification, and a remote-safe tool profile.
|
|
13
13
|
|
package/README.md
CHANGED
|
@@ -1,17 +1,36 @@
|
|
|
1
1
|
<h1 align="center">ssh-mcp-pro</h1>
|
|
2
2
|
|
|
3
|
+
<p align="center"><strong>Policy-controlled SSH automation for MCP clients</strong></p>
|
|
4
|
+
|
|
5
|
+
<p align="center">
|
|
6
|
+
<a href="INSTALL.md">Installation</a> ·
|
|
7
|
+
<a href="#quickstart">Quickstart</a> ·
|
|
8
|
+
<a href="https://oaslananka.github.io/ssh-mcp-pro/">API Docs</a> ·
|
|
9
|
+
<a href="https://deepwiki.com/oaslananka/ssh-mcp-pro">DeepWiki</a>
|
|
10
|
+
</p>
|
|
11
|
+
|
|
3
12
|
<p align="center">
|
|
4
|
-
<a href="https://www.npmjs.com/package/ssh-mcp-pro"><img alt="npm version" src="https://img.shields.io/npm/v/ssh-mcp-pro
|
|
5
|
-
<a href="https://
|
|
6
|
-
<a href="
|
|
7
|
-
<a href="
|
|
8
|
-
<a href="https://oaslananka.github.io/ssh-mcp-pro/"><img alt="API
|
|
13
|
+
<a href="https://www.npmjs.com/package/ssh-mcp-pro"><img alt="npm published version" src="https://img.shields.io/npm/v/ssh-mcp-pro?style=flat&logo=npm" /></a>
|
|
14
|
+
<a href="https://github.com/oaslananka/ssh-mcp-pro/releases/latest"><img alt="GitHub release version" src="https://img.shields.io/github/v/release/oaslananka/ssh-mcp-pro?style=flat&label=GitHub%20Release" /></a>
|
|
15
|
+
<a href="#prerequisites"><img alt="Node.js supported major versions: 22, 24, 26" src="https://img.shields.io/badge/Node.js-22%20%7C%2024%20%7C%2026-43853d?style=flat&logo=nodedotjs&logoColor=white" /></a>
|
|
16
|
+
<a href="LICENSE"><img alt="MIT license" src="https://img.shields.io/badge/License-MIT-ffcf33?style=flat" /></a>
|
|
17
|
+
<a href="https://oaslananka.github.io/ssh-mcp-pro/"><img alt="API documentation" src="https://img.shields.io/badge/Docs-API-2980b9?style=flat" /></a>
|
|
9
18
|
</p>
|
|
10
19
|
|
|
11
20
|
<p align="center">
|
|
12
|
-
<a href="https://
|
|
13
|
-
|
|
14
|
-
|
|
21
|
+
<a href="https://github.com/oaslananka/ssh-mcp-pro/actions/workflows/ci.yml"><img alt="Main CI workflow status" src="https://github.com/oaslananka/ssh-mcp-pro/actions/workflows/ci.yml/badge.svg?branch=main" /></a>
|
|
22
|
+
<a href="https://github.com/oaslananka/ssh-mcp-pro/actions/workflows/codeql.yml"><img alt="CodeQL analysis workflow status" src="https://github.com/oaslananka/ssh-mcp-pro/actions/workflows/codeql.yml/badge.svg?branch=main" /></a>
|
|
23
|
+
</p>
|
|
24
|
+
|
|
25
|
+
<p align="center">
|
|
26
|
+
<a href="https://www.npmjs.com/package/ssh-mcp-pro"><img alt="All-time npm downloads (not unique users)" src="https://img.shields.io/npm/dt/ssh-mcp-pro?style=flat&label=npm%20downloads" /></a>
|
|
27
|
+
<a href="https://gitgem.org/github/oaslananka/ssh-mcp-pro"><img alt="GitGem project listing" src="https://gitgem.org/api/badge/github/oaslananka/ssh-mcp-pro.svg" /></a>
|
|
28
|
+
</p>
|
|
29
|
+
|
|
30
|
+
<p align="center">
|
|
31
|
+
<a href="https://github.com/sponsors/oaslananka"><img alt="Sponsor through GitHub Sponsors" src="https://img.shields.io/badge/GitHub-Sponsors-ea4aaa?style=flat&logo=githubsponsors" /></a>
|
|
32
|
+
<a href="https://www.buymeacoffee.com/oaslananka"><img alt="Support through Buy Me a Coffee" src="https://img.shields.io/badge/Buy%20Me%20a%20Coffee-Support-ffdd00?style=flat&logo=buymeacoffee&logoColor=000000" /></a>
|
|
33
|
+
<a href="https://github.com/oaslananka/ssh-mcp-pro"><img alt="Stars: live GitHub repository star count; visit repository to star" src="https://img.shields.io/github/stars/oaslananka/ssh-mcp-pro?style=flat&label=Stars&color=8e65d3" /></a>
|
|
15
34
|
</p>
|
|
16
35
|
|
|
17
36
|
ssh-mcp-pro is a secure Model Context Protocol (MCP) server for SSH automation. It lets MCP-capable clients open SSH sessions, inspect hosts, run guarded commands, manage files, transfer artifacts, create tunnels, and perform idempotent package or service work through policy-controlled tools.
|
|
@@ -19,12 +38,14 @@ ssh-mcp-pro is a secure Model Context Protocol (MCP) server for SSH automation.
|
|
|
19
38
|
## Prerequisites
|
|
20
39
|
|
|
21
40
|
- Node.js `>=22.22.2` or `>=24.15.0` or `>=26.3.0`
|
|
22
|
-
- pnpm
|
|
41
|
+
- pnpm `^11.28.10` (use Corepack for development)
|
|
23
42
|
- SSH access to the target hosts
|
|
24
43
|
- Docker, only for local integration tests and container image builds
|
|
25
44
|
|
|
26
45
|
## Installation
|
|
27
46
|
|
|
47
|
+
For Windows/Linux outbound agent connection status, rotating diagnostics and a live PowerShell log view, see [Agent Activity Monitor](docs/agent-activity-monitor.md).
|
|
48
|
+
|
|
28
49
|
Install globally with pnpm:
|
|
29
50
|
|
|
30
51
|
```bash
|
|
@@ -47,7 +68,7 @@ pnpm dlx ssh-mcp-pro
|
|
|
47
68
|
Container images are published to GitHub Container Registry for release tags:
|
|
48
69
|
|
|
49
70
|
```bash
|
|
50
|
-
docker run --rm ghcr.io/oaslananka/ssh-mcp-pro:1.
|
|
71
|
+
docker run --rm ghcr.io/oaslananka/ssh-mcp-pro:1.4.1 --version
|
|
51
72
|
```
|
|
52
73
|
|
|
53
74
|
Images are published for `linux/amd64` and `linux/arm64` with exact semver and
|
|
@@ -67,11 +88,11 @@ Generic stdio MCP config:
|
|
|
67
88
|
}
|
|
68
89
|
```
|
|
69
90
|
|
|
70
|
-
VS Code
|
|
91
|
+
VS Code workspace `.vscode/mcp.json` configuration:
|
|
71
92
|
|
|
72
93
|
```json
|
|
73
94
|
{
|
|
74
|
-
"
|
|
95
|
+
"servers": {
|
|
75
96
|
"ssh-mcp-pro": {
|
|
76
97
|
"type": "stdio",
|
|
77
98
|
"command": "ssh-mcp-pro",
|
|
@@ -219,7 +240,7 @@ ssh-mcp-pro starts with strict SSH host-key verification, denies root login, den
|
|
|
219
240
|
task (tutorial, how-to, reference, explanation).
|
|
220
241
|
- [docs/troubleshooting.md](docs/troubleshooting.md) covers common failure modes.
|
|
221
242
|
|
|
222
|
-
## Project Health & Governance
|
|
243
|
+
## Project Health & Governance
|
|
223
244
|
|
|
224
245
|
- [GOVERNANCE.md](GOVERNANCE.md) describes how decisions are made today.
|
|
225
246
|
- [MAINTAINERS.md](MAINTAINERS.md) lists current maintainers.
|
package/SECURITY_DECISIONS.md
CHANGED
|
@@ -80,6 +80,25 @@ The flow is intentional:
|
|
|
80
80
|
|
|
81
81
|
These findings are dismissed individually with a false-positive rationale. No broad CodeQL suppression is used.
|
|
82
82
|
|
|
83
|
+
### CodeQL #156: required signed agent hello
|
|
84
|
+
|
|
85
|
+
CodeQL alert #156 (`js/file-access-to-http`) traces the locally stored agent
|
|
86
|
+
configuration through the signed `agent.hello` WebSocket send. This is
|
|
87
|
+
**intentional authenticated protocol traffic**, not an arbitrary upload of
|
|
88
|
+
the configuration file. The message contains the agent ID, capability names,
|
|
89
|
+
version, host metadata, nonce, timestamp, and Ed25519 signature. It does
|
|
90
|
+
**not** include the saved private key or enrollment token.
|
|
91
|
+
|
|
92
|
+
As defense in depth, enrollment and subsequent agent startup now check that
|
|
93
|
+
the WebSocket destination has the **same host and port** as the explicitly
|
|
94
|
+
enrolled HTTP(S) server, uses the matching WS(S) transport without a downgrade,
|
|
95
|
+
and contains no URL credentials, query, or fragment. Configured custom
|
|
96
|
+
WebSocket paths still work. Mismatched enrollment responses are rejected
|
|
97
|
+
without saving a config; modified saved destinations are rejected before
|
|
98
|
+
connecting. Do not suppress this rule globally or weaken legitimate signed
|
|
99
|
+
hello delivery to silence taint analysis.
|
|
100
|
+
|
|
101
|
+
|
|
83
102
|
## Other CodeQL False-Positive Dispositions
|
|
84
103
|
|
|
85
104
|
- **`js/file-access-to-http` in `scripts/check-dependency-freshness.mjs` (`fetchJson`)**: annotated in-code with `codeql[js/file-access-to-http]`. Every URL reaching `fetch()` is either a hardcoded constant or built by `registryPackageUrl()`, which validates the package name against `assertNpmPackageName()` before use; names originate from this repository's own `package.json`, not external input.
|
package/dist/agent-bin.js
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { runAgentCli } from "./remote/agent-cli.js";
|
|
3
|
-
|
|
3
|
+
try {
|
|
4
|
+
await runAgentCli(process.argv.slice(2));
|
|
5
|
+
}
|
|
6
|
+
catch (error) {
|
|
4
7
|
const message = error instanceof Error ? error.message : String(error);
|
|
5
8
|
process.stderr.write(`${message}\n`);
|
|
6
9
|
process.exit(1);
|
|
7
|
-
}
|
|
10
|
+
}
|
|
8
11
|
//# sourceMappingURL=agent-bin.js.map
|
package/dist/agent-bin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-bin.js","sourceRoot":"","sources":["../src/agent-bin.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"agent-bin.js","sourceRoot":"","sources":["../src/agent-bin.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,IAAI,CAAC;IACH,MAAM,WAAW,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3C,CAAC;AAAC,OAAO,KAAc,EAAE,CAAC;IACxB,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACvE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,OAAO,IAAI,CAAC,CAAC;IACrC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC"}
|
package/dist/cli.d.ts
CHANGED
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,OAAO,GAAG,MAAM,CAAC;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,OAAO,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC,kBAAkB,EAAE,OAAO,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;IACpB,SAAS,EAAE,OAAO,GAAG,MAAM,CAAC;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,eAAe,EAAE,OAAO,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC,kBAAkB,EAAE,OAAO,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAaD,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CA8DpD;AAGD,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,UAAU,EAChB,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,IAAI,CAmBN"}
|
package/dist/cli.js
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
const VALUE_OPTIONS = new Map([
|
|
2
|
+
["--host", "host"],
|
|
3
|
+
["--port", "port"],
|
|
4
|
+
["--bearer-token-file", "bearerTokenFile"],
|
|
5
|
+
["--tool-profile", "toolProfile"],
|
|
6
|
+
["--connector-credential-provider", "connectorCredentialProvider"],
|
|
7
|
+
]);
|
|
1
8
|
export function parseArgs(argv) {
|
|
2
9
|
const opts = {
|
|
3
10
|
help: false,
|
|
@@ -9,11 +16,19 @@ export function parseArgs(argv) {
|
|
|
9
16
|
};
|
|
10
17
|
for (let index = 0; index < argv.length; index++) {
|
|
11
18
|
const arg = argv[index];
|
|
19
|
+
const valueOption = VALUE_OPTIONS.get(arg ?? "");
|
|
20
|
+
if (valueOption) {
|
|
21
|
+
const next = argv[index + 1];
|
|
22
|
+
if (next !== undefined) {
|
|
23
|
+
opts[valueOption] = next;
|
|
24
|
+
index++;
|
|
25
|
+
}
|
|
26
|
+
continue;
|
|
27
|
+
}
|
|
12
28
|
switch (arg) {
|
|
13
29
|
case "agent":
|
|
14
30
|
opts.agentArgs = argv.slice(index + 1);
|
|
15
|
-
|
|
16
|
-
break;
|
|
31
|
+
return opts;
|
|
17
32
|
case "http":
|
|
18
33
|
opts.transport = "http";
|
|
19
34
|
break;
|
|
@@ -38,54 +53,9 @@ export function parseArgs(argv) {
|
|
|
38
53
|
case "--transport=stdio":
|
|
39
54
|
opts.transport = "stdio";
|
|
40
55
|
break;
|
|
41
|
-
case "--host":
|
|
42
|
-
{
|
|
43
|
-
const next = argv[index + 1];
|
|
44
|
-
if (next !== undefined) {
|
|
45
|
-
opts.host = next;
|
|
46
|
-
index++;
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
break;
|
|
50
|
-
case "--port":
|
|
51
|
-
{
|
|
52
|
-
const next = argv[index + 1];
|
|
53
|
-
if (next !== undefined) {
|
|
54
|
-
opts.port = next;
|
|
55
|
-
index++;
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
break;
|
|
59
|
-
case "--bearer-token-file":
|
|
60
|
-
{
|
|
61
|
-
const next = argv[index + 1];
|
|
62
|
-
if (next !== undefined) {
|
|
63
|
-
opts.bearerTokenFile = next;
|
|
64
|
-
index++;
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
break;
|
|
68
56
|
case "--enable-legacy-sse":
|
|
69
57
|
opts.enableLegacySse = true;
|
|
70
58
|
break;
|
|
71
|
-
case "--tool-profile":
|
|
72
|
-
{
|
|
73
|
-
const next = argv[index + 1];
|
|
74
|
-
if (next !== undefined) {
|
|
75
|
-
opts.toolProfile = next;
|
|
76
|
-
index++;
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
break;
|
|
80
|
-
case "--connector-credential-provider":
|
|
81
|
-
{
|
|
82
|
-
const next = argv[index + 1];
|
|
83
|
-
if (next !== undefined) {
|
|
84
|
-
opts.connectorCredentialProvider = next;
|
|
85
|
-
index++;
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
break;
|
|
89
59
|
case "--no-stdio":
|
|
90
60
|
opts.unsupportedNoStdio = true;
|
|
91
61
|
break;
|
|
@@ -96,4 +66,25 @@ export function parseArgs(argv) {
|
|
|
96
66
|
}
|
|
97
67
|
return opts;
|
|
98
68
|
}
|
|
69
|
+
// Apply HTTP CLI overrides without changing values omitted by the caller.
|
|
70
|
+
export function applyHttpCliEnvironment(opts, env = process.env) {
|
|
71
|
+
if (opts.host) {
|
|
72
|
+
env.SSH_MCP_HTTP_HOST = opts.host;
|
|
73
|
+
}
|
|
74
|
+
if (opts.port) {
|
|
75
|
+
env.SSH_MCP_HTTP_PORT = opts.port;
|
|
76
|
+
}
|
|
77
|
+
if (opts.bearerTokenFile) {
|
|
78
|
+
env.SSH_MCP_HTTP_BEARER_TOKEN_FILE = opts.bearerTokenFile;
|
|
79
|
+
}
|
|
80
|
+
if (opts.enableLegacySse) {
|
|
81
|
+
env.SSH_MCP_ENABLE_LEGACY_SSE = "true";
|
|
82
|
+
}
|
|
83
|
+
if (opts.toolProfile) {
|
|
84
|
+
env.SSH_MCP_TOOL_PROFILE = opts.toolProfile;
|
|
85
|
+
}
|
|
86
|
+
if (opts.connectorCredentialProvider) {
|
|
87
|
+
env.SSH_MCP_CONNECTOR_CREDENTIAL_PROVIDER = opts.connectorCredentialProvider;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
99
90
|
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAeA,MAAM,UAAU,SAAS,CAAC,IAAc;IACtC,MAAM,IAAI,GAAe;QACvB,IAAI,EAAE,KAAK;QACX,OAAO,EAAE,KAAK;QACd,UAAU,EAAE,KAAK;QACjB,SAAS,EAAE,OAAO;QAClB,eAAe,EAAE,KAAK;QACtB,kBAAkB,EAAE,KAAK;KAC1B,CAAC;IAEF,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;QACjD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QACxB,QAAQ,GAAG,EAAE,CAAC;YACZ,KAAK,OAAO;gBACV,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;gBACvC,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { ServerConfig } from "./config-types.js";
|
|
2
|
+
/** Apply security and policy environment values before programmatic overrides. */
|
|
3
|
+
export declare function applySecurityPolicyEnvironment(config: ServerConfig): void;
|
|
4
|
+
//# sourceMappingURL=config-security-env.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-security-env.d.ts","sourceRoot":"","sources":["../src/config-security-env.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAiGtD,kFAAkF;AAClF,wBAAgB,8BAA8B,CAAC,MAAM,EAAE,YAAY,GAAG,IAAI,CA4BzE"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { loadPolicyFile, parseBoolean, parseHostKeyPolicy, parseList } from "./config-parsers.js";
|
|
2
|
+
/** Prefer non-empty environment lists, otherwise retain file/default policy lists. */
|
|
3
|
+
function resolvePolicyList(value, fallback) {
|
|
4
|
+
const parsed = parseList(value);
|
|
5
|
+
return parsed.length ? parsed : fallback;
|
|
6
|
+
}
|
|
7
|
+
/** Keep ordinary allow/deny path and host lists independent from tunnel policy. */
|
|
8
|
+
function resolveGeneralPolicyLists(config, filePolicy) {
|
|
9
|
+
return {
|
|
10
|
+
allowedHosts: resolvePolicyList(process.env.SSH_MCP_ALLOWED_HOSTS, filePolicy.allowedHosts ?? config.policy.allowedHosts),
|
|
11
|
+
commandAllow: resolvePolicyList(process.env.SSH_MCP_COMMAND_ALLOW, filePolicy.commandAllow ?? config.policy.commandAllow),
|
|
12
|
+
commandDeny: resolvePolicyList(process.env.SSH_MCP_COMMAND_DENY, filePolicy.commandDeny ?? config.policy.commandDeny),
|
|
13
|
+
pathAllowPrefixes: resolvePolicyList(process.env.SSH_MCP_PATH_ALLOW_PREFIXES, filePolicy.pathAllowPrefixes ?? config.policy.pathAllowPrefixes),
|
|
14
|
+
pathDenyPrefixes: resolvePolicyList(process.env.SSH_MCP_PATH_DENY_PREFIXES, filePolicy.pathDenyPrefixes ?? config.policy.pathDenyPrefixes),
|
|
15
|
+
localPathAllowPrefixes: resolvePolicyList(process.env.SSH_MCP_LOCAL_PATH_ALLOW_PREFIXES, filePolicy.localPathAllowPrefixes ?? config.policy.localPathAllowPrefixes),
|
|
16
|
+
localPathDenyPrefixes: resolvePolicyList(process.env.SSH_MCP_LOCAL_PATH_DENY_PREFIXES, filePolicy.localPathDenyPrefixes ?? config.policy.localPathDenyPrefixes),
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
function resolveTunnelPolicyLists(config, filePolicy) {
|
|
20
|
+
return {
|
|
21
|
+
tunnelAllowBindHosts: resolvePolicyList(process.env.SSH_MCP_TUNNEL_ALLOW_BIND_HOSTS, filePolicy.tunnelAllowBindHosts ?? config.policy.tunnelAllowBindHosts),
|
|
22
|
+
tunnelDenyBindHosts: resolvePolicyList(process.env.SSH_MCP_TUNNEL_DENY_BIND_HOSTS, filePolicy.tunnelDenyBindHosts ?? config.policy.tunnelDenyBindHosts),
|
|
23
|
+
tunnelAllowRemoteHosts: resolvePolicyList(process.env.SSH_MCP_TUNNEL_ALLOW_REMOTE_HOSTS, filePolicy.tunnelAllowRemoteHosts ?? config.policy.tunnelAllowRemoteHosts),
|
|
24
|
+
tunnelDenyRemoteHosts: resolvePolicyList(process.env.SSH_MCP_TUNNEL_DENY_REMOTE_HOSTS, filePolicy.tunnelDenyRemoteHosts ?? config.policy.tunnelDenyRemoteHosts),
|
|
25
|
+
tunnelAllowPorts: resolvePolicyList(process.env.SSH_MCP_TUNNEL_ALLOW_PORTS, filePolicy.tunnelAllowPorts ?? config.policy.tunnelAllowPorts),
|
|
26
|
+
tunnelDenyPorts: resolvePolicyList(process.env.SSH_MCP_TUNNEL_DENY_PORTS, filePolicy.tunnelDenyPorts ?? config.policy.tunnelDenyPorts),
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
/** Preserve host-key migration precedence and root-login policy coupling. */
|
|
30
|
+
function applyHostKeyEnvironment(config) {
|
|
31
|
+
const strictHostKeyChecking = process.env.STRICT_HOST_KEY_CHECKING ?? process.env.SSH_MCP_STRICT_HOST_KEY;
|
|
32
|
+
if (strictHostKeyChecking !== undefined) {
|
|
33
|
+
config.security.hostKeyPolicy = parseBoolean(strictHostKeyChecking, true)
|
|
34
|
+
? "strict"
|
|
35
|
+
: "insecure";
|
|
36
|
+
}
|
|
37
|
+
config.security.hostKeyPolicy = parseHostKeyPolicy(process.env.SSH_MCP_HOST_KEY_POLICY, config.security.hostKeyPolicy);
|
|
38
|
+
config.security.knownHostsPath =
|
|
39
|
+
process.env.KNOWN_HOSTS_PATH ??
|
|
40
|
+
process.env.SSH_MCP_KNOWN_HOSTS_PATH ??
|
|
41
|
+
config.security.knownHostsPath;
|
|
42
|
+
config.security.allowRootLogin = parseBoolean(process.env.SSH_MCP_ALLOW_ROOT_LOGIN, config.security.allowRootLogin);
|
|
43
|
+
config.security.allowedCiphers = parseList(process.env.SSH_MCP_ALLOWED_CIPHERS);
|
|
44
|
+
}
|
|
45
|
+
/** Apply security and policy environment values before programmatic overrides. */
|
|
46
|
+
export function applySecurityPolicyEnvironment(config) {
|
|
47
|
+
applyHostKeyEnvironment(config);
|
|
48
|
+
const filePolicy = loadPolicyFile(process.env.SSH_MCP_POLICY_FILE);
|
|
49
|
+
config.policy = {
|
|
50
|
+
...config.policy,
|
|
51
|
+
...filePolicy,
|
|
52
|
+
mode: process.env.SSH_MCP_POLICY_MODE === "explain"
|
|
53
|
+
? "explain"
|
|
54
|
+
: (filePolicy.mode ?? config.policy.mode),
|
|
55
|
+
allowRootLogin: config.security.allowRootLogin,
|
|
56
|
+
allowRawSudo: parseBoolean(process.env.SSH_MCP_ALLOW_RAW_SUDO, filePolicy.allowRawSudo ?? config.policy.allowRawSudo),
|
|
57
|
+
allowDestructiveCommands: parseBoolean(process.env.SSH_MCP_ALLOW_DESTRUCTIVE_COMMANDS, filePolicy.allowDestructiveCommands ?? config.policy.allowDestructiveCommands),
|
|
58
|
+
allowDestructiveFs: parseBoolean(process.env.SSH_MCP_ALLOW_DESTRUCTIVE_FS, filePolicy.allowDestructiveFs ?? config.policy.allowDestructiveFs),
|
|
59
|
+
...resolveGeneralPolicyLists(config, filePolicy),
|
|
60
|
+
...resolveTunnelPolicyLists(config, filePolicy),
|
|
61
|
+
};
|
|
62
|
+
config.policy.allowRootLogin = config.security.allowRootLogin;
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=config-security-env.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-security-env.js","sourceRoot":"","sources":["../src/config-security-env.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import type { ConnectorCredentialProvider } from "./config-parsers.js";
|
|
2
|
+
import type { ToolProfile } from "./connector-profile.js";
|
|
3
|
+
import type { PolicyConfig } from "./policy.js";
|
|
4
|
+
import type { HostKeyPolicy } from "./types.js";
|
|
5
|
+
/**
|
|
6
|
+
* Server configuration options
|
|
7
|
+
*/
|
|
8
|
+
export interface ServerConfig {
|
|
9
|
+
/** Maximum concurrent sessions */
|
|
10
|
+
maxSessions: number;
|
|
11
|
+
/** Default session TTL in milliseconds */
|
|
12
|
+
sessionTtlMs: number;
|
|
13
|
+
/** Session cleanup interval in milliseconds */
|
|
14
|
+
cleanupIntervalMs: number;
|
|
15
|
+
/** Default command timeout in milliseconds */
|
|
16
|
+
commandTimeoutMs: number;
|
|
17
|
+
/** Maximum buffered stdout/stderr per command result (bytes) */
|
|
18
|
+
maxCommandOutputBytes: number;
|
|
19
|
+
/** Maximum streaming chunks retained in memory */
|
|
20
|
+
maxStreamChunks: number;
|
|
21
|
+
/** Maximum file size for read operations (bytes) */
|
|
22
|
+
maxFileSize: number;
|
|
23
|
+
/** Maximum file write payload size accepted before buffering (bytes) */
|
|
24
|
+
maxFileWriteBytes: number;
|
|
25
|
+
/** Maximum file transfer size (bytes) */
|
|
26
|
+
maxTransferBytes: number;
|
|
27
|
+
/** Enable debug logging */
|
|
28
|
+
debug: boolean;
|
|
29
|
+
/** Rate limiting configuration */
|
|
30
|
+
rateLimit: {
|
|
31
|
+
enabled: boolean;
|
|
32
|
+
maxRequests: number;
|
|
33
|
+
windowMs: number;
|
|
34
|
+
perSession: {
|
|
35
|
+
enabled: boolean;
|
|
36
|
+
maxRequests: number;
|
|
37
|
+
windowMs: number;
|
|
38
|
+
};
|
|
39
|
+
};
|
|
40
|
+
/** Security settings */
|
|
41
|
+
security: {
|
|
42
|
+
allowRootLogin: boolean;
|
|
43
|
+
hostKeyPolicy: HostKeyPolicy;
|
|
44
|
+
knownHostsPath: string;
|
|
45
|
+
allowedCiphers: string[];
|
|
46
|
+
};
|
|
47
|
+
/** Policy settings enforced before risky operations */
|
|
48
|
+
policy: PolicyConfig;
|
|
49
|
+
/** Remote HTTP transport settings */
|
|
50
|
+
http: {
|
|
51
|
+
host: string;
|
|
52
|
+
port: number;
|
|
53
|
+
allowedOrigins: string[];
|
|
54
|
+
bearerTokenFile?: string;
|
|
55
|
+
enableLegacySse: boolean;
|
|
56
|
+
maxRequestBodyBytes: number;
|
|
57
|
+
maxSessions: number;
|
|
58
|
+
sessionIdleTtlMs: number;
|
|
59
|
+
publicUrl?: string;
|
|
60
|
+
trustProxy: boolean;
|
|
61
|
+
};
|
|
62
|
+
/** Remote ChatGPT/Claude connector settings */
|
|
63
|
+
connector: {
|
|
64
|
+
toolProfile: ToolProfile;
|
|
65
|
+
credentialProvider: ConnectorCredentialProvider;
|
|
66
|
+
credentialCommand?: string;
|
|
67
|
+
credentialCommandArgs: string[];
|
|
68
|
+
credentialCommandTimeoutMs: number;
|
|
69
|
+
defaultUsername?: string;
|
|
70
|
+
};
|
|
71
|
+
/** HTTP authorization settings for remote MCP clients */
|
|
72
|
+
auth: {
|
|
73
|
+
mode: "bearer" | "oauth";
|
|
74
|
+
oauthIssuer?: string;
|
|
75
|
+
oauthAudience?: string;
|
|
76
|
+
oauthJwksUrl?: string;
|
|
77
|
+
oauthResource?: string;
|
|
78
|
+
oauthRequiredScopes: string[];
|
|
79
|
+
oauthAllowedAlgorithms: string[];
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=config-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-types.d.ts","sourceRoot":"","sources":["../src/config-types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAC;AACvE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,kCAAkC;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,0CAA0C;IAC1C,YAAY,EAAE,MAAM,CAAC;IACrB,+CAA+C;IAC/C,iBAAiB,EAAE,MAAM,CAAC;IAC1B,8CAA8C;IAC9C,gBAAgB,EAAE,MAAM,CAAC;IACzB,gEAAgE;IAChE,qBAAqB,EAAE,MAAM,CAAC;IAC9B,kDAAkD;IAClD,eAAe,EAAE,MAAM,CAAC;IACxB,oDAAoD;IACpD,WAAW,EAAE,MAAM,CAAC;IACpB,wEAAwE;IACxE,iBAAiB,EAAE,MAAM,CAAC;IAC1B,yCAAyC;IACzC,gBAAgB,EAAE,MAAM,CAAC;IACzB,2BAA2B;IAC3B,KAAK,EAAE,OAAO,CAAC;IACf,kCAAkC;IAClC,SAAS,EAAE;QACT,OAAO,EAAE,OAAO,CAAC;QACjB,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE;YACV,OAAO,EAAE,OAAO,CAAC;YACjB,WAAW,EAAE,MAAM,CAAC;YACpB,QAAQ,EAAE,MAAM,CAAC;SAClB,CAAC;KACH,CAAC;IACF,wBAAwB;IACxB,QAAQ,EAAE;QACR,cAAc,EAAE,OAAO,CAAC;QACxB,aAAa,EAAE,aAAa,CAAC;QAC7B,cAAc,EAAE,MAAM,CAAC;QACvB,cAAc,EAAE,MAAM,EAAE,CAAC;KAC1B,CAAC;IACF,uDAAuD;IACvD,MAAM,EAAE,YAAY,CAAC;IACrB,qCAAqC;IACrC,IAAI,EAAE;QACJ,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,cAAc,EAAE,MAAM,EAAE,CAAC;QACzB,eAAe,CAAC,EAAE,MAAM,CAAC;QACzB,eAAe,EAAE,OAAO,CAAC;QACzB,mBAAmB,EAAE,MAAM,CAAC;QAC5B,WAAW,EAAE,MAAM,CAAC;QACpB,gBAAgB,EAAE,MAAM,CAAC;QACzB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,OAAO,CAAC;KACrB,CAAC;IACF,+CAA+C;IAC/C,SAAS,EAAE;QACT,WAAW,EAAE,WAAW,CAAC;QACzB,kBAAkB,EAAE,2BAA2B,CAAC;QAChD,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAC3B,qBAAqB,EAAE,MAAM,EAAE,CAAC;QAChC,0BAA0B,EAAE,MAAM,CAAC;QACnC,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,CAAC;IACF,yDAAyD;IACzD,IAAI,EAAE;QACJ,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC;QACzB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,mBAAmB,EAAE,MAAM,EAAE,CAAC;QAC9B,sBAAsB,EAAE,MAAM,EAAE,CAAC;KAClC,CAAC;CACH"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-types.js","sourceRoot":"","sources":["../src/config-types.ts"],"names":[],"mappings":""}
|