Aquí tienes cómo conectar el agente de IA de Cursor a tus servidores por SSH a través de un servidor MCP, sin que ninguna clave privada aterrice jamás en el entorno del agente. Empieza por el porqué molestarse. El agente de Cursor está cómodo en un repo. En cuanto la tarea sale del repo —averiguar por qué el servicio no arranca, ejecutar la migración, arreglar la configuración de nginx en la máquina de verdad— necesita SSH. Y aquí viene la parte incómoda: el agente de Cursor ejecuta comandos de terminal en tu máquina, así que si tus claves están desbloqueadas en ~/.ssh o en un ssh-agent en marcha, no necesita que le «des» nada —ssh prod ya funciona. Has concedido acceso completo al servidor por defecto, sin haberlo decidido.
Hay un arreglo mejor: el agente pide, y algo que tú controlas hace la autenticación. Hemos escrito sobre por qué la ruta de pegar la clave es el único movimiento que no puedes deshacer (en inglés) y qué es en realidad un servidor MCP (en inglés); este artículo es la versión práctica para Cursor. Veinte minutos, un VPS, ninguna clave entra jamás al alcance del agente.
Lo que necesitas
- Termalin —la app de escritorio, el plan gratis sirve. Es un cliente SSH con un servidor MCP integrado; ese servidor es con el que hablará Cursor.
- Cursor en la misma máquina.
- Un host guardado en Termalin —elige algo de bajo riesgo para la primera prueba. Staging, un VPS de juguete, la máquina que solo corre tu lector de RSS.
Paso 1 — activa el acceso del agente
El acceso del agente está desactivado por defecto. En Termalin, abre Ajustes → MCP y actívalo, luego marca los hosts a los que el agente puede llegar. Nada fuera de esa lista existe en lo que a Cursor respecta —un host nuevo es una decisión que tomas en la app, no algo a lo que el agente pueda colarse hablando.
Dos cosas pasan bajo el capó. Termalin escribe un inventario de hosts para el servidor MCP con entradas de auth solo-agente —ninguna contraseña ni clave aterriza en ese archivo. Y la autenticación se queda con el custodio de claves de la app: desbloqueas tus claves una vez, Termalin firma en nombre del agente. No hay archivo de clave que el agente pueda leer, así que no hay nada que filtrar —lo que además cierra la puerta trasera de ~/.ssh de arriba, porque los hosts que vale la pena proteger ya no necesitan una clave suelta en tu disco en absoluto.
Mientras estás en los ajustes, pon la política del agente de cada host: acceso completo, una lista de comandos permitidos, o bloqueado. La lista de permitidos es el punto de partida correcto para cualquier cosa que te importe.
Paso 2 — registra el servidor en mcp.json
Cursor recoge servidores MCP de un archivo JSON —.cursor/mcp.json en la raíz de un proyecto solo para ese proyecto, o ~/.cursor/mcp.json para que el servidor esté disponible en todas partes. Para un servidor local (stdio) como el de Termalin, la entrada es un comando y sus argumentos:
{
"mcpServers": {
"termalin": {
"command": "<path>/termalin-mcp",
"args": []
}
}
}
Esa es toda la integración. El archivo global es la opción sensata aquí —el acceso al servidor no es un asunto por repo. Reinicia Cursor (o recarga la lista de MCP en su configuración), confirma que el servidor aparece como en marcha, y las herramientas aparecen ante el agente: hosts_list, ssh_exec, sesiones persistentes (session_open, session_exec), lecturas y escrituras SFTP.
Una nota específica de Cursor que conviene guardar: por defecto Cursor pregunta antes de ejecutar una llamada a herramienta. Déjalo así para las primeras sesiones. La aprobación automática es una comodidad que deberías ampliar una herramienta cada vez, después de haber observado cómo usa el agente cada una —igual que ampliarías la lista de hosts.
Paso 3 — dale una tarea de verdad
No empieces con un comando de demostración; empieza con una tarea que harías de verdad:
El health check de staging-1 lleva fallando de forma intermitente desde el despliegue de ayer. Averigua por qué y arréglalo.
Observa al agente trabajar: llama a hosts_list, ve staging-1, abre una sesión, y empieza a tirar de los hilos —estado del servicio, las últimas cien líneas de log, el diff de configuración frente a lo que corre. Propone un arreglo, lo aplica, y verifica que el health check se pone en verde.
La parte que hace esto cómodo es que nada de ello es invisible. Cada sesión que el agente abre aparece en Termalin como una pestaña de terminal en vivo, y el watch grid (en inglés) muestra todas las sesiones abiertas una junto a otra, con los mosaicos conducidos por el agente resaltados. No estás leyendo un resumen a posteriori —estás viendo los comandos aterrizar según se ejecutan, y puedes intervenir en cualquier momento.
Dónde están los límites
Valores por defecto que conviene conocer antes de apuntarlo a algo que te importe:
- Tus claves nunca tocan el entorno del agente. El custodio firma; el agente pide. Revocar el acceso es un interruptor en Ajustes, no una rotación de claves por toda tu flota.
- El alcance del agente es la lista de permitidos que fijaste en el Paso 1, y la política de comandos de cada host acota lo que puede ejecutar ahí.
- Teclear en tu sesión es aparte. Por defecto el agente abre sus propias sesiones; actuar dentro de una que ya tienes abierta es su propio interruptor de consentimiento —nunca se monta en silencio.
- Las grabaciones marcan la actividad del agente. Las grabaciones de sesión capturan solo la salida —nunca tus pulsaciones— y cada comando del agente queda etiquetado como suyo en el registro de auditoría, con el dispositivo y la IP de los que vino. A las 2 de la madrugada puedes distinguir «esto lo hizo él» de «esto lo hice yo».
¿Sin escritorio a mano? Usa el endpoint alojado
Si el agente corre donde no está tu escritorio —CI, un sandbox en la nube— usa el servidor MCP alojado en vez de la app. De forma interactiva, añade https://termal.in/mcp a Cursor por URL e inicia sesión una vez en la página de Termalin (OAuth, sin clave que pegar); para ejecuciones desatendidas, crea una clave API en el panel web de Termalin y apunta el cliente al endpoint MCP alojado. El mcp.json de Cursor también admite servidores remotos por URL:
{
"mcpServers": {
"termalin": {
"url": "https://termal.in/api/v1/mcp",
"headers": { "Authorization": "Bearer tk_live_…" }
}
}
}
(Si tu build de Cursor aún no admite cabeceras de auth en servidores remotos, quédate con el servidor local stdio —de todas formas es el mejor valor por defecto.) El endpoint alojado solo llega a servidores que hayas dado de alta con el agente de túnel, y cada ejecución se autentica con un certificado de corta duración —misma idea del custodio, sin ninguna credencial permanente en ninguna parte. Las claves están acotadas a servidores concretos, expiran según un calendario que eliges, y mueren al instante cuando se revocan. Detalles en las docs de MCP.
El hábito que lo afianza
Trata la primera semana como el onboarding de un compañero nuevo que teclea muy rápido. Mantén el watch grid abierto. Dale tareas con un estado-de-hecho claro —«haz que pase el health check», «consigue renovar el certificado»— y lee cómo llega ahí. Mantén activada la aprobación por llamada de Cursor hasta que el agente se haya ganado el auto-aprobado para las herramientas aburridas, y amplía la lista de hosts permitidos una máquina sin emoción cada vez.
La asimetría es la clave: el agente consigue alcance real, y tú conservas la única cosa que no se puede recuperar. (¿Usas Claude Code en su lugar? La misma configuración, un comando (en inglés).)
El plan Free de Termalin es la app de escritorio completa, y toda cuenta nueva empieza con 14 días de Pro — descárgalo, empieza desde la página de Cursor SSH, o lee primero las docs de MCP.