MCP SSH Server

Proporciona acceso SSH a servidores remotos, permitiendo que herramientas de IA se conecten de forma segura a tu VPS para su gestión.

Documentación

MCP SSH Server

Un servidor de Model Context Protocol (MCP) que proporciona acceso completo por SSH y consola serie a servidores remotos y dispositivos de red. Permite que herramientas de inteligencia artificial como Claude Desktop gestionen de forma segura servidores Linux, conmutadores de red y dispositivos de infraestructura mediante conexiones SSH por red y acceso directo a consola por USB a Serie.

Características

Capacidades principales de SSH

  • Gestión de conexiones SSH con autenticación por contraseña o clave
  • Ejecución de comandos remotos con manejo de tiempos de espera
  • Subida y descarga de archivos mediante SFTP
  • Listado de directorios y operaciones con archivos
  • Manejo seguro de conexiones

Gestión de dispositivos de red

  • Acceso a consola USB a Serie — Conexiones de consola directas mediante adaptadores FTDI y otros USB
  • Gestión de conmutadores de red — Compatibilidad total con conmutadores Cisco IOS/IOS-XE y Aruba
  • Descubrimiento de dispositivos — Detección automática de tipos y capacidades de conmutadores
  • Gestión de configuración — Copia de seguridad, restauración y configuración automatizada
  • Diagnósticos de red — Pruebas integradas de ping, traceroute y conectividad
  • Transición de consola a SSH — Configuración automatizada de SSH mediante conexión de consola
  • Gestión de firmware — Subida, verificación, instalación y reversión del firmware del conmutador

Gestión de servidores

  • Herramientas de gestión para servidores Ubuntu (Nginx, SSL, paquetes, cortafuegos)
  • Compatible con Claude Desktop, VS Code y otros clientes compatibles con MCP

Pruebas de producción en entornos reales

Esta herramienta ha sido probada exhaustivamente en entornos de red de producción:

  • Descubrimiento de red — Se descubrieron con éxito puertos flutter desconocidos anteriormente en conmutadores de producción que causaban problemas de conectividad intermitente
  • Cero tiempo de inactividad — Se gestionaron múltiples conmutadores en redes de producción en vivo sin causar interrupciones ni cortes en la red
  • Ahorro de tiempo — La configuración automatizada de SSH redujo el tiempo de configuración de un conmutador de 15-20 minutos a menos de 2 minutos
  • Fiabilidad — Cero incidentes durante despliegues de producción en múltiples dispositivos de red
  • Compatibilidad USB a Serie — Probado con adaptadores FTDI FT232R/FT232H, Prolific PL2303, Silicon Labs CP2102/CP2104 y CH340
  • Compatibilidad con conmutadores — Validado en las series Cisco Catalyst 2960/3560/3750 y Aruba 2530/2930

La herramienta ha demostrado ser lo suficientemente fiable para tareas de gestión de redes en producción sin necesidad de un entorno de laboratorio separado para pruebas.

Requisitos previos

  • Node.js 18 o superior
  • npm o yarn
  • Compatible con Windows, macOS y Linux

Instalación

  1. Clonar el repositorio:

    git clone https://github.com/yourusername/mcp-ssh-server.git
    cd mcp-ssh-server
    
  2. Instalar dependencias:

    npm install
    
  3. Compilar el proyecto:

    npm run build
    
  4. Instalar globalmente (opcional):

    npm install -g .
    

Configuración

Configuración de Claude Desktop

  1. Abre Claude Desktop
  2. Ve a Configuración > Desarrollador (o pulsa Ctrl+Shift+D)
  3. Edita la configuración de MCP
  4. Añade la siguiente configuración:
{
  "mcpServers": {
    "ssh-server": {
      "command": "node",
      "args": ["/path/to/mcp-ssh-server/build/index.js"],
      "env": {
        "NODE_NO_WARNINGS": "1"
      }
    }
  }
}

Importante: Reemplaza /path/to/mcp-ssh-server/build/index.js por la ruta absoluta a tu archivo index.js compilado.

Configuración de VS Code (si se usa la extensión MCP)

Crea o edita .vscode/mcp.json en tu espacio de trabajo:

{
  "mcpServers": {
    "ssh-server": {
      "command": "node",
      "args": ["/path/to/mcp-ssh-server/build/index.js"]
    }
  }
}

Herramientas disponibles

Herramientas principales de SSH

ssh_connect

Establece una conexión SSH con un servidor remoto.

Parámetros:

  • host (obligatorio) — Nombre de host o dirección IP
  • username (obligatorio) — Nombre de usuario SSH
  • password (opcional) — Contraseña SSH
  • privateKeyPath (opcional) — Ruta al archivo de clave privada
  • passphrase (opcional) — Frase de contraseña para la clave privada
  • port (opcional) — Puerto SSH (por defecto: 22)
  • connectionId (opcional) — Identificador único para esta conexión

Devuelve:

  • success — Booleano que indica éxito
  • connectionId — ID para usar en comandos posteriores
  • message — Mensaje de estado de la conexión

Ejemplo:

Connect to my server at example.com using username 'admin' and password authentication

ssh_exec

Ejecuta un comando en el servidor remoto.

Parámetros:

  • connectionId (obligatorio) — ID de ssh_connect
  • command (obligatorio) — Comando a ejecutar
  • cwd (opcional) — Directorio de trabajo
  • timeout (opcional) — Tiempo de espera del comando en milisegundos (por defecto: 60000)

Devuelve:

  • code — Código de salida
  • signal — Señal que terminó el proceso (si existe)
  • stdout — Salida estándar
  • stderr — Error estándar

Ejemplo:

Run "ls -la /var/www/html" on the server

ssh_upload_file

Sube un archivo al servidor remoto.

Parámetros:

  • connectionId (obligatorio) — ID de ssh_connect
  • localPath (obligatorio) — Ruta local del archivo
  • remotePath (obligatorio) — Ruta de destino remota

Devuelve:

  • success — Booleano que indica éxito
  • message — Mensaje de estado de la subida

ssh_download_file

Descarga un archivo del servidor remoto.

Parámetros:

  • connectionId (obligatorio) — ID de ssh_connect
  • remotePath (obligatorio) — Ruta remota del archivo
  • localPath (obligatorio) — Ruta de destino local

Devuelve:

  • success — Booleano que indica éxito
  • message — Mensaje de estado de la descarga

ssh_list_files

Lista archivos en un directorio del servidor remoto.

Parámetros:

  • connectionId (obligatorio) — ID de ssh_connect
  • remotePath (obligatorio) — Ruta del directorio a listar

Devuelve:

  • files — Matriz de objetos de archivo con propiedades:
    • filename — Nombre del archivo
    • isDirectory — Booleano que indica si es un directorio
    • size — Tamaño del archivo
    • lastModified — Hora de última modificación

ssh_disconnect

Cierra una conexión SSH.

Parámetros:

  • connectionId (obligatorio) — ID de ssh_connect

Devuelve:

  • success — Booleano que indica éxito
  • message — Mensaje de estado de desconexión

Ejemplos de uso con Claude

  1. Conecta a tu servidor:

    Please connect to my VPS at example.com using username 'admin' and my SSH key at ~/.ssh/id_rsa
    
  2. Comprueba el estado del servidor:

    Run the command "systemctl status nginx" to check web server status
    
  3. Sube un archivo del sitio web:

    Upload my local file ~/websites/index.html to /var/www/html/index.html on the server
    
  4. Lista los archivos del sitio web:

    Show me all files in the /var/www/html directory
    
  5. Descarga una copia de seguridad:

    Download the file /var/backups/website-backup.tar.gz to my local Downloads folder
    
  6. Desconéctate cuando termines:

    Please disconnect from the SSH session
    

Herramientas de gestión de conmutadores de red

switch_discover_device

Descubre e identifica el tipo y las capacidades del conmutador de red.

Parámetros:

  • connectionId (obligatorio) — ID de una conexión SSH activa
  • enablePassword (opcional) — Contraseña de enable para el modo privilegiado

switch_show_interfaces

Muestra el estado e configuración de las interfaces del conmutador de red.

Parámetros:

  • connectionId (obligatorio) — ID de una conexión SSH activa
  • interfaceType (opcional) — Tipo de interfaces a mostrar
  • enablePassword (opcional) — Contraseña de enable para el modo privilegiado

switch_show_vlans

Muestra la configuración y estado de las VLAN del conmutador de red.

Parámetros:

  • connectionId (obligatorio) — ID de una conexión SSH activa
  • enablePassword (opcional) — Contraseña de enable para el modo privilegiado

switch_backup_config

Realiza una copia de seguridad de la configuración del conmutador (configuración en ejecución o de arranque).

Parámetros:

  • connectionId (obligatorio) — ID de una conexión SSH activa
  • configType (opcional) — Tipo de configuración para la copia de seguridad
  • enablePassword (opcional) — Contraseña de enable para el modo privilegiado

switch_network_diagnostics

Ejecuta diagnósticos de red desde el conmutador (ping, traceroute).

Parámetros:

  • connectionId (obligatorio) — ID de una conexión SSH activa
  • target (obligatorio) — Dirección IP o nombre de host de destino
  • diagnosticType (opcional) — Tipo de diagnóstico a ejecutar
  • enablePassword (opcional) — Contraseña de enable para el modo privilegiado

switch_show_mac_table

Muestra la tabla de direcciones MAC del conmutador de red.

Parámetros:

  • connectionId (obligatorio) — ID de una conexión SSH activa
  • vlan (opcional) — VLAN específica para mostrar direcciones MAC
  • enablePassword (opcional) — Contraseña de enable para el modo privilegiado

Herramientas de consola USB a Serie

Estas herramientas permiten el acceso directo a la consola de dispositivos de red mediante adaptadores USB a Serie. Son esenciales para la configuración inicial del dispositivo, el acceso de emergencia cuando se pierde la conectividad de red o cuando aún no se ha configurado SSH.

Adaptadores USB a Serie compatibles:

  • FTDI FT232R/FT232H (recomendado: el más fiable)
  • Prolific PL2303 (amplia compatibilidad)
  • Silicon Labs CP2102/CP2104 (buen rendimiento)
  • Chipsets CH340/CH341 (opción económica)

Todos los adaptadores funcionan con cables de consola estándar de Cisco/Aruba (RJ45 a DB9 o USB directo).

serial_list_ports

Lista los puertos USB a Serie disponibles en el sistema. Detecta automáticamente los adaptadores FTDI, Prolific, Silicon Labs y CH340.

Ejemplo:

Show me all available serial ports

serial_connect

Conecta a un dispositivo de red mediante el puerto de consola USB a Serie.

Parámetros:

  • port (obligatorio) — Nombre del puerto serie (por ejemplo, COM3 en Windows, /dev/ttyUSB0 en Linux)
  • baudRate (opcional) — Velocidad de baudios (por defecto: 9600 para la mayoría de conmutadores)
  • connectionId (opcional) — Identificador único para la conexión
  • deviceType (opcional) — Tipo de dispositivo para ajustes óptimos (cisco, aruba, genérico)

Ejemplo:

Connect to my Cisco switch console on COM3

serial_send_command

Envía un comando al dispositivo de red mediante conexión serie.

Parámetros:

  • connectionId (obligatorio) — ID de una conexión serie activa
  • command (obligatorio) — Comando para enviar al dispositivo
  • waitForResponse (opcional) — Esperar respuesta del dispositivo
  • timeout (opcional) — Tiempo de espera de respuesta en milisegundos

Ejemplo:

Send "show version" command to the console connection

serial_discover_device

Descubre el tipo y las capacidades del dispositivo mediante conexión serie. Identifica automáticamente dispositivos Cisco IOS, Cisco IOS-XE, Aruba y genéricos.

Parámetros:

  • connectionId (obligatorio) — ID de una conexión serie activa

Ejemplo:

Discover what type of device is connected

serial_list_connections

Lista todas las conexiones serie activas.

serial_disconnect

Desconecta un puerto serie.

Parámetros:

  • connectionId (obligatorio) — ID de una conexión serie activa

Herramientas de gestión de sitios web en Ubuntu

Las siguientes herramientas de gestión de servidores Ubuntu están disponibles:

  • ubuntu_nginx_control — Control del servidor web (iniciar, detener, reiniciar, estado, recargar, verificar configuración)
  • ubuntu_update_packages — Actualizaciones de paquetes del sistema con opción solo de seguridad
  • ubuntu_ssl_certificate — Gestión de certificados SSL usando Let's Encrypt (emitir, renovar, estado, listar)
  • ubuntu_website_deployment — Despliegue de sitios web con copia de seguridad y restauración automáticas
  • ubuntu_ufw_firewall — Gestión del cortafuegos (UFW) (habilitar, deshabilitar, permitir, denegar, eliminar)

Herramientas de configuración y automatización de SSH

Estas herramientas automatizan el proceso de configurar el acceso SSH en conmutadores de red mediante conexión de consola, permitiendo una transición fluida de gestión solo por consola a gestión basada en SSH.

switch_generate_ssh_config

Genera una plantilla de configuración SSH para un conmutador de red según el tipo de dispositivo y el nivel de seguridad.

Parámetros:

  • deviceType (opcional) — Tipo de dispositivo: cisco, aruba (se detecta automáticamente si no se especifica)
  • securityLevel (opcional) — Nivel de seguridad: básico, seguro (por defecto: básico)
  • hostname (obligatorio) — Nombre de host del conmutador
  • ip_address (obligatorio) — Dirección IP de gestión
  • subnet_mask (opcional) — Máscara de subred (por defecto: 255.255.255.0)
  • gateway (obligatorio) — Puerta de enlace predeterminada
  • username (obligatorio) — Nombre de usuario SSH
  • password (obligatorio) — Contraseña SSH

switch_apply_ssh_config

Aplica la configuración SSH a un conmutador mediante una conexión de consola serie activa.

Parámetros:

  • serialConnectionId (obligatorio) — ID de una conexión serie activa
  • deviceType (opcional) — Tipo de dispositivo: cisco, aruba
  • hostname (obligatorio) — Nombre de host del conmutador
  • ip_address (obligatorio) — Dirección IP de gestión
  • gateway (obligatorio) — Puerta de enlace predeterminada
  • username (obligatorio) — Nombre de usuario SSH
  • password (obligatorio) — Contraseña SSH
  • confirmApply (obligatorio) — Debe ser verdadero para continuar

switch_verify_ssh_status

Comprueba el estado actual de la configuración SSH en un conmutador mediante conexión serie.

Parámetros:

  • serialConnectionId (obligatorio) — ID de una conexión serie activa

switch_test_ssh_connection

Prueba la conectividad SSH a un switch recién configurado.

Parámetros:

  • ip_address (obligatorio) - Dirección IP del switch
  • username (obligatorio) - Nombre de usuario SSH
  • password (obligatorio) - Contraseña SSH
  • port (opcional) - Puerto SSH (predeterminado: 22)

switch_complete_ssh_setup

Completa el flujo de trabajo de configuración SSH de extremo a extremo mediante la conexión de consola. Esto automatiza todo el proceso de configuración de SSH en un switch.

Parámetros:

  • serialConnectionId (obligatorio) - ID de una conexión serie activa
  • hostname (obligatorio) - Nombre de host del switch
  • ip_address (obligatorio) - Dirección IP de gestión
  • gateway (obligatorio) - Puerta de enlace predeterminada
  • username (obligatorio) - Nombre de usuario SSH
  • password (obligatorio) - Contraseña SSH
  • confirmSetup (obligatorio) - Debe ser verdadero para continuar

Herramientas de transición de consola a SSH

console_to_ssh_transition

Flujo de trabajo automatizado completo para transicionar un switch de red de solo acceso por consola a gestión por SSH. Esta es la herramienta recomendada para la configuración inicial del switch.

Parámetros:

  • port (obligatorio) - Puerto serie (por ejemplo, COM3, /dev/ttyUSB0)
  • hostname (obligatorio) - Nombre de host del switch
  • ip_address (obligatorio) - Dirección IP de gestión
  • gateway (obligatorio) - Puerta de enlace predeterminada
  • username (obligatorio) - Nombre de usuario SSH
  • password (obligatorio) - Contraseña SSH
  • deviceType (opcional) - Tipo de dispositivo: cisco, aruba (se detecta automáticamente si no se especifica)
  • confirmTransition (obligatorio) - Debe ser verdadero para continuar

Ejemplo:

Set up SSH on my Cisco switch connected to COM3 with hostname "switch-core-01", IP 192.168.1.10, gateway 192.168.1.1, username "admin"

quick_ssh_check

Verificación rápida del estado de SSH en un switch mediante la conexión serie sin realizar cambios.

Parámetros:

  • port (obligatorio) - Puerto serie
  • baudRate (opcional) - Velocidad de baudios (predeterminado: 9600)
  • enablePassword (opcional) - Contraseña de habilitación si es necesaria

Herramientas de gestión de firmware

Estas herramientas ofrecen capacidades integrales de gestión de firmware para switches de red, incluida la verificación de versiones, la carga de firmware, la verificación, la instalación y la preparación de reversión.

switch_check_firmware

Verifica la versión actual del firmware y la información del sistema en un switch de red.

Parámetros:

  • connectionId (obligatorio) - ID de una conexión SSH activa
  • enablePassword (opcional) - Contraseña de habilitación para modo privilegiado

Devuelve:

  • Versión actual del firmware
  • Versión de arranque
  • Modelo del dispositivo y número de serie
  • Tiempo de actividad del sistema
  • Salida completa de la versión

switch_check_storage

Verifica el espacio de almacenamiento disponible en el switch antes de la carga del firmware.

Parámetros:

  • connectionId (obligatorio) - ID de una conexión SSH activa
  • enablePassword (opcional) - Contraseña de habilitación para modo privilegiado

Devuelve:

  • Información de almacenamiento flash
  • Espacio disponible
  • Detalles del sistema de archivos

switch_upload_firmware

Carga un archivo de firmware al switch de red mediante SFTP. Admite archivos de firmware grandes con un tiempo de espera de 30 minutos.

Parámetros:

  • connectionId (obligatorio) - ID de una conexión SSH activa
  • localFirmwarePath (obligatorio) - Ruta local del archivo de firmware
  • remotePath (opcional) - Ruta remota en el switch (predeterminado: flash:/nombre de archivo)
  • enablePassword (opcional) - Contraseña de habilitación para modo privilegiado

Ejemplo:

Upload firmware file ~/downloads/c2960-lanbasek9-mz.150-2.SE11.bin to the switch

switch_verify_firmware

Verifica la integridad de un archivo de firmware cargado en el switch mediante sumas de comprobación MD5.

Parámetros:

  • connectionId (obligatorio) - ID de una conexión SSH activa
  • firmwarePath (obligatorio) - Ruta al archivo de firmware en el switch
  • enablePassword (opcional) - Contraseña de habilitación para modo privilegiado

Devuelve:

  • Estado de verificación
  • Resultados de la suma de comprobación MD5
  • Información del archivo

switch_install_firmware

Instala el firmware en el switch y opcionalmente reinicia para aplicar la actualización.

Parámetros:

  • connectionId (obligatorio) - ID de una conexión SSH activa
  • firmwarePath (obligatorio) - Ruta al archivo de firmware en el switch
  • enablePassword (opcional) - Contraseña de habilitación para modo privilegiado
  • autoReboot (opcional) - Reiniciar automáticamente después de la instalación (predeterminado: false)

Importante: ¡Esto modifica la configuración de arranque! ¡Prueba primero en un entorno de laboratorio!

Ejemplo:

Install firmware flash:/c2960-lanbasek9-mz.150-2.SE11.bin and reboot the switch

switch_prepare_rollback

Prepara la información necesaria para la reversión del firmware en caso de problemas con el nuevo firmware.

Parámetros:

  • connectionId (obligatorio) - ID de una conexión SSH activa
  • enablePassword (opcional) - Contraseña de habilitación para modo privilegiado

Devuelve:

  • Configuración de arranque actual
  • Imágenes de firmware disponibles
  • Instrucciones para la reversión

Configuración de consola USB a serie

Requisitos de hardware

Adaptadores USB a serie:

  • Adaptadores basados en FTDI (FT232R, FT232H) - Mejor opción por su fiabilidad
  • Prolific PL2303 - Ampliamente disponibles y compatibles
  • Silicon Labs CP2102/CP2104 - Buen rendimiento y estabilidad
  • CH340/CH341 - Opción económica, funciona bien en la mayoría de los sistemas

Cables de consola:

  • Cable de consola Cisco (RJ45 a DB9 o USB)
  • Cable de consola Aruba/HP (RJ45 a DB9 o USB)
  • Los cables de consola universales funcionan con la mayoría de los dispositivos

Instalación de controladores

Windows:

  • Controladores FTDI: normalmente se instalan automáticamente o se descargan de ftdichip.com
  • Controladores Prolific: disponibles en prolific.com.tw
  • Controladores Silicon Labs: descárguelos de silabs.com
  • Controladores CH340: normalmente incluidos en Windows 10/11, o descárguelos por separado

macOS:

  • Adaptadores FTDI: normalmente funcionan sin configuración adicional
  • Otros adaptadores: pueden requerir instalación del controlador del fabricante

Linux:

  • La mayoría de los adaptadores funcionan de inmediato con los controladores del kernel
  • FTDI, Silicon Labs, CH340: integrados en el kernel
  • Verifique dmesg después de conectar el adaptador para confirmar la detección

Inicio rápido con consola

  1. Conecte el adaptador USB a serie a su computadora
  2. Conecte el cable de consola del adaptador al puerto de consola del switch
  3. Enumere los puertos disponibles: "Muéstrame los puertos serie disponibles"
  4. Conéctese al puerto: "Conectar a COM3 para switch Cisco"
  5. Envíe comandos o ejecute la configuración automatizada

Notas de seguridad

  • Guarde las claves SSH de forma segura
  • Use autenticación basada en claves cuando sea posible
  • Limite el acceso SSH a direcciones IP específicas
  • Mantenga su servidor actualizado
  • Use contraseñas o frases de contraseña seguras (mínimo 8 caracteres)
  • Asegure el acceso físico a los puertos de consola y adaptadores USB a serie
  • Considere configurar variables de entorno en un archivo .env para información sensible

Solución de problemas

El servidor no se inicia

  • Verifique que Node.js esté instalado: node --version
  • Verifique que todas las dependencias estén instaladas: npm install
  • Reconstruya el proyecto: npm run build

Problemas de conexión

  • Verifique que el servidor SSH esté ejecutándose en el destino
  • Revise la configuración del firewall
  • Confirme que las credenciales sean correctas
  • Pruebe la conexión SSH manualmente primero

Integración con Claude Desktop

  • Asegúrese de que la ruta en la configuración sea absoluta
  • Reinicie Claude Desktop después de los cambios de configuración
  • Consulte la Consola de desarrollador para ver los mensajes de error

Desarrollo

Para modificar o ampliar el servidor:

  1. Edite los archivos fuente en src/
  2. Reconstruya: npm run build
  3. Pruebe sus cambios
  4. Reinicie Claude Desktop o VS Code para que se apliquen los cambios

Ejecución en modo de desarrollo

Para pruebas rápidas durante el desarrollo:

npm run dev

Contribuciones

Las contribuciones para herramientas y características adicionales son bienvenidas. No dude en enviar solicitudes de extracción (pull requests) o abrir problemas para mejoras y correcciones de errores.

Licencia

Licencia MIT