MCP server for SSH remote command execution
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
Source-derived launch command. Check the maintainer’s required arguments and credentials before running:
npx -y @danielecr/realssh-mcpMerge this template into ~/Library/Application Support/Claude/claude_desktop_config.json. Keep existing servers. Add any arguments, credentials, and permissions required by the maintainer; this template has not been install-tested.
{
"mcpServers": {
"io-github-danielecr-realssh-mcp": {
"command": "npx",
"args": [
"-y",
"@danielecr/realssh-mcp"
]
}
}
}Restart Claude Desktop completely for changes to take effect. Confirm the server appears connected in the client’s tool list, then try a read-only example from its documentation.
Claude Desktop setup reference@danielecr/realssh-mcpnpmio.github.danielecr/realssh-mcp works with any MCP-compatible client. Copy the config snippet from the Configuration section above and add it to the file shown for your client, then restart the application.
~/Library/Application Support/Claude/claude_desktop_config.jsonRestart Claude Desktop completely for changes to take effect.~/.cursor/mcp.jsonRestart Cursor for changes to take effect..vscode/mcp.jsonReload VS Code window for changes to take effect.~/.codeium/windsurf/mcp_config.jsonRestart Windsurf for changes to take effect..mcp.jsonSave at the project root, then start Claude Code in that project and review the MCP server approval prompt. Keep real credentials out of shared files.