SSH Host Storage & Remote Exec
What it does
Stdio MCP server for SSH host storage and remote command execution with a connection-pool monitor.
- Connects パソコンで動く
- Account or key Needs MCP_SSH_MASTER_KEY
- Category 開発者ツール
インストール
使っているAIアプリを選んで、設定をコピーしてください。
チェック 2/2 合格 · あなたのパソコンで動きます
まず:どの AI を使っていますか?
使っているアプリを選ぶと、下に手順が表示されます。
Claude につなげますが、先に準備が必要です
SSH Host Storage & Remote Exec のキーが必要です(提供元のサイトで登録、費用がかかる場合あり) · 先にパソコンへ Node.js を入れてください(1 回だけ) · パソコン版 Claude アプリ(Windows または Mac)のみ。Web やスマホでは使えません
SSH Host Storage & Remote Exec に登録してキーを作る
提供元のサイトで登録し、次の手順で使う API キーを作ります。費用がかかる場合があります。
パソコン版 Claude アプリの設定ファイルを開く
SettingsDeveloperEdit Config
この設定を貼り付けて保存
{ "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 を終了してもう一度開く
試してみる
SSH Host Storage & Remote Exec を使って、私に何ができるか教えて、1 つやってみせて✓ Claude が SSH Host Storage & Remote Exec を使っていると言うか、回答に SSH Host Storage & Remote Exec のツール名が出れば接続成功です
メニュー名は 2026年11月11日 に Anthropic のヘルプページで確認 · アプリのバージョンにより画面が少し違うことがあります
ChatGPT はまだ SSH Host Storage & Remote Exec につなげません
SSH Host Storage & Remote Exec はパソコンに入れて使うものですが、ChatGPT は Web 上で動くサーバーにしかつなげません
代わりにできること
A · SSH Host Storage & Remote Exec につなげるアプリを使う
- SSH Host Storage & Remote Exec のキーが必要です(提供元のサイトで登録、費用がかかる場合あり) · 先にパソコンへ Node.js を入れてください(1 回だけ) · パソコン版 Claude アプリ(Windows または Mac)のみ。Web やスマホでは使えません
- SSH Host Storage & Remote Exec のキーが必要です(提供元のサイトで登録、費用がかかる場合あり) · 先にパソコンへ Node.js を入れてください(1 回だけ)
- SSH Host Storage & Remote Exec のキーが必要です(提供元のサイトで登録、費用がかかる場合あり) · 先にパソコンへ Node.js を入れてください(1 回だけ)
- SSH Host Storage & Remote Exec のキーが必要です(提供元のサイトで登録、費用がかかる場合あり) · 先にパソコンへ Node.js を入れてください(1 回だけ)
B · 開発者ツール の中で ChatGPT につなげる別のサーバー
同じカテゴリでよく使われているものから、キーなしでアドレスだけでつなげるものを選びました
- Sentry✓ ChatGPT
- Front-End Checklist✓ ChatGPT
- Compiler Explorer✓ ChatGPT
Claude Code につなげますが、先に準備が必要です
SSH Host Storage & Remote Exec のキーが必要です(提供元のサイトで登録、費用がかかる場合あり) · 先にパソコンへ Node.js を入れてください(1 回だけ)
SSH Host Storage & Remote Exec に登録してキーを作る
提供元のサイトで登録し、次の手順で使う API キーを作ります。費用がかかる場合があります。
ターミナルを開く
Mac:Command+スペースで Terminal と入力 · Windows:PowerShell を開く
このコマンドを貼り付けて Enter
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_cmdEnter の前に「your-value」を自分のキーに書き換えてください
キーはアプリの入力欄にだけ貼り付け、チャットに貼ったり人に送ったりしないでください
Claude Code で /mcp と入力
SSH Host Storage & Remote Exec が一覧にあり、接続済みと表示されれば OK です
試してみる
SSH Host Storage & Remote Exec を使って、私に何ができるか教えて、1 つやってみせて✓ Claude Code が SSH Host Storage & Remote Exec を使っていると言うか、回答に SSH Host Storage & Remote Exec のツール名が出れば接続成功です
メニュー名は 2026年11月11日 に Anthropic のヘルプページで確認 · アプリのバージョンにより画面が少し違うことがあります
Cursor につなげますが、先に準備が必要です
SSH Host Storage & Remote Exec のキーが必要です(提供元のサイトで登録、費用がかかる場合あり) · 先にパソコンへ Node.js を入れてください(1 回だけ)
SSH Host Storage & Remote Exec に登録してキーを作る
提供元のサイトで登録し、次の手順で使う API キーを作ります。費用がかかる場合があります。
キーを入力
SSH Host Storage & Remote Exec の設定で MCP_SSH_CONFIG_DIR, MCP_SSH_MASTER_KEY, MCP_SSH_POOL_IDLE_MS, MCP_SSH_POOL_MAX_HOSTS が空です。自分のキーを入れて保存します
キーはアプリの入力欄にだけ貼り付け、チャットに貼ったり人に送ったりしないでください
Cursor の AI チャットを Agent モードで開く
試してみる
SSH Host Storage & Remote Exec を使って、私に何ができるか教えて、1 つやってみせて✓ Cursor が SSH Host Storage & Remote Exec を使っていると言うか、回答に SSH Host Storage & Remote Exec のツール名が出れば接続成功です
メニュー名は 2026年11月11日 に Cursor のヘルプページで確認 · アプリのバージョンにより画面が少し違うことがあります
VS Code につなげますが、先に準備が必要です
SSH Host Storage & Remote Exec のキーが必要です(提供元のサイトで登録、費用がかかる場合あり) · 先にパソコンへ Node.js を入れてください(1 回だけ)
SSH Host Storage & Remote Exec に登録してキーを作る
提供元のサイトで登録し、次の手順で使う API キーを作ります。費用がかかる場合があります。
キーを入力
SSH Host Storage & Remote Exec の設定で MCP_SSH_CONFIG_DIR, MCP_SSH_MASTER_KEY, MCP_SSH_POOL_IDLE_MS, MCP_SSH_POOL_MAX_HOSTS が空です。自分のキーを入れて保存します
キーはアプリの入力欄にだけ貼り付け、チャットに貼ったり人に送ったりしないでください
VS Code の AI チャットを Agent モードで開く
試してみる
SSH Host Storage & Remote Exec を使って、私に何ができるか教えて、1 つやってみせて✓ VS Code が SSH Host Storage & Remote Exec を使っていると言うか、回答に SSH Host Storage & Remote Exec のツール名が出れば接続成功です
メニュー名は 2026年11月11日 に VS Code のヘルプページで確認 · アプリのバージョンにより画面が少し違うことがあります
Windsurf、Zed、Gemini CLI など MCP を使える他のアプリは追加方法がそれぞれ違います。アプリ一覧で確認してください
JSON 設定は下の「開発者向け」にあります
開発者向け:ターミナルのコマンドと JSON 設定
パソコンにインストール
Claude Code
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_cmdClaude Desktop (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"
}
}
}
}Cursor (~/.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 (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"
}
}
}
}自分で入力する値
MCP_SSH_CONFIG_DIRenvDirectory holding hosts.json and master.key (default: ~/.mcp-ssh-server).MCP_SSH_MASTER_KEY秘密 env64-hex-character AES-256-GCM master key; auto-generated into /master.key when unset.MCP_SSH_POOL_IDLE_MSenvIdle SSH connections are closed after this many milliseconds (default: 60000, 0 disables pooling).MCP_SSH_POOL_MAX_HOSTSenvMaximum number of pooled SSH connections (default: 32).
この設定は、作者のレジストリ登録情報から作成しています。READMEと違う場合は、READMEに従ってください。
ひと目でわかる
使えるアプリ
このサーバーのつなぎ方と、各アプリの公式ドキュメントに基づきます。2026年11月10日に確認。
パソコン上で動かせるアプリ
ClaudeGooseLM StudioMsty StudioCherry StudioCursorVS Code + GitHub CopilotVisual StudioWindsurf (Devin Desktop)ZedKiroClineContinueJetBrains AI AssistantClaude CodeCodex CLIGemini CLIOpenCodenodecodeWarpLibreChatRaycast
できること
パソコンで動くサーバーです。インストールすると、ツール一覧がAIアプリに表示されます。
基本チェックi
誰でも見られる情報をチェックしており、コードは読んでいません。当てはまらない項目は数に入れていません。 · 2026年11月12日にチェック
- ✓ 合格
作者とリポジトリが一致
レジストリ名は、リポジトリを所有するGitHubアカウント xlbbb-cn で確認済みです
- ✓ 合格
今もメンテナンスされている
コードの最終更新:20 日前
- … 未チェック
ライセンスがある
このリポジトリはまだGitHubから読み取っていません
- – 対象外
エンドポイントが応答する
これはパソコンで動くため、インターネット上のエンドポイントはありません
- – 対象外
OAuthでサインイン
パソコンで動き、代わりにローカルの設定を使います
- … 未チェック
ツールの説明に隠れた指示がない
パソコンで動くサーバーです。ツール一覧を読み取れるのは、インターネット上のエンドポイントがある場合だけです
話し合い
質問、コツの共有、使えないことの報告ができます。「役に立った」の多い順です。
ユーザーレビュー
まだレビューはありません
開発者ツールのほかのサーバーとの比較i
- このカテゴリのほかの5785件のうち69%よりスターが多い
- このカテゴリのほかの5785件のうち59%より最近レジストリに公開
- 基本チェックの結果が、このカテゴリのほかの5785件のうち100%と同じかそれ以上
レジストリでこのカテゴリにある有効なすべてのサーバーと比較しています。スターは、公開者がリポジトリの所有者である場合だけ数えます。
よくある質問
SSH Host Storage & Remote Execは安全ですか?
当てはまる基本チェック2項目のうち2項目に合格しました。コードは読んでいません。キーやトークンを追加する前に、サーバーがどんなアクセスを求めているかを確認し、必要な権限だけを持つキーを使ってください。
どんなキーやコードが必要ですか?
入力が必要なもの:MCP_SSH_MASTER_KEY
パソコンで動きますか、それともクラウドですか?
あなたのパソコンで動きます。必要なときにAIアプリが起動し、データは作者のサーバーを通りません(サーバー自体がオンラインサービスを呼び出す場合を除きます)。
今もメンテナンスされていますか?
GitHubリポジトリの最終更新は20 日前、最新バージョン(0.1.3)がレジストリに届いたのは20 日前です。
どのアプリで使えますか?
Claude Desktop、Claude Code、Cursor、VS CodeなどのMCP対応アプリで使えます。パソコンにNode.jsも必要です。
代わりに使えるものは?
同じカテゴリには:REA, Netdata, Front-End Checklist
代わりの候補
同じカテゴリで、ほかの作者が作ったサーバー。スターの多い順。
カードの見方:↓ 週あたりのダウンロードi★ GitHubスターi3つの柱:レビュー · チェック · 利用状況i更新=最新バージョンをレジストリに公開した日i
Netdata
Real-time infrastructure monitoring with metrics, logs, alerts, and ML-based anomaly detection.
Front-End Checklist
Review frontend code and live pages against 386 quality-gated web development rules.
作者の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
cryptofor AES-256-GCM, pure-JSssh2for 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_statusrenders 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-climanages the very same store (interactive TUI, batch commands, CSV bulk import) and can monitor the connection pool live (one frame per second,qquits).
MCP tools
Nine tools are published:
| Tool | Description |
|---|---|
cli_help | Installation / usage / troubleshooting notes for remote-ssh-cli, optionally narrowed down with topic |
host_list | List the known hosts — only `sys_name` and `uid` (no address, user name or credential); uid is the host_id every other tool expects |
host_create | Add a host (password / private key / passphrase are encrypted at rest) |
host_update | Patch host fields (omitted credential fields keep their current value) |
host_delete | Delete a host |
ssh_run_command | Run a single non-interactive command on a host |
ssh_run_interactive | Run a command that answers prompts (sudo, …) through expect/answer pairs |
ssh_run_playbook | Run a multi-step playbook (structured # @… directives *or* legacy expect:/answer: lines) |
pool_status | Monitor the live connection pool — one desensitized row per host (uid, name, state, executed / failed commands, last command) |
The host identifier contract
host_listis the entry point: every host comes back as exactly two fields —sys_name(the name) anduid(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.Callhost_listagain and retry with the value it returns. host_getis deliberately not published to MCP clients: the model only ever seessys_name+uid, never one host's address, user name or credential. The CLI keeps its owngetsubcommand for human operators.
Arguments at a glance
| Tool | Arguments | |
|---|---|---|
cli_help | topic? — one of install, list, get, create, update, delete, import, monitor, tui, windows | |
host_list | enabled_only? (bool) | |
host_create | ip_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_update | host_id (required) plus any of the fields above — an omitted field keeps its current value | |
host_delete | host_id | |
ssh_run_command | host_id, command, timeout_seconds (1-600, required) | |
ssh_run_interactive | host_id, command, expects? ([{ expect, answer }]), timeout_seconds | |
ssh_run_playbook | host_id, content (the multi-line playbook body), timeout_seconds | |
pool_status | host_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:
| Binary | Entry point | Purpose |
|---|---|---|
remote-ssh-server | dist/index.js | the stdio MCP server (started by your MCP client) |
remote-ssh-cli | dist/cli.js | interactive / batch host-management CLI |
Install
The package is published to two registries under the same name, @xlbbb-cn/mcp_ssh_exec_cmd:
| Registry | Install command | Auth |
|---|---|---|
| npmjs.org (recommended) | npm install -g @xlbbb-cn/mcp_ssh_exec_cmd | none — the public registry needs no token |
| GitHub Packages | npm install -g @xlbbb-cn/mcp_ssh_exec_cmd --registry=https://npm.pkg.github.com | a 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
| Column | Description | Default |
|---|---|---|
ip_address | required, host address, unique across the table | — |
system_name | display name | empty |
ssh_port | SSH port | 22 |
ssh_username | SSH user name | root |
ssh_auth_method | password / pubkey | password |
ssh_password | plain-text password (encrypted before it hits the disk) | — |
ssh_private_key | plain-text private key (encrypted before it hits the disk) | — |
ssh_private_key_path | path to a key file (alternative to ssh_private_key) | — |
ssh_private_key_passphrase | passphrase protecting the key (encrypted before it hits the disk) | — |
is_enable | true/false/1/0/yes/no | true |
- 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
1when at least one row failed. --dry-runonly validates and reports — nothing is written.- The CSV template (header + example row) is printed in the
remote-ssh-clibanner, andremote-ssh-cli importwithout 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.ps1wrapper npm generates may not invokenodeexplicitly on older npm versions. Both entry points ship a#!/usr/bin/env nodeshebang.
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
| Column | Meaning |
|---|---|
STATUS | up (the probe succeeded), down (the connection failed) or disabled (the host is switched off — it is listed but never probed) |
LATENCY | how long the last probe took, end to end |
LAST OK | clock time of the last successful probe |
POOL | age 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
ConnectionPoolthe 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* incmd.exe); every probe runs once per interval, so keep--intervalreasonable 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.
| Option | Description | Default |
|---|---|---|
--interval | redraw interval | 1000 |
--timeout | per-host probe timeout (1-600 s) | 5 |
--probe-cmd | command used to probe a host | echo |
--host | monitor only this host (repeatable) | all hosts |
--all | also list disabled hosts (never probed) | off |
--once | print a single frame and exit | off |
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" ]