Skip to main content
Glama

EasyPanel MCP Server

Quality Python Version MCP Protocol EasyPanel Compatible License Platform

Documentación · Inicio rápido · Reportar un problema

Servidor de Model Context Protocol (MCP) para EasyPanel. Este conector permite a clientes de inteligencia artificial y entornos de automatización gestionar infraestructura, desplegar servicios, configurar redes y monitorear recursos mediante la API tRPC de EasyPanel en lenguaje natural.


Descripción General

Este servidor implementa el estándar abierto Model Context Protocol (MCP) y utiliza la línea estable v2 del SDK oficial de Python. Permite a agentes de IA interactuar con una instancia de EasyPanel desde un cliente configurado, automatizando tareas complejas de administración de servidores, despliegues y diagnósticos.

Características Principales

  • Gestión Completa de Servicios: Listado, inspección, creación, actualización, detención y reinicio de aplicaciones y bases de datos.

  • Manejo Inteligente de Recursos: Detección automática y ruteo de namespaces tRPC según el tipo de servicio (app, postgres, redis, mysql, mongodb, mariadb).

  • Auto-Scaling Automatizado: Escalado vertical de CPU y memoria basado en métricas y límites definidos.

  • Análisis y Debugging: Recuperación de logs estructurados e información de despliegue para auditoría y diagnóstico de fallos en tiempo real.

  • Descubrimiento de Redes: Análisis automático de topologías de comunicación interna y pública de Docker.

  • Soporte Multicliente: Transporte local stdio, transporte remoto moderno Streamable HTTP y compatibilidad explícita con SSE.


Related MCP server: Docker Manager MCP

Instalación y Configuración

1. Clonar el repositorio

git clone https://github.com/dannymaaz/easypanel-mcp
cd easypanel-mcp

2. Configurar el entorno virtual e instalar

Recomendamos usar un entorno virtual para aislar las dependencias e instalar el proyecto en modo editable. Esto utiliza pyproject.toml, instala las dependencias compatibles y registra el comando easypanel-mcp.

En Windows (PowerShell):

python -m venv venv
.\venv\Scripts\Activate.ps1
python -m pip install -e .

En macOS / Linux:

python3 -m venv venv
source venv/bin/activate
python -m pip install -e .

requirements.txt se mantiene disponible para instalaciones tradicionales, pero la instalación mediante pyproject.toml es la recomendada para desarrollo y para clientes MCP locales.

3. Configurar variables de entorno

Crea un archivo .env en la raíz del proyecto basándote en el ejemplo provisto:

cp .env.example .env

Edita el archivo .env configurando los accesos a tu EasyPanel:

# URL de acceso a tu instancia (ej. https://panel.tudominio.com)
EASYPANEL_URL=https://tu-easypanel.com

# Token de API o credenciales en formato email:password
EASYPANEL_API_KEY=tu_api_key_aqui

# Parámetros adicionales
EASYPANEL_TIMEOUT=30
EASYPANEL_VERIFY_SSL=true

# Configuración del servidor MCP
MCP_HOST=127.0.0.1
MCP_PORT=8080
MCP_LOG_LEVEL=INFO

4. Verificar el arranque

Con el entorno virtual activo puedes iniciar el servidor mediante el entrypoint instalado:

easypanel-mcp

También se mantiene soportada la ejecución directa por ruta absoluta a src/server.py. El servidor resuelve sus imports relativos al repositorio, por lo que los clientes MCP no necesitan configurar PYTHONPATH ni arrancar desde la raíz del proyecto.


Configuración en Clientes MCP

1. Antigravity IDE

Para integrar el servidor en Antigravity, añade la ruta del script en la configuración del gestor de plugins de MCP.

Asegúrate de apuntar al ejecutable de Python de tu entorno virtual (venv) para que localice las dependencias instaladas:

{
  "mcpServers": {
    "easypanel-mcp": {
      "command": "C:\\ruta\\a\\easypanel-mcp\\venv\\Scripts\\python.exe",
      "args": ["C:\\ruta\\a\\easypanel-mcp\\src\\server.py"],
      "env": {
        "EASYPANEL_URL": "https://tu-easypanel.com",
        "EASYPANEL_API_KEY": "tu_api_key"
      }
    }
  }
}

2. Cursor / VS Code (Extensiones Cline & Roo Code)

En editores compatibles con OpenCode o extensiones de agentes inteligentes:

  1. Abre el panel de configuración de la extensión (ej. en Roo Code, ve a Settings > MCP Servers).

  2. Añade una nueva configuración de servidor:

    • Name: easypanel

    • Type: command

    • Command: python (o la ruta al ejecutable de tu venv)

    • Args: ["/ruta/absoluta/a/easypanel-mcp/src/server.py"]

    • Environment Variables:

      • EASYPANEL_URL: https://tu-easypanel.com

      • EASYPANEL_API_KEY: tu_api_key

3. Claude Desktop

Añade el servidor al archivo de configuración de Claude Desktop (claude_desktop_config.json):

En Windows: %APPDATA%\Claude\claude_desktop_config.json
En macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

{
  "mcpServers": {
    "easypanel-mcp": {
      "command": "python",
      "args": ["/ruta/absoluta/a/easypanel-mcp/src/server.py"],
      "env": {
        "EASYPANEL_URL": "https://tu-easypanel.com",
        "EASYPANEL_API_KEY": "tu_api_key"
      }
    }
  }
}

4. n8n y clientes remotos (Streamable HTTP)

Para desplegar el servidor como servicio MCP remoto, inicia el transporte Streamable HTTP:

easypanel-mcp http

También puedes utilizar:

python src/server.py http

El endpoint MCP queda disponible en:

http://127.0.0.1:8080/mcp

Configura ese endpoint en un cliente compatible con MCP, por ejemplo un nodo MCP Client/MCP Client Tool de n8n. El cliente MCP se encarga de la negociación del protocolo, descubrimiento de tools y llamadas JSON-RPC.

Si necesitas mantener una integración antigua basada en Server-Sent Events, SSE continúa disponible de forma explícita:

easypanel-mcp sse

Ejemplos Prácticos de Uso

Una vez conectado, puedes interactuar directamente con tu agente haciéndole peticiones de infraestructura basadas en la vida real:

Despliegue de Aplicaciones

Usuario: "Despliega un servicio frontend usando la imagen nginx:alpine en el proyecto principal."
IA (Interno): Invoca create_service(name="frontend", project_id="principal", image="nginx:alpine") y posteriormente deploy_service.
IA (Respuesta): "He creado y desplegado el servicio 'frontend' exitosamente en tu proyecto. Está listo para recibir configuración de dominio."

Diagnóstico de Caídas

Usuario: "¿Por qué el servicio backend está fallando?"
IA (Interno): Invoca get_service_logs(service_id="backend").
IA (Respuesta): "El servicio backend reporta un estado 'crashed' debido al siguiente error en consola: 'ConnectionRefusedError: No se pudo establecer conexión con redis-cache en el puerto 6379'. ¿Deseas que verifique si el contenedor de Redis está detenido?"

Monitoreo y Escalado

Usuario: "Verifica las estadísticas del sistema y escala el servicio backend si el uso de CPU es alto."
IA (Interno): Invoca get_system_stats() seguido de scale_service(service_id="backend", cpu=2, memory=4096).


Herramientas Disponibles

Categoría

Herramienta

Parámetros

Descripción

Servicios

list_services

project_id (opcional)

Lista todos los servicios y sus estados.

get_service

service_id (requerido)

Obtiene la configuración detallada de un servicio.

create_service

name, project_id, image, config

Crea un nuevo servicio (soporta apps y DBs).

update_service

service_id, config

Modifica configuraciones de entorno, puertos y recursos.

delete_service

service_id

Remueve un servicio de EasyPanel.

restart_service

service_id

Reinicia de inmediato el contenedor de la aplicación.

get_service_logs

service_id, lines (opcional)

Obtiene los últimos logs de consola del contenedor.

Despliegues

list_deployments

project_id (opcional)

Lista el historial de despliegues.

create_deployment

project_id, service_id, image

Lanza un nuevo despliegue actualizando la imagen.

Redes

list_networks

-

Descubre la topología de red Docker pública/interna.

Proyectos

list_projects

-

Lista los proyectos creados en la instancia.

create_project

name, description (opcional)

Crea un nuevo proyecto organizador.

Monitoreo

get_system_stats

-

Obtiene estadísticas en tiempo real de CPU, RAM y disco.

Escalado

scale_service

service_id, cpu, memory

Escala verticalmente los recursos asignados.

auto_scale_service

service_id, cpu_threshold, memory_threshold

Escala dinámicamente según la carga actual.

Seguridad

list_domains

-

Lista los dominios asignados en la instancia.

get_public_key

-

Obtiene la clave SSH pública para despliegues Git.


Seguridad

  • Guarda EASYPANEL_API_KEY únicamente en variables de entorno o gestores de secretos; nunca la publiques ni la confirmes en Git.

  • Usa una cuenta o token con los permisos mínimos necesarios para las tareas que vayas a ejecutar.

  • Revisa las acciones destructivas propuestas por el agente antes de ejecutarlas.

  • Para reportar una vulnerabilidad, consulta SECURITY.md y evita publicar credenciales o detalles sensibles en issues públicos.


Verificación del Entorno

Para verificar la conectividad de la API y el estado de la configuración sin arrancar el servidor MCP completo, puedes ejecutar la suite de pruebas unitarias:

python -m pytest tests/test_basic.py -v

Autor


Licencia

Este proyecto está bajo la Licencia MIT. Consulta el archivo LICENSE para más detalles.

Available Tools

29 tools
auto_scale_serviceA

Auto-scale a service based on current system resource usage. Doubles CPU and/or memory (capped at max_cpu/max_memory) when usage exceeds the given thresholds; otherwise makes no change.

Args: service_id: Service ID cpu_threshold: CPU usage % above which to scale up memory_threshold: Memory usage % above which to scale up max_cpu: Maximum CPU cores to scale to max_memory: Maximum memory (MB) to scale to

Inputs: service_id (required), max_cpu, max_memory, cpu_threshold, +1 more. Returns: object

create_deploymentC

Create a new deployment in EasyPanel.

Args: project_id: Project ID service_id: Service ID image: Docker image to deploy config: Additional deployment configuration

Inputs: image (required), project_id (required), service_id (required), config. Returns: object

create_domainA

Create a new domain, optionally bound to a service.

Args: name: Domain name (e.g. app.example.com) service_id: Optional service ID to attach the domain to

Inputs: name (required), service_id. Returns: object

create_networkA
Read-only

Advisory helper for network creation.

IMPORTANT: EasyPanel creates and manages Docker networks automatically when services are deployed; there is no API to create one directly. This tool does NOT create anything — it returns guidance. To isolate services, set internal=true when creating the service instead.

Args: name: Network name internal: Whether the network is internal (isolated from internet) driver: Network driver (overlay, bridge, etc.)

Inputs: name (required), driver, internal. Returns: object

create_projectB

Create a new project in EasyPanel.

Args: name: Project name description: Project description

Inputs: name (required), description. Returns: object

create_serviceA

Create a new service in EasyPanel.

Args: name: Service name project_id: Project ID image: Docker image (e.g., nginx:latest, postgres:15) config: Additional configuration (ports, env vars, volumes, etc.)

Inputs: name (required), image (required), project_id (required), config. Returns: object

delete_networkA
Read-only

Advisory helper for network deletion.

IMPORTANT: EasyPanel removes a network automatically once all services in it are deleted; there is no API to delete one directly. This tool does NOT delete anything — it returns guidance.

Args: network_id: Network ID

Inputs: network_id (required). Returns: object

delete_projectA
DestructiveIdempotent

Delete a project from EasyPanel, including all its services. This is destructive and cannot be undone.

Args: project_id: Project ID

Inputs: project_id (required). Returns: object

delete_serviceA
DestructiveIdempotent

Delete a service from EasyPanel. This is destructive and cannot be undone.

Args: service_id: Service ID

Inputs: service_id (required). Returns: object

deploy_serviceA

Deploy / redeploy a service (pulls the latest source/image and restarts).

Args: service_id: Service ID

Inputs: service_id (required). Returns: object

get_deploymentA

Get detailed information about a specific deployment.

Args: deployment_id: Deployment ID

Inputs: deployment_id (required). Returns: object

get_deployment_logsC

Get logs from a deployment.

Args: deployment_id: Deployment ID

Inputs: deployment_id (required). Returns: object

get_projectB
Read-only

Get detailed information about a specific project.

Args: project_id: Project ID

Inputs: project_id (required). Returns: object

get_server_ipA
Read-only

Get the server's public IP address.

Inputs: no named parameters. Returns: object

get_serviceB
Read-only

Get detailed information about a specific service.

Args: service_id: Service ID

Inputs: service_id (required). Returns: object

get_service_logsA
Read-only

Get a status/diagnostics summary for a service.

Note: EasyPanel's tRPC API does not expose raw container log streaming, so this returns a structured status summary (state, deployment status, resources, errors) derived from service inspection.

Args: service_id: Service ID lines: Reserved for future raw-log support (currently unused)

Inputs: service_id (required), lines. Returns: object

get_service_statsA
Read-only

Get per-service runtime statistics.

Inputs: no named parameters. Returns: object

get_system_statsA
Read-only

Get host system statistics (CPU, memory, disk, uptime).

Inputs: no named parameters. Returns: object

health_checkA
Read-only

Check whether the EasyPanel API is reachable and the session is valid.

Inputs: no named parameters. Returns: object

list_deploymentsA

List all deployments in EasyPanel, optionally filtered by project.

Args: project_id: Optional project ID to filter deployments

Inputs: project_id. Returns: object

list_domainsA
Read-only

List domains, optionally filtered by service.

Args: service_id: Optional service ID to filter domains

Inputs: service_id. Returns: object

list_networksA
Read-only

Analyze network topology in EasyPanel.

Note: EasyPanel manages Docker networks automatically and does not expose them via the tRPC API, so this infers a per-project topology (internal vs public services) from the services' port configuration.

Inputs: no named parameters. Returns: object

list_projectsA
Read-only

List all projects in EasyPanel.

Inputs: no named parameters. Returns: object

list_servicesA
Read-only

List all services in EasyPanel, optionally filtered by project.

Args: project_id: Optional project ID to filter services

Inputs: project_id. Returns: object

restart_serviceC

Restart a service.

Args: service_id: Service ID

Inputs: service_id (required). Returns: object

scale_serviceB
Idempotent

Vertically scale a service's resources.

Args: service_id: Service ID cpu: New CPU limit (cores) memory: New memory limit (MB)

Inputs: service_id (required), cpu, memory. Returns: object

start_serviceA
Idempotent

Start a stopped service.

Args: service_id: Service ID

Inputs: service_id (required). Returns: object

stop_serviceA
DestructiveIdempotent

Stop a running service (takes it offline until started again).

Args: service_id: Service ID

Inputs: service_id (required). Returns: object

update_serviceC
Idempotent

Update service configuration.

Args: service_id: Service ID config: New configuration settings

Inputs: config (required), service_id (required). Returns: object

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3.2/5.0

    Scored across 29 tools

    Disambiguation4/5

    Most tools map cleanly to a resource and action, and service lifecycle tools (start/stop/restart/deploy) are distinguishable. A few names are misleading — create_network/delete_network are advisory no-ops, and get_service_logs returns a status summary rather than actual logs.

    Naming Consistency4/5

    The set overwhelmingly follows snake_case verb_noun naming (list_services, get_project, create_deployment). Minor deviations like health_check and the auto_ prefix in auto_scale_service keep it from being perfectly uniform.

    Tool Count2/5

    At 29 tools, the server is above the heavy threshold, and several tools are placeholder/advisory helpers (create_network, delete_network) or near-duplicate diagnostics (get_service_logs vs get_service). The core management operations could be delivered with a leaner set.

    Completeness3/5

    Service CRUD and lifecycle are well covered, and projects/deployments have basic coverage. However, domains only support list/create with no delete/update, networks are non-functional, and there is no project update or deployment rollback/delete.

    Maintenance

    ActivityStale
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      D
      maintenance
      Enables natural language management of Docker containers, images, networks, and volumes with support for both local and remote Docker engines. Features automated container composition, debugging capabilities, and persistent data management through an intuitive conversational interface.
      GPL 3.0
    • A
      license
      Not graded
      quality
      D
      maintenance
      Enables AI assistants to manage Docker containers, deploy stacks, and monitor services across multiple Docker hosts from one centralized location. Supports container lifecycle management, Docker Compose operations, and infrastructure orchestration through natural language commands.
      6
      MIT
    • A
      license
      C
      quality
      D
      maintenance
      Enables AI agents to manage server infrastructure through the 1Panel API, including Docker containers, databases, and system monitoring. It provides tools for website management, file operations, and application deployment via natural language commands.
      15
      35 npm
      MIT
    • A
      license
      B
      quality
      D
      maintenance
      Enables AI assistants to manage Docker containers and Kubernetes resources through natural language, supporting operations like container management, image building, and pod/deployment/service management.
      9
      MIT