@yawlabs/ssh-mcp 0.17.0 → 0.17.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/README.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # @yawlabs/ssh-mcp
2
2
 
3
+ [![Add to Yaw MCP](https://yaw.sh/yaw-mcp-button.svg)](https://yaw.sh/mcp/install?name=SSH&command=npx&args=-y%2C%40yawlabs%2Fssh-mcp&description=Run%20commands%20on%20remote%20hosts%2C%20transfer%20files%2C%20manage%20SSH%20tunnels%20and%20keys&source=https%3A%2F%2Fgithub.com%2FYawLabs%2Fssh-mcp)
4
+
5
+ One click adds this to your local Yaw MCP config so it's available in every Yaw Terminal session. Or install manually below.
6
+
3
7
  [![npm version](https://img.shields.io/npm/v/@yawlabs/ssh-mcp)](https://www.npmjs.com/package/@yawlabs/ssh-mcp)
4
8
  [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)
5
9
 
@@ -7,10 +11,6 @@
7
11
 
8
12
  Built and maintained by [Yaw Labs](https://yaw.sh).
9
13
 
10
- [![Add to Yaw MCP](https://yaw.sh/yaw-mcp-button.svg)](https://yaw.sh/mcp/install?name=SSH&command=npx&args=-y%2C%40yawlabs%2Fssh-mcp&description=Run%20commands%20on%20remote%20hosts%2C%20transfer%20files%2C%20manage%20SSH%20tunnels%20and%20keys&source=https%3A%2F%2Fgithub.com%2FYawLabs%2Fssh-mcp)
11
-
12
- One click adds this to your local Yaw MCP config so it's available in every Yaw Terminal session. Or install manually below.
13
-
14
14
  ## The problem
15
15
 
16
16
  AI CLI tools run in subprocesses where SSH is constantly broken. The agent tries to `git pull` and gets `Permission denied (publickey)`. It tries to SSH into a server and the agent socket is stale. It tries to deploy and the host key changed because the instance was recreated. Every time, the AI has no idea what's wrong and spirals.
@@ -326,23 +326,23 @@ for (const check of report.checks) {
326
326
 
327
327
  ## Runtime selection
328
328
 
329
- The `ssh-mcp` command — what `npx @yawlabs/ssh-mcp` runs — is a small launcher. It prefers the [oam](https://oamjs.org) runtime and otherwise runs the server on Node, so oam is optional. Its minimum is the **latest oam release, currently 0.15.2**, and it never serves on an older oam.
329
+ The `ssh-mcp` command — what `npx @yawlabs/ssh-mcp` runs — is a small launcher. It prefers the [oam](https://oamjs.org) runtime and otherwise runs the server on Node, so oam is optional. Its minimum is the **latest oam release, currently 0.18.0**, and it never serves on an older oam.
330
330
 
331
331
  Two environment variables control the choice; set them in your MCP client's `env` block:
332
332
 
333
333
  - `SSH_MCP_RUNTIME` — which runtime to use. Case-insensitive; any value other than `oam` or `node` behaves as `auto`.
334
- - `auto` (default) — use the newest oam it can find at 0.15.2 or newer, otherwise run on Node.
334
+ - `auto` (default) — use the newest oam it can find at 0.18.0 or newer, otherwise run on Node.
335
335
  - `oam` — require oam. Fails loudly: if no usable oam is found, the launcher prints what it found and why each one was passed over to stderr, and exits with status 1 instead of starting the server.
336
336
  - `node` — always Node. The launcher does not look for oam, and `OAM_BIN` is ignored.
337
- - `OAM_BIN` — path to an oam binary to use in preference to discovery, when it is 0.15.2 or newer. If it does not exist, is older, or will not run, the launcher says so on stderr and carries on with discovery.
337
+ - `OAM_BIN` — path to an oam binary to use in preference to discovery, when it is 0.18.0 or newer. If it does not exist, is older, or will not run, the launcher says so on stderr and carries on with discovery.
338
338
 
339
- Discovery looks in `%LOCALAPPDATA%\oam\bin` (Windows only), then `~/.oam/bin`, then every directory on `PATH`; asks every oam binary it finds for its version; and uses the newest one at 0.15.2 or newer. On a tie the one found first wins, so an installed copy beats one on `PATH`. On Windows only `oam.exe` counts: an `oam.cmd`/`oam.bat` shim on `PATH` is never run, and is named on stderr when no usable oam is found.
339
+ Discovery looks in `%LOCALAPPDATA%\oam\bin` (Windows only), then `~/.oam/bin`, then every directory on `PATH`; asks every oam binary it finds for its version; and uses the newest one at 0.18.0 or newer. On a tie the one found first wins, so an installed copy beats one on `PATH`. On Windows only `oam.exe` counts: an `oam.cmd`/`oam.bat` shim on `PATH` is never run, and is named on stderr when no usable oam is found.
340
340
 
341
- By default an unusable oam is not an error. When Node starts the launcher (`npx` or a global install, run directly by your MCP client), `auto` mode falls back to Node — silently when there was nothing to find, or with a note on stderr naming each oam (and `OAM_BIN`) it passed over and why: older than 0.15.2, not runnable, or a shim. A chosen oam that then fails to start is named on stderr too. When an older oam starts the launcher, the handoff to Node is always noted on stderr (see below). With `SSH_MCP_RUNTIME=oam`, each of these cases exits with status 1 instead.
341
+ By default an unusable oam is not an error. When Node starts the launcher (`npx` or a global install, run directly by your MCP client), `auto` mode falls back to Node — silently when there was nothing to find, or with a note on stderr naming each oam (and `OAM_BIN`) it passed over and why: older than 0.18.0, not runnable, or a shim. A chosen oam that then fails to start is named on stderr too. When an older oam starts the launcher, the handoff to Node is always noted on stderr (see below). With `SSH_MCP_RUNTIME=oam`, each of these cases exits with status 1 instead.
342
342
 
343
343
  When the launcher is itself started by oam (`oam run <path>/bin/ssh-mcp.mjs`, which is how Yaw MCP starts an `npx @yawlabs/ssh-mcp` entry when a recent oam is installed):
344
344
 
345
- - On oam 0.15.2 or newer it runs the server on that oam, in the same process. Nothing is discovered or spawned, `OAM_BIN` is not read, and `SSH_MCP_RUNTIME=oam` counts it as the oam it requires.
345
+ - On oam 0.18.0 or newer it runs the server on that oam, in the same process. Nothing is discovered or spawned, `OAM_BIN` is not read, and `SSH_MCP_RUNTIME=oam` counts it as the oam it requires.
346
346
  - On an older oam it never runs the server there. It hands the server off to the newest usable oam it can find, or to Node on `PATH`, or exits with status 1 when there is neither (`SSH_MCP_RUNTIME=oam` exits with status 1 rather than handing off to Node).
347
347
  - With `SSH_MCP_RUNTIME=node` it hands the server off to Node on `PATH`, whatever the oam version.
348
348
 
@@ -366,10 +366,10 @@ On Windows, add the same `env` block to the `cmd /c` form from [Quick start](#qu
366
366
 
367
367
  - Node.js 18+
368
368
  - SSH client installed (for diagnostics and environment management)
369
- - Optional: [oam](https://oamjs.org) 0.15.2+ — see [Runtime selection](#runtime-selection)
369
+ - Optional: [oam](https://oamjs.org) 0.18.0+ — see [Runtime selection](#runtime-selection)
370
370
 
371
371
  ## License
372
372
 
373
373
  MIT
374
374
 
375
- [![Follow @TokenLimitNews on X](https://img.shields.io/badge/follow-%40TokenLimitNews-000000?logo=x&logoColor=white)](https://x.com/TokenLimitNews)
375
+ [![Follow @YawLabs on X](https://img.shields.io/badge/follow-%40YawLabs-000000?logo=x&logoColor=white)](https://x.com/YawLabs)
package/bin/ssh-mcp.mjs CHANGED
@@ -40,7 +40,7 @@
40
40
  * named on stderr, and discovery carries on. It used to stop everything: a typo
41
41
  * in OAM_BIN meant Node, with no hint why. The discovered binaries that were
42
42
  * passed over, and any .cmd/.bat shim on PATH, are named only when NO usable
43
- * oam is found -- with 0.9.0 installed and 0.15.2 on PATH, stderr stays empty.
43
+ * oam is found -- with 0.9.0 installed and 0.18.0 on PATH, stderr stays empty.
44
44
  *
45
45
  * ALREADY RUNNING ON OAM
46
46
  * A host can resolve this package's `bin` and launch `oam run <this file>`
@@ -77,7 +77,7 @@
77
77
  * wired up here.
78
78
  *
79
79
  * MINIMUM OAM VERSION
80
- * The latest oam release, 0.15.2 -- bump OAM_MIN when oam ships a newer one.
80
+ * The latest oam release, 0.18.0 -- bump OAM_MIN when oam ships a newer one.
81
81
  * Only the current oam is used and verified; an older one is passed over.
82
82
  * The floor is not cosmetic: before 0.9.0 `child_process.execFile` ran its
83
83
  * arguments through a SHELL, `exec` accepted `timeout` and ignored it,
@@ -104,7 +104,7 @@ import { delimiter, join } from "node:path";
104
104
  import { fileURLToPath } from "node:url";
105
105
 
106
106
  /** Oldest oam whose `child_process` matches Node. See MINIMUM OAM VERSION above. */
107
- const OAM_MIN = [0, 15, 2];
107
+ const OAM_MIN = [0, 18, 0];
108
108
 
109
109
  /**
110
110
  * Bound on each `oam --version` probe. A healthy oam answers in milliseconds;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yawlabs/ssh-mcp",
3
- "version": "0.17.0",
3
+ "version": "0.17.2",
4
4
  "mcpName": "io.github.YawLabs/ssh-mcp",
5
5
  "description": "SSH MCP server: run remote commands, transfer files over SFTP, manage ssh-agent keys and known_hosts, and auto-diagnose SSH failures.",
6
6
  "type": "module",
@@ -63,7 +63,7 @@
63
63
  "node": ">=18"
64
64
  },
65
65
  "dependencies": {
66
- "@modelcontextprotocol/sdk": "^1.30.0",
66
+ "@modelcontextprotocol/sdk": "^1.32.1",
67
67
  "ssh2": "^1.17.0",
68
68
  "zod": "^4.4.3"
69
69
  },