# SSH MCP Server
An MCP (Model Context Protocol) server that provides SSH access with Warp-like terminal experience. Connect to remote servers, execute commands, transfer files, and manage interactive shell sessions.
## Installation
```bash
npm install -g @kpanuragh/ssh-mcp
```
Or run directly with npx:
```bash
npx @kpanuragh/ssh-mcp
```
## Features
- **SSH Connection Management** - Multiple concurrent connections with session persistence
- **Command Execution** - Run commands with stdout/stderr capture and exit codes
- **SFTP Operations** - Upload, download, and list files on remote servers
- **Interactive Shell** - PTY-based shell sessions for interactive commands
- **Authentication** - Support for both password and SSH key authentication
## MCP Tools
| Tool | Description |
|------|-------------|
| `ssh_connect` | Establish SSH connection to a remote server |
| `ssh_exec` | Execute a command on connected server |
| `ssh_disconnect` | Close an SSH session |
| `ssh_list_sessions` | List all active SSH sessions |
| `sftp_upload` | Upload a file to remote server |
| `sftp_download` | Download a file from remote server |
| `sftp_list` | List files in remote directory |
| `ssh_shell_start` | Start interactive shell session |
| `ssh_shell_send` | Send input to interactive shell |
| `ssh_shell_read` | Read output from interactive shell |
| `ssh_shell_close` | Close interactive shell session |
## Usage with Claude Desktop
Add to your `claude_desktop_config.json`:
```json
{
"mcpServers": {
"ssh": {
"command": "npx",
"args": ["@kpanuragh/ssh-mcp"]
}
}
}
```
## Example Workflow
### 1. Connect to a server
```json
{
"tool": "ssh_connect",
"arguments": {
"host": "example.com",
"username": "user",
"password": "password"
}
}
```
Or with SSH key:
```json
{
"tool": "ssh_connect",
"arguments": {
"host": "example.com",
"username": "user",
"privateKeyPath": "/home/user/.ssh/id_rsa"
}
}
```
### 2. Execute commands
```json
{
"tool": "ssh_exec",
"arguments": {
"sessionId": "uuid-from-connect",
"command": "ls -la"
}
}
```
### 3. Transfer files
```json
{
"tool": "sftp_upload",
"arguments": {
"sessionId": "uuid-from-connect",
"localPath": "/local/file.txt",
"remotePath": "/remote/file.txt"
}
}
```
### 4. Interactive shell
```json
{
"tool": "ssh_shell_start",
"arguments": {
"sessionId": "uuid-from-connect"
}
}
```
```json
{
"tool": "ssh_shell_send",
"arguments": {
"sessionId": "uuid-from-connect",
"shellId": "shell-uuid",
"input": "cd /var/log\n"
}
}
```
### 5. Disconnect
```json
{
"tool": "ssh_disconnect",
"arguments": {
"sessionId": "uuid-from-connect"
}
}
```
## License
MIT