fast-mcp-ssh
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@fast-mcp-sshrun df -h on prod-web01"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
An MCP server that gives a model real SSH access:
One connection per host, held open across calls.
A PTY shell that remembers
cdandexport.SFTP instead of
cat > file, and host-to-host copies that skip your disk.A screenshot of the remote desktop.
Regex guards before anything leaves your machine.
An append-only audit log of every call.
Answers come back as TOON, roughly 40 percent fewer tokens than JSON on tabular data.
Install
cargo install fast-mcp-sshOr a prebuilt binary from the
latest release,
checked against SHA256SUMS.txt. Linux and macOS ship x86_64 and aarch64,
Windows x86_64.
Copy hosts.example.toml to ~/.fast-mcp-ssh/hosts.toml
and fill in your hosts. Keys go in ~/.fast-mcp-ssh/keys/<name>; auth is
key, agent or password.
Related MCP server: SSH MCP Server
Wire it up
.mcp.json, or claude_desktop_config.json for Claude Desktop:
{
"mcpServers": {
"ssh": {
"type": "stdio",
"command": "fast-mcp-ssh"
}
}
}Same block in Claude Code, Cursor, Windsurf, Zed, VS Code Copilot and anything else that speaks MCP over stdio.
In the MCP registry it is
mcp-name: io.github.klNuno/fast-mcp-ssh.
Tools
host is optional on every tool once [defaults] default_host is set.
Group | Tools | |
Run |
| One-shot, parallel fan-out, persistent PTY, Ctrl-C |
Files |
| SFTP, plus |
Visual |
| Screenshots the remote desktop, downscaled before it reaches the model |
Ops |
| Cached host profile, parsed |
Session |
| Discovery and lifecycle; |
Network |
| Local TCP forwards over the same connection |
Every tool carries MCP annotations (readOnlyHint, destructiveHint,
idempotentHint, openWorldHint) so a client can gate destructive calls.
Host-to-host copy
cp moves a file from one configured host to another. The bytes never land on
your disk and never reach the model, and a sha256 is compared on both ends
before success. Guards cover the destination too, so a read-only target still
refuses the write.
Remote screenshots
shot hands the model an image instead of a wall of text. It uses whichever of
grim, gnome-screenshot, spectacle, ImageMagick import or scrot the
host has, covering X11 and wlroots Wayland, and downscales locally so a 4K
screen is not a multi-megabyte payload.
Protocol
Speaks stateless MCP (2026-07-28) and every revision back to 2024-11-05,
picked per peer. Stateless changes three things:
Confirmations come back as an
input_requiredresult the client answers and retries (SEP-2322), because a server may no longer open a request of its own. Older peers keepelicitation/create.Long calls hand back a task handle to poll (SEP-2663):
execpast its 60s timeout,tailwithfollow=true. Clients without the extension keep the blocking call.tools/listis sorted, so it is byte-identical between restarts, and carries a one hourttlMs(SEP-2549). A client's prompt cache keeps hitting.
Shells are unaffected. A PTY has always been addressed by the host and
session arguments of the call, which is the explicit handle stateless wants.
Security
Guards run before any SSH packet leaves. deny_patterns refuse outright,
confirm_patterns ask the user, a client that cannot answer is denied, and
read_only = true blocks anything that looks like a write.
Paths are checked on both sides: remote reads of keys, shadow files and cloud
credentials, local writes into your ~/.bashrc or an autostart folder. Every
path-taking tool runs both checks, tail included, and re-checks once the
server has resolved the path, so a symlink cannot launder a blocked target. A
path that will not resolve refuses the call.
Host keys are pinned, TOFU by default, strict and per-host fingerprints
available. Every call lands in ~/.fast-mcp-ssh/audit.log as NDJSON, with
credentials scrubbed.
Guards stop accidents, not an adversary who controls the model. Scope the remote account accordingly. Threat model: SECURITY.md. Version history: CHANGELOG.md.
Benchmark
50 iterations per scenario, same Linux host, same LAN, same SSH key, client on
Windows 11. Medians, lower is better, measured on 0.5.0. Reproduce with
benchmark/, raw runs in
benchmark/results/.
| |||
Cold start | 48 ms | 280 ms | 260 ms |
| 2.2 ms | 89.7 ms | 46.7 ms |
| 3.6 ms | 90.9 ms | 50.6 ms |
| 19.6 ms | 90.4 ms 1 | 49.2 ms |
Write a 1 KB file | 1.1 ms | 89.9 ms | 47.9 ms |
Read a 1 KB file | 1.7 ms | 90.3 ms | 48.9 ms |
Tool surface, sent every session | 26 tools, 21.1 KB | 37 tools, 39.9 KB | 4 tools, 1.7 KB |
Both alternatives are Node, so ~250 ms of their cold start is the runtime
booting. The steady-state gap is the connection: fast-mcp-ssh holds one SSH
session per host and opens a channel per call, the other two reconnect. Writes
go over SFTP here, through a cat > file heredoc there.
returning the same output. ssh-mcp-server returns raw stdout with no exit
code, which is why its replies are the shortest and why a failed command looks
like a successful one.
Development
cargo install --path . # build and install from a clone
cargo test # unit tests
cargo clippy --all-targets # no warnings allowed in CI
./scripts/test-sh.ps1 # end-to-end against a real host (Windows)Never write to stdout outside the MCP transport: a stray println! corrupts
the JSON-RPC stream and the client disconnects without an error. tracing
macros go to stderr and are safe.
License
MIT.
↩mcp-ssh-managertruncates that response to 12 KB, so it is not
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Scoped, audited SSH exec, sessions, and SFTP on your saved servers without exposing credentials
Operate Linux, macOS and Windows from your LLM. Every action runs through an auditable allowlist.
- emisarOAuthdev.emisar
Let AI operate servers without SSH. Choose actions, approve risky changes, and audit every step.
Remote shell and detached long-running jobs on your own machines — no SSH, open ports or VPN.
Related MCP Servers
- AlicenseNot gradedqualityFmaintenanceEnables AI assistants to execute commands and transfer files on remote servers over SSH connections.1MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to securely execute commands, transfer files, and manage port forwarding on remote servers via SSH.9137Apache 2.0
- AlicenseAqualityDmaintenanceEnables AI agents to execute SSH commands, read files, and list directories on remote hosts with a configurable command-safety policy.5MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to have persistent, fully interactive SSH sessions into remote hosts, behaving like a local terminal.231MIT