This takes the pragmatic approach of shelling out to your system's ssh binary instead of reimplementing the protocol in Node. That means your existing ssh-agent sessions, ProxyCommand directives, jump hosts, and ~/.ssh/config aliases all work without translation. You get two tools: ssh_execute for running commands and ssh_test for connectivity checks. Both return stdout, stderr, and exit codes. Useful when you need Claude to run remote diagnostics, check service status, or gather system metrics from production boxes without building API wrappers around everything. Commands respect your local SSH configuration, so if you've already got bastion routing and key management set up, it just works.
A Model Context Protocol (MCP) server that enables SSH remote command execution by delegating entirely to the system ssh binary. This means ssh-agent, ProxyCommand, ~/.ssh/config, jump hosts, and every other OS-level SSH feature work out of the box — no Node.js crypto, no native addons.
Instead of implementing the SSH protocol in Node.js, this server spawns ssh as a child process and pipes the output back to the MCP client. Authentication, key discovery, and connection routing are handled by your OS, exactly as if you ran ssh yourself in a terminal.
Requirements: ssh must be installed and available in PATH (standard on macOS and Linux).
ssh-agent, ~/.ssh/config, and key files automaticallyssh_test tool to verify reachability before running commandssshnpm install -g @danielecr/realssh-mcp
git clone https://github.com/danielecr/realssh-mcp.git
cd realssh-mcp
npm install
npm run build
After installing the package globally, add the server to your MCP configuration. In VS Code, open the MCP config file via Command Palette → MCP: Open User Configuration and add:
{
"servers": {
"realssh": {
"type": "stdio",
"command": "realssh-mcp"
}
}
}
Then run MCP: List Servers to verify the server is active.
ssh_executeExecute a command on a remote server via SSH.
Parameters:
host (string, required): SSH server hostname or IP addresscommand (string, required): Command to execute on the remote serverusername (string, optional): SSH username. Defaults to the current OS userport (number, optional): SSH server port (default: 22)timeout (number, optional): Command timeout in milliseconds (default: 30000)agentForward (boolean, optional): Enable SSH agent forwarding -A (default: false)extraArgs (string[], optional): Extra SSH arguments (e.g., ["-o", "StrictHostKeyChecking=no"])Example:
{
"host": "prod-web-01",
"command": "df -h"
}
{
"host": "192.168.1.100",
"username": "deploy",
"command": "systemctl status nginx"
}
ssh_testTest SSH connectivity to a remote host (runs echo ok and checks the response).
Parameters:
host (string, required): SSH server hostname or IP addressusername (string, optional): SSH usernameport (number, optional): SSH server port (default: 22)extraArgs (string[], optional): Extra SSH argumentsHosts, aliases, jump hosts, and identity files are configured in ~/.ssh/config — not in the MCP server. This is intentional: the OS ssh binary reads that file natively.
Example ~/.ssh/config:
Host prod
HostName prod.example.com
User deploy
ProxyJump bastion
Host bastion
HostName bastion.example.com
User admin
IdentityFile ~/.ssh/bastion_ed25519
With the above config, "host": "prod" works with no extra parameters.
BatchMode=yes is set by default, preventing the ssh process from hanging on interactive prompts.MIT