Skip to main content
Glama
RemoteShell MCP

RemoteShell MCP

by chouzz

๐Ÿ”— RemoteShell MCP

A Model Context Protocol (MCP) server that enables LLMs to securely manage and execute commands on remote SSH servers.

โœจ Features

  • ๐Ÿ” Secure credential management - Save SSH server profiles once, no need to retype credentials

  • ๐Ÿ’ป Remote command execution - Execute non-interactive shell commands remotely

  • ๐Ÿ“ File operations - Upload/download files via SFTP

  • ๐Ÿค– LLM-powered - Built with FastMCP and Paramiko

Related MCP server: ssh-client-mcp-server

๐Ÿš€ Installation

RemoteShell is a stdio MCP server distributed on PyPI. Run it directly with uvx โ€” no install step required. Then register the server with your AI coding agent:

Claude Code

claude mcp add remoteshell --scope user -- uvx remoteshell-mcp

Codex

codex mcp add remoteshell -- uvx remoteshell-mcp

Other agents โ€” click yours to expand ๐Ÿ‘‡

cursor mcp add remoteshell -- uvx remoteshell-mcp

Edit ~/.gemini/config/mcp_config.json (global) or .agents/mcp_config.json (project):

{
  "mcpServers": {
    "remoteshell": {
      "command": "uvx",
      "args": ["remoteshell-mcp"]
    }
  }
}

Or open the MCP Servers view in the Antigravity TUI and run the /mcp command.

opencode mcp add

Choose local, then enter uvx remoteshell-mcp.

Edit ~/.hermes/config.yaml:

mcp_servers:
  remoteshell:
    command: "uvx"
    args: ["remoteshell-mcp"]

Run /reload-mcp in the Hermes TUI to pick up the new server.

Edit ~/.openclaw/openclaw.json:

{
  "mcp": {
    "servers": {
      "remoteshell": {
        "command": "uvx",
        "args": ["remoteshell-mcp"]
      }
    }
  }
}

Or run openclaw configure to add it via the interactive wizard.

Add this to your MCP client configuration:

{
  "mcpServers": {
    "remoteshell": {
      "command": "uvx",
      "args": ["remoteshell-mcp"]
    }
  }
}

๐Ÿ“– Usage

Getting started is easy! You can either:

  1. ๐Ÿค– Let the LLM configure for you - Simply tell the LLM your host, username, password, etc., and ask it to set up the server configuration

  2. โš™๏ธ Manual configuration - Directly edit the configuration file at ~/.config/remoteshell/hosts.json

๐Ÿ’พ Configuration & Storage

RemoteShell securely stores your server configurations in:

~/.config/remoteshell/hosts.json

๐Ÿ”ง Configuration Management

  • LLM-managed: The LLM automatically manages this file using save_server and remove_server tools

  • Manual editing: You can also directly edit the JSON file for advanced configurations

๐Ÿ“‹ Example Configuration

{
  "version": 1,
  "servers": {
    "production-server": {
      "host": "1.2.3.4",
      "user": "root",
      "port": 22,
      "auth_type": "password",
      "password": "your_secure_password",
      "last_connected": null
    },
    "staging-server": {
      "host": "staging.example.com",
      "user": "ubuntu",
      "port": 22,
      "auth_type": "private_key",
      "private_key": "~/.ssh/id_rsa",
      "last_connected": "2025-01-01T00:00:00+00:00"
    }
  }
}

๐Ÿ”’ Security Note

On POSIX systems, protect your configuration file:

chmod 600 ~/.config/remoteshell/hosts.json

๐Ÿ› ๏ธ Available Tools

RemoteShell provides the following MCP tools for remote server management:

๐Ÿ“‹ list_servers()

Purpose: Display all saved server profiles with their connection status and last activity.

When to use:

  • User asks to "connect to server" or "show machines"

  • No specific connection_id is provided

  • Need to see available servers

Example: "Show me which servers I have configured" โ†’ Returns list of all saved servers with online status

๐Ÿ’พ save_server(connection_id, host, user, auth_type, credential, port)

Purpose: Create or update a server profile with authentication credentials.

Parameters:

  • connection_id: Unique identifier for the server (e.g., "production", "staging")

  • host: Server hostname or IP address

  • user: SSH username

  • auth_type: "password" or "private_key"

  • credential:

    • For password: Plain text password string

    • For private_key: File path (e.g., ~/.ssh/id_rsa) or PEM key content

  • port: SSH port (optional; defaults to 22 and keeps the existing saved port if omitted)

When to use:

  • Adding a new server configuration

  • Updating credentials after authentication failure

  • Changing server connection details

๐Ÿ—‘๏ธ remove_server(connection_id)

Purpose: Permanently delete a server profile from storage.

When to use:

  • User explicitly requests to remove or forget a server

  • Server is no longer accessible or needed

โš ๏ธ Warning: This action cannot be undone

โšก execute_command(connection_id, command)

Purpose: Execute non-interactive shell commands remotely and return results.

Returns: stdout, stderr, and exit_code

When to use:

  • Running system commands, scripts, or utilities

  • Checking server status, disk usage, process lists

  • File operations, package management, etc.

When NOT to use:

  • Interactive programs (vim, htop, top)

  • Commands requiring manual input ([Y/n] prompts) - unless using flags like -y

Example: execute_command(connection_id="production", command="df -h")

๐Ÿ“ค upload_file(connection_id, local_path, remote_path)

Purpose: Upload files from your local machine to a remote server via SFTP.

Parameters:

  • local_path: Path to the file on your local machine

  • remote_path: Destination path on the remote server

Notes:

  • If remote_path is a directory, the original filename is preserved

  • If local_path is omitted, server selects a default and returns it in response

๐Ÿ“ฅ download_file(connection_id, remote_path, local_path)

Purpose: Download files from a remote server to your local machine via SFTP.

Parameters:

  • remote_path: Path to the file on the remote server

  • local_path: Destination path on your local machine

Notes:

  • If local_path is omitted, defaults to: ~/.config/remoteshell/downloads/<connection_id>/<basename>

๐Ÿงช Development

Local Development Setup

For local development, use this MCP configuration:

{
  "mcpServers": {
    "remoteshell": {
      "command": "uv",
      "args": ["--directory", "/absolute/path/to/remoteShell-mcp", "run", "remoteshell-mcp"]
    }
  }
}

Running Tests

uv run pytest

Available Tools

6 tools
download_fileA

Download a remote file to a local path (on the machine running this MCP server) via SFTP.

When to use: Fetch logs, reports, or backups from the remote. When NOT to use: Avoid very large downloads (>100MB) unless you verified size first.

Example: download_file(connection_id="srv1", remote_path="/var/log/syslog", local_path="./logs/")

Inputs: remote_path (required), connection_id (required), local_path. Returns: object

execute_commandA

Execute a non-interactive shell command on a remote server and return stdout/stderr/exit_code.

When to use: Status checks (df, ls), file ops (cp, mv), and scripts that do not require live interaction. When NOT to use: Do not run interactive tools (vim, htop, top) or commands that require manual prompts.

Example: execute_command(connection_id="srv1", command="df -h")

Inputs: command (required), connection_id (required). Returns: object

list_serversA

List all servers saved locally by this MCP server (persistent inventory).

When to use: When the user asks to connect to a server, manage machines, or did not specify a connection_id. When NOT to use: Not needed if you already know the correct connection_id.

Example: "Show me which servers I have."

Inputs: no named parameters. Returns: object

remove_serverA

Permanently delete a saved server profile from the local host store.

When to use: Only when the user explicitly asks to forget/remove a server. When NOT to use: Do not remove servers just because a connection failed.

Example: remove_server(connection_id="srv1")

Inputs: connection_id (required). Returns: object

save_serverA

Persist (create or update) a server connection profile in the local host store.

When to use: When the user provides new SSH details, or after an auth_failed error to update credentials. When NOT to use: Do not ask for credentials again if they are already saved and still valid.

Example: save_server(connection_id="srv1", host="1.2.3.4", user="root", auth_type="password", credential="", port=2222)

Inputs: host (required), user (required), auth_type (required), credential (required), +2 more. Returns: object

upload_fileA

Upload a local file (on the machine running this MCP server) to a remote server via SFTP.

When to use: Deploy configs, scripts, or artifacts to the remote. When NOT to use: Do not upload huge files blindly; verify size/permissions first.

Example: upload_file(connection_id="srv1", local_path="./config.yaml", remote_path="/etc/app/")

Inputs: remote_path (required), connection_id (required), local_path. Returns: object

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelogโ€ฆ

    TDQS

    A4.4/5.0

    Scored across 6 tools

    Disambiguation5/5

    Each tool has a distinct purpose: server profile management (save, list, remove) and remote operations (execute, upload, download). No overlap or ambiguity.

    Naming Consistency5/5

    All tools follow a consistent verb_noun pattern (e.g., remove_server, list_servers, execute_command), making them predictable and easy to use.

    Tool Count5/5

    6 tools is well-scoped for a remote shell MCP, covering server management and core file/command operations without superfluous tools.

    Completeness4/5

    Covers key CRUD operations for servers and essential remote actions (execute, upload, download). Minor gap: no explicit test-connection or update server operation, but save_server handles updates.

    Maintenance

    ActivityNo data
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers

    • F
      license
      A
      quality
      D
      maintenance
      A local Model Context Protocol server that allows LLMs to securely execute shell commands on remote Linux and Windows systems via SSH connections.
      6
      10 npm
      2
      -
    • A
      license
      Not graded
      quality
      D
      maintenance
      A centralized MCP server that enables LLM agents to securely execute commands and manage Linux servers via SSH.
      2
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      A local MCP server that enables LLMs to execute shell commands on remote Linux and Windows systems via SSH with configurable timeout and authentication options.
      17,673 npm
      MIT