Skip to main content
Glama
remote-shell-mcp

remote-shell-mcp

Remote Shell MCP Server

MCP Compatible License: MIT Version

Persistent SSH sessions for AI assistants. Give Claude, GPT, or any MCP-compatible AI the ability to maintain long-running remote shell connections—just like Warp does for developers.

What's New in v5.0

Feature

Description

TTY Input

Respond to interactive prompts (passwords, confirmations) directly

Swarm Mode

Launch parallel SSH sessions to multiple machines simultaneously

Broadcast Commands

Execute the same command across all machines in a swarm

Real-time Streaming

Monitor output in real-time with error pattern detection

Auto-Interrupt

Automatically send Ctrl+C when errors are detected

Related MCP server: mcp-ssh-terminal

What's New in v4.0

Feature

Description

Block-Based Output

Warp-style command blocks with search, tagging, and copy

Pane Management

tmux-style split panes for multi-view sessions

Session Sharing

Real-time collaboration with shareable URLs

Enhanced Persistence

Session state persistence and faster reconnection

Heartbeat Monitoring

Faster disconnect detection

The Problem

AI assistants can't maintain persistent connections to remote servers. Every command runs in isolation:

AI: Let me SSH into your server and check the logs.
AI: [runs: ssh user@server "cat /var/log/app.log"]  # Opens connection, runs, closes
AI: Now let me check disk space.
AI: [runs: ssh user@server "df -h"]  # Opens ANOTHER connection, runs, closes

This means:

  • No session state — environment variables, working directory, and context are lost

  • Repeated authentication — every command requires a new SSH handshake

  • No file transfers — can't easily upload configs or download logs

  • Broken workflows — can't cd to a directory and then run commands there

The Solution

Remote Shell MCP provides Warp-like persistent shell sessions for AI assistants:

AI: [starts session → ssh user@server]
AI: [runs: cd /var/log]           # Working directory persists
AI: [runs: tail -f app.log]       # Can run interactive commands
AI: [sends: Ctrl+C]               # Can send signals
AI: [downloads: error.log]        # Can transfer files
AI: [forwards: 5432 → postgres]   # Can forward ports
AI: [shares session]              # Collaborate in real-time
AI: [ends session]                # Explicit close when done

Features

Core Features

Feature

Description

Auto-Detection

Recognizes SSH commands and starts sessions automatically

Persistent Sessions

Connections stay open until explicitly closed

Multi-Cloud Support

GCP, AWS, Azure, plain SSH, kubectl, docker, vagrant

Multiple Sessions

Run concurrent connections with easy switching

Signal Support

Send Ctrl+C (SIGINT), SIGTERM, SIGKILL

Auto-Cleanup

Stale sessions cleaned up after 1 hour

v4.0 Features

Feature

Description

Blocks

Every command creates a searchable, taggable block

Panes

Split view with broadcast commands

Sharing

Real-time session collaboration

Persistence

State saved to disk for recovery

Heartbeat

Fast disconnect detection

v3.0 Features

Feature

Description

File Transfer

remote_file_upload, remote_file_download, remote_file_list

Port Forwarding

remote_port_forward_local, remote_port_forward_remote

Smart Wait

Auto-adjusts timeout: 500ms for ls, 30s for npm install

Directory Tracking

Tracks cd commands, shows pwd in prompt

Auto-Reconnect

Configurable reconnection with backoff

Output Search

remote_session_search, remote_session_errors

Installation

Prerequisites

  • Node.js 18+

  • npm or yarn

  • An MCP-compatible AI client (Claude Code, Claude Desktop, etc.)

Setup

# Clone the repository
git clone https://github.com/raghavharness/remote-shell-mcp
cd mcp-remote-shell

# Install dependencies
npm install

# Build
npm run build

Configure Claude Code

Add to ~/.claude/settings.json:

{
  "mcpServers": {
    "remote-shell": {
      "command": "node",
      "args": ["/path/to/mcp-remote-shell/dist/index.js"]
    }
  }
}

Usage

The shell Tool

The primary interface. Auto-detects remote commands and manages sessions:

# Start a session (auto-detected):
shell(command="ssh user@hostname")
shell(command="gcloud compute ssh my-vm --zone us-central1-a")

# Run commands in session:
shell(command="ls -la")
shell(command="cd /var/log")

# Smart wait auto-adjusts for slow commands:
shell(command="npm install")  # Waits 20s automatically

# Interrupt (Ctrl+C):
shell(command="//stop")

# End session:
shell(command="//end")

Block-Based Output (NEW in v4.0)

Every command creates a block that can be referenced later:

# List recent blocks
remote_blocks_list(limit=10)

# Get a specific block
remote_block_get(blockId="block-5")

# Search through blocks
remote_blocks_search(query="error")

# Copy just the output (no command)
remote_block_copy(blockId="block-5")

# Tag blocks for organization
remote_block_tag(blockId="block-5", tags=["important", "debug"])

# Find error blocks
remote_blocks_errors()

Pane Management (NEW in v4.0)

tmux-style panes within a session:

# Split the current pane
remote_pane_split(direction="horizontal")
remote_pane_split(direction="vertical")

# List panes
remote_pane_list()

# Switch to a pane
remote_pane_focus(paneId="pane-1")

# Run command in specific pane (without switching)
remote_pane_exec(paneId="pane-1", command="tail -f /var/log/app.log")

# Broadcast command to ALL panes
remote_pane_broadcast(command="uptime")

# Close a pane
remote_pane_close(paneId="pane-1")

TTY Input (NEW in v5.0)

Respond to interactive prompts directly:

# Check if session is waiting for input
remote_session_check_prompt()

# Send text input
remote_session_input(input="my-response")

# Send password (hidden in output)
remote_session_password(password="secret123")

# Send Y/N confirmation
remote_session_confirm(confirm=true)

Swarm Mode (NEW in v5.0)

Launch parallel SSH sessions to multiple machines:

# Create a swarm of SSH connections
remote_swarm_create(
  name="web-servers",
  method="ssh",
  targets=[
    { "id": "web1", "host": "10.0.0.1", "username": "admin" },
    { "id": "web2", "host": "10.0.0.2", "username": "admin" },
    { "id": "web3", "host": "10.0.0.3", "username": "admin" }
  ]
)

# Create a GCloud swarm
remote_swarm_create(
  name="gcp-cluster",
  method="gcloud",
  targets=[
    { "id": "node1", "instance": "gke-node-1", "zone": "us-central1-a" },
    { "id": "node2", "instance": "gke-node-2", "zone": "us-central1-a" }
  ]
)

# Broadcast command to all targets
remote_swarm_exec(swarmId="swarm-1", command="uptime")
remote_swarm_exec(swarmId="swarm-1", command="df -h")

# Send input to all sessions (e.g., for sudo password)
remote_swarm_input(swarmId="swarm-1", input="mypassword")

# Interrupt all sessions
remote_swarm_interrupt(swarmId="swarm-1")

# List swarms
remote_swarm_list()

# Get detailed swarm status
remote_swarm_status(swarmId="swarm-1")

# End a swarm
remote_swarm_end(swarmId="swarm-1")
remote_swarm_end(swarmId="all")  # End all swarms

Real-time Streaming (NEW in v5.0)

Enable real-time output streaming with error detection:

# Enable streaming with auto-interrupt on errors
remote_stream_enable(autoInterrupt=true)

# Add custom error patterns
remote_stream_enable(
  autoInterrupt=true,
  errorPatterns=["CRITICAL", "OutOfMemory", "Segfault"]
)

# Check streaming status
remote_stream_status()

# Disable streaming
remote_stream_disable()

When streaming is enabled:

  • Output is monitored in real-time

  • Error patterns are detected immediately

  • Interactive prompts are detected

  • Auto-interrupt sends Ctrl+C when errors are found

Session Sharing (NEW in v4.0)

Share sessions for real-time collaboration:

# Share the current session
remote_session_share(permissions="view")
# Returns: http://localhost:3847/share/abc123

# Share with control access and password
remote_session_share(permissions="control", password="secret123")

# List active shares
remote_shares_list()

# Update share settings
remote_share_update(shareId="abc123", permissions="control")

# Stop sharing
remote_session_unshare()

File Transfer

# Upload a local file to remote:
remote_file_upload(localPath="./config.yml", remotePath="/etc/myapp/config.yml")

# Download a remote file:
remote_file_download(remotePath="/var/log/app.log", localPath="./app.log")

# List remote directory:
remote_file_list(path="/var/log")

Port Forwarding

# Local forward: access remote PostgreSQL on localhost:5433
remote_port_forward_local(localPort=5433, remoteHost="localhost", remotePort=5432)

# Remote forward: expose local dev server to remote
remote_port_forward_remote(remotePort=8080, localPort=3000)

# List active forwards:
remote_port_list()

# Stop a forward:
remote_port_stop(forwardId="fwd-1")

Supported Connection Types

Type

Pattern

Example

SSH

ssh [opts] user@host

ssh -i ~/.ssh/key user@10.0.0.5

GCP

gcloud compute ssh

gcloud compute ssh vm --zone us-west1-a

AWS

aws ssm start-session

aws ssm start-session --target i-xxx

Azure

az ssh vm

az ssh vm --name vm -g resource-group

Kubernetes

kubectl exec -it

kubectl exec -it pod -- bash

Docker

docker exec -it

docker exec -it container bash

Control Sequences & MCP Prompts

Every control sequence has a corresponding MCP prompt:

Exit Session

Sequence

MCP Prompt

Aliases

~.

end-session

end, exit, quit, close, disconnect

//end

end-session

Interrupt Command

Sequence

MCP Prompt

Aliases

//stop

stop

kill, interrupt, ctrl-c

Blocks

MCP Prompt

Description

blocks

List recent command blocks

block

Get a specific block

block-search

Search through blocks

block-errors

Find error blocks

block-tag

Tag a block

Panes

MCP Prompt

Description

split

Split current pane

panes

List panes

pane-focus

Switch to pane

pane-close

Close a pane

broadcast

Broadcast command to all panes

Sharing

MCP Prompt

Description

share

Share current session

unshare

Stop sharing

shares

List active shares

All Tools (50)

Tool

Purpose

Core

shell

Primary tool - execute commands, auto-detect sessions

remote_session_start

Start session with explicit parameters

remote_session_status

List all sessions with details

remote_session_switch

Switch between sessions

remote_session_end

End session(s)

remote_session_history

View command history

remote_session_output

Get raw output buffer

remote_session_signal

Send signals

remote_session_search

Search history/output

remote_session_errors

Find error messages

Files

remote_file_upload

Upload file to remote

remote_file_download

Download file from remote

remote_file_list

List remote directory

Ports

remote_port_forward_local

Start local port forward

remote_port_forward_remote

Start remote port forward

remote_port_list

List port forwards

remote_port_stop

Stop port forward

remote_port_stop_all

Stop all port forwards

Blocks (v4.0)

remote_blocks_list

List command blocks

remote_block_get

Get specific block

remote_blocks_search

Search blocks

remote_block_copy

Copy block output

remote_block_tag

Tag a block

remote_block_untag

Remove block tags

remote_block_collapse

Toggle block collapsed

remote_blocks_errors

Find error blocks

Panes (v4.0)

remote_pane_split

Split pane

remote_pane_focus

Focus pane

remote_pane_close

Close pane

remote_pane_list

List panes

remote_pane_exec

Execute in specific pane

remote_pane_broadcast

Broadcast to all panes

remote_pane_rename

Rename pane

remote_pane_next

Focus next pane

Sharing (v4.0)

remote_session_share

Share session

remote_session_unshare

Stop sharing

remote_shares_list

List shares

remote_share_update

Update share settings

remote_share_server_start

Start share server

remote_share_server_stop

Stop share server

Swarm (v5.0)

remote_swarm_create

Create parallel session swarm

remote_swarm_list

List active swarms

remote_swarm_status

Get swarm details

remote_swarm_exec

Broadcast command to swarm

remote_swarm_input

Send input to all swarm sessions

remote_swarm_interrupt

Interrupt all swarm sessions

remote_swarm_end

End swarm

remote_swarm_add_target

Add target to swarm

remote_swarm_remove_target

Remove target from swarm

Input/Streaming (v5.0)

remote_session_input

Send input to session

remote_session_check_prompt

Check for pending prompts

remote_session_confirm

Send Y/N confirmation

remote_session_password

Send password (hidden)

remote_stream_enable

Enable real-time streaming

remote_stream_disable

Disable streaming

remote_stream_status

Get streaming status

Smart Wait Time

Commands automatically get appropriate timeouts:

Command Type

Wait Time

Example

Quick info

500ms

ls, pwd, whoami

File read

1s

cat, head

Search

3s

grep, find

Default

2s

Most commands

Network

10s

curl, wget

Package install

15-30s

npm install, pip install

Build

20-60s

make, docker build

Override with explicit waitTime parameter when needed.

Example Workflow

User: Connect to prod and figure out why the app is slow

Claude: [shell: gcloud compute ssh prod-server --project myapp]
        Session started: gcloud:prod-server
        Working directory: /home/user

Claude: [shell: top -bn1 | head -20]
        CPU at 95%! Checking what's using it...
        [block-1]

Claude: [shell: ps aux --sort=-%cpu | head -10]
        App process using 92% CPU.
        [block-2]

Claude: [remote_blocks_search: query="error"]
        Found 3 matches in block history...

Claude: [remote_pane_split: direction="horizontal"]
        Split into 2 panes for monitoring

Claude: [remote_pane_exec: paneId="pane-1", command="tail -f /var/log/app.log"]
        Watching logs in pane-1...

Claude: [remote_session_share: permissions="view"]
        Shared session: http://localhost:3847/share/xyz789
        (Ops team can watch live)

Claude: [shell: sudo systemctl restart myapp]
        Service restarted.

Claude: [shell: //end]
        Session ended. App should be recovering.

Architecture

┌─────────────────┐     ┌───────────────────────────────┐     ┌─────────────────┐
│   AI Client     │────▶│      Remote Shell MCP         │────▶│  Remote Server  │
│ (Claude Code)   │ MCP │          Server               │     │  (SSH/gcloud)   │
└─────────────────┘     └───────────────────────────────┘     └─────────────────┘
                                    │
                        ┌───────────┴───────────┐
                        ▼                       ▼
                ┌───────────────┐       ┌───────────────┐
                │Session Manager│       │   Features    │
                │ - Sessions    │       │ - Blocks      │
                │ - Panes       │       │ - Persistence │
                │ - History     │       │ - Sharing     │
                └───────────────┘       │ - FileTransfer│
                                        │ - PortForward │
                                        │ - SmartWait   │
                                        └───────────────┘
                                                │
                                        ┌───────┴───────┐
                                        ▼               ▼
                                ┌───────────┐   ┌───────────┐
                                │ WebSocket │   │ Web Client│
                                │  Server   │──▶│ (Browser) │
                                └───────────┘   └───────────┘

Module Structure

src/
├── index.ts              # MCP server entry point
├── session-manager.ts    # Session lifecycle management
├── types.ts              # TypeScript interfaces
├── features/
│   ├── blocks.ts         # Block-based output (v4.0)
│   ├── panes.ts          # Pane management (v4.0)
│   ├── persistence.ts    # Session persistence (v4.0)
│   ├── heartbeat.ts      # Connection monitoring (v4.0)
│   ├── sharing/          # Session sharing (v4.0)
│   │   ├── share-manager.ts
│   │   └── ws-server.ts
│   ├── file-transfer.ts  # SFTP/SCP operations
│   ├── port-forward.ts   # Port forwarding
│   ├── smart-wait.ts     # Command timeout logic
│   ├── directory-tracker.ts
│   ├── reconnect.ts
│   ├── output-search.ts
│   └── streaming.ts
├── tools/
│   ├── shell.ts          # Main shell tool
│   ├── session-tools.ts  # Session management
│   ├── file-tools.ts     # File transfer tools
│   ├── port-tools.ts     # Port forward tools
│   ├── block-tools.ts    # Block tools (v4.0)
│   ├── pane-tools.ts     # Pane tools (v4.0)
│   └── share-tools.ts    # Share tools (v4.0)
├── prompts/
│   └── index.ts          # MCP prompts
└── utils/
    ├── ansi.ts           # Terminal formatting
    ├── terminal-ui.ts    # UI helpers
    └── patterns.ts       # Command detection

Development

# Install dependencies
npm install

# Build
npm run build

# Watch mode
npm run dev

# Run integration tests (local only)
npm test

# Run with live SSH (requires TEST_SSH_HOST, TEST_SSH_USER)
TEST_SSH_HOST=myserver TEST_SSH_USER=myuser npm test

Troubleshooting

Session won't start

  • Ensure CLI tools are installed and authenticated (gcloud auth login, etc.)

  • Check SSH keys are configured

Commands timeout

  • Smart wait auto-adjusts, but override with waitTime parameter

  • Use //stop to interrupt stuck commands

File transfer fails

  • SSH2 sessions use SFTP (most reliable)

  • Child process sessions use base64 encoding

Port forward not working

  • Ensure local port is available

  • Check remote service is running

Share server issues

  • Default port is 3847

  • Use remote_share_server_start(port=XXXX) to use a different port

  • Check firewall allows connections

License

MIT License - see LICENSE for details.


Keywords: MCP, Model Context Protocol, SSH, remote shell, AI tools, Claude, persistent sessions, terminal, DevOps, SFTP, port forwarding, cloud computing, tmux, panes, blocks, collaboration, sharing

Available Tools

56 tools
remote_block_collapseC

Toggle or set block collapsed state.

Inputs: blockId (required), collapsed.

remote_block_copyA

Get block output only (for copying).

Returns just the output without the command or metadata.

Inputs: blockId (required), stripAnsi.

remote_block_getA

Get a specific block by ID with full output.

Returns the complete command and output for a block.

Inputs: blockId (required), raw.

remote_blocks_errorsA

Find error blocks in session history.

Returns blocks that had errors (non-zero exit or error patterns).

Inputs: limit, sessionId.

remote_blocks_listB

List command blocks for a session.

Each command execution creates a "block" containing the command and its output. Blocks can be searched, tagged, and referenced by ID.

Inputs: limit, sessionId, showCollapsed.

remote_block_tagA

Add tags to a block for organization.

Tags can be used to filter blocks when searching.

Inputs: tags (required), blockId (required).

remote_block_untagA

Remove tags from a block.

Inputs: tags (required), blockId (required).

remote_file_downloadA

Download a file from the remote server to local machine.

Works with both SSH2 and child process sessions:

  • SSH2: Uses SFTP for efficient binary transfer

  • Child process: Uses base64 encoding through the shell

Example: Download logs or config files from a server.

Inputs: localPath (required), remotePath (required), sessionId.

remote_file_listA

List files in a remote directory with details (like ls -la).

Inputs: path (required), sessionId.

remote_file_uploadA

Upload a file from local machine to the remote server.

Works with both SSH2 and child process sessions:

  • SSH2: Uses SFTP for efficient binary transfer

  • Child process: Uses base64 encoding through the shell

Example: Upload a config file to the server.

Inputs: localPath (required), remotePath (required), sessionId.

remote_pane_broadcastA

Broadcast a command to all panes in a session.

Useful for running the same command in multiple contexts simultaneously.

Inputs: command (required), sessionId.

remote_pane_closeB

Close a pane (cannot close the last pane).

Inputs: paneId (required).

remote_pane_execA

Execute a command in a specific pane without switching focus.

Inputs: paneId (required), command (required).

remote_pane_focusC

Switch to a specific pane.

Inputs: paneId (required).

remote_pane_listA

List all panes for a session.

Inputs: sessionId.

remote_pane_nextB

Switch to the next pane in the session.

Inputs: sessionId.

remote_pane_renameB

Rename a pane for easier identification.

Inputs: name (required), paneId (required).

remote_pane_splitA

Split the current pane horizontally or vertically (tmux-style).

Creates a new pane within the session. Use for running multiple commands in parallel or monitoring.

Inputs: direction (required), paneId, sessionId.

remote_port_forward_localA

Start a LOCAL port forward (SSH -L style).

Listens on a local port and forwards connections to a port on the remote server.

Example: Access a database running on the remote server:

  • localPort: 5433

  • remoteHost: localhost

  • remotePort: 5432 → Connect to localhost:5433 to access the remote PostgreSQL

Inputs: localPort (required), remotePort (required), sessionId, remoteHost.

remote_port_forward_remoteA

Start a REMOTE port forward (SSH -R style).

Listens on a port on the remote server and forwards connections back to your local machine. Requires SSH2 session type.

Example: Expose a local dev server to the remote:

  • remotePort: 8080

  • localPort: 3000 → Remote server port 8080 forwards to your localhost:3000

Inputs: localPort (required), remotePort (required), localHost, sessionId.

remote_port_listA

List all active port forwards.

Inputs: sessionId.

remote_port_stopA

Stop a specific port forward by ID.

Inputs: forwardId (required), sessionId.

remote_port_stop_allA

Stop all port forwards for a session or all sessions.

Inputs: sessionId.

remote_session_check_promptA

Check if a session is waiting for user input (password, confirmation, etc.).

Returns details about any detected prompt and how to respond.

Inputs: sessionId.

remote_session_confirmA

Send a Y/N confirmation response to a session.

Inputs: confirm (required), waitTime, sessionId.

remote_session_endA

End remote session(s). Use sessionId='all' to end all sessions.

Inputs: sessionId.

remote_session_errorsA

Find error messages in session history (looks for 'error', 'failed', 'denied', etc.).

Inputs: limit, sessionId.

remote_session_historyB

Get command history for a session with working directories.

Inputs: limit, sessionId.

remote_session_inputA

Send input text to a session (respond to prompts, passwords, confirmations).

Use when a remote command is waiting for user input:

  • Password prompts

  • Y/N confirmations

  • Interactive text input

  • Any prompt ending with : or ?

Set hideInput=true for passwords to avoid logging sensitive data.

Inputs: input (required), waitTime, hideInput, sessionId, +1 more.

remote_session_outputB

Read recent raw output from session buffer.

Inputs: lines, sessionId.

remote_session_passwordA

Send a password to a session. Input is automatically hidden in responses.

Use when prompted for sudo password, SSH passphrase, or other secret input.

Inputs: password (required), waitTime, sessionId.

remote_session_shareA

Share a terminal session for collaboration.

Creates a shareable URL that others can use to view (or control) your terminal session in real-time.

Inputs: password, sessionId, permissions, expiresInMinutes.

remote_session_signalA

Send a signal to the session (SIGINT=Ctrl+C, SIGTERM, SIGKILL, SIGHUP).

Inputs: signal (required), sessionId.

remote_session_startA

Start a remote shell session with explicit parameters. Use for fine-grained control.

For most cases, prefer the shell tool which auto-detects remote commands.

Inputs: method (required), host, port, zone, +12 more.

remote_session_statusA

Get status of all remote sessions with working directory, port forwards, and auto-reconnect status.

Inputs: no named parameters.

remote_session_switchA

Switch the active session when multiple sessions are open.

Inputs: sessionId (required).

remote_session_unshareC

Stop sharing a session.

Inputs: shareId, sessionId.

remote_share_server_startA

Start the share server (usually starts automatically).

Inputs: port.

remote_share_server_stopA

Stop the share server and disconnect all viewers.

Inputs: no named parameters.

remote_shares_listA

List all active session shares.

Inputs: no named parameters.

remote_share_updateB

Update share settings (permissions, expiration).

Inputs: shareId (required), permissions, extendMinutes.

remote_stream_disableB

Disable real-time streaming for a session.

Inputs: sessionId.

remote_stream_enableA

Enable real-time streaming for a session with error detection.

When enabled, the system monitors output in real-time for:

  • Error patterns (configurable)

  • Interactive prompts requiring input

  • Command completion

With autoInterrupt=true, it will automatically send Ctrl+C when errors are detected.

Inputs: sessionId, autoInterrupt, errorPatterns.

remote_stream_statusA

Get streaming status for a session (enabled, error count, pending prompts).

Inputs: sessionId.

remote_swarm_add_targetB

Add a new target to an existing swarm.

Inputs: target (required), swarmId (required), autoReconnect.

remote_swarm_createA

Create a swarm of parallel SSH sessions to multiple machines.

Swarms allow you to connect to multiple servers simultaneously and broadcast commands. Useful for managing clusters, fleets, or performing parallel operations.

Example targets for SSH: [{ "id": "web1", "host": "10.0.0.1", "username": "admin" }, { "id": "web2", "host": "10.0.0.2", "username": "admin" }]

Example targets for GCloud: [{ "id": "vm1", "instance": "my-vm-1", "zone": "us-central1-a" }, { "id": "vm2", "instance": "my-vm-2", "zone": "us-central1-a" }]

Inputs: name (required), method (required), targets (required), autoReconnect.

remote_swarm_endA

End a swarm, closing all its sessions. Use swarmId='all' to end all swarms.

Inputs: swarmId.

remote_swarm_execA

Broadcast a command to all sessions in a swarm (parallel execution).

Returns aggregated output from all targets. Use for running the same command across multiple machines.

Inputs: command (required), swarmId (required), parallel, waitTime, +1 more.

remote_swarm_inputA

Send input text to all sessions in a swarm.

Useful for responding to prompts (passwords, confirmations) across all targets.

Inputs: input (required), swarmId (required).

remote_swarm_interruptA

Send Ctrl+C (SIGINT) to all sessions in a swarm.

Inputs: swarmId (required).

remote_swarm_listA

List all active swarms with their status.

Inputs: no named parameters.

remote_swarm_remove_targetA

Remove a target from a swarm (closes its session).

Inputs: swarmId (required), targetId (required).

remote_swarm_statusA

Get detailed status of a specific swarm including all targets.

Inputs: swarmId (required).

shellA

PRIMARY TOOL - Intelligent shell command handler for remote sessions.

This tool automatically detects and handles:

  1. Remote shell commands (ssh, gcloud compute ssh, aws ssm, az ssh, etc.) - Starts a persistent session

  2. Regular commands when session is active - Executes in the remote session

  3. Session control - Use special exit sequences to close the session

Smart Wait Time: Automatically adjusts wait time based on command type (longer for builds, shorter for ls).

Working Directory Tracking: Tracks cd commands and shows current directory in prompt.

Control sequences (to avoid conflict with normal commands):

  • ~. or //end - End session and return to local shell

  • //stop or //kill or //ctrl-c - Send Ctrl+C (SIGINT) to interrupt running command

Auto-reconnect: Sessions automatically attempt to reconnect on disconnection.

Sessions auto-cleanup after 1 hour of inactivity. Output is displayed exactly as the terminal shows.

Inputs: command (required), stream, waitTime, forceNewSession.

Tool Schema Changelog

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

Loading tool schema changelog…

    TDQS

    B3.2/5.0

    Scored across 56 tools

    Disambiguation2/5

    The `shell` tool is described as the primary tool for remote commands and session control, but it overlaps heavily with `remote_session_start`, `remote_session_end`, `remote_session_signal`, and `remote_session_output`. Several session inspection tools (`remote_session_history`, `remote_session_output`, `remote_session_search`, `remote_session_errors`) also have fuzzy boundaries. An agent would struggle to decide whether to use `shell` or a dedicated `remote_session_*` tool in many situations.

    Naming Consistency3/5

    Most tools follow a `remote_<resource>_<action>` pattern, but the `shell` tool breaks it by not having a `remote_` prefix. There are also minor inconsistencies in pluralization (e.g., `remote_blocks_list` vs `remote_block_get`, `remote_shares_list` vs `remote_session_*`). Overall the pattern is readable but not fully uniform.

    Tool Count2/5

    With 56 tools, this server is heavily overweight. While the domain covers many features (sessions, files, ports, blocks, panes, sharing, swarms, streaming), the granularity is excessive. For example, there are 7 separate pane tools and 8 swarm tools, which feels bloated. A more concise set of 15-20 tools would likely cover the same functionality with less confusion.

    Completeness5/5

    The tool surface is exceptionally complete for a remote shell server. It covers session lifecycle, file transfer, port forwarding, command history, multi-pane management, session sharing, swarm operations, and streaming/error detection. There are no obvious missing operations; it even provides specialized input methods for prompts, passwords, and confirmations.

    Maintenance

    ActivityInactive
    ResponsivenessOutdated data

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      D
      maintenance
      Enables AI assistants to maintain persistent SSH terminal sessions and transfer files to/from remote servers. Allows stateful command execution, natural language server management, and seamless file operations through SSH connections.
      5 npm
      36
      MIT
    • A
      license
      Not graded
      quality
      D
      maintenance
      Enables AI agents to have persistent, fully interactive SSH sessions into remote hosts, behaving like a local terminal.
      15 npm
      2
      MIT
    • A
      license
      A
      quality
      B
      maintenance
      Exposes persistent, stateful remote Bash sessions to AI agents via SSH, enabling command execution with preserved working directory and environment.
      7
      72 npm
      1
      MIT
    • A
      license
      A
      quality
      B
      maintenance
      Enables AI agents to establish and manage persistent SSH sessions, supporting smart command execution, async tasks, multi-host, sudo, and file operations through SFTP.
      15
      34 PyPI
      MIT