# ssh-mcp-pro (npm · ssh-mcp-pro)

Secure MCP SSH automation server with policy controls, resources, prompts, stdio, and HTTP.

- Trust score: 67/100 (medium)
- Change this week: +43
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- npm · `ssh-mcp-pro`: 67/100 (this document), [markdown](https://verifymcp.io/servers/oaslananka-ssh-mcp-pro/ssh-mcp-pro.md), [page](https://verifymcp.io/servers/oaslananka-ssh-mcp-pro/ssh-mcp-pro)

## Channel facts

- Registry: `npm`
- Package: `ssh-mcp-pro`
- Version: `1.1.5`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-03.

- **Supply Chain Security**: 79/100
  - No malware found by supply-chain analysis.
  - CVE check failed: a known high-severity CVE affects @opentelemetry/propagator-jaeger 2.8.0, reached via @opentelemetry/sdk-node > @opentelemetry/propagator-jaeger. A fixed version is available.
  - No install/post-install scripts declared.
  - Only part of the dependency tree could be resolved (178 of 183), so this covers what we could see, not the whole tree.
- **Provenance & Transparency**: 45/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 35 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 79/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (good).
  - Tool/resource definitions use about 2528 tokens (~47/item across 53 items; 46 tools + 7 resources), lean.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 23/100
  - Stability observed for 7 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
  - Structured output schemas are declared (100% of tools); any adoption earns full credit.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### Claude

```bash
claude mcp add oaslananka-ssh-mcp-pro -- npx -y ssh-mcp-pro
```

### Codex

```bash
codex mcp add oaslananka-ssh-mcp-pro -- npx -y ssh-mcp-pro
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "oaslananka-ssh-mcp-pro": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "ssh-mcp-pro"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add oaslananka-ssh-mcp-pro --command npx --arg -y --arg ssh-mcp-pro
```

### Hermes

```yaml
mcp_servers:
  oaslananka-ssh-mcp-pro:
    command: "npx"
    args: ["-y", "ssh-mcp-pro"]
```

### Other

```json
{
  "mcpServers": {
    "oaslananka-ssh-mcp-pro": {
      "command": "npx",
      "args": [
        "-y",
        "ssh-mcp-pro"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-03 (score 67, +3)

- [functional improvement] Stability: unverified → 0.23

### 2026-08-02 (score 64, +33)

- [security regression] CVE-2026-59892 affects this package: high
- [security regression] Provenance: unverified → fail
- [security regression] Known CVEs: unverified → fail
- [security improvement] Install scripts: unverified → pass
- [security improvement] Malware scan: unverified → pass
- [security] Stability: Stability not yet verified: we do not have a sandbox capture of the MCP schema this version of the package serves yet.
- [functional regression] Schema quality: 100 → unverified
- [functional regression] Capabilities: pass → unverified
- [functional regression] Tool coverage: 100 → unverified
- [functional improvement] Schema quality: unverified → good
- [functional improvement] Maintenance: unverified → pass
- [functional improvement] License: unverified → pass
- [functional improvement] Dependency health: unverified → partial
- [functional] Licence: MIT

### 2026-08-01 (score 31, +5)

- [security] Stability: Stability not yet verified: not enough scan history yet (needs a 30-day window).
- [functional improvement] MCP protocol: unverified → pass

### 2026-07-31 (score 26, +2)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-30 (score 24, −2)

- [functional regression] Dependency health: partial → unverified

### 2026-07-28 (score 26, +2)

- [functional improvement] Dependency health: unverified → partial

### 2026-07-27 (score 24)

First indexed and scored.

## MCP tools (46)

### `connector_status` (~34 tokens)

Connector Status

Use this when ChatGPT or Claude needs to understand the remote connector profile, authentication mode, and credential broker readiness without exposing secrets.

Output parameters:

- `allowedOriginsConfigured` (boolean)
- `authMode` (string)
- `credentialBrokerConfigured` (boolean)
- `credentialEntryInChat` (boolean)
- `credentialProvider` (string)
- `destructiveExecutionDefault` (boolean)
- `hostAllowlistConfigured` (boolean)
- `httpSessionIdleTtlMs` (number)
- `maxHttpSessions` (number)
- `nonLoopbackHttpRequiresAuthAndOrigins` (boolean)
- `oauthConfigured` (boolean)
- `privateKeysInChat` (boolean)
- `publicUrlConfigured` (boolean)
- `rawCommandExecutionDefault` (boolean)
- `rawSudoExecutionDefault` (boolean)
- `safeRemoteToolsOnly` (boolean)
- `toolProfile` (string)

### `ssh_hosts_list` (~39 tokens)

List Safe SSH Host Aliases

Use this when ChatGPT or Claude needs a safe list of SSH host aliases that may be inspected through the remote connector. Sensitive login material is omitted.

Output parameters:

- `count` (number)
- `hostAllowlistConfigured` (boolean)
- `hostAllowlistRequired` (boolean)
- `hosts` (array)
- `redactedFields` (array)

### `ssh_policy_explain` (~101 tokens)

Explain SSH Policy

Use this when ChatGPT or Claude needs to explain whether a requested SSH inspection or mutation would be allowed. This is explain-only and does not execute commands or open tunnels.

Input parameters:

- `action` (string): Requested action class to evaluate without executing it
- `command` (string): Optional command to evaluate in explain mode
- `hostAlias` (string): Configured SSH host alias
- `path` (string): Optional remote path to evaluate in explain mode

Output parameters:

- `decision` (object)
- `executed` (boolean)
- `requiresExplicitUserConfirmation` (boolean)
- `toolProfile` (string)

### `ssh_host_inspect` (~75 tokens)

Inspect SSH Host

Use this when ChatGPT or Claude needs read-only host inspection through the server-side credential broker. The user supplies only a configured host alias and selected checks; no secret material or login details are accepted.

Input parameters:

- `checks` (array): Read-only checks to run
- `hostAlias` (string, required): Configured SSH host alias

Output parameters:

- `checks` (array)
- `credentialsFromChat` (boolean)
- `host` (string)
- `hostAlias` (string)
- `inspection` (object)
- `strictHostKeyVerification` (boolean)

### `ssh_mutation_plan` (~88 tokens)

Plan SSH Mutation

Use this when ChatGPT or Claude needs a non-executing plan for a remote SSH change. It never runs commands, writes files, uploads data, starts tunnels, or escalates privileges.

Input parameters:

- `category` (string): Change category used for policy explanation
- `goal` (string, required): Desired change to plan without executing
- `hostAlias` (string, required): Configured SSH host alias

Output parameters:

- `category` (string)
- `disallowedInRemoteConnectorProfile` (array)
- `executed` (boolean)
- `goal` (string)
- `hostAlias` (string)
- `policyDecision` (object)
- `requiredBeforeExecution` (array)

### `ssh_open_session` (~259 tokens)

Open SSH Session

Opens a new SSH session with authentication

Input parameters:

- `auth` (string): Authentication method (default: auto)
- `expectedHostKeySha256` (string): Pinned SHA-256 host key fingerprint, with or without SHA256: prefix
- `host` (string, required): SSH server hostname or IP
- `hostKeyPolicy` (string): SSH host key verification policy (default: strict)
- `knownHostsPath` (string): Path to known_hosts file
- `passphrase` (string): Passphrase for encrypted private key
- `password` (string): Password for authentication
- `policyMode` (string): Use explain to return the planned connection without opening SSH
- `port` (number): SSH port (default: 22)
- `privateKey` (string): Inline private key content
- `privateKeyPath` (string): Path to private key file
- `readyTimeoutMs` (number): Connection timeout in milliseconds (default: 20000)
- `strictHostKeyChecking` (boolean): Deprecated alias. Prefer hostKeyPolicy.
- `ttlMs` (number): Session TTL in milliseconds (default: 900000)
- `useAgent` (boolean): Use SSH agent for authentication
- `username` (string, required): SSH username

Output parameters:

- `expiresInMs` (number)
- `host` (string)
- `hostKeyPolicy` (string)
- `policyMode` (string)
- `sessionId` (string)
- `sftpAvailable` (boolean)
- `username` (string)
- `wouldConnect` (boolean)

### `ssh_close_session` (~27 tokens)

Close SSH Session

Closes an SSH session

Input parameters:

- `sessionId` (string, required): Session ID to close

Output parameters:

- `closed` (boolean)

### `ssh_list_sessions` (~18 tokens)

List SSH Sessions

Lists all active SSH sessions with their details

Output parameters:

- `count` (number)
- `sessions` (array)

### `ssh_ping` (~32 tokens)

Ping SSH Session

Checks if an SSH session is still alive and responsive

Input parameters:

- `sessionId` (string, required): SSH session ID to check

Output parameters:

- `alive` (boolean)
- `error` (string)
- `host` (string)
- `latencyMs` (number)
- `remainingMs` (number)
- `sessionId` (string)

### `ssh_list_configured_hosts` (~20 tokens)

List Configured Hosts

Lists all hosts configured in ~/.ssh/config

Output parameters:

- `count` (number)
- `hosts` (array)

### `ssh_resolve_host` (~36 tokens)

Resolve SSH Host

Resolves a host alias from ~/.ssh/config to connection parameters

Input parameters:

- `hostAlias` (string, required): Host alias from SSH config

Output parameters:

- `host` (string)
- `port` (number)
- `privateKeyPath` (string)
- `proxyJump` (string)
- `username` (string)

### `proc_exec` (~76 tokens)

Execute Remote Command

Executes a non-interactive command on the remote system after policy and safety checks

Input parameters:

- `command` (string, required): Command to execute
- `cwd` (string): Working directory
- `env` (object): Environment variables
- `sessionId` (string, required): SSH session ID
- `timeoutMs` (number): Command execution timeout in milliseconds

Output parameters:

- `code` (number)
- `durationMs` (number)
- `safetyWarning` (string)
- `stderr` (string)
- `stdout` (string)

### `proc_sudo` (~70 tokens)

Execute Sudo Command

Executes a command with sudo privileges only when allowRawSudo policy permits it

Input parameters:

- `command` (string, required): Command to execute with sudo
- `cwd` (string): Working directory
- `sessionId` (string, required): SSH session ID
- `timeoutMs` (number): Command execution timeout in milliseconds

Output parameters:

- `code` (number)
- `durationMs` (number)
- `safetyWarning` (string)
- `stderr` (string)
- `stdout` (string)

### `proc_list` (~31 tokens)

List Processes

Lists running processes on the remote system sorted by CPU usage

Input parameters:

- `sessionId` (string, required): SSH session ID

Output parameters:

- `code` (number)
- `durationMs` (number)
- `safetyWarning` (string)
- `stderr` (string)
- `stdout` (string)

### `proc_kill` (~56 tokens)

Signal Process

Sends a signal to a running process by PID

Input parameters:

- `pid` (number, required): Process ID to signal
- `sessionId` (string, required): SSH session ID
- `signal` (string): Signal to send (default: SIGTERM)

Output parameters:

- `code` (number)
- `durationMs` (number)
- `safetyWarning` (string)
- `stderr` (string)
- `stdout` (string)

### `proc_exec_stream` (~70 tokens)

Execute Streaming Command

Executes a command and returns streaming output chunks

Input parameters:

- `command` (string, required): Command to execute
- `cwd` (string): Working directory
- `env` (object): Environment variables
- `sessionId` (string, required): SSH session ID
- `timeoutMs` (number): Streaming command timeout in milliseconds

Output parameters:

- `chunks` (array)
- `code` (number)
- `durationMs` (number)
- `safetyWarning` (string)
- `stderr` (string)
- `stdout` (string)
- `truncated` (boolean)

### `fs_read` (~68 tokens)

Read Remote File

Reads a file from the remote system

Input parameters:

- `encoding` (string): File encoding (default: utf8)
- `maxBytes` (number): Optional per-request read size limit in bytes
- `path` (string, required): File path to read
- `sessionId` (string, required): SSH session ID

Output parameters:

- `content` (string)

### `fs_write` (~62 tokens)

Write Remote File

Writes data to a file on the remote system

Input parameters:

- `data` (string, required): Data to write to file
- `mode` (number): File permissions mode
- `path` (string, required): File path to write
- `sessionId` (string, required): SSH session ID

Output parameters:

- `ok` (boolean)

### `fs_stat` (~35 tokens)

Stat Remote Path

Gets file or directory statistics

Input parameters:

- `path` (string, required): Path to stat
- `sessionId` (string, required): SSH session ID

Output parameters:

- `mode` (number)
- `mtime` (string)
- `size` (number)
- `type` (string)

### `fs_list` (~61 tokens)

List Remote Directory

Lists directory contents

Input parameters:

- `limit` (number): Maximum items per page (default: 100)
- `page` (number): Page number for pagination
- `path` (string, required): Directory path to list
- `sessionId` (string, required): SSH session ID

Output parameters:

- `entries` (array)
- `nextToken` (string)

### `fs_mkdirp` (~36 tokens)

Create Remote Directories

Creates directories recursively

Input parameters:

- `path` (string, required): Directory path to create
- `sessionId` (string, required): SSH session ID

Output parameters:

- `ok` (boolean)

### `fs_rmrf` (~36 tokens)

Remove Remote Path Recursively

Removes files or directories recursively

Input parameters:

- `path` (string, required): Path to remove
- `sessionId` (string, required): SSH session ID

Output parameters:

- `ok` (boolean)

### `fs_rename` (~47 tokens)

Rename Remote Path

Renames or moves a file/directory

Input parameters:

- `from` (string, required): Source path
- `sessionId` (string, required): SSH session ID
- `to` (string, required): Destination path

Output parameters:

- `ok` (boolean)

### `ensure_package` (~46 tokens)

Ensure Package State

Ensures a package is installed or removed

Input parameters:

- `name` (string, required): Package name
- `sessionId` (string, required): SSH session ID
- `state` (string): Desired state

Output parameters:

- `code` (number)
- `ok` (boolean)
- `pm` (string)
- `stderr` (string)
- `stdout` (string)

### `ensure_service` (~47 tokens)

Ensure Service State

Ensures a service is in the desired state

Input parameters:

- `name` (string, required): Service name
- `sessionId` (string, required): SSH session ID
- `state` (string, required): Desired state

Output parameters:

- `ok` (boolean)

### `ensure_lines_in_file` (~77 tokens)

Ensure Lines In File

Ensures specific lines are present or absent in a file

Input parameters:

- `createIfMissing` (boolean): Create file if it does not exist
- `lines` (array, required): Lines to manage
- `path` (string, required): File path
- `sessionId` (string, required): SSH session ID
- `state` (string): Desired state

Output parameters:

- `added` (number)
- `ok` (boolean)

### `patch_apply` (~51 tokens)

Apply Patch

Applies a patch to a file

Input parameters:

- `diff` (string, required): Patch content (unified diff format)
- `path` (string, required): File path to patch
- `sessionId` (string, required): SSH session ID

Output parameters:

- `changed` (boolean)
- `ok` (boolean)

### `os_detect` (~27 tokens)

Detect Remote OS

Detects operating system and environment information

Input parameters:

- `sessionId` (string, required): SSH session ID

Output parameters:

- `arch` (string)
- `defaultShell` (string)
- `distro` (string)
- `init` (string)
- `packageManager` (string)
- `platform` (string)
- `shell` (string)
- `tempDir` (string)
- `version` (string)

### `get_metrics` (~34 tokens)

Get Runtime Metrics

Returns server metrics including session counts, command statistics, and uptime

Input parameters:

- `format` (string): Output format (default: json)

### `service_list` (~29 tokens)

List Services

Lists all systemd services and their current state

Input parameters:

- `sessionId` (string, required): SSH session ID

Output parameters:

- `code` (number)
- `durationMs` (number)
- `safetyWarning` (string)
- `stderr` (string)
- `stdout` (string)

### `service_status` (~45 tokens)

Service Status

Gets the status of a systemd service

Input parameters:

- `name` (string, required): Service name (e.g. nginx or nginx.service)
- `sessionId` (string, required): SSH session ID

Output parameters:

- `code` (number)
- `durationMs` (number)
- `safetyWarning` (string)
- `stderr` (string)
- `stdout` (string)

### `service_logs` (~56 tokens)

Service Logs

Reads recent journal logs for a systemd service

Input parameters:

- `lines` (number): Number of log lines to return (default: 50)
- `name` (string, required): Service name
- `sessionId` (string, required): SSH session ID

Output parameters:

- `code` (number)
- `durationMs` (number)
- `safetyWarning` (string)
- `stderr` (string)
- `stdout` (string)

### `service_restart` (~35 tokens)

Restart Service

Restarts a systemd service

Input parameters:

- `name` (string, required): Service name
- `sessionId` (string, required): SSH session ID

Output parameters:

- `code` (number)
- `durationMs` (number)
- `safetyWarning` (string)
- `stderr` (string)
- `stdout` (string)

### `service_stop` (~34 tokens)

Stop Service

Stops a systemd service

Input parameters:

- `name` (string, required): Service name
- `sessionId` (string, required): SSH session ID

Output parameters:

- `code` (number)
- `durationMs` (number)
- `safetyWarning` (string)
- `stderr` (string)
- `stdout` (string)

### `disk_usage` (~47 tokens)

Disk Usage

Reports disk usage for filesystems on the remote system

Input parameters:

- `path` (string): Optional path to check (default: all filesystems)
- `sessionId` (string, required): SSH session ID

Output parameters:

- `code` (number)
- `durationMs` (number)
- `safetyWarning` (string)
- `stderr` (string)
- `stdout` (string)

### `memory_info` (~27 tokens)

Memory Info

Reports memory usage on the remote system

Input parameters:

- `sessionId` (string, required): SSH session ID

Output parameters:

- `code` (number)
- `durationMs` (number)
- `safetyWarning` (string)
- `stderr` (string)
- `stdout` (string)

### `cpu_usage` (~30 tokens)

CPU Usage

Reports CPU load average and uptime on the remote system

Input parameters:

- `sessionId` (string, required): SSH session ID

Output parameters:

- `code` (number)
- `durationMs` (number)
- `safetyWarning` (string)
- `stderr` (string)
- `stdout` (string)

### `net_interfaces` (~31 tokens)

Network Interfaces

Lists network interfaces and their IP addresses on the remote system

Input parameters:

- `sessionId` (string, required): SSH session ID

Output parameters:

- `code` (number)
- `durationMs` (number)
- `safetyWarning` (string)
- `stderr` (string)
- `stdout` (string)

### `port_check` (~66 tokens)

Port Check

Checks which processes are listening on a specific port

Input parameters:

- `host` (string): Host to check (default: 127.0.0.1)
- `port` (number, required): Port number to check (1-65535)
- `sessionId` (string, required): SSH session ID

Output parameters:

- `code` (number)
- `durationMs` (number)
- `safetyWarning` (string)
- `stderr` (string)
- `stdout` (string)

### `log_tail` (~80 tokens)

Tail Log

Tails the end of a log file or reads recent journal entries for a service

Input parameters:

- `lines` (number): Number of lines to return (default: 50)
- `path` (string): Absolute path to a log file
- `service` (string): Systemd service name for journal logs
- `sessionId` (string, required): SSH session ID

Output parameters:

- `code` (number)
- `durationMs` (number)
- `safetyWarning` (string)
- `stderr` (string)
- `stdout` (string)

### `file_upload` (~54 tokens)

Upload File

Uploads a local file to the remote host over SFTP

Input parameters:

- `localPath` (string, required): Local file path
- `remotePath` (string, required): Remote file path
- `sessionId` (string, required): SSH session ID

Output parameters:

- `averageSpeed` (number)
- `durationMs` (number)
- `filename` (string)
- `sha256` (string)
- `size` (number)
- `success` (boolean)
- `verified` (boolean)

### `file_download` (~53 tokens)

Download File

Downloads a remote file to the local machine over SFTP

Input parameters:

- `localPath` (string, required): Local file path
- `remotePath` (string, required): Remote file path
- `sessionId` (string, required): SSH session ID

Output parameters:

- `averageSpeed` (number)
- `durationMs` (number)
- `filename` (string)
- `sha256` (string)
- `size` (number)
- `success` (boolean)
- `verified` (boolean)

### `tunnel_local_forward` (~59 tokens)

Create Local SSH Tunnel

Creates a local SSH port forward

Input parameters:

- `localPort` (number, required): Local TCP port
- `remoteHost` (string, required): Remote host
- `remotePort` (number, required): Remote TCP port
- `sessionId` (string, required): SSH session ID

Output parameters:

- `active` (boolean)
- `createdAt` (number)
- `id` (string)
- `localHost` (string)
- `localPort` (number)
- `remoteHost` (string)
- `remotePort` (number)
- `sessionId` (string)
- `type` (string)

### `tunnel_remote_forward` (~59 tokens)

Create Remote SSH Tunnel

Creates a remote SSH port forward

Input parameters:

- `localHost` (string, required): Local host
- `localPort` (number, required): Local TCP port
- `remotePort` (number, required): Remote TCP port
- `sessionId` (string, required): SSH session ID

Output parameters:

- `active` (boolean)
- `createdAt` (number)
- `id` (string)
- `localHost` (string)
- `localPort` (number)
- `remoteHost` (string)
- `remotePort` (number)
- `sessionId` (string)
- `type` (string)

### `tunnel_close` (~24 tokens)

Close SSH Tunnel

Closes an active tunnel

Input parameters:

- `tunnelId` (string, required): Tunnel identifier

Output parameters:

- `closed` (boolean)

### `tunnel_list` (~30 tokens)

List SSH Tunnels

Lists active tunnels, optionally filtered by session

Input parameters:

- `sessionId` (string): Optional SSH session ID filter

Output parameters:

- `count` (number)
- `tunnels` (array)

## Diagnostics

Captured diagnostic sections: Provenance, Vulnerabilities, Dependencies. The full working is on the page: https://verifymcp.io/servers/oaslananka-ssh-mcp-pro/ssh-mcp-pro#diagnostics

## Score history

- 2026-08-03: 67
- 2026-08-02: 64
- 2026-08-01: 31
- 2026-07-31: 26
- 2026-07-30: 24
- 2026-07-28: 26
- 2026-07-27: 24

## Links

- npm package: https://www.npmjs.com/package/ssh-mcp-pro
- Socket report: https://socket.dev/npm/package/ssh-mcp-pro
- Repository: https://github.com/oaslananka/ssh-mcp-pro
- Changelog RSS feed: https://verifymcp.io/servers/oaslananka-ssh-mcp-pro/ssh-mcp-pro/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/oaslananka-ssh-mcp-pro/ssh-mcp-pro/changelog.json
- HTML version of this page: https://verifymcp.io/servers/oaslananka-ssh-mcp-pro/ssh-mcp-pro
