GitHub
Connect AI assistants to GitHub - manage repos, issues, PRs, and workflows through natural language.
作者提供的说明(英文原文)
Persistent stateful remote SSH sessions for AI agents via MCP + OpenSSH.
这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。
我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。
选择你使用的 AI 应用,然后复制设置。
SSH_MCP_ALLOWED_HOSTS, SSH_MCP_CONFIG你需要
你用的是哪个应用?
在上方选择你的应用。我们会记住它,下次按钮会显示“安装到 …”。
打开 Claude Desktop → Settings → Developer → Edit Config,把下面的内容粘贴到 claude_desktop_config.json
{
"mcpServers": {
"remote-ssh": {
"command": "npx",
"args": [
"-y",
"@zyluo/remote-ssh-mcp"
],
"env": {
"SSH_MCP_ALLOWED_HOSTS": "your-value",
"SSH_MCP_CONFIG": "your-value"
}
}
}
}在终端中运行这条命令
claude mcp add remote-ssh --env SSH_MCP_ALLOWED_HOSTS=your-value --env SSH_MCP_CONFIG=your-value -- npx -y @zyluo/remote-ssh-mcp运行前请先填写空着的值。
粘贴到项目中的 .cursor/mcp.json,或 ~/.cursor/mcp.json
{
"mcpServers": {
"remote-ssh": {
"command": "npx",
"args": [
"-y",
"@zyluo/remote-ssh-mcp"
],
"env": {
"SSH_MCP_ALLOWED_HOSTS": "your-value",
"SSH_MCP_CONFIG": "your-value"
}
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
粘贴到项目中的 .vscode/mcp.json
{
"servers": {
"remote-ssh": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@zyluo/remote-ssh-mcp"
],
"env": {
"SSH_MCP_ALLOWED_HOSTS": "your-value",
"SSH_MCP_CONFIG": "your-value"
}
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
这个服务器在你的电脑上运行,而 ChatGPT 只能连接互联网上的服务器。请选择其他应用。
你的选择通过 Cookie 保存在这台设备上,无需账户。
SSH_MCP_ALLOWED_HOSTS envSSH_MCP_CONFIG env这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。
它在你的电脑上运行;安装后,工具列表会显示在你的 AI 应用中。
我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月8日
注册名称已通过 GitHub 账户 the-nine-nation 验证,该账户拥有此仓库
我们还没有从 GitHub 读取这个仓库
我们还没有从 GitHub 读取这个仓库
它在你的电脑上运行,没有互联网端点
在你的电脑上运行,改用本地设置
它在你的电脑上运行;我们只能读取互联网端点的工具列表
与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。
它在 1 项适用的基础检查中通过了 1 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。
注册中心没有列出必需的密钥,不过有些服务器会在首次使用时要求你登录。
它在你的电脑上运行。你的 AI 应用会在需要时启动它,数据不会经过作者的服务器(除非它自己调用在线服务)。
GitHub 仓库最后更新于–,最新版本(0.2.0)于3个月前进入注册中心。
支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。你的电脑上还需要有 Node.js。
同一分类中有:GitHub, Desktop Commander, Cloudflare MCP
同一分类中其他作者的服务器,按星标数排序。
如何看卡片:↓ 每周下载量i★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i
Connect AI assistants to GitHub - manage repos, issues, PRs, and workflows through natural language.
MCP server for terminal commands, file operations, and process management
按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。
Remote SSH MCP
Persistent, stateful remote Bash sessions for AI agents
via the Model Context Protocol
Why · Features · How it works · Tools · Quick start · Config · Security · 简体中文
Most agents reach remote machines like this:
bash → ssh host "cmd" → disconnect → repeat
Every call pays the same tax:
| Pain | What happens |
|---|---|
| 🔁 Token waste | Banners, MOTD, login noise, and pwd / whoami probes flood the context |
| 🧊 Lost state | cwd, export, venv activation, and shell side effects vanish |
| 🔌 Unstable | Fresh connects hit timeouts, host-key prompts, ProxyJump, and auth jitter |
| 🌀 Error spiral | The model compensates with longer probe commands → more tokens |
Remote SSH MCP turns a long-lived remote Bash into first-class MCP tools. One session ID keeps working directory, environment variables, and shell side effects. Open a new session when you need a clean environment.
ssh in bash?Concrete gains for agent workflows (multi-step remote work: deploy, debug, build, inspect logs):
| Dimension | One-shot ssh host "…" | Remote SSH MCP |
|---|---|---|
| 💰 Tokens | Each step re-pays connect noise + state probes; models often re-cd / re-pwd | Pay once on ssh_open; later ssh_run returns mostly command output. Structured tools + head/tail caps cut tool-result bloat. In multi-step sessions this commonly cuts remote-tool context by ~50–80% vs reconnect-every-time (exact savings depend on MOTD size and how chatty the model is). |
| ✅ Success rate | *N* steps ≈ *N* handshakes → *N* chances to fail (timeout, jump, agent, host key) | One handshake per session; subsequent commands ride a live shell. Long jobs use running + ssh_peek instead of killing the tool call and restarting. Fewer reconnects → far fewer false “SSH failed” loops mid-task. |
| 🧳 Portability | Remote needs nothing extra — but every agent machine reimplements the same brittle ssh … patterns | Install once on the machine that runs Claude / Cursor / Grok / etc. Remote hosts install nothing (no Node, no MCP daemon, no agent). Only a normal shell account + tools already required for SSH (bash, base64, stty, …). Keys and jump hosts stay in local ~/.ssh/config. |
| 🧠 Model ergonomics | Model invents ssh strings, escapes, and recovery | Stable tools: open → run → peek → close. Session id is the only handle. |
| 🔐 Trust boundary | Easy to over-expose keys or prompt for passwords in-band | OpenSSH client only; tools never accept passwords or private-key material |
Portability in one line: put the MCP on your dev box / AI host; every server already in your SSH config is reachable — zero package install on the remote fleet.
┌─────────────────────────┐ SSH (OpenSSH) ┌──────────────────┐
│ Your laptop / CI agent │ ───────────────────────────► │ prod / staging │ │ Claude · Cursor · Grok │ ~/.ssh/config · agent │ no MCP install │ │ + remote-ssh-mcp │ │ plain Bash OK │ └─────────────────────────┘ └──────────────────┘
Token sketch (illustrative multi-step remote debug):
One-shot path (per step × 8):
ssh wrapper + banner/MOTD + pwd/whoami + re-cd + command output → noise dominates; context fills with reconnect junk
Session path: ssh_open → once (handshake + READY) ssh_run × 8 → mostly the real stdout/stderr (truncated head+tail) → context stays on the work product, not the transport
It does not reimplement SSH. Your system OpenSSH client stays in charge — so ~/.ssh/config, known hosts, the SSH agent, ProxyJump routes, and hardware keys keep working exactly as they already do.
ssh_hosts() → discover allowed Host aliases
ssh_open(host) → session id ssh_run(id, command) → same cwd + env as last time ssh_peek / ssh_interrupt → observe or recover long / stuck work ssh_close(id) → release the shell and connection
ssh_run callsmaxSessions)Include, agent sockets, and ProxyJumpssh_run waits up to wait_sec (default 10s), then returns status: "running" while the remote command continuesdocker pull, builds, downloads, and deploys that must not block the tool call foreverssh_config + optional config / env overrides*, ?, or ! are ignored0600) with hashed commandsTERM=dumb, NO_COLOR, bracketed-paste off — less junk at the sourcestderr, false truncation flags, and request-echo fields so dual content + structuredContent stays cheapssh_hosts returns only safe metadata: alias, hostname, user, port, proxy_jumpIdentityFile, certificates, agent sockets, or ProxyCommandflowchart LR
A[AI Agent] -->|MCP tools| B[Remote SSH MCP] B -->|spawn| C[OpenSSH client] C -->|SSH + PTY| D[Remote Bash] D --> E[(cwd / env / side effects)]
subgraph Local machine B C F[~/.ssh/config agent / keys] C -.-> F end
subgraph Remote host D E end
Typical agent flow
1. ssh_hosts() # pick an alias from the allowlist
| Tool | What it does |
|---|---|
| 🗂️ `ssh_hosts` | List allowed Host aliases (safe metadata only). Pass reload=true after editing ~/.ssh/config |
| 🔓 `ssh_open` | Open a clean persistent shell for an allowed Host alias → returns session id |
| ▶️ `ssh_run` | Run a non-interactive command in an existing session |
| 👀 `ssh_peek` | Latest N lines of output + status; optional wait_sec long-polls while running |
| ⛔ `ssh_interrupt` | Send Ctrl-C and wait for confirmed shell recovery |
| 📋 `ssh_list` | List sessions, cwd, state, idle countdown, and capacity |
| 🔒 `ssh_close` | Tear down remote temp state and close the connection |
| Tool | Key params |
|---|---|
ssh_open | host (required Host alias), optional name label |
ssh_run | id, command, optional wait_sec, optional timeout_sec |
ssh_peek | id, optional lines (default 50, max 1000), optional wait_sec |
ssh_interrupt / ssh_close | id |
ssh_hosts | optional reload boolean |
| Requirement | Notes |
|---|---|
| Node.js | 20 or newer |
| OpenSSH client | System ssh on PATH (or set sshPath) |
| Remote host | Bash + base64, stty, mkdir, cat, rm |
| SSH setup | Host alias in ~/.ssh/config, host key already trusted |
⚠️ First-time host-key confirmation and authentication must be completed in a normal terminal. The MCP server never shows password or trust prompts.
git clone https://github.com/the-nine-nation/remote-ssh-mcp.git
cd remote-ssh-mcp npm install npm run build npm test
Run the server:
node /absolute/path/to/remote-ssh-mcp/dist/index.js
Or install from npm (once published):
npx @zyluo/remote-ssh-mcp
npm install -g @zyluo/remote-ssh-mcp remote-ssh-mcp
Or, after a local package install from this repo, use the remote-ssh-mcp executable.
Most stdio hosts accept a shape like this (outer key may differ by product):
{
"mcpServers": { "remote-ssh": { "command": "node", "args": [ "/absolute/path/to/remote-ssh-mcp/dist/index.js" ], "env": { "SSH_MCP_ALLOWED_HOSTS": "prod,staging" } } } }
Cursor · Claude Desktop · Claude Code · other MCP-capable hosts: point command / args at the bu
只显示了开头部分;其余内容请在仓库中阅读