Public leaderboard

Public assessment

helbertparanhos/easypanel-mcp-server (easypanel-mcp-server)

easypanel-mcp-server · v2.0.0 · scanned

What changed in the harness

Selection accuracy 100→100, token cost up 7%, unconfirmed writes 0%→0%.

Category breakdown

Where the score comes from.

Earned points across the four signals Gradable measures. Safety and Legibility are scored out of 30; Economics and Discoverability are scored out of 20.

01Safety

0.0 / 30

0.0 out of 30
02Legibility

20.4 / 30

20.4 out of 30
03Economics

15.1 / 20

15.1 out of 20
04Discoverability

11.0 / 20

11.0 out of 20

Highest-impact fix

Estimated gain +30 points

Add explicit identity and permission preflight tools

Expose machine-readable principal/tenant confirmation and a non-mutating permission check so agents can verify both before destructive actions.

Description evidence

Defects and rewrites.

31 defects found across the exposed tool descriptions. Suggested rewrites make purpose, inputs, boundaries, and returns easier for an agent to understand.

Tool Defect types Suggested rewrite
create_project
name_restates_behavior no_return_description
Cria um novo projeto vazio no painel Easypanel, que servirá de agrupador para os serviços criados nele depois. O nome deve conter apenas letras minúsculas, números, hífens e underscores (regra do parâmetro projectName). Retorna o resultado da operação, confirmando o projeto criado ou reportando erro.
delete_project
no_return_description
⚠️ DESTRUTIVO — Remove permanentemente o projeto e TODOS os seus serviços e dados. Irreversível. Requer confirm: "CONFIRMO". Retorna o resultado da operação, confirmando a remoção ou reportando erro.
create_service
no_return_description
Cria um novo serviço de app dentro de um projeto existente. Após criar, configure a source com set_source_github ou set_source_image para poder fazer deploy. Retorna o resultado da operação, confirmando o serviço criado ou reportando erro.
rename_service
no_return_description
⚠️ Renomeia ou move um serviço (inclusive para outro projeto). Webhooks, DNS e referências internas que usam o nome antigo deixarão de funcionar. Requer confirm: "CONFIRMO". Retorna o resultado da operação, confirmando a renomeação/movimentação ou reportando erro.
destroy_service
no_return_description
⚠️ DESTRUTIVO — Remove permanentemente o serviço e seus dados. Irreversível. Requer confirm: "CONFIRMO". Retorna o resultado da operação, confirmando a remoção ou reportando erro.
deploy_service
no_return_description
Dispara o deploy do serviço com a configuração atual. Usa o source configurado (GitHub, image, dockerfile). Funciona para serviços app E compose — detecta o tipo e roteia para o namespace certo (não precisa saber de antemão se é compose). Retorna o resultado do disparo do deploy (sucesso ou erro).
start_service
no_return_description
Inicia um serviço que está parado. Funciona para app e compose (em compose, equivale a um redeploy/compose up). Retorna o resultado da inicialização (sucesso ou erro).
stop_service
no_return_description
⚠️ PARA o serviço em produção. Usuários não conseguirão acessar enquanto parado. Requer confirm: "CONFIRMO". Retorna o resultado da parada (sucesso ou erro).
restart_service
no_return_description
Reinicia o serviço. Causa breve indisponibilidade. Funciona para app E compose — em compose, reinicia via redeploy (docker compose up recria os containers). Retorna o resultado do reinício (sucesso ou erro).
set_service_notes
no_return_description
Salva notas/anotações no serviço (markdown suportado). Retorna o resultado do salvamento, confirmando a gravação ou reportando erro.
set_service_resources
no_return_description
Define limites e reservas de CPU e memória do serviço. Envie só os campos que quer alterar — os omitidos mantêm o valor atual (0 = sem limite). Memória em MB, CPU em núcleos (0.5 = meio núcleo). Aplica no próximo deploy/restart. Retorna o resultado da aplicação das alterações (sucesso ou erro).
set_source_github
no_return_description
Configura a source do serviço para um repositório GitHub. O repo deve estar conectado no Easypanel (Settings > GitHub); essa source passa a ser usada nos próximos deploys. Retorna o resultado da configuração (sucesso ou erro).
set_source_image
name_restates_behavior no_return_description
Configura a source do serviço para uma imagem Docker, que passa a ser usada no próximo deploy. Para imagens privadas, informe também username e password do registry; para públicas, basta a image. Retorna o resultado da configuração (sucesso ou erro).
enable_github_deploy
no_return_description
Ativa o auto-deploy via GitHub: a cada push no branch configurado, um deploy é disparado automaticamente. Retorna o resultado da ativação (sucesso ou erro).
disable_github_deploy
no_return_description
Desativa o auto-deploy via GitHub. Deploys precisarão ser disparados manualmente. Retorna o resultado da desativação (sucesso ou erro).
set_env_var
no_return_description
Adiciona ou atualiza UMA variável de ambiente. Lê o estado atual antes de escrever — não apaga outras variáveis. Retorna o resultado da gravação da variável, confirmando o valor salvo ou reportando erro.
delete_env_var
no_return_description
⚠️ Remove a variável de ambiente `key` do serviço. Lê o estado atual das variáveis antes de escrever e confirma a remoção via `confirm: "CONFIRMO"`. Retorna a confirmação da remoção e o estado atualizado das variáveis de ambiente do serviço.
add_domain
no_return_description
Adiciona um domínio customizado ao serviço, mapeando `host` para a porta interna `port` com caminho base `path` (default: /). Cria automaticamente o certificado HTTPS via Let's Encrypt quando `https` é true (default). Retorna o domínio recém-criado com sua configuração (host, porta, HTTPS, path).
remove_domain
no_return_description
⚠️ Remove permanentemente o domínio identificado por `domainId` (obtido via list_domains) do serviço. Após a remoção, o tráfego para esse host deixa de funcionar. Exige `confirm: "CONFIRMO"`. Retorna a confirmação de que o domínio foi removido.
set_primary_domain
no_return_description
Define o domínio identificado por `domainId` (obtido via list_domains) como primário do serviço, passando a ser usado como URL principal. Retorna a confirmação de que o domínio primário foi atualizado.
create_database
no_return_description
Cria um serviço de banco de dados do tipo selecionado (`postgres`, `mysql`, `mariadb`, `mongo` ou `redis`) em um projeto. Se `password` não for informada, uma senha é gerada automaticamente. Após criar, use inspect_database para obter credenciais, porta exposta, connection string e status. Retorna os detalhes de acesso do banco criado (incluindo a senha gerada, quando aplicável, e a connection string).
destroy_database
no_return_description
⚠️ DESTRUTIVO — Remove permanentemente o serviço de banco de dados (`postgres`, `mysql`, `mariadb`, `mongo` ou `redis`) e TODOS os seus dados. A ação é irreversível e exige `confirm: "CONFIRMO"`. Retorna a confirmação de que o banco foi destruído.
prune_docker
no_return_description
Executa um "docker system prune" no servidor inteiro via Easypanel: remove containers parados, redes sem uso, cache de build e imagens não referenciadas para liberar espaço em disco. ⚠️ Ação destrutiva e de escopo GLOBAL (afeta todos os projetos do servidor, não um serviço específico) — exige `confirm: "CONFIRMO"`. Use cleanup_docker_images para uma limpeza mais leve (só imagens não usadas). Retorna o resumo do que foi removido e o espaço em disco liberado.
cleanup_docker_images
no_return_description
Remove do servidor apenas as imagens Docker não utilizadas (dangling/sem container), liberando espaço sem mexer em containers, redes ou volumes. Operação mais leve e segura que prune_docker — imagens podem ser recriadas em um novo deploy. Escopo global do servidor. Retorna a quantidade de imagens removidas e o espaço em disco liberado.
create_mount
no_return_description
Adiciona um volume/mount a um serviço para persistir dados entre deploys. Use type `volume` para volume nomeado gerenciado pelo Docker (com `name`) ou `bind` para mapear um caminho do host (`hostPath`); `mountPath` é o caminho dentro do container. A configuração é aplicada no próximo deploy. ⚠️ Bind mounts de caminhos sensíveis do host exigem `confirm: "CONFIRMO"`. Retorna o mount criado; use list_mounts para ver os mounts existentes do serviço.
create_port
no_return_description
Publica uma porta de um serviço no host (port mapping), expondo-a externamente sem passar pelo proxy/domínio. Mapeia `publishedPort` (porta externa no host) → `targetPort` (porta interna no container) usando `protocol` (default: tcp). Útil para TCP/UDP brutos (bancos, jogos, etc.). Aplica no próximo deploy. ⚠️ Portas privilegiadas (`publishedPort` < 1024, ex: 80/443/22) exigem `confirm: "CONFIRMO"`. Retorna o mapeamento de porta criado; consulte list_ports para a configuração completa.
create_compose
no_return_description
Cria um serviço do tipo Docker Compose em um projeto. Depois use set_compose_file (via trpc_raw) ou o painel para definir o docker-compose, e deploy_compose para subir. Retorna o serviço compose criado, pronto para receber a definição do arquivo compose.
deploy_compose
name_restates_behavior no_return_description
Aplica a configuração atual do serviço Compose executando 'docker compose up' no projeto especificado (projectName, serviceName). Use para aplicar alterações de compose ao serviço já existente sem recriar manualmente o container. Retorna o status/resultado do deploy disparado no serviço.
restart_panel
no_return_description
⚠️ Reinicia o próprio Easypanel. O painel/API ficam brevemente indisponíveis; os serviços hospedados continuam rodando. Requer confirm: "CONFIRMO". Retorna a confirmação de que o reinício foi iniciado.
reboot_server
no_return_description
⚠️ CRÍTICO — Reinicia o SERVIDOR inteiro (máquina host). TODOS os serviços e o painel ficam fora do ar até o boot completar. Use apenas em manutenção planejada. Requer confirm: "CONFIRMO". Retorna a confirmação de que o comando de reboot foi enviado ao servidor.
trpc_raw
no_return_description
Chama diretamente qualquer procedure tRPC do Easypanel (~347 em 43 namespaces) não coberta pelas tools dedicadas. Use para recursos avançados: traefik.*, branding.*, cloudflareTunnel.*, box.*, mariadb.*, volumeBackups.*, databaseBackups.*, etc. Leitura (isMutation=false) é o padrão. ⚠️ Reads podem retornar dados sensíveis (env vars/secrets de qualquer projeto). Para escrita, passe isMutation:true E confirm:"CONFIRMO" — mutations arbitrárias pulam as proteções das tools curadas. Retorna o resultado da procedure chamada, ou seja, os dados devolvidos pela leitura ou a resposta/confirmação da mutation executada.

Selection evidence

Confusable tool pairs.

7 pairs where similar names or overlapping descriptions may send an agent toward the wrong tool.

Tool A Tool B Confidence Why they collide
get_exposed_ports list_ports high Both return a service's published host ports; list_ports explicitly says it 'complements' get_exposed_ports with the full mapping. A task like 'quais portas estão expostas no meu serviço?' maps plausibly to either tool.
get_service_logs get_build_logs medium Both are log retrieval tools. A generic request for 'os logs do serviço' or debugging a failed deploy is ambiguous: get_build_logs returns the last build/deploy logs while get_service_logs returns container runtime logs, and neither description fully disambiguates a vague 'por que o deploy falhou?' task.
deploy_service deploy_compose medium deploy_service openly states it auto-detects whether the service is compose and routes correctly, so a task like 'fazer deploy/subir o serviço' could wrongly trigger deploy_compose for a generic service, or an agent could pick deploy_service when the user explicitly mentions 'subir o compose'.
get_docker_stats get_service_stats medium Both return per-container CPU/memory metrics. A question like 'qual o uso de CPU/memória do meu serviço X?' could wrongly select get_docker_stats (whole-server, no project/service filter) instead of the service-specific get_service_stats, since descriptions overlap heavily.
get_system_stats get_docker_stats medium Both report CPU, memory and network usage. A task like 'como estão os recursos/carga do servidor?' could pick the per-container docker stats instead of the server-level system stats, because both descriptions list the same metric types and neither takes parameters.
get_service_error get_service_logs medium Both are debugging aids for a failing service. A task like 'por que meu serviço está com erro/caindo?' could be answered by either the last registered error or the runtime logs, so the agent may pick the wrong member depending on phrasing.
destroy_service destroy_database medium create_database itself calls a database a 'serviço de banco de dados', so a task like 'apagar/destruir o serviço de banco' could route to the generic destroy_service instead of destroy_database; both are destructive, marked DESTRUTIVO and require CONFIRMO, increasing the chance of mistaking them.

Compare the field

One score is useful.
The evidence makes it actionable.

Back to the leaderboard