Veja como conectar o agente de IA do Cursor aos seus servidores por SSH através de um servidor MCP, sem que nenhuma chave privada chegue ao ambiente do agente. Comece pelo motivo de se dar ao trabalho. O agente do Cursor é confortável dentro de um repositório. No momento em que a tarefa sai do repositório — ver por que o serviço não sobe, rodar a migração, corrigir a configuração do nginx na máquina de verdade — ele precisa de SSH. E aqui está a parte incômoda: o agente do Cursor executa comandos de terminal na sua máquina, então, se as suas chaves estão desbloqueadas em ~/.ssh ou em um ssh-agent rodando, ele não precisa que você “dê” nada a ele — ssh prod já funciona. Você concedeu acesso total ao servidor por padrão, sem ter decidido isso.
Existe um arranjo melhor: o agente pede, e algo que você controla faz a autenticação. Já escrevemos sobre por que colar a chave é a jogada que não dá para desfazer (em inglês) e o que é de fato um servidor MCP (em inglês); este post é a versão prática para o Cursor. Vinte minutos, um VPS, nenhuma chave jamais entra no alcance do agente.
O que você precisa
- Termalin — o app de desktop, o plano Free já basta. É um cliente SSH com um servidor MCP integrado; é com esse servidor que o Cursor vai falar.
- Cursor na mesma máquina.
- Um host salvo no Termalin — escolha algo de baixo risco para a primeira vez. Staging, um VPS de brincadeira, a máquina que só roda o seu leitor de RSS.
Passo 1 — ative o acesso do agente
O acesso do agente vem desativado por padrão. No Termalin, abra Configurações → Acesso do agente (MCP) e ative-o, depois marque os hosts que o agente pode alcançar. Nada fora dessa lista existe do ponto de vista do Cursor — um novo host é uma decisão que você toma no app, não algo em que o agente consiga entrar na base da conversa.
Duas coisas acontecem por baixo dos panos. O Termalin grava um inventário de hosts para o servidor MCP com entradas de autenticação só para o agente — nenhuma senha ou chave vai parar nesse arquivo. E a autenticação fica com a custódia de chaves do app: você desbloqueia as suas chaves uma vez, o Termalin assina em nome do agente. Não há arquivo de chave para o agente ler, então não há nada para ele vazar — o que também fecha a porta dos fundos de ~/.ssh lá de cima, porque os hosts que vale a pena proteger já não precisam de uma chave solta no seu disco.
Enquanto está nas configurações, defina a política do agente de cada host: acesso total, uma lista de comandos permitidos ou bloqueado. A lista de comandos permitidos é o ponto de partida certo para qualquer coisa com que você se importe.
Passo 2 — registre o servidor no mcp.json
O Cursor pega os servidores MCP de um arquivo JSON — .cursor/mcp.json na raiz de um projeto, só para aquele projeto, ou ~/.cursor/mcp.json para deixar o servidor disponível em todo lugar. Para um servidor local (stdio) como o do Termalin, a entrada é um comando e seus argumentos:
{
"mcpServers": {
"termalin": {
"command": "<path>/termalin-mcp",
"args": []
}
}
}
É essa a integração inteira. O arquivo global é a escolha sensata aqui — acesso ao servidor não é uma questão por repositório. Reinicie o Cursor (ou recarregue a lista de MCP nas configurações dele), confirme que o servidor aparece como em execução, e as ferramentas surgem para o agente: hosts_list, ssh_exec, sessões persistentes (session_open, session_exec), leituras e escritas de SFTP.
Uma observação específica do Cursor que vale guardar: por padrão, o Cursor pergunta antes de executar uma chamada de ferramenta. Deixe isso ligado nas primeiras sessões. A aprovação automática é uma conveniência que você deve estender uma ferramenta por vez, depois de ter observado como o agente usa cada uma — do mesmo jeito que você ampliaria a lista de hosts.
Passo 3 — dê a ele uma tarefa de verdade
Não comece com um comando de demonstração; comece com uma tarefa que você realmente faria:
O health check da staging-1 está oscilando desde o deploy de ontem. Descubra por quê e corrija.
Observe o agente trabalhar: ele chama hosts_list, vê a staging-1, abre uma sessão e começa a puxar os fios — status do serviço, as últimas cem linhas de log, o diff da configuração contra o que está rodando. Ele propõe uma correção, aplica e verifica que o health check fica verde.
O que torna isso confortável é que nada disso é invisível. Toda sessão que o agente abre aparece no Termalin como uma aba de terminal ao vivo, e a grade de monitoramento (em inglês) mostra todas as sessões abertas lado a lado, com os blocos conduzidos pelo agente destacados. Você não está lendo um resumo depois do fato — está vendo os comandos caírem enquanto rodam, e pode intervir a qualquer momento.
Onde ficam os limites
Padrões que vale conhecer antes de apontá-lo para qualquer coisa com que você se importe:
- As suas chaves nunca tocam o ambiente do agente. A custódia assina; o agente pede. Revogar o acesso é uma opção em Configurações, não uma rotação de chaves por toda a sua frota.
- O alcance do agente é a lista permitida que você definiu no Passo 1, e a política de comandos de cada host limita o que ele pode rodar lá.
- Digitar na sua sessão é algo à parte. Por padrão, o agente abre as próprias sessões; agir dentro de uma que você já tem aberta é uma opção de consentimento própria — ele nunca pega carona em silêncio.
- As gravações marcam a atividade do agente. As gravações de sessão capturam apenas a saída — nunca as suas teclas — e cada comando do agente é marcado como dele no registro de auditoria, com o dispositivo e o IP de onde veio. Às 2 da manhã, você consegue distinguir “foi ele que fez isso” de “fui eu que fiz isso”.
Sem desktop por perto? Use o endpoint hospedado
Se o agente roda onde o seu desktop não está — CI, um sandbox na nuvem — use o servidor MCP hospedado em vez do app. De forma interativa, adicione https://termal.in/mcp ao Cursor por URL e entre uma vez na página do Termalin (OAuth, sem chave para colar); para execuções sem supervisão, crie uma chave de API no painel web do Termalin e aponte o cliente para o endpoint MCP hospedado. O mcp.json do Cursor também aceita servidores remotos por URL:
{
"mcpServers": {
"termalin": {
"url": "https://termal.in/api/v1/mcp",
"headers": { "Authorization": "Bearer tk_live_…" }
}
}
}
(Se a sua versão do Cursor ainda não aceita cabeçalhos de autenticação em servidores remotos, fique com o servidor stdio local — de todo modo, é o padrão melhor.) O endpoint hospedado só alcança servidores que você cadastrou com o agente de túnel, e cada execução autentica com um certificado de curta duração — a mesma ideia de custódia, sem credencial permanente em lugar nenhum. As chaves são escopadas a servidores específicos, expiram num cronograma que você escolhe e morrem na hora quando revogadas. Detalhes na documentação MCP.
O hábito que faz pegar
Trate a primeira semana como a integração de um novo colega que digita muito rápido. Mantenha a grade de monitoramento aberta. Dê a ele tarefas com um estado-final claro — “fazer o health check passar”, “renovar o certificado” — e leia como ele chega lá. Mantenha a aprovação por chamada do Cursor ligada até o agente ter conquistado a aprovação automática para as ferramentas chatas, e amplie a lista de hosts permitidos uma máquina sem graça por vez.
A assimetria é o ponto: o agente ganha alcance de verdade, e você mantém a única coisa que não pode ser tirada de volta. (Está usando o Claude Code? Mesma configuração, um comando (em inglês).)
O plano Free do Termalin é o app de desktop completo, e toda conta nova começa com 14 dias de teste do Pro — baixe o Termalin, comece pela página Cursor SSH, ou leia antes a documentação MCP.