Skip to main content
Glama
widjis
by widjis
README.md
# SSH MCP Server

A Model Context Protocol (MCP) server that provides SSH functionality including file copying between servers, command execution, and file management.

## Features

- 🔐 **SSH Connection Management**: Connect to multiple SSH servers with connection pooling
- 📁 **File Operations**: Copy files between local and remote servers, or between remote servers
- đŸ–Ĩī¸ **Command Execution**: Execute commands on remote servers
- 📋 **File Listing**: List files and directories on local or remote systems
- â„šī¸ **File Information**: Get detailed file information (size, permissions, timestamps)
- 🔑 **Authentication**: Support for password and private key authentication

## Installation

```bash
npm install
npm run build
```

## Usage

### Claude Desktop Integration

To use this SSH MCP server with Claude Desktop, you need to configure it in your Claude Desktop settings.

#### 1. Build the Server
```bash
npm install
npm run build
```

#### 2. Configure Claude Desktop

Add the following configuration to your Claude Desktop MCP settings file:

**On macOS:** `~/Library/Application Support/Claude/claude_desktop_config.json`
**On Windows:** `%APPDATA%/Claude/claude_desktop_config.json`

```json
{
  "mcpServers": {
    "ssh-server": {
      "command": "node",
      "args": ["/absolute/path/to/mcp-ssh/dist/index.js"],
      "env": {}
    }
  }
}
```

**Important:** Replace `/absolute/path/to/mcp-ssh/` with the actual absolute path to your mcp-ssh project directory.

#### 3. Restart Claude Desktop

After adding the configuration, restart Claude Desktop completely for the changes to take effect.

#### 4. Verify Installation

Once restarted, you should see the SSH tools available in Claude Desktop. You can test by asking Claude to:
- "Connect to an SSH server"
- "List available SSH tools"
- "Copy a file between servers"

### Development Mode
```bash
npm run dev
```

### Production
```bash
npm run build
npm start
```

## Quick Start

**New to SSH MCP Server?** Check out our [How to Use Authentication Guide](examples/how-to-use-authentication.md) for simple, step-by-step instructions on connecting to your servers using natural language with Claude Desktop.

## Available Tools

### 1. ssh_connect
Connect to an SSH server.

**Parameters:**
- `host` (string): SSH server hostname or IP address
- `port` (number, default: 22): SSH port number
- `username` (string): SSH username
- `password` (string, optional): SSH password
- `privateKeyPath` (string, optional): Path to private key file
- `passphrase` (string, optional): Passphrase for private key
- `connectionId` (string): Unique identifier for this connection

**Authentication Methods:**

1. **Password Authentication:**
```json
{
  "host": "192.168.1.100",
  "username": "your_username",
  "password": "your_password",
  "connectionId": "server1"
}
```

2. **SSH Key Authentication:**
```json
{
  "host": "192.168.1.100",
  "username": "your_username",
  "privateKeyPath": "/path/to/private/key",
  "passphrase": "optional_passphrase",
  "connectionId": "server1"
}
```

### 2. ssh_disconnect
Disconnect from an SSH server.

**Parameters:**
- `connectionId` (string): Connection ID to disconnect

### 3. ssh_execute
Execute a command on a remote SSH server.

**Parameters:**
- `connectionId` (string): SSH connection ID
- `command` (string): Command to execute
- `cwd` (string, optional): Working directory for command execution

**Example:**
```json
{
  "connectionId": "server1",
  "command": "ls -la /home/user",
  "cwd": "/home/user"
}
```

### 4. ssh_copy_file
Copy files between local and remote servers or between remote servers.

**Parameters:**
- `sourceConnectionId` (string): Source SSH connection ID (use "local" for local files)
- `sourcePath` (string): Source file path
- `targetConnectionId` (string): Target SSH connection ID (use "local" for local files)
- `targetPath` (string): Target file path
- `createDirectories` (boolean, default: true): Create target directories if they don't exist

**Examples:**

**Local to Remote:**
```json
{
  "sourceConnectionId": "local",
  "sourcePath": "/local/file.txt",
  "targetConnectionId": "server1",
  "targetPath": "/remote/file.txt"
}
```

**Remote to Local:**
```json
{
  "sourceConnectionId": "server1",
  "sourcePath": "/remote/file.txt",
  "targetConnectionId": "local",
  "targetPath": "/local/file.txt"
}
```

**Remote to Remote:**
```json
{
  "sourceConnectionId": "server1",
  "sourcePath": "/path/on/server1/file.txt",
  "targetConnectionId": "server2",
  "targetPath": "/path/on/server2/file.txt"
}
```

### 5. ssh_list_files
List files and directories on local or remote server.

**Parameters:**
- `connectionId` (string): SSH connection ID (use "local" for local files)
- `remotePath` (string): Directory path to list
- `showHidden` (boolean, default: false): Show hidden files

### 6. ssh_file_info
Get file information (size, permissions, etc.).

**Parameters:**
- `connectionId` (string): SSH connection ID (use "local" for local files)
- `filePath` (string): File path to get info for

## Troubleshooting

### Claude Desktop Integration Issues

**Server not appearing in Claude Desktop:**
1. Verify the absolute path in `claude_desktop_config.json` is correct
2. Ensure the server was built successfully (`npm run build`)
3. Check that `dist/index.js` exists in your project directory
4. Restart Claude Desktop completely (quit and reopen)
5. Check Claude Desktop logs for error messages

**Permission errors:**
1. Ensure Node.js has permission to read the project directory
2. On macOS, you may need to grant Claude Desktop full disk access in System Preferences > Security & Privacy

**SSH connection failures:**
1. Verify SSH server is accessible from your machine
2. Test SSH connection manually: `ssh username@hostname`
3. Check SSH key permissions (should be 600): `chmod 600 ~/.ssh/id_rsa`
4. Ensure SSH key is in the correct format (OpenSSH)

**File transfer issues:**
1. Check file paths are absolute and correct
2. Verify write permissions on target directories
3. Ensure sufficient disk space on target system

### Getting Help

If you encounter issues:
1. Check the Claude Desktop console/logs for error messages
2. Verify your configuration matches the examples exactly
3. Test SSH connections manually before using the MCP server

## Security Considerations

- Private keys should be stored securely with appropriate file permissions (600)
- Use SSH key authentication instead of passwords when possible
- Consider using SSH agent forwarding for additional security
- The server maintains connection pools - ensure proper cleanup on shutdown

## Error Handling

The server provides detailed error messages for:
- Connection failures
- Authentication errors
- File operation errors
- Invalid parameters
- Missing connections

## Connection Management

- Connections are pooled and reused for efficiency
- Each connection has a unique ID for reference
- Connections are automatically cleaned up on server shutdown
- Use `ssh_disconnect` to manually close connections

## Temporary Files

For remote-to-remote file transfers, temporary files are created in `/tmp/` and automatically cleaned up after transfer completion or on error.

## Dependencies

- `@modelcontextprotocol/sdk`: MCP SDK for server implementation
- `node-ssh`: SSH client for Node.js
- `ssh2`: Low-level SSH2 client
- `zod`: Runtime type validation

## License

MIT

TDQS

B3.4/5.0

Scored across 18 tools

Disambiguation5/5

Each tool has a clearly distinct purpose with no overlap. For example, ssh_connect establishes a connection, ssh_execute runs commands, ssh_list_files enumerates files, and ssh_docker_deploy handles container deployment. The descriptions reinforce unique functions, preventing misselection.

Naming Consistency5/5

All tools follow a consistent 'ssh_verb_noun' pattern, such as ssh_connect, ssh_execute, and ssh_list_files. This uniform naming scheme makes the tool set predictable and easy to navigate, with no deviations in style or structure.

Tool Count4/5

With 18 tools, the count is slightly high but reasonable for the SSH server domain, which requires operations for connection management, file handling, command execution, Docker integration, and credential storage. It covers a broad scope without being excessive.

Completeness5/5

The tool set provides comprehensive coverage for SSH operations, including connection lifecycle (connect, disconnect), file management (copy, list, info), command execution (execute, interactive shell), Docker deployment, and credential handling. No obvious gaps exist for typical SSH workflows.

Maintenance

ActivityInactive
ResponsivenessNo issues