Skip to main content
Glama
README.md
# 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

TDQS

A3.6/5.0

Scored across 11 tools

Disambiguation5/5

Each tool targets a distinct operation: connection management, command execution, file transfer, or interactive shell. No two tools overlap in purpose.

Naming Consistency5/5

All tool names follow a consistent prefix pattern (ssh_, sftp_, ssh_shell_) with snake_case and verb_noun structure, making them predictable.

Tool Count5/5

11 tools is well-scoped for an SSH server covering connection, execution, file operations, and interactive shell. Each tool serves a clear purpose without bloat.

Completeness4/5

Covers core SSH workflows (connect, exec, disconnect) and SFTP operations. Lacks SSH-native file listing (only SFTP) and advanced features like port forwarding, but basic coverage is solid.

Maintenance

ActivityInactive
ResponsivenessNo issues