MCP Server for Easypanel — full control of projects, services, deploys, env vars, logs, databases, volumes, ports, compose and server maintenance from Claude Code, Cursor and Claude Desktop. 57 tools + raw API access. Supports both API generations (Easypanel <= 2.30 tRPC and >= 2.31 RPC) with auto-detection.
The server has 17 tools with mostly complete schemas and descriptions. Naming follows verb-noun convention consistently (list_, add_, remove_, create_, inspect_, deploy_, exec_in_, get_). Descriptions are present but vary in quality, some are excellent (60-120 chars with clear warnings and use cases), while others are minimal (e.g., list_users at 77 chars, set_primary_domain at 89 chars). Parameters generally have types and descriptions, though some could be more explicit about constraints. Error handling includes confirmation patterns for destructive operations (via guardDestructive guard), but error guidance is minimal. Security is addressed via field whitelisting (list_users strips apiToken/twoFactorSecret) and confirmation keywords, but no formal scope declarations or audit trail patterns. Output schemas are not documented in the tool definitions themselves, responses are constructed dynamically but schema expectations are not declared to the LLM. Overall, this is a solid C+/B- implementation with good fundamentals but gaps in LLM-optimization and downstream chaining support.
Adiciona um domínio customizado ao serviço com HTTPS automático via Let's Encrypt.
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.
Cria um serviço do tipo Docker Compose em um projeto. Depois use set_compose_file (via easypanel_raw) ou o painel para definir o docker-compose, e deploy_compose para subir.
Dispara o deploy (docker compose up) de um serviço Compose com a configuração atual.
Executa um comando dentro do container de um serviço e retorna a saída (stdout/stderr). Use para debugar em runtime: inspecionar arquivos, checar variáveis, testar conectividade, rodar migrations, etc. Roda no primeiro container do serviço (ou no containerId informado). ⚠️ Executa comandos arbitrários — comandos potencialmente destrutivos (rm -rf, dd, mkfs, shutdown, kill, pipe para shell, etc.) exigem confirm: "CONFIRMO".
Output schemas not declared in tool definitions. Tool descriptions document what is returned narratively (e.g., 'retorna a configuração') but LLMs lack structured schema information to plan downstream chaining or validate responses. No documented field names, types, or pagination metadata.
Several read-only list tools lack pagination (limit, offset, page, next_cursor). Results are unbounded, risking large JSON responses that waste tokens. No documented size caps. Tools: list_users, list_certificates, list_nodes, list_domains, list_containers, get_docker_events.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 64 | 2026-07-28+ | v2 |
Captura eventos Docker do servidor em tempo real durante uma janela curta (~8s) — start, stop, kill, die, exec, health_status, etc. Use para investigar reinícios e falhas. Obs: só mostra eventos que ocorrem durante a captura (não há histórico); um servidor ocioso pode retornar vazio.
Retorna a configuração de um serviço Docker Compose: arquivo compose, env, source e estado. Use antes de qualquer alteração.
Lista os certificados SSL/TLS gerenciados pelo Easypanel (domínios cobertos, emissor, validade). Use para auditar HTTPS e renovações.
Lista os containers Docker em execução de um serviço (ID, nome, imagem, comando, status, portas). Use para descobrir o container antes de exec_in_container ou para checar se o serviço está rodando.
Lista todos os domínios configurados em um serviço.
Lista os nós do cluster Docker Swarm gerenciado pelo Easypanel (manager/worker, status, disponibilidade). Em servidor único retorna apenas o nó local.
Lista os usuários do painel Easypanel (admin, e-mails, papéis).
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).
⚠️ 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".
⚠️ Remove permanentemente um domínio. O tráfego para esse host parará de funcionar. Requer confirm: "CONFIRMO".
⚠️ Reinicia o próprio Easypanel. O painel/API ficam brevemente indisponíveis; os serviços hospedados continuam rodando. Requer confirm: "CONFIRMO".
Define qual domínio é o primário (usado como URL principal do serviço).
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) in tool definitions. Clients and LLMs cannot quickly classify tool safety. Destructive operations are marked with ⚠️ emoji in description text instead of structured metadata.
Descriptions for simple read-only tools are under 100 chars and lack 'when to use' context. E.g., list_users (77 chars), set_primary_domain (89 chars). LLMs benefit from 50-200 char descriptions explaining use cases and when to call vs. similar tools.
Error handling minimal. Code uses guardDestructive() for confirmation gates but provides only a user-facing message, no structured error codes, categories, or recovery guidance. LLMs receive plain text; no recovery patterns like 'try search_users() first' or categorization (retryable vs. user-fixable vs. fatal).
No scope/permission declarations. Tools do not declare required permissions (e.g., 'admin:users', 'write:services'). Cannot audit least-privilege configurations or inform LLMs of authorization requirements.
No rate limiting or timeout specifications. Tools calling external APIs (Easypanel client queries) have no documented SLA or timeout. Runaway agents could overwhelm the Easypanel API.
Parameter 'confirm' in destructive tools is free-form string (no enum constraint). While the description states it must be 'CONFIRMO', no formal JSON Schema enum exists. LLMs could pass any string and be told 'confirmation failed', wasting a round-trip.