프로토타입 · 미리 보기: 공식 레지스트리의 모든 서버를 담고 있으며 30분마다 동기화해요. 리뷰와 계정 기능은 다음 단계에서 열려요.
PopNx MCPAI를 쓰는 사람을 위한 MCP 서버 · 쉬운 말로 설명해요

SSH Host Storage & Remote Exec

제작자: xlbbb-cn버전 0.1.3i★ –i내 컴퓨터에서 실행
레지스트리 이름io.github.xlbbb-cn/mcp-ssh-exec-cmd

설치

개요

제작자가 쓴 설명(영어 원문)

Stdio MCP server for SSH host storage and remote command execution with a connection-pool monitor.

PopNx MCP의 세 기둥

이 세 가지는 절대 하나의 점수로 합치지 않아요. 의견, 측정, 인기는 서로 다른 것이니까요.

할 수 있는 일

이 서버는 아직 쉬운 말로 된 요약을 쓰지 못했어요. 아래는 레지스트리에서 읽어 온 사실이에요.

  • 연결 방식: 내 컴퓨터에서 실행
  • 전송 방식: stdio
  • 카테고리: 개발자 도구
  • 입력해야 할 값: MCP_SSH_MASTER_KEY

설치

쓰고 있는 AI 앱을 고른 다음 설정을 복사하세요.

설치하기 전에

  • 기본 점검: 1개 중 1개 통과
  • 내 컴퓨터에서 내 사용자 계정의 권한(파일, 네트워크, 앱)으로 실행돼요.
  • 직접 입력할 값: MCP_SSH_CONFIG_DIR, MCP_SSH_MASTER_KEY, MCP_SSH_POOL_IDLE_MS, MCP_SSH_POOL_MAX_HOSTS

비밀로 표시된 값은 내 계정의 열쇠예요. 절대 다른 사람과 공유하거나 채팅에 붙여 넣지 마세요.

필요한 것

  • npmNode.js 설치(npx 명령어용)

어떤 앱을 쓰세요?

위에서 앱을 고르세요. 기억해 두었다가 다음부터는 버튼에 “…에 설치”라고 표시해요.

Claude Desktop → Settings → Developer → Edit Config를 열고 claude_desktop_config.json에 이 내용을 붙여 넣으세요

{
  "mcpServers": {
    "ssh-exec-cmd": {
      "command": "npx",
      "args": [
        "-y",
        "@xlbbb-cn/mcp_ssh_exec_cmd"
      ],
      "env": {
        "MCP_SSH_CONFIG_DIR": "your-value",
        "MCP_SSH_MASTER_KEY": "your-value",
        "MCP_SSH_POOL_IDLE_MS": "your-value",
        "MCP_SSH_POOL_MAX_HOSTS": "your-value"
      }
    }
  }
}

터미널에서 이 명령어를 실행하세요

claude mcp add ssh-exec-cmd --env MCP_SSH_CONFIG_DIR=your-value --env MCP_SSH_MASTER_KEY=your-value --env MCP_SSH_POOL_IDLE_MS=your-value --env MCP_SSH_POOL_MAX_HOSTS=your-value -- npx -y @xlbbb-cn/mcp_ssh_exec_cmd

실행하기 전에 빈 값을 채워 주세요.

Cursor에서 열기

또는 설정을 직접 복사하기

프로젝트의 .cursor/mcp.json 또는 ~/.cursor/mcp.json에 붙여 넣으세요

{
  "mcpServers": {
    "ssh-exec-cmd": {
      "command": "npx",
      "args": [
        "-y",
        "@xlbbb-cn/mcp_ssh_exec_cmd"
      ],
      "env": {
        "MCP_SSH_CONFIG_DIR": "your-value",
        "MCP_SSH_MASTER_KEY": "your-value",
        "MCP_SSH_POOL_IDLE_MS": "your-value",
        "MCP_SSH_POOL_MAX_HOSTS": "your-value"
      }
    }
  }
}

브라우저가 앱을 열지 물어본 다음, 앱이 설정을 보여 주고 확인을 요청해요. 키 값은 비워 두니 직접 입력하세요.

VS Code에서 열기

또는 설정을 직접 복사하기

프로젝트의 .vscode/mcp.json에 붙여 넣으세요

{
  "servers": {
    "ssh-exec-cmd": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "@xlbbb-cn/mcp_ssh_exec_cmd"
      ],
      "env": {
        "MCP_SSH_CONFIG_DIR": "your-value",
        "MCP_SSH_MASTER_KEY": "your-value",
        "MCP_SSH_POOL_IDLE_MS": "your-value",
        "MCP_SSH_POOL_MAX_HOSTS": "your-value"
      }
    }
  }
}

브라우저가 앱을 열지 물어본 다음, 앱이 설정을 보여 주고 확인을 요청해요. 키 값은 비워 두니 직접 입력하세요.

이 서버는 내 컴퓨터에서 실행되는데, ChatGPT는 인터넷에 있는 서버에만 연결할 수 있어요. 다른 앱을 고르세요.

선택한 앱은 이 기기의 쿠키에만 저장돼요. 계정은 필요 없어요.

직접 입력할 값

  • MCP_SSH_CONFIG_DIR env
    Directory holding hosts.json and master.key (default: ~/.mcp-ssh-server).
  • MCP_SSH_MASTER_KEY 비밀 env
    64-hex-character AES-256-GCM master key; auto-generated into /master.key when unset.
  • MCP_SSH_POOL_IDLE_MS env
    Idle SSH connections are closed after this many milliseconds (default: 60000, 0 disables pooling).
  • MCP_SSH_POOL_MAX_HOSTS env
    Maximum number of pooled SSH connections (default: 32).

이 설정은 제작자의 레지스트리 정보로 만들었어요. README와 다르면 README를 따르세요.

할 수 있는 일

내 컴퓨터에서 실행돼요. 설치하면 AI 앱에 도구 목록이 나타나요.

기본 점검i

누구나 볼 수 있는 정보를 점검했고, 코드는 읽지 않았어요. 해당하지 않는 항목은 개수에서 뺐어요. · 2026년 11월 8일 점검

  • ✓ 통과

    제작자와 저장소 일치

    레지스트리 이름이 GitHub 계정 xlbbb-cn 기준으로 확인되었고, 이 계정이 저장소를 소유하고 있어요

  • … 아직 점검 안 함

    계속 관리되고 있음

    아직 GitHub에서 이 저장소를 읽어 오지 않았어요

  • … 아직 점검 안 함

    라이선스 있음

    아직 GitHub에서 이 저장소를 읽어 오지 않았어요

  • – 해당 없음

    엔드포인트 응답

    내 컴퓨터에서 실행되는 서버라 인터넷 엔드포인트가 없어요

  • – 해당 없음

    OAuth로 로그인

    내 컴퓨터에서 실행되며, 대신 로컬 설정을 사용해요

  • … 아직 점검 안 함

    도구 설명에 숨겨진 지시 없음

    내 컴퓨터에서 실행돼요. 도구 목록은 인터넷 엔드포인트가 있는 서버에서만 읽을 수 있어요

개발자 도구 카테고리의 다른 서버와 비교i

  • 이 카테고리의 다른 서버 5548개 중 0%보다 스타가 많아요
  • 이 카테고리의 다른 서버 5548개 중 63%보다 최근에 레지스트리에 공개됐어요
  • 기본 점검 결과가 이 카테고리의 다른 서버 5548개 중 100%와 같거나 더 좋아요

레지스트리에서 이 카테고리의 활성 서버 전체와 비교했어요. 스타는 게시자가 저장소를 소유한 경우에만 세요.

자주 묻는 질문

SSH Host Storage & Remote Exec, 안전한가요?

해당하는 기본 점검 1개 중 1개를 통과했어요. 코드는 읽지 않았어요. 키나 토큰을 넣기 전에 서버가 어떤 권한을 요구하는지 확인하고, 꼭 필요한 권한만 있는 키를 쓰세요.

어떤 키나 코드가 필요한가요?

입력해야 할 값: MCP_SSH_MASTER_KEY

내 컴퓨터에서 실행되나요, 클라우드에서 실행되나요?

내 컴퓨터에서 실행돼요. AI 앱이 필요할 때 실행하고, 데이터는 제작자의 서버를 거치지 않아요(서버 자체가 온라인 서비스를 호출하는 경우는 제외).

아직 관리되고 있나요?

GitHub 저장소는 마지막으로 – 변경됐고, 최신 버전(0.1.3)은 16일 전 레지스트리에 올라왔어요.

어떤 앱에서 쓸 수 있나요?

Claude Desktop, Claude Code, Cursor, VS Code처럼 MCP를 지원하는 앱에서 쓸 수 있어요. 내 컴퓨터에 Node.js도 있어야 해요.

대신 쓸 수 있는 건 뭐가 있나요?

같은 카테고리에는: GitHub, Desktop Commander, Cloudflare MCP

대안

같은 카테고리에서 다른 제작자가 만든 서버예요. 스타 순으로 정렬했어요.

카드 보는 법:↓ 주간 다운로드i★ GitHub 스타i세 기둥: 리뷰 · 점검 · 사용 정도i업데이트 = 최신 버전을 레지스트리에 공개한 날i

GitHub

Connect AI assistants to GitHub - manage repos, issues, PRs, and workflows through natural language.

제작자: github널리 사용됨★ 3.4만5일 전 업데이트

컴퓨터 또는 클라우드

Desktop Commander

MCP server for terminal commands, file operations, and process management

제작자: wonderwhy-er널리 사용됨↓ 71만/주★ 1만17일 전 업데이트

내 컴퓨터에서 실행

Cloudflare MCP

Cloudflare MCP servers

제작자: cloudflare널리 사용됨★ 4.4천14개월 전 업데이트

클라우드에서 실행✓ mcp.cloudflare.com

제작자의 README

README 열기

제작자의 저장소에서 쓰인 그대로 가져왔어요. PopNx MCP가 검토하거나 보증한 내용이 아니에요. HTML, 이미지, 스크립트는 제거했어요. 링크를 누르면 이 사이트를 벗어나요.

mcp-ssh-server

A standalone stdio MCP server that turns *SSH host management* and *remote command execution* into MCP tools.

It also ships an interactive / batch CLI (remote-ssh-cli) for managing SSH hosts on the local machine.

简体中文文档见 README.zh-CN.md。

This is a Node.js re-implementation of the SSH-host half of a FastAPI project (app/services/llm_tools.py + app/utils/ssh_helper.py + app/models/host.py) — without the backend, without the database, without a network service. Any MCP client (Claude Desktop, Continue, a custom agent, …) can start it with npx and talk to it over JSON-RPC.

Highlights

  • Fully standalone — its own encrypted JSON store (~/.mcp-ssh-server/hosts.json); no FastAPI backend, no database.
  • No native dependencies — Node's built-in crypto for AES-256-GCM, pure-JS ssh2 for SSH; runs on Windows / macOS / Linux.
  • Standards-compliant stdio MCP — speaks the Model Context Protocol stdio transport and can be launched with npx.
  • Credentials never leave the server — host tool responses never contain a password or a private key; the SSH tools decrypt them internally to open a connection and never echo them back.
  • Connection pooling — one live SSH session per host, reused across commands and playbook steps.
  • Pool monitoring — pool_status renders the live pool as a desensitized table: uid, name, connection state, executed / failed commands and the last command (secrets and IP addresses masked).
  • CLI companion — remote-ssh-cli manages the very same store (interactive TUI, batch commands, CSV bulk import) and can monitor the connection pool live (one frame per second, q quits).

MCP tools

Nine tools are published:

ToolDescription
cli_helpInstallation / usage / troubleshooting notes for remote-ssh-cli, optionally narrowed down with topic
host_listList the known hosts — only `sys_name` and `uid` (no address, user name or credential); uid is the host_id every other tool expects
host_createAdd a host (password / private key / passphrase are encrypted at rest)
host_updatePatch host fields (omitted credential fields keep their current value)
host_deleteDelete a host
ssh_run_commandRun a single non-interactive command on a host
ssh_run_interactiveRun a command that answers prompts (sudo, …) through expect/answer pairs
ssh_run_playbookRun a multi-step playbook (structured # @… directives *or* legacy expect:/answer: lines)
pool_statusMonitor the live connection pool — one desensitized row per host (uid, name, state, executed / failed commands, last command)
The host identifier contract
  • host_list is the entry point: every host comes back as exactly two fields — sys_name (the name) and uid (the unique identifier).
  • Every other tool takes that same value under the name host_id. Pass it back unchanged; never assemble or guess one.
  • When an id does not resolve, the tool answers with an actionable error: Host ' ' not found. host_id must be the exact 'uid' value returned by host_list — call host_list to obtain the valid identifiers. Call host_list again and retry with the value it returns.
  • host_get is deliberately not published to MCP clients: the model only ever sees sys_name + uid, never one host's address, user name or credential. The CLI keeps its own get subcommand for human operators.
Arguments at a glance
ToolArguments
cli_helptopic? — one of install, list, get, create, update, delete, import, monitor, tui, windows
host_listenabled_only? (bool)
host_createip_address (required), system_name?, ssh_port? (1-65535, default 22), ssh_username? (default root), ssh_auth_method? (password \pubkey), ssh_password?, ssh_private_key?, ssh_private_key_passphrase?, is_enable? (default true)
host_updatehost_id (required) plus any of the fields above — an omitted field keeps its current value
host_deletehost_id
ssh_run_commandhost_id, command, timeout_seconds (1-600, required)
ssh_run_interactivehost_id, command, expects? ([{ expect, answer }]), timeout_seconds
ssh_run_playbookhost_id, content (the multi-line playbook body), timeout_seconds
pool_statushost_id? (one host only), format? (table \json), include_history? (bool), include_idle_hosts? (bool)

ip_address is unique across the store — creating a duplicate fails.

Command results come back as a plain text block:

[stdout]

hello [stderr] [exit_code=0 success=true duration_ms=42]

Quick start

git clone https://github.com/xlbbb-cn/mcp_ssh_exec_cmd.git

cd mcp_ssh_exec_cmd npm install npm run build

The build output lands in dist/ and provides two binaries:

BinaryEntry pointPurpose
remote-ssh-serverdist/index.jsthe stdio MCP server (started by your MCP client)
remote-ssh-clidist/cli.jsinteractive / batch host-management CLI
Install

The package is published to two registries under the same name, @xlbbb-cn/mcp_ssh_exec_cmd:

RegistryInstall commandAuth
npmjs.org (recommended)npm install -g @xlbbb-cn/mcp_ssh_exec_cmdnone — the public registry needs no token
GitHub Packagesnpm install -g @xlbbb-cn/mcp_ssh_exec_cmd --registry=https://npm.pkg.github.coma personal access token (classic) with read:packages

GitHub Packages requires authentication for installs as well — even for public packages — so give npm a token first:

npm login --scope=@xlbbb-cn --auth-type=legacy --registry=https://npm.pkg.github.com

Username:

Password:

The same thing can be written into ~/.npmrc:

//npm.pkg.github.com/:_authToken=<PAT>

@xlbbb-cn:registry=https://npm.pkg.github.com

Global install (CLI)

From a local checkout:

npm run build

npm install -g --allow-scripts=ssh2,cpu-features .

Or straight from a registry:

npm install -g @xlbbb-cn/mcp_ssh_exec_cmd                                      # npmjs.org

npm install -g @xlbbb-cn/mcp_ssh_exec_cmd --registry=https://npm.pkg.github.com # GitHub Packages

Afterwards remote-ssh-cli is on your PATH:

remote-ssh-cli                        # interactive TUI

remote-ssh-cli list # JSON list of every host remote-ssh-cli get remote-ssh-cli create remote-ssh-cli update remote-ssh-cli delete remote-ssh-cli import [--dry-run] remote-ssh-cli monitor # live connection-pool monitor (q quits)

create / update take a JSON file, e.g.:

{

"ip_address": "192.168.1.100", "system_name": "web-01", "ssh_port": 22, "ssh_username": "root", "ssh_auth_method": "password", "ssh_password": "your-password" }

CSV bulk import

remote-ssh-cli import hosts.csv turns every row of the file into one host. The first line must be a header row containing at least an ip_address column:

ip_address,system_name,ssh_port,ssh_username,ssh_auth_method,ssh_password

192.168.1.100,web-01,22,root,password,secret 192.168.1.101,db-01,2222,deploy,password,secret

ColumnDescriptionDefault
ip_addressrequired, host address, unique across the table—
system_namedisplay nameempty
ssh_portSSH port22
ssh_usernameSSH user nameroot
ssh_auth_methodpassword / pubkeypassword
ssh_passwordplain-text password (encrypted before it hits the disk)—
ssh_private_keyplain-text private key (encrypted before it hits the disk)—
ssh_private_key_pathpath to a key file (alternative to ssh_private_key)—
ssh_private_key_passphrasepassphrase protecting the key (encrypted before it hits the disk)—
is_enabletrue/false/1/0/yes/notrue
  • Column names are case-insensitive and accept aliases (ip, host, name, port, user, password, …).
  • Quoted commas, embedded newlines and "" escapes are parsed per RFC 4180, so private key material is never mangled.
  • A bad row never aborts the batch: every row ends up reported as created / skipped (duplicate IP) / failed (invalid data). The command prints a summary and exits with code 1 when at least one row failed.
  • --dry-run only validates and reports — nothing is written.
  • The CSV template (header + example row) is printed in the remote-ssh-cli banner, and remote-ssh-cli import without a file argument prints the same thing.

Windows note: if you hit JScript runtime error (800A03EA), make sure npm is >= 10.8.0 or run the command from cmd.exe instead of PowerShell — the .ps1 wrapper npm generates may not invoke node explicitly on older npm versions. Both entry points ship a #!/usr/bin/env node shebang.

Monitor the connection pool

remote-ssh-cli monitor opens a live view of the SSH connection pool. The screen is redrawn once per second and the view is left with the `q` key (Ctrl+C works as well):

SSH connection pool monitor · 15:05:31 · tick 42 · refresh 1000ms · last tick 41ms

pool 2/32 connections · idle timeout 1m00s · probe timeout 5s · press q to quit

HOST ADDRESS USER STATUS LATENCY LAST OK POOL


web-01 192.168.1.100 root up 12ms 15:05:30 1m05s db-01 10.0.0.5:2222 deploy down 8ms - -

problems (1): db-01 (10.0.0.5:2222): connect ECONNREFUSED 10.0.0.5:2222

ColumnMeaning
STATUSup (the probe succeeded), down (the connection failed) or disabled (the host is switched off — it is listed but never probed)
LATENCYhow long the last probe took, end to end
LAST OKclock time of the last successful probe
POOLage of the pooled connection — how long the session has been reused without being re-established
  • The monitor keeps the pool warm: every host is probed through the very same ConnectionPool the SSH tools use, so the connections it shows are real, reusable sessions.
  • The CLI runs its own pool — the MCP server is a separate process, so its connections cannot be inspected from the terminal.
  • The default probe command is echo (it exists in a POSIX shell *and* in cmd.exe); every probe runs once per interval, so keep --interval reasonable on large host lists.
  • Without a terminal (a pipe, a CI job) the monitor prints a single frame instead of looping — there would be no key to stop it.
OptionDescriptionDefault
--interval redraw interval1000
--timeout per-host probe timeout (1-600 s)5
--probe-cmd command used to probe a hostecho
--host monitor only this host (repeatable)all hosts
--allalso list disabled hosts (never probed)off
--onceprint a single frame and exitoff

The same view is available from the interactive TUI (7) Monitor connection pool).

Register it with an MCP client

~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):

{

"mcpServers": { "ssh": { "command": "npx", "args": ["-y", "-p", "@xlbbb-cn/mcp_ssh_exec_cmd", "remote-ssh-server"] } } }

On GitHub Packages, add the registry to the same snippet:

"args": [

"--registry=https://npm.pkg.github.com", "-y", "-p", "@xlbbb-cn/mcp_ssh_exec_cmd", "remote-ssh-server" ]

앞부분만 보여 드려요. 나머지는 저장소에서 읽어 보세요

PopNx에게 묻기