SSH MCP Server

SSH-based MCP server for remote command execution and file transfer.

README.md

ssh-mcp-server

SSH-based MCP (Model Context Protocol) server for remote command execution and file transfer.

This fork adds optional AstrBot admin validation for all exposed MCP tools.

Chinese README

Links

Features

  • Execute SSH commands through MCP
  • Upload files to remote hosts
  • Download files from remote hosts
  • List configured SSH servers
  • Support password, private key, and ~/.ssh/config
  • Support command whitelist and blacklist
  • Optional AstrBot admin validation via operatorId

Tools

  • execute-command
  • upload
  • download
  • list-servers

Install

Recommended for AstrBot

For long-running stdio MCP servers, global install is more stable than letting AstrBot invoke npx every time.

npm install -g @ruawd/ssh-mcp@1.3.4

Then use ssh-mcp as the command in AstrBot.

One-shot usage

npx -y @ruawd/ssh-mcp@1.3.4 --host 192.168.1.1 --port 22 --username root --password pwd123456

AstrBot MCP Examples

Global install

{
  "mcpServers": {
    "sshmcp": {
      "command": "ssh-mcp",
      "args": [
        "--host",
        "192.168.1.1",
        "--port",
        "22",
        "--username",
        "root",
        "--password",
        "pwd123456"
      ]
    }
  }
}

Use `npx`

{
  "mcpServers": {
    "sshmcp": {
      "command": "npx",
      "args": [
        "-y",
        "@ruawd/ssh-mcp@1.3.4",
        "--host",
        "192.168.1.1",
        "--port",
        "22",
        "--username",
        "root",
        "--password",
        "pwd123456"
      ]
    }
  }
}

Private key example

{
  "mcpServers": {
    "sshmcp": {
      "command": "ssh-mcp",
      "args": [
        "--host",
        "192.168.1.1",
        "--port",
        "22",
        "--username",
        "root",
        "--privateKey",
        "~/.ssh/id_rsa"
      ]
    }
  }
}

Use `~/.ssh/config`

{
  "mcpServers": {
    "sshmcp": {
      "command": "ssh-mcp",
      "args": [
        "--host",
        "myserver"
      ]
    }
  }
}

If ~/.ssh/config contains:

Host myserver
    HostName 192.168.1.1
    Port 22
    User root
    IdentityFile ~/.ssh/id_rsa

the server will load those defaults automatically.

CLI Options

--config-file             JSON configuration file path
--ssh-config-file         SSH config file path
--ssh                     SSH connection config in JSON or legacy format
-h, --host                SSH host or host alias from ssh config
-p, --port                SSH port
-u, --username            SSH username
-w, --password            SSH password
-k, --privateKey          SSH private key path
-P, --passphrase          Private key passphrase
-W, --whitelist           Command whitelist (comma-separated regex)
-B, --blacklist           Command blacklist (comma-separated regex)
-s, --socksProxy          SOCKS proxy URL
--pty                     Allocate pseudo-tty for command execution
--pre-connect             Pre-connect configured SSH servers on startup
--require-astrbot-admin   Require operatorId to match allowed admin IDs
--admin-ids               Comma-separated admin IDs, e.g. 10001,10002
--astrbot-config-file     Path to AstrBot data/config/cmd_config.json

AstrBot Admin Validation

This fork can restrict all MCP tools to specific AstrBot administrator IDs.

When enabled, each tool call must include an operatorId.

Two ways to configure administrators:

  1. Directly provide --admin-ids
  2. Read admins_id from AstrBot cmd_config.json

If --admin-ids is present, it takes priority over --astrbot-config-file.

Example with direct admin IDs

{
  "mcpServers": {
    "sshmcp": {
      "command": "ssh-mcp",
      "args": [
        "--host",
        "103.117.136.155",
        "--port",
        "22",
        "--username",
        "root",
        "--password",
        "your-password",
        "--require-astrbot-admin",
        "--admin-ids",
        "1738068535,2653839788"
      ]
    }
  }
}

Example reading AstrBot config

{
  "mcpServers": {
    "sshmcp": {
      "command": "ssh-mcp",
      "args": [
        "--config-file",
        "/path/to/ssh-config.json",
        "--require-astrbot-admin",
        "--astrbot-config-file",
        "/path/to/AstrBot/data/config/cmd_config.json"
      ]
    }
  }
}

Tool call example

{
  "tool": "execute-command",
  "params": {
    "cmdString": "ls -al",
    "connectionName": "prod",
    "operatorId": "1738068535"
  }
}

Important Limitation

AstrBot native MCP integration does not automatically pass the current sender ID to a stdio MCP server.

That means:

  • this MCP server can validate operatorId
  • but something upstream still needs to inject the real sender ID

If you are using AstrBot, pair this server with astrbot_plugin_mcp_id_injector, or use

Tools 4

execute-commandExecutes a shell command on the remote SSH host.
uploadUploads a file to the remote host.
downloadDownloads a file from the remote host.
list-serversLists all configured SSH servers.

Try it

Execute 'ls -al' on my production server to list the files in the current directory.
Upload the local file 'config.json' to '/etc/myapp/config.json' on the remote host.
Download the log file '/var/log/syslog' from the remote server to my local machine.
List all the SSH servers currently configured in the MCP server.

Frequently Asked Questions

What are the key features of SSH MCP Server?

Execute SSH commands through a standardized MCP interface. Perform bidirectional file transfers (upload and download). Support for password, private key, and ~/.ssh/config authentication. Command-level security via whitelist and blacklist filtering. Optional AstrBot admin validation for tool access.

What can I use SSH MCP Server for?

Managing remote server configurations via AI-assisted command execution. Automating log retrieval and file synchronization between local and remote environments. Securing remote server access by restricting commands to a predefined whitelist. Integrating remote server management into AstrBot-based AI workflows.

How do I install SSH MCP Server?

Install SSH MCP Server by running: npm install -g @ruawd/ssh-mcp@1.3.4

What MCP clients work with SSH MCP Server?

SSH MCP Server works with any MCP-compatible client including Claude Desktop, Claude Code, Cursor, and other editors with MCP support.

Turn this server into reusable context

Keep SSH MCP Server docs, env vars, and workflow notes in Conare so your agent carries them across sessions.

Open Conare