mcp-ssh-tool
mcp-ssh-tool
Un servidor cliente SSH basado en el Protocolo de Contexto de Modelo (MCP) que proporciona operaciones SSH autónomas para GitHub Copilot y VS Code. Habilita la automatización SSH mediante lenguaje natural sin necesidad de prompts manuales ni interacciones con la interfaz gráfica.
Entrada oficial en el registro MCP: io.github.oaslananka/mcp-ssh-tool
Metadatos del registro: https://registry.modelcontextprotocol.io/v0.1/servers/io.github.oaslananka%2Fmcp-ssh-tool/versions/latest
Inicio rápido
Instalación
Instalación global (recomendado):
npm install -g mcp-ssh-toolEjecución única:
npx mcp-ssh-tool
Configuración del cliente MCP (VS Code / Claude Desktop / otros)
Añádelo a tu configuración de MCP (mcp.json, .vscode/mcp.json o la configuración de MCP de Claude Desktop):
{
"servers": {
"ssh-mcp": {
"type": "stdio",
"command": "mcp-ssh-tool",
"args": []
}
}
}Ejemplos de uso
Una vez configurado, puedes usar lenguaje natural con tu cliente MCP:
Conexión SSH: "Conéctate al servidor 192.168.1.100 como admin usando una clave SSH"
Operaciones de archivo: "Lee el contenido de /etc/nginx/nginx.conf en el servidor"
Ejecución de comandos: "Ejecuta 'systemctl status nginx' en el servidor remoto"
Gestión de paquetes: "Instala el paquete htop en el servidor Ubuntu"
Control de servicios: "Reinicia el servicio nginx"
Claude Desktop: "conéctate a mi servidor y comprueba el uso del disco"
Instalar un paquete/pila de servicios: "instala nginx en mi servidor remoto"
Leer un archivo de configuración: "lee el archivo /etc/nginx/nginx.conf"
Reiniciar un servicio: "reinicia el servicio nginx"
Explorar registros: "lista los archivos en /var/log"
Herramientas disponibles
ssh_open_session- Establece una conexión SSH con varios métodos de autenticaciónssh_close_session- Cierra la sesión SSHssh_list_sessions- Lista todas las sesiones SSH activasssh_ping- Comprueba si una sesión está activa y respondessh_list_configured_hosts- Lista los hosts desde ~/.ssh/configssh_resolve_host- Resuelve el alias del host desde la configuración SSHproc_exec- Ejecuta comandos de forma remota (con tiempo de espera opcional)proc_sudo- Ejecuta comandos con privilegios sudofs_read,fs_write,fs_list,fs_stat,fs_mkdirp,fs_rmrf,fs_rename- Operaciones del sistema de archivosensure_package- Gestión de paquetes con estadospresent(presente) yabsent(ausente)ensure_service- Control de servicios, incluyendorestarted(reiniciado)ensure_lines_in_file- Gestión de líneas en archivos con estadospresentyabsentpatch_apply- Aplica parches a archivosos_detect- Detección de información del sistemaget_metrics- Métricas del servidor en formato JSON o Prometheusproc_exec_stream- Ejecución de comandos en streaming con salida fragmentadafile_upload,file_download- Ayudantes para transferencia de archivos SFTPtunnel_local_forward,tunnel_remote_forward,tunnel_close,tunnel_list- Gestión de túneles
Recursos disponibles
mcp-ssh-tool://sessions/active- Sesiones activas como JSONmcp-ssh-tool://metrics/json- Instantánea de métricas como JSONmcp-ssh-tool://metrics/prometheus- Exportación de métricas de Prometheusmcp-ssh-tool://ssh-config/hosts- Aliases de host SSH locales analizados
Descripción general
El servidor SSH MCP actúa como un puente entre GitHub Copilot y los sistemas remotos a través de SSH. Admite:
Operaciones SSH no interactivas - Sin prompts ni interacciones de GUI
Múltiples métodos de autenticación - Contraseña, claves SSH o agente SSH
Gestión de sesiones - Agrupación de conexiones automática con TTL y desalojo LRU
Operaciones del sistema de archivos - Leer, escribir, listar y gestionar archivos remotos mediante SFTP, con alternativas de shell SSH para hosts que no exponen un subsistema SFTP
Ejecución de procesos - Ejecutar comandos y operaciones sudo de forma remota
Automatización de alto nivel - Gestión de paquetes, control de servicios y gestión de configuración
Seguridad - Redacción automática de datos confidenciales en los registros
Arquitectura
┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐
│ GitHub Copilot │────│ SSH MCP Server │────│ Remote Systems │
│ / VS Code │ │ │ │ (via SSH) │
└─────────────────┘ └──────────────────┘ └─────────────────┘
│ │ │
│ MCP stdio protocol │ Session management │ SSH + optional SFTP
│ │ LRU cache + TTL │
│ │ Auth strategies │Objetivos integrados / BusyBox
Algunos objetivos integrados exponen la ejecución de comandos SSH pero no incluyen un subsistema SFTP, lo cual es común en sistemas basados en Dropbear o BusyBox. En ese caso, ssh_open_session sigue teniendo éxito e informa sftpAvailable: false. Las herramientas de archivos principales como fs_read, fs_write, fs_stat, fs_list, fs_mkdirp, fs_rmrf y fs_rename recurren automáticamente a implementaciones basadas en shell.
Instalación
Requisitos previos
Node.js ≥ 20 (LTS)
Acceso SSH a los sistemas de destino
Claves SSH o credenciales para la autenticación
Instalar desde npm
npm install -g mcp-ssh-toolConstruir desde el código fuente
git clone https://github.com/oaslananka/mcp-ssh-tool.git
cd mcp-ssh-tool
npm install
npm run build
npm linkFlags de CLI
--help/-h: Muestra el uso y ejemplos.--version/-v: Imprime la versión.--stdio: Fuerza el modo stdio (predeterminado).
Nota: Este es un servidor MCP stdio. El terminal no es un shell interactivo; utiliza un cliente MCP (Claude Desktop, VS Code MCP, etc.) o envía JSON-RPC a través de stdio.
Notas de plataforma
Linux / macOS: Utiliza envoltorios de shell POSIX con comillas seguras. Directorio temporal predeterminado:
/tmp.Objetivos Windows: Requiere servidor/agente OpenSSH; la detección de claves comprueba
C:\Users\<you>\.ssh\. Los comandos se envuelven para una ejecución segura en PowerShell. Los ayudantes de paquetes/servicios están desactivados intencionalmente en los objetivos Windows.Claves de host: La comprobación de claves de host está relajada de forma predeterminada. Establece
STRICT_HOST_KEY_CHECKING=truey opcionalmenteKNOWN_HOSTS_PATHpara forzar la verificación.
Integración con ChatGPT Desktop
Configuración rápida
npm run setup:chatgptEste comando configura automáticamente ChatGPT Desktop para usar mcp-ssh-tool.
Configuración manual
Añádelo a tu configuración de MCP de ChatGPT Desktop:
macOS:
~/Library/Application Support/ChatGPT/mcp.jsonWindows:
%APPDATA%\ChatGPT\mcp.jsonLinux:
~/.config/chatgpt/mcp.json
{
"mcpServers": {
"ssh-mcp-server": {
"name": "ssh-mcp-server",
"command": "npx",
"args": ["-y", "mcp-ssh-tool"]
}
}
}Para obtener información detallada sobre el uso, consulta docs/chatgpt-usage.md.
Integración con Codex
Configuración rápida
Instala el paquete globalmente y luego regístralo en Codex:
npm install -g mcp-ssh-tool
codex mcp add ssh-mcp -- mcp-ssh-toolSi prefieres no instalarlo globalmente, puedes registrarlo a través de npx:
codex mcp add ssh-mcp -- npx -y mcp-ssh-toolVerificación
Comprueba que Codex pueda ver el servidor MCP:
codex mcp list
codex mcp get ssh-mcpDeberías ver un servidor stdio habilitado cuyo comando es mcp-ssh-tool o npx.
Refuerzo de seguridad opcional
Para forzar la verificación de la clave de host en el proceso del servidor gestionado por Codex:
codex mcp remove ssh-mcp
codex mcp add ssh-mcp \
--env STRICT_HOST_KEY_CHECKING=true \
--env KNOWN_HOSTS_PATH=/path/to/known_hosts \
-- mcp-ssh-toolDespués de añadir el servidor, reinicia Codex o abre una sesión nueva, luego intenta una llamada de herramienta simple, como listar sesiones activas o abrir una conexión SSH.
Integración con VS Code Copilot
Configuración a nivel de usuario (Recomendado)
Abre VS Code y presiona Ctrl+Shift+P, luego ejecuta "MCP: Open User Configuration".
Añádelo a tu mcp.json:
{
"servers": {
"ssh-mcp": {
"type": "stdio",
"command": "mcp-ssh-tool",
"args": []
}
}
}Configuración a nivel de espacio de trabajo
Crea .vscode/mcp.json en tu espacio de trabajo:
{
"servers": {
"ssh-mcp": {
"type": "stdio",
"command": "mcp-ssh-tool",
"args": []
}
}
}Verificación
Reinicia VS Code
Abre Copilot Chat
Las herramientas SSH MCP deberían aparecer en la lista de herramientas disponibles
Prueba con: "Conéctate a 192.168.1.100 como admin y ejecuta 'uname -a'"
Claude Desktop, Antigravity y otros clientes MCP
Cualquier cliente compatible con MCP que pueda iniciar un servidor stdio puede usar mcp-ssh-tool.
La pantalla de configuración exacta o el archivo de configuración varía según el cliente, pero el proceso es el mismo:
Instala el paquete:
npm install -g mcp-ssh-toolRegistra un servidor MCP stdio que inicie:
{
"servers": {
"ssh-mcp": {
"type": "stdio",
"command": "mcp-ssh-tool",
"args": []
}
}
}Si el cliente utiliza un esquema de estilo
mcpServersen lugar deservers, utiliza la entrada equivalente:
{
"mcpServers": {
"ssh-mcp-server": {
"command": "npx",
"args": ["-y", "mcp-ssh-tool"]
}
}
}Para Claude Desktop, utiliza el mismo patrón de comando stdio anterior en su configuración de MCP. Para Antigravity u otros clientes MCP, utiliza la propia interfaz de usuario de configuración de MCP del cliente o el formato de configuración, pero apúntalo al mismo comando ejecutable.
Ejemplos de uso
Conexión básica y ejecución de comandos
"Connect to 10.11.12.13 as deployer with password 'mypass' and run 'df -h'"Operaciones de archivo
"Connect to server.example.com as admin, read /etc/nginx/nginx.conf and show me the server blocks"Administración del sistema
"Connect to 192.168.1.50 as root, install htop package, start nginx service, and list /var/www contents"Gestión de configuración
"Connect to web-server as admin, add these lines to /etc/hosts:
192.168.1.10 db-server
192.168.1.20 cache-server
Then restart networking service"Ideas de prompts listas para usar
"connect to my server and check disk usage""install nginx on my remote server""read the file /etc/nginx/nginx.conf""restart the nginx service""list files in /var/log"Consejos profesionales
Sesiones múltiples: Abre una sesión por host o entorno y mantenlas activas con
ssh_list_sessionsyssh_pingcuando cambies entre máquinas de producción, staging y desarrollo.Alternativa SFTP para BusyBox/Dropbear: En sistemas integrados que no exponen un subsistema SFTP,
ssh_open_sessionaún puede tener éxito consftpAvailable: false, y las herramientas principalesfs_*recurren automáticamente a implementaciones basadas en shell.Verificación de clave de host: Establece
STRICT_HOST_KEY_CHECKING=trueen el entorno del servidor MCP y opcionalmenteKNOWN_HOSTS_PATHpara una verificación SSH de grado de producción más estricta.
Referencia de API
Arquitectura
src/
├── container.ts - Dependency injection wiring
├── config.ts - ConfigManager (env + programmatic overrides)
├── index.ts - CLI entry point & graceful shutdown
├── mcp.ts - MCP server (thin: delegates to ToolRegistry)
├── tools/
│ ├── registry.ts - ToolRegistry (routes CallTool requests)
│ ├── types.ts - ToolProvider interface
│ ├── session.provider.ts
│ ├── process.provider.ts
│ ├── fs.provider.ts
│ ├── ensure.provider.ts
│ ├── system.provider.ts
│ ├── transfer.provider.ts
│ └── tunnel.provider.ts
├── session.ts - SessionManager (LRU cache + TTL)
├── resources.ts - MCP resources for sessions, metrics, and SSH hosts
├── telemetry.ts - Optional OpenTelemetry tracing
├── rate-limiter.ts - Sliding window rate limiter
├── metrics.ts - Prometheus-compatible metrics
├── safety.ts - Command safety warnings (non-blocking)
└── ... - fs-tools, process, ensure, detect, ...Añadir un nuevo grupo de herramientas
Crea
src/tools/<tu-namespace>.provider.tsimplementandoToolProviderRegístralo en
src/tools/index.tsAñade pruebas unitarias a
test/unit/tools/<tu-namespace>.provider.test.ts
No se necesitan cambios en mcp.ts.
Herramientas de sesión
ssh_open_session
{
"host": "example.com",
"username": "admin",
"port": 22,
"auth": "auto",
"password": "optional",
"privateKey": "optional-inline-key",
"privateKeyPath": "optional-path",
"passphrase": "optional",
"useAgent": false,
"readyTimeoutMs": 20000,
"ttlMs": 900000
}Devuelve:
{
"sessionId": "ssh-1645123456789-1",
"host": "example.com",
"username": "admin",
"expiresInMs": 900000
}ssh_close_session
{
"sessionId": "ssh-1645123456789-1"
}ssh_list_sessions, ssh_ping, ssh_list_configured_hosts, ssh_resolve_host
ssh_list_sessionsdevuelve sesiones activas con el TTL restante.ssh_pingcomprueba la actividad y la latencia de una sesión.ssh_list_configured_hostslee~/.ssh/config.ssh_resolve_hostexpande un alias de host SSH en parámetros de conexión.
Herramientas de comando
proc_exec
{
"sessionId": "ssh-1645123456789-1",
"command": "ls -la /home",
"cwd": "/tmp",
"env": {
"DEBUG": "1"
},
"timeoutMs": 30000
}proc_sudo
{
"sessionId": "ssh-1645123456789-1",
"command": "systemctl restart nginx",
"password": "sudo-password",
"cwd": "/etc",
"timeoutMs": 30000
}Ambos devuelven:
{
"code": 0,
"stdout": "command output",
"stderr": "",
"durationMs": 245
}Herramientas de archivo
fs_read
{
"sessionId": "ssh-1645123456789-1",
"path": "/etc/hosts",
"encoding": "utf8"
}fs_write
{
"sessionId": "ssh-1645123456789-1",
"path": "/tmp/config.txt",
"data": "server_name example.com;\nlisten 80;",
"mode": 420
}fs_statdevuelvesize,mtime,modeytype.fs_listdevuelve{ "entries": [...], "nextToken": "optional" }.fs_mkdirpcrea directorios de forma recursiva.fs_rmrfelimina archivos o directorios de forma recursiva.fs_renamerenombra o mueve una ruta.
Herramientas de configuración y automatización
ensure_package
{
"sessionId": "ssh-1645123456789-1",
"name": "nginx",
"state": "present",
"sudoPassword": "optional"
}state admite present y absent.
ensure_service
{
"sessionId": "ssh-1645123456789-1",
"name": "nginx",
"state": "restarted",
"sudoPassword": "optional"
}state admite started, stopped, restarted, enabled y disabled.
ensure_lines_in_file
{
"sessionId": "ssh-1645123456789-1",
"path": "/etc/hosts",
"lines": [
"192.168.1.10 db-server",
"192.168.1.20 cache-server"
],
"state": "present",
"createIfMissing": true,
"sudoPassword": "optional"
}state admite present y absent.
patch_apply
{
"sessionId": "ssh-1645123456789-1",
"path": "/etc/hosts",
"diff": "@@ -1 +1 @@\n-old\n+new"
}os_detect
Devuelve la plataforma remota, distribución, versión, gestor de paquetes, sistema de inicio, shell y directorio temporal.
get_metrics
Devuelve métricas del servidor. La salida predeterminada es JSON; { "format": "prometheus" } opcional emite el formato de texto de Prometheus.
Autenticación
El servidor admite múltiples métodos de autenticación con alternativa automática:
Prioridad de estrategia de autenticación
Contraseña (si se proporciona)
Clave SSH (en línea → ruta → detección automática)
Agente SSH (si está disponible)
Detección automática de claves SSH
El servidor busca automáticamente claves SSH en:
~/.ssh/id_ed25519~/.ssh/id_rsa~/.ssh/id_ecdsa
Nota: Las claves DSA (`id_
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/oaslananka/mcp-ssh-tool'
If you have feedback or need assistance with the MCP directory API, please join our Discord server