Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Description from the maker (original English)
SSH Model Context Protocol Server - Enable SSH functionality for AI models
These three are never merged into one score: opinions, measurements and popularity are different things.
We have not written a plain-language summary for this one yet. Below are the facts we read from the registry.
Pick the AI app you use, then copy the settings.
SSH_HOST, SSH_USER, SSH_PASSWORD, SSH_PORTValues marked secret are keys to your account. Never share them or paste them into a chat.
You need
Which app do you use?
Pick your app above. We remember it, so next time the button says “Install in …”.
Open Claude Desktop → Settings → Developer → Edit Config, and paste this into claude_desktop_config.json
{
"mcpServers": {
"ssh-licco": {
"command": "uvx",
"args": [
"ssh-licco"
],
"env": {
"SSH_HOST": "your-value",
"SSH_USER": "your-value",
"SSH_PASSWORD": "your-value",
"SSH_PORT": "your-value"
}
}
}
}Run this in your terminal
claude mcp add ssh-licco --env SSH_HOST=your-value --env SSH_USER=your-value --env SSH_PASSWORD=your-value --env SSH_PORT=your-value -- uvx ssh-liccoFill in the empty values before running it.
Paste into .cursor/mcp.json in your project, or ~/.cursor/mcp.json
{
"mcpServers": {
"ssh-licco": {
"command": "uvx",
"args": [
"ssh-licco"
],
"env": {
"SSH_HOST": "your-value",
"SSH_USER": "your-value",
"SSH_PASSWORD": "your-value",
"SSH_PORT": "your-value"
}
}
}
}Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.
Paste into .vscode/mcp.json in your project
{
"servers": {
"ssh-licco": {
"type": "stdio",
"command": "uvx",
"args": [
"ssh-licco"
],
"env": {
"SSH_HOST": "your-value",
"SSH_USER": "your-value",
"SSH_PASSWORD": "your-value",
"SSH_PORT": "your-value"
}
}
}
}Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.
This one runs on your computer, and ChatGPT can only connect to servers on the internet. Pick another app.
Your choice stays on this device in a cookie; no account needed.
SSH_PORT envThese settings are generated from the maker’s registry entry. If the README says otherwise, follow the README.
Runs on your computer; the tool list appears in your AI app after you install it.
We check information anyone can see; we have not read the code. Checks that do not apply are left out of the count. · Checked Nov 6, 2026
The registry name was verified with the GitHub account Echoqili, which owns the repo
We have not read this repo from GitHub yet
We have not read this repo from GitHub yet
This one runs on your computer; there is no internet endpoint
Runs on your computer and uses local settings instead
Runs on your computer; we can only read tool lists from internet endpoints
Compared with every active server in this category in the registry. Stars count only when the publisher owns the repo.
It passed 1 of 1 applicable basic checks. We have not read the code. Before adding a key or token, see what access the server asks for and use a key with only the permissions you need.
You need to fill in: SSH_HOST, SSH_USER, SSH_PASSWORD
It runs on your computer. Your AI app starts it when needed, and data does not pass through the maker’s servers (unless it calls an online service itself).
The GitHub repo last changed –, and the latest version (2.7.3) reached the registry 26 days ago.
Apps that support MCP, such as Claude Desktop, Claude Code, Cursor and VS Code. You also need Python (uv) on your computer.
In the same category: Spec Driven Development, Remote Desktop Commander, Symantec Cloud DLP AIops
Servers in the same category from other makers, sorted by stars.
Reading a card:★ GitHub starsiThree pillars: reviews · checks · usageiUpdated = latest version published to the registryi
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Governed Symantec Cloud DLP — 14 MCP tools, read-only with audit.
Copied from the maker’s repo as written. PopNx MCP has not reviewed or endorsed it. HTML, images and scripts are removed. Links lead off this site.
让 AI 帮你操作服务器! 通过自然语言对话,AI 可以帮你执行命令、管理文件、查看日志、部署应用等。
ssh_file_transfer delete 自动识别 Windows / Unix 路径风格并拦截敏感路径与路径遍历SSH-LICCO 基于标准 SSH/SFTP 协议,可连接以下目标主机:
| 操作系统 | 要求 | 备注 |
|---|---|---|
| Linux | OpenSSH 7.0+ | 推荐,完整支持所有功能 |
| Windows Server | OpenSSH for Windows / PowerShell Remoting over SSH | v2.1.3+ 支持 Windows 路径风格与安全校验 |
| macOS | 系统内置 OpenSSH | 完整支持 |
提示:连接 Windows 服务器时,请使用 Windows 风格路径(如
C:\temp\file.txt),系统会自动识别并进行路径安全校验。
pip install ssh-licco
git clone https://github.com/Echoqili/ssh-licco.git
cd ssh-licco pip install -e .
Python 版本要求: Python 3.10+
打开设置 → MCP → 添加新服务器:
{
"mcpServers": { "ssh": { "command": "python -m ssh_mcp.server" } } }
{
"mcpServers": { "ssh": { "command": "python -m ssh_mcp.server", "env": { "SSH_HOST": "192.168.1.100", "SSH_USER": "root", "SSH_PASSWORD": "your_password", "SSH_PORT": "22", "SSH_TIMEOUT": "60", "SSH_KEEPALIVE_INTERVAL": "30", "SSH_SESSION_TIMEOUT": "7200", "SSH_CLIENT_TYPE": "common" } } } }
环境变量说明:
SSH_HOST: SSH 服务器地址SSH_USER: 用户名SSH_PASSWORD: 密码SSH_PORT: 端口(默认 22)SSH_TIMEOUT: 连接超时(秒)SSH_KEEPALIVE_INTERVAL: 保活间隔(秒)SSH_SESSION_TIMEOUT: 会话超时(秒)SSH_CLIENT_TYPE: SSH 客户端类型(可选,默认 common)common - paramiko(稳定可靠,推荐)⭐performance - asyncssh(高性能,适合高并发)🚀development - fabric(简化 API,适合快速开发)👨💻新增加固默认值与迁移说明见 [安全边界与加固配置](docs/SECURITY.md): 连接默认验证主机密钥,确认参数不再绕过命令策略,文件传输执行目录隔离。 下表是项目的模式说明,不是第三方平台的安全评分。
重要:从 v0.2.1 开始,ssh-licco 提供多级安全策略,可根据使用场景灵活配置。
| 级别 | 名称 | 适用场景 | 防护强度 |
|---|---|---|---|
| STRICT | 严格模式 | 生产环境、公共服务器 | 最高 ⭐⭐⭐ |
| BALANCED | 平衡模式 | 开发环境、个人服务器(默认) | 高 ⭐⭐ |
| RELAXED | 宽松模式 | 测试环境、完全信任的服务器 | 中等 ⭐ |
Windows PowerShell:
$env:SSH_SECURITY_LEVEL = "balanced"
$env:SSH_EXTRA_ALLOWED_COMMANDS = "git,pip,npm"
Linux/Mac:
export SSH_SECURITY_LEVEL="balanced"
export SSH_EXTRA_ALLOWED_COMMANDS="git,pip,npm"
{
"mcpServers": { "ssh": { "command": "python -m ssh_mcp.server", "env": { "SSH_SECURITY_LEVEL": "balanced", "SSH_EXTRA_ALLOWED_COMMANDS": "git,pip,npm", "SSH_BASE_DIR": "/home" } } } }
为防止任何误操作或越权调用直接打到远程 shell,ssh-licco 在所有安全级别下都无条件拦截以下灾难性命令模式,无法通过 `confirm_dangerous=true`、`confirmation_layer=N`、调整 `SSH_SECURITY_LEVEL` 等任何方式绕过:
rm -rf 作用于绝对路径(含 /、/*、/path、/path/*,-fr 变体同效)mkfs.* 任意文件系统格式化dd if=/dev/(zero|random|urandom) of=/dev/(sd|nvme) 覆写裸盘:(){ :|:& };: 及空白变体)chmod -R 777 / / chmod -R 000 / 根目录递归改权限> /dev/(sd|nvme) / >> /dev/(sd|nvme) 裸设备重定向如确需执行上述操作,请直接通过 SSH 登录服务器(绕过 MCP 网关)进行。安全且可逆的替代方案:
# 旧做法(v2.2.0 之前):rm -rf /path/to/junk ← 现已被硬拦截
mv /path/to/junk /tmp/.trash_$(date +%s)/
命中硬拦截时会输出 WARNING 审计日志(含 category 与命令),便于 SOC 监控。
| 工具 | 描述 | 核心能力 |
|---|---|---|
ssh_connect | 连接管理 | 自动读取环境变量/配置,支持密码+密钥认证,可保存配置,登录后自动执行命令 |
ssh_execute | 命令执行 | 自动连接、智能后台检测、长任务等待、超时控制,支持 nohup/screen/tmux 三种后台模式;v2.2.0 起对灾难性命令(rm -rf 绝对路径、mkfs、raw-disk dd、fork-bomb 等)做无条件硬拦截 |
ssh_disconnect | 会话管理 | 断开指定会话 OR 列出所有活跃会话 |
ssh_file_transfer | 文件传输 | 上传/下载/列表/写入/追加/删除/创建目录/查看元信息(8 种操作);v2.1.3+ delete 操作新增 Windows/Unix 敏感路径拦截与路径遍历防护 |
ssh_host | 主机管理 | action=list/add/remove 增删查主机配置 |
ssh_docker | Docker 管理 | action=ps/images/build/logs 全生命周期管理 |
ssh_generate_key | 密钥生成 | RSA / Ed25519 密钥对 |
ssh_session | screen/tmux 会话 | 持久化远程会话管理(create/send/capture/list/kill),SSH 断开后进程依然存活 |
ssh_process | 进程管理 | 启动/停止/查询远程进程,SSH 端口转发(tunnel_open/tunnel_close/tunnel_list) |
关于 v2.1.0 引入的 3 个审批工具(
ssh_request_approval/ssh_approve_command/ssh_list_approvals):已从 MCPlist_tools()移除,代码已在 v2.2.0 删除(ssh_mcp/approval.py、ssh_mcp/handlers/approval.py)。审批流程依赖 AI 自报命令、运维侧背书,存在闭环风险;v2.2.0 的硬拦截更直接——灾难性命令在 MCP 网关层就被拒绝,运维侧不需要再走"先申请再审批"流程。
用户:帮我查看服务器上的 Docker 容器
AI:调用 ssh_connect → ssh_execute "docker ps"
[执行结果] CONTAINER ID IMAGE COMMAND STATUS PORTS abc123 nginx "nginx" Up 2 days 80:80
用户:把这个文件上传到 /var/www/html
AI:调用 ssh_connect → ssh_file_transfer
[上传成功] 本地:./index.html 远程:/var/www/html/index.html 大小:2.3 KB
用户:帮我构建 Docker 镜像
AI:调用 ssh_execute(background=True) 后台执行 docker build...
[后台任务已启动] Session ID: a1b2c3d4 命令:docker build -t myapp . 使用 ssh_execute(session_id="a1b2c3d4", command="cat /tmp/build.log") 查看进度
用户:检查 PostgreSQL 是否正常运行
AI:调用 ssh_execute "pg_isready -h localhost -p 5432"
[检查结果] localhost:5432 - accepting connections ✅ PostgreSQL 运行正常
{
"mcpServers": { "ssh": { "command": "python -m ssh_mcp.server", "env": { "SSH_SECURITY_LEVEL": "balanced", "SSH_EXTRA_ALLOWED_COMMANDS": "git,npm,docker,composer,pm2", "SSH_BASE_DIR": "/var/www", "SSH_HOST": "192.168.1.100", "SSH_USER": "deploy", "SSH_PASSWORD": "your-password" } } } }
{
"mcpServers": { "ssh": { "command": "python -m ssh_mcp.server", "env": { "SSH_SECURITY_LEVEL": "balanced", "SSH_EXTRA_ALLOWED_COMMANDS": "pip,poetry,python3,pytest,black", "SSH_HOST": "192.168.1.100", "SSH_USER": "developer", "SSH_PASSWORD": "your-password" } } } }
{
"mcpServers": { "ssh": { "command": "python -m ssh_mcp.server", "env": { "SSH_SECURITY_LEVEL": "balanced", "SSH_EXTRA_ALLOWED_COMMANDS": "psql,mysql,mongosh,pg_isready", "SSH_HOST": "192.168.1.100", "SSH_USER": "dbadmin", "SSH_PASSWORD": "your-password" } } } }
{
"mcpServers": { "ssh": { "command": "python -m ssh_mcp.server", "env": { "SSH_SECURITY_LEVEL": "relaxed", "SSH_EXTRA_ALLOWED_COMMANDS": "sudo,apt,yum,systemctl,journalctl,docker,kubectl", "SSH_HOST": "192.168.1.100", "SSH_USER": "root", "SSH_PASSWORD": "your-password" } } } }
{
"mcpServers": { "ssh": { "command": "python -m ssh_mcp.server", "env": { "SSH_SECURITY_LEVEL": "strict", "SSH_HOST": "192.168.1.100", "SSH_USER": "app-user", "SSH_PASSWORD": "your-password", "SSH_BASE_DIR": "/home/app-user" } } } }
下表所有变量均被代码读取。注意:
-
SSH_RATE_LIMIT是 bool 总开关(true/false),SSH_RATE_LIMIT_MAX才是次数上限,两者分开配置
- 主机密钥检查(strict_host_key_checking)不通过 env 配置,请用
ssh_connect工具参数或hosts.json
| 分类 | 变量 | 默认 | 说明 |
|---|---|---|---|
| 安全 | SSH_SECURITY_LEVEL | balanced | 安全级别:strict / balanced / relaxed |
SSH_BASE_DIR | /home | Unix 远程 SFTP 路径校验基目录 | |
SSH_LOCAL_BASE_DIR | 当前工作目录 | 本地文件上传源与下载目标的允许目录 | |
SSH_EXTRA_ALLOWED_COMMANDS | (空) | 额外允许的命令(逗号分隔) | |
SSH_ALLOWED_COMMANDS_FILE | (空) | 命令白名单 JSON 文件路径 | |
SSH_AUDIT_LOG_PATH | (空) | 审计日志文件路径 | |
| 限流 | SSH_RATE_LIMIT | true | 限流总开关(bool) |
SSH_RATE_LIMIT_MAX | 30 | 限流次数上限 | |
SSH_RATE_LIMIT_WINDOW | 60 | 限流窗口(秒) | |
| 硬拦截 | *(无 env)* | — | 灾难性命令硬拦截,零配置零绕过 |
| 连接默认 | SSH_HOST / SSH_PORT / SSH_USER / SSH_PASSWORD | 127.0.0.1 / 22 / root / (空) | 单 host 模式默认连接参数 |
SSH_TIMEOUT | 60 | 连接超时(秒) | |
SSH_KEEPALIVE_INTERVAL | 30 | keepalive 间隔(秒) | |
SSH_SESSION_TIMEOUT | 7200 | 会话超时(秒) | |
SSH_CLIENT_TYPE | paramiko | SSH 客户端实现:paramiko / asyncssh | |
SSH_FORCE_ENV_CONFIG | false | 强制 env 配置覆盖 hosts.json | |
SSH_SUDO_PASSWORD | (空) | sudo 密码,配合 use_sudo=true 走 sudo -S |
以下依赖版本冲突已在测试环境中验证,不影响 ssh-licco 的正常使用:
fastapi 需要 starlette<0.51.0
但安装了 starlette 0.52.1
影响范围:
解决方案:
pip install starlette==0.50.0
pyopenssl 需要 cryptography<45
但安装了 cryptography 46.0.5
影响范围:
解决方案:
pip install cryptography==44.0.0
测试通过的配置:
测试场景:
ssh-licco 的核心依赖是:
mcp - MCP 协议实现asyncssh - SSH 客户端paramiko - SSH 客户端(稳Only the beginning is shown; read the rest in the repo