Um token MCP é a senha da sua conta com uma API conectada. Entregue-o a um agente e você terá um usuário que nunca se cansa, lê qualquer página para a qual você o aponta e faz exatamente o que a última instrução no contexto dele mandou. Na maior parte do tempo, é isso que você quer. Esta página trata do resto do tempo.
Tudo abaixo foi conferido no servidor em produção na data indicada no topo: a lista de ferramentas vem de tools/list em https://mcp.eqvps.com/mcp, os limites vêm da própria API. Se você está começando, veja primeiro como conectar um cliente MCP e tokens de API, e depois volte.
Modelo de ameaças: o que dá errado na prática
Três coisas, na ordem em que as vemos:
- O agente entende errado. «Limpa a máquina de teste» vira a reinstalação do servidor errado. Sem malícia, só um modelo preenchendo uma lacuna na instrução.
- Injeção de prompt. O agente lê um texto que você não escreveu (um README, uma resposta do suporte, uma página da web) e esse texto manda ele fazer algo. Se o agente tem um token com todos os direitos, a instrução injetada também tem.
- O token vaza. Ele vai parar num histórico do shell, num repositório público, numa configuração MCP compartilhada ou numa linha de log.
O servidor MCP verifica se o token é válido e se o servidor pertence àquela conta (ou foi delegado a ela). Ele não sabe o que você quis dizer. Cada proteção abaixo responde a uma única pergunta: quanto estrago é possível quando a instrução está errada?
Todas as ferramentas MCP, por nível de risco
Um token de cliente vê 45 ferramentas (servidor MCP 1.6.0). Um token de revendedor (rk_…) vê um conjunto separado de 30 ferramentas de revenda e nenhuma destas, então o endpoint tem 75 no total. O seu cliente recebe de tools/list apenas o próprio conjunto.
Esta página organiza as ferramentas por risco. Os parâmetros e exemplos de chamadas de cada uma estão na referência de parâmetros; todas as ferramentas em uma linha, incluindo as 30 de revendedor, estão na lista completa.
Ainda não publicamos anotações de ferramentas MCP (readOnlyHint, destructiveHint), então o seu cliente não consegue classificá-las sozinho. Configure as aprovações à mão com base nos níveis abaixo.
Nível 0 — públicas, sem token (5)
| Ferramenta | O que faz |
|---|---|
get_started | O fluxo inteiro numa resposta: quais ferramentas chamar e em que ordem |
list_plans | Planos, preços, imagens de SO |
sandbox_pricing | Tarifas das sandboxes |
register_account | Cria uma conta nova e devolve o token dela |
login | E-mail + senha → token |
Nível 1 — leitura da conta, sem efeitos colaterais (15)
| Ferramenta | O que faz | Atenção |
|---|---|---|
whoami | Id, nome e e-mail da conta | |
get_balance | Saldo pré-pago | |
list_vps | Servidores ativos, em provisionamento e suspensos | |
get_vps_status | Status, especificações, dados de acesso | Com reveal: true retorna a senha root |
get_vps_metrics | CPU, memória, rede, disco ao longo do tempo | |
get_upgrade_options | Planos para os quais o servidor pode mudar sem reinstalar | |
list_delegations | A quem você deu acesso | |
list_delegated_to_me | Servidores que outras pessoas delegaram a você | |
list_tickets | Seus tickets de suporte | |
get_ticket | Um ticket com a conversa | O texto do ticket é entrada não confiável para o agente |
list_sandboxes | Suas sandboxes | |
get_sandbox | Uma sandbox e o consumo dela | |
get_task | Saída de uma tarefa em segundo plano | |
download_file | Lê um arquivo pequeno de uma sandbox | |
get_download_url | Link temporário para um arquivo da sandbox | Qualquer pessoa com o link pode baixar até ele expirar |
Nível 2 — mudam o estado, não gastam nada (17)
| Ferramenta | O que faz | Atenção |
|---|---|---|
power_vps | start / stop / reboot | Stop é stop: os serviços caem |
set_hostname | Renomeia o servidor | Muda o valor que o confirm confere |
undo_cancel | Remove um cancelamento agendado para o fim do período | |
refresh_token | Token novo, o antigo é revogado na hora | Atualize qualquer configuração estática depois |
set_password | Define a senha da conta, se ainda não houver | Quem tem o token pode defini-la antes de você |
topup_balance | Fatura de recarga + link de pagamento cripto | Pagar exige uma carteira |
pay_invoice | Link de pagamento para uma fatura em aberto | Idem |
accept_delegation | Aceita um convite | |
revoke_delegation | Encerra uma delegação | |
create_ticket / reply_ticket / close_ticket | Tickets de suporte | O agente escreve ao suporte em seu nome |
run_code / exec_command | Executa código dentro de uma sandbox | Só na sandbox, não no seu VPS |
kill_task | Para uma tarefa em segundo plano da sandbox | |
upload_file / get_upload_url | Coloca um arquivo na sandbox |
Nível 3 — gastam dinheiro, destroem dados ou concedem acesso (8)
| Ferramenta | O que faz | Verificação no servidor |
|---|---|---|
order_vps | Pede um servidor, pago com o saldo | Saldo insuficiente → fatura em aberto, nada é cobrado |
change_plan | Troca de plano sem reinstalar, diferença debitada do saldo | confirm: true; saldo insuficiente → 402 |
create_sandbox | Inicia uma sandbox cobrada | Saldo vazio → 402 |
reinstall_vps | Apaga o disco e instala um SO novo | confirm = hostname exato ou DELETE; 4 chamadas/min |
reset_password | Nova senha root, a antiga para de funcionar | confirm = hostname ou DELETE; 6 chamadas/min |
cancel_service | end_of_period (padrão, reversível) ou immediate (destrói o servidor na hora) | immediate exige confirm = hostname |
kill_sandbox | Exclui uma sandbox e os arquivos dela | nenhuma |
delegate_service | Dá a outra pessoa acesso de operador a um servidor | Só o dono; a pessoa precisa aceitar |
Changelog do conjunto de ferramentas
| Data | Versão do servidor | Mudança | Impacto no risco |
|---|---|---|---|
| 2026-10-03 | 1.6.0 | refresh_token adicionado; tokens valem 1 ano por padrão | Nível 2 |
| 2026-10-03 | 1.5.0 | undo_cancel, get_upgrade_options, change_plan | change_plan gasta saldo → nível 3 |
| 2026-10-03 | 1.1.0 | 13 ferramentas de sandbox | create_sandbox gasta, kill_sandbox destrói → nível 3 |
A versão em execução é pública: curl -s https://mcp.eqvps.com/healthz. Quando ela mudar, esta tabela muda junto.
O saldo é o teto de gastos
A EQVPS é pré-paga. Sem cartão salvo, sem linha de crédito e sem saldo negativo: o máximo que um agente pode gastar é o que está no saldo. Três ferramentas gastam: order_vps, change_plan e create_sandbox. As renovações dos seus servidores atuais saem do mesmo saldo.
O agente pode criar pedidos de dinheiro, mas não pagá-los. topup_balance e pay_invoice retornam um link de pagamento cripto, e um link não faz nada sem uma carteira por trás. Também não existe endpoint de saque: o dinheiro do saldo pode comprar serviços na sua conta, não sair dela. Reembolsos de um cancelamento imediato também voltam para o saldo.
Uma ressalva, e ela é séria. Se você deixar o saldo muito baixo para frear o agente, as suas próprias renovações começam a falhar e os servidores entram no período de carência. Nossa regra prática: um ciclo de renovação do que você já tem rodando, mais o orçamento da tarefa atual do agente. O guia de orçamento para agentes mostra o cálculo. E se você der ao agente uma carteira própria com fundos, essa carteira vira um segundo teto que você também precisa vigiar.
Privilégio mínimo: não existe token somente leitura (ainda)
Resposta direta: todo token de cliente tem os mesmos direitos da conta no painel. Nome e validade do token são configuráveis; escopos, não.
O mais restrito que existe hoje é a delegação. Você dá ao agente uma conta própria, com saldo zero, e delega a ele um servidor:
delegate_service { "service_id": "EQ-XXXX", "email": "agent@yourdomain.com", "expires_days": 30 }
O mesmo via REST:
curl -s -X POST "https://api.eqvps.com/api/v1/eqvps/services/EQ-XXXX/delegations" \
-H "Authorization: Bearer $EQVPS_TOKEN" -H "Content-Type: application/json" \
-d '{"email":"agent@yourdomain.com","expires_days":30}'
O convite precisa ser aceito com a sessão aberta nesse e-mail (accept_delegation), e expires_days vai de 1 a 365. Passo a passo com capturas de tela: delegar acesso e o acesso na documentação.
| Uma conta delegada pode | Uma conta delegada não pode |
|---|---|
| Ver status, métricas e histórico desse único servidor | Ver seus outros servidores, seu saldo ou suas faturas |
| Ligar, desligar, reiniciar | Cancelar, renovar ou trocar de plano |
| Definir hostname e DNS reverso | Comprar adicionais ou IPs |
| Redefinir a senha root | Abrir o console web |
| Reinstalar o SO | Delegar o servidor a outra pessoa |
Repare nas duas últimas linhas da esquerda. Um delegado não consegue gastar o seu dinheiro, mas consegue apagar aquele servidor. Ative backups em qualquer servidor que um agente possa reinstalar.
Higiene de tokens
Um token por agente, com nome. Crie-o em Painel → Configurações → Tokens de API para agentes, ou assim:
curl -s -X POST "https://api.eqvps.com/api/v1/eqvps/auth/tokens" \
-H "Authorization: Bearer $EQVPS_TOKEN" -H "Content-Type: application/json" \
-d '{"name":"backup-agent","expires_in_days":90}'
O token aparece uma única vez. Validade de 1 a 1825 dias, 365 se você não informar. Para agentes, escolheríamos 90.
Guarde-o num arquivo que só você consegue ler, não no repositório, não no prompt, não numa variável de shell que você fica copiando:
mkdir -p ~/.config/eqvps && chmod 700 ~/.config/eqvps
( umask 077; read -rsp 'EQVPS token: ' T; echo; printf 'EQVPS_TOKEN=%s\n' "$T" > ~/.config/eqvps/agent.env )
ls -l ~/.config/eqvps/agent.env # esperado: -rw-------
Depois carregue-o no serviço do agente com EnvironmentFile= (systemd) ou set -a; . ~/.config/eqvps/agent.env; set +a.
Faça a rotação antes de expirar. A ferramenta refresh_token, ou POST /auth/tokens/{id}/refresh, emite um token novo com o mesmo nome e revoga o antigo na hora. Se o seu cliente MCP tem o token fixo na configuração, atualize logo em seguida, senão a próxima sessão recebe 401.
Confira quem usa o quê: GET /auth/tokens lista cada token com nome, validade e last_used_at. Um token que você não reconhece, ou um usado depois que você desligou o agente, é o seu sinal.
Se um token vazar
Nesta ordem:
- Revogue. Painel → Configurações → Tokens de API para agentes → Revogar, ou
curl -s -X DELETE -H "Authorization: Bearer $EQVPS_TOKEN" https://api.eqvps.com/api/v1/eqvps/auth/tokens/<id>. Ele para de funcionar na próxima requisição. - Procure tokens novos que você não criou e revogue-os também.
- Avalie o que pode ter sido afetado: o histórico do serviço de cada servidor, faturas e saldo, e
list_delegationsem busca de acessos que você não concedeu. - Troque as senhas root de todos os servidores que aquele token podia ver.
get_vps_statuscomreveal: trueentrega a senha root, então um token vazado é uma senha root vazada. Aproveite para conferir~/.ssh/authorized_keys. - Feche a porta da senha. Se a sua conta nunca teve senha, quem tinha o token pode ter definido uma com
set_password. Entre com um código por e-mail e troque-a.
Prevenir o passo 5 não custa nada: defina você mesmo uma senha para a conta agora, e set_password vai retornar 409 para qualquer um que vier depois.
Aprovação humana
O que o servidor impõe:
reinstall_vps,reset_passwordecancel_servicecomtype: immediateexigemconfirmigual ao hostname exato (DELETEtambém serve para reinstalação e redefinição).change_planexigeconfirm: true.- O cancelamento padrão é
end_of_period: o servidor segue até o fim do período pago, eundo_canceldesfaz. - Limites por conta: reinstalação 4/min, redefinição de senha 6/min, energia 20/min, pedidos 20/min. O bastante para um loop não fazer isso cinquenta vezes, não para impedir uma única chamada errada.
Tenha claro o que o confirm é. Ele impede um agente de agir em cima de um «limpa isso aí». Não segura um atacante, porque o hostname está a uma chamada de get_vps_status. A aprovação de verdade fica no seu cliente MCP. A maioria dos clientes consegue perguntar antes de cada chamada: deixe os níveis 0 e 1 rodarem livres e faça o nível 3 sempre perguntar. Em clientes com permissões por ferramenta, como o settings.json do Claude Code (servidor registrado como eqvps):
{
"permissions": {
"ask": ["mcp__eqvps__order_vps", "mcp__eqvps__change_plan", "mcp__eqvps__create_sandbox", "mcp__eqvps__reset_password", "mcp__eqvps__delegate_service"],
"deny": ["mcp__eqvps__reinstall_vps", "mcp__eqvps__cancel_service", "mcp__eqvps__kill_sandbox"]
}
}
Acrescente também uma linha às instruções do agente. Sozinha ela não é um controle de segurança, mas reduz os mal-entendidos (deixe em inglês, os modelos entendem igual):
Never call reinstall_vps, reset_password, cancel_service (type=immediate), change_plan,
order_vps, create_sandbox, kill_sandbox or delegate_service unless the human has typed
the target server's hostname in this conversation for that specific action.
Se o agente entra com um código por e-mail em vez de guardar um token de longa duração, veja login do agente via MCP.
Auditoria: o que dá para ver depois
- Lista de tokens (
GET /auth/tokens, ou Configurações → Tokens de API para agentes): nome, criação, validade,last_used_at. É por isso que vale nomear os tokens por agente. - Histórico do serviço (painel, página do servidor): ações de energia, reinstalações, redefinições de senha, trocas de plano, pagamentos, cada um com horário e autor: você, suporte ou automático. Ele não diz qual token ou delegado agiu, só que a ação veio do seu lado.
- Faturas e saldo: cada cobrança e cada reembolso.
list_delegations: quem tem acesso a quê e até quando.
Essa lacuna no histórico do serviço é o limite honesto da auditoria do lado do servidor hoje. Se você precisa saber qual agente fez o quê, registre cada chamada de ferramenta com os argumentos (sem segredos) do lado do agente.
A configuração que usaríamos
Para um agente que cuida de um servidor de produção:
- Uma conta separada para o agente, saldo zero, o servidor delegado com
expires_days: 90. - O seu token de dono fica com você, fora de qualquer configuração do agente.
- Backups nesse servidor, porque um delegado pode reinstalar.
- Ferramentas de nível 3 em «ask» ou «deny» no cliente.
- O token do agente num arquivo
600, renovado antes de expirar.
Para um agente que precisa pedir servidores ou rodar sandboxes, delegação não basta, porque ele precisa de saldo. Aí o saldo é o seu teto: recarregue por tarefa, dê nome ao token e olhe o last_used_at uma vez por semana. Se um token somente leitura mudaria a forma como você coloca agentes para rodar, conte para nós no suporte: é esse tipo de retorno que decide o que construímos depois.
Comentários
Nenhum comentário ainda. Seja o primeiro.