New:Socket for Asana Is Now Available.Learn more
Get Started

ssh-session-mcp

Package Overview
Dependencies
Maintainers
1
Versions
27
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

ssh-session-mcp

Persistent SSH PTY session manager for MCP clients with actor-aware input tracking, terminal-style dashboard rendering, and automatic session cleanup.

Source
npmnpm
Version
2.7.1
Version published
Weekly downloads
70
Maintainers
1
Weekly downloads
 
Created
Source

ssh-session-mcp

中文 | English

License: Apache%202.0 Node.js Version TypeScript npm version

ssh-session-mcp is a persistent SSH PTY session manager for MCP clients. It gives the user and the AI the same terminal session, adds a browser viewer, tracks who typed what, and keeps long-running SSH work manageable instead of stateless.

ssh-session-mcp hero demo

Why It Exists

Most SSH-oriented MCP servers can execute commands, but they do not manage terminal state well enough for real collaboration.

ssh-session-mcp focuses on the missing runtime layer:

  • One shared PTY for both the human and the AI
  • Browser terminal for live inspection and manual intervention
  • Input lock so the AI does not type over the user
  • Safe/full execution modes for risky commands
  • Configurable default policy rules plus session-level custom rule overrides
  • Async command tracking for long-running remote work
  • Multi-device and multi-connection profile support
  • Local debug mode for demos, offline testing, and prompt iteration

Best Fit

  • AI-assisted remote development on Linux boards and SSH servers
  • Embedded, ROS, training, and deployment hosts that need a real terminal
  • Users who want the AI to help, but do not want to surrender the terminal
  • MCP Marketplace listings where the install and demo path must be clear

Quick Start

1. Agent-First Install (Auto-download on first run)

If the goal is to let Claude Code, Codex, or OpenCode install the server automatically, prefer npx -y ssh-session-mcp in the MCP command instead of a prior global install.

For Cline Marketplace and other agent installers, see llms-install.md. This repo is structured to be one-click installable through an npx -y ssh-session-mcp --viewerPort=auto command.

Claude Code

claude mcp add --transport stdio ssh-session-mcp -- npx -y ssh-session-mcp --viewerPort=auto

Windows note from the Claude Code docs: native Windows users should wrap npx with cmd /c for stdio MCP servers.

claude mcp add --transport stdio ssh-session-mcp -- cmd /c npx -y ssh-session-mcp --viewerPort=auto

Codex

codex mcp add ssh-session-mcp -- npx -y ssh-session-mcp --viewerPort=auto

OpenCode

OpenCode's opencode mcp add flow is interactive. Choose a local MCP server and use this command:

npx -y ssh-session-mcp --viewerPort=auto

If you prefer config instead of the interactive flow:

{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "ssh-session-mcp": {
      "type": "local",
      "command": ["npx", "-y", "ssh-session-mcp", "--viewerPort=auto"]
    }
  }
}

This is the closest thing to "automatic installation" for stdio MCP servers today: the MCP client stores the command, and npx -y downloads the package automatically the first time it runs.

2. Fastest Local Demo

npm install -g ssh-session-mcp
ssh-session-mcp-ctl launch --local --viewerPort=auto

This starts a local shell instead of SSH and opens the browser terminal, which is the easiest way to test the MCP runtime before touching a real server.

3. Register As An MCP Server

Use the MCP server binary directly when wiring a client:

# Global install
npm install -g ssh-session-mcp

# Server command used by MCP clients
ssh-session-mcp --viewerPort=auto
# Claude Code
claude mcp add --transport stdio ssh-session-mcp -- ssh-session-mcp --viewerPort=auto

# Codex CLI
codex mcp add ssh-session-mcp -- ssh-session-mcp --viewerPort=auto

If you prefer npx instead of a global install:

npx -y ssh-session-mcp --viewerPort=auto

4. Connect To A Real SSH Target

Create .env from .env.example:

cp .env.example .env
SSH_HOST=192.168.1.100
SSH_PORT=22
SSH_USER=username
SSH_PASSWORD=
SSH_KEY=
VIEWER_PORT=auto
AUTO_OPEN_TERMINAL=false
SSH_MCP_MODE=safe

Then launch:

ssh-session-mcp-ctl launch --viewerPort=auto

5. Multi-Device Config

For multiple boards or named targets, create ssh-session-mcp.config.json:

{
  "defaultDevice": "board-a",
  "devices": [
    {
      "id": "board-a",
      "host": "192.168.10.58",
      "port": 22,
      "user": "orangepi",
      "auth": { "passwordEnv": "BOARD_A_PASSWORD" },
      "defaults": {
        "term": "xterm-256color",
        "cols": 120,
        "rows": 40,
        "autoOpenViewer": true,
        "viewerMode": "browser"
      }
    }
  ]
}

Discovery order:

  • --config=/path/to/config.json
  • Workspace ssh-session-mcp.config.json
  • User-global config
  • Legacy .env fallback

Important:

  • Config discovery is based on the MCP process working directory.
  • auth.password is intentionally unsupported. Use auth.passwordEnv or auth.keyPath.
  • Secrets belong in .env or the parent environment, not in repo-tracked JSON.

Viewer And Collaboration Model

The browser viewer is not decorative. It is part of the workflow:

  • The user can see exactly what the AI did.
  • The AI can pause when the user takes over.
  • Password prompts, pagers, and editors become visible state instead of hidden failure modes.
  • Session diagnostics and history turn terminal debugging into something inspectable.

Marketplace-Friendly Flow

For users:

install -> launch viewer -> connect once -> keep the session alive -> let the AI help

For agents:

ssh-quick-connect -> ssh-run -> inspect output -> ssh-command-status if needed -> ssh-run again

Use AGENT.md when you want the AI to install, inspect config, connect devices, and help the user end-to-end. Compatibility notes for older agent setups remain in AI_AGENT_GUIDE.md.

Core Differences From A Stateless MCP SSH Wrapper

  • Shared PTY instead of one-off command execution
  • Actor-aware transcript markers for user, system, and agent input
  • Terminal-state checks before dangerous or nonsensical writes
  • Auto cleanup for sessions and viewer processes
  • Session-scoped browser viewer with diagnostics and history
  • Local debug mode with --local for offline testing

Operation Modes

ModeBehavior
safeDefault. Blocks obviously dangerous, interactive, or streaming commands when they are a poor fit for autonomous execution.
fullAllows broader control and warns less, while still blocking extreme cases such as obvious destructive abuse.

Input Lock

ModeWho can type
commonUser and AI
userOnly the user
claude / codexOnly the selected agent

If the terminal is locked by the user, ssh-run, ssh-session-send, and ssh-session-control return a blocked response instead of forcing input into the PTY.

MCP Tools

ToolPurpose
ssh-quick-connectConnect or reuse the default target and optionally open the viewer
ssh-runExecute a command with completion detection and exit-code capture
ssh-statusInspect sessions, viewer state, and operation mode
ssh-command-statusPoll async command progress
ssh-retryRetry flaky commands with backoff
ssh-session-policy-listInspect inherited defaults and current session custom policy rules
ssh-session-policy-upsertAdd or update a session-level custom policy rule
ssh-session-policy-removeRemove a session-level custom policy rule
ssh-session-policy-resetReset session custom rules back to inherited defaults

Full Tool Catalog

ToolPurpose
ssh-session-openOpen a session with explicit SSH parameters
ssh-session-sendSend raw PTY input
ssh-device-listList configured devices and defaults
ssh-session-readRead buffered terminal output by offset
ssh-session-watchLong-poll for output and dashboard changes
ssh-session-historyRead line-numbered mixed terminal history
ssh-session-controlSend control keys such as ctrl_c, arrows, or tab
ssh-session-resizeResize the PTY
ssh-session-listList tracked sessions
ssh-session-diagnosticsInspect lock state, warnings, running command state, and viewer health
ssh-session-policy-listShow inherited policy defaults and the current session rule set
ssh-session-policy-upsertAdd or update a session-specific custom policy rule
ssh-session-policy-removeRemove a session-specific custom policy rule
ssh-session-policy-resetRestore inherited rules for the current session
ssh-session-set-activeChoose the default session
ssh-viewer-ensureOpen or reuse the local viewer
ssh-viewer-listList tracked viewer processes
ssh-session-closeClose a session cleanly
ssh-quick-connectOne-step connect flow for agents
ssh-runMain command execution tool
ssh-statusRuntime overview
ssh-command-statusAsync poller
ssh-retryRetry executor

Local Operator Commands

These helpers are for humans on the workstation that owns the viewer:

ssh-session-mcp-ctl status
ssh-session-mcp-ctl devices
ssh-session-mcp-ctl launch --viewerPort=auto
ssh-session-mcp-ctl launch --local --viewerPort=auto
ssh-session-mcp-ctl logs --tail=60
ssh-session-mcp-ctl cleanup

Default rule library management for operators:

ssh-session-mcp-config policy list --scope=merged
ssh-session-mcp-config policy set block-kubectl-delete --pattern="\\bkubectl\\s+delete\\b" --category=dangerous --action=block --message="kubectl delete is blocked in safe mode"
ssh-session-mcp-config policy remove block-kubectl-delete

Equivalent repo-local commands also exist:

npm run launch
npm run status
npm run devices
npm run logs
npm run cleanup

Configuration Summary

Key environment variables:

VariableMeaningDefault
SSH_HOSTLegacy single-target SSH hostrequired in legacy mode
SSH_PORTLegacy single-target SSH port22
SSH_USERLegacy single-target SSH userrequired in legacy mode
SSH_PASSWORDPassword authempty
SSH_KEYLocal private key pathempty
SSH_MCP_INSTANCERuntime isolation keyproc-<pid> or helper-selected
SSH_MCP_CONFIGExplicit config file pathauto-discovery
VIEWER_HOSTViewer bind host127.0.0.1
VIEWER_PORTViewer port or auto0 unless configured
SSH_MCP_MODEsafe or fullsafe
SSH_MCP_LOCALLaunch a local shell instead of SSHfalse
SSH_MCP_DEBUGEnable debug browser actionsfalse
AUTO_OPEN_TERMINALAuto-open browser terminalfalse
SSH_MCP_LOG_MODEoff or meta JSONL loggingoff

Example config file: docs/examples/ssh-session-mcp.config.example.json

Security

  • The package never requires raw passwords inside tracked JSON config.
  • .env is ignored by git and npm.
  • Viewer HTTP binds to localhost by default.
  • The MCP server treats terminal mode and input lock as first-class safety signals.

See SECURITY.md for the full policy.

Platform Notes

  • Windows 10/11: first-class host environment
  • Linux: strong fit for headless MCP + browser viewer workflows
  • macOS: standard Node.js path supported
  • Remote Linux hosts: first-class target

More detail: docs/platform-compatibility.md

Docs

Development

npm install
npm run build
npm run test
npm run validate:repo
npm run build:site

GitHub Actions included in this repo can:

  • run CI on push and pull request
  • deploy a GitHub Pages landing page from dist/
  • build a tagged GitHub Release with the npm package tarball attached

License

Apache-2.0. See LICENSE.

Keywords

ssh

FAQs

Package last updated on 15 May 2026

Related posts