NikolaNddTesla/ssh-mcp-server
Project Overview
SSH MCP Server (@nl4ever/sshmcp)
MCP server that gives AI assistants SSH and SFTP access to manage remote servers via natural language.
True Intent (AI Assessment)
Bridge AI assistants to remote servers by exposing SSH/SFTP operations as MCP tools.
README Accuracy
Notes
Functionality matches the README. Caveats: plaintext credential storage in ~/.ssh-mcp/config.json (documented), version drift between package.json (2.2.3) and server.json (1.2.1), GitHub license field is NOASSERTION despite MIT in package.json, and no test suite. Users granting an LLM SSH root-level access should understand the operational risk.
This is a Model Context Protocol (MCP) server written in TypeScript that exposes SSH and SFTP operations as tools an AI assistant (like Claude Desktop, Claude Code, or Cursor) can invoke. It wraps the ssh2 Node.js library and presents around 21 tools covering connection management, command execution, file transfer, proxy handling, and jump host routing. It runs locally over stdio and is distributed as an npm package with a `sshmcp` CLI binary.
The problem it addresses is the gap between AI chat interfaces and real infrastructure. Normally an AI can only suggest shell commands; here, it can actually connect to servers, run commands, upload/download files, and orchestrate deployments through conversational prompts. A key design goal is 'zero-token' file transfer: SFTP moves files between local disk and remote hosts by path, so file contents never enter the AI's context window (saving tokens and avoiding leakage of large binaries into the LLM).
The intended users are developers and DevOps engineers who use MCP-compatible AI clients and want to delegate remote server tasks — deployments, log tailing, config edits, file syncs — to an AI agent. Users install globally via npm, register the server with their MCP client, then instruct the AI to `add_server`, `execute`, `upload_file`, etc. Configurations (servers, proxies, credentials) persist to `~/.ssh-mcp/config.json`.
Internally, `src/index.ts` registers MCP tools and maintains an in-memory connection pool (`Map<string, SshManager>`) keyed by server_id, auto-connecting on demand and reconnecting on drop. `src/ssh-manager.ts` wraps ssh2's Client, supports password/private-key/ssh-agent/keyboard-interactive auth, routes traffic through SOCKS4/5 proxies via the `socks` package, and implements SSH ProxyJump by opening a forwarded TCP socket through a bastion. Large transfers can run asynchronously with progress tracking (`tf_N` task IDs), and directory transfers use tar.gz compression on the remote side for efficiency.
Notable observations: credentials including passwords are stored in plaintext in `~/.ssh-mcp/config.json` (the README explicitly warns about this). The MIT license is declared in package.json/README but GitHub reports NOASSERTION. There is a version mismatch between package.json (2.2.3) and server.json (1.2.1). No tests are present. The code itself is straightforward and appears to do exactly what it advertises — no obvious backdoors, exfiltration, or hidden network calls beyond user-configured SSH/SOCKS targets.
| Languages | TypeScript, JavaScript |
| Runtime | Node.js >= 18 |
| Framework | Model Context Protocol SDK |
| Database | None (JSON file at ~/.ssh-mcp/config.json) |
| Package Manager | npm |
| Key Dependencies | @modelcontextprotocol/sdk, ssh2, socks, zod |
| Build Tool | TypeScript compiler (tsc) |
| Test Framework | None detected |